From 2668ba0ecde447f44bd362ae0d076d9cbd4dc0af Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Thu, 17 Nov 2022 12:08:37 +0100 Subject: [PATCH] tu: Use dirty bit for scissor state This will make patching it on-demand easier. Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.cc | 9 ++++++--- src/freedreno/vulkan/tu_cmd_buffer.h | 7 ++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 0c9e51e6336..36253894fb2 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -2908,13 +2908,11 @@ tu_CmdSetScissor(VkCommandBuffer commandBuffer, const VkRect2D *pScissors) { TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer); - struct tu_cs cs; memcpy(&cmd->state.scissor[firstScissor], pScissors, scissorCount * sizeof(*pScissors)); cmd->state.max_scissor = MAX2(cmd->state.max_scissor, firstScissor + scissorCount); - cs = tu_cmd_dynamic_state(cmd, VK_DYNAMIC_STATE_SCISSOR, 1 + 2 * cmd->state.max_scissor); - tu6_emit_scissor(&cs, cmd->state.scissor, cmd->state.max_scissor); + cmd->state.dirty |= TU_CMD_DIRTY_SCISSORS; } VKAPI_ATTR void VKAPI_CALL @@ -5044,6 +5042,11 @@ tu6_draw_common(struct tu_cmd_buffer *cmd, cmd->state.z_negative_one_to_one); } + if (dirty & TU_CMD_DIRTY_SCISSORS) { + struct tu_cs cs = tu_cmd_dynamic_state(cmd, VK_DYNAMIC_STATE_SCISSOR, 1 + 2 * cmd->state.max_scissor); + tu6_emit_scissor(&cs, cmd->state.scissor, cmd->state.max_scissor); + } + if (dirty & TU_CMD_DIRTY_BLEND) { struct tu_cs cs = tu_cmd_dynamic_state(cmd, TU_DYNAMIC_STATE_BLEND, 8 + 3 * cmd->state.pipeline->blend.num_rts); diff --git a/src/freedreno/vulkan/tu_cmd_buffer.h b/src/freedreno/vulkan/tu_cmd_buffer.h index b5ee6c24ee0..e9d00b828dd 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.h +++ b/src/freedreno/vulkan/tu_cmd_buffer.h @@ -65,10 +65,11 @@ enum tu_cmd_dirty_bits TU_CMD_DIRTY_VS_PARAMS = BIT(9), TU_CMD_DIRTY_PC_RASTER_CNTL = BIT(10), TU_CMD_DIRTY_VIEWPORTS = BIT(11), - TU_CMD_DIRTY_BLEND = BIT(12), - TU_CMD_DIRTY_PATCH_CONTROL_POINTS = BIT(13), + TU_CMD_DIRTY_SCISSORS = BIT(12), + TU_CMD_DIRTY_BLEND = BIT(13), + TU_CMD_DIRTY_PATCH_CONTROL_POINTS = BIT(14), /* all draw states were disabled and need to be re-enabled: */ - TU_CMD_DIRTY_DRAW_STATE = BIT(14) + TU_CMD_DIRTY_DRAW_STATE = BIT(15) }; /* There are only three cache domains we have to care about: the CCU, or