diff --git a/scripts/generate_vk_helpers.py b/scripts/generate_vk_helpers.py new file mode 100755 index 000000000..1b9cd74d6 --- /dev/null +++ b/scripts/generate_vk_helpers.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python3 +# Copyright 2019-2021, Collabora, Ltd. +# SPDX-License-Identifier: BSL-1.0 +"""Simple script to update vk_helpers.{c,h}.""" + +from pathlib import Path +from typing import List, Tuple + +# Each tuple is a function name, followed optionally by one or more conditions to test in the preprocessor, which will be wrapped in "defined()" +# if they aren't already. Empty tuples insert a blank line. + +DEVICE_FUNCTIONS = [ + ("vkDestroyDevice",), + ("vkDeviceWaitIdle",), + ("vkAllocateMemory",), + ("vkFreeMemory",), + ("vkMapMemory",), + ("vkUnmapMemory",), + (), + ("vkCreateBuffer",), + ("vkDestroyBuffer",), + ("vkBindBufferMemory",), + (), + ("vkCreateImage",), + ("vkDestroyImage",), + ("vkBindImageMemory",), + (), + ("vkGetBufferMemoryRequirements",), + ("vkFlushMappedMemoryRanges",), + ("vkGetImageMemoryRequirements",), + ("vkGetImageMemoryRequirements2KHR",), + ("vkGetImageSubresourceLayout",), + (), + ("vkCreateImageView",), + ("vkDestroyImageView",), + (), + ("vkCreateSampler",), + ("vkDestroySampler",), + (), + ("vkCreateShaderModule",), + ("vkDestroyShaderModule",), + (), + ("vkCreateCommandPool",), + ("vkDestroyCommandPool",), + (), + ("vkAllocateCommandBuffers",), + ("vkBeginCommandBuffer",), + ("vkCmdPipelineBarrier",), + ("vkCmdBeginRenderPass",), + ("vkCmdSetScissor",), + ("vkCmdSetViewport",), + ("vkCmdClearColorImage",), + ("vkCmdEndRenderPass",), + ("vkCmdBindDescriptorSets",), + ("vkCmdBindPipeline",), + ("vkCmdBindVertexBuffers",), + ("vkCmdBindIndexBuffer",), + ("vkCmdDraw",), + ("vkCmdDrawIndexed",), + ("vkCmdDispatch",), + ("vkCmdCopyBuffer",), + ("vkCmdCopyBufferToImage",), + ("vkCmdCopyImage",), + ("vkCmdCopyImageToBuffer",), + ("vkEndCommandBuffer",), + ("vkFreeCommandBuffers",), + (), + ("vkCreateRenderPass",), + ("vkDestroyRenderPass",), + (), + ("vkCreateFramebuffer",), + ("vkDestroyFramebuffer",), + (), + ("vkCreatePipelineCache",), + ("vkDestroyPipelineCache",), + (), + ("vkResetDescriptorPool",), + ("vkCreateDescriptorPool",), + ("vkDestroyDescriptorPool",), + (), + ("vkAllocateDescriptorSets",), + ("vkFreeDescriptorSets",), + (), + ("vkCreateComputePipelines",), + ("vkCreateGraphicsPipelines",), + ("vkDestroyPipeline",), + (), + ("vkCreatePipelineLayout",), + ("vkDestroyPipelineLayout",), + (), + ("vkCreateDescriptorSetLayout",), + ("vkUpdateDescriptorSets",), + ("vkDestroyDescriptorSetLayout",), + (), + ("vkGetDeviceQueue",), + ("vkQueueSubmit",), + ("vkQueueWaitIdle",), + (), + ("vkCreateSemaphore",), + ("vkSignalSemaphoreKHR", "VK_KHR_timeline_semaphore"), + ("vkDestroySemaphore",), + (), + ("vkCreateFence",), + ("vkWaitForFences",), + ("vkGetFenceStatus",), + ("vkDestroyFence",), + ("vkResetFences",), + (), + ("vkCreateSwapchainKHR",), + ("vkDestroySwapchainKHR",), + ("vkGetSwapchainImagesKHR",), + ("vkAcquireNextImageKHR",), + ("vkQueuePresentKHR",), + (), + ("vkGetMemoryWin32HandleKHR", "VK_USE_PLATFORM_WIN32_KHR"), + ("vkImportSemaphoreWin32HandleKHR", "VK_USE_PLATFORM_WIN32_KHR"), + ("vkImportFenceWin32HandleKHR", "VK_USE_PLATFORM_WIN32_KHR"), + ("vkGetMemoryFdKHR", "!defined(VK_USE_PLATFORM_WIN32_KHR)"), + (), + ("vkImportSemaphoreFdKHR", "!defined(VK_USE_PLATFORM_WIN32_KHR)"), + ("vkGetSemaphoreFdKHR", "!defined(VK_USE_PLATFORM_WIN32_KHR)"), + (), + ("vkImportFenceFdKHR", "!defined(VK_USE_PLATFORM_WIN32_KHR)"), + ("vkGetFenceFdKHR", "!defined(VK_USE_PLATFORM_WIN32_KHR)"), + ("vkGetMemoryAndroidHardwareBufferANDROID", "VK_USE_PLATFORM_ANDROID_KHR"), + ( + "vkGetAndroidHardwareBufferPropertiesANDROID", + "VK_USE_PLATFORM_ANDROID_KHR", + ), + (), + ("vkGetPastPresentationTimingGOOGLE",), +] +INSTANCE_FUNCTIONS = [ + ("vkDestroyInstance",), + ("vkGetDeviceProcAddr",), + ("vkCreateDevice",), + ("vkDestroySurfaceKHR",), + (), + ("vkCreateDebugReportCallbackEXT",), + ("vkDestroyDebugReportCallbackEXT",), + (), + ("vkEnumeratePhysicalDevices",), + ("vkGetPhysicalDeviceProperties",), + ("vkGetPhysicalDeviceProperties2",), + ("vkGetPhysicalDeviceFeatures2",), + ("vkGetPhysicalDeviceMemoryProperties",), + ("vkGetPhysicalDeviceQueueFamilyProperties",), + ("vkGetPhysicalDeviceSurfaceCapabilitiesKHR",), + ("vkGetPhysicalDeviceSurfaceFormatsKHR",), + ("vkGetPhysicalDeviceSurfacePresentModesKHR",), + ("vkGetPhysicalDeviceSurfaceSupportKHR",), + ("vkGetPhysicalDeviceFormatProperties",), + ("vkEnumerateDeviceExtensionProperties",), + ("vkGetPhysicalDeviceImageFormatProperties2",), + (), + ("vkCreateDisplayPlaneSurfaceKHR", "VK_USE_PLATFORM_DISPLAY_KHR"), + ("vkGetDisplayPlaneCapabilitiesKHR", "VK_USE_PLATFORM_DISPLAY_KHR"), + ("vkGetPhysicalDeviceDisplayPropertiesKHR", "VK_USE_PLATFORM_DISPLAY_KHR"), + ("vkGetPhysicalDeviceDisplayPlanePropertiesKHR", "VK_USE_PLATFORM_DISPLAY_KHR"), + ("vkGetDisplayModePropertiesKHR", "VK_USE_PLATFORM_DISPLAY_KHR"), + ("vkReleaseDisplayEXT", "VK_USE_PLATFORM_DISPLAY_KHR"), + (), + ("vkCreateXcbSurfaceKHR", "VK_USE_PLATFORM_XCB_KHR"), + (), + ("vkCreateWaylandSurfaceKHR", "VK_USE_PLATFORM_WAYLAND_KHR"), + (), + ( + "vkAcquireDrmDisplayEXT", + "VK_USE_PLATFORM_WAYLAND_KHR", + "VK_EXT_acquire_drm_display", + ), + ("vkGetDrmDisplayEXT", "VK_USE_PLATFORM_WAYLAND_KHR", "VK_EXT_acquire_drm_display"), + (), + ("vkGetRandROutputDisplayEXT", "VK_USE_PLATFORM_XLIB_XRANDR_EXT"), + ("vkAcquireXlibDisplayEXT", "VK_USE_PLATFORM_XLIB_XRANDR_EXT"), + (), + ("vkCreateAndroidSurfaceKHR", "VK_USE_PLATFORM_ANDROID_KHR"), + (), + ("vkCreateWin32SurfaceKHR", "VK_USE_PLATFORM_WIN32_KHR"), +] + +EXTENSIONS_TO_CHECK = [ +"GOOGLE_display_timing", +"EXT_global_priority", +"EXT_robustness2", +] + +ROOT = Path(__file__).resolve().parent.parent +DIR = ROOT / "src" / "xrt" / "auxiliary" / "vk" +HEADER_FN = DIR / "vk_helpers.h" +IMPL_FN = DIR / "vk_helpers.c" + +BEGIN_TEMPLATE = "\t// beginning of GENERATED %s code - do not modify - used by scripts" +END_TEMPLATE = "\t// end of GENERATED %s code - do not modify - used by scripts" + + +def wrap_condition(condition): + if "defined" in condition: + return condition + return "defined({})".format(condition) + + +def compute_condition(pp_conditions): + if not pp_conditions: + return None + return " && ".join(wrap_condition(x) for x in pp_conditions) + + +def generate_per_function(functions: List[Tuple[str, ...]], per_function_handler): + current_condition = None + for data in functions: + if not data: + # empty line + yield "" + continue + new_condition = compute_condition(data[1:]) + if current_condition and new_condition != current_condition: + # Close current condition if required. + yield "#endif // {}".format(current_condition) + # empty line + yield "" + current_condition = None + + if new_condition != current_condition: + # Open new condition if required + yield "#if {}".format(new_condition) + current_condition = new_condition + + yield per_function_handler(data[0]) + + # close any trailing conditions + if current_condition: + yield "#endif // {}".format(current_condition) + + +def generate_structure_members(functions: List[Tuple[str, ...]]): + def per_function(name): + return "\tPFN_{} {};".format(name, name) + + return generate_per_function(functions, per_function) + + +def generate_ins_proc(functions: List[Tuple[str, ...]]): + def per_function(func: str) -> str: + return "\tvk->{} = GET_INS_PROC(vk, {});".format(func, func) + + return generate_per_function(functions, per_function) + + +def generate_dev_proc(functions: List[Tuple[str, ...]]): + def per_function(func: str) -> str: + return "\tvk->{} = GET_DEV_PROC(vk, {});".format(func, func) + + return generate_per_function(functions, per_function) + + +def replace_middle( + lines: List[str], start_sentinel: str, end_sentinel: str, new_middle: List[str] +) -> List[str]: + middle_start = lines.index(start_sentinel) + 1 + middle_end = lines.index(end_sentinel) + return lines[:middle_start] + new_middle + lines[middle_end:] + + +DEVICE_TEMPLATES = { + "BEGIN": BEGIN_TEMPLATE % "device loader", + "END": END_TEMPLATE % "device loader", +} +INSTANCE_TEMPLATES = { + "BEGIN": BEGIN_TEMPLATE % "instance loader", + "END": END_TEMPLATE % "instance loader", +} +EXT_TEMPLATES = { + "BEGIN": BEGIN_TEMPLATE % "extension", + "END": END_TEMPLATE % "extension", +} + + +def process_header(): + with open(str(HEADER_FN), "r", encoding="utf-8") as fp: + lines = [line.rstrip() for line in fp.readlines()] + + lines = replace_middle( + lines, + INSTANCE_TEMPLATES["BEGIN"], + INSTANCE_TEMPLATES["END"], + list(generate_structure_members(INSTANCE_FUNCTIONS)), + ) + + lines = replace_middle( + lines, + DEVICE_TEMPLATES["BEGIN"], + DEVICE_TEMPLATES["END"], + list(generate_structure_members(DEVICE_FUNCTIONS)), + ) + + with open(str(HEADER_FN), "w", encoding="utf-8") as fp: + fp.write("\n".join(lines)) + fp.write("\n") + + +def process_impl(): + with open(str(IMPL_FN), "r", encoding="utf-8") as fp: + lines = [line.rstrip() for line in fp.readlines()] + + lines = replace_middle( + lines, + INSTANCE_TEMPLATES["BEGIN"], + INSTANCE_TEMPLATES["END"], + list(generate_ins_proc(INSTANCE_FUNCTIONS)), + ) + + lines = replace_middle( + lines, + DEVICE_TEMPLATES["BEGIN"], + DEVICE_TEMPLATES["END"], + list(generate_dev_proc(DEVICE_FUNCTIONS)), + ) + + with open(str(IMPL_FN), "w", encoding="utf-8") as fp: + fp.write("\n".join(lines)) + fp.write("\n") + + +if __name__ == "__main__": + process_header() + process_impl() diff --git a/src/xrt/auxiliary/vk/vk_helpers.c b/src/xrt/auxiliary/vk/vk_helpers.c index 3847da0df..4715a37a2 100644 --- a/src/xrt/auxiliary/vk/vk_helpers.c +++ b/src/xrt/auxiliary/vk/vk_helpers.c @@ -819,61 +819,72 @@ vk_get_loader_functions(struct vk_bundle *vk, PFN_vkGetInstanceProcAddr g) VkResult vk_get_instance_functions(struct vk_bundle *vk) { - // clang-format off - vk->vkDestroyInstance = GET_INS_PROC(vk, vkDestroyInstance); - vk->vkGetDeviceProcAddr = GET_INS_PROC(vk, vkGetDeviceProcAddr); - vk->vkCreateDevice = GET_INS_PROC(vk, vkCreateDevice); - vk->vkEnumeratePhysicalDevices = GET_INS_PROC(vk, vkEnumeratePhysicalDevices); - vk->vkGetPhysicalDeviceProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceProperties); - vk->vkGetPhysicalDeviceProperties2 = GET_INS_PROC(vk, vkGetPhysicalDeviceProperties2); - vk->vkGetPhysicalDeviceFeatures2 = GET_INS_PROC(vk, vkGetPhysicalDeviceFeatures2); - vk->vkGetPhysicalDeviceMemoryProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceMemoryProperties); - vk->vkGetPhysicalDeviceQueueFamilyProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceQueueFamilyProperties); - vk->vkCreateDebugReportCallbackEXT = GET_INS_PROC(vk, vkCreateDebugReportCallbackEXT); - vk->vkDestroyDebugReportCallbackEXT = GET_INS_PROC(vk, vkDestroyDebugReportCallbackEXT); - vk->vkDestroySurfaceKHR = GET_INS_PROC(vk, vkDestroySurfaceKHR); + + // beginning of GENERATED instance loader code - do not modify - used by scripts + vk->vkDestroyInstance = GET_INS_PROC(vk, vkDestroyInstance); + vk->vkGetDeviceProcAddr = GET_INS_PROC(vk, vkGetDeviceProcAddr); + vk->vkCreateDevice = GET_INS_PROC(vk, vkCreateDevice); + vk->vkDestroySurfaceKHR = GET_INS_PROC(vk, vkDestroySurfaceKHR); + + vk->vkCreateDebugReportCallbackEXT = GET_INS_PROC(vk, vkCreateDebugReportCallbackEXT); + vk->vkDestroyDebugReportCallbackEXT = GET_INS_PROC(vk, vkDestroyDebugReportCallbackEXT); + + vk->vkEnumeratePhysicalDevices = GET_INS_PROC(vk, vkEnumeratePhysicalDevices); + vk->vkGetPhysicalDeviceProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceProperties); + vk->vkGetPhysicalDeviceProperties2 = GET_INS_PROC(vk, vkGetPhysicalDeviceProperties2); + vk->vkGetPhysicalDeviceFeatures2 = GET_INS_PROC(vk, vkGetPhysicalDeviceFeatures2); + vk->vkGetPhysicalDeviceMemoryProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceMemoryProperties); + vk->vkGetPhysicalDeviceQueueFamilyProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceQueueFamilyProperties); vk->vkGetPhysicalDeviceSurfaceCapabilitiesKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceSurfaceCapabilitiesKHR); - vk->vkGetPhysicalDeviceSurfaceFormatsKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceSurfaceFormatsKHR); + vk->vkGetPhysicalDeviceSurfaceFormatsKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceSurfaceFormatsKHR); vk->vkGetPhysicalDeviceSurfacePresentModesKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceSurfacePresentModesKHR); - vk->vkGetPhysicalDeviceSurfaceSupportKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceSurfaceSupportKHR); - vk->vkGetPhysicalDeviceFormatProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceFormatProperties); - vk->vkEnumerateDeviceExtensionProperties = GET_INS_PROC(vk, vkEnumerateDeviceExtensionProperties); + vk->vkGetPhysicalDeviceSurfaceSupportKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceSurfaceSupportKHR); + vk->vkGetPhysicalDeviceFormatProperties = GET_INS_PROC(vk, vkGetPhysicalDeviceFormatProperties); + vk->vkEnumerateDeviceExtensionProperties = GET_INS_PROC(vk, vkEnumerateDeviceExtensionProperties); vk->vkGetPhysicalDeviceImageFormatProperties2 = GET_INS_PROC(vk, vkGetPhysicalDeviceImageFormatProperties2); -#ifdef VK_USE_PLATFORM_DISPLAY_KHR - vk->vkCreateDisplayPlaneSurfaceKHR = GET_INS_PROC(vk, vkCreateDisplayPlaneSurfaceKHR); - vk->vkGetDisplayPlaneCapabilitiesKHR = GET_INS_PROC(vk, vkGetDisplayPlaneCapabilitiesKHR); - vk->vkGetPhysicalDeviceDisplayPropertiesKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceDisplayPropertiesKHR); - vk->vkGetPhysicalDeviceDisplayPlanePropertiesKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceDisplayPlanePropertiesKHR); - vk->vkGetDisplayModePropertiesKHR = GET_INS_PROC(vk, vkGetDisplayModePropertiesKHR); - vk->vkReleaseDisplayEXT = GET_INS_PROC(vk, vkReleaseDisplayEXT); -#endif -#ifdef VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_DISPLAY_KHR) + vk->vkCreateDisplayPlaneSurfaceKHR = GET_INS_PROC(vk, vkCreateDisplayPlaneSurfaceKHR); + vk->vkGetDisplayPlaneCapabilitiesKHR = GET_INS_PROC(vk, vkGetDisplayPlaneCapabilitiesKHR); + vk->vkGetPhysicalDeviceDisplayPropertiesKHR = GET_INS_PROC(vk, vkGetPhysicalDeviceDisplayPropertiesKHR); + vk->vkGetPhysicalDeviceDisplayPlanePropertiesKHR = + GET_INS_PROC(vk, vkGetPhysicalDeviceDisplayPlanePropertiesKHR); + vk->vkGetDisplayModePropertiesKHR = GET_INS_PROC(vk, vkGetDisplayModePropertiesKHR); + vk->vkReleaseDisplayEXT = GET_INS_PROC(vk, vkReleaseDisplayEXT); + +#endif // defined(VK_USE_PLATFORM_DISPLAY_KHR) + +#if defined(VK_USE_PLATFORM_XCB_KHR) vk->vkCreateXcbSurfaceKHR = GET_INS_PROC(vk, vkCreateXcbSurfaceKHR); -#endif -#ifdef VK_USE_PLATFORM_WAYLAND_KHR +#endif // defined(VK_USE_PLATFORM_XCB_KHR) + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) vk->vkCreateWaylandSurfaceKHR = GET_INS_PROC(vk, vkCreateWaylandSurfaceKHR); -#ifdef VK_EXT_acquire_drm_display - vk->vkAcquireDrmDisplayEXT = GET_INS_PROC(vk, vkAcquireDrmDisplayEXT); - vk->vkGetDrmDisplayEXT = GET_INS_PROC(vk, vkGetDrmDisplayEXT); -#endif -#endif +#endif // defined(VK_USE_PLATFORM_WAYLAND_KHR) -#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT - vk->vkGetRandROutputDisplayEXT = GET_INS_PROC(vk, vkGetRandROutputDisplayEXT); - vk->vkAcquireXlibDisplayEXT = GET_INS_PROC(vk, vkAcquireXlibDisplayEXT); -#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) && defined(VK_EXT_acquire_drm_display) + vk->vkAcquireDrmDisplayEXT = GET_INS_PROC(vk, vkAcquireDrmDisplayEXT); + vk->vkGetDrmDisplayEXT = GET_INS_PROC(vk, vkGetDrmDisplayEXT); -#ifdef VK_USE_PLATFORM_ANDROID_KHR - vk->vkCreateAndroidSurfaceKHR = GET_INS_PROC(vk, vkCreateAndroidSurfaceKHR); -#endif +#endif // defined(VK_USE_PLATFORM_WAYLAND_KHR) && defined(VK_EXT_acquire_drm_display) -#ifdef VK_USE_PLATFORM_WIN32_KHR - vk->vkCreateWin32SurfaceKHR = GET_INS_PROC(vk, vkCreateWin32SurfaceKHR); -#endif - // clang-format on +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + vk->vkGetRandROutputDisplayEXT = GET_INS_PROC(vk, vkGetRandROutputDisplayEXT); + vk->vkAcquireXlibDisplayEXT = GET_INS_PROC(vk, vkAcquireXlibDisplayEXT); + +#endif // defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + vk->vkCreateAndroidSurfaceKHR = GET_INS_PROC(vk, vkCreateAndroidSurfaceKHR); + +#endif // defined(VK_USE_PLATFORM_ANDROID_KHR) + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + vk->vkCreateWin32SurfaceKHR = GET_INS_PROC(vk, vkCreateWin32SurfaceKHR); +#endif // defined(VK_USE_PLATFORM_WIN32_KHR) + // end of GENERATED instance loader code - do not modify - used by scripts return VK_SUCCESS; } @@ -881,116 +892,137 @@ vk_get_instance_functions(struct vk_bundle *vk) static VkResult vk_get_device_functions(struct vk_bundle *vk) { - // clang-format off - vk->vkDestroyDevice = GET_DEV_PROC(vk, vkDestroyDevice); - vk->vkDeviceWaitIdle = GET_DEV_PROC(vk, vkDeviceWaitIdle); - vk->vkAllocateMemory = GET_DEV_PROC(vk, vkAllocateMemory); - vk->vkFreeMemory = GET_DEV_PROC(vk, vkFreeMemory); - vk->vkMapMemory = GET_DEV_PROC(vk, vkMapMemory); - vk->vkUnmapMemory = GET_DEV_PROC(vk, vkUnmapMemory); - vk->vkGetMemoryFdKHR = GET_DEV_PROC(vk, vkGetMemoryFdKHR); -#ifdef VK_USE_PLATFORM_ANDROID_KHR + + // beginning of GENERATED device loader code - do not modify - used by scripts + vk->vkDestroyDevice = GET_DEV_PROC(vk, vkDestroyDevice); + vk->vkDeviceWaitIdle = GET_DEV_PROC(vk, vkDeviceWaitIdle); + vk->vkAllocateMemory = GET_DEV_PROC(vk, vkAllocateMemory); + vk->vkFreeMemory = GET_DEV_PROC(vk, vkFreeMemory); + vk->vkMapMemory = GET_DEV_PROC(vk, vkMapMemory); + vk->vkUnmapMemory = GET_DEV_PROC(vk, vkUnmapMemory); + + vk->vkCreateBuffer = GET_DEV_PROC(vk, vkCreateBuffer); + vk->vkDestroyBuffer = GET_DEV_PROC(vk, vkDestroyBuffer); + vk->vkBindBufferMemory = GET_DEV_PROC(vk, vkBindBufferMemory); + + vk->vkCreateImage = GET_DEV_PROC(vk, vkCreateImage); + vk->vkDestroyImage = GET_DEV_PROC(vk, vkDestroyImage); + vk->vkBindImageMemory = GET_DEV_PROC(vk, vkBindImageMemory); + + vk->vkGetBufferMemoryRequirements = GET_DEV_PROC(vk, vkGetBufferMemoryRequirements); + vk->vkFlushMappedMemoryRanges = GET_DEV_PROC(vk, vkFlushMappedMemoryRanges); + vk->vkGetImageMemoryRequirements = GET_DEV_PROC(vk, vkGetImageMemoryRequirements); + vk->vkGetImageMemoryRequirements2KHR = GET_DEV_PROC(vk, vkGetImageMemoryRequirements2KHR); + vk->vkGetImageSubresourceLayout = GET_DEV_PROC(vk, vkGetImageSubresourceLayout); + + vk->vkCreateImageView = GET_DEV_PROC(vk, vkCreateImageView); + vk->vkDestroyImageView = GET_DEV_PROC(vk, vkDestroyImageView); + + vk->vkCreateSampler = GET_DEV_PROC(vk, vkCreateSampler); + vk->vkDestroySampler = GET_DEV_PROC(vk, vkDestroySampler); + + vk->vkCreateShaderModule = GET_DEV_PROC(vk, vkCreateShaderModule); + vk->vkDestroyShaderModule = GET_DEV_PROC(vk, vkDestroyShaderModule); + + vk->vkCreateCommandPool = GET_DEV_PROC(vk, vkCreateCommandPool); + vk->vkDestroyCommandPool = GET_DEV_PROC(vk, vkDestroyCommandPool); + + vk->vkAllocateCommandBuffers = GET_DEV_PROC(vk, vkAllocateCommandBuffers); + vk->vkBeginCommandBuffer = GET_DEV_PROC(vk, vkBeginCommandBuffer); + vk->vkCmdPipelineBarrier = GET_DEV_PROC(vk, vkCmdPipelineBarrier); + vk->vkCmdBeginRenderPass = GET_DEV_PROC(vk, vkCmdBeginRenderPass); + vk->vkCmdSetScissor = GET_DEV_PROC(vk, vkCmdSetScissor); + vk->vkCmdSetViewport = GET_DEV_PROC(vk, vkCmdSetViewport); + vk->vkCmdClearColorImage = GET_DEV_PROC(vk, vkCmdClearColorImage); + vk->vkCmdEndRenderPass = GET_DEV_PROC(vk, vkCmdEndRenderPass); + vk->vkCmdBindDescriptorSets = GET_DEV_PROC(vk, vkCmdBindDescriptorSets); + vk->vkCmdBindPipeline = GET_DEV_PROC(vk, vkCmdBindPipeline); + vk->vkCmdBindVertexBuffers = GET_DEV_PROC(vk, vkCmdBindVertexBuffers); + vk->vkCmdBindIndexBuffer = GET_DEV_PROC(vk, vkCmdBindIndexBuffer); + vk->vkCmdDraw = GET_DEV_PROC(vk, vkCmdDraw); + vk->vkCmdDrawIndexed = GET_DEV_PROC(vk, vkCmdDrawIndexed); + vk->vkCmdDispatch = GET_DEV_PROC(vk, vkCmdDispatch); + vk->vkCmdCopyBuffer = GET_DEV_PROC(vk, vkCmdCopyBuffer); + vk->vkCmdCopyBufferToImage = GET_DEV_PROC(vk, vkCmdCopyBufferToImage); + vk->vkCmdCopyImage = GET_DEV_PROC(vk, vkCmdCopyImage); + vk->vkCmdCopyImageToBuffer = GET_DEV_PROC(vk, vkCmdCopyImageToBuffer); + vk->vkEndCommandBuffer = GET_DEV_PROC(vk, vkEndCommandBuffer); + vk->vkFreeCommandBuffers = GET_DEV_PROC(vk, vkFreeCommandBuffers); + + vk->vkCreateRenderPass = GET_DEV_PROC(vk, vkCreateRenderPass); + vk->vkDestroyRenderPass = GET_DEV_PROC(vk, vkDestroyRenderPass); + + vk->vkCreateFramebuffer = GET_DEV_PROC(vk, vkCreateFramebuffer); + vk->vkDestroyFramebuffer = GET_DEV_PROC(vk, vkDestroyFramebuffer); + + vk->vkCreatePipelineCache = GET_DEV_PROC(vk, vkCreatePipelineCache); + vk->vkDestroyPipelineCache = GET_DEV_PROC(vk, vkDestroyPipelineCache); + + vk->vkResetDescriptorPool = GET_DEV_PROC(vk, vkResetDescriptorPool); + vk->vkCreateDescriptorPool = GET_DEV_PROC(vk, vkCreateDescriptorPool); + vk->vkDestroyDescriptorPool = GET_DEV_PROC(vk, vkDestroyDescriptorPool); + + vk->vkAllocateDescriptorSets = GET_DEV_PROC(vk, vkAllocateDescriptorSets); + vk->vkFreeDescriptorSets = GET_DEV_PROC(vk, vkFreeDescriptorSets); + + vk->vkCreateComputePipelines = GET_DEV_PROC(vk, vkCreateComputePipelines); + vk->vkCreateGraphicsPipelines = GET_DEV_PROC(vk, vkCreateGraphicsPipelines); + vk->vkDestroyPipeline = GET_DEV_PROC(vk, vkDestroyPipeline); + + vk->vkCreatePipelineLayout = GET_DEV_PROC(vk, vkCreatePipelineLayout); + vk->vkDestroyPipelineLayout = GET_DEV_PROC(vk, vkDestroyPipelineLayout); + + vk->vkCreateDescriptorSetLayout = GET_DEV_PROC(vk, vkCreateDescriptorSetLayout); + vk->vkUpdateDescriptorSets = GET_DEV_PROC(vk, vkUpdateDescriptorSets); + vk->vkDestroyDescriptorSetLayout = GET_DEV_PROC(vk, vkDestroyDescriptorSetLayout); + + vk->vkGetDeviceQueue = GET_DEV_PROC(vk, vkGetDeviceQueue); + vk->vkQueueSubmit = GET_DEV_PROC(vk, vkQueueSubmit); + vk->vkQueueWaitIdle = GET_DEV_PROC(vk, vkQueueWaitIdle); + + vk->vkCreateSemaphore = GET_DEV_PROC(vk, vkCreateSemaphore); +#if defined(VK_KHR_timeline_semaphore) + vk->vkSignalSemaphoreKHR = GET_DEV_PROC(vk, vkSignalSemaphoreKHR); +#endif // defined(VK_KHR_timeline_semaphore) + + vk->vkDestroySemaphore = GET_DEV_PROC(vk, vkDestroySemaphore); + + vk->vkCreateFence = GET_DEV_PROC(vk, vkCreateFence); + vk->vkWaitForFences = GET_DEV_PROC(vk, vkWaitForFences); + vk->vkGetFenceStatus = GET_DEV_PROC(vk, vkGetFenceStatus); + vk->vkDestroyFence = GET_DEV_PROC(vk, vkDestroyFence); + vk->vkResetFences = GET_DEV_PROC(vk, vkResetFences); + + vk->vkCreateSwapchainKHR = GET_DEV_PROC(vk, vkCreateSwapchainKHR); + vk->vkDestroySwapchainKHR = GET_DEV_PROC(vk, vkDestroySwapchainKHR); + vk->vkGetSwapchainImagesKHR = GET_DEV_PROC(vk, vkGetSwapchainImagesKHR); + vk->vkAcquireNextImageKHR = GET_DEV_PROC(vk, vkAcquireNextImageKHR); + vk->vkQueuePresentKHR = GET_DEV_PROC(vk, vkQueuePresentKHR); + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + vk->vkGetMemoryWin32HandleKHR = GET_DEV_PROC(vk, vkGetMemoryWin32HandleKHR); + vk->vkImportSemaphoreWin32HandleKHR = GET_DEV_PROC(vk, vkImportSemaphoreWin32HandleKHR); + vk->vkImportFenceWin32HandleKHR = GET_DEV_PROC(vk, vkImportFenceWin32HandleKHR); +#endif // defined(VK_USE_PLATFORM_WIN32_KHR) + +#if !defined(VK_USE_PLATFORM_WIN32_KHR) + vk->vkGetMemoryFdKHR = GET_DEV_PROC(vk, vkGetMemoryFdKHR); + + vk->vkImportSemaphoreFdKHR = GET_DEV_PROC(vk, vkImportSemaphoreFdKHR); + vk->vkGetSemaphoreFdKHR = GET_DEV_PROC(vk, vkGetSemaphoreFdKHR); + + vk->vkImportFenceFdKHR = GET_DEV_PROC(vk, vkImportFenceFdKHR); + vk->vkGetFenceFdKHR = GET_DEV_PROC(vk, vkGetFenceFdKHR); +#endif // !defined(VK_USE_PLATFORM_WIN32_KHR) + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) vk->vkGetMemoryAndroidHardwareBufferANDROID = GET_DEV_PROC(vk, vkGetMemoryAndroidHardwareBufferANDROID); vk->vkGetAndroidHardwareBufferPropertiesANDROID = GET_DEV_PROC(vk, vkGetAndroidHardwareBufferPropertiesANDROID); -#endif -#ifdef VK_USE_PLATFORM_WIN32_KHR - vk->vkGetMemoryWin32HandleKHR = GET_DEV_PROC(vk, vkGetMemoryWin32HandleKHR); -#endif - - vk->vkCreateBuffer = GET_DEV_PROC(vk, vkCreateBuffer); - vk->vkDestroyBuffer = GET_DEV_PROC(vk, vkDestroyBuffer); - vk->vkBindBufferMemory = GET_DEV_PROC(vk, vkBindBufferMemory); - vk->vkGetBufferMemoryRequirements = GET_DEV_PROC(vk, vkGetBufferMemoryRequirements); - vk->vkFlushMappedMemoryRanges = GET_DEV_PROC(vk, vkFlushMappedMemoryRanges); - vk->vkCreateImage = GET_DEV_PROC(vk, vkCreateImage); - vk->vkGetImageMemoryRequirements = GET_DEV_PROC(vk, vkGetImageMemoryRequirements); - // because we use Vulkan API Version 1.0.x, we can only get the KHR version of this function - vk->vkGetImageMemoryRequirements2 = GET_DEV_PROC(vk, vkGetImageMemoryRequirements2KHR); - vk->vkGetImageSubresourceLayout = GET_DEV_PROC(vk, vkGetImageSubresourceLayout); - vk->vkBindImageMemory = GET_DEV_PROC(vk, vkBindImageMemory); - vk->vkDestroyImage = GET_DEV_PROC(vk, vkDestroyImage); - vk->vkCreateImageView = GET_DEV_PROC(vk, vkCreateImageView); - vk->vkDestroyImageView = GET_DEV_PROC(vk, vkDestroyImageView); - vk->vkCreateSampler = GET_DEV_PROC(vk, vkCreateSampler); - vk->vkDestroySampler = GET_DEV_PROC(vk, vkDestroySampler); - vk->vkCreateShaderModule = GET_DEV_PROC(vk, vkCreateShaderModule); - vk->vkDestroyShaderModule = GET_DEV_PROC(vk, vkDestroyShaderModule); - vk->vkCreateCommandPool = GET_DEV_PROC(vk, vkCreateCommandPool); - vk->vkDestroyCommandPool = GET_DEV_PROC(vk, vkDestroyCommandPool); - vk->vkAllocateCommandBuffers = GET_DEV_PROC(vk, vkAllocateCommandBuffers); - vk->vkBeginCommandBuffer = GET_DEV_PROC(vk, vkBeginCommandBuffer); - vk->vkCmdPipelineBarrier = GET_DEV_PROC(vk, vkCmdPipelineBarrier); - vk->vkCmdBeginRenderPass = GET_DEV_PROC(vk, vkCmdBeginRenderPass); - vk->vkCmdSetScissor = GET_DEV_PROC(vk, vkCmdSetScissor); - vk->vkCmdSetViewport = GET_DEV_PROC(vk, vkCmdSetViewport); - vk->vkCmdClearColorImage = GET_DEV_PROC(vk, vkCmdClearColorImage); - vk->vkCmdEndRenderPass = GET_DEV_PROC(vk, vkCmdEndRenderPass); - vk->vkCmdBindDescriptorSets = GET_DEV_PROC(vk, vkCmdBindDescriptorSets); - vk->vkCmdBindPipeline = GET_DEV_PROC(vk, vkCmdBindPipeline); - vk->vkCmdBindVertexBuffers = GET_DEV_PROC(vk, vkCmdBindVertexBuffers); - vk->vkCmdBindIndexBuffer = GET_DEV_PROC(vk, vkCmdBindIndexBuffer); - vk->vkCmdDraw = GET_DEV_PROC(vk, vkCmdDraw); - vk->vkCmdDrawIndexed = GET_DEV_PROC(vk, vkCmdDrawIndexed); - vk->vkCmdDispatch = GET_DEV_PROC(vk, vkCmdDispatch); - vk->vkCmdCopyBuffer = GET_DEV_PROC(vk, vkCmdCopyBuffer); - vk->vkCmdCopyBufferToImage = GET_DEV_PROC(vk, vkCmdCopyBufferToImage); - vk->vkCmdCopyImage = GET_DEV_PROC(vk, vkCmdCopyImage); - vk->vkCmdCopyImageToBuffer = GET_DEV_PROC(vk, vkCmdCopyImageToBuffer); - vk->vkEndCommandBuffer = GET_DEV_PROC(vk, vkEndCommandBuffer); - vk->vkFreeCommandBuffers = GET_DEV_PROC(vk, vkFreeCommandBuffers); - vk->vkCreateRenderPass = GET_DEV_PROC(vk, vkCreateRenderPass); - vk->vkDestroyRenderPass = GET_DEV_PROC(vk, vkDestroyRenderPass); - vk->vkCreateFramebuffer = GET_DEV_PROC(vk, vkCreateFramebuffer); - vk->vkDestroyFramebuffer = GET_DEV_PROC(vk, vkDestroyFramebuffer); - vk->vkCreatePipelineCache = GET_DEV_PROC(vk, vkCreatePipelineCache); - vk->vkDestroyPipelineCache = GET_DEV_PROC(vk, vkDestroyPipelineCache); - vk->vkResetDescriptorPool = GET_DEV_PROC(vk, vkResetDescriptorPool); - vk->vkCreateDescriptorPool = GET_DEV_PROC(vk, vkCreateDescriptorPool); - vk->vkDestroyDescriptorPool = GET_DEV_PROC(vk, vkDestroyDescriptorPool); - vk->vkAllocateDescriptorSets = GET_DEV_PROC(vk, vkAllocateDescriptorSets); - vk->vkFreeDescriptorSets = GET_DEV_PROC(vk, vkFreeDescriptorSets); - vk->vkCreateComputePipelines = GET_DEV_PROC(vk, vkCreateComputePipelines); - vk->vkCreateGraphicsPipelines = GET_DEV_PROC(vk, vkCreateGraphicsPipelines); - vk->vkDestroyPipeline = GET_DEV_PROC(vk, vkDestroyPipeline); - vk->vkCreatePipelineLayout = GET_DEV_PROC(vk, vkCreatePipelineLayout); - vk->vkDestroyPipelineLayout = GET_DEV_PROC(vk, vkDestroyPipelineLayout); - vk->vkCreateDescriptorSetLayout = GET_DEV_PROC(vk, vkCreateDescriptorSetLayout); - vk->vkUpdateDescriptorSets = GET_DEV_PROC(vk, vkUpdateDescriptorSets); - vk->vkDestroyDescriptorSetLayout = GET_DEV_PROC(vk, vkDestroyDescriptorSetLayout); - vk->vkGetDeviceQueue = GET_DEV_PROC(vk, vkGetDeviceQueue); - vk->vkQueueSubmit = GET_DEV_PROC(vk, vkQueueSubmit); - vk->vkQueueWaitIdle = GET_DEV_PROC(vk, vkQueueWaitIdle); - vk->vkCreateSemaphore = GET_DEV_PROC(vk, vkCreateSemaphore); -#ifdef VK_KHR_timeline_semaphore - vk->vkSignalSemaphore = GET_DEV_PROC(vk, vkSignalSemaphoreKHR); -#endif - vk->vkDestroySemaphore = GET_DEV_PROC(vk, vkDestroySemaphore); - vk->vkCreateFence = GET_DEV_PROC(vk, vkCreateFence); - vk->vkWaitForFences = GET_DEV_PROC(vk, vkWaitForFences); - vk->vkGetFenceStatus = GET_DEV_PROC(vk, vkGetFenceStatus); - vk->vkDestroyFence = GET_DEV_PROC(vk, vkDestroyFence); - vk->vkResetFences = GET_DEV_PROC(vk, vkResetFences); - vk->vkCreateSwapchainKHR = GET_DEV_PROC(vk, vkCreateSwapchainKHR); - vk->vkDestroySwapchainKHR = GET_DEV_PROC(vk, vkDestroySwapchainKHR); - vk->vkGetSwapchainImagesKHR = GET_DEV_PROC(vk, vkGetSwapchainImagesKHR); - vk->vkAcquireNextImageKHR = GET_DEV_PROC(vk, vkAcquireNextImageKHR); - vk->vkQueuePresentKHR = GET_DEV_PROC(vk, vkQueuePresentKHR); - -#ifdef VK_USE_PLATFORM_WIN32_KHR - vk->vkImportSemaphoreWin32HandleKHR = GET_DEV_PROC(vk, vkImportSemaphoreWin32HandleKHR); - vk->vkImportFenceWin32HandleKHR = GET_DEV_PROC(vk, vkImportFenceWin32HandleKHR); -#else - vk->vkImportSemaphoreFdKHR = GET_DEV_PROC(vk, vkImportSemaphoreFdKHR); - vk->vkGetSemaphoreFdKHR = GET_DEV_PROC(vk, vkGetSemaphoreFdKHR); - - vk->vkImportFenceFdKHR = GET_DEV_PROC(vk, vkImportFenceFdKHR); - vk->vkGetFenceFdKHR = GET_DEV_PROC(vk, vkGetFenceFdKHR); -#endif +#endif // defined(VK_USE_PLATFORM_ANDROID_KHR) vk->vkGetPastPresentationTimingGOOGLE = GET_DEV_PROC(vk, vkGetPastPresentationTimingGOOGLE); - - // clang-format on + // end of GENERATED device loader code - do not modify - used by scripts return VK_SUCCESS; } diff --git a/src/xrt/auxiliary/vk/vk_helpers.h b/src/xrt/auxiliary/vk/vk_helpers.h index 5e0c1f11f..bd6cb0c20 100644 --- a/src/xrt/auxiliary/vk/vk_helpers.h +++ b/src/xrt/auxiliary/vk/vk_helpers.h @@ -62,104 +62,97 @@ struct vk_bundle struct os_mutex cmd_pool_mutex; - // clang-format off // Loader functions PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; PFN_vkCreateInstance vkCreateInstance; - // Instance functions. + // beginning of GENERATED instance loader code - do not modify - used by scripts PFN_vkDestroyInstance vkDestroyInstance; + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; PFN_vkCreateDevice vkCreateDevice; + PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; + PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; + PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; - PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; - PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; -#ifdef VK_USE_PLATFORM_DISPLAY_KHR - PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; -#endif - -#ifdef VK_USE_PLATFORM_XCB_KHR - PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; -#endif - -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; -#ifdef VK_EXT_acquire_drm_display - PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT; - PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT; -#endif -#endif - -#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT - PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT; - PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT; -#endif - -#ifdef VK_USE_PLATFORM_ANDROID_KHR - PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; -#endif - -#ifdef VK_USE_PLATFORM_WIN32_KHR - PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; -#endif - - // Physical device functions. - PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; - PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; - + PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; + PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; - PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; - + PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2; -#ifdef VK_USE_PLATFORM_DISPLAY_KHR - PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; +#if defined(VK_USE_PLATFORM_DISPLAY_KHR) + PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; + PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; - PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; + PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT; -#endif - // Device functions. - PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; +#endif // defined(VK_USE_PLATFORM_DISPLAY_KHR) + +#if defined(VK_USE_PLATFORM_XCB_KHR) + PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; + +#endif // defined(VK_USE_PLATFORM_XCB_KHR) + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; + +#endif // defined(VK_USE_PLATFORM_WAYLAND_KHR) + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) && defined(VK_EXT_acquire_drm_display) + PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT; + PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT; + +#endif // defined(VK_USE_PLATFORM_WAYLAND_KHR) && defined(VK_EXT_acquire_drm_display) + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT; + PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT; + +#endif // defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; + +#endif // defined(VK_USE_PLATFORM_ANDROID_KHR) + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; +#endif // defined(VK_USE_PLATFORM_WIN32_KHR) + // end of GENERATED instance loader code - do not modify - used by scripts + + // beginning of GENERATED device loader code - do not modify - used by scripts PFN_vkDestroyDevice vkDestroyDevice; PFN_vkDeviceWaitIdle vkDeviceWaitIdle; - PFN_vkAllocateMemory vkAllocateMemory; PFN_vkFreeMemory vkFreeMemory; PFN_vkMapMemory vkMapMemory; PFN_vkUnmapMemory vkUnmapMemory; - PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; - -#ifdef VK_USE_PLATFORM_ANDROID_KHR - PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; - PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; -#endif - -#ifdef VK_USE_PLATFORM_WIN32_KHR - PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; -#endif PFN_vkCreateBuffer vkCreateBuffer; PFN_vkDestroyBuffer vkDestroyBuffer; PFN_vkBindBufferMemory vkBindBufferMemory; - PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; - PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; PFN_vkCreateImage vkCreateImage; - PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; - PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; - PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; - PFN_vkBindImageMemory vkBindImageMemory; PFN_vkDestroyImage vkDestroyImage; + PFN_vkBindImageMemory vkBindImageMemory; + + PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; + PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; + PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; + PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; + PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; + PFN_vkCreateImageView vkCreateImageView; PFN_vkDestroyImageView vkDestroyImageView; @@ -171,6 +164,7 @@ struct vk_bundle PFN_vkCreateCommandPool vkCreateCommandPool; PFN_vkDestroyCommandPool vkDestroyCommandPool; + PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; PFN_vkBeginCommandBuffer vkBeginCommandBuffer; PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; @@ -195,20 +189,27 @@ struct vk_bundle PFN_vkCreateRenderPass vkCreateRenderPass; PFN_vkDestroyRenderPass vkDestroyRenderPass; + PFN_vkCreateFramebuffer vkCreateFramebuffer; PFN_vkDestroyFramebuffer vkDestroyFramebuffer; + PFN_vkCreatePipelineCache vkCreatePipelineCache; PFN_vkDestroyPipelineCache vkDestroyPipelineCache; + PFN_vkResetDescriptorPool vkResetDescriptorPool; PFN_vkCreateDescriptorPool vkCreateDescriptorPool; PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; + PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; PFN_vkFreeDescriptorSets vkFreeDescriptorSets; + PFN_vkCreateComputePipelines vkCreateComputePipelines; PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; PFN_vkDestroyPipeline vkDestroyPipeline; + PFN_vkCreatePipelineLayout vkCreatePipelineLayout; PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; + PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; @@ -218,9 +219,10 @@ struct vk_bundle PFN_vkQueueWaitIdle vkQueueWaitIdle; PFN_vkCreateSemaphore vkCreateSemaphore; -#ifdef VK_KHR_timeline_semaphore - PFN_vkSignalSemaphoreKHR vkSignalSemaphore; -#endif +#if defined(VK_KHR_timeline_semaphore) + PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; +#endif // defined(VK_KHR_timeline_semaphore) + PFN_vkDestroySemaphore vkDestroySemaphore; PFN_vkCreateFence vkCreateFence; @@ -235,19 +237,30 @@ struct vk_bundle PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; PFN_vkQueuePresentKHR vkQueuePresentKHR; -#ifdef VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; -#else +#endif // defined(VK_USE_PLATFORM_WIN32_KHR) + +#if !defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; + PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; PFN_vkImportFenceFdKHR vkImportFenceFdKHR; PFN_vkGetFenceFdKHR vkGetFenceFdKHR; -#endif +#endif // !defined(VK_USE_PLATFORM_WIN32_KHR) + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; + PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; + +#endif // defined(VK_USE_PLATFORM_ANDROID_KHR) PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; - // clang-format on + // end of GENERATED device loader code - do not modify - used by scripts }; struct vk_buffer diff --git a/src/xrt/auxiliary/vk/vk_image_allocator.c b/src/xrt/auxiliary/vk/vk_image_allocator.c index 1a26e4e1b..6d9ec4803 100644 --- a/src/xrt/auxiliary/vk/vk_image_allocator.c +++ b/src/xrt/auxiliary/vk/vk_image_allocator.c @@ -216,7 +216,7 @@ create_image(struct vk_bundle *vk, const struct xrt_swapchain_create_info *info, .sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, .pNext = &memory_dedicated_requirements, }; - vk->vkGetImageMemoryRequirements2(vk->device, &memory_requirements_info, &memory_requirements); + vk->vkGetImageMemoryRequirements2KHR(vk->device, &memory_requirements_info, &memory_requirements); /* on tegra we must not use dedicated allocation when it is only preferred to avoid black textures and driver * errors when blitting from opengl interop textures.