OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |