venus: fix compatibility with older host drivers
authorChia-I Wu <olvaffe@gmail.com>
Mon, 14 Jun 2021 23:39:54 +0000 (16:39 -0700)
committerMarge Bot <eric+marge@anholt.net>
Tue, 15 Jun 2021 18:20:41 +0000 (18:20 +0000)
Unlike on Android, KHR_swapchain may be advertised even when the host
driver does not support EXT_image_drm_format_modifier and
EXT_queue_family_foreign.  Do not request those extensions when they are
not supported.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11369>

src/virtio/vulkan/vn_device.c

index 93038f0..4aa3628 100644 (file)
@@ -3222,7 +3222,11 @@ vn_device_fix_create_info(const struct vn_device *dev,
       app_exts->KHR_swapchain || app_exts->ANDROID_native_buffer ||
       app_exts->ANDROID_external_memory_android_hardware_buffer;
    if (has_wsi) {
-      if (!app_exts->EXT_image_drm_format_modifier) {
+      /* KHR_swapchain may be advertised without the renderer support for
+       * EXT_image_drm_format_modifier
+       */
+      if (!app_exts->EXT_image_drm_format_modifier &&
+          physical_dev->renderer_extensions.EXT_image_drm_format_modifier) {
          extra_exts[extra_count++] =
             VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME;
 
@@ -3233,7 +3237,11 @@ vn_device_fix_create_info(const struct vn_device *dev,
          }
       }
 
-      if (!app_exts->EXT_queue_family_foreign) {
+      /* XXX KHR_swapchain may be advertised without the renderer support for
+       * EXT_queue_family_foreign
+       */
+      if (!app_exts->EXT_queue_family_foreign &&
+          physical_dev->renderer_extensions.EXT_queue_family_foreign) {
          extra_exts[extra_count++] =
             VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME;
       }