From c105366165ae85c4417a9674e073496cbed1f932 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 Part-of: --- 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 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c index 8002a5cc5f7..da370863556 100644 --- a/src/intel/vulkan/anv_instance.c +++ b/src/intel/vulkan/anv_instance.c @@ -42,6 +42,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 fcdbf3aff3b..ed11024d974 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 @@ -2776,6 +2776,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 44c2d1c7a82..360b4cbe508 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1554,7 +1554,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 8762d0c5b60..d60f39ba01c 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -960,6 +960,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 */