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

Author: Dave Airlie <[email protected]>
Date:   Mon Jul 18 14:15:41 2022 +1000

zink: fixup subgroup vote/ballot enables.

These are part of vulkan 1.1, but the ext are if you don't have 1.1.

This will enable some tests that break in CI

Acked-By: Mike Blumenkrantz <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17588>

---

 src/gallium/drivers/zink/zink_device_info.py |  1 +
 src/gallium/drivers/zink/zink_screen.c       | 19 ++++++++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_device_info.py 
b/src/gallium/drivers/zink/zink_device_info.py
index fc52d5ea112..75b6e31ee46 100644
--- a/src/gallium/drivers/zink/zink_device_info.py
+++ b/src/gallium/drivers/zink/zink_device_info.py
@@ -86,6 +86,7 @@ EXTENSIONS = [
     Extension("VK_EXT_post_depth_coverage"),
     Extension("VK_EXT_depth_clip_control", alias="clip_control", 
features=True),
     Extension("VK_EXT_shader_subgroup_ballot"),
+    Extension("VK_EXT_shader_subgroup_vote"),
     Extension("VK_EXT_shader_atomic_float", alias="atomic_float", 
features=True),
     Extension("VK_KHR_8bit_storage",
               alias="storage_8bit",
diff --git a/src/gallium/drivers/zink/zink_screen.c 
b/src/gallium/drivers/zink/zink_screen.c
index b5379c2388c..d455fd514d9 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -448,10 +448,13 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap 
param)
       return screen->info.feats11.shaderDrawParameters || 
screen->info.have_KHR_shader_draw_parameters;
 
    case PIPE_CAP_SHADER_GROUP_VOTE:
-      return screen->info.have_vulkan11 &&
+      if (screen->info.have_vulkan11 &&
              (screen->info.subgroup.supportedOperations & 
VK_SUBGROUP_FEATURE_VOTE_BIT) &&
-             (screen->info.subgroup.supportedStages & 
VK_SHADER_STAGE_COMPUTE_BIT);
-
+          (screen->info.subgroup.supportedStages & 
VK_SHADER_STAGE_COMPUTE_BIT))
+         return true;
+      if (screen->info.have_EXT_shader_subgroup_vote)
+         return true;
+      return false;
    case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
       return screen->info.have_EXT_provoking_vertex;
 
@@ -518,8 +521,14 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap 
param)
       return 1;
 
    case PIPE_CAP_SHADER_BALLOT:
-      return screen->info.have_vulkan12 && 
screen->info.have_EXT_shader_subgroup_ballot && 
screen->info.props11.subgroupSize <= 64;
-
+      if (screen->info.props11.subgroupSize > 64)
+         return false;
+      if (screen->info.have_vulkan11 &&
+          screen->info.subgroup.supportedOperations & 
VK_SUBGROUP_FEATURE_BALLOT_BIT)
+         return true;
+      if (screen->info.have_EXT_shader_subgroup_ballot)
+         return true;
+      return false;
    case PIPE_CAP_SAMPLE_SHADING:
       return screen->info.feats.features.sampleRateShading;
 

Reply via email to