From d8c6fe42b8a6d701628658e2f2b9fd5e485c8ff7 Mon Sep 17 00:00:00 2001 From: Cody Goodson Date: Thu, 6 May 2021 01:24:19 -0500 Subject: [PATCH] Handling extensions + incorporating DispatchTable into main src - which means rewriting almost the entire script.. --- script/generate_dispatch.py | 109 +++++++++++++------- src/VkBootstrap.cpp | 10 ++ src/VkBootstrap.h | 5 + src/VkDispatchTable.h | 199 +++++++++++++++++++++++++++++++++++- 4 files changed, 286 insertions(+), 37 deletions(-) diff --git a/script/generate_dispatch.py b/script/generate_dispatch.py index 58ecb8b..fa2540a 100644 --- a/script/generate_dispatch.py +++ b/script/generate_dispatch.py @@ -1,23 +1,24 @@ #https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/master/registry/vk.xml -import urllib.request -import xmltodict - -with urllib.request.urlopen('https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/master/registry/vk.xml') as response: - vk_xml_raw = response.read() - -vk_xml = xmltodict.parse(vk_xml_raw,process_namespaces=True) - -commands = vk_xml['registry']['commands']['command'] - -device_commands = []; -device_aliases = {}; +#exclusions +exclusions = [ + 'vkGetDeviceProcAddr', + 'vkCreateDevice', + 'vkDestroyDevice' +] +#formatting functions def format_header_top(header: str): header += '\n#pragma once\n\n#include \n\n' header += 'namespace vkb {\n\n' header += 'struct DispatchTable {\n' + header += '\tDispatchTable() = default;\n' + header += '\tDispatchTable(VkDevice const& device, PFN_vkGetDeviceProcAddr const& procAddr) {\n' + return header; + +def format_header_mid(header: str): + header += '\t}\n' return header; def format_header_bottom(header: str): @@ -33,28 +34,66 @@ def format_declaration(header: str, name): header = format_declaration(header, device_aliases[name]) return header; -for command in commands: - keys = command.keys() - if 'proto' in keys and 'param' in keys: - type_device = False; - for p in command['param']: - if 'type' in p: - for t in p: - if t == 'type' and p[t] == 'VkDevice': - #only check first type - type_device = True; - break; - if type_device and command['proto']['name'] != 'vkGetDeviceProcAddr': - device_commands += [command['proto']['name']] - elif '@alias'in keys: - device_aliases[(command['@alias'])] = command['@name']; +def format_load(header: str, name): + fptr_name = 'PFN_' + name + member_name = name[2].lower() + name[3:] + header += '\t\t' + member_name + ' = (' + fptr_name + ')procAddr(device, "' + name + '");\n' + return header; -header = '' -header = format_header_top(header) -for command in device_commands: - header = format_declaration(header, command); -header = format_header_bottom(header) +#install xmltodict +import sys +import subprocess +import json -header_file = open("../src/VkDispatchTable.h", "w") -header_file.write(header) -header_file.close(); \ No newline at end of file +subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'xmltodict']) + +#fetch fresh vk.xml from Khronos repo +import urllib.request +import xmltodict + +with urllib.request.urlopen('https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/master/registry/vk.xml') as response: + vk_xml_raw = response.read() + +vk_xml = xmltodict.parse(vk_xml_raw,process_namespaces=True) + +commands = vk_xml['registry']['commands']['command'] +extensions = vk_xml['registry']['extensions']['extension'] + +device_commands = {}; + +extension_commands = {}; + +for extension in extensions: + extension_name = extension['@name'] + for key in extension.keys(): + if key == 'require': + requires = [extension[key]] + for required in requires: + if type(required) is list: + for nested_required in required: + if '@feature' in nested_required and 'command' in nested_required: + extension_commands[(extension_name, nested_required['@feature'])] = [] + commands = [nested_required['command']] + for command in commands: + if type(command) is list: + for nested_command in command: + extension_commands[(extension_name, nested_required['@feature'])] += [nested_command['@name']] + else: + extension_commands[(extension_name, nested_required['@feature'])] += [command['@name']] + elif 'command' in required: + commands = [required['command']] + +print(extension_commands) + +#header = '' +#header = format_header_top(header) +#for command in device_commands: +# header = format_load(header, command); +#header = format_header_mid(header) +#for command in device_commands: +# header = format_declaration(header, command); +#header = format_header_bottom(header) + +#header_file = open("../src/VkDispatchTable.h", "w") +#header_file.write(header) +#header_file.close(); \ No newline at end of file diff --git a/src/VkBootstrap.cpp b/src/VkBootstrap.cpp index f559f31..dfd7bdb 100644 --- a/src/VkBootstrap.cpp +++ b/src/VkBootstrap.cpp @@ -142,6 +142,7 @@ class VulkanFunctions { PFN_vkGetPhysicalDeviceFormatProperties2 fp_vkGetPhysicalDeviceFormatProperties2 = nullptr; PFN_vkGetPhysicalDeviceMemoryProperties2 fp_vkGetPhysicalDeviceMemoryProperties2 = nullptr; + PFN_vkGetDeviceProcAddr fp_vkGetDeviceProcAddr = nullptr; PFN_vkCreateDevice fp_vkCreateDevice = nullptr; PFN_vkDestroyDevice fp_vkDestroyDevice = nullptr; PFN_vkEnumerateDeviceExtensionProperties fp_vkEnumerateDeviceExtensionProperties = nullptr; @@ -189,6 +190,7 @@ class VulkanFunctions { get_proc_addr(fp_vkGetPhysicalDeviceFormatProperties2, "vkGetPhysicalDeviceFormatProperties2"); get_proc_addr(fp_vkGetPhysicalDeviceMemoryProperties2, "vkGetPhysicalDeviceMemoryProperties2"); + get_proc_addr(fp_vkGetDeviceProcAddr, "vkGetDeviceProcAddr"); get_proc_addr(fp_vkCreateDevice, "vkCreateDevice"); get_proc_addr(fp_vkDestroyDevice, "vkDestroyDevice"); get_proc_addr(fp_vkEnumerateDeviceExtensionProperties, "vkEnumerateDeviceExtensionProperties"); @@ -738,6 +740,7 @@ detail::Result InstanceBuilder::build() const { instance.allocation_callbacks = info.allocation_callbacks; instance.instance_version = api_version; instance.fp_vkGetInstanceProcAddr = detail::vulkan_functions().ptr_vkGetInstanceProcAddr; + instance.fp_vkGetDeviceProcAddr = detail::vulkan_functions().fp_vkGetDeviceProcAddr; return instance; } @@ -1305,6 +1308,12 @@ std::vector PhysicalDevice::get_queue_families() const return queue_families; } +// --- DispatchTable --- // + +DispatchTable Device::get_dispatch_table() { + return DispatchTable(device, detail::vulkan_functions().fp_vkGetDeviceProcAddr); +} + // ---- Queues ---- // detail::Result Device::get_queue_index(QueueType type) const { @@ -1474,6 +1483,7 @@ detail::Result DeviceBuilder::build() const { device.surface = physical_device.surface; device.queue_families = physical_device.queue_families; device.allocation_callbacks = info.allocation_callbacks; + device.fp_vkGetDeviceProcAddr = return device; } DeviceBuilder& DeviceBuilder::custom_queue_setup(std::vector queue_descriptions) { diff --git a/src/VkBootstrap.h b/src/VkBootstrap.h index 7c71713..88b8931 100644 --- a/src/VkBootstrap.h +++ b/src/VkBootstrap.h @@ -23,6 +23,7 @@ #include +#include "VkDispatchTable.h" namespace vkb { @@ -215,6 +216,7 @@ struct Instance { VkAllocationCallbacks* allocation_callbacks = VK_NULL_HANDLE; PFN_vkGetInstanceProcAddr fp_vkGetInstanceProcAddr = nullptr; + PFN_vkGetDeviceProcAddr fp_vkGetDeviceProcAddr = nullptr; private: bool headless = false; @@ -541,6 +543,9 @@ struct Device { VkSurfaceKHR surface = VK_NULL_HANDLE; std::vector queue_families; VkAllocationCallbacks* allocation_callbacks = VK_NULL_HANDLE; + PFN_vkGetDeviceProcAddr fp_vkGetDeviceProcAddr = nullptr; + + DispatchTable get_dispatch_table(); detail::Result get_queue_index(QueueType type) const; // Only a compute or transfer queue type is valid. All other queue types do not support a 'dedicated' queue index diff --git a/src/VkDispatchTable.h b/src/VkDispatchTable.h index 73072aa..dba9829 100644 --- a/src/VkDispatchTable.h +++ b/src/VkDispatchTable.h @@ -6,8 +6,203 @@ namespace vkb { struct DispatchTable { - PFN_vkCreateDevice createDevice = nullptr; - PFN_vkDestroyDevice destroyDevice = nullptr; + DispatchTable() = default; + DispatchTable(VkDevice const& device, PFN_vkGetDeviceProcAddr const& procAddr) { + getDeviceQueue = (PFN_vkGetDeviceQueue)procAddr(device, "vkGetDeviceQueue"); + allocateMemory = (PFN_vkAllocateMemory)procAddr(device, "vkAllocateMemory"); + freeMemory = (PFN_vkFreeMemory)procAddr(device, "vkFreeMemory"); + mapMemory = (PFN_vkMapMemory)procAddr(device, "vkMapMemory"); + unmapMemory = (PFN_vkUnmapMemory)procAddr(device, "vkUnmapMemory"); + flushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)procAddr(device, "vkFlushMappedMemoryRanges"); + invalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)procAddr(device, "vkInvalidateMappedMemoryRanges"); + getDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)procAddr(device, "vkGetDeviceMemoryCommitment"); + getBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)procAddr(device, "vkGetBufferMemoryRequirements"); + bindBufferMemory = (PFN_vkBindBufferMemory)procAddr(device, "vkBindBufferMemory"); + getImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)procAddr(device, "vkGetImageMemoryRequirements"); + bindImageMemory = (PFN_vkBindImageMemory)procAddr(device, "vkBindImageMemory"); + getImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)procAddr(device, "vkGetImageSparseMemoryRequirements"); + createFence = (PFN_vkCreateFence)procAddr(device, "vkCreateFence"); + destroyFence = (PFN_vkDestroyFence)procAddr(device, "vkDestroyFence"); + resetFences = (PFN_vkResetFences)procAddr(device, "vkResetFences"); + getFenceStatus = (PFN_vkGetFenceStatus)procAddr(device, "vkGetFenceStatus"); + waitForFences = (PFN_vkWaitForFences)procAddr(device, "vkWaitForFences"); + createSemaphore = (PFN_vkCreateSemaphore)procAddr(device, "vkCreateSemaphore"); + destroySemaphore = (PFN_vkDestroySemaphore)procAddr(device, "vkDestroySemaphore"); + createEvent = (PFN_vkCreateEvent)procAddr(device, "vkCreateEvent"); + destroyEvent = (PFN_vkDestroyEvent)procAddr(device, "vkDestroyEvent"); + getEventStatus = (PFN_vkGetEventStatus)procAddr(device, "vkGetEventStatus"); + setEvent = (PFN_vkSetEvent)procAddr(device, "vkSetEvent"); + resetEvent = (PFN_vkResetEvent)procAddr(device, "vkResetEvent"); + createQueryPool = (PFN_vkCreateQueryPool)procAddr(device, "vkCreateQueryPool"); + destroyQueryPool = (PFN_vkDestroyQueryPool)procAddr(device, "vkDestroyQueryPool"); + getQueryPoolResults = (PFN_vkGetQueryPoolResults)procAddr(device, "vkGetQueryPoolResults"); + resetQueryPool = (PFN_vkResetQueryPool)procAddr(device, "vkResetQueryPool"); + createBuffer = (PFN_vkCreateBuffer)procAddr(device, "vkCreateBuffer"); + destroyBuffer = (PFN_vkDestroyBuffer)procAddr(device, "vkDestroyBuffer"); + createBufferView = (PFN_vkCreateBufferView)procAddr(device, "vkCreateBufferView"); + destroyBufferView = (PFN_vkDestroyBufferView)procAddr(device, "vkDestroyBufferView"); + createImage = (PFN_vkCreateImage)procAddr(device, "vkCreateImage"); + destroyImage = (PFN_vkDestroyImage)procAddr(device, "vkDestroyImage"); + getImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)procAddr(device, "vkGetImageSubresourceLayout"); + createImageView = (PFN_vkCreateImageView)procAddr(device, "vkCreateImageView"); + destroyImageView = (PFN_vkDestroyImageView)procAddr(device, "vkDestroyImageView"); + createShaderModule = (PFN_vkCreateShaderModule)procAddr(device, "vkCreateShaderModule"); + destroyShaderModule = (PFN_vkDestroyShaderModule)procAddr(device, "vkDestroyShaderModule"); + createPipelineCache = (PFN_vkCreatePipelineCache)procAddr(device, "vkCreatePipelineCache"); + destroyPipelineCache = (PFN_vkDestroyPipelineCache)procAddr(device, "vkDestroyPipelineCache"); + getPipelineCacheData = (PFN_vkGetPipelineCacheData)procAddr(device, "vkGetPipelineCacheData"); + mergePipelineCaches = (PFN_vkMergePipelineCaches)procAddr(device, "vkMergePipelineCaches"); + createGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)procAddr(device, "vkCreateGraphicsPipelines"); + createComputePipelines = (PFN_vkCreateComputePipelines)procAddr(device, "vkCreateComputePipelines"); + destroyPipeline = (PFN_vkDestroyPipeline)procAddr(device, "vkDestroyPipeline"); + createPipelineLayout = (PFN_vkCreatePipelineLayout)procAddr(device, "vkCreatePipelineLayout"); + destroyPipelineLayout = (PFN_vkDestroyPipelineLayout)procAddr(device, "vkDestroyPipelineLayout"); + createSampler = (PFN_vkCreateSampler)procAddr(device, "vkCreateSampler"); + destroySampler = (PFN_vkDestroySampler)procAddr(device, "vkDestroySampler"); + createDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)procAddr(device, "vkCreateDescriptorSetLayout"); + destroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)procAddr(device, "vkDestroyDescriptorSetLayout"); + createDescriptorPool = (PFN_vkCreateDescriptorPool)procAddr(device, "vkCreateDescriptorPool"); + destroyDescriptorPool = (PFN_vkDestroyDescriptorPool)procAddr(device, "vkDestroyDescriptorPool"); + resetDescriptorPool = (PFN_vkResetDescriptorPool)procAddr(device, "vkResetDescriptorPool"); + allocateDescriptorSets = (PFN_vkAllocateDescriptorSets)procAddr(device, "vkAllocateDescriptorSets"); + freeDescriptorSets = (PFN_vkFreeDescriptorSets)procAddr(device, "vkFreeDescriptorSets"); + updateDescriptorSets = (PFN_vkUpdateDescriptorSets)procAddr(device, "vkUpdateDescriptorSets"); + createFramebuffer = (PFN_vkCreateFramebuffer)procAddr(device, "vkCreateFramebuffer"); + destroyFramebuffer = (PFN_vkDestroyFramebuffer)procAddr(device, "vkDestroyFramebuffer"); + createRenderPass = (PFN_vkCreateRenderPass)procAddr(device, "vkCreateRenderPass"); + destroyRenderPass = (PFN_vkDestroyRenderPass)procAddr(device, "vkDestroyRenderPass"); + getRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)procAddr(device, "vkGetRenderAreaGranularity"); + createCommandPool = (PFN_vkCreateCommandPool)procAddr(device, "vkCreateCommandPool"); + destroyCommandPool = (PFN_vkDestroyCommandPool)procAddr(device, "vkDestroyCommandPool"); + resetCommandPool = (PFN_vkResetCommandPool)procAddr(device, "vkResetCommandPool"); + allocateCommandBuffers = (PFN_vkAllocateCommandBuffers)procAddr(device, "vkAllocateCommandBuffers"); + freeCommandBuffers = (PFN_vkFreeCommandBuffers)procAddr(device, "vkFreeCommandBuffers"); + createSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)procAddr(device, "vkCreateSharedSwapchainsKHR"); + createSwapchainKHR = (PFN_vkCreateSwapchainKHR)procAddr(device, "vkCreateSwapchainKHR"); + destroySwapchainKHR = (PFN_vkDestroySwapchainKHR)procAddr(device, "vkDestroySwapchainKHR"); + getSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)procAddr(device, "vkGetSwapchainImagesKHR"); + acquireNextImageKHR = (PFN_vkAcquireNextImageKHR)procAddr(device, "vkAcquireNextImageKHR"); + debugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)procAddr(device, "vkDebugMarkerSetObjectNameEXT"); + debugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)procAddr(device, "vkDebugMarkerSetObjectTagEXT"); + getMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)procAddr(device, "vkGetMemoryWin32HandleNV"); + getGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)procAddr(device, "vkGetGeneratedCommandsMemoryRequirementsNV"); + createIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)procAddr(device, "vkCreateIndirectCommandsLayoutNV"); + destroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)procAddr(device, "vkDestroyIndirectCommandsLayoutNV"); + trimCommandPool = (PFN_vkTrimCommandPool)procAddr(device, "vkTrimCommandPool"); + getMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)procAddr(device, "vkGetMemoryWin32HandleKHR"); + getMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)procAddr(device, "vkGetMemoryWin32HandlePropertiesKHR"); + getMemoryFdKHR = (PFN_vkGetMemoryFdKHR)procAddr(device, "vkGetMemoryFdKHR"); + getMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)procAddr(device, "vkGetMemoryFdPropertiesKHR"); + getMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)procAddr(device, "vkGetMemoryZirconHandleFUCHSIA"); + getMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)procAddr(device, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); + getSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)procAddr(device, "vkGetSemaphoreWin32HandleKHR"); + importSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)procAddr(device, "vkImportSemaphoreWin32HandleKHR"); + getSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)procAddr(device, "vkGetSemaphoreFdKHR"); + importSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)procAddr(device, "vkImportSemaphoreFdKHR"); + getSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)procAddr(device, "vkGetSemaphoreZirconHandleFUCHSIA"); + importSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)procAddr(device, "vkImportSemaphoreZirconHandleFUCHSIA"); + getFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)procAddr(device, "vkGetFenceWin32HandleKHR"); + importFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)procAddr(device, "vkImportFenceWin32HandleKHR"); + getFenceFdKHR = (PFN_vkGetFenceFdKHR)procAddr(device, "vkGetFenceFdKHR"); + importFenceFdKHR = (PFN_vkImportFenceFdKHR)procAddr(device, "vkImportFenceFdKHR"); + displayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)procAddr(device, "vkDisplayPowerControlEXT"); + registerDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)procAddr(device, "vkRegisterDeviceEventEXT"); + registerDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)procAddr(device, "vkRegisterDisplayEventEXT"); + getSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)procAddr(device, "vkGetSwapchainCounterEXT"); + getDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)procAddr(device, "vkGetDeviceGroupPeerMemoryFeatures"); + bindBufferMemory2 = (PFN_vkBindBufferMemory2)procAddr(device, "vkBindBufferMemory2"); + bindImageMemory2 = (PFN_vkBindImageMemory2)procAddr(device, "vkBindImageMemory2"); + getDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)procAddr(device, "vkGetDeviceGroupPresentCapabilitiesKHR"); + getDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)procAddr(device, "vkGetDeviceGroupSurfacePresentModesKHR"); + acquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)procAddr(device, "vkAcquireNextImage2KHR"); + createDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)procAddr(device, "vkCreateDescriptorUpdateTemplate"); + destroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)procAddr(device, "vkDestroyDescriptorUpdateTemplate"); + updateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)procAddr(device, "vkUpdateDescriptorSetWithTemplate"); + setHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)procAddr(device, "vkSetHdrMetadataEXT"); + getSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)procAddr(device, "vkGetSwapchainStatusKHR"); + getRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)procAddr(device, "vkGetRefreshCycleDurationGOOGLE"); + getPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)procAddr(device, "vkGetPastPresentationTimingGOOGLE"); + getBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)procAddr(device, "vkGetBufferMemoryRequirements2"); + getImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)procAddr(device, "vkGetImageMemoryRequirements2"); + getImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)procAddr(device, "vkGetImageSparseMemoryRequirements2"); + createSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)procAddr(device, "vkCreateSamplerYcbcrConversion"); + destroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)procAddr(device, "vkDestroySamplerYcbcrConversion"); + getDeviceQueue2 = (PFN_vkGetDeviceQueue2)procAddr(device, "vkGetDeviceQueue2"); + createValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)procAddr(device, "vkCreateValidationCacheEXT"); + destroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)procAddr(device, "vkDestroyValidationCacheEXT"); + getValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)procAddr(device, "vkGetValidationCacheDataEXT"); + mergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)procAddr(device, "vkMergeValidationCachesEXT"); + getDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)procAddr(device, "vkGetDescriptorSetLayoutSupport"); + getSwapchainGrallocUsageANDROID = (PFN_vkGetSwapchainGrallocUsageANDROID)procAddr(device, "vkGetSwapchainGrallocUsageANDROID"); + getSwapchainGrallocUsage2ANDROID = (PFN_vkGetSwapchainGrallocUsage2ANDROID)procAddr(device, "vkGetSwapchainGrallocUsage2ANDROID"); + acquireImageANDROID = (PFN_vkAcquireImageANDROID)procAddr(device, "vkAcquireImageANDROID"); + getShaderInfoAMD = (PFN_vkGetShaderInfoAMD)procAddr(device, "vkGetShaderInfoAMD"); + setLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)procAddr(device, "vkSetLocalDimmingAMD"); + getCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)procAddr(device, "vkGetCalibratedTimestampsEXT"); + setDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)procAddr(device, "vkSetDebugUtilsObjectNameEXT"); + setDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)procAddr(device, "vkSetDebugUtilsObjectTagEXT"); + getMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)procAddr(device, "vkGetMemoryHostPointerPropertiesEXT"); + createRenderPass2 = (PFN_vkCreateRenderPass2)procAddr(device, "vkCreateRenderPass2"); + getSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)procAddr(device, "vkGetSemaphoreCounterValue"); + waitSemaphores = (PFN_vkWaitSemaphores)procAddr(device, "vkWaitSemaphores"); + signalSemaphore = (PFN_vkSignalSemaphore)procAddr(device, "vkSignalSemaphore"); + getAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)procAddr(device, "vkGetAndroidHardwareBufferPropertiesANDROID"); + getMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)procAddr(device, "vkGetMemoryAndroidHardwareBufferANDROID"); + compileDeferredNV = (PFN_vkCompileDeferredNV)procAddr(device, "vkCompileDeferredNV"); + createAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)procAddr(device, "vkCreateAccelerationStructureNV"); + destroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)procAddr(device, "vkDestroyAccelerationStructureKHR"); + destroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)procAddr(device, "vkDestroyAccelerationStructureNV"); + getAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)procAddr(device, "vkGetAccelerationStructureMemoryRequirementsNV"); + bindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)procAddr(device, "vkBindAccelerationStructureMemoryNV"); + copyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)procAddr(device, "vkCopyAccelerationStructureKHR"); + copyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)procAddr(device, "vkCopyAccelerationStructureToMemoryKHR"); + copyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)procAddr(device, "vkCopyMemoryToAccelerationStructureKHR"); + writeAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)procAddr(device, "vkWriteAccelerationStructuresPropertiesKHR"); + getRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)procAddr(device, "vkGetRayTracingShaderGroupHandlesKHR"); + getRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)procAddr(device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); + getAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)procAddr(device, "vkGetAccelerationStructureHandleNV"); + createRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)procAddr(device, "vkCreateRayTracingPipelinesNV"); + createRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)procAddr(device, "vkCreateRayTracingPipelinesKHR"); + getDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)procAddr(device, "vkGetDeviceAccelerationStructureCompatibilityKHR"); + getRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)procAddr(device, "vkGetRayTracingShaderGroupStackSizeKHR"); + getImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)procAddr(device, "vkGetImageViewHandleNVX"); + getImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)procAddr(device, "vkGetImageViewAddressNVX"); + getDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)procAddr(device, "vkGetDeviceGroupSurfacePresentModes2EXT"); + acquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)procAddr(device, "vkAcquireFullScreenExclusiveModeEXT"); + releaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)procAddr(device, "vkReleaseFullScreenExclusiveModeEXT"); + acquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)procAddr(device, "vkAcquireProfilingLockKHR"); + getImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)procAddr(device, "vkGetImageDrmFormatModifierPropertiesEXT"); + getBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)procAddr(device, "vkGetBufferOpaqueCaptureAddress"); + getBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)procAddr(device, "vkGetBufferDeviceAddress"); + initializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)procAddr(device, "vkInitializePerformanceApiINTEL"); + acquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)procAddr(device, "vkAcquirePerformanceConfigurationINTEL"); + releasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)procAddr(device, "vkReleasePerformanceConfigurationINTEL"); + getPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)procAddr(device, "vkGetPerformanceParameterINTEL"); + getDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)procAddr(device, "vkGetDeviceMemoryOpaqueCaptureAddress"); + getPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)procAddr(device, "vkGetPipelineExecutablePropertiesKHR"); + getPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)procAddr(device, "vkGetPipelineExecutableStatisticsKHR"); + getPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)procAddr(device, "vkGetPipelineExecutableInternalRepresentationsKHR"); + createAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)procAddr(device, "vkCreateAccelerationStructureKHR"); + buildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)procAddr(device, "vkBuildAccelerationStructuresKHR"); + getAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)procAddr(device, "vkGetAccelerationStructureDeviceAddressKHR"); + createDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)procAddr(device, "vkCreateDeferredOperationKHR"); + destroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)procAddr(device, "vkDestroyDeferredOperationKHR"); + getDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)procAddr(device, "vkGetDeferredOperationMaxConcurrencyKHR"); + getDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)procAddr(device, "vkGetDeferredOperationResultKHR"); + deferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)procAddr(device, "vkDeferredOperationJoinKHR"); + createPrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)procAddr(device, "vkCreatePrivateDataSlotEXT"); + destroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)procAddr(device, "vkDestroyPrivateDataSlotEXT"); + setPrivateDataEXT = (PFN_vkSetPrivateDataEXT)procAddr(device, "vkSetPrivateDataEXT"); + getPrivateDataEXT = (PFN_vkGetPrivateDataEXT)procAddr(device, "vkGetPrivateDataEXT"); + getAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)procAddr(device, "vkGetAccelerationStructureBuildSizesKHR"); + createVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)procAddr(device, "vkCreateVideoSessionKHR"); + destroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)procAddr(device, "vkDestroyVideoSessionKHR"); + createVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)procAddr(device, "vkCreateVideoSessionParametersKHR"); + updateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)procAddr(device, "vkUpdateVideoSessionParametersKHR"); + destroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)procAddr(device, "vkDestroyVideoSessionParametersKHR"); + getVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)procAddr(device, "vkGetVideoSessionMemoryRequirementsKHR"); + bindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)procAddr(device, "vkBindVideoSessionMemoryKHR"); + } PFN_vkGetDeviceQueue getDeviceQueue = nullptr; PFN_vkAllocateMemory allocateMemory = nullptr; PFN_vkFreeMemory freeMemory = nullptr;