Also, case of non-multisample color buffer is not handled correctly in the test. Move it inside the shader program.
Signed-off-by: Anuj Phogat <[email protected]> --- .../execution/builtin-gl-sample-id.cpp | 69 +++++++++++----------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/tests/spec/arb_sample_shading/execution/builtin-gl-sample-id.cpp b/tests/spec/arb_sample_shading/execution/builtin-gl-sample-id.cpp index 5a7f1b7..78d029b 100644 --- a/tests/spec/arb_sample_shading/execution/builtin-gl-sample-id.cpp +++ b/tests/spec/arb_sample_shading/execution/builtin-gl-sample-id.cpp @@ -58,7 +58,7 @@ void compile_shader(void) { static const char *vert = - "#version 130\n" + "#version 140\n" "in vec4 piglit_vertex;\n" "void main()\n" "{\n" @@ -68,33 +68,30 @@ compile_shader(void) "#version 130\n" "#extension GL_ARB_sample_shading : enable\n" "uniform int samples;\n" - "out vec4 out_color;\n" + "out ivec4 out_color;\n" "void main()\n" "{\n" - " if (samples == 0)\n" - " out_color = vec4(0.0, 1.0, 0.0, 1.0);\n" - " else\n" - " out_color = vec4(0.0, float(gl_SampleID) / samples, 0.0, 1.0);\n" + " out_color = ivec4(0, gl_SampleID, 0, 1);\n" "}\n"; - static const char *frag_1 = - "#version 130\n" - "#extension GL_ARB_texture_multisample : require\n" - "uniform sampler2DMS ms_tex;\n" + static const char *frag_template = + "#version 140\n" + "%s\n" + "uniform %s ms_tex;\n" "uniform int samples;\n" "out vec4 out_color;\n" "void main()\n" "{\n" - " int i;\n" + " int i = 0;\n" " bool pass = true;\n" - " for (i = 0; i < samples; i++) {\n" - " vec4 sample_color =\n" - " texelFetch(ms_tex, ivec2(gl_FragCoord.xy), i);\n" - " float sample_id_float = sample_color.g * samples;\n" - " int sample_id_int = int(round(sample_id_float));\n" - " if (sample_id_int != i)\n" - " pass = false;\n" - " }\n" + /* Use do-while to include 'samples = 0' case. */ + " do {\n" + " ivec4 sample_color =\n" + " texelFetch(ms_tex, ivec2(gl_FragCoord.xy)%s);\n" + " if (sample_color.g != i)\n" + " pass = false;\n" + " i++;\n" + " } while (i < samples);\n" "\n" " if (pass)\n" " out_color = vec4(0.0, 1.0, 0.0, 1.0);\n" @@ -108,6 +105,15 @@ compile_shader(void) piglit_report_result(PIGLIT_FAIL); } + + char *frag_1; + if (num_samples) + asprintf(&frag_1, frag_template, + "#extension GL_ARB_texture_multisample : require", + "isampler2DMS", ", i"); + else + asprintf(&frag_1, frag_template, "", "isampler2DRect", ""); + prog_1 = piglit_build_simple_program(vert, frag_1); if (!piglit_link_check_status(prog_1)) { piglit_report_result(PIGLIT_FAIL); @@ -128,7 +134,7 @@ piglit_init(int argc, char **argv) piglit_require_extension("GL_ARB_texture_multisample"); piglit_require_extension("GL_ARB_sample_shading"); - piglit_require_GLSL_version(130); + piglit_require_GLSL_version(140); /* Skip the test if num_samples > GL_MAX_SAMPLES */ GLint max_samples; @@ -138,6 +144,8 @@ piglit_init(int argc, char **argv) FboConfig msConfig(num_samples, pattern_width, pattern_height); msConfig.attach_texture = true; + msConfig.color_format = GL_RGBA_INTEGER; + msConfig.color_internalformat = GL_RGBA8UI; multisampled_tex.setup(msConfig); compile_shader(); @@ -151,7 +159,7 @@ piglit_display() { bool pass = true; int samples; - float expected[4] = {0.0, 1.0, 0.0, 1.0}; + float expected[4] = {0.0, 1.0, 0.0, 1.0}; glUseProgram(prog_0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, multisampled_tex.handle); @@ -163,19 +171,12 @@ piglit_display() glBindFramebuffer(GL_READ_FRAMEBUFFER, multisampled_tex.handle); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, piglit_winsys_fbo); glClear(GL_COLOR_BUFFER_BIT); - if (samples == 0) { - glBlitFramebuffer(0, 0, - pattern_width, pattern_height, - 0, 0, - pattern_width, pattern_height, - GL_COLOR_BUFFER_BIT, - GL_NEAREST); - } else { - glUseProgram(prog_1); - glUniform1i(glGetUniformLocation(prog_1, "ms_tex"), 0); - glUniform1i(glGetUniformLocation(prog_1, "samples"), samples); - piglit_draw_rect(-1, -1, 2, 2); - } + + glUseProgram(prog_1); + glUniform1i(glGetUniformLocation(prog_1, "ms_tex"), 0); + glUniform1i(glGetUniformLocation(prog_1, "samples"), samples); + piglit_draw_rect(-1, -1, 2, 2); + glBindFramebuffer(GL_READ_FRAMEBUFFER, piglit_winsys_fbo); pass = piglit_probe_rect_rgba(0, 0, pattern_width, pattern_width, expected) -- 1.8.3.1 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
