Blame SOURCES/0001-vulkan-provide-a-custom-VK_DEFINE_NON_DISPATCHABLE_H.patch

0249bd
From 3abf31c7cf5b38dc4425b79d30c8f582d325010b Mon Sep 17 00:00:00 2001
0249bd
From: Wim Taymans <wtaymans@redhat.com>
0249bd
Date: Wed, 31 Mar 2021 16:18:04 +0200
0249bd
Subject: [PATCH] vulkan: provide a custom VK_DEFINE_NON_DISPATCHABLE_HANDLE
0249bd
0249bd
If the application did not define one yet, define our own
0249bd
VK_DEFINE_NON_DISPATCHABLE_HANDLE that is independent of the
0249bd
architecture.
0249bd
0249bd
Vulkan, by default, provides a define that depends on the architecture,
0249bd
which causes the symbol type to be different. This causes an
0249bd
architecture dependent .gir file, which then causes multilib
0249bd
installation problems because the .gir files can't be shared.
0249bd
0249bd
Make it possible to override the format specifier and provide
0249bd
a default one that is compatible with the default non dispatchable
0249bd
handle.
0249bd
0249bd
Return VK_NULL_HANDLE from functions that return a non-dispatchable
0249bd
handle.
0249bd
0249bd
Fixes #1566
0249bd
0249bd
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2130>
0249bd
---
0249bd
 .../gst/vulkan/android/gstvkwindow_android.c   |  4 ++--
0249bd
 gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m  |  4 ++--
0249bd
 gst-libs/gst/vulkan/gstvkapi.h                 | 18 ++++++++++++++++++
0249bd
 gst-libs/gst/vulkan/gstvkhandle.h              |  7 ++++---
0249bd
 gst-libs/gst/vulkan/ios/gstvkwindow_ios.m      |  6 +++---
0249bd
 .../gst/vulkan/wayland/gstvkwindow_wayland.c   |  4 ++--
0249bd
 gst-libs/gst/vulkan/win32/gstvkwindow_win32.c  |  4 ++--
0249bd
 gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c      |  4 ++--
0249bd
 sys/applemedia/videotexturecache-vulkan.mm     |  4 ++--
0249bd
 9 files changed, 37 insertions(+), 18 deletions(-)
0249bd
0249bd
diff --git a/gst-libs/gst/vulkan/android/gstvkwindow_android.c b/gst-libs/gst/vulkan/android/gstvkwindow_android.c
0249bd
index c1bd866ac..20a1c9cbe 100644
0249bd
--- a/gst-libs/gst/vulkan/android/gstvkwindow_android.c
0249bd
+++ b/gst-libs/gst/vulkan/android/gstvkwindow_android.c
0249bd
@@ -163,14 +163,14 @@ gst_vulkan_window_android_get_surface (GstVulkanWindow * window,
0249bd
   if (!window_android->CreateAndroidSurface) {
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FEATURE_NOT_PRESENT,
0249bd
         "Could not retrieve \"vkCreateAndroidSurfaceKHR\" function pointer");
0249bd
-    return 0;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   err =
0249bd
       window_android->CreateAndroidSurface (window->display->instance->instance,
0249bd
       &info, NULL, &ret;;
0249bd
   if (gst_vulkan_error_to_g_error (err, error, "vkCreateAndroidSurfaceKHR") < 0)
0249bd
-    return 0;
0249bd
+    return VK_NULL_HANDLE;
0249bd
 
0249bd
   return ret;
0249bd
 }
0249bd
diff --git a/gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m b/gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m
0249bd
index f00726267..e95da1278 100644
0249bd
--- a/gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m
0249bd
+++ b/gst-libs/gst/vulkan/cocoa/gstvkwindow_cocoa.m
0249bd
@@ -226,14 +226,14 @@ gst_vulkan_window_cocoa_get_surface (GstVulkanWindow * window, GError ** error)
0249bd
   if (!window_cocoa->CreateMacOSSurface) {
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FEATURE_NOT_PRESENT,
0249bd
         "Could not retrieve \"vkCreateMacOSSurfaceMVK\" function pointer");
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   err =
0249bd
       window_cocoa->CreateMacOSSurface (window->display->instance->instance, &info,
0249bd
       NULL, &ret;;
0249bd
   if (gst_vulkan_error_to_g_error (err, error, "vkCreateMacOSSurfaceMVK") < 0)
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
 
0249bd
   return ret;
0249bd
 }
0249bd
diff --git a/gst-libs/gst/vulkan/gstvkapi.h b/gst-libs/gst/vulkan/gstvkapi.h
0249bd
index 9d223201f..5889a7d2e 100644
0249bd
--- a/gst-libs/gst/vulkan/gstvkapi.h
0249bd
+++ b/gst-libs/gst/vulkan/gstvkapi.h
0249bd
@@ -31,6 +31,24 @@
0249bd
 #include <gst/vulkan/vulkan_fwd.h>
0249bd
 #include <gst/vulkan/vulkan-enumtypes.h>
0249bd
 
0249bd
+/**
0249bd
+ * VK_DEFINE_NON_DISPATCHABLE_HANDLE:
0249bd
+ *
0249bd
+ * Allow applications to override the VK_DEFINE_NON_DISPATCHABLE_HANDLE
0249bd
+ * but provide our own version otherwise. The default vulkan define
0249bd
+ * provides a different symbol type depending on the architecture and
0249bd
+ * this causes multilib problems because the generated .gir files are
0249bd
+ * different.
0249bd
+ *
0249bd
+ * Also make sure to provide a suitable GST_VULKAN_NON_DISPATCHABLE_HANDLE_FORMAT
0249bd
+ * implementation when redefining VK_DEFINE_NON_DISPATCHABLE_HANDLE.
0249bd
+ *
0249bd
+ * Since: 1.20
0249bd
+ */
0249bd
+#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
0249bd
+#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
0249bd
+#endif
0249bd
+
0249bd
 #include <vulkan/vulkan_core.h>
0249bd
 
0249bd
 #endif /* __GST_VULKAN_API_H__ */
0249bd
diff --git a/gst-libs/gst/vulkan/gstvkhandle.h b/gst-libs/gst/vulkan/gstvkhandle.h
0249bd
index 885b4bc71..2aa6f01f7 100644
0249bd
--- a/gst-libs/gst/vulkan/gstvkhandle.h
0249bd
+++ b/gst-libs/gst/vulkan/gstvkhandle.h
0249bd
@@ -54,11 +54,12 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(GstVulkanHandleTypedef)
0249bd
  *
0249bd
  * The printf format specifier for raw Vulkan non dispatchable handles.
0249bd
  *
0249bd
+ * When redefining VK_DEFINE_NON_DISPATCHABLE_HANDLE, also make sure
0249bd
+ * to redefine a suitable printf format specifier.
0249bd
+ *
0249bd
  * Since: 1.18
0249bd
  */
0249bd
-#if GLIB_SIZEOF_VOID_P == 8
0249bd
-# define GST_VULKAN_NON_DISPATCHABLE_HANDLE_FORMAT "p"
0249bd
-#else
0249bd
+#if !defined(GST_VULKAN_NON_DISPATCHABLE_HANDLE_FORMAT)
0249bd
 # define GST_VULKAN_NON_DISPATCHABLE_HANDLE_FORMAT G_GUINT64_FORMAT
0249bd
 #endif
0249bd
 
0249bd
diff --git a/gst-libs/gst/vulkan/ios/gstvkwindow_ios.m b/gst-libs/gst/vulkan/ios/gstvkwindow_ios.m
0249bd
index 84fc33deb..3bc8e167d 100644
0249bd
--- a/gst-libs/gst/vulkan/ios/gstvkwindow_ios.m
0249bd
+++ b/gst-libs/gst/vulkan/ios/gstvkwindow_ios.m
0249bd
@@ -203,7 +203,7 @@ gst_vulkan_window_ios_get_surface (GstVulkanWindow * window, GError ** error)
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR,
0249bd
         VK_ERROR_INITIALIZATION_FAILED,
0249bd
         "No layer to retrieve surface for. Has create_window() been called?");
0249bd
-    return 0;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
0249bd
@@ -218,14 +218,14 @@ gst_vulkan_window_ios_get_surface (GstVulkanWindow * window, GError ** error)
0249bd
   if (!window_ios->CreateIOSSurface) {
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FEATURE_NOT_PRESENT,
0249bd
         "Could not retrieve \"vkCreateIOSSurfaceMVK\" function pointer");
0249bd
-    return 0;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   err =
0249bd
       window_ios->CreateIOSSurface (window->display->instance->instance, &info,
0249bd
       NULL, &ret;;
0249bd
   if (gst_vulkan_error_to_g_error (err, error, "vkCreateIOSSurfaceMVK") < 0)
0249bd
-    return 0;
0249bd
+    return VK_NULL_HANDLE;
0249bd
 
0249bd
   return ret;
0249bd
 }
0249bd
diff --git a/gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c b/gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c
0249bd
index eda063de9..c55bd3f8c 100644
0249bd
--- a/gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c
0249bd
+++ b/gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c
0249bd
@@ -268,14 +268,14 @@ gst_vulkan_window_wayland_get_surface (GstVulkanWindow * window,
0249bd
   if (!window_wl->CreateWaylandSurface) {
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FEATURE_NOT_PRESENT,
0249bd
         "Could not retrieve \"vkCreateWaylandSurfaceKHR\" function pointer");
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   err =
0249bd
       window_wl->CreateWaylandSurface (window->display->instance->instance,
0249bd
       &info, NULL, &ret;;
0249bd
   if (gst_vulkan_error_to_g_error (err, error, "vkCreateWaylandSurfaceKHR") < 0)
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
 
0249bd
   return ret;
0249bd
 }
0249bd
diff --git a/gst-libs/gst/vulkan/win32/gstvkwindow_win32.c b/gst-libs/gst/vulkan/win32/gstvkwindow_win32.c
0249bd
index 57e2c663f..dd8767155 100644
0249bd
--- a/gst-libs/gst/vulkan/win32/gstvkwindow_win32.c
0249bd
+++ b/gst-libs/gst/vulkan/win32/gstvkwindow_win32.c
0249bd
@@ -393,7 +393,7 @@ gst_vulkan_window_win32_get_surface (GstVulkanWindow * window, GError ** error)
0249bd
   if (!window_win32->CreateWin32Surface) {
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FEATURE_NOT_PRESENT,
0249bd
         "Could not retrieve \"vkCreateWin32SurfaceKHR\" function pointer");
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   err =
0249bd
@@ -401,7 +401,7 @@ gst_vulkan_window_win32_get_surface (GstVulkanWindow * window, GError ** error)
0249bd
       &info, NULL, &ret;;
0249bd
 
0249bd
   if (gst_vulkan_error_to_g_error (err, error, "vkCreateWin32SurfaceKHR") < 0)
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
 
0249bd
   return ret;
0249bd
 }
0249bd
diff --git a/gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c b/gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c
0249bd
index b0f1ab4d0..4021fe718 100644
0249bd
--- a/gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c
0249bd
+++ b/gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c
0249bd
@@ -283,14 +283,14 @@ gst_vulkan_window_xcb_get_surface (GstVulkanWindow * window, GError ** error)
0249bd
   if (!window_xcb->CreateXcbSurface) {
0249bd
     g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FEATURE_NOT_PRESENT,
0249bd
         "Could not retrieve \"vkCreateXcbSurfaceKHR\" function pointer");
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
   }
0249bd
 
0249bd
   err =
0249bd
       window_xcb->CreateXcbSurface (window->display->instance->instance, &info,
0249bd
       NULL, &ret;;
0249bd
   if (gst_vulkan_error_to_g_error (err, error, "vkCreateXcbSurfaceKHR") < 0)
0249bd
-    return NULL;
0249bd
+    return VK_NULL_HANDLE;
0249bd
 
0249bd
   return ret;
0249bd
 }
0249bd
diff --git a/sys/applemedia/videotexturecache-vulkan.mm b/sys/applemedia/videotexturecache-vulkan.mm
0249bd
index ac0c1e712..6ea77d276 100644
0249bd
--- a/sys/applemedia/videotexturecache-vulkan.mm
0249bd
+++ b/sys/applemedia/videotexturecache-vulkan.mm
0249bd
@@ -292,8 +292,8 @@ gst_io_surface_vulkan_memory_set_surface (GstIOSurfaceVulkanMemory * memory,
0249bd
     texture_data->texture = (__bridge_retained gpointer) texture;
0249bd
 
0249bd
     VkResult err = vkSetMTLTextureMVK (memory->vulkan_mem.image, texture);
0249bd
-    GST_DEBUG ("bound texture %p to image %p: 0x%x", texture, memory->vulkan_mem.image,
0249bd
-        err);
0249bd
+    GST_DEBUG ("bound texture %p to image %"GST_VULKAN_NON_DISPATCHABLE_HANDLE_FORMAT": 0x%x",
0249bd
+               texture, memory->vulkan_mem.image, err);
0249bd
 
0249bd
     vk_mem->user_data = texture_data;
0249bd
     vk_mem->notify = (GDestroyNotify) free_texture_wrapper;
0249bd
-- 
0249bd
2.31.1
0249bd