[PATCH vkd3d 3/8] demos: Load libvulkan dynamically.

Zebediah Figura zfigura at codeweavers.com
Mon Apr 18 20:28:43 CDT 2022


We would like to allow overriding the soname of libvulkan, in which case the
tests and demos should respect that override.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 Makefile.am          |  2 +-
 demos/demo_xcb.h     | 15 +++++++++++++++
 tests/vulkan_procs.h | 17 +++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index ed881ffa1..6a4cba449 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -325,7 +325,7 @@ endif
 EXTRA_DIST += $(vkd3d_shader_tests)
 
 if BUILD_DEMOS
-DEMOS_LDADD = $(LDADD) libvkd3d-shader.la @DEMO_LIBS@ @VULKAN_LIBS@
+DEMOS_LDADD = $(LDADD) libvkd3d-shader.la @DL_LIBS@ @DEMO_LIBS@
 DEMOS_CFLAGS = $(AM_CFLAGS) @DEMO_CFLAGS@
 bin_PROGRAMS += $(vkd3d_demos)
 
diff --git a/demos/demo_xcb.h b/demos/demo_xcb.h
index d8be00f03..e8c6553d8 100644
--- a/demos/demo_xcb.h
+++ b/demos/demo_xcb.h
@@ -17,6 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#define VK_NO_PROTOTYPES
 #define VK_USE_PLATFORM_XCB_KHR
 #define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_3
 #include <vkd3d.h>
@@ -29,6 +30,13 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdbool.h>
+#include "vkd3d_common.h"
+
+#define DECLARE_VK_PFN(name) PFN_##name name;
+DECLARE_VK_PFN(vkCreateInstance);
+#define VK_INSTANCE_PFN   DECLARE_VK_PFN
+#define VK_DEVICE_PFN     DECLARE_VK_PFN
+#include "../tests/vulkan_procs.h"
 
 struct demo
 {
@@ -329,6 +337,13 @@ static inline struct demo_swapchain *demo_swapchain_create(ID3D12CommandQueue *c
     VkDevice vk_device;
     VkImage *vk_images;
     VkFormat format;
+    void *libvulkan;
+
+    if (!(libvulkan = vkd3d_dlopen(SONAME_LIBVULKAN)))
+    {
+        fprintf(stderr, "Failed to load %s: %s.\n", SONAME_LIBVULKAN, vkd3d_dlerror());
+        exit(1);
+    }
 
     if ((format = vkd3d_get_vk_format(desc->format)) == VK_FORMAT_UNDEFINED)
         return NULL;
diff --git a/tests/vulkan_procs.h b/tests/vulkan_procs.h
index 8e205c1be..984cd5fa1 100644
--- a/tests/vulkan_procs.h
+++ b/tests/vulkan_procs.h
@@ -42,9 +42,13 @@ VK_INSTANCE_PFN(vkGetPhysicalDeviceFeatures)
 VK_INSTANCE_PFN(vkGetPhysicalDeviceFormatProperties)
 VK_INSTANCE_PFN(vkGetPhysicalDeviceMemoryProperties)
 VK_INSTANCE_PFN(vkGetPhysicalDeviceQueueFamilyProperties)
+VK_INSTANCE_PFN(vkGetPhysicalDeviceSurfaceCapabilitiesKHR)
+VK_INSTANCE_PFN(vkGetPhysicalDeviceSurfaceFormatsKHR)
+VK_INSTANCE_PFN(vkGetPhysicalDeviceSurfaceSupportKHR)
 
 /* Device functions (obtained by vkGetDeviceProcAddr). */
 VK_DEVICE_PFN(vkDestroyDevice) /* Load vkDestroyDevice() first. */
+VK_DEVICE_PFN(vkAcquireNextImageKHR)
 VK_DEVICE_PFN(vkAllocateCommandBuffers)
 VK_DEVICE_PFN(vkAllocateDescriptorSets)
 VK_DEVICE_PFN(vkAllocateMemory)
@@ -67,6 +71,7 @@ VK_DEVICE_PFN(vkCreateBuffer)
 VK_DEVICE_PFN(vkCreateCommandPool)
 VK_DEVICE_PFN(vkCreateDescriptorPool)
 VK_DEVICE_PFN(vkCreateDescriptorSetLayout)
+VK_DEVICE_PFN(vkCreateFence)
 VK_DEVICE_PFN(vkCreateFramebuffer)
 VK_DEVICE_PFN(vkCreateGraphicsPipelines)
 VK_DEVICE_PFN(vkCreateImage)
@@ -75,10 +80,12 @@ VK_DEVICE_PFN(vkCreatePipelineLayout)
 VK_DEVICE_PFN(vkCreateRenderPass)
 VK_DEVICE_PFN(vkCreateSampler)
 VK_DEVICE_PFN(vkCreateShaderModule)
+VK_DEVICE_PFN(vkCreateSwapchainKHR)
 VK_DEVICE_PFN(vkDestroyBuffer)
 VK_DEVICE_PFN(vkDestroyCommandPool)
 VK_DEVICE_PFN(vkDestroyDescriptorPool)
 VK_DEVICE_PFN(vkDestroyDescriptorSetLayout)
+VK_DEVICE_PFN(vkDestroyFence)
 VK_DEVICE_PFN(vkDestroyFramebuffer)
 VK_DEVICE_PFN(vkDestroyImage)
 VK_DEVICE_PFN(vkDestroyImageView)
@@ -87,18 +94,28 @@ VK_DEVICE_PFN(vkDestroyPipelineLayout)
 VK_DEVICE_PFN(vkDestroyRenderPass)
 VK_DEVICE_PFN(vkDestroySampler)
 VK_DEVICE_PFN(vkDestroyShaderModule)
+VK_DEVICE_PFN(vkDestroySurfaceKHR)
+VK_DEVICE_PFN(vkDestroySwapchainKHR)
 VK_DEVICE_PFN(vkEndCommandBuffer)
 VK_DEVICE_PFN(vkFreeCommandBuffers)
 VK_DEVICE_PFN(vkFreeMemory)
 VK_DEVICE_PFN(vkGetBufferMemoryRequirements)
 VK_DEVICE_PFN(vkGetDeviceQueue)
 VK_DEVICE_PFN(vkGetImageMemoryRequirements)
+VK_DEVICE_PFN(vkGetSwapchainImagesKHR)
 VK_DEVICE_PFN(vkMapMemory)
+VK_DEVICE_PFN(vkQueuePresentKHR)
 VK_DEVICE_PFN(vkQueueSubmit)
 VK_DEVICE_PFN(vkQueueWaitIdle)
 VK_DEVICE_PFN(vkResetDescriptorPool)
+VK_DEVICE_PFN(vkResetFences)
 VK_DEVICE_PFN(vkUnmapMemory)
 VK_DEVICE_PFN(vkUpdateDescriptorSets)
+VK_DEVICE_PFN(vkWaitForFences)
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+VK_INSTANCE_PFN(vkCreateXcbSurfaceKHR)
+#endif
 
 #undef VK_INSTANCE_PFN
 #undef VK_INSTANCE_EXT_PFN
-- 
2.35.1




More information about the wine-devel mailing list