Mesa (main): d3d12: Support SSBOs in root signatures
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Dec 28 00:22:18 UTC 2021
Module: Mesa
Branch: main
Commit: de4c38c3a7cb0929428c41405d69f31345758d68
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de4c38c3a7cb0929428c41405d69f31345758d68
Author: Jesse Natalie <jenatali at microsoft.com>
Date: Tue Dec 21 16:14:41 2021 -0800
d3d12: Support SSBOs in root signatures
Reviewed-by: Sil Vilerino <sivileri at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14294>
---
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 bda3e41b1b6..e9404f4e0f2 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 93a60ba54a2..bf567604ddf 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];
};
More information about the mesa-commit
mailing list