Mesa (master): radeonsi: disallow constant buffers with a 64-bit address in slot 0

Marek Olšák mareko at kemper.freedesktop.org
Sat Feb 17 03:58:31 UTC 2018


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sun Dec 31 22:58:57 2017 +0100

radeonsi: disallow constant buffers with a 64-bit address in slot 0

State trackers must use a user buffer or const_uploader,
or set pipe_resource::flags same as const_uploader->flags.

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

---

 src/gallium/drivers/radeonsi/si_descriptors.c | 6 ++++++
 src/gallium/drivers/radeonsi/si_get.c         | 4 +++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 009e803105..96525fd21b 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -1214,6 +1214,12 @@ static void si_pipe_set_constant_buffer(struct pipe_context *ctx,
 	if (shader >= SI_NUM_SHADERS)
 		return;
 
+	if (slot == 0 && input && input->buffer &&
+	    !(r600_resource(input->buffer)->flags & RADEON_FLAG_32BIT)) {
+		assert(!"constant buffer 0 must have a 32-bit VM address, use const_uploader");
+		return;
+	}
+
 	slot = si_get_constbuf_slot(slot);
 	si_set_constant_buffer(sctx, &sctx->const_and_shader_buffers[shader],
 			       si_const_and_shader_buffer_descriptors_idx(shader),
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
index a67daa5eae..6e6149a39e 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -268,12 +268,14 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
 	case PIPE_CAP_TILE_RASTER_ORDER:
 	case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
 	case PIPE_CAP_CONTEXT_PRIORITY_MASK:
-	case PIPE_CAP_CONSTBUF0_FLAGS:
 		return 0;
 
 	case PIPE_CAP_FENCE_SIGNAL:
 		return sscreen->info.has_syncobj;
 
+	case PIPE_CAP_CONSTBUF0_FLAGS:
+		return R600_RESOURCE_FLAG_32BIT;
+
 	case PIPE_CAP_NATIVE_FENCE_FD:
 		return sscreen->info.has_fence_to_handle;
 




More information about the mesa-commit mailing list