/* Now that we know how many regular uniforms we'll push, reduce the
* UBO push ranges so we don't exceed the 3DSTATE_CONSTANT limits.
*/
+ /* For gen4/5:
+ * Only allow 16 registers (128 uniform components) as push constants.
+ *
+ * If changing this value, note the limitation about total_regs in
+ * brw_curbe.c/crocus_state.c
+ */
+ const unsigned max_push_length = compiler->devinfo->ver < 6 ? 16 : 64;
unsigned push_length = DIV_ROUND_UP(stage_prog_data->nr_params, 8);
for (int i = 0; i < 4; i++) {
struct brw_ubo_range *range = &prog_data->ubo_ranges[i];
- if (push_length + range->length > 64)
- range->length = 64 - push_length;
+ if (push_length + range->length > max_push_length)
+ range->length = max_push_length - push_length;
push_length += range->length;
}
- assert(push_length <= 64);
+ assert(push_length <= max_push_length);
}
bool