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

Author: Jesse Natalie <jenat...@microsoft.com>
Date:   Tue Oct 31 15:23:30 2023 -0700

d3d12: Only set draw params root parameter index for actual draw params

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

---

 src/gallium/drivers/d3d12/d3d12_draw.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_draw.cpp 
b/src/gallium/drivers/d3d12/d3d12_draw.cpp
index 489e1686c38..65fc0d8e1b2 100644
--- a/src/gallium/drivers/d3d12/d3d12_draw.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_draw.cpp
@@ -364,6 +364,7 @@ fill_graphics_state_vars(struct d3d12_context *ctx,
                          const struct pipe_draw_start_count_bias *draw,
                          struct d3d12_shader *shader,
                          uint32_t *values,
+                         unsigned cur_root_param_idx,
                          struct d3d12_cmd_signature_key *cmd_sig_key)
 {
    unsigned size = 0;
@@ -388,9 +389,11 @@ fill_graphics_state_vars(struct d3d12_context *ctx,
          ptr[1] = dinfo->start_instance;
          ptr[2] = drawid;
          ptr[3] = dinfo->index_size ? -1 : 0;
+         assert(!cmd_sig_key->draw_or_dispatch_params); // Should only be set 
once
          cmd_sig_key->draw_or_dispatch_params = 1;
          cmd_sig_key->root_sig = ctx->gfx_pipeline_state.root_signature;
          cmd_sig_key->params_root_const_offset = size;
+         cmd_sig_key->params_root_const_param = cur_root_param_idx;
          size += 4;
          break;
       case D3D12_STATE_VAR_DEPTH_TRANSFORM:
@@ -571,9 +574,7 @@ update_graphics_root_parameters(struct d3d12_context *ctx,
       /* TODO Don't always update state vars */
       if (shader_sel->current->num_state_vars > 0) {
          uint32_t constants[D3D12_MAX_GRAPHICS_STATE_VARS * 4];
-         unsigned size = fill_graphics_state_vars(ctx, dinfo, drawid, draw, 
shader_sel->current, constants, cmd_sig_key);
-         if (cmd_sig_key->draw_or_dispatch_params)
-            cmd_sig_key->params_root_const_param = num_params;
+         unsigned size = fill_graphics_state_vars(ctx, dinfo, drawid, draw, 
shader_sel->current, constants, num_params, cmd_sig_key);
          ctx->cmdlist->SetGraphicsRoot32BitConstants(num_params, size, 
constants, 0);
          num_params++;
       }

Reply via email to