From b1d379eeba2f97a7d258373fe27828d8195c6c2b Mon Sep 17 00:00:00 2001 From: Arkady Shlykov Date: Thu, 2 Apr 2026 13:30:34 +0000 Subject: [PATCH] anv: Add control over divergent atomics fusion opt via driconf anv_enable_opt_divergent_atomics dricong option supported values: 1 - fuse buffer divergent atomics 2 - fuse image divergent atomics Enabled for titles: Total War: WARHAMMER III The Elder Scrolls IV: Oblivion Remastered Call of Duty: Black Ops III Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/vulkan/anv_instance.c | 3 +++ src/intel/vulkan/anv_private.h | 1 + src/intel/vulkan/anv_shader_compile.c | 1 + src/util/00-mesa-defaults.conf | 10 ++++++++++ src/util/driconf.h | 4 ++++ 5 files changed, 19 insertions(+) diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c index 0a3b43522ce..aa270a39efb 100644 --- a/src/intel/vulkan/anv_instance.c +++ b/src/intel/vulkan/anv_instance.c @@ -40,6 +40,7 @@ static const driOptionDescription anv_dri_options[] = { DRI_CONF_ANV_QUERY_COPY_WITH_SHADER_THRESHOLD(6) 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_SHADER_SPILLING_RATE(11) DRI_CONFIG_INTEL_FORCE_COMPUTE_SURFACE_PREFETCH(true) DRI_CONFIG_INTEL_FORCE_SAMPLER_PREFETCH(false) @@ -268,6 +269,8 @@ anv_init_dri_options(struct anv_instance *instance) instance->disable_lto = driQueryOptionb(&instance->dri_options, "anv_disable_link_time_optimization"); + instance->enable_opt_divergent_atomics = + driQueryOptioni(&instance->dri_options, "anv_enable_opt_divergent_atomics"); instance->stack_ids = driQueryOptioni(&instance->dri_options, "intel_stack_id"); switch (instance->stack_ids) { diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index a01a0d2d5e4..e4b9ccfc5be 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1848,6 +1848,7 @@ struct anv_instance { * Performance workarounds */ bool disable_lto; + enum brw_divergent_atomics_flags enable_opt_divergent_atomics; /** * Ray tracing configuration. diff --git a/src/intel/vulkan/anv_shader_compile.c b/src/intel/vulkan/anv_shader_compile.c index 4bf599d70af..e5f67bcd3df 100644 --- a/src/intel/vulkan/anv_shader_compile.c +++ b/src/intel/vulkan/anv_shader_compile.c @@ -293,6 +293,7 @@ populate_base_prog_key(struct brw_base_prog_key *key, */ if (rs != NULL) key->robust_flags = anv_get_robust_flags(rs); + key->divergent_atomics_flags = pdevice->instance->enable_opt_divergent_atomics; key->limit_trig_input_range = pdevice->instance->limit_trig_input_range; } diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf index 45c656b63dc..800233970d1 100644 --- a/src/util/00-mesa-defaults.conf +++ b/src/util/00-mesa-defaults.conf @@ -1131,6 +1131,16 @@ TODO: document the other workarounds. + + + + + +