| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_unittest_base.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "gpu/command_buffer/service/logger.h" | 21 #include "gpu/command_buffer/service/logger.h" |
| 22 #include "gpu/command_buffer/service/mailbox_manager.h" | 22 #include "gpu/command_buffer/service/mailbox_manager.h" |
| 23 #include "gpu/command_buffer/service/program_manager.h" | 23 #include "gpu/command_buffer/service/program_manager.h" |
| 24 #include "gpu/command_buffer/service/test_helper.h" | 24 #include "gpu/command_buffer/service/test_helper.h" |
| 25 #include "gpu/command_buffer/service/vertex_attrib_manager.h" | 25 #include "gpu/command_buffer/service/vertex_attrib_manager.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "ui/gl/gl_implementation.h" | 27 #include "ui/gl/gl_implementation.h" |
| 28 #include "ui/gl/gl_mock.h" | 28 #include "ui/gl/gl_mock.h" |
| 29 #include "ui/gl/test/gl_surface_test_support.h" | 29 #include "ui/gl/test/gl_surface_test_support.h" |
| 30 | 30 |
| 31 using ::gfx::MockGLInterface; | 31 using ::gl::MockGLInterface; |
| 32 using ::testing::_; | 32 using ::testing::_; |
| 33 using ::testing::AnyNumber; | 33 using ::testing::AnyNumber; |
| 34 using ::testing::AtMost; | 34 using ::testing::AtMost; |
| 35 using ::testing::DoAll; | 35 using ::testing::DoAll; |
| 36 using ::testing::InSequence; | 36 using ::testing::InSequence; |
| 37 using ::testing::Invoke; | 37 using ::testing::Invoke; |
| 38 using ::testing::InvokeWithoutArgs; | 38 using ::testing::InvokeWithoutArgs; |
| 39 using ::testing::MatcherCast; | 39 using ::testing::MatcherCast; |
| 40 using ::testing::Pointee; | 40 using ::testing::Pointee; |
| 41 using ::testing::Return; | 41 using ::testing::Return; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 } | 173 } |
| 174 | 174 |
| 175 void GLES2DecoderTestBase::InitDecoderWithCommandLine( | 175 void GLES2DecoderTestBase::InitDecoderWithCommandLine( |
| 176 const InitState& init, | 176 const InitState& init, |
| 177 const base::CommandLine* command_line) { | 177 const base::CommandLine* command_line) { |
| 178 InitState normalized_init = init; | 178 InitState normalized_init = init; |
| 179 NormalizeInitState(&normalized_init); | 179 NormalizeInitState(&normalized_init); |
| 180 // For easier substring/extension matching | 180 // For easier substring/extension matching |
| 181 DCHECK(normalized_init.extensions.empty() || | 181 DCHECK(normalized_init.extensions.empty() || |
| 182 *normalized_init.extensions.rbegin() == ' '); | 182 *normalized_init.extensions.rbegin() == ' '); |
| 183 gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress); | 183 gl::SetGLGetProcAddressProc(gl::MockGLInterface::GetGLProcAddress); |
| 184 gfx::GLSurfaceTestSupport::InitializeOneOffWithMockBindings(); | 184 gl::GLSurfaceTestSupport::InitializeOneOffWithMockBindings(); |
| 185 | 185 |
| 186 gl_.reset(new StrictMock<MockGLInterface>()); | 186 gl_.reset(new StrictMock<MockGLInterface>()); |
| 187 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); | 187 ::gl::MockGLInterface::SetGLInterface(gl_.get()); |
| 188 | 188 |
| 189 SetupMockGLBehaviors(); | 189 SetupMockGLBehaviors(); |
| 190 | 190 |
| 191 scoped_refptr<FeatureInfo> feature_info = new FeatureInfo; | 191 scoped_refptr<FeatureInfo> feature_info = new FeatureInfo; |
| 192 if (command_line) { | 192 if (command_line) { |
| 193 GpuDriverBugWorkarounds gpu_driver_bug_workaround(command_line); | 193 GpuDriverBugWorkarounds gpu_driver_bug_workaround(command_line); |
| 194 feature_info = new FeatureInfo(*command_line, gpu_driver_bug_workaround); | 194 feature_info = new FeatureInfo(*command_line, gpu_driver_bug_workaround); |
| 195 } | 195 } |
| 196 | 196 |
| 197 group_ = scoped_refptr<ContextGroup>(new ContextGroup( | 197 group_ = scoped_refptr<ContextGroup>(new ContextGroup( |
| 198 gpu_preferences_, NULL, memory_tracker_, | 198 gpu_preferences_, NULL, memory_tracker_, |
| 199 new ShaderTranslatorCache(gpu_preferences_), | 199 new ShaderTranslatorCache(gpu_preferences_), |
| 200 new FramebufferCompletenessCache, feature_info, | 200 new FramebufferCompletenessCache, feature_info, |
| 201 normalized_init.bind_generates_resource)); | 201 normalized_init.bind_generates_resource)); |
| 202 bool use_default_textures = normalized_init.bind_generates_resource; | 202 bool use_default_textures = normalized_init.bind_generates_resource; |
| 203 | 203 |
| 204 InSequence sequence; | 204 InSequence sequence; |
| 205 | 205 |
| 206 surface_ = new gfx::GLSurfaceStub; | 206 surface_ = new gl::GLSurfaceStub; |
| 207 surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); | 207 surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); |
| 208 | 208 |
| 209 // Context needs to be created before initializing ContextGroup, which will | 209 // Context needs to be created before initializing ContextGroup, which will |
| 210 // in turn initialize FeatureInfo, which needs a context to determine | 210 // in turn initialize FeatureInfo, which needs a context to determine |
| 211 // extension support. | 211 // extension support. |
| 212 context_ = new StrictMock<GLContextMock>(); | 212 context_ = new StrictMock<GLContextMock>(); |
| 213 context_->AddExtensionsString(normalized_init.extensions.c_str()); | 213 context_->AddExtensionsString(normalized_init.extensions.c_str()); |
| 214 context_->SetGLVersionString(normalized_init.gl_version.c_str()); | 214 context_->SetGLVersionString(normalized_init.gl_version.c_str()); |
| 215 | 215 |
| 216 context_->GLContextStubWithExtensions::MakeCurrent(surface_.get()); | 216 context_->GLContextStubWithExtensions::MakeCurrent(surface_.get()); |
| 217 gfx::GLSurfaceTestSupport::InitializeDynamicMockBindings(context_.get()); | 217 gl::GLSurfaceTestSupport::InitializeDynamicMockBindings(context_.get()); |
| 218 | 218 |
| 219 TestHelper::SetupContextGroupInitExpectations( | 219 TestHelper::SetupContextGroupInitExpectations( |
| 220 gl_.get(), | 220 gl_.get(), |
| 221 DisallowedFeatures(), | 221 DisallowedFeatures(), |
| 222 normalized_init.extensions.c_str(), | 222 normalized_init.extensions.c_str(), |
| 223 normalized_init.gl_version.c_str(), | 223 normalized_init.gl_version.c_str(), |
| 224 normalized_init.bind_generates_resource); | 224 normalized_init.bind_generates_resource); |
| 225 | 225 |
| 226 // We initialize the ContextGroup with a MockGLES2Decoder so that | 226 // We initialize the ContextGroup with a MockGLES2Decoder so that |
| 227 // we can use the ContextGroup to figure out how the real GLES2Decoder | 227 // we can use the ContextGroup to figure out how the real GLES2Decoder |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 DoCreateProgram(client_program_id_, kServiceProgramId); | 505 DoCreateProgram(client_program_id_, kServiceProgramId); |
| 506 DoCreateShader(GL_VERTEX_SHADER, client_shader_id_, kServiceShaderId); | 506 DoCreateShader(GL_VERTEX_SHADER, client_shader_id_, kServiceShaderId); |
| 507 | 507 |
| 508 // Unsafe commands. | 508 // Unsafe commands. |
| 509 bool reset_unsafe_es3_apis_enabled = false; | 509 bool reset_unsafe_es3_apis_enabled = false; |
| 510 if (!decoder_->unsafe_es3_apis_enabled()) { | 510 if (!decoder_->unsafe_es3_apis_enabled()) { |
| 511 decoder_->set_unsafe_es3_apis_enabled(true); | 511 decoder_->set_unsafe_es3_apis_enabled(true); |
| 512 reset_unsafe_es3_apis_enabled = true; | 512 reset_unsafe_es3_apis_enabled = true; |
| 513 } | 513 } |
| 514 | 514 |
| 515 const gfx::GLVersionInfo* version = context_->GetVersionInfo(); | 515 const gl::GLVersionInfo* version = context_->GetVersionInfo(); |
| 516 if (version->IsAtLeastGL(3, 3) || version->IsAtLeastGLES(3, 0)) { | 516 if (version->IsAtLeastGL(3, 3) || version->IsAtLeastGLES(3, 0)) { |
| 517 EXPECT_CALL(*gl_, GenSamplers(_, _)) | 517 EXPECT_CALL(*gl_, GenSamplers(_, _)) |
| 518 .WillOnce(SetArgumentPointee<1>(kServiceSamplerId)) | 518 .WillOnce(SetArgumentPointee<1>(kServiceSamplerId)) |
| 519 .RetiresOnSaturation(); | 519 .RetiresOnSaturation(); |
| 520 GenHelper<cmds::GenSamplersImmediate>(client_sampler_id_); | 520 GenHelper<cmds::GenSamplersImmediate>(client_sampler_id_); |
| 521 } | 521 } |
| 522 if (version->IsAtLeastGL(4, 0) || version->IsAtLeastGLES(3, 0)) { | 522 if (version->IsAtLeastGL(4, 0) || version->IsAtLeastGLES(3, 0)) { |
| 523 EXPECT_CALL(*gl_, GenTransformFeedbacks(_, _)) | 523 EXPECT_CALL(*gl_, GenTransformFeedbacks(_, _)) |
| 524 .WillOnce(SetArgumentPointee<1>(kServiceTransformFeedbackId)) | 524 .WillOnce(SetArgumentPointee<1>(kServiceTransformFeedbackId)) |
| 525 .RetiresOnSaturation(); | 525 .RetiresOnSaturation(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 .Times(1) | 565 .Times(1) |
| 566 .RetiresOnSaturation(); | 566 .RetiresOnSaturation(); |
| 567 } | 567 } |
| 568 } | 568 } |
| 569 | 569 |
| 570 decoder_->EndDecoding(); | 570 decoder_->EndDecoding(); |
| 571 decoder_->Destroy(!decoder_->WasContextLost()); | 571 decoder_->Destroy(!decoder_->WasContextLost()); |
| 572 decoder_.reset(); | 572 decoder_.reset(); |
| 573 group_->Destroy(mock_decoder_.get(), false); | 573 group_->Destroy(mock_decoder_.get(), false); |
| 574 engine_.reset(); | 574 engine_.reset(); |
| 575 ::gfx::MockGLInterface::SetGLInterface(NULL); | 575 ::gl::MockGLInterface::SetGLInterface(NULL); |
| 576 gl_.reset(); | 576 gl_.reset(); |
| 577 gfx::ClearGLBindings(); | 577 gl::ClearGLBindings(); |
| 578 } | 578 } |
| 579 | 579 |
| 580 void GLES2DecoderTestBase::TearDown() { | 580 void GLES2DecoderTestBase::TearDown() { |
| 581 ResetDecoder(); | 581 ResetDecoder(); |
| 582 } | 582 } |
| 583 | 583 |
| 584 void GLES2DecoderTestBase::ExpectEnableDisable(GLenum cap, bool enable) { | 584 void GLES2DecoderTestBase::ExpectEnableDisable(GLenum cap, bool enable) { |
| 585 if (enable) { | 585 if (enable) { |
| 586 EXPECT_CALL(*gl_, Enable(cap)) | 586 EXPECT_CALL(*gl_, Enable(cap)) |
| 587 .Times(1) | 587 .Times(1) |
| (...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1472 | 1472 |
| 1473 EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(attrib, _)) | 1473 EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(attrib, _)) |
| 1474 .Times(testing::AtMost(1)) | 1474 .Times(testing::AtMost(1)) |
| 1475 .RetiresOnSaturation(); | 1475 .RetiresOnSaturation(); |
| 1476 | 1476 |
| 1477 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) | 1477 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) |
| 1478 .Times(1) | 1478 .Times(1) |
| 1479 .RetiresOnSaturation(); | 1479 .RetiresOnSaturation(); |
| 1480 | 1480 |
| 1481 if (attrib != 0 || | 1481 if (attrib != 0 || |
| 1482 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { | 1482 gl::GetGLImplementation() == gl::kGLImplementationEGLGLES2) { |
| 1483 // TODO(bajones): Not sure if I can tell which of these will be called |
| 1484 EXPECT_CALL(*gl_, EnableVertexAttribArray(attrib)) |
| 1485 .Times(testing::AtMost(1)) |
| 1486 .RetiresOnSaturation(); |
| 1483 | 1487 |
| 1484 // TODO(bajones): Not sure if I can tell which of these will be called | 1488 EXPECT_CALL(*gl_, DisableVertexAttribArray(attrib)) |
| 1485 EXPECT_CALL(*gl_, EnableVertexAttribArray(attrib)) | 1489 .Times(testing::AtMost(1)) |
| 1486 .Times(testing::AtMost(1)) | 1490 .RetiresOnSaturation(); |
| 1487 .RetiresOnSaturation(); | |
| 1488 | |
| 1489 EXPECT_CALL(*gl_, DisableVertexAttribArray(attrib)) | |
| 1490 .Times(testing::AtMost(1)) | |
| 1491 .RetiresOnSaturation(); | |
| 1492 } | 1491 } |
| 1493 } | 1492 } |
| 1494 | 1493 |
| 1495 // GCC requires these declarations, but MSVC requires they not be present | 1494 // GCC requires these declarations, but MSVC requires they not be present |
| 1496 #ifndef COMPILER_MSVC | 1495 #ifndef COMPILER_MSVC |
| 1497 const int GLES2DecoderTestBase::kBackBufferWidth; | 1496 const int GLES2DecoderTestBase::kBackBufferWidth; |
| 1498 const int GLES2DecoderTestBase::kBackBufferHeight; | 1497 const int GLES2DecoderTestBase::kBackBufferHeight; |
| 1499 | 1498 |
| 1500 const GLint GLES2DecoderTestBase::kMaxTextureSize; | 1499 const GLint GLES2DecoderTestBase::kMaxTextureSize; |
| 1501 const GLint GLES2DecoderTestBase::kMaxCubeMapTextureSize; | 1500 const GLint GLES2DecoderTestBase::kMaxCubeMapTextureSize; |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2081 SetupDefaultProgram(); | 2080 SetupDefaultProgram(); |
| 2082 } | 2081 } |
| 2083 | 2082 |
| 2084 // Include the auto-generated part of this file. We split this because it means | 2083 // Include the auto-generated part of this file. We split this because it means |
| 2085 // we can easily edit the non-auto generated parts right here in this file | 2084 // we can easily edit the non-auto generated parts right here in this file |
| 2086 // instead of having to edit some template or the code generator. | 2085 // instead of having to edit some template or the code generator. |
| 2087 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h" | 2086 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h" |
| 2088 | 2087 |
| 2089 } // namespace gles2 | 2088 } // namespace gles2 |
| 2090 } // namespace gpu | 2089 } // namespace gpu |
| OLD | NEW |