OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 using ::testing::SaveArg; | 41 using ::testing::SaveArg; |
42 using ::testing::SetArrayArgument; | 42 using ::testing::SetArrayArgument; |
43 using ::testing::SetArgumentPointee; | 43 using ::testing::SetArgumentPointee; |
44 using ::testing::SetArgPointee; | 44 using ::testing::SetArgPointee; |
45 using ::testing::StrEq; | 45 using ::testing::StrEq; |
46 using ::testing::StrictMock; | 46 using ::testing::StrictMock; |
47 | 47 |
48 namespace gpu { | 48 namespace gpu { |
49 namespace gles2 { | 49 namespace gles2 { |
50 | 50 |
51 namespace { | |
52 | |
53 void SetupUpdateES3UnpackParametersExpectations( | |
54 ::gfx::MockGLInterface* gl, | |
55 GLint row_length, | |
56 GLint image_height, | |
57 GLint skip_pixels, | |
58 GLint skip_rows, | |
59 GLint skip_images) { | |
60 EXPECT_CALL(*gl, PixelStorei(GL_UNPACK_ROW_LENGTH, row_length)) | |
61 .Times(1) | |
62 .RetiresOnSaturation(); | |
63 EXPECT_CALL(*gl, PixelStorei(GL_UNPACK_IMAGE_HEIGHT, image_height)) | |
64 .Times(1) | |
65 .RetiresOnSaturation(); | |
66 EXPECT_CALL(*gl, PixelStorei(GL_UNPACK_SKIP_ROWS, skip_rows)) | |
67 .Times(1) | |
68 .RetiresOnSaturation(); | |
69 EXPECT_CALL(*gl, PixelStorei(GL_UNPACK_SKIP_PIXELS, skip_pixels)) | |
70 .Times(1) | |
71 .RetiresOnSaturation(); | |
72 EXPECT_CALL(*gl, PixelStorei(GL_UNPACK_SKIP_IMAGES, skip_images)) | |
73 .Times(1) | |
74 .RetiresOnSaturation(); | |
75 } | |
76 | |
77 } // namespace anonymous | |
78 | |
79 using namespace cmds; | 51 using namespace cmds; |
80 | 52 |
81 class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest { | 53 class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest { |
82 public: | 54 public: |
83 GLES2DecoderRestoreStateTest() {} | 55 GLES2DecoderRestoreStateTest() {} |
84 | 56 |
85 protected: | 57 protected: |
86 void AddExpectationsForActiveTexture(GLenum unit); | 58 void AddExpectationsForActiveTexture(GLenum unit); |
87 void AddExpectationsForBindTexture(GLenum target, GLuint id); | 59 void AddExpectationsForBindTexture(GLenum target, GLuint id); |
88 void InitializeContextState(ContextState* state, | 60 void InitializeContextState(ContextState* state, |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 | 389 |
418 // Test new and cached state changes. | 390 // Test new and cached state changes. |
419 for (int n = 0; n < 3; n++) { | 391 for (int n = 0; n < 3; n++) { |
420 enable_state = !enable_state; | 392 enable_state = !enable_state; |
421 EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set); | 393 EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set); |
422 EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set); | 394 EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set); |
423 } | 395 } |
424 } | 396 } |
425 } | 397 } |
426 | 398 |
427 TEST_P(GLES3DecoderTest, ES3PixelStoreiWithPixelUnpackBuffer) { | |
428 // Without PIXEL_UNPACK_BUFFER bound, PixelStorei with unpack parameters | |
429 // is cached and not passed down to GL. | |
430 EXPECT_CALL(*gl_, PixelStorei(_, _)).Times(0); | |
431 cmds::PixelStorei cmd; | |
432 cmd.Init(GL_UNPACK_SKIP_ROWS, 2); | |
433 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
434 | |
435 // When a PIXEL_UNPACK_BUFFER is bound, all cached unpack parameters are | |
436 // applied to GL. | |
437 SetupUpdateES3UnpackParametersExpectations(gl_.get(), 0, 0, 0, 2, 0); | |
438 DoBindBuffer(GL_PIXEL_UNPACK_BUFFER, client_buffer_id_, kServiceBufferId); | |
439 | |
440 // Now with a bound PIXEL_UNPACK_BUFFER, all PixelStorei calls with unpack | |
441 // parameters are applied to GL. | |
442 EXPECT_CALL(*gl_, PixelStorei(GL_UNPACK_ROW_LENGTH, 16)) | |
443 .Times(1) | |
444 .RetiresOnSaturation(); | |
445 cmd.Init(GL_UNPACK_ROW_LENGTH, 16); | |
446 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
447 | |
448 // Now unbind PIXEL_UNPACK_BUFFER, all ES3 unpack parameters are set back to | |
449 // 0. | |
450 SetupUpdateES3UnpackParametersExpectations(gl_.get(), 0, 0, 0, 0, 0); | |
451 DoBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0, 0); | |
452 | |
453 // Again, PixelStorei calls with unpack parameters are cached. | |
454 EXPECT_CALL(*gl_, PixelStorei(_, _)).Times(0); | |
455 cmd.Init(GL_UNPACK_SKIP_ROWS, 3); | |
456 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
457 | |
458 // Bind a PIXEL_UNPACK_BUFFER again. | |
459 SetupUpdateES3UnpackParametersExpectations(gl_.get(), 16, 0, 0, 3, 0); | |
460 DoBindBuffer(GL_PIXEL_UNPACK_BUFFER, client_buffer_id_, kServiceBufferId); | |
461 } | |
462 | |
463 // TODO(vmiura): Tests for VAO restore. | 399 // TODO(vmiura): Tests for VAO restore. |
464 | 400 |
465 // TODO(vmiura): Tests for ContextState::RestoreAttribute(). | 401 // TODO(vmiura): Tests for ContextState::RestoreAttribute(). |
466 | 402 |
467 // TODO(vmiura): Tests for ContextState::RestoreBufferBindings(). | 403 // TODO(vmiura): Tests for ContextState::RestoreBufferBindings(). |
468 | 404 |
469 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). | 405 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). |
470 | 406 |
471 // TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings(). | 407 // TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings(). |
472 | 408 |
473 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). | 409 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). |
474 | 410 |
475 // TODO(vmiura): Tests for ContextState::RestoreGlobalState(). | 411 // TODO(vmiura): Tests for ContextState::RestoreGlobalState(). |
476 | 412 |
477 } // namespace gles2 | 413 } // namespace gles2 |
478 } // namespace gpu | 414 } // namespace gpu |
OLD | NEW |