mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-17 04:28:28 +02:00
tu: Don't reference pipeline for some draw states
These draw states are things that depend on pipeline-only state: - The load state depends on knowing the pipeline layout, which we won't know for a shader that's loaded from a binary. This is going away on a7xx anyway, and we should be able to use the a7xx strategy of prefetching the descriptors in the preamble on a6xx too. - The prim order state depends on feedback loops and raster order attachment access, which isn't supported at the moment. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25276>
This commit is contained in:
parent
1d74af8bb6
commit
2d00b2b9c7
2 changed files with 13 additions and 6 deletions
|
|
@ -3013,6 +3013,7 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer,
|
|||
cmd->state.compute_pipeline = tu_pipeline_to_compute(pipeline);
|
||||
tu_cs_emit_state_ib(&cmd->cs,
|
||||
pipeline->shaders[MESA_SHADER_COMPUTE]->state);
|
||||
cmd->state.compute_load_state = pipeline->load_state;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -3032,6 +3033,10 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer,
|
|||
&cmd->state.pipeline->dynamic_state);
|
||||
cmd->state.program = pipeline->program;
|
||||
|
||||
cmd->state.load_state = pipeline->load_state;
|
||||
cmd->state.prim_order_sysmem = pipeline->prim_order.state_sysmem;
|
||||
cmd->state.prim_order_gmem = pipeline->prim_order.state_gmem;
|
||||
|
||||
if (cmd->state.pipeline->feedback_loop_may_involve_textures &&
|
||||
!cmd->state.rp.disable_gmem) {
|
||||
/* VK_EXT_attachment_feedback_loop_layout allows feedback loop to involve
|
||||
|
|
@ -4640,7 +4645,6 @@ tu6_draw_common(struct tu_cmd_buffer *cmd,
|
|||
/* note: draw_count is 0 for indirect */
|
||||
uint32_t draw_count)
|
||||
{
|
||||
const struct tu_pipeline *pipeline = &cmd->state.pipeline->base;
|
||||
const struct tu_program_state *program = &cmd->state.program;
|
||||
struct tu_render_pass_state *rp = &cmd->state.rp;
|
||||
|
||||
|
|
@ -4800,11 +4804,11 @@ tu6_draw_common(struct tu_cmd_buffer *cmd,
|
|||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_GS_BINNING, program->gs_binning_state);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_FS, program->fs_state);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_VPC, program->vpc_state);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_PRIM_MODE_SYSMEM, pipeline->prim_order.state_sysmem);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_PRIM_MODE_GMEM, pipeline->prim_order.state_gmem);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_PRIM_MODE_SYSMEM, cmd->state.prim_order_sysmem);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_PRIM_MODE_GMEM, cmd->state.prim_order_gmem);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_CONST, cmd->state.shader_const);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_DESC_SETS, cmd->state.desc_sets);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_DESC_SETS_LOAD, pipeline->load_state);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_DESC_SETS_LOAD, cmd->state.load_state);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_VB, cmd->state.vertex_buffers);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_VS_PARAMS, cmd->state.vs_params);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_FS_PARAMS, cmd->state.fs_params);
|
||||
|
|
@ -4834,7 +4838,7 @@ tu6_draw_common(struct tu_cmd_buffer *cmd,
|
|||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_CONST, cmd->state.shader_const);
|
||||
if (dirty & TU_CMD_DIRTY_DESC_SETS) {
|
||||
/* tu6_emit_descriptor_sets emitted the cmd->state.desc_sets draw state. */
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_DESC_SETS_LOAD, pipeline->load_state);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_DESC_SETS_LOAD, cmd->state.load_state);
|
||||
}
|
||||
if (dirty & TU_CMD_DIRTY_VERTEX_BUFFERS)
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_VB, cmd->state.vertex_buffers);
|
||||
|
|
@ -5513,7 +5517,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd,
|
|||
|
||||
if (cmd->state.dirty & TU_CMD_DIRTY_COMPUTE_DESC_SETS) {
|
||||
tu6_emit_descriptor_sets<CHIP>(cmd, VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
tu_cs_emit_state_ib(cs, pipeline->base.load_state);
|
||||
tu_cs_emit_state_ib(cs, cmd->state.compute_load_state);
|
||||
}
|
||||
|
||||
cmd->state.dirty &= ~TU_CMD_DIRTY_COMPUTE_DESC_SETS;
|
||||
|
|
|
|||
|
|
@ -418,6 +418,9 @@ struct tu_cmd_state
|
|||
struct tu_draw_state vertex_buffers;
|
||||
struct tu_draw_state shader_const;
|
||||
struct tu_draw_state desc_sets;
|
||||
struct tu_draw_state load_state;
|
||||
struct tu_draw_state compute_load_state;
|
||||
struct tu_draw_state prim_order_sysmem, prim_order_gmem;
|
||||
|
||||
struct tu_draw_state vs_params;
|
||||
struct tu_draw_state fs_params;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue