Mesa (main): tu: Rewrite tess factor emission

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 27 20:15:21 UTC 2022


Module: Mesa
Branch: main
Commit: 907b892bb20de2af07483f9699fe2cf4535c6078
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=907b892bb20de2af07483f9699fe2cf4535c6078

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Thu Jul 14 18:25:58 2022 +0200

tu: Rewrite tess factor emission

Emit it at EndRenderPass time, if the renderpass has tessellation. This
avoids all the special handling for secondaries, will work with
suspended/resumed render passes, and will handle secondaries that
contain render passes which will be allowed with dynamic rendering.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17378>

---

 src/freedreno/vulkan/tu_cmd_buffer.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index 5196191fd41..4a6ad580e51 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -75,8 +75,6 @@ tu6_lazy_emit_tessfactor_addr(struct tu_cmd_buffer *cmd)
    if (cmd->state.tessfactor_addr_set)
       return;
 
-   assert(cmd->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY);
-
    tu_cs_emit_regs(&cmd->cs, A6XX_PC_TESSFACTOR_ADDR(.qword = cmd->device->tess_bo->iova));
    cmd->state.tessfactor_addr_set = true;
 }
@@ -2378,12 +2376,6 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer,
    if (pipeline->active_stages & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) {
       cmd->state.has_tess = true;
 
-      /* Set up the tess factor address if this is the first tess pipeline bound
-       * to the primary cmdbuf.
-      */
-      if (cmd->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY)
-         tu6_lazy_emit_tessfactor_addr(cmd);
-
       /* maximum number of patches that can fit in tess factor/param buffers */
       uint32_t subdraw_size = MIN2(TU_TESS_FACTOR_SIZE / ir3_tess_factor_stride(pipeline->tess.patch_type),
                            TU_TESS_PARAM_SIZE / pipeline->tess.param_stride);
@@ -3356,11 +3348,7 @@ tu_CmdExecuteCommands(VkCommandBuffer commandBuffer,
             break;
          }
 
-         /* Set up the tess factor address if this is the first time a tess
-          * pipeline has been executed on this primary cmdbuf.
-          */
          if (secondary->state.has_tess) {
-            tu6_lazy_emit_tessfactor_addr(cmd);
             cmd->state.has_tess = true;
          }
          if (secondary->state.has_subpass_predication)
@@ -4721,6 +4709,9 @@ tu_CmdEndRenderPass2(VkCommandBuffer commandBuffer,
 
    cmd_buffer->trace_renderpass_end = u_trace_end_iterator(&cmd_buffer->trace);
 
+   if (cmd_buffer->state.has_tess)
+      tu6_lazy_emit_tessfactor_addr(cmd_buffer);
+
    struct tu_renderpass_result *autotune_result = NULL;
    if (use_sysmem_rendering(cmd_buffer, &autotune_result))
       tu_cmd_render_sysmem(cmd_buffer, autotune_result);



More information about the mesa-commit mailing list