Instead of using a fixed number of samples, query the GL_MAX_COLOR_TEXTURE_SAMPLES or GL_MAX_DEPTH_TEXTURE_SAMPLES value and use those.
Fixes failures with llvmpipe and VMware driver when MSAA is disabled. --- tests/spec/arb_texture_multisample/errors.c | 10 +++++++++- tests/spec/arb_texture_multisample/sample-depth.c | 12 +++++++---- tests/spec/arb_texture_multisample/stencil-clear.c | 23 +++++++++++++--------- .../teximage-2d-multisample.c | 13 ++++++++---- .../teximage-3d-multisample.c | 13 ++++++++---- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/tests/spec/arb_texture_multisample/errors.c b/tests/spec/arb_texture_multisample/errors.c index 42cc2c1..08e1696 100644 --- a/tests/spec/arb_texture_multisample/errors.c +++ b/tests/spec/arb_texture_multisample/errors.c @@ -44,6 +44,14 @@ piglit_init(int argc, char **argv) GLuint fbo; GLuint tex[2]; + GLint max_samples; + + glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &max_samples); + if (max_samples < 1) { + printf("GL_MAX_COLOR_TEXTURE_SAMPLES must be at least one\n"); + piglit_report_result(PIGLIT_FAIL); + } + glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); @@ -51,7 +59,7 @@ piglit_init(int argc, char **argv) glGenTextures(2, tex); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, tex[0]); glTexImage3DMultisample(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, - 4, GL_RGBA, 64, 64, 2, GL_TRUE); + max_samples, GL_RGBA, 64, 64, 2, GL_TRUE); if (!piglit_check_gl_error(GL_NO_ERROR)) { printf("should be no error so far\n"); diff --git a/tests/spec/arb_texture_multisample/sample-depth.c b/tests/spec/arb_texture_multisample/sample-depth.c index ef2be19..94bc63d 100644 --- a/tests/spec/arb_texture_multisample/sample-depth.c +++ b/tests/spec/arb_texture_multisample/sample-depth.c @@ -38,7 +38,6 @@ PIGLIT_GL_TEST_CONFIG_BEGIN PIGLIT_GL_TEST_CONFIG_END -#define NUM_SAMPLES 4 #define TEX_WIDTH 64 #define TEX_HEIGHT 64 @@ -93,16 +92,21 @@ void piglit_init(int argc, char **argv) { GLuint tex; + int num_samples; + piglit_require_extension("GL_ARB_texture_multisample"); + /* Use the max number of samples for testing */ + glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &num_samples); + /* setup an fbo with multisample depth texture */ glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex); glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, - NUM_SAMPLES, GL_DEPTH_COMPONENT24, - TEX_WIDTH, TEX_HEIGHT, - GL_TRUE); + num_samples, GL_DEPTH_COMPONENT24, + TEX_WIDTH, TEX_HEIGHT, + GL_TRUE); glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); diff --git a/tests/spec/arb_texture_multisample/stencil-clear.c b/tests/spec/arb_texture_multisample/stencil-clear.c index ca0fd81..413aa41 100644 --- a/tests/spec/arb_texture_multisample/stencil-clear.c +++ b/tests/spec/arb_texture_multisample/stencil-clear.c @@ -108,7 +108,7 @@ piglit_display(void) return pass ? PIGLIT_PASS : PIGLIT_FAIL; } -GLuint create_fbo(unsigned num_samples) +GLuint create_fbo(unsigned num_color_samples, unsigned num_depth_samples) { GLenum tex_target; GLuint texColor; @@ -119,17 +119,17 @@ GLuint create_fbo(unsigned num_samples) glGenTextures(1, &texColor); glGenTextures(1, &texZS); - if (num_samples != 0) { + if (num_color_samples != 0) { tex_target = GL_TEXTURE_2D_MULTISAMPLE; glBindTexture(tex_target, texZS); glTexImage2DMultisample( - tex_target, num_samples, GL_DEPTH32F_STENCIL8, + tex_target, num_depth_samples, GL_DEPTH32F_STENCIL8, TEX_WIDTH, TEX_HEIGHT, GL_TRUE); glBindTexture(tex_target, texColor); glTexImage2DMultisample( - tex_target, num_samples, GL_RGBA8, + tex_target, num_color_samples, GL_RGBA8, TEX_WIDTH, TEX_HEIGHT, GL_TRUE); } else { tex_target = GL_TEXTURE_2D; @@ -167,22 +167,27 @@ GLuint create_fbo(unsigned num_samples) void piglit_init(int argc, char **argv) { - unsigned num_samples = 4; + GLint num_color_samples, num_depth_samples; piglit_require_extension("GL_ARB_texture_multisample"); + /* By default, se the max number of samples for testing */ + glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &num_color_samples); + glGetIntegerv(GL_MAX_DEPTH_TEXTURE_SAMPLES, &num_depth_samples); + for (int i = 1; i < argc; ++i) { if (!strcmp(argv[i], "samples")) { ++i; if (i >= argc) usage(); - num_samples = atoi(argv[i]); + num_color_samples = num_depth_samples = atoi(argv[i]); } else usage(); } - printf("Number of samples: %u\n", num_samples); + printf("Number of color samples: %u depth samples: %d\n", + num_color_samples, num_depth_samples); - fbo = create_fbo(num_samples); - fbo_copy = create_fbo(0); + fbo = create_fbo(num_color_samples, num_depth_samples); + fbo_copy = create_fbo(0, 0); } diff --git a/tests/spec/arb_texture_multisample/teximage-2d-multisample.c b/tests/spec/arb_texture_multisample/teximage-2d-multisample.c index 8063a78..0f6cb4c 100644 --- a/tests/spec/arb_texture_multisample/teximage-2d-multisample.c +++ b/tests/spec/arb_texture_multisample/teximage-2d-multisample.c @@ -40,28 +40,33 @@ PIGLIT_GL_TEST_CONFIG_BEGIN PIGLIT_GL_TEST_CONFIG_END + void piglit_init(int argc, char **argv) { bool pass = true; GLuint textures[3]; + GLint num_samples; if(piglit_get_gl_version() < 32) { piglit_require_extension("GL_ARB_texture_multisample"); } + /* Use the max number of samples for testing */ + glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &num_samples); + glGenTextures(3, textures); /* Pass a Texture 2D Multisample */ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, textures[0]); - glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGB, - 1024, 1024, GL_FALSE); + glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, num_samples, + GL_RGB, 1024, 1024, GL_FALSE); pass = piglit_check_gl_error(GL_NO_ERROR) && pass; /* Pass a Proxy Texture 2d Multisample */ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, textures[1]); - glTexImage2DMultisample(GL_PROXY_TEXTURE_2D_MULTISAMPLE, 4, GL_RGB, - 1024, 1024, GL_FALSE); + glTexImage2DMultisample(GL_PROXY_TEXTURE_2D_MULTISAMPLE, num_samples, + GL_RGB, 1024, 1024, GL_FALSE); pass = piglit_check_gl_error(GL_NO_ERROR) && pass; /* Pass an Invalid Enum */ diff --git a/tests/spec/arb_texture_multisample/teximage-3d-multisample.c b/tests/spec/arb_texture_multisample/teximage-3d-multisample.c index 4e6e476..3b60c32 100644 --- a/tests/spec/arb_texture_multisample/teximage-3d-multisample.c +++ b/tests/spec/arb_texture_multisample/teximage-3d-multisample.c @@ -45,29 +45,34 @@ piglit_init(int argc, char **argv) { bool pass = true; GLuint textures[3]; + GLint num_samples; if(piglit_get_gl_version() < 32) { piglit_require_extension("GL_ARB_texture_multisample"); } + /* Use the max number of samples for testing */ + glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &num_samples); + glGenTextures(3, textures); /* Pass a Texture Multisample 3D Array */ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, textures[0]); - glTexImage3DMultisample(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 4, GL_RGB, - 1024, 1024, 4, GL_FALSE); + glTexImage3DMultisample(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, num_samples, + GL_RGB, 1024, 1024, 4, GL_FALSE); pass = piglit_check_gl_error(GL_NO_ERROR) && pass; /* Pass a Proxy Texture 3D Multisample Array */ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, textures[1]); - glTexImage3DMultisample(GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY, 4, GL_RGB, + glTexImage3DMultisample(GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY, + num_samples, GL_RGB, 1024, 1024, 4, GL_FALSE); pass = piglit_check_gl_error(GL_NO_ERROR) && pass; /* Pass an Invalid Enum */ if (!piglit_khr_no_error) { glBindTexture(GL_TEXTURE_2D, textures[2]); - glTexImage3DMultisample(GL_TEXTURE_2D, 4, GL_RGB, + glTexImage3DMultisample(GL_TEXTURE_2D, num_samples, GL_RGB, 1024, 1024, 4, GL_FALSE); pass = piglit_check_gl_error(GL_INVALID_ENUM) && pass; } -- 1.9.1 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit