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