Module: Mesa Branch: main Commit: edce0af24240026b6156f7baef4d3247ff35910f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=edce0af24240026b6156f7baef4d3247ff35910f
Author: Connor Abbott <[email protected]> Date: Tue Sep 12 20:08:51 2023 +0200 tu: Make compute dispatch use the shader With this, the last use of the compute pipeline is gone. We still use the pipeline for the load state, though. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25276> --- src/freedreno/vulkan/tu_cmd_buffer.cc | 12 +++++------- src/freedreno/vulkan/tu_cmd_buffer.h | 1 - 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 4c5f3fdf2af..03f64ecb32a 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -3010,7 +3010,6 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer, if (pipelineBindPoint == VK_PIPELINE_BIND_POINT_COMPUTE) { cmd->state.shaders[MESA_SHADER_COMPUTE] = pipeline->shaders[MESA_SHADER_COMPUTE]; - 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; @@ -5471,18 +5470,17 @@ tu_dispatch(struct tu_cmd_buffer *cmd, return; struct tu_cs *cs = &cmd->cs; - struct tu_compute_pipeline *pipeline = cmd->state.compute_pipeline; + struct tu_shader *shader = cmd->state.shaders[MESA_SHADER_COMPUTE]; bool emit_instrlen_workaround = - pipeline->instrlen > + shader->variant->instrlen > cmd->device->physical_device->info->a6xx.instr_cache_size; /* We don't use draw states for dispatches, so the bound pipeline * could be overwritten by reg stomping in a renderpass or blit. */ if (cmd->device->dbg_renderpass_stomp_cs) { - tu_cs_emit_state_ib(&cmd->cs, - cmd->state.compute_pipeline->base.shaders[MESA_SHADER_COMPUTE]->state); + tu_cs_emit_state_ib(&cmd->cs, shader->state); } /* There appears to be a HW bug where in some rare circumstances it appears @@ -5501,7 +5499,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd, * See https://gitlab.freedesktop.org/mesa/mesa/-/issues/5892 */ if (emit_instrlen_workaround) { - tu_cs_emit_regs(cs, A6XX_SP_FS_INSTRLEN(pipeline->instrlen)); + tu_cs_emit_regs(cs, A6XX_SP_FS_INSTRLEN(shader->variant->instrlen)); tu_emit_event_write<CHIP>(cmd, cs, FD_LABEL); } @@ -5525,7 +5523,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd, tu_cs_emit_pkt7(cs, CP_SET_MARKER, 1); tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_COMPUTE)); - const uint32_t *local_size = pipeline->local_size; + const uint16_t *local_size = shader->variant->local_size; const uint32_t *num_groups = info->blocks; tu_cs_emit_regs(cs, HLSQ_CS_NDRANGE_0(CHIP, .kerneldim = 3, diff --git a/src/freedreno/vulkan/tu_cmd_buffer.h b/src/freedreno/vulkan/tu_cmd_buffer.h index 6b99718a096..d1efe129750 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.h +++ b/src/freedreno/vulkan/tu_cmd_buffer.h @@ -386,7 +386,6 @@ struct tu_cmd_state uint32_t dirty; struct tu_graphics_pipeline *pipeline; - struct tu_compute_pipeline *compute_pipeline; struct tu_shader *shaders[MESA_SHADER_STAGES];
