Mesa (master): r600g/compute: Added missing address space checking of kernel parameters

Tom Stellard tstellar at kemper.freedesktop.org
Tue Jul 30 14:10:56 UTC 2013


Module: Mesa
Branch: master
Commit: 4f8048bb5a8558ae4313b12ffd70b593cc629fe8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4f8048bb5a8558ae4313b12ffd70b593cc629fe8

Author: Jonathan Charest <jcharest+mesa-dev at gmail.com>
Date:   Mon Jul 22 09:24:56 2013 -0400

r600g/compute: Added missing address space checking of kernel parameters

To have non-static buffers in local memory, it is necessary to pass them
as arguments to the kernel.

For r600, the correct lds size must be set to the SQ_LDS_ALLOC register.
The correct size is the clover size plus the size reported by the
compiler.

Reviewed-by: Tom Stellard <thomas.stellard at amd.com>

---

 src/gallium/drivers/r600/evergreen_compute.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c
index f76fc9c..9b2bae3 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -211,8 +211,7 @@ void *evergreen_create_compute_state(
 #endif
 
 	shader->ctx = (struct r600_context*)ctx;
-	/* XXX: We ignore cso->req_local_mem, because we compute this value
-	 * ourselves on a per-kernel basis. */
+	shader->local_size = cso->req_local_mem;
 	shader->private_size = cso->req_private_mem;
 	shader->input_size = cso->req_input_mem;
 
@@ -334,7 +333,7 @@ static void evergreen_emit_direct_dispatch(
 	unsigned wave_divisor = (16 * num_pipes);
 	int group_size = 1;
 	int grid_size = 1;
-	unsigned lds_size = shader->active_kernel->bc.nlds_dw;
+	unsigned lds_size = shader->local_size / 4 + shader->active_kernel->bc.nlds_dw;
 
 	/* Calculate group_size/grid_size */
 	for (i = 0; i < 3; i++) {




More information about the mesa-commit mailing list