Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1119)

Unified Diff: gpu/command_buffer/tests/gl_test_utils.cc

Issue 1736093002: Add a workaround for copyTexImage2D as it is sometimes broken on OSX. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compile error, nits. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/tests/gl_test_utils.cc
diff --git a/gpu/command_buffer/tests/gl_test_utils.cc b/gpu/command_buffer/tests/gl_test_utils.cc
index 4878b1489c0783b9038087c5b8fb24bb04054202..d9a30ce9b96b10b6a12d4387597c237375b6c285 100644
--- a/gpu/command_buffer/tests/gl_test_utils.cc
+++ b/gpu/command_buffer/tests/gl_test_utils.cc
@@ -4,19 +4,71 @@
#include "gpu/command_buffer/tests/gl_test_utils.h"
+#include <GLES2/gl2extchromium.h>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include "base/memory/scoped_ptr.h"
+#include "base/strings/stringize_macros.h"
+#include "base/strings/stringprintf.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/geometry/size.h"
// GCC requires these declarations, but MSVC requires they not be present.
#ifndef COMPILER_MSVC
const uint8_t GLTestHelper::kCheckClearValue;
#endif
+// Compiles a fragment shader for sampling out of a texture of |size| bound to
+// |target| and checks for compilation errors.
+GLuint LoadFragmentShader(unsigned target, const gfx::Size& size) {
+ // clang-format off
+ const char kFragmentShader[] = STRINGIZE(
+ uniform SamplerType a_texture;
+ varying vec2 v_texCoord;
+ void main() {
+ gl_FragColor = TextureLookup(a_texture, v_texCoord * TextureScale);
+ }
+ );
+ const char kShaderFloatPrecision[] = STRINGIZE(
+ precision mediump float;
+ );
+ // clang-format on
+
+ switch (target) {
+ case GL_TEXTURE_2D:
+ return GLTestHelper::LoadShader(
+ GL_FRAGMENT_SHADER,
+ base::StringPrintf("%s\n"
+ "#define SamplerType sampler2D\n"
+ "#define TextureLookup texture2D\n"
+ "#define TextureScale vec2(1.0, 1.0)\n"
+ "%s",
+ kShaderFloatPrecision,
+ kFragmentShader)
+ .c_str());
+ case GL_TEXTURE_RECTANGLE_ARB:
+ return GLTestHelper::LoadShader(
+ GL_FRAGMENT_SHADER,
+ 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)
+ .c_str());
+ default:
+ NOTREACHED();
+ return 0;
+ }
+}
+
bool GLTestHelper::HasExtension(const char* extension) {
std::string extensions(
reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)));
@@ -259,3 +311,35 @@ bool GLTestHelper::SaveBackbufferAsBMP(
fclose(fp);
return true;
}
+
+void GLTestHelper::DrawTextureQuad(GLenum target, const gfx::Size& size) {
+ // clang-format off
+ const char kVertexShader[] = 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
+
+ // Setup program.
+ GLuint vertex_shader =
+ GLTestHelper::LoadShader(GL_VERTEX_SHADER, kVertexShader);
+ GLuint fragment_shader = LoadFragmentShader(target, size);
+ GLuint program = GLTestHelper::SetupProgram(vertex_shader, fragment_shader);
+ EXPECT_NE(program, 0u);
+ glUseProgram(program);
+
+ GLint sampler_location = glGetUniformLocation(program, "a_texture");
+ ASSERT_NE(sampler_location, -1);
+
+ GLuint vertex_buffer = GLTestHelper::SetupUnitQuad(sampler_location);
+ glDrawArrays(GL_TRIANGLES, 0, 6);
+
+ glDeleteShader(vertex_shader);
+ glDeleteShader(fragment_shader);
+ glDeleteProgram(program);
+ glDeleteBuffers(1, &vertex_buffer);
+}

Powered by Google App Engine
This is Rietveld 408576698