[Mesa-dev] [PATCH] radeonsi/gfx9: fix si_get_buffer_from_descriptors for 48-bit pointers

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon Jun 4 10:09:40 UTC 2018


Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 06/02/2018 01:31 AM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> This fixes:
> GL45-CTS.pipeline_statistics_query_tests_ARB.functional_compute_shader_invocations
> 
> Cc: 18.0 18.1 <mesa-stable at lists.freedesktop.org>
> ---
>   src/gallium/drivers/radeonsi/si_descriptors.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
> index 1d14c9df1e1..57a312463c9 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -87,21 +87,21 @@ static uint32_t null_texture_descriptor[8] = {
>   
>   static uint32_t null_image_descriptor[8] = {
>   	0,
>   	0,
>   	0,
>   	S_008F1C_TYPE(V_008F1C_SQ_RSRC_IMG_1D)
>   	/* the rest must contain zeros, which is also used by the buffer
>   	 * descriptor */
>   };
>   
> -static uint64_t si_desc_extract_buffer_address(uint32_t *desc)
> +static uint64_t si_desc_extract_buffer_address(const uint32_t *desc)
>   {
>   	uint64_t va = desc[0] |
>   		      ((uint64_t)G_008F04_BASE_ADDRESS_HI(desc[1]) << 32);
>   
>   	/* Sign-extend the 48-bit address. */
>   	if (va & (1ull << 47))
>   		va |= 0xffffull << 48;
>   	return va;
>   }
>   
> @@ -1047,21 +1047,21 @@ static void si_get_buffer_from_descriptors(struct si_buffer_resources *buffers,
>   {
>   	pipe_resource_reference(buf, buffers->buffers[idx]);
>   	if (*buf) {
>   		struct r600_resource *res = r600_resource(*buf);
>   		const uint32_t *desc = descs->list + idx * 4;
>   		uint64_t va;
>   
>   		*size = desc[2];
>   
>   		assert(G_008F04_STRIDE(desc[1]) == 0);
> -		va = ((uint64_t)desc[1] << 32) | desc[0];
> +		va = si_desc_extract_buffer_address(desc);
>   
>   		assert(va >= res->gpu_address && va + *size <= res->gpu_address + res->bo_size);
>   		*offset = va - res->gpu_address;
>   	}
>   }
>   
>   /* VERTEX BUFFERS */
>   
>   static void si_vertex_buffers_begin_new_cs(struct si_context *sctx)
>   {
> 


More information about the mesa-dev mailing list