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

Reply via email to