Refactor GL tests to use a shader library
Instead of having the same simple shaders repeated over and over in
the test code, reuse a single shader library.
BUG=angleproject:2474
TEST=angle_end2end_tests
Change-Id: I13f8ca8c0125e6d30f1761639bf8c3f69e0e77d2
Reviewed-on: https://chromium-review.googlesource.com/1012078
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/tests/gl_tests/BlitFramebufferANGLETest.cpp b/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
index 6e8de98..c698316 100644
--- a/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
+++ b/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
@@ -5,7 +5,6 @@
//
#include "test_utils/ANGLETest.h"
-
#include "test_utils/gl_raii.h"
using namespace angle;
@@ -65,44 +64,9 @@
{
ANGLETest::SetUp();
- const std::string passthroughVS =
- R"(precision highp float;
- attribute vec4 position;
- varying vec4 pos;
-
- void main()
- {
- gl_Position = position;
- pos = position;
- })";
-
- const std::string checkeredFS =
- R"(precision highp float;
- varying vec4 pos;
-
- void main()
- {
- if (pos.x * pos.y > 0.0)
- {
- gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
- }
- else
- {
- gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
- }
- })";
-
- const std::string blueFS =
- R"(precision highp float;
- varying vec4 pos;
-
- void main()
- {
- gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
- })";
-
- mCheckerProgram = CompileProgram(passthroughVS, checkeredFS);
- mBlueProgram = CompileProgram(passthroughVS, blueFS);
+ mCheckerProgram =
+ CompileProgram(essl1_shaders::vs::Passthrough(), essl1_shaders::fs::Checkered());
+ mBlueProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::Blue());
if (mCheckerProgram == 0 || mBlueProgram == 0)
{
FAIL() << "shader compilation failed.";
@@ -415,7 +379,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.8f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
EXPECT_GL_NO_ERROR();
@@ -442,7 +406,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.8f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
EXPECT_GL_NO_ERROR();
@@ -469,7 +433,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.8f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
EXPECT_GL_NO_ERROR();
@@ -504,7 +468,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.8f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
EXPECT_GL_NO_ERROR();
@@ -539,7 +503,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.8f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
EXPECT_GL_NO_ERROR();
@@ -569,7 +533,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.8f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
EXPECT_GL_NO_ERROR();
@@ -601,7 +565,7 @@
glEnable(GL_DEPTH_TEST);
- drawQuad(mCheckerProgram, "position", 0.3f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.3f);
EXPECT_GL_NO_ERROR();
@@ -618,7 +582,7 @@
glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
// if blit is happening correctly, this quad will not draw, because it is behind the blitted one
- drawQuad(mBlueProgram, "position", 0.8f);
+ drawQuad(mBlueProgram, essl1_shaders::PositionAttrib(), 0.8f);
glDisable(GL_DEPTH_TEST);
@@ -637,7 +601,7 @@
glEnable(GL_DEPTH_TEST);
- drawQuad(mCheckerProgram, "position", 0.3f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.3f);
EXPECT_GL_NO_ERROR();
@@ -655,7 +619,7 @@
// if blit is happening correctly, this quad will not draw, because it is behind the blitted one
- drawQuad(mBlueProgram, "position", 0.8f);
+ drawQuad(mBlueProgram, essl1_shaders::PositionAttrib(), 0.8f);
glDisable(GL_DEPTH_TEST);
@@ -672,7 +636,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.3f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.3f);
EXPECT_GL_NO_ERROR();
@@ -688,7 +652,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.3f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.3f);
EXPECT_GL_NO_ERROR();
@@ -703,7 +667,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.5f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.5f);
EXPECT_GL_NO_ERROR();
@@ -732,7 +696,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.5f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.5f);
EXPECT_GL_NO_ERROR();
@@ -759,7 +723,7 @@
glBindFramebuffer(GL_FRAMEBUFFER, mColorOnlyFBO);
glClear(GL_COLOR_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.3f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.3f);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_ANGLE, mOriginalFBO);
glBindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, mColorOnlyFBO);
@@ -802,7 +766,7 @@
glStencilFunc(GL_ALWAYS, 0x1, 0xFF);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glEnable(GL_STENCIL_TEST);
- drawQuad(mCheckerProgram, "position", 0.3f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.3f);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_ANGLE, mOriginalFBO);
glBindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, mUserFBO);
@@ -825,7 +789,8 @@
EXPECT_PIXEL_EQ( getWindowWidth() / 4, 3 * getWindowHeight() / 4, 0, 255, 0, 255);
glStencilFunc(GL_EQUAL, 0x1, 0xFF); // only pass if stencil buffer at pixel reads 0x1
- drawQuad(mBlueProgram, "position", 0.8f); // blue quad will draw if stencil buffer was copied
+ drawQuad(mBlueProgram, essl1_shaders::PositionAttrib(),
+ 0.8f); // blue quad will draw if stencil buffer was copied
glDisable(GL_STENCIL_TEST);
EXPECT_PIXEL_EQ( getWindowWidth() / 4, getWindowHeight() / 4, 0, 0, 255, 255);
@@ -841,7 +806,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.5f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.5f);
EXPECT_GL_NO_ERROR();
@@ -869,9 +834,9 @@
glBindFramebuffer(GL_FRAMEBUFFER, mColorOnlyFBO);
glClear(GL_COLOR_BUFFER_BIT);
-
- drawQuad(mCheckerProgram, "position", 0.8f);
-
+
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.8f);
+
EXPECT_GL_NO_ERROR();
glBindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, mColorOnlyFBO);
@@ -962,7 +927,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.5f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.5f);
EXPECT_GL_NO_ERROR();
@@ -981,7 +946,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.5f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.5f);
EXPECT_GL_NO_ERROR();
@@ -999,7 +964,7 @@
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- drawQuad(mCheckerProgram, "position", 0.5f);
+ drawQuad(mCheckerProgram, essl1_shaders::PositionAttrib(), 0.5f);
EXPECT_GL_NO_ERROR();
@@ -1047,12 +1012,6 @@
glBindRenderbuffer(GL_RENDERBUFFER, renderbuf.get());
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 2, GL_DEPTH_COMPONENT24, 256, 256);
- const std::string &vertex =
- "#version 300 es\n"
- "in vec2 position;\n"
- "void main() {\n"
- " gl_Position = vec4(position, 0.0, 0.5);\n"
- "}";
const std::string &fragment =
"#version 300 es\n"
"out mediump vec4 red;\n"
@@ -1061,7 +1020,7 @@
" gl_FragDepth = 0.5;\n"
"}";
- ANGLE_GL_PROGRAM(drawRed, vertex, fragment);
+ ANGLE_GL_PROGRAM(drawRed, essl3_shaders::vs::Simple(), fragment);
GLFramebuffer framebuffer;
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.get());
@@ -1102,7 +1061,7 @@
// Draw with 0.5f test and the test should pass.
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_EQUAL);
- drawQuad(drawRed.get(), "position", 0.5f);
+ drawQuad(drawRed.get(), essl3_shaders::PositionAttrib(), 0.5f);
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::red);
ASSERT_GL_NO_ERROR();
@@ -1115,20 +1074,7 @@
glBindRenderbuffer(GL_RENDERBUFFER, renderbuf.get());
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 2, GL_STENCIL_INDEX8, 256, 256);
- const std::string &vertex =
- "#version 300 es\n"
- "in vec2 position;\n"
- "void main() {\n"
- " gl_Position = vec4(position, 0.0, 1.0);\n"
- "}";
- const std::string &fragment =
- "#version 300 es\n"
- "out mediump vec4 red;\n"
- "void main() {\n"
- " red = vec4(1.0, 0.0, 0.0, 1.0);\n"
- "}";
-
- ANGLE_GL_PROGRAM(drawRed, vertex, fragment);
+ ANGLE_GL_PROGRAM(drawRed, essl3_shaders::vs::Simple(), essl3_shaders::fs::Red());
GLFramebuffer framebuffer;
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.get());
@@ -1141,7 +1087,7 @@
glStencilFunc(GL_ALWAYS, 0x1, 0xFF);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glEnable(GL_STENCIL_TEST);
- drawQuad(drawRed.get(), "position", 0.5f);
+ drawQuad(drawRed.get(), essl3_shaders::PositionAttrib(), 0.5f);
GLTexture destColorbuf;
glBindTexture(GL_TEXTURE_2D, destColorbuf.get());
@@ -1172,7 +1118,7 @@
// Draw red if the stencil is 0x1, which should be true after the blit/resolve.
glStencilFunc(GL_EQUAL, 0x1, 0xFF);
- drawQuad(drawRed.get(), "position", 0.5f);
+ drawQuad(drawRed.get(), essl3_shaders::PositionAttrib(), 0.5f);
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::red);
ASSERT_GL_NO_ERROR();