[Piglit] [PATCH] Implement piglit tests for EXT_blend_func_extended
Ryan Houdek
sonicadvance1 at gmail.com
Tue Nov 10 01:50:54 PST 2015
---
tests/all.py | 13 +++
.../api/CMakeLists.gles2.txt | 5 +
.../api/CMakeLists.gles3.txt | 6 ++
.../api/bindfragdataindexed-invalid-parameters.c | 8 ++
tests/spec/arb_blend_func_extended/api/blend-api.c | 8 ++
tests/spec/arb_blend_func_extended/api/builtins.c | 111 +++++++++++++++++++++
.../arb_blend_func_extended/api/getfragdataindex.c | 38 ++++++-
.../arb_blend_func_extended/api/output-location.c | 29 +++++-
.../execution/CMakeLists.gles2.txt | 4 +
.../execution/CMakeLists.gles3.txt | 6 ++
.../execution/fbo-extended-blend-explicit.c | 81 +++++++++++++--
.../execution/fbo-extended-blend-pattern.c | 89 ++++++++++++++++-
.../execution/fbo-extended-blend.c | 81 +++++++++++++--
13 files changed, 461 insertions(+), 18 deletions(-)
create mode 100644 tests/spec/arb_blend_func_extended/api/CMakeLists.gles2.txt
create mode 100644 tests/spec/arb_blend_func_extended/api/CMakeLists.gles3.txt
create mode 100644 tests/spec/arb_blend_func_extended/api/builtins.c
create mode 100644 tests/spec/arb_blend_func_extended/execution/CMakeLists.gles2.txt
create mode 100644 tests/spec/arb_blend_func_extended/execution/CMakeLists.gles3.txt
diff --git a/tests/all.py b/tests/all.py
index ee2b7d9..b81578d 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -3982,6 +3982,19 @@ with profile.group_manager(
run_concurrent=False)
g(['arb_blend_func_extended-fbo-extended-blend-pattern'],
run_concurrent=False)
+ g(['arb_blend_func_extended-blend-api_gles2'], run_concurrent=False)
+ g(['arb_blend_func_extended-builtins_gles2'], run_concurrent=False)
+ g(['arb_blend_func_extended-bindfragdataindexed-invalid-parameters_gles3'],
+ run_concurrent=False)
+ g(['arb_blend_func_extended-output-location_gles3'], run_concurrent=False)
+ g(['arb_blend_func_extended-getfragdataindex_gles3'], run_concurrent=False)
+ g(['arb_blend_func_extended-fbo-extended-blend-pattern_gles2'],
+ run_concurrent=False)
+ g(['arb_blend_func_extended-fbo-extended-blend-pattern_gles3'],
+ run_concurrent=False)
+ g(['arb_blend_func_extended-fbo-extended-blend_gles3'], run_concurrent=False)
+ g(['arb_blend_func_extended-fbo-extended-blend-explicit_gles3'],
+ run_concurrent=False)
with profile.group_manager(
PiglitGLTest,
diff --git a/tests/spec/arb_blend_func_extended/api/CMakeLists.gles2.txt b/tests/spec/arb_blend_func_extended/api/CMakeLists.gles2.txt
new file mode 100644
index 0000000..2966073
--- /dev/null
+++ b/tests/spec/arb_blend_func_extended/api/CMakeLists.gles2.txt
@@ -0,0 +1,5 @@
+link_libraries(piglitutil_${piglit_target_api})
+
+piglit_add_executable (arb_blend_func_extended-blend-api_${piglit_target_api} blend-api)
+piglit_add_executable (arb_blend_func_extended-builtins_${piglit_target_api} builtins.c)
+# vim: ft=cmake:
diff --git a/tests/spec/arb_blend_func_extended/api/CMakeLists.gles3.txt b/tests/spec/arb_blend_func_extended/api/CMakeLists.gles3.txt
new file mode 100644
index 0000000..a005fc2
--- /dev/null
+++ b/tests/spec/arb_blend_func_extended/api/CMakeLists.gles3.txt
@@ -0,0 +1,6 @@
+link_libraries(piglitutil_${piglit_target_api})
+
+piglit_add_executable (arb_blend_func_extended-bindfragdataindexed-invalid-parameters_${piglit_target_api} bindfragdataindexed-invalid-parameters.c)
+piglit_add_executable (arb_blend_func_extended-output-location_${piglit_target_api} output-location.c)
+piglit_add_executable (arb_blend_func_extended-getfragdataindex_${piglit_target_api} getfragdataindex.c)
+# vim: ft=cmake:
diff --git a/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c b/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c
index 7ef6048..c4a8d53 100644
--- a/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c
+++ b/tests/spec/arb_blend_func_extended/api/bindfragdataindexed-invalid-parameters.c
@@ -31,7 +31,11 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_compat_version = 10;
+#else // PIGLIT_USE_OPENGLES3
+ config.supports_gl_es_version = 30;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
PIGLIT_GL_TEST_CONFIG_END
@@ -47,8 +51,12 @@ void piglit_init(int argc, char **argv)
GLint max_draw_buffers, max_dual_source;
GLuint prog;
+#ifdef PIGLIT_USE_OPENGL
piglit_require_gl_version(30);
piglit_require_extension("GL_ARB_blend_func_extended");
+#else // PIGLIT_USE_OPENGLES3
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &max_draw_buffers);
glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &max_dual_source);
diff --git a/tests/spec/arb_blend_func_extended/api/blend-api.c b/tests/spec/arb_blend_func_extended/api/blend-api.c
index 00e4c7b..4c34bc7 100644
--- a/tests/spec/arb_blend_func_extended/api/blend-api.c
+++ b/tests/spec/arb_blend_func_extended/api/blend-api.c
@@ -30,7 +30,11 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_compat_version = 10;
+#else // PIGLIT_USE_OPENGL_ES2
+ config.supports_gl_es_version = 20;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
PIGLIT_GL_TEST_CONFIG_END
@@ -45,8 +49,12 @@ void piglit_init(int argc, char **argv)
{
GLint max_dual_source;
+#ifdef PIGLIT_USE_OPENGL
piglit_require_gl_version(30);
piglit_require_extension("GL_ARB_blend_func_extended");
+#else // PIGLIT_USE_OPENGL_ES2
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
/* This test needs some number of draw buffers, so make sure the
* implementation isn't broken. This enables the test to generate a
diff --git a/tests/spec/arb_blend_func_extended/api/builtins.c b/tests/spec/arb_blend_func_extended/api/builtins.c
new file mode 100644
index 0000000..e0a6c6f
--- /dev/null
+++ b/tests/spec/arb_blend_func_extended/api/builtins.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2015 Ryan Houdek <Sonicadvance1 at gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "piglit-util-gl.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+ config.supports_gl_es_version = 20;
+ config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+bool compile_simple_program(const char* vs_text, const char* fs_text)
+{
+ GLuint vs;
+ GLuint fs;
+ GLuint prog;
+
+ prog = glCreateProgram();
+
+ vs = piglit_compile_shader_text_nothrow(GL_VERTEX_SHADER, vs_text);
+ fs = piglit_compile_shader_text_nothrow(GL_FRAGMENT_SHADER, fs_text);
+
+ if (!vs || !fs)
+ return false;
+
+ glAttachShader(prog, vs);
+ glAttachShader(prog, fs);
+ glLinkProgram(prog);
+
+ return !!prog;
+}
+
+enum piglit_result
+piglit_display(void)
+{
+ return PIGLIT_FAIL;
+}
+
+void piglit_init(int argc, char **argv)
+{
+ bool pass = true;
+ char fs_text[256];
+
+ piglit_require_extension("GL_EXT_blend_func_extended");
+
+ static const char *vs_text =
+ "#version 100\n"
+ "void main() {\n"
+ " gl_Position = vec4(0);\n"
+ "}\n"
+ ;
+
+ static const char *fs_template =
+ "#version 100\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "void main() {\n"
+ " %s = vec4(0);\n"
+ " %s = vec4(0);\n"
+ "}\n"
+ ;
+
+ // Tests that should pass
+ // Regular FragColor
+ snprintf(fs_text, 256, fs_template,
+ "gl_FragColor",
+ "gl_SecondaryFragColorEXT");
+ pass = compile_simple_program(vs_text, fs_text) && pass;
+
+ // Regular FragData
+ snprintf(fs_text, 256, fs_template,
+ "gl_FragData[0]",
+ "gl_SecondaryFragDataEXT[0]");
+ pass = compile_simple_program(vs_text, fs_text) && pass;
+
+ // Tests that should fail
+ // FragColor & SecondaryFragData
+ snprintf(fs_text, 256, fs_template,
+ "gl_FragColor",
+ "gl_SecondaryFragDataEXT[0]");
+ pass = !compile_simple_program(vs_text, fs_text) && pass;
+
+ // FragData & SecondaryFragColor
+ snprintf(fs_text, 256, fs_template,
+ "gl_FragData[0]",
+ "gl_SecondaryFragColorEXT");
+ pass = !compile_simple_program(vs_text, fs_text) && pass;
+
+ piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+
+}
diff --git a/tests/spec/arb_blend_func_extended/api/getfragdataindex.c b/tests/spec/arb_blend_func_extended/api/getfragdataindex.c
index 3fb8aa8..a30263e 100644
--- a/tests/spec/arb_blend_func_extended/api/getfragdataindex.c
+++ b/tests/spec/arb_blend_func_extended/api/getfragdataindex.c
@@ -30,11 +30,16 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_compat_version = 10;
+#else // PIGLIT_USE_OPENGL_ES3
+ config.supports_gl_es_version = 30;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
PIGLIT_GL_TEST_CONFIG_END
+#ifdef PIGLIT_USE_OPENGL
static const char *vs_text =
"#version 130\n"
"in vec4 vertex;\n"
@@ -51,6 +56,25 @@ static const char *fs_text =
" a[1] = vec4(2.0);\n"
"}\n"
;
+#else // PIGLIT_USE_OPENGL_ES3
+static const char *vs_text =
+ "#version 300 es\n"
+ "in vec4 vertex;\n"
+ "void main() { gl_Position = vertex; }\n"
+ ;
+
+static const char *fs_text =
+ "#version 300 es\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "out highp vec4 v;\n"
+ "out highp vec4 a[2];\n"
+ "void main() {\n"
+ " v = vec4(0.0);\n"
+ " a[0] = vec4(1.0);\n"
+ " a[1] = vec4(2.0);\n"
+ "}\n"
+ ;
+#endif
enum piglit_result
piglit_display(void)
@@ -66,8 +90,12 @@ void piglit_init(int argc, char **argv)
GLuint fs;
GLint idx;
+#ifdef PIGLIT_USE_OPENGL
piglit_require_gl_version(30);
piglit_require_extension("GL_ARB_blend_func_extended");
+#else // PIGLIT_USE_OPENGL_ES3
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
/* This test needs some number of draw buffers, so make sure the
* implementation isn't broken. This enables the test to generate a
@@ -84,7 +112,7 @@ void piglit_init(int argc, char **argv)
glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &max_dual_source);
if (max_dual_source < 1) {
fprintf(stderr,
- "ARB_blend_func_extended requires GL_MAX_DUAL_SOURCE_DRAW_BUFFERS >= 1. "
+ "blend_func_extended requires GL_MAX_DUAL_SOURCE_DRAW_BUFFERS >= 1. "
"Only got %d!\n",
max_dual_source);
piglit_report_result(PIGLIT_FAIL);
@@ -105,7 +133,11 @@ void piglit_init(int argc, char **argv)
* or if an error occurs, -1 will be returned."
*/
printf("Querying index before linking...\n");
+#ifdef PIGLIT_USE_OPENGL
idx = glGetFragDataIndex(prog, "v");
+#else // PIGLIT_USE_OPENGLES3
+ idx = glGetFragDataIndexEXT(prog, "v");
+#endif
if (!piglit_check_gl_error(GL_INVALID_OPERATION))
piglit_report_result(PIGLIT_FAIL);
@@ -123,7 +155,11 @@ void piglit_init(int argc, char **argv)
}
printf("Querying index of nonexistent variable...\n");
+#ifdef PIGLIT_USE_OPENGL
idx = glGetFragDataIndex(prog, "waldo");
+#else // PIGLIT_USE_OPENGLES3
+ idx = glGetFragDataIndexEXT(prog, "waldo");
+#endif
if (!piglit_check_gl_error(GL_NO_ERROR))
piglit_report_result(PIGLIT_FAIL);
diff --git a/tests/spec/arb_blend_func_extended/api/output-location.c b/tests/spec/arb_blend_func_extended/api/output-location.c
index b95ee72..1fc9203 100644
--- a/tests/spec/arb_blend_func_extended/api/output-location.c
+++ b/tests/spec/arb_blend_func_extended/api/output-location.c
@@ -30,11 +30,16 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_core_version = 31;
+#else // PIGLIT_USE_OPENGLES3
+ config.supports_gl_es_version = 30;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
PIGLIT_GL_TEST_CONFIG_END
+#ifdef PIGLIT_USE_OPENGL
static const char *vs_text =
"#version 150\n"
"in vec4 vertex;\n"
@@ -51,6 +56,24 @@ static const char *fs_template =
" b = vec4(1.0);\n"
"}\n"
;
+#else // PIGLIT_USE_OPENGLES3
+static const char *vs_text =
+ "#version 300 es\n"
+ "in vec4 vertex;\n"
+ "void main() { gl_Position = vertex; }\n"
+ ;
+
+static const char *fs_template =
+ "#version 300 es\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "layout(location = 0, index = 0) out highp vec4 a;\n"
+ "layout(location = %d, index = 1) out highp vec4 b;\n"
+ "void main() {\n"
+ " a = vec4(0.0);\n"
+ " b = vec4(1.0);\n"
+ "}\n"
+ ;
+#endif
enum piglit_result
piglit_display(void)
@@ -64,8 +87,12 @@ void piglit_init(int argc, char **argv)
GLuint prog;
char fs_text[256];
- piglit_require_extension("GL_ARB_blend_func_extended");
+#ifdef PIGLIT_USE_OPENGL
+ piglit_require_extension("GL_ARB_blend_func_extended");
+#else // PIGLIT_USE_OPENGLES3
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &max_dual_source);
if (max_dual_source < 1) {
diff --git a/tests/spec/arb_blend_func_extended/execution/CMakeLists.gles2.txt b/tests/spec/arb_blend_func_extended/execution/CMakeLists.gles2.txt
new file mode 100644
index 0000000..8039d99
--- /dev/null
+++ b/tests/spec/arb_blend_func_extended/execution/CMakeLists.gles2.txt
@@ -0,0 +1,4 @@
+link_libraries(piglitutil_${piglit_target_api})
+
+piglit_add_executable (arb_blend_func_extended-fbo-extended-blend-pattern_${piglit_target_api} fbo-extended-blend-pattern.c)
+# vim: ft=cmake:
diff --git a/tests/spec/arb_blend_func_extended/execution/CMakeLists.gles3.txt b/tests/spec/arb_blend_func_extended/execution/CMakeLists.gles3.txt
new file mode 100644
index 0000000..a70e9fa
--- /dev/null
+++ b/tests/spec/arb_blend_func_extended/execution/CMakeLists.gles3.txt
@@ -0,0 +1,6 @@
+link_libraries(piglitutil_${piglit_target_api})
+
+piglit_add_executable (arb_blend_func_extended-fbo-extended-blend_${piglit_target_api} fbo-extended-blend.c)
+piglit_add_executable (arb_blend_func_extended-fbo-extended-blend-explicit_${piglit_target_api} fbo-extended-blend-explicit.c)
+piglit_add_executable (arb_blend_func_extended-fbo-extended-blend-pattern_${piglit_target_api} fbo-extended-blend-pattern.c)
+# vim: ft=cmake:
diff --git a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c
index a6450b8..74fb449 100644
--- a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c
+++ b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c
@@ -39,7 +39,11 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_compat_version = 30;
+#else // PIGLIT_USE_OPENGL_ES3
+ config.supports_gl_es_version = 30;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB;
PIGLIT_GL_TEST_CONFIG_END
@@ -91,14 +95,20 @@ static GLint uniform_src0, uniform_src1;
static void blend(const float *src, const float *src1, const float *dst,
GLenum blendsrc, GLenum blenddst, GLenum blendop)
{
+ float verts[] = {
+ -1, -1, 0, 1,
+ -1, 1, 0, 1,
+ 1, -1, 0, 1,
+ 1, 1, 0, 1,
+ };
glUniform4fv(uniform_src0, 1, dst);
- piglit_draw_rect(0, 0, piglit_width, piglit_height);
+ piglit_draw_rect_from_arrays(verts, NULL, false);
glEnable(GL_BLEND);
glBlendEquation(blendop);
glBlendFunc(blendsrc, blenddst);
glUniform4fv(uniform_src0, 1, src);
glUniform4fv(uniform_src1, 1, src1);
- piglit_draw_rect(0, 0, piglit_width, piglit_height);
+ piglit_draw_rect_from_arrays(verts, NULL, false);
glDisable(GL_BLEND);
}
@@ -200,11 +210,12 @@ static void blend_expected(float *expected, const float *src, const float *src1,
}
}
+#ifdef PIGLIT_USE_OPENGL
static const char *vs_text =
"#version 130\n"
+ "in vec4 vertex;\n"
"void main() {\n"
- " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
- " gl_FrontColor = gl_Color;\n"
+ " gl_Position = vertex;\n"
"}\n"
;
@@ -220,6 +231,28 @@ static const char *fs_text =
" col1 = src1;\n"
"}\n"
;
+#else // PIGLIT_USE_OPENGL_ES3
+static const char *vs_text =
+ "#version 300 es\n"
+ "in vec4 vertex;\n"
+ "void main() {\n"
+ " gl_Position = vertex;\n"
+ "}\n"
+ ;
+
+static const char *fs_text =
+ "#version 300 es\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "uniform highp vec4 src0;\n"
+ "uniform highp vec4 src1;\n"
+ "layout(location = 0, index = 0) out highp vec4 col0;\n"
+ "layout(location = 0, index = 1) out highp vec4 col1;\n"
+ "void main() {\n"
+ " col0 = src0;\n"
+ " col1 = src1;\n"
+ "}\n"
+ ;
+#endif
static void
create_fbo(void)
@@ -227,6 +260,7 @@ create_fbo(void)
GLuint rb[32];
int i;
+#ifdef PIGLIT_USE_OPENGL
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
@@ -247,6 +281,28 @@ create_fbo(void)
piglit_width, piglit_height);
check_error(__LINE__);
}
+#else // PIGLIT_USE_OPENGL_ES3
+ glGenFramebuffers(1, &fbo);
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, fbo);
+
+ glGenRenderbuffers(max_ds_buffers, rb);
+ check_error(__LINE__);
+
+ for (i = 0; i < max_ds_buffers; i++) {
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, rb[i]);
+ check_error(__LINE__);
+
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
+ GL_COLOR_ATTACHMENT0 + i,
+ GL_RENDERBUFFER_EXT,
+ rb[i]);
+ check_error(__LINE__);
+
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_RGBA8,
+ piglit_width, piglit_height);
+ check_error(__LINE__);
+ }
+#endif
}
static enum piglit_result
@@ -266,11 +322,22 @@ test(void)
create_fbo();
+#ifdef PIGLIT_USE_OPENGL
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+#else // PIGLIT_USE_OPENGL_ES3
+ GLenum bufs[] = {GL_COLOR_ATTACHMENT0_EXT};
+ glDrawBuffers(1, bufs);
+#endif
prog = piglit_build_simple_program(vs_text, fs_text);
glUseProgram(prog);
+ GLuint vertex_index = glGetAttribLocation(prog, "vertex");
+
+ /* Enable vertex attrib array */
+ glEnableVertexAttribArray(vertex_index);
+ glVertexAttribPointer(vertex_index, 4, GL_FLOAT, GL_FALSE, 0, 0);
+
uniform_src0 = glGetUniformLocation(prog, "src0");
uniform_src1 = glGetUniformLocation(prog, "src1");
@@ -315,10 +382,12 @@ void
piglit_init(int argc, char**argv)
{
enum piglit_result result;
- piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
-
+#ifdef PIGLIT_USE_OPENGL
piglit_require_extension("GL_ARB_blend_func_extended");
piglit_require_extension("GL_ARB_explicit_attrib_location");
+#else // PIGLIT_USE_OPENGL_ES3
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &max_ds_buffers);
diff --git a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-pattern.c b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-pattern.c
index 7168a2c..6f4a3db 100644
--- a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-pattern.c
+++ b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-pattern.c
@@ -48,7 +48,13 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_compat_version = 30;
+#elif PIGLIT_USE_OPENGL_ES3
+ config.supports_gl_es_version = 30;
+#else // PIGLIT_USE_OPENGL_ES2
+ config.supports_gl_es_version = 20;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB;
PIGLIT_GL_TEST_CONFIG_END
@@ -57,10 +63,12 @@ static const char *TestName = "fbo-extended-blend-pattern";
static GLint uniform_src0, uniform_src1, uniform_src2;
+#ifdef PIGLIT_USE_OPENGL
static const char *vs_text =
"#version 130\n"
+ "in vec4 vertex;\n"
"void main() {\n"
- " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
+ " gl_Position = vertex;\n"
"}\n"
;
@@ -83,6 +91,64 @@ static const char *fs_text =
" col1 = src2;\n"
"}\n"
;
+#elif PIGLIT_USE_OPENGL_ES3
+static const char *vs_text =
+ "#version 300 es\n"
+ "in vec4 vertex;\n"
+ "void main() {\n"
+ " gl_Position = vertex;\n"
+ "}\n"
+ ;
+
+static const char *fs_text =
+ "#version 300 es\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "precision highp float;\n"
+ "uniform vec4 src0;\n"
+ "uniform vec4 src1;\n"
+ "uniform vec4 src2;\n"
+ "layout(location = 0, index = 0) out vec4 col0;\n"
+ "layout(location = 0, index = 1) out vec4 col1;\n"
+ "void main() {\n"
+ " int a = int(gl_FragCoord.x) / 10;\n"
+ " int b = int(gl_FragCoord.y) / 10;\n"
+ " int c = int(mod(a + b, 2));\n"
+ " col0 = src0;\n"
+ " if (c == 0)\n"
+ " col1 = src1;\n"
+ " else\n"
+ " col1 = src2;\n"
+ "}\n"
+ ;
+#else // PIGLIT_USE_OPENGL_ES2
+static const char *vs_text =
+ "#version 100\n"
+ "attribute vec4 vertex;\n"
+ "void main() {\n"
+ " gl_Position = vertex;\n"
+ "}\n"
+ ;
+
+static const char *fs_text =
+ "#version 100\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "precision highp float;\n"
+ "uniform vec4 src0;\n"
+ "uniform vec4 src1;\n"
+ "uniform vec4 src2;\n"
+ "void main() {\n"
+ " float a = floor(gl_FragCoord.x / 10.0);\n"
+ " float b = floor(gl_FragCoord.y / 10.0);\n"
+ " float c = floor(mod(a + b, 2.0));\n"
+ " gl_FragColor = src0;\n"
+ " if (c == 0.0)\n"
+ " gl_SecondaryFragColorEXT = src1;\n"
+ " else\n"
+ " gl_SecondaryFragColorEXT = src2;\n"
+ "}\n"
+ ;
+
+#endif
static void
check_error(int line)
@@ -97,14 +163,20 @@ check_error(int line)
static void
blend(const float *src, const float *src1, const float *src2, const float *dst)
{
+ float verts[] = {
+ -1, -1, 0, 1,
+ -1, 1, 0, 1,
+ 1, -1, 0, 1,
+ 1, 1, 0, 1,
+ };
glUniform4fv(uniform_src0, 1, dst);
- piglit_draw_rect(0, 0, piglit_width, piglit_height);
+ piglit_draw_rect_from_arrays(verts, NULL, false);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR, GL_SRC1_COLOR);
glUniform4fv(uniform_src0, 1, src);
glUniform4fv(uniform_src1, 1, src1);
glUniform4fv(uniform_src2, 1, src2);
- piglit_draw_rect(0, 0, piglit_width, piglit_height);
+ piglit_draw_rect_from_arrays(verts, NULL, false);
glDisable(GL_BLEND);
glFinish();
}
@@ -126,6 +198,12 @@ piglit_display(void)
prog = piglit_build_simple_program(vs_text, fs_text);
glUseProgram(prog);
+ GLuint vertex_index = glGetAttribLocation(prog, "vertex");
+
+ /* Enable vertex attrib array */
+ glEnableVertexAttribArray(vertex_index);
+ glVertexAttribPointer(vertex_index, 4, GL_FLOAT, GL_FALSE, 0, 0);
+
uniform_src0 = glGetUniformLocation(prog, "src0");
uniform_src1 = glGetUniformLocation(prog, "src1");
uniform_src2 = glGetUniformLocation(prog, "src2");
@@ -148,7 +226,10 @@ piglit_display(void)
void
piglit_init(int argc, char **argv)
{
+#ifdef PIGLIT_USE_OPENGL
piglit_require_extension("GL_ARB_blend_func_extended");
piglit_require_extension("GL_ARB_explicit_attrib_location");
- piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
+#else // PIGLIT_USE_OPENGL_ES{2, 3}
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
}
diff --git a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend.c b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend.c
index 523d07c..884378b 100644
--- a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend.c
+++ b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend.c
@@ -39,7 +39,11 @@
PIGLIT_GL_TEST_CONFIG_BEGIN
+#ifdef PIGLIT_USE_OPENGL
config.supports_gl_compat_version = 30;
+#else // PIGLIT_USE_OPENGL_ES3
+ config.supports_gl_es_version = 30;
+#endif
config.window_visual = PIGLIT_GL_VISUAL_RGB;
PIGLIT_GL_TEST_CONFIG_END
@@ -91,14 +95,20 @@ static GLint uniform_src0, uniform_src1;
static void blend(const float *src, const float *src1, const float *dst,
GLenum blendsrc, GLenum blenddst, GLenum blendop)
{
+ float verts[] = {
+ -1, -1, 0, 1,
+ -1, 1, 0, 1,
+ 1, -1, 0, 1,
+ 1, 1, 0, 1,
+ };
glUniform4fv(uniform_src0, 1, dst);
- piglit_draw_rect(0, 0, piglit_width, piglit_height);
+ piglit_draw_rect_from_arrays(verts, NULL, false);
glEnable(GL_BLEND);
glBlendEquation(blendop);
glBlendFunc(blendsrc, blenddst);
glUniform4fv(uniform_src0, 1, src);
glUniform4fv(uniform_src1, 1, src1);
- piglit_draw_rect(0, 0, piglit_width, piglit_height);
+ piglit_draw_rect_from_arrays(verts, NULL, false);
glDisable(GL_BLEND);
}
@@ -200,11 +210,12 @@ static void blend_expected(float *expected, const float *src, const float *src1,
}
}
+#ifdef PIGLIT_USE_OPENGL
static const char *vs_text =
"#version 130\n"
+ "in vec4 vertex;\n"
"void main() {\n"
- " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
- " gl_FrontColor = gl_Color;\n"
+ " gl_Position = vertex;\n"
"}\n"
;
@@ -219,6 +230,28 @@ static const char *fs_text =
" col1 = src1;\n"
"}\n"
;
+#else // PIGLIT_USE_OPENGL_ES3
+static const char *vs_text =
+ "#version 300 es\n"
+ "in vec4 vertex;\n"
+ "void main() {\n"
+ " gl_Position = vertex;\n"
+ "}\n"
+ ;
+
+static const char *fs_text =
+ "#version 300 es\n"
+ "#extension GL_EXT_blend_func_extended : enable\n"
+ "uniform highp vec4 src0;\n"
+ "uniform highp vec4 src1;\n"
+ "out highp vec4 col0;\n"
+ "out highp vec4 col1;\n"
+ "void main() {\n"
+ " col0 = src0;\n"
+ " col1 = src1;\n"
+ "}\n"
+ ;
+#endif
static void
create_fbo(void)
@@ -226,6 +259,7 @@ create_fbo(void)
GLuint rb[32];
int i;
+#ifdef PIGLIT_USE_OPENGL
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
@@ -246,6 +280,28 @@ create_fbo(void)
piglit_width, piglit_height);
check_error(__LINE__);
}
+#else // PIGLIT_USE_OPENGL_ES3
+ glGenFramebuffers(1, &fbo);
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, fbo);
+
+ glGenRenderbuffers(max_ds_buffers, rb);
+ check_error(__LINE__);
+
+ for (i = 0; i < max_ds_buffers; i++) {
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, rb[i]);
+ check_error(__LINE__);
+
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
+ GL_COLOR_ATTACHMENT0 + i,
+ GL_RENDERBUFFER_EXT,
+ rb[i]);
+ check_error(__LINE__);
+
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_RGBA8,
+ piglit_width, piglit_height);
+ check_error(__LINE__);
+ }
+#endif
}
static enum piglit_result
@@ -278,11 +334,22 @@ test(void)
create_fbo();
+#ifdef PIGLIT_USE_OPENGL
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+#else // PIGLIT_USE_OPENGL_ES3
+ GLenum bufs[] = {GL_COLOR_ATTACHMENT0_EXT};
+ glDrawBuffers(1, bufs);
+#endif
glLinkProgram(prog);
glUseProgram(prog);
+ GLuint vertex_index = glGetAttribLocation(prog, "vertex");
+
+ /* Enable vertex attrib array */
+ glEnableVertexAttribArray(vertex_index);
+ glVertexAttribPointer(vertex_index, 4, GL_FLOAT, GL_FALSE, 0, 0);
+
uniform_src0 = glGetUniformLocation(prog, "src0");
uniform_src1 = glGetUniformLocation(prog, "src1");
@@ -327,9 +394,11 @@ void
piglit_init(int argc, char**argv)
{
enum piglit_result result;
- piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
-
+#ifdef PIGLIT_USE_OPENGL
piglit_require_extension("GL_ARB_blend_func_extended");
+#else // PIGLIT_USE_OPENGL_ES3
+ piglit_require_extension("GL_EXT_blend_func_extended");
+#endif
glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &max_ds_buffers);
--
2.5.0
More information about the Piglit
mailing list