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

2018-06-04 Thread Samuel Pitoiset

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

2018-06-01 Thread Marek Olšák
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