[Piglit] [PATCH 1/3] arb_texture_multisample: don't use hard-coded sample counts

Brian Paul brianp at vmware.com
Tue Dec 5 18:00:29 UTC 2017


On 12/05/2017 10:19 AM, Roland Scheidegger wrote:
> Am 05.12.2017 um 17:43 schrieb Brian Paul:
>> 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);
>> +    }
> Do you want to use the maximum possible or restrict that to something
> smaller (in case the value returned is large)?

Whatever value is returned, it should work.  If not, either the driver 
is broken or perhaps the surface is too large (but all these tests use 
small textures).


> (Same below, and in the other patches.)
> Either way, for the series:
> Reviewed-by: Roland Scheidegger <sroland at vmware.com>

Thanks.

-Brian

>
>
>> +
>>       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;
>>   	}
>>
>



More information about the Piglit mailing list