Tests the depth buffer only for coverage value equal to 0.0 and 1.0 because depth buffer behaviour is undefined for intermediate coverage values.
This test found an issue with the current implemantation of msaa for i965 on mesa. Following patch on mesa makes this test to pass: [PATCH] i965/msaa: Set KILL_ENABLE when GL_ALPHA_TO_COVERAGE enabled commit 6c355cca9149e43850cf27f2d0821fab1e7a69f5 Signed-off-by: Anuj Phogat <[email protected]> --- tests/all.tests | 9 ++-- .../sample-alpha-to-coverage.cpp | 47 +++++++++++++------ 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/tests/all.tests b/tests/all.tests index 27951bb..9970923 100644 --- a/tests/all.tests +++ b/tests/all.tests @@ -1418,10 +1418,11 @@ for num_samples in MSAA_SAMPLE_COUNTS: ext_framebuffer_multisample[test_name] = PlainExecTest(executable) for num_samples in MSAA_SAMPLE_COUNTS: - test_name = ' '.join(['sample-alpha-to-coverage', str(num_samples)]) - executable = 'ext_framebuffer_multisample-{0} -auto'.format( - test_name) - ext_framebuffer_multisample[test_name] = PlainExecTest(executable) + for buffer_type in ('color', 'depth'): + test_name = ' '.join(['sample-alpha-to-coverage', str(num_samples), buffer_type]) + executable = 'ext_framebuffer_multisample-{0} -auto'.format( + test_name) + ext_framebuffer_multisample[test_name] = PlainExecTest(executable) for num_samples in MSAA_SAMPLE_COUNTS: test_name = ' '.join(['sample-alpha-to-one', str(num_samples)]) diff --git a/tests/spec/ext_framebuffer_multisample/sample-alpha-to-coverage.cpp b/tests/spec/ext_framebuffer_multisample/sample-alpha-to-coverage.cpp index b8ccf5d..89c910e 100644 --- a/tests/spec/ext_framebuffer_multisample/sample-alpha-to-coverage.cpp +++ b/tests/spec/ext_framebuffer_multisample/sample-alpha-to-coverage.cpp @@ -47,10 +47,16 @@ PIGLIT_GL_TEST_MAIN(512 /*window_width*/, 768 /*window_height*/, GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA) +static GLenum buffer_to_test; + void print_usage_and_exit(char *prog_name) { - printf("Usage: %s <num_samples>\n", prog_name); + printf("Usage: %s <num_samples> <test_type>\n" + " where <test_type> is one of:\n" + " color\n" + " depth\n", + prog_name); piglit_report_result(PIGLIT_FAIL); } @@ -58,9 +64,9 @@ void piglit_init(int argc, char **argv) { int samples; - int num_attachments = 1; - - if (argc < 2) + int num_attachments; + piglit_require_gl_version(30); + if (argc < 3) print_usage_and_exit(argv[0]); { char *endptr = NULL; @@ -68,8 +74,16 @@ piglit_init(int argc, char **argv) if (endptr != argv[1] + strlen(argv[1])) print_usage_and_exit(argv[0]); } - - piglit_require_gl_version(30); + if (strcmp(argv[2], "color") == 0) { + buffer_to_test = GL_COLOR_BUFFER_BIT; + num_attachments = 3; + } else if (strcmp(argv[2], "depth") == 0) { + buffer_to_test = GL_DEPTH_BUFFER_BIT; + num_attachments = 1; + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_ALWAYS); + } else + print_usage_and_exit(argv[0]); int pattern_width = piglit_width / 2; int pattern_height = piglit_height / num_attachments; @@ -89,7 +103,7 @@ piglit_init(int argc, char **argv) pattern_width, pattern_height, num_attachments, - GL_COLOR_BUFFER_BIT, + buffer_to_test, GL_RGBA); shader_compile(); } @@ -103,13 +117,13 @@ piglit_display() glClear(GL_COLOR_BUFFER_BIT); allocate_data_arrays(); - /* Reference image drawn when sample_alpha_to_coverage is enabled, - * doesn't represent an expected image. Reference image is drawn only - * to visualize the image difference caused by enabling - * sample_alpha_to_coverage + /* Reference image drawn here doesn't represent an expected image. + * Reference image is drawn only to visualize the image difference + * caused by enabling sample_alpha_to_coverage in test image. */ - draw_reference_image(true /* sample_alpha_to_coverage */, - false /* sample_alpha_to_one */); + if(buffer_to_test == GL_COLOR_BUFFER_BIT) + draw_reference_image(true /* sample_alpha_to_coverage */, + false /* sample_alpha_to_one */); draw_test_image(true /* sample_alpha_to_coverage */, false /* sample_alpha_to_one */); @@ -123,12 +137,15 @@ piglit_display() * of 1 / num_samples makes image compare (test / reference image) * unsuitable for this test. */ - pass = probe_framebuffer_color() && pass; + if(buffer_to_test == GL_COLOR_BUFFER_BIT) + pass = probe_framebuffer_color() && pass; + else if (buffer_to_test == GL_DEPTH_BUFFER_BIT) + pass = probe_framebuffer_depth() && pass; /* Free the memory allocated for data arrays */ free_data_arrays(); - if (!piglit_automatic) + if (!piglit_automatic && buffer_to_test == GL_COLOR_BUFFER_BIT) piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; -- 1.7.7.6 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
