[Mesa-dev] [PATCH 1/2] r600g: Do colorformat endian swap for PIPE_USAGE_STAGING
Marek Olšák
maraeo at gmail.com
Wed Mar 2 21:48:39 UTC 2016
On Wed, Mar 2, 2016 at 8:22 PM, Oded Gabbay <oded.gabbay at gmail.com> wrote:
> There is an old if statement (dated to 2011) that prevented doing
> endian swap for colorformat, in case the buffer is marked
> as PIPE_USAGE_STAGING.
>
> This is now wrong because st_ReadPixels() reads into a destination
> texture that is marked with PIPE_USAGE_STAGING. Therefore, even if
> the texture is rendered correctly to the monitor, when reading it
> back we get unswapped/wrong values.
>
> This patch makes the check_rgba() function in gl-1.0-readpixsanity
> piglit test pass in big-endian.
>
> Signed-off-by: Oded Gabbay <oded.gabbay at gmail.com>
> Cc: "11.1 11.2" <mesa-stable at lists.freedesktop.org>
> ---
> src/gallium/drivers/r600/evergreen_state.c | 13 ++-----------
> src/gallium/drivers/r600/r600_state.c | 6 +-----
> 2 files changed, 3 insertions(+), 16 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
> index a12638a..47ca7ce 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -989,12 +989,7 @@ void evergreen_init_color_surface_rat(struct r600_context *rctx,
> MAX2(64, rctx->screen->b.info.pipe_interleave_bytes / block_size);
> unsigned pitch = align(pipe_buffer->width0, pitch_alignment);
>
> - /* XXX: This is copied from evergreen_init_color_surface(). I don't
> - * know why this is necessary.
> - */
> - if (pipe_buffer->usage == PIPE_USAGE_STAGING) {
> - endian = ENDIAN_NONE;
> - }
> + endian = r600_colorformat_endian_swap(format);
endian is already initiailzed at the beginning of the function.
Other than that:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
More information about the mesa-dev
mailing list