| 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 |