Module: Mesa Branch: main Commit: a495d437b787fe593fc164d5fc246fbc6510b828 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a495d437b787fe593fc164d5fc246fbc6510b828
Author: Ryan Neph <ryann...@google.com> Date: Wed Nov 8 11:27:09 2023 -0800 venus: add dri option to enable multi-plane wsi modifiers Adds a venus dri option to advertise support for multi-plane format modifiers to Vulkan's common WSI. Otherwise, Venus will only support modifiers with planeCount == 1 to ensure compatibility with Xwayland's virgl-backed Glamor backend. Signed-off-by: Ryan Neph <ryann...@google.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26240> --- src/util/driconf.h | 4 ++++ src/virtio/vulkan/vn_instance.c | 8 ++++++++ src/virtio/vulkan/vn_instance.h | 1 + src/virtio/vulkan/vn_physical_device.c | 1 + 4 files changed, 14 insertions(+) diff --git a/src/util/driconf.h b/src/util/driconf.h index 643cb166446..702ed78df03 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -597,6 +597,10 @@ DRI_CONF_OPT_B(venus_implicit_fencing, def, \ "Assume the virtio-gpu kernel driver supports implicit fencing") +#define DRI_CONF_VENUS_WSI_MULTI_PLANE_MODIFIERS(def) \ + DRI_CONF_OPT_B(venus_wsi_multi_plane_modifiers, def, \ + "Enable support of multi-plane format modifiers for wsi images") + /** * \brief RADV specific configuration options */ diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index 29aae7b243c..98d59e76d79 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -60,6 +60,7 @@ static const driOptionDescription vn_dri_options[] = { DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false) DRI_CONF_VK_XWAYLAND_WAIT_READY(true) DRI_CONF_VENUS_IMPLICIT_FENCING(false) + DRI_CONF_VENUS_WSI_MULTI_PLANE_MODIFIERS(false) DRI_CONF_SECTION_END DRI_CONF_SECTION_DEBUG DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false) @@ -693,6 +694,13 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, instance->renderer->info.has_implicit_fencing = driQueryOptionb(&instance->dri_options, "venus_implicit_fencing"); + instance->enable_wsi_multi_plane_modifiers = driQueryOptionb( + &instance->dri_options, "venus_wsi_multi_plane_modifiers"); + + if (VN_DEBUG(INIT)) { + vn_log(instance, "supports multi-plane wsi format modifiers: %s", + instance->enable_wsi_multi_plane_modifiers ? "yes" : "no"); + } *pInstance = instance_handle; diff --git a/src/virtio/vulkan/vn_instance.h b/src/virtio/vulkan/vn_instance.h index e2784579bec..10e1cf0a95d 100644 --- a/src/virtio/vulkan/vn_instance.h +++ b/src/virtio/vulkan/vn_instance.h @@ -36,6 +36,7 @@ struct vn_instance { struct driOptionCache dri_options; struct driOptionCache available_dri_options; + bool enable_wsi_multi_plane_modifiers; struct vn_renderer *renderer; diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index 84cb75ede0f..8ce33c645d0 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -2104,6 +2104,7 @@ vn_GetPhysicalDeviceImageFormatProperties2( * both plane counts to 1 while virgl may be involved. */ if (wsi_info && modifier_info && + !physical_dev->instance->enable_wsi_multi_plane_modifiers && modifier_info->drmFormatModifier != DRM_FORMAT_MOD_LINEAR) { const uint32_t plane_count = vn_modifier_plane_count(physical_dev, pImageFormatInfo->format,