diff options
Diffstat (limited to 'chromium/gpu/command_buffer/service/test_helper.cc')
-rw-r--r-- | chromium/gpu/command_buffer/service/test_helper.cc | 139 |
1 files changed, 116 insertions, 23 deletions
diff --git a/chromium/gpu/command_buffer/service/test_helper.cc b/chromium/gpu/command_buffer/service/test_helper.cc index 92c5ec456ef..c589be4326a 100644 --- a/chromium/gpu/command_buffer/service/test_helper.cc +++ b/chromium/gpu/command_buffer/service/test_helper.cc @@ -9,7 +9,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_tokenizer.h" -#include "gpu/command_buffer/common/types.h" #include "gpu/command_buffer/service/buffer_manager.h" #include "gpu/command_buffer/service/error_state_mock.h" #include "gpu/command_buffer/service/gl_utils.h" @@ -61,7 +60,9 @@ const GLint TestHelper::kMaxVertexUniformComponents; #endif void TestHelper::SetupTextureInitializationExpectations( - ::gfx::MockGLInterface* gl, GLenum target) { + ::gfx::MockGLInterface* gl, + GLenum target, + bool use_default_textures) { InSequence sequence; bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES); @@ -98,7 +99,7 @@ void TestHelper::SetupTextureInitializationExpectations( NOTREACHED(); } - int array_size = 2; + int array_size = use_default_textures ? 2 : 1; EXPECT_CALL(*gl, GenTextures(array_size, _)) .WillOnce(SetArrayArgument<1>(texture_ids, @@ -139,11 +140,14 @@ void TestHelper::SetupTextureInitializationExpectations( void TestHelper::SetupTextureManagerInitExpectations( ::gfx::MockGLInterface* gl, - const char* extensions) { + const char* extensions, + bool use_default_textures) { InSequence sequence; - SetupTextureInitializationExpectations(gl, GL_TEXTURE_2D); - SetupTextureInitializationExpectations(gl, GL_TEXTURE_CUBE_MAP); + SetupTextureInitializationExpectations( + gl, GL_TEXTURE_2D, use_default_textures); + SetupTextureInitializationExpectations( + gl, GL_TEXTURE_CUBE_MAP, use_default_textures); bool ext_image_external = false; bool arb_texture_rectangle = false; @@ -160,15 +164,22 @@ void TestHelper::SetupTextureManagerInitExpectations( } if (ext_image_external) { - SetupTextureInitializationExpectations(gl, GL_TEXTURE_EXTERNAL_OES); + SetupTextureInitializationExpectations( + gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures); } if (arb_texture_rectangle) { - SetupTextureInitializationExpectations(gl, GL_TEXTURE_RECTANGLE_ARB); + SetupTextureInitializationExpectations( + gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures); } } void TestHelper::SetupTextureDestructionExpectations( - ::gfx::MockGLInterface* gl, GLenum target) { + ::gfx::MockGLInterface* gl, + GLenum target, + bool use_default_textures) { + if (!use_default_textures) + return; + GLuint texture_id = 0; switch (target) { case GL_TEXTURE_2D: @@ -194,9 +205,11 @@ void TestHelper::SetupTextureDestructionExpectations( void TestHelper::SetupTextureManagerDestructionExpectations( ::gfx::MockGLInterface* gl, - const char* extensions) { - SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D); - SetupTextureDestructionExpectations(gl, GL_TEXTURE_CUBE_MAP); + const char* extensions, + bool use_default_textures) { + SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures); + SetupTextureDestructionExpectations( + gl, GL_TEXTURE_CUBE_MAP, use_default_textures); bool ext_image_external = false; bool arb_texture_rectangle = false; @@ -213,10 +226,12 @@ void TestHelper::SetupTextureManagerDestructionExpectations( } if (ext_image_external) { - SetupTextureDestructionExpectations(gl, GL_TEXTURE_EXTERNAL_OES); + SetupTextureDestructionExpectations( + gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures); } if (arb_texture_rectangle) { - SetupTextureDestructionExpectations(gl, GL_TEXTURE_RECTANGLE_ARB); + SetupTextureDestructionExpectations( + gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures); } EXPECT_CALL(*gl, DeleteTextures(4, _)) @@ -225,18 +240,23 @@ void TestHelper::SetupTextureManagerDestructionExpectations( } void TestHelper::SetupContextGroupInitExpectations( - ::gfx::MockGLInterface* gl, - const DisallowedFeatures& disallowed_features, - const char* extensions) { + ::gfx::MockGLInterface* gl, + const DisallowedFeatures& disallowed_features, + const char* extensions, + const char* gl_version, + bool bind_generates_resource) { InSequence sequence; - SetupFeatureInfoInitExpectations(gl, extensions); + SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", gl_version); + + std::string l_version(StringToLowerASCII(std::string(gl_version))); + bool is_es3 = (l_version.substr(0, 12) == "opengl es 3."); EXPECT_CALL(*gl, GetIntegerv(GL_MAX_RENDERBUFFER_SIZE, _)) .WillOnce(SetArgumentPointee<1>(kMaxRenderbufferSize)) .RetiresOnSaturation(); if (strstr(extensions, "GL_EXT_framebuffer_multisample") || - strstr(extensions, "GL_EXT_multisampled_render_to_texture")) { + strstr(extensions, "GL_EXT_multisampled_render_to_texture") || is_es3) { EXPECT_CALL(*gl, GetIntegerv(GL_MAX_SAMPLES, _)) .WillOnce(SetArgumentPointee<1>(kMaxSamples)) .RetiresOnSaturation(); @@ -273,7 +293,8 @@ void TestHelper::SetupContextGroupInitExpectations( .WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents)) .RetiresOnSaturation(); - SetupTextureManagerInitExpectations(gl, extensions); + bool use_default_textures = bind_generates_resource; + SetupTextureManagerInitExpectations(gl, extensions, use_default_textures); } void TestHelper::SetupFeatureInfoInitExpectations( @@ -297,6 +318,78 @@ void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( EXPECT_CALL(*gl, GetString(GL_VERSION)) .WillOnce(Return(reinterpret_cast<const uint8*>(gl_version))) .RetiresOnSaturation(); + + std::string l_version(StringToLowerASCII(std::string(gl_version))); + bool is_es3 = (l_version.substr(0, 12) == "opengl es 3."); + + if (strstr(extensions, "GL_ARB_texture_float") || + (is_es3 && strstr(extensions, "GL_EXT_color_buffer_float"))) { + static const GLuint gl_ids[] = {101, 102}; + const GLsizei width = 16; + EXPECT_CALL(*gl, GetIntegerv(GL_FRAMEBUFFER_BINDING, _)) + .WillOnce(SetArgumentPointee<1>(gl_ids[0])) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, GetIntegerv(GL_TEXTURE_BINDING_2D, _)) + .WillOnce(SetArgumentPointee<1>(gl_ids[0])) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, GenTextures(1, _)) + .WillOnce(SetArrayArgument<1>(gl_ids + 1, gl_ids + 2)) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, GenFramebuffersEXT(1, _)) + .WillOnce(SetArrayArgument<1>(gl_ids + 1, gl_ids + 2)) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, BindTexture(GL_TEXTURE_2D, gl_ids[1])) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_NEAREST)) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, width, 0, + GL_RGBA, GL_FLOAT, _)) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, BindFramebufferEXT(GL_FRAMEBUFFER, gl_ids[1])) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, FramebufferTexture2DEXT(GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl_ids[1], 0)) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) + .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, width, 0, + GL_RGB, GL_FLOAT, _)) + .Times(1) + .RetiresOnSaturation(); + if (is_es3) { + EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) + .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)) + .RetiresOnSaturation(); + } else { + EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) + .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) + .RetiresOnSaturation(); + } + EXPECT_CALL(*gl, DeleteFramebuffersEXT(1, _)) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, DeleteTextures(1, _)) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, BindFramebufferEXT(GL_FRAMEBUFFER, gl_ids[0])) + .Times(1) + .RetiresOnSaturation(); + EXPECT_CALL(*gl, BindTexture(GL_TEXTURE_2D, gl_ids[0])) + .Times(1) + .RetiresOnSaturation(); +#if DCHECK_IS_ON + EXPECT_CALL(*gl, GetError()) + .WillOnce(Return(GL_NO_ERROR)) + .RetiresOnSaturation(); +#endif + } } void TestHelper::SetupExpectationsForClearingUniforms( @@ -524,7 +617,7 @@ void TestHelper::DoBufferData( manager->DoBufferData(error_state, buffer, size, usage, data); } -void TestHelper::SetTexParameterWithExpectations( +void TestHelper::SetTexParameteriWithExpectations( ::gfx::MockGLInterface* gl, MockErrorState* error_state, TextureManager* manager, TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { @@ -540,11 +633,11 @@ void TestHelper::SetTexParameterWithExpectations( .Times(1) .RetiresOnSaturation(); } else { - EXPECT_CALL(*error_state, SetGLErrorInvalidParam(_, _, error, _, _, _)) + EXPECT_CALL(*error_state, SetGLErrorInvalidParami(_, _, error, _, _, _)) .Times(1) .RetiresOnSaturation(); } - manager->SetParameter("", error_state, texture_ref, pname, value); + manager->SetParameteri("", error_state, texture_ref, pname, value); } ScopedGLImplementationSetter::ScopedGLImplementationSetter( |