summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-12-31 22:58:57 +0100
committerMarek Olšák <[email protected]>2018-02-17 04:52:17 +0100
commit5722cd408400196eeaf02b0dba0885a536097422 (patch)
treec80a0b57002cf0fe592a6415e4a45a6d3023b96c /src/gallium
parentd790b6cecea7c5df5465e76ba63b6e7e9d6e1f5e (diff)
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 <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/radeonsi/si_descriptors.c6
-rw-r--r--src/gallium/drivers/radeonsi/si_get.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 009e8031058..96525fd21b0 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 a67daa5eae7..6e6149a39ef 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;