summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/iris/iris_state.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c
index 8ea79f722a3..3e0bedddfd7 100644
--- a/src/gallium/drivers/iris/iris_state.c
+++ b/src/gallium/drivers/iris/iris_state.c
@@ -5108,6 +5108,8 @@ setup_constant_buffers(struct iris_context *ice,
struct iris_compiled_shader *shader = ice->shaders.prog[stage];
struct brw_stage_prog_data *prog_data = (void *) shader->prog_data;
+ uint32_t push_range_sum = 0;
+
int n = 0;
for (int i = 0; i < 4; i++) {
const struct brw_ubo_range *range = &prog_data->ubo_ranges[i];
@@ -5115,6 +5117,8 @@ setup_constant_buffers(struct iris_context *ice,
if (range->length == 0)
continue;
+ push_range_sum += range->length;
+
if (range->length > push_bos->max_length)
push_bos->max_length = range->length;
@@ -5135,6 +5139,13 @@ setup_constant_buffers(struct iris_context *ice,
n++;
}
+ /* From the 3DSTATE_CONSTANT_XS and 3DSTATE_CONSTANT_ALL programming notes:
+ *
+ * "The sum of all four read length fields must be less than or
+ * equal to the size of 64."
+ */
+ assert(push_range_sum <= 64);
+
push_bos->buffer_count = n;
}