[Mesa-dev] [PATCH 01/10] r600g, radeonsi: don't append to streamout buffers that haven't been used yet

Glenn Kennard glenn.kennard at gmail.com
Sun Feb 1 11:54:47 PST 2015


On Sun, 01 Feb 2015 18:36:58 +0100, Marek Olšák <maraeo at gmail.com> wrote:

> From: Marek Olšák <marek.olsak at amd.com>
>
> The FILLED_SIZE counter is uninitialized at the beginning, so we can't  
> use it.
> Instead, use offset = 0, which is what we always do when not appending.
>
> This unexpectedly fixes spec/ARB_texture_multisample/sample-position/*.
> Yes, the test does use transform feedback.
>
> Cc: 10.3 10.4 <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/drivers/radeon/r600_pipe_common.h | 1 +
>  src/gallium/drivers/radeon/r600_streamout.c   | 4 +++-
>  2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h  
> b/src/gallium/drivers/radeon/r600_pipe_common.h
> index 6224668..46a6bf3 100644
> --- a/src/gallium/drivers/radeon/r600_pipe_common.h
> +++ b/src/gallium/drivers/radeon/r600_pipe_common.h
> @@ -294,6 +294,7 @@ struct r600_so_target {
>  	/* The buffer where BUFFER_FILLED_SIZE is stored. */
>  	struct r600_resource	*buf_filled_size;
>  	unsigned		buf_filled_size_offset;
> +	bool			buf_filled_size_valid;
> 	unsigned		stride_in_dw;
>  };
> diff --git a/src/gallium/drivers/radeon/r600_streamout.c  
> b/src/gallium/drivers/radeon/r600_streamout.c
> index c44f0f2..bc8bf97 100644
> --- a/src/gallium/drivers/radeon/r600_streamout.c
> +++ b/src/gallium/drivers/radeon/r600_streamout.c
> @@ -237,7 +237,7 @@ static void r600_emit_streamout_begin(struct  
> r600_common_context *rctx, struct r
>  			}
>  		}
> -		if (rctx->streamout.append_bitmask & (1 << i)) {
> +		if (rctx->streamout.append_bitmask & (1 << i) &&  
> t[i]->buf_filled_size_valid) {
>  			uint64_t va = t[i]->buf_filled_size->gpu_address +
>  				      t[i]->buf_filled_size_offset;
> @@ -302,6 +302,8 @@ void r600_emit_streamout_end(struct  
> r600_common_context *rctx)
>  		 * buffer bound. This ensures that the primitives-emitted query
>  		 * won't increment. */
>  		r600_write_context_reg(cs, R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 + 16*i,  
> 0);
> +
> +		t[i]->buf_filled_size_valid = true;
>  	}
> 	rctx->streamout.begin_emitted = false;

Reviewed-by: Glenn Kennard <glenn.kennard at gmail.com>


More information about the mesa-dev mailing list