On 4/15/19 10:47 AM, Marek Olšák wrote: > 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");
I don't know if this separation is strictly necessary. The Khronos gl.xml /says/ glBindFragDataLocationEXT is an alias of glBindFragDataLocation. There's no published GLX protocol, so there's nothing that prevents the two from being unaliased in the future. I don't feel very strongly about it either way. Whichever way you decide to do it, this patch is Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > + } > + 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); > } > _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit