| Index: gpu/command_buffer/tests/gl_copy_tex_image_2d_workaround_unittest.cc
|
| diff --git a/gpu/command_buffer/tests/gl_copy_tex_image_2d_workaround_unittest.cc b/gpu/command_buffer/tests/gl_copy_tex_image_2d_workaround_unittest.cc
|
| index fc78349a20c6e4099c5ed18c7afd6a4a1d058f5f..1e248631aa2ab630f1abca755e680ef3b4ed70e2 100644
|
| --- a/gpu/command_buffer/tests/gl_copy_tex_image_2d_workaround_unittest.cc
|
| +++ b/gpu/command_buffer/tests/gl_copy_tex_image_2d_workaround_unittest.cc
|
| @@ -12,6 +12,8 @@
|
|
|
| #include "base/command_line.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/stringize_macros.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "build/build_config.h"
|
| #include "gpu/command_buffer/tests/gl_manager.h"
|
| #include "gpu/command_buffer/tests/gl_test_utils.h"
|
| @@ -21,6 +23,62 @@
|
| namespace gpu {
|
|
|
| #if defined(OS_MACOSX)
|
| +namespace {
|
| +
|
| +// clang-format off
|
| +static const char* kSimpleVertexShader = STRINGIZE(
|
| + attribute vec2 a_position;
|
| + varying vec2 v_texCoord;
|
| + void main() {
|
| + gl_Position = vec4(a_position.x, a_position.y, 0.0, 1.0);
|
| + v_texCoord = (a_position + vec2(1.0, 1.0)) * 0.5;
|
| + }
|
| +);
|
| +// clang-format on
|
| +
|
| +// Generate fragment shader source for sampling out of a texture of |size|
|
| +// bound to |target|.
|
| +std::string GetFragmentShaderSource(unsigned target, const gfx::Size& size) {
|
| + // clang-format off
|
| + const char kFragmentShader[] = STRINGIZE(
|
| + uniform SamplerType u_texture;
|
| + varying vec2 v_texCoord;
|
| + void main() {
|
| + gl_FragColor = TextureLookup(u_texture, v_texCoord * TextureScale);
|
| + }
|
| + );
|
| + const char kShaderFloatPrecision[] = STRINGIZE(
|
| + precision mediump float;
|
| + );
|
| + // clang-format on
|
| +
|
| + switch (target) {
|
| + case GL_TEXTURE_2D:
|
| + return base::StringPrintf(
|
| + "%s\n"
|
| + "#define SamplerType sampler2D\n"
|
| + "#define TextureLookup texture2D\n"
|
| + "#define TextureScale vec2(1.0, 1.0)\n"
|
| + "%s",
|
| + kShaderFloatPrecision, kFragmentShader);
|
| + case GL_TEXTURE_RECTANGLE_ARB:
|
| + return base::StringPrintf(
|
| + "%s\n"
|
| + "#extension GL_ARB_texture_rectangle : require\n"
|
| + "#define SamplerType sampler2DRect\n"
|
| + "#define TextureLookup texture2DRect\n"
|
| + "#define TextureScale vec2(%f, %f)\n"
|
| + "%s",
|
| + kShaderFloatPrecision, static_cast<double>(size.width()),
|
| + static_cast<double>(size.height()), kFragmentShader);
|
| + default:
|
| + NOTREACHED();
|
| + return std::string();
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // A collection of tests that exercise the glCopyTexImage2D workaround. The
|
| // parameter expresses different formats of the destination texture.
|
| class GLCopyTexImage2DWorkaroundTest : public testing::TestWithParam<GLenum> {
|
| @@ -29,13 +87,13 @@ class GLCopyTexImage2DWorkaroundTest : public testing::TestWithParam<GLenum> {
|
|
|
| protected:
|
| void SetUp() override {
|
| - base::CommandLine command_line(0, NULL);
|
| - command_line.AppendSwitchASCII(
|
| - switches::kGpuDriverBugWorkarounds,
|
| - base::IntToString(gpu::USE_INTERMEDIARY_FOR_COPY_TEXTURE_IMAGE));
|
| - gl_.InitializeWithCommandLine(GLManager::Options(), command_line);
|
| - gl_.set_use_iosurface_memory_buffers(true);
|
| - DCHECK(gl_.workarounds().use_intermediary_for_copy_texture_image);
|
| + base::CommandLine command_line(0, nullptr);
|
| + command_line.AppendSwitchASCII(
|
| + switches::kGpuDriverBugWorkarounds,
|
| + base::IntToString(gpu::USE_INTERMEDIARY_FOR_COPY_TEXTURE_IMAGE));
|
| + gl_.InitializeWithCommandLine(GLManager::Options(), command_line);
|
| + gl_.set_use_iosurface_memory_buffers(true);
|
| + DCHECK(gl_.workarounds().use_intermediary_for_copy_texture_image);
|
| }
|
|
|
| void TearDown() override {
|
| @@ -108,12 +166,16 @@ TEST_P(GLCopyTexImage2DWorkaroundTest, UseIntermediaryTexture) {
|
| EXPECT_EQ(glGetError(), GLenum(GL_NO_ERROR));
|
|
|
| glViewport(0, 0, width, height);
|
| - GLTestHelper::DrawTextureQuad(dest_target, gfx::Size(width, height));
|
| + std::string fragment_shader_source =
|
| + GetFragmentShaderSource(dest_target, gfx::Size(width, height));
|
| + GLTestHelper::DrawTextureQuad(kSimpleVertexShader,
|
| + fragment_shader_source.c_str(), "a_position",
|
| + "u_texture");
|
|
|
| // Verify.
|
| const uint8_t* expected = expectations[i];
|
| - EXPECT_TRUE(
|
| - GLTestHelper::CheckPixels(0, 0, 1, 1, 1 /* tolerance */, expected));
|
| + EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 1 /* tolerance */,
|
| + expected, nullptr));
|
| }
|
| }
|
|
|
|
|