[Piglit] [PATCH v3] fix read_pixels_float() on GLES2 when format is not GL_RGBA

Brian Paul brianp at vmware.com
Wed Mar 28 17:12:13 UTC 2018


On 03/28/2018 10:44 AM, Rhys Perry wrote:
> GLES2 requires GL_RGBA to be used with GL_UNSIGNED_BYTE in glReadPixels
> ---
>   tests/util/piglit-util-gl.c | 18 +++++++++++-------
>   1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
> index df39c1c87..3a41a5eb0 100644
> --- a/tests/util/piglit-util-gl.c
> +++ b/tests/util/piglit-util-gl.c
> @@ -1018,21 +1018,25 @@ read_pixels_float(GLint x, GLint y, GLsizei width, GLsizei height,
>   		  GLenum format, GLfloat *pixels)
>   {
>   	GLubyte *pixels_b;
> -	unsigned i, ncomponents;
> +	unsigned i, j, k;
> +	int comps = piglit_num_components(format);
>   
> -	ncomponents = width * height * piglit_num_components(format);
>   	if (!pixels)
> -		pixels = malloc(ncomponents * sizeof(GLfloat));
> +		pixels = malloc(width * height * comps * sizeof(GLfloat));
>   
>   	if (!piglit_is_gles()) {
>   		glReadPixels(x, y, width, height, format, GL_FLOAT, pixels);
>   		return pixels;
>   	}
>   
> -	pixels_b = malloc(ncomponents * sizeof(GLubyte));
> -	glReadPixels(x, y, width, height, format, GL_UNSIGNED_BYTE, pixels_b);
> -	for (i = 0; i < ncomponents; i++)
> -		pixels[i] = pixels_b[i] / 255.0;
> +	pixels_b = malloc(width * height * 4 * sizeof(GLubyte));
> +	glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels_b);
> +	k = 0;
> +	for (i = 0; i < width * height; i++) {
> +		for (j = 0; j < comps; j++) {
> +			pixels[k++] = pixels_b[i*4+j] / 255.0f;
> +		}
> +	}
>   	free(pixels_b);
>   	return pixels;
>   }
> 

Looks good.  Thanks!

Reviewed-by: Brian Paul <brianp at vmware.com>

Do you need me to push this for you?


More information about the Piglit mailing list