Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: gpu/command_buffer/tests/gl_map_buffer_range_unittest.cc

Issue 2435803004: Initialize buffers before allowing access to them. (Closed)
Patch Set: win failure Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <GLES2/gl2.h> 5 #include <GLES2/gl2.h>
6 #include <GLES2/gl2ext.h> 6 #include <GLES2/gl2ext.h>
7 #include <GLES2/gl2extchromium.h> 7 #include <GLES2/gl2extchromium.h>
8 #include <GLES3/gl3.h> 8 #include <GLES3/gl3.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); 132 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
133 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, 133 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
134 kBlackColor)); 134 kBlackColor));
135 135
136 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 136 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
137 glDrawArraysInstancedANGLE(GL_TRIANGLES, 0, 6, kPrimCount); 137 glDrawArraysInstancedANGLE(GL_TRIANGLES, 0, 6, kPrimCount);
138 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); 138 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
139 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, 139 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
140 kBlackColor)); 140 kBlackColor));
141 141
142 // The following test is necessary to make sure draw calls do not just check
143 // bound buffers, but actual buffers that are attached to the enabled vertex
144 // attribs.
145 glBindBuffer(GL_ARRAY_BUFFER, 0);
146
147 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
148 glDrawArrays(GL_TRIANGLES, 0, 6);
149 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
150 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
151 kBlackColor));
152
153 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
154 glDrawArraysInstancedANGLE(GL_TRIANGLES, 0, 6, kPrimCount);
155 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
156 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
157 kBlackColor));
158
159 glBindBuffer(GL_ARRAY_BUFFER, buffer);
142 glUnmapBuffer(GL_ARRAY_BUFFER); 160 glUnmapBuffer(GL_ARRAY_BUFFER);
143 GLTestHelper::CheckGLError("no errors", __LINE__); 161 GLTestHelper::CheckGLError("no errors", __LINE__);
144 162
145 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 163 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
146 glDrawArrays(GL_TRIANGLES, 0, 6); 164 glDrawArrays(GL_TRIANGLES, 0, 6);
147 GLTestHelper::CheckGLError("no errors", __LINE__); 165 GLTestHelper::CheckGLError("no errors", __LINE__);
148 EXPECT_TRUE( 166 EXPECT_TRUE(
149 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor)); 167 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor));
150 168
151 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 169 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, 215 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
198 kBlackColor)); 216 kBlackColor));
199 217
200 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 218 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
201 glDrawElementsInstancedANGLE(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0, 219 glDrawElementsInstancedANGLE(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0,
202 kPrimCount); 220 kPrimCount);
203 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); 221 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
204 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, 222 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
205 kBlackColor)); 223 kBlackColor));
206 224
225 // The following test is necessary to make sure draw calls do not just check
226 // bound buffers, but actual buffers that are attached to the enabled vertex
227 // attribs.
228 glBindBuffer(GL_ARRAY_BUFFER, 0);
229
230 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
231 glDrawArrays(GL_TRIANGLES, 0, 6);
232 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
233 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
234 kBlackColor));
235
236 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
237 glDrawElementsInstancedANGLE(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0,
238 kPrimCount);
239 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
240 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1,
241 kBlackColor));
242
243 glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
244
207 glUnmapBuffer(GL_ARRAY_BUFFER); 245 glUnmapBuffer(GL_ARRAY_BUFFER);
208 GLTestHelper::CheckGLError("no errors", __LINE__); 246 GLTestHelper::CheckGLError("no errors", __LINE__);
209 247
210 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 248 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
211 glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0); 249 glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0);
212 GLTestHelper::CheckGLError("no errors", __LINE__); 250 GLTestHelper::CheckGLError("no errors", __LINE__);
213 EXPECT_TRUE( 251 EXPECT_TRUE(
214 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor)); 252 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor));
215 253
216 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 254 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 kTextureSize, GL_RGBA, GL_UNSIGNED_BYTE, 0); 406 kTextureSize, GL_RGBA, GL_UNSIGNED_BYTE, 0);
369 GLTestHelper::CheckGLError("no errors", __LINE__); 407 GLTestHelper::CheckGLError("no errors", __LINE__);
370 } 408 }
371 409
372 // TODO(zmo): Add tests for CompressedTex* functions. 410 // TODO(zmo): Add tests for CompressedTex* functions.
373 411
374 TEST_F(ES3MapBufferRangeTest, TransformFeedback) { 412 TEST_F(ES3MapBufferRangeTest, TransformFeedback) {
375 if (ShouldSkipTest()) 413 if (ShouldSkipTest())
376 return; 414 return;
377 415
416 GLuint transform_feedback = 0;
417 glGenTransformFeedbacks(1, &transform_feedback);
418 glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transform_feedback);
419 GLTestHelper::CheckGLError("no errors", __LINE__);
420
378 GLuint transform_feedback_buffer[2]; 421 GLuint transform_feedback_buffer[2];
379 glGenBuffers(2, transform_feedback_buffer); 422 glGenBuffers(2, transform_feedback_buffer);
380 EXPECT_LT(0u, transform_feedback_buffer[0]); 423 EXPECT_LT(0u, transform_feedback_buffer[0]);
381 EXPECT_LT(0u, transform_feedback_buffer[1]); 424 EXPECT_LT(0u, transform_feedback_buffer[1]);
382 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 425 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0,
383 transform_feedback_buffer[0]); 426 transform_feedback_buffer[0]);
384 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 3 * 6 * sizeof(float), 0, 427 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 3 * 6 * sizeof(float), 0,
385 GL_STATIC_READ); 428 GL_STATIC_READ);
386 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1, 429 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1,
387 transform_feedback_buffer[1]); 430 transform_feedback_buffer[1]);
388 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 2 * 6 * sizeof(float), 0, 431 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 2 * 6 * sizeof(float), 0,
389 GL_STATIC_READ); 432 GL_STATIC_READ);
390 GLTestHelper::CheckGLError("no errors", __LINE__); 433 GLTestHelper::CheckGLError("no errors", __LINE__);
391 434
392 GLint position_loc = 0; 435 GLint position_loc = 0;
393 SetupTransformFeedbackProgram(&position_loc); 436 SetupTransformFeedbackProgram(&position_loc);
394 GLTestHelper::CheckGLError("no errors", __LINE__); 437 GLTestHelper::CheckGLError("no errors", __LINE__);
395 438
396 GLuint buffer = GLTestHelper::SetupUnitQuad(position_loc); 439 GLuint buffer = GLTestHelper::SetupUnitQuad(position_loc);
397 GLTestHelper::CheckGLError("no errors", __LINE__); 440 GLTestHelper::CheckGLError("no errors", __LINE__);
398 EXPECT_LT(0u, buffer); 441 EXPECT_LT(0u, buffer);
399 442
400 GLuint transform_feedback = 0;
401 glGenTransformFeedbacks(1, &transform_feedback);
402 GLTestHelper::CheckGLError("no errors", __LINE__);
403
404 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); 443 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT);
405 GLTestHelper::CheckGLError("no errors", __LINE__); 444 GLTestHelper::CheckGLError("no errors", __LINE__);
406 445
407 glBeginTransformFeedback(GL_TRIANGLES); 446 glBeginTransformFeedback(GL_TRIANGLES);
408 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); 447 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
409 448
410 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); 449 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER);
411 GLTestHelper::CheckGLError("no errors", __LINE__); 450 GLTestHelper::CheckGLError("no errors", __LINE__);
412 451
413 glBeginTransformFeedback(GL_TRIANGLES); 452 glBeginTransformFeedback(GL_TRIANGLES);
414 GLTestHelper::CheckGLError("no errors", __LINE__); 453 GLTestHelper::CheckGLError("no errors", __LINE__);
415 454
416 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); 455 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT);
417 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); 456 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
418 457
458 // Bind the used buffer to another binding target and try to map it using
459 // that target - should still fail.
460 glBindBuffer(GL_PIXEL_PACK_BUFFER, transform_feedback_buffer[0]);
461 GLTestHelper::CheckGLError("no errors", __LINE__);
462
463 glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, 6, GL_MAP_READ_BIT);
464 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
465
419 glDrawArrays(GL_TRIANGLES, 0, 6); 466 glDrawArrays(GL_TRIANGLES, 0, 6);
420 glEndTransformFeedback(); 467 glEndTransformFeedback();
421 GLTestHelper::CheckGLError("no errors", __LINE__); 468 GLTestHelper::CheckGLError("no errors", __LINE__);
422 469
423 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); 470 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT);
424 GLTestHelper::CheckGLError("no errors", __LINE__); 471 GLTestHelper::CheckGLError("no errors", __LINE__);
425 472
426 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); 473 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER);
427 GLTestHelper::CheckGLError("no errors", __LINE__); 474 GLTestHelper::CheckGLError("no errors", __LINE__);
428 } 475 }
429 476
430 // TODO(zmo): add tests for uniform buffer mapping. 477 // TODO(zmo): add tests for uniform buffer mapping.
431 478
432 // TODO(zmo): add tests for CopyBufferSubData case. 479 // TODO(zmo): add tests for CopyBufferSubData case.
433 480
434 } // namespace gpu 481 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698