From: Jonathan Marek Date: Thu, 18 Jun 2020 19:41:31 +0000 (-0400) Subject: turnip: emit compute pipeline directly in CmdBindPipeline X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bf997ca306543326c9ab4070ce2156f320b7b61f;p=mesa.git turnip: emit compute pipeline directly in CmdBindPipeline There's no need to defer it, and can get rid DIRTY_COMPUTE_PIPELINE. Signed-off-by: Jonathan Marek Part-of: --- diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index f8d19bf3a56..43a7284220a 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -1744,7 +1744,7 @@ tu_CmdBindDescriptorSets(VkCommandBuffer commandBuffer, hlsq_bindless_base_reg = REG_A6XX_HLSQ_CS_BINDLESS_BASE(0); hlsq_invalidate_value = A6XX_HLSQ_INVALIDATE_CMD_CS_BINDLESS(0x1f); - cmd->state.dirty |= TU_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS; + cmd->state.dirty |= TU_CMD_DIRTY_COMPUTE_DESC_SETS_LOAD; } tu_cs_begin_sub_stream(&cmd->sub_cs, 24, &cs); @@ -2033,7 +2033,7 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer, if (pipelineBindPoint == VK_PIPELINE_BIND_POINT_COMPUTE) { cmd->state.compute_pipeline = pipeline; - cmd->state.dirty |= TU_CMD_DIRTY_COMPUTE_PIPELINE; + tu_cs_emit_ib(&cmd->cs, &pipeline->program.state_ib); return; } @@ -3051,7 +3051,7 @@ tu6_draw_common(struct tu_cmd_buffer *cmd, * bits to preserve instead. The only things not emitted here are * compute-related state. */ - cmd->state.dirty &= (TU_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS | TU_CMD_DIRTY_COMPUTE_PIPELINE); + cmd->state.dirty &= TU_CMD_DIRTY_COMPUTE_DESC_SETS_LOAD; return VK_SUCCESS; } @@ -3370,9 +3370,6 @@ tu_dispatch(struct tu_cmd_buffer *cmd, */ tu_emit_cache_flush(cmd, cs); - if (cmd->state.dirty & TU_CMD_DIRTY_COMPUTE_PIPELINE) - tu_cs_emit_ib(cs, &pipeline->program.state_ib); - struct tu_cs_entry ib; ib = tu6_emit_consts(cmd, pipeline, descriptors_state, MESA_SHADER_COMPUTE); @@ -3381,13 +3378,12 @@ tu_dispatch(struct tu_cmd_buffer *cmd, tu_emit_compute_driver_params(cs, pipeline, info); - if ((cmd->state.dirty & TU_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS) && + if ((cmd->state.dirty & TU_CMD_DIRTY_COMPUTE_DESC_SETS_LOAD) && pipeline->load_state.state_ib.size > 0) { tu_cs_emit_ib(cs, &pipeline->load_state.state_ib); } - cmd->state.dirty &= - ~(TU_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS | TU_CMD_DIRTY_COMPUTE_PIPELINE); + cmd->state.dirty &= ~TU_CMD_DIRTY_COMPUTE_DESC_SETS_LOAD; tu_cs_emit_pkt7(cs, CP_SET_MARKER, 1); tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_COMPUTE)); diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h index c0ad2bc041e..aeb0c57b07e 100644 --- a/src/freedreno/vulkan/tu_private.h +++ b/src/freedreno/vulkan/tu_private.h @@ -705,10 +705,9 @@ struct tu_descriptor_state enum tu_cmd_dirty_bits { - TU_CMD_DIRTY_COMPUTE_PIPELINE = 1 << 1, TU_CMD_DIRTY_VERTEX_BUFFERS = 1 << 2, TU_CMD_DIRTY_DESC_SETS_LOAD = 1 << 3, - TU_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS = 1 << 4, + TU_CMD_DIRTY_COMPUTE_DESC_SETS_LOAD = 1 << 4, TU_CMD_DIRTY_SHADER_CONSTS = 1 << 5, /* all draw states were disabled and need to be re-enabled: */ TU_CMD_DIRTY_DRAW_STATE = 1 << 7,