From 9f32e1a4899d489cfa54b458328879693b6b7baa Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Tue, 20 Feb 2024 14:15:00 -0500 Subject: [PATCH] anv/drirc: Add option to control implicit sync on external BOs Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10546 Part-of: --- src/intel/vulkan/anv_device.c | 6 +++++- src/intel/vulkan/anv_private.h | 1 + src/util/driconf.h | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index afc76865b12..313c65e2012 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -78,6 +78,7 @@ static const driOptionDescription anv_dri_options[] = { DRI_CONF_VK_XWAYLAND_WAIT_READY(false) DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(0) DRI_CONF_ANV_DISABLE_FCV(false) + DRI_CONF_ANV_EXTERNAL_MEMORY_IMPLICIT_SYNC(true) DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(false) DRI_CONF_ANV_FORCE_FILTER_ADDR_ROUNDING(false) DRI_CONF_ANV_FP64_WORKAROUND_ENABLED(false) @@ -2505,6 +2506,8 @@ anv_init_dri_options(struct anv_instance *instance) instance->enable_tbimr = driQueryOptionb(&instance->dri_options, "intel_tbimr"); instance->disable_fcv = driQueryOptionb(&instance->dri_options, "anv_disable_fcv"); + instance->external_memory_implicit_sync = + driQueryOptionb(&instance->dri_options, "anv_external_memory_implicit_sync"); } VkResult anv_CreateInstance( @@ -4135,7 +4138,8 @@ VkResult anv_AllocateMemory( alloc_flags |= ANV_BO_ALLOC_EXTERNAL; /* wsi has its own way of synchronizing with the compositor */ - if (!wsi_info && dedicated_info && + if (pdevice->instance->external_memory_implicit_sync && + !wsi_info && dedicated_info && dedicated_info->image != VK_NULL_HANDLE) { ANV_FROM_HANDLE(anv_image, image, dedicated_info->image); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index d4953e3f98b..74ef3f367a7 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1197,6 +1197,7 @@ struct anv_instance { int mesh_conv_prim_attrs_to_vert_attrs; bool enable_tbimr; + bool external_memory_implicit_sync; /** * Workarounds for game bugs. diff --git a/src/util/driconf.h b/src/util/driconf.h index c12802e5fd4..2156a0a3049 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -780,6 +780,9 @@ DRI_CONF_OPT_B(anv_disable_fcv, def, \ "Disable FCV optimization") +#define DRI_CONF_ANV_EXTERNAL_MEMORY_IMPLICIT_SYNC(def) \ + DRI_CONF_OPT_B(anv_external_memory_implicit_sync, def, "Implicit sync on external BOs") + #define DRI_CONF_ANV_HASVK_OVERRIDE_API_VERSION(def) \ DRI_CONF_OPT_B(hasvk_report_vk_1_3_version, def, \ "Override intel_hasvk API version")