diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c index 431e724643f..8fe85d7e1e2 100644 --- a/src/intel/vulkan/anv_instance.c +++ b/src/intel/vulkan/anv_instance.c @@ -43,6 +43,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_ENABLE_OPT_DIVERGENT_ATOMICS_COMPUTE_ONLY(0) DRI_CONF_ANV_BRW_DISABLE_SUBGROUP_SIZE_CONTROL(false) DRI_CONF_SHADER_SPILLING_RATE(11) DRI_CONFIG_INTEL_FORCE_COMPUTE_SURFACE_PREFETCH(true) @@ -318,6 +319,8 @@ anv_init_dri_options(struct anv_instance *instance) driQueryOptionb(&instance->dri_options, "anv_disable_link_time_optimization"); instance->enable_opt_divergent_atomics = driQueryOptioni(&instance->dri_options, "anv_enable_opt_divergent_atomics"); + instance->enable_opt_divergent_atomics_compute_only = + driQueryOptioni(&instance->dri_options, "anv_enable_opt_divergent_atomics_compute_only"); 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 c39695398a3..4f632340ac3 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1813,6 +1813,7 @@ struct anv_instance { bool disable_lto; bool disable_push_constant_alloc; enum brw_divergent_atomics_flags enable_opt_divergent_atomics; + enum brw_divergent_atomics_flags enable_opt_divergent_atomics_compute_only; bool force_sampler_prefetch; bool force_compute_surface_prefetch; unsigned generated_indirect_threshold; diff --git a/src/intel/vulkan/anv_shader_compile.c b/src/intel/vulkan/anv_shader_compile.c index c2422110562..498d7e3ac89 100644 --- a/src/intel/vulkan/anv_shader_compile.c +++ b/src/intel/vulkan/anv_shader_compile.c @@ -665,7 +665,14 @@ populate_cs_prog_key(struct brw_cs_prog_key *key, const struct vk_physical_device *device, const struct vk_pipeline_robustness_state *rs) { + + const struct anv_physical_device *pdevice = + container_of(device, const struct anv_physical_device, vk); + populate_base_prog_key(&key->base, device, rs); + + key->base.divergent_atomics_flags |= + pdevice->instance->enable_opt_divergent_atomics_compute_only; } static void diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf index 53a0e46f2f3..544517e0505 100644 --- a/src/util/00-mesa-defaults.conf +++ b/src/util/00-mesa-defaults.conf @@ -1157,6 +1157,13 @@ TODO: document the other workarounds. -->