[Piglit] [PATCH] EXT_shader_image_load_store: atomics should be done on single-component images

Pelloux-prayer, Pierre-eric Pierre-eric.Pelloux-prayer at amd.com
Wed Aug 7 09:40:48 UTC 2019


Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>

On 07/08/2019 04:42, Ilia Mirkin wrote:
> The shader has size1x32, but the images are 4-component. In such a case,
> the results are undefined. Make it a single component.
> 
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  .../image_functions.c                            | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/spec/ext_shader_image_load_store/image_functions.c b/tests/spec/ext_shader_image_load_store/image_functions.c
> index 22a3dfc72..baa2c24f8 100644
> --- a/tests/spec/ext_shader_image_load_store/image_functions.c
> +++ b/tests/spec/ext_shader_image_load_store/image_functions.c
> @@ -64,7 +64,7 @@ static const char* vs =
>  static GLuint
>  create_texture()
>  {
> -	static int data[4 * TEX_WIDTH];
> +	static int data[TEX_WIDTH];
>  	GLuint texture;
>  	glGenTextures(1, &texture);
>  	glBindTexture(GL_TEXTURE_1D, texture);
> @@ -75,7 +75,7 @@ create_texture()
>  	glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT);
>  
>  	memset(data, 0, sizeof(data));
> -	glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32I, TEX_WIDTH, 0, GL_RGBA_INTEGER, GL_INT, data);
> +	glTexImage1D(GL_TEXTURE_1D, 0, GL_R32I, TEX_WIDTH, 0, GL_RED_INTEGER, GL_INT, data);
>  
>  	return texture;
>  }
> @@ -84,7 +84,7 @@ static void
>  read_texture(void* data, size_t s)
>  {
>  	glGetTexImage(GL_TEXTURE_1D, 0,
> -		      GL_RGBA_INTEGER,
> +		      GL_RED_INTEGER,
>  		      GL_INT,
>  		      data);
>  }
> @@ -92,7 +92,7 @@ read_texture(void* data, size_t s)
>  static GLuint
>  create_buffer_texture()
>  {
> -	static int data[4 * TEX_WIDTH];
> +	static int data[TEX_WIDTH];
>  	GLuint texture, buffer;
>  	glGenTextures(1, &texture);
>  	glBindTexture(GL_TEXTURE_BUFFER, texture);
> @@ -103,7 +103,7 @@ create_buffer_texture()
>  	glBindBuffer(GL_ARRAY_BUFFER, buffer);
>  	glBufferStorage(GL_ARRAY_BUFFER, sizeof(data), data, GL_MAP_READ_BIT);
>  
> -	glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32I, buffer);
> +	glTexBuffer(GL_TEXTURE_BUFFER, GL_R32I, buffer);
>  
>  	return texture;
>  }
> @@ -139,9 +139,9 @@ run_test(void * _data)
>  	GLint image_location = glGetUniformLocation(program, "image");
>  	GLint wrap_location = glGetUniformLocation(program, "wrap_value");
>  	GLuint texture = test->create_texture();
> -	GLint read_back[4 * TEX_WIDTH];
> +	GLint read_back[TEX_WIDTH];
>  
> -	glBindImageTextureEXT(0, texture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32I);
> +	glBindImageTextureEXT(0, texture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_R32I);
>  
>  	glUseProgram(program);
>  	glUniform1i(image_location, 0);
> @@ -159,7 +159,7 @@ run_test(void * _data)
>  	/* The first component of the first pixel has been written to by all invocations */
>  	pass = pass && read_back[0] == test->expected_value;
>  	/* All other pixels/components should be untouched */
> -	for (int i = 1; i < 4 * TEX_WIDTH; i++) {
> +	for (int i = 1; i < TEX_WIDTH; i++) {
>  		pass = pass && read_back[i] == 0;
>  	}
>  
> 


More information about the Piglit mailing list