From 9bbc3c4e8593e3d9e23ff3df23b01dc2c4b43b3c Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 18 Jul 2022 14:15:41 +1000 Subject: [PATCH] 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 Part-of: --- 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;