| Index: gpu/command_buffer/service/texture_manager_unittest.cc
|
| diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc
|
| index ad82cf301ecdae6530992f61bfee653971e6e8c2..7f3f41e1c8374a2fb8ad9912b0336e24383eb259 100644
|
| --- a/gpu/command_buffer/service/texture_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/texture_manager_unittest.cc
|
| @@ -12,7 +12,9 @@
|
|
|
| #include "base/command_line.h"
|
| #include "base/macros.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "gpu/command_buffer/client/client_test_helper.h"
|
| +#include "gpu/command_buffer/service/context_state.h"
|
| #include "gpu/command_buffer/service/error_state_mock.h"
|
| #include "gpu/command_buffer/service/feature_info.h"
|
| #include "gpu/command_buffer/service/framebuffer_manager.h"
|
| @@ -24,6 +26,7 @@
|
| #include "gpu/command_buffer/service/mocks.h"
|
| #include "gpu/command_buffer/service/service_discardable_manager.h"
|
| #include "gpu/command_buffer/service/test_helper.h"
|
| +#include "gpu/config/gpu_switches.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/gl/gl_image_stub.h"
|
| #include "ui/gl/gl_mock.h"
|
| @@ -645,6 +648,82 @@ TEST_F(TextureManagerTest, AlphaLuminanceCoreProfileEmulation) {
|
| manager.RemoveTexture(kClientId);
|
| }
|
|
|
| +// Test texture base level is set before texImage2D when workaround
|
| +// RESET_TEXIMAGE2D_BASE_LEVEL is enabled
|
| +TEST_F(TextureManagerTest, SetTextureBaseLevelBeforeTexImage2D) {
|
| + GpuDriverBugWorkarounds gpu_driver_bug_workaround;
|
| + gpu_driver_bug_workaround.reset_teximage2d_base_level = true;
|
| + feature_info_ = new FeatureInfo(gpu_driver_bug_workaround);
|
| +
|
| + SetupFeatureInfo("", "OpenGL ES 3.0", CONTEXT_TYPE_OPENGLES3);
|
| + TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, false,
|
| + "", kUseDefaultTextures);
|
| + TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize,
|
| + kMaxCubeMapTextureSize, kMaxRectangleTextureSize,
|
| + kMax3DTextureSize, kMaxArrayTextureLayers,
|
| + kUseDefaultTextures, nullptr, &discardable_manager_);
|
| + manager.Initialize();
|
| +
|
| + // Create a texture.
|
| + const GLuint kClientId = 1;
|
| + const GLuint kServiceId = 11;
|
| + manager.CreateTexture(kClientId, kServiceId);
|
| + scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId));
|
| + manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D);
|
| + GLint base_level = 2;
|
| + GLint width = 4;
|
| + GLint height = 4;
|
| + manager.SetLevelInfo(texture_ref.get(), GL_TEXTURE_2D, base_level, GL_RGBA,
|
| + width, height, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
|
| + gfx::Rect(4, 4));
|
| +
|
| + SetParameter(texture_ref.get(), GL_TEXTURE_BASE_LEVEL, base_level,
|
| + GL_NO_ERROR);
|
| +
|
| + EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_, TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA,
|
| + GL_UNSIGNED_BYTE, nullptr))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_,
|
| + TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, base_level))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| +
|
| + TextureManager::DoTexImageArguments args = {
|
| + GL_TEXTURE_2D,
|
| + 0,
|
| + GL_RGBA,
|
| + 1,
|
| + 1,
|
| + 1,
|
| + 0,
|
| + GL_RGBA,
|
| + GL_UNSIGNED_BYTE,
|
| + nullptr,
|
| + 0,
|
| + 0,
|
| + TextureManager::DoTexImageArguments::kTexImage2D};
|
| + EXPECT_CALL(*gl_, GetError())
|
| + .WillOnce(Return(GL_NO_ERROR))
|
| + .WillOnce(Return(GL_NO_ERROR))
|
| + .RetiresOnSaturation();
|
| + DecoderTextureState texture_state_(feature_info_->workarounds());
|
| + texture_state_.tex_image_failed = true;
|
| + DecoderFramebufferState framebuffer_state_;
|
| + ContextState state_(feature_info_.get(), NULL, NULL);
|
| + const char* func_name = "glTexImage2D";
|
| + manager.DoTexImage(&texture_state_, &state_, &framebuffer_state_, func_name,
|
| + texture_ref.get(), args);
|
| +
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kServiceId)))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + manager.RemoveTexture(kClientId);
|
| +}
|
| +
|
| class TextureTestBase : public GpuServiceTest {
|
| public:
|
| static const GLint kMaxTextureSize = 32;
|
|
|