From de4c38c3a7cb0929428c41405d69f31345758d68 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Tue, 21 Dec 2021 16:14:41 -0800 Subject: [PATCH] d3d12: Support SSBOs in root signatures Reviewed-by: Sil Vilerino Part-of: --- src/gallium/drivers/d3d12/d3d12_root_signature.cpp | 14 +++++++++++++- src/gallium/drivers/d3d12/d3d12_root_signature.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/d3d12/d3d12_root_signature.cpp b/src/gallium/drivers/d3d12/d3d12_root_signature.cpp index bda3e41..e9404f4 100644 --- a/src/gallium/drivers/d3d12/d3d12_root_signature.cpp +++ b/src/gallium/drivers/d3d12/d3d12_root_signature.cpp @@ -81,7 +81,8 @@ init_range_root_param(D3D12_ROOT_PARAMETER1 *param, range->NumDescriptors = num_descs; range->BaseShaderRegister = base_shader_register; range->RegisterSpace = 0; - if (type == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + if (type == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER || + type == D3D12_DESCRIPTOR_RANGE_TYPE_UAV) range->Flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE; else range->Flags = D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS; @@ -142,6 +143,16 @@ create_root_signature(struct d3d12_context *ctx, struct d3d12_root_signature_key visibility); num_params++; } + + if (key->stages[i].num_uavs > 0) { + init_range_root_param(&root_params[num_params], + &desc_ranges[num_params], + D3D12_DESCRIPTOR_RANGE_TYPE_UAV, + key->stages[i].num_uavs, + visibility, + 0); + num_params++; + } } D3D12_VERSIONED_ROOT_SIGNATURE_DESC root_sig_desc; @@ -190,6 +201,7 @@ fill_key(struct d3d12_context *ctx, struct d3d12_root_signature_key *key) key->stages[i].begin_srv_binding = shader->begin_srv_binding; key->stages[i].state_vars_size = shader->state_vars_size; key->stages[i].has_default_ubo0 = shader->has_default_ubo0; + key->stages[i].num_uavs = shader->nir->info.num_ssbos; if (ctx->gfx_stages[i]->so_info.num_outputs > 0) key->has_stream_output = true; diff --git a/src/gallium/drivers/d3d12/d3d12_root_signature.h b/src/gallium/drivers/d3d12/d3d12_root_signature.h index 93a60ba..bf56760 100644 --- a/src/gallium/drivers/d3d12/d3d12_root_signature.h +++ b/src/gallium/drivers/d3d12/d3d12_root_signature.h @@ -33,6 +33,7 @@ struct d3d12_root_signature_key { unsigned end_srv_binding; unsigned begin_srv_binding; unsigned state_vars_size; + unsigned num_uavs; bool has_default_ubo0; } stages[D3D12_GFX_SHADER_STAGES]; }; -- 2.7.4