assert(sf_entry_size == 0);
+ /* If the last used gfx pipeline in the command buffer has enough VS URB
+ * space for what the blorp operation needs, skip reconfiguration.
+ */
+ if (cmd_buffer->state.gfx.base.pipeline &&
+ cmd_buffer->state.gfx.base.pipeline->urb.entry_size[MESA_SHADER_VERTEX] >= vs_entry_size)
+ return;
+
const unsigned entry_size[4] = { vs_entry_size, 1, 1, 1 };
genX(emit_urb_setup)(device, &cmd_buffer->batch,
static void
emit_urb_setup(struct anv_pipeline *pipeline)
{
- unsigned entry_size[4];
for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
const struct brw_vue_prog_data *prog_data =
!anv_pipeline_has_stage(pipeline, i) ? NULL :
(const struct brw_vue_prog_data *) pipeline->shaders[i]->prog_data;
- entry_size[i] = prog_data ? prog_data->urb_entry_size : 1;
+ pipeline->urb.entry_size[i] = prog_data ? prog_data->urb_entry_size : 1;
}
genX(emit_urb_setup)(pipeline->device, &pipeline->batch,
pipeline->urb.l3_config,
- pipeline->active_stages, entry_size);
+ pipeline->active_stages,
+ pipeline->urb.entry_size);
}
static void