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

Author: Lionel Landwerlin <[email protected]>
Date:   Fri Sep 24 17:26:23 2021 +0300

spirv: don't fail on CapabilitySubgroupDispatch if supported

Since only Anv uses the value, I'm only enabling this on anv.

Signed-off-by: Lionel Landwerlin <[email protected]>
Fixes: 518693c3eca195 ("spirv: Handle the SubgroupSize execution mode")
Reviewed-by: Caio Marcelo de Oliveira Filho <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13034>

---

 src/compiler/shader_info.h        |  1 +
 src/compiler/spirv/spirv_to_nir.c | 12 ++++++++++++
 src/intel/vulkan/anv_pipeline.c   |  1 +
 3 files changed, 14 insertions(+)

diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index 56ee81aa061..c4cc267fc0c 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -91,6 +91,7 @@ struct spirv_supported_capabilities {
    bool subgroup_arithmetic;
    bool subgroup_ballot;
    bool subgroup_basic;
+   bool subgroup_dispatch;
    bool subgroup_quad;
    bool subgroup_shuffle;
    bool subgroup_uniform_control_flow;
diff --git a/src/compiler/spirv/spirv_to_nir.c 
b/src/compiler/spirv/spirv_to_nir.c
index bd164c234da..a400c51c143 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -4535,6 +4535,18 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, 
SpvOp opcode,
          spv_check_supported(amd_shader_ballot, cap);
          break;
 
+      case SpvCapabilitySubgroupDispatch:
+         spv_check_supported(subgroup_dispatch, cap);
+         /* Missing :
+          *   - SpvOpGetKernelLocalSizeForSubgroupCount
+          *   - SpvOpGetKernelMaxNumSubgroups
+          *   - SpvExecutionModeSubgroupsPerWorkgroup
+          *   - SpvExecutionModeSubgroupsPerWorkgroupId
+          */
+         vtn_warn("Not fully supported capability: %s",
+                  spirv_capability_to_string(cap));
+         break;
+
       case SpvCapabilityVariablePointersStorageBuffer:
       case SpvCapabilityVariablePointers:
          spv_check_supported(variable_pointers, cap);
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index be19266736e..c5b6bdddab4 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -146,6 +146,7 @@ anv_shader_compile_to_nir(struct anv_device *device,
          .subgroup_arithmetic = true,
          .subgroup_basic = true,
          .subgroup_ballot = true,
+         .subgroup_dispatch = true,
          .subgroup_quad = true,
          .subgroup_uniform_control_flow = true,
          .subgroup_shuffle = true,

Reply via email to