| 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); | |
| 160 glUnmapBuffer(GL_ARRAY_BUFFER); | 142 glUnmapBuffer(GL_ARRAY_BUFFER); |
| 161 GLTestHelper::CheckGLError("no errors", __LINE__); | 143 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 162 | 144 |
| 163 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 145 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| 164 glDrawArrays(GL_TRIANGLES, 0, 6); | 146 glDrawArrays(GL_TRIANGLES, 0, 6); |
| 165 GLTestHelper::CheckGLError("no errors", __LINE__); | 147 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 166 EXPECT_TRUE( | 148 EXPECT_TRUE( |
| 167 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor)); | 149 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor)); |
| 168 | 150 |
| 169 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 151 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, | 197 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, |
| 216 kBlackColor)); | 198 kBlackColor)); |
| 217 | 199 |
| 218 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 200 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| 219 glDrawElementsInstancedANGLE(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0, | 201 glDrawElementsInstancedANGLE(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0, |
| 220 kPrimCount); | 202 kPrimCount); |
| 221 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); | 203 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); |
| 222 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, | 204 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, |
| 223 kBlackColor)); | 205 kBlackColor)); |
| 224 | 206 |
| 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 | |
| 245 glUnmapBuffer(GL_ARRAY_BUFFER); | 207 glUnmapBuffer(GL_ARRAY_BUFFER); |
| 246 GLTestHelper::CheckGLError("no errors", __LINE__); | 208 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 247 | 209 |
| 248 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 210 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| 249 glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0); | 211 glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, 0); |
| 250 GLTestHelper::CheckGLError("no errors", __LINE__); | 212 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 251 EXPECT_TRUE( | 213 EXPECT_TRUE( |
| 252 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor)); | 214 GLTestHelper::CheckPixels(0, 0, kCanvasSize, kCanvasSize, 1, kRedColor)); |
| 253 | 215 |
| 254 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 216 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 kTextureSize, GL_RGBA, GL_UNSIGNED_BYTE, 0); | 368 kTextureSize, GL_RGBA, GL_UNSIGNED_BYTE, 0); |
| 407 GLTestHelper::CheckGLError("no errors", __LINE__); | 369 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 408 } | 370 } |
| 409 | 371 |
| 410 // TODO(zmo): Add tests for CompressedTex* functions. | 372 // TODO(zmo): Add tests for CompressedTex* functions. |
| 411 | 373 |
| 412 TEST_F(ES3MapBufferRangeTest, TransformFeedback) { | 374 TEST_F(ES3MapBufferRangeTest, TransformFeedback) { |
| 413 if (ShouldSkipTest()) | 375 if (ShouldSkipTest()) |
| 414 return; | 376 return; |
| 415 | 377 |
| 416 GLuint transform_feedback = 0; | |
| 417 glGenTransformFeedbacks(1, &transform_feedback); | |
| 418 glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transform_feedback); | |
| 419 GLTestHelper::CheckGLError("no errors", __LINE__); | |
| 420 | |
| 421 GLuint transform_feedback_buffer[2]; | 378 GLuint transform_feedback_buffer[2]; |
| 422 glGenBuffers(2, transform_feedback_buffer); | 379 glGenBuffers(2, transform_feedback_buffer); |
| 423 EXPECT_LT(0u, transform_feedback_buffer[0]); | 380 EXPECT_LT(0u, transform_feedback_buffer[0]); |
| 424 EXPECT_LT(0u, transform_feedback_buffer[1]); | 381 EXPECT_LT(0u, transform_feedback_buffer[1]); |
| 425 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, | 382 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, |
| 426 transform_feedback_buffer[0]); | 383 transform_feedback_buffer[0]); |
| 427 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 3 * 6 * sizeof(float), 0, | 384 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 3 * 6 * sizeof(float), 0, |
| 428 GL_STATIC_READ); | 385 GL_STATIC_READ); |
| 429 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1, | 386 glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1, |
| 430 transform_feedback_buffer[1]); | 387 transform_feedback_buffer[1]); |
| 431 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 2 * 6 * sizeof(float), 0, | 388 glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 2 * 6 * sizeof(float), 0, |
| 432 GL_STATIC_READ); | 389 GL_STATIC_READ); |
| 433 GLTestHelper::CheckGLError("no errors", __LINE__); | 390 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 434 | 391 |
| 435 GLint position_loc = 0; | 392 GLint position_loc = 0; |
| 436 SetupTransformFeedbackProgram(&position_loc); | 393 SetupTransformFeedbackProgram(&position_loc); |
| 437 GLTestHelper::CheckGLError("no errors", __LINE__); | 394 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 438 | 395 |
| 439 GLuint buffer = GLTestHelper::SetupUnitQuad(position_loc); | 396 GLuint buffer = GLTestHelper::SetupUnitQuad(position_loc); |
| 440 GLTestHelper::CheckGLError("no errors", __LINE__); | 397 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 441 EXPECT_LT(0u, buffer); | 398 EXPECT_LT(0u, buffer); |
| 442 | 399 |
| 400 GLuint transform_feedback = 0; |
| 401 glGenTransformFeedbacks(1, &transform_feedback); |
| 402 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 403 |
| 443 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); | 404 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); |
| 444 GLTestHelper::CheckGLError("no errors", __LINE__); | 405 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 445 | 406 |
| 446 glBeginTransformFeedback(GL_TRIANGLES); | 407 glBeginTransformFeedback(GL_TRIANGLES); |
| 447 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); | 408 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); |
| 448 | 409 |
| 449 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); | 410 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); |
| 450 GLTestHelper::CheckGLError("no errors", __LINE__); | 411 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 451 | 412 |
| 452 glBeginTransformFeedback(GL_TRIANGLES); | 413 glBeginTransformFeedback(GL_TRIANGLES); |
| 453 GLTestHelper::CheckGLError("no errors", __LINE__); | 414 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 454 | 415 |
| 455 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); | 416 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); |
| 456 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); | 417 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); |
| 457 | 418 |
| 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 | |
| 466 glDrawArrays(GL_TRIANGLES, 0, 6); | 419 glDrawArrays(GL_TRIANGLES, 0, 6); |
| 467 glEndTransformFeedback(); | 420 glEndTransformFeedback(); |
| 468 GLTestHelper::CheckGLError("no errors", __LINE__); | 421 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 469 | 422 |
| 470 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); | 423 glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 6, GL_MAP_WRITE_BIT); |
| 471 GLTestHelper::CheckGLError("no errors", __LINE__); | 424 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 472 | 425 |
| 473 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); | 426 glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); |
| 474 GLTestHelper::CheckGLError("no errors", __LINE__); | 427 GLTestHelper::CheckGLError("no errors", __LINE__); |
| 475 } | 428 } |
| 476 | 429 |
| 477 // TODO(zmo): add tests for uniform buffer mapping. | 430 // TODO(zmo): add tests for uniform buffer mapping. |
| 478 | 431 |
| 479 // TODO(zmo): add tests for CopyBufferSubData case. | 432 // TODO(zmo): add tests for CopyBufferSubData case. |
| 480 | 433 |
| 481 } // namespace gpu | 434 } // namespace gpu |
| OLD | NEW |