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 |