Re: [Mesa-dev] [PATCH] radeonsi/gfx9: fix si_get_buffer_from_descriptors for 48-bit pointers
Reviewed-by: Samuel Pitoiset On 06/02/2018 01:31 AM, Marek Olšák wrote: From: Marek Olšák This fixes: GL45-CTS.pipeline_statistics_query_tests_ARB.functional_compute_shader_invocations Cc: 18.0 18.1 --- 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 |= 0xull << 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) { ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] radeonsi/gfx9: fix si_get_buffer_from_descriptors for 48-bit pointers
From: Marek Olšák This fixes: GL45-CTS.pipeline_statistics_query_tests_ARB.functional_compute_shader_invocations Cc: 18.0 18.1 --- 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 |= 0xull << 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) { -- 2.17.0 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev