From: Marek Olšák <marek.ol...@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 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit