From e65c1667e744282b0be1dcdcff1681735fbccede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tapani=20P=C3=A4lli?= Date: Tue, 7 Apr 2026 07:54:39 +0300 Subject: [PATCH] drirc/anv: add flag to disable VK_EXT_subgroup_size_control MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This can be used to workaround problem cases with application controlled subgroup size. Signed-off-by: Tapani Pälli Reviewed-by: Lionel Landwerlin (cherry picked from commit c105366165ae85c4417a9674e073496cbed1f932) Part-of: --- .pick_status.json | 2 +- src/intel/vulkan/anv_instance.c | 1 + src/intel/vulkan/anv_physical_device.c | 6 +++++- src/intel/vulkan/anv_private.h | 3 ++- src/util/driconf.h | 4 ++++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index bebb30fd7ca..ff1f095ab68 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2374,7 +2374,7 @@ "description": "drirc/anv: add flag to disable VK_EXT_subgroup_size_control", "nominated": false, "nomination_type": 0, - "resolution": 4, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c index aa270a39efb..a1ad5ee941c 100644 --- a/src/intel/vulkan/anv_instance.c +++ b/src/intel/vulkan/anv_instance.c @@ -41,6 +41,7 @@ static const driOptionDescription anv_dri_options[] = { DRI_CONF_ANV_FORCE_INDIRECT_DESCRIPTORS(false) DRI_CONF_ANV_DISABLE_LINK_TIME_OPTIMIZATION(false) DRI_CONF_ANV_ENABLE_OPT_DIVERGENT_ATOMICS(0) + DRI_CONF_ANV_BRW_DISABLE_SUBGROUP_SIZE_CONTROL(false) DRI_CONF_SHADER_SPILLING_RATE(11) DRI_CONFIG_INTEL_FORCE_COMPUTE_SURFACE_PREFETCH(true) DRI_CONFIG_INTEL_FORCE_SAMPLER_PREFETCH(false) diff --git a/src/intel/vulkan/anv_physical_device.c b/src/intel/vulkan/anv_physical_device.c index c00d27eb190..7e005471e49 100644 --- a/src/intel/vulkan/anv_physical_device.c +++ b/src/intel/vulkan/anv_physical_device.c @@ -375,7 +375,7 @@ get_device_extensions(const struct anv_physical_device *device, .EXT_shader_subgroup_vote = true, .EXT_shader_viewport_index_layer = true, .EXT_shader_uniform_buffer_unsized_array = true, - .EXT_subgroup_size_control = true, + .EXT_subgroup_size_control = !device->brw_disable_subgroup_size_control, #ifdef ANV_USE_WSI_PLATFORM .EXT_swapchain_maintenance1 = true, #endif @@ -2774,6 +2774,10 @@ anv_physical_device_try_create(struct vk_instance *vk_instance, } device->disable_fcv = device->info.verx10 >= 125 || instance->disable_fcv; + device->brw_disable_subgroup_size_control = + !intel_use_jay(&device->info, MESA_SHADER_COMPUTE) && + driQueryOptionb(&device->instance->dri_options, + "anv_brw_disable_subgroup_size_control"); result = anv_physical_device_init_heaps(device, fd); if (result != VK_SUCCESS) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index ffb44022ba8..31d3a607951 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1558,7 +1558,8 @@ struct anv_physical_device { bool emu_astc_ldr; /* true if FCV optimization should be disabled. */ bool disable_fcv; - /**/ + /* true if EXT_subgroup_size_control extension should be disabled. */ + bool brw_disable_subgroup_size_control; bool always_flush_cache; diff --git a/src/util/driconf.h b/src/util/driconf.h index efd756fe765..bbe3d40a0a8 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -984,6 +984,10 @@ DRI_CONF_OPT_I(anv_enable_opt_divergent_atomics, def, 0, 3,\ "Enable fusion of divergent atomics (see brw_divergent_atomics_flags)") +#define DRI_CONF_ANV_BRW_DISABLE_SUBGROUP_SIZE_CONTROL(def) \ + DRI_CONF_OPT_B(anv_brw_disable_subgroup_size_control, def, \ + "Disable EXT_subgroup_size_control support when using brw compiler.") + /** * \brief HASVK specific configuration options */