From fbc1d90f19c88b4857a2cbbceb8b9526a8973fb4 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Fri, 31 Dec 2021 11:52:31 -0800 Subject: [PATCH] d3d12: Keep state vars last in the per-stage root parameters Reviewed-by: Sil Vilerino Part-of: --- src/gallium/drivers/d3d12/d3d12_draw.cpp | 14 +++++++------- src/gallium/drivers/d3d12/d3d12_root_signature.cpp | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_draw.cpp b/src/gallium/drivers/d3d12/d3d12_draw.cpp index e12e08d445f..67a5fb622d4 100644 --- a/src/gallium/drivers/d3d12/d3d12_draw.cpp +++ b/src/gallium/drivers/d3d12/d3d12_draw.cpp @@ -458,13 +458,6 @@ update_graphics_root_parameters(struct d3d12_context *ctx, } num_params++; } - /* TODO Don't always update state vars */ - if (shader->num_state_vars > 0) { - uint32_t constants[D3D12_MAX_STATE_VARS * 4]; - unsigned size = fill_state_vars(ctx, dinfo, draw, shader, constants); - ctx->cmdlist->SetGraphicsRoot32BitConstants(num_params, size, constants, 0); - num_params++; - } if (shader->nir->info.num_ssbos > 0) { if (dirty & D3D12_SHADER_DIRTY_SSBO) { assert(num_root_desciptors < MAX_DESCRIPTOR_TABLES); @@ -481,6 +474,13 @@ update_graphics_root_parameters(struct d3d12_context *ctx, } num_params++; } + /* TODO Don't always update state vars */ + if (shader->num_state_vars > 0) { + uint32_t constants[D3D12_MAX_STATE_VARS * 4]; + unsigned size = fill_state_vars(ctx, dinfo, draw, shader, constants); + ctx->cmdlist->SetGraphicsRoot32BitConstants(num_params, size, constants, 0); + num_params++; + } } return num_root_desciptors; } diff --git a/src/gallium/drivers/d3d12/d3d12_root_signature.cpp b/src/gallium/drivers/d3d12/d3d12_root_signature.cpp index e04de9f78d5..a9e218c41b0 100644 --- a/src/gallium/drivers/d3d12/d3d12_root_signature.cpp +++ b/src/gallium/drivers/d3d12/d3d12_root_signature.cpp @@ -135,13 +135,6 @@ create_root_signature(struct d3d12_context *ctx, struct d3d12_root_signature_key 0); } - if (key->stages[i].state_vars_size > 0) { - init_constant_root_param(&root_params[num_params++], - key->stages[i].num_cb_bindings + (key->stages[i].has_default_ubo0 ? 0 : 1), - key->stages[i].state_vars_size, - visibility); - } - if (key->stages[i].num_ssbos > 0) { init_range_root_param(&root_params[num_params++], &desc_ranges[num_ranges++], @@ -161,6 +154,13 @@ create_root_signature(struct d3d12_context *ctx, struct d3d12_root_signature_key 0, 1); } + + if (key->stages[i].state_vars_size > 0) { + init_constant_root_param(&root_params[num_params++], + key->stages[i].num_cb_bindings + (key->stages[i].has_default_ubo0 ? 0 : 1), + key->stages[i].state_vars_size, + visibility); + } assert(num_params < PIPE_SHADER_TYPES * D3D12_NUM_BINDING_TYPES); assert(num_ranges < PIPE_SHADER_TYPES * D3D12_NUM_BINDING_TYPES); }