[Piglit] [PATCH] ext_gpu_shader4: test glBindFragDataLocationEXT
Marek Olšák
maraeo at gmail.com
Mon Apr 15 17:47:27 UTC 2019
From: Marek Olšák <marek.olsak at amd.com>
---
tests/opengl.py | 7 ++
tests/spec/gl-3.1/mixed-int-float-fbo.c | 100 +++++++++++++++++++-----
2 files changed, 88 insertions(+), 19 deletions(-)
diff --git a/tests/opengl.py b/tests/opengl.py
index 40c37a055..666b35200 100644
--- a/tests/opengl.py
+++ b/tests/opengl.py
@@ -3026,20 +3026,27 @@ with profile.test_list.group_manager(
g(['getteximage-formats', 'init-by-rendering'])
g(['getteximage-formats', 'init-by-clear-and-render'])
g(['ext_framebuffer_multisample-fast-clear', 'single-sample'],
'fbo-fast-clear')
g(['ext_framebuffer_object-border-texture-finish'])
add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX1')
add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX4')
add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX8')
add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX16')
+
+with profile.test_list.group_manager(
+ PiglitGLTest,
+ grouptools.join('spec', 'ext_gpu_shader4')) as g:
+ g(['gl-3.1-mixed-int-float-fbo', 'ext_gpu_shader4'], 'bindfragdatalocation mixed-int-float-fbo')
+ g(['gl-3.1-mixed-int-float-fbo', 'ext_gpu_shader4', 'int_second'], 'bindfragdatalocation mixed-int-float-fbo int_second')
+
with profile.test_list.group_manager(
PiglitGLTest, grouptools.join('spec', 'ext_image_dma_buf_import')) as \
g:
g(['ext_image_dma_buf_import-invalid_hints'], run_concurrent=False)
g(['ext_image_dma_buf_import-invalid_attributes'], run_concurrent=False)
g(['ext_image_dma_buf_import-missing_attributes'], run_concurrent=False)
g(['ext_image_dma_buf_import-ownership_transfer'], run_concurrent=False)
g(['ext_image_dma_buf_import-unsupported_format'], run_concurrent=False)
g(['ext_image_dma_buf_import-intel_external_sampler_only'],
run_concurrent=False)
diff --git a/tests/spec/gl-3.1/mixed-int-float-fbo.c b/tests/spec/gl-3.1/mixed-int-float-fbo.c
index d2d7aeb65..8dfeccb41 100644
--- a/tests/spec/gl-3.1/mixed-int-float-fbo.c
+++ b/tests/spec/gl-3.1/mixed-int-float-fbo.c
@@ -26,22 +26,36 @@
* Test mixed integer/float FBO.
*
* If the argument 'int_second' is given the 0th color attachment will
* be a unorm texture and the 1st color attachment will be an integer texture.
* Otherwise, the 0th color attachment will be integer and the 1st color
* attachment will be unorm.
*/
#include "piglit-util-gl.h"
+static bool ext_gpu_shader4 = false;
+
PIGLIT_GL_TEST_CONFIG_BEGIN
- config.supports_gl_core_version = 31;
+ for (int i = 1; i < argc; i++) {
+ if (!strcmp(argv[i], "ext_gpu_shader4")) {
+ ext_gpu_shader4 = true;
+ puts("Testing GL_EXT_gpu_shader4.");
+ break;
+ }
+ }
+
+ if (ext_gpu_shader4)
+ config.supports_gl_compat_version = 10;
+ else
+ config.supports_gl_core_version = 31;
+
config.window_visual = PIGLIT_GL_VISUAL_RGBA;
config.khr_no_error_support = PIGLIT_NO_ERRORS;
PIGLIT_GL_TEST_CONFIG_END
static const char *vs_text =
"#version 150\n"
"in vec4 vertex;\n"
"void main() \n"
"{ \n"
" gl_Position = vertex; \n"
@@ -50,35 +64,71 @@ static const char *vs_text =
static const char *fs_text =
"#version 150\n"
"out ivec4 outputInt;\n"
"out vec4 outputFloat;\n"
"void main() \n"
"{ \n"
" outputInt = ivec4(1, 2, 3, 4); \n"
" outputFloat = vec4(0.25, 0.5, 0.75, 1.0); \n"
"} \n";
+static const char *vs_text_gpu_shader4 =
+ "#version 110\n"
+ "attribute vec4 vertex;\n"
+ "void main() \n"
+ "{ \n"
+ " gl_Position = vertex; \n"
+ "} \n";
+
+static const char *fs_text_gpu_shader4 =
+ "#version 110\n"
+ "#extension GL_EXT_gpu_shader4 : enable\n"
+ "varying out ivec4 outputInt;\n"
+ "varying out vec4 outputFloat;\n"
+ "void main() \n"
+ "{ \n"
+ " outputInt = ivec4(1, 2, 3, 4); \n"
+ " outputFloat = vec4(0.25, 0.5, 0.75, 1.0); \n"
+ "} \n";
+
const int width = 128, height = 128;
bool int_output_first = true;
static GLuint
create_program(void)
{
- GLuint program = piglit_build_simple_program(vs_text, fs_text);
- if (int_output_first) {
- glBindFragDataLocation(program, 0, "outputInt");
- glBindFragDataLocation(program, 1, "outputFloat");
- }
- else {
- glBindFragDataLocation(program, 0, "outputFloat");
- glBindFragDataLocation(program, 1, "outputInt");
+ GLuint program;
+
+ if (ext_gpu_shader4) {
+ program = piglit_build_simple_program(vs_text_gpu_shader4,
+ fs_text_gpu_shader4);
+
+ if (int_output_first) {
+ glBindFragDataLocationEXT(program, 0, "outputInt");
+ glBindFragDataLocationEXT(program, 1, "outputFloat");
+ }
+ else {
+ glBindFragDataLocationEXT(program, 0, "outputFloat");
+ glBindFragDataLocationEXT(program, 1, "outputInt");
+ }
+ } else {
+ program = piglit_build_simple_program(vs_text, fs_text);
+
+ if (int_output_first) {
+ glBindFragDataLocation(program, 0, "outputInt");
+ glBindFragDataLocation(program, 1, "outputFloat");
+ }
+ else {
+ glBindFragDataLocation(program, 0, "outputFloat");
+ glBindFragDataLocation(program, 1, "outputInt");
+ }
}
glLinkProgram(program);
if (!piglit_link_check_status(program))
piglit_report_result(PIGLIT_FAIL);
piglit_check_gl_error(GL_NO_ERROR);
return program;
}
@@ -139,30 +189,35 @@ create_fbo(void)
piglit_report_result(PIGLIT_SKIP);
}
return fbo;
}
enum piglit_result
piglit_display(void)
{
- const int int_clear[4] = { 99, 99, 99, 99 };
- const float float_clear[4] = { 0.33, 0.33, 0.33, 0.33 };
-
- if (int_output_first) {
- glClearBufferiv(GL_COLOR, 0, int_clear);
- glClearBufferfv(GL_COLOR, 1, float_clear);
- }
- else {
- glClearBufferfv(GL_COLOR, 0, float_clear);
- glClearBufferiv(GL_COLOR, 1, int_clear);
+ if (ext_gpu_shader4) {
+ glClearColor(0, 0, 0, 0);
+ glClear(GL_COLOR_BUFFER_BIT);
+ } else {
+ const int int_clear[4] = { 99, 99, 99, 99 };
+ const float float_clear[4] = { 0.33, 0.33, 0.33, 0.33 };
+
+ if (int_output_first) {
+ glClearBufferiv(GL_COLOR, 0, int_clear);
+ glClearBufferfv(GL_COLOR, 1, float_clear);
+ }
+ else {
+ glClearBufferfv(GL_COLOR, 0, float_clear);
+ glClearBufferiv(GL_COLOR, 1, int_clear);
+ }
}
piglit_draw_rect(-1, -1, 2, 2);
bool pass = true;
/* check the int target */
if (int_output_first) {
glReadBuffer(GL_COLOR_ATTACHMENT0);
}
@@ -205,20 +260,27 @@ piglit_display(void)
pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
void
piglit_init(int argc, char **argv)
{
+ if (ext_gpu_shader4) {
+ piglit_require_gl_version(20);
+ piglit_require_extension("GL_ARB_framebuffer_object");
+ piglit_require_extension("GL_EXT_gpu_shader4");
+ piglit_require_extension("GL_EXT_texture_integer");
+ }
+
if (argc > 1 && strcmp(argv[1], "int_second") == 0) {
int_output_first = false;
}
GLuint fbo = create_fbo();
GLuint program = create_program();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glUseProgram(program);
}
--
2.17.1
More information about the Piglit
mailing list