Hello community, here is the log from the commit of package vulkan-tools for openSUSE:Factory checked in at 2020-04-27 23:30:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/vulkan-tools (Old) and /work/SRC/openSUSE:Factory/.vulkan-tools.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "vulkan-tools" Mon Apr 27 23:30:58 2020 rev:18 rq:795770 version:1.2.137 Changes: -------- --- /work/SRC/openSUSE:Factory/vulkan-tools/vulkan-tools.changes 2020-04-14 15:19:32.956668897 +0200 +++ /work/SRC/openSUSE:Factory/.vulkan-tools.new.2738/vulkan-tools.changes 2020-04-27 23:31:10.962680531 +0200 @@ -1,0 +2,8 @@ +Mon Apr 20 10:32:57 UTC 2020 - Jan Engelhardt <jeng...@inai.de> + +- Update to release 1.2.137 + * vulkaninfo: Fix lack of display throwing on linux + * cube: Pick non-SRGB surface formats first + * vulkaninfo: fix app bundle not finding loader + +------------------------------------------------------------------- Old: ---- v1.2.135.tar.gz New: ---- v1.2.137.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ vulkan-tools.spec ++++++ --- /var/tmp/diff_new_pack.yoDAzA/_old 2020-04-27 23:31:11.510681601 +0200 +++ /var/tmp/diff_new_pack.yoDAzA/_new 2020-04-27 23:31:11.518681617 +0200 @@ -17,7 +17,7 @@ Name: vulkan-tools -Version: 1.2.135 +Version: 1.2.137 Release: 0 Summary: Diagnostic utilities for Vulkan License: Apache-2.0 @@ -27,7 +27,7 @@ Source: https://github.com/KhronosGroup/Vulkan-Tools/archive/v%version.tar.gz BuildRequires: cmake >= 3.4 BuildRequires: gcc-c++ >= 4.8 -BuildRequires: glslang-devel >= 7.13.3496 +BuildRequires: glslang-devel >= 8.13.3727 BuildRequires: pkg-config BuildRequires: python3-base BuildRequires: pkgconfig(vulkan) >= %version ++++++ v1.2.135.tar.gz -> v1.2.137.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/CONTRIBUTING.md new/Vulkan-Tools-1.2.137/CONTRIBUTING.md --- old/Vulkan-Tools-1.2.135/CONTRIBUTING.md 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/CONTRIBUTING.md 2020-04-13 20:45:36.000000000 +0200 @@ -40,7 +40,7 @@ * There are `.clang-format` files present in the repository to define clang-format settings which are found and used automatically by clang-format. * **clang-format** binaries are available from the LLVM orginization, here: [LLVM](https://clang.llvm.org/). Our CI system (Travis-CI) - currently uses clang-format version 5.0.0 to check that the lines of code you have changed are formatted properly. It is + currently uses clang-format version 7.0.0 to check that the lines of code you have changed are formatted properly. It is recommended that you use the same version to format your code prior to submission. * A sample git workflow may look like: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/build-android/vulkan-headers_revision_android new/Vulkan-Tools-1.2.137/build-android/vulkan-headers_revision_android --- old/Vulkan-Tools-1.2.135/build-android/vulkan-headers_revision_android 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/build-android/vulkan-headers_revision_android 2020-04-13 20:45:36.000000000 +0200 @@ -1 +1 @@ -v1.2.135 \ No newline at end of file +v1.2.137 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/cube/cube.c new/Vulkan-Tools-1.2.137/cube/cube.c --- old/Vulkan-Tools-1.2.135/cube/cube.c 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/cube/cube.c 2020-04-13 20:45:36.000000000 +0200 @@ -3412,6 +3412,24 @@ assert(!err); } +static VkSurfaceFormatKHR pick_surface_format(const VkSurfaceFormatKHR *surfaceFormats, uint32_t count) { + // Prefer non-SRGB formats... + for (uint32_t i = 0; i < count; i++) { + const VkFormat format = surfaceFormats[i].format; + + if (format == VK_FORMAT_R8G8B8A8_UNORM || format == VK_FORMAT_B8G8R8A8_UNORM || + format == VK_FORMAT_A2B10G10R10_UNORM_PACK32 || format == VK_FORMAT_A2R10G10B10_UNORM_PACK32 || + format == VK_FORMAT_R16G16B16A16_SFLOAT) { + return surfaceFormats[i]; + } + } + + printf("Can't find our preferred formats... Falling back to first exposed format. Rendering may be incorrect.\n"); + + assert(count >= 1); + return surfaceFormats[0]; +} + static void demo_init_vk_swapchain(struct demo *demo) { VkResult U_ASSERT_ONLY err; @@ -3489,16 +3507,9 @@ VkSurfaceFormatKHR *surfFormats = (VkSurfaceFormatKHR *)malloc(formatCount * sizeof(VkSurfaceFormatKHR)); err = demo->fpGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, &formatCount, surfFormats); assert(!err); - // If the format list includes just one entry of VK_FORMAT_UNDEFINED, - // the surface has no preferred format. Otherwise, at least one - // supported format will be returned. - if (formatCount == 1 && surfFormats[0].format == VK_FORMAT_UNDEFINED) { - demo->format = VK_FORMAT_B8G8R8A8_UNORM; - } else { - assert(formatCount >= 1); - demo->format = surfFormats[0].format; - } - demo->color_space = surfFormats[0].colorSpace; + VkSurfaceFormatKHR surfaceFormat = pick_surface_format(surfFormats, formatCount); + demo->format = surfaceFormat.format; + demo->color_space = surfaceFormat.colorSpace; free(surfFormats); demo->quit = false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/cube/cube.cpp new/Vulkan-Tools-1.2.137/cube/cube.cpp --- old/Vulkan-Tools-1.2.135/cube/cube.cpp 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/cube/cube.cpp 2020-04-13 20:45:36.000000000 +0200 @@ -34,7 +34,6 @@ #include <sstream> #include <memory> -#define VULKAN_HPP_NO_SMART_HANDLE #define VULKAN_HPP_NO_EXCEPTIONS #define VULKAN_HPP_TYPESAFE_CONVERSION #include <vulkan/vulkan.hpp> @@ -2064,7 +2063,6 @@ VERIFY(result == vk::Result::eSuccess); vk::SubresourceLayout layout; - memset(&layout, 0, sizeof(layout)); layout.rowPitch = tex_width * 4; auto data = device.mapMemory(tex_obj->mem, 0, tex_obj->mem_alloc.allocationSize); VERIFY(data.result == vk::Result::eSuccess); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/icd/generated/mock_icd.cpp new/Vulkan-Tools-1.2.137/icd/generated/mock_icd.cpp --- old/Vulkan-Tools-1.2.135/icd/generated/mock_icd.cpp 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/icd/generated/mock_icd.cpp 2020-04-13 20:45:36.000000000 +0200 @@ -21,6 +21,7 @@ #include "mock_icd.h" #include <stdlib.h> +#include <algorithm> #include <vector> #include "vk_typemap_helper.h" namespace vkmock { @@ -31,10 +32,16 @@ // Map device memory handle to any mapped allocations that we'll need to free on unmap static unordered_map<VkDeviceMemory, std::vector<void*>> mapped_memory_map; -static VkPhysicalDevice physical_device = nullptr; +// Map device memory allocation handle to the size +static unordered_map<VkDeviceMemory, VkDeviceSize> allocated_memory_size_map; + +static VkPhysicalDevice physical_device = (VkPhysicalDevice)CreateDispObjHandle(); static unordered_map<VkDevice, unordered_map<uint32_t, unordered_map<uint32_t, VkQueue>>> queue_map; static unordered_map<VkDevice, unordered_map<VkBuffer, VkBufferCreateInfo>> buffer_map; +static constexpr uint32_t icd_swapchain_image_count = 1; +static std::unordered_map<VkSwapchainKHR, VkImage[icd_swapchain_image_count]> swapchain_image_map; + // TODO: Would like to codegen this but limits aren't in XML static VkPhysicalDeviceLimits SetLimits(VkPhysicalDeviceLimits *limits) { limits->maxImageDimension1D = 4096; @@ -186,9 +193,6 @@ const VkAllocationCallbacks* pAllocator) { - // Destroy physical device - DestroyDispObjHandle((void*)physical_device); - DestroyDispObjHandle((void*)instance); } @@ -198,9 +202,6 @@ VkPhysicalDevice* pPhysicalDevices) { if (pPhysicalDevices) { - if (!physical_device) { - physical_device = (VkPhysicalDevice)CreateDispObjHandle(); - } *pPhysicalDevices = physical_device; } else { *pPhysicalDeviceCount = 1; @@ -488,6 +489,7 @@ VkDeviceMemory* pMemory) { unique_lock_t lock(global_lock); + allocated_memory_size_map[(VkDeviceMemory)global_unique_handle] = pAllocateInfo->allocationSize; *pMemory = (VkDeviceMemory)global_unique_handle++; return VK_SUCCESS; } @@ -498,6 +500,7 @@ const VkAllocationCallbacks* pAllocator) { //Destroy object + allocated_memory_size_map.erase(memory); } static VKAPI_ATTR VkResult VKAPI_CALL MapMemory( @@ -509,9 +512,12 @@ void** ppData) { unique_lock_t lock(global_lock); - // TODO: Just hard-coding 64k whole size for now - if (VK_WHOLE_SIZE == size) - size = 0x10000; + if (VK_WHOLE_SIZE == size) { + if (allocated_memory_size_map.count(memory) != 0) + size = allocated_memory_size_map[memory] - offset; + else + size = 0x10000; + } void* map_addr = malloc((size_t)size); mapped_memory_map[memory].push_back(map_addr); *ppData = map_addr; @@ -846,7 +852,7 @@ const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) { - // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure. + // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure. *pLayout = VkSubresourceLayout(); // Default constructor zero values. } @@ -2122,6 +2128,9 @@ { unique_lock_t lock(global_lock); *pSwapchain = (VkSwapchainKHR)global_unique_handle++; + for(uint32_t i = 0; i < icd_swapchain_image_count; ++i){ + swapchain_image_map[*pSwapchain][i] = (VkImage)global_unique_handle++; + } return VK_SUCCESS; } @@ -2130,7 +2139,8 @@ VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) { -//Destroy object + unique_lock_t lock(global_lock); + swapchain_image_map.clear(); } static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR( @@ -2140,12 +2150,15 @@ VkImage* pSwapchainImages) { if (!pSwapchainImages) { - *pSwapchainImageCount = 1; - } else if (*pSwapchainImageCount > 0) { - pSwapchainImages[0] = (VkImage)global_unique_handle++; - if (*pSwapchainImageCount != 1) { - return VK_INCOMPLETE; + *pSwapchainImageCount = icd_swapchain_image_count; + } else { + unique_lock_t lock(global_lock); + for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_swapchain_image_count); ++img_i){ + pSwapchainImages[img_i] = swapchain_image_map.at(swapchain)[img_i]; } + + if (*pSwapchainImageCount < icd_swapchain_image_count) return VK_INCOMPLETE; + else if (*pSwapchainImageCount > icd_swapchain_image_count) *pSwapchainImageCount = icd_swapchain_image_count; } return VK_SUCCESS; } @@ -2158,7 +2171,7 @@ VkFence fence, uint32_t* pImageIndex) { -//Not a CREATE or DESTROY function + *pImageIndex = 0; return VK_SUCCESS; } @@ -2202,7 +2215,7 @@ const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex) { -//Not a CREATE or DESTROY function + *pImageIndex = 0; return VK_SUCCESS; } @@ -3327,6 +3340,15 @@ return VK_SUCCESS; } +static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewAddressNVX( + VkDevice device, + VkImageView imageView, + VkImageViewAddressPropertiesNVX* pProperties) +{ +//Not a CREATE or DESTROY function + return VK_SUCCESS; +} + static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD( VkCommandBuffer commandBuffer, @@ -4416,6 +4438,7 @@ + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/icd/generated/mock_icd.h new/Vulkan-Tools-1.2.137/icd/generated/mock_icd.h --- old/Vulkan-Tools-1.2.135/icd/generated/mock_icd.h 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/icd/generated/mock_icd.h 2020-04-13 20:45:36.000000000 +0200 @@ -75,7 +75,7 @@ {"VK_KHR_get_display_properties2", 1}, {"VK_MVK_ios_surface", 2}, {"VK_MVK_macos_surface", 2}, - {"VK_EXT_debug_utils", 1}, + {"VK_EXT_debug_utils", 2}, {"VK_FUCHSIA_imagepipe_surface", 1}, {"VK_EXT_metal_surface", 1}, {"VK_KHR_surface_protected_capabilities", 1}, @@ -97,7 +97,7 @@ {"VK_AMD_gcn_shader", 1}, {"VK_NV_dedicated_allocation", 1}, {"VK_EXT_transform_feedback", 1}, - {"VK_NVX_image_view_handle", 1}, + {"VK_NVX_image_view_handle", 2}, {"VK_AMD_draw_indirect_count", 2}, {"VK_AMD_negative_viewport_height", 1}, {"VK_AMD_gpu_shader_half_float", 2}, @@ -250,8 +250,9 @@ {"VK_GOOGLE_user_type", 1}, {"VK_KHR_pipeline_library", 1}, {"VK_KHR_shader_non_semantic_info", 1}, - {"VK_EXT_pipeline_creation_cache_control", 2}, + {"VK_EXT_pipeline_creation_cache_control", 3}, {"VK_NV_device_diagnostics_config", 1}, + {"VK_QCOM_render_pass_store_ops", 2}, }; @@ -2006,6 +2007,11 @@ VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewAddressNVX( + VkDevice device, + VkImageView imageView, + VkImageViewAddressPropertiesNVX* pProperties); + static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD( VkCommandBuffer commandBuffer, @@ -2721,6 +2727,7 @@ + #ifdef VK_ENABLE_BETA_EXTENSIONS static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR( @@ -3167,6 +3174,7 @@ {"vkCmdEndQueryIndexedEXT", (void*)CmdEndQueryIndexedEXT}, {"vkCmdDrawIndirectByteCountEXT", (void*)CmdDrawIndirectByteCountEXT}, {"vkGetImageViewHandleNVX", (void*)GetImageViewHandleNVX}, + {"vkGetImageViewAddressNVX", (void*)GetImageViewAddressNVX}, {"vkCmdDrawIndirectCountAMD", (void*)CmdDrawIndirectCountAMD}, {"vkCmdDrawIndexedIndirectCountAMD", (void*)CmdDrawIndexedIndirectCountAMD}, {"vkGetShaderInfoAMD", (void*)GetShaderInfoAMD}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/icd/generated/vk_typemap_helper.h new/Vulkan-Tools-1.2.137/icd/generated/vk_typemap_helper.h --- old/Vulkan-Tools-1.2.135/icd/generated/vk_typemap_helper.h 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/icd/generated/vk_typemap_helper.h 2020-04-13 20:45:36.000000000 +0200 @@ -2210,6 +2210,15 @@ typedef VkImageViewHandleInfoNVX Type; }; +// Map type VkImageViewAddressPropertiesNVX to id VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX +template <> struct LvlTypeMap<VkImageViewAddressPropertiesNVX> { + static const VkStructureType kSType = VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX; +}; + +template <> struct LvlSTypeMap<VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX> { + typedef VkImageViewAddressPropertiesNVX Type; +}; + // Map type VkTextureLODGatherFormatPropertiesAMD to id VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD template <> struct LvlTypeMap<VkTextureLODGatherFormatPropertiesAMD> { static const VkStructureType kSType = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD; @@ -3237,12 +3246,12 @@ typedef VkInitializePerformanceApiInfoINTEL Type; }; -// Map type VkQueryPoolPerformanceQueryCreateInfoINTEL to id VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL +// Map type VkQueryPoolPerformanceQueryCreateInfoINTEL to id VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL template <> struct LvlTypeMap<VkQueryPoolPerformanceQueryCreateInfoINTEL> { - static const VkStructureType kSType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL; + static const VkStructureType kSType = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL; }; -template <> struct LvlSTypeMap<VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL> { +template <> struct LvlSTypeMap<VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL> { typedef VkQueryPoolPerformanceQueryCreateInfoINTEL Type; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/scripts/check_code_format.sh new/Vulkan-Tools-1.2.137/scripts/check_code_format.sh --- old/Vulkan-Tools-1.2.135/scripts/check_code_format.sh 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/scripts/check_code_format.sh 2020-04-13 20:45:36.000000000 +0200 @@ -22,6 +22,8 @@ GREEN='\033[0;32m' NC='\033[0m' # No Color +clang-format --version + FILES_TO_CHECK=$(git diff --name-only master | grep -v -E "^include/vulkan" | grep -E ".*\.(cpp|cc|c\+\+|cxx|c|h|hpp)$") if [ -z "${FILES_TO_CHECK}" ]; then @@ -37,5 +39,7 @@ else echo -e "${RED}Found formatting errors!${NC}" echo "${FORMAT_DIFF}" + echo "Be sure you are using the following version of clang-format:" + clang-format --version exit 1 fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/scripts/known_good.json new/Vulkan-Tools-1.2.137/scripts/known_good.json --- old/Vulkan-Tools-1.2.135/scripts/known_good.json 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/scripts/known_good.json 2020-04-13 20:45:36.000000000 +0200 @@ -6,7 +6,7 @@ "sub_dir" : "glslang", "build_dir" : "glslang/build", "install_dir" : "glslang/build/install", - "commit" : "4fc7a33910fb8e40b970d160e1b38ab3f67fe0f3", + "commit" : "e157435c1e777aa1052f446dafed162b4a722e03", "prebuild" : [ "python update_glslang_sources.py" ] @@ -17,7 +17,7 @@ "sub_dir" : "Vulkan-Headers", "build_dir" : "Vulkan-Headers/build", "install_dir" : "Vulkan-Headers/build/install", - "commit" : "v1.2.135" + "commit" : "v1.2.137" }, { "name" : "MoltenVK", @@ -25,7 +25,7 @@ "sub_dir" : "MoltenVK", "build_dir" : "MoltenVK", "install_dir" : "MoltenVK", - "commit" : "v1.0.40", + "commit" : "v1.0.41", "custom_build" : [ "./fetchDependencies --glslang-root {0[glslang][repo_dir]}", "xcodebuild -project MoltenVKPackaging.xcodeproj GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS MVK_CONFIG_LOG_LEVEL=1' -scheme \"MoltenVK Package\" build" @@ -41,7 +41,7 @@ "sub_dir" : "Vulkan-Loader", "build_dir" : "Vulkan-Loader/build", "install_dir" : "Vulkan-Loader/build/install", - "commit" : "v1.2.135", + "commit" : "v1.2.137", "deps" : [ { "var_name" : "VULKAN_HEADERS_INSTALL_DIR", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/scripts/mock_icd_generator.py new/Vulkan-Tools-1.2.137/scripts/mock_icd_generator.py --- old/Vulkan-Tools-1.2.135/scripts/mock_icd_generator.py 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/scripts/mock_icd_generator.py 2020-04-13 20:45:36.000000000 +0200 @@ -57,10 +57,16 @@ // Map device memory handle to any mapped allocations that we'll need to free on unmap static unordered_map<VkDeviceMemory, std::vector<void*>> mapped_memory_map; -static VkPhysicalDevice physical_device = nullptr; +// Map device memory allocation handle to the size +static unordered_map<VkDeviceMemory, VkDeviceSize> allocated_memory_size_map; + +static VkPhysicalDevice physical_device = (VkPhysicalDevice)CreateDispObjHandle(); static unordered_map<VkDevice, unordered_map<uint32_t, unordered_map<uint32_t, VkQueue>>> queue_map; static unordered_map<VkDevice, unordered_map<VkBuffer, VkBufferCreateInfo>> buffer_map; +static constexpr uint32_t icd_swapchain_image_count = 1; +static std::unordered_map<VkSwapchainKHR, VkImage[icd_swapchain_image_count]> swapchain_image_map; + // TODO: Would like to codegen this but limits aren't in XML static VkPhysicalDeviceLimits SetLimits(VkPhysicalDeviceLimits *limits) { limits->maxImageDimension1D = 4096; @@ -425,16 +431,10 @@ return VK_SUCCESS; ''', 'vkDestroyInstance': ''' - // Destroy physical device - DestroyDispObjHandle((void*)physical_device); - DestroyDispObjHandle((void*)instance); ''', 'vkEnumeratePhysicalDevices': ''' if (pPhysicalDevices) { - if (!physical_device) { - physical_device = (VkPhysicalDevice)CreateDispObjHandle(); - } *pPhysicalDevices = physical_device; } else { *pPhysicalDeviceCount = 1; @@ -860,9 +860,12 @@ ''', 'vkMapMemory': ''' unique_lock_t lock(global_lock); - // TODO: Just hard-coding 64k whole size for now - if (VK_WHOLE_SIZE == size) - size = 0x10000; + if (VK_WHOLE_SIZE == size) { + if (allocated_memory_size_map.count(memory) != 0) + size = allocated_memory_size_map[memory] - offset; + else + size = 0x10000; + } void* map_addr = malloc((size_t)size); mapped_memory_map[memory].push_back(map_addr); *ppData = map_addr; @@ -876,21 +879,40 @@ mapped_memory_map.erase(memory); ''', 'vkGetImageSubresourceLayout': ''' - // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure. + // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure. *pLayout = VkSubresourceLayout(); // Default constructor zero values. ''', +'vkCreateSwapchainKHR': ''' + unique_lock_t lock(global_lock); + *pSwapchain = (VkSwapchainKHR)global_unique_handle++; + for(uint32_t i = 0; i < icd_swapchain_image_count; ++i){ + swapchain_image_map[*pSwapchain][i] = (VkImage)global_unique_handle++; + } + return VK_SUCCESS; +''', +'vkDestroySwapchainKHR': ''' + unique_lock_t lock(global_lock); + swapchain_image_map.clear(); +''', 'vkGetSwapchainImagesKHR': ''' if (!pSwapchainImages) { - *pSwapchainImageCount = 1; - } else if (*pSwapchainImageCount > 0) { - pSwapchainImages[0] = (VkImage)global_unique_handle++; - if (*pSwapchainImageCount != 1) { - return VK_INCOMPLETE; + *pSwapchainImageCount = icd_swapchain_image_count; + } else { + unique_lock_t lock(global_lock); + for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_swapchain_image_count); ++img_i){ + pSwapchainImages[img_i] = swapchain_image_map.at(swapchain)[img_i]; } + + if (*pSwapchainImageCount < icd_swapchain_image_count) return VK_INCOMPLETE; + else if (*pSwapchainImageCount > icd_swapchain_image_count) *pSwapchainImageCount = icd_swapchain_image_count; } return VK_SUCCESS; ''', -'vkAcquireNextImagesKHR': ''' +'vkAcquireNextImageKHR': ''' + *pImageIndex = 0; + return VK_SUCCESS; +''', +'vkAcquireNextImage2KHR': ''' *pImageIndex = 0; return VK_SUCCESS; ''', @@ -1070,6 +1092,7 @@ else: write('#include "mock_icd.h"', file=self.outFile) write('#include <stdlib.h>', file=self.outFile) + write('#include <algorithm>', file=self.outFile) write('#include <vector>', file=self.outFile) write('#include "vk_typemap_helper.h"', file=self.outFile) @@ -1299,9 +1322,15 @@ self.appendSection('command', ' }') else: #print("Single %s last param is '%s' w/ type '%s'" % (handle_type, lp_txt, lp_type)) + if 'AllocateMemory' in api_function_name: + # Store allocation size in case it's mapped + self.appendSection('command', ' allocated_memory_size_map[(VkDeviceMemory)global_unique_handle] = pAllocateInfo->allocationSize;') self.appendSection('command', ' *%s = (%s)%s;' % (lp_txt, lp_type, allocator_txt)) elif True in [ftxt in api_function_name for ftxt in ['Destroy', 'Free']]: self.appendSection('command', '//Destroy object') + if 'FreeMemory' in api_function_name: + # Remove from allocation map + self.appendSection('command', ' allocated_memory_size_map.erase(memory);') else: self.appendSection('command', '//Not a CREATE or DESTROY function') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/vulkaninfo/CMakeLists.txt new/Vulkan-Tools-1.2.137/vulkaninfo/CMakeLists.txt --- old/Vulkan-Tools-1.2.135/vulkaninfo/CMakeLists.txt 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/vulkaninfo/CMakeLists.txt 2020-04-13 20:45:36.000000000 +0200 @@ -124,7 +124,7 @@ file(COPY vulkaninfo.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/vulkaninfo) elseif(APPLE) - add_definitions(-DVK_USE_PLATFORM_MACOS_MVK -DVK_USE_PLATFORM_METAL_EXT -DVK_NO_PROTOTYPES) + add_definitions(-DVK_USE_PLATFORM_MACOS_MVK -DVK_USE_PLATFORM_METAL_EXT) endif() if(APPLE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/vulkaninfo/generated/vulkaninfo.hpp new/Vulkan-Tools-1.2.137/vulkaninfo/generated/vulkaninfo.hpp --- old/Vulkan-Tools-1.2.135/vulkaninfo/generated/vulkaninfo.hpp 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/vulkaninfo/generated/vulkaninfo.hpp 2020-04-13 20:45:36.000000000 +0200 @@ -88,7 +88,7 @@ case (1000268001): return "THREAD_DONE_KHR"; case (1000268002): return "OPERATION_DEFERRED_KHR"; case (1000268003): return "OPERATION_NOT_DEFERRED_KHR"; - case (1000297000): return "ERROR_PIPELINE_COMPILE_REQUIRED_EXT"; + case (1000297000): return "PIPELINE_COMPILE_REQUIRED_EXT"; default: return "UNKNOWN_VkResult"; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/vulkaninfo/macOS/vulkaninfo.sh new/Vulkan-Tools-1.2.137/vulkaninfo/macOS/vulkaninfo.sh --- old/Vulkan-Tools-1.2.135/vulkaninfo/macOS/vulkaninfo.sh 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/vulkaninfo/macOS/vulkaninfo.sh 2020-04-13 20:45:36.000000000 +0200 @@ -7,3 +7,4 @@ else open /Applications/Utilities/Terminal.app $BASEDIR/vulkaninfo fi + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/vulkaninfo/outputprinter.h new/Vulkan-Tools-1.2.137/vulkaninfo/outputprinter.h --- old/Vulkan-Tools-1.2.135/vulkaninfo/outputprinter.h 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/vulkaninfo/outputprinter.h 2020-04-13 20:45:36.000000000 +0200 @@ -710,8 +710,9 @@ class ObjectWrapper { public: - ObjectWrapper(Printer &p, std::string object_name, int32_t count_subobjects = -1) : p(p) { - p.ObjectStart(object_name, count_subobjects); + ObjectWrapper(Printer &p, std::string object_name) : p(p) { p.ObjectStart(object_name); } + ObjectWrapper(Printer &p, std::string object_name, size_t count_subobjects) : p(p) { + p.ObjectStart(object_name, static_cast<int32_t>(count_subobjects)); } ~ObjectWrapper() { p.ObjectEnd(); } @@ -721,7 +722,9 @@ class ArrayWrapper { public: - ArrayWrapper(Printer &p, std::string array_name, int32_t element_count = 0) : p(p) { p.ArrayStart(array_name, element_count); } + ArrayWrapper(Printer &p, std::string array_name, size_t element_count = 0) : p(p) { + p.ArrayStart(array_name, static_cast<int32_t>(element_count)); + } ~ArrayWrapper() { p.ArrayEnd(); } private: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.cpp new/Vulkan-Tools-1.2.137/vulkaninfo/vulkaninfo.cpp --- old/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.cpp 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/vulkaninfo/vulkaninfo.cpp 2020-04-13 20:45:36.000000000 +0200 @@ -641,7 +641,7 @@ VkFormat fmt = static_cast<VkFormat>(fmt_counter); VkFormatProperties props; - gpu.inst.dll.vkGetPhysicalDeviceFormatProperties(gpu.phys_device, fmt, &props); + gpu.inst.dll.fp_vkGetPhysicalDeviceFormatProperties(gpu.phys_device, fmt, &props); GpuDumpFormatProperty(p, fmt, props); } @@ -660,7 +660,7 @@ VkFormat fmt = static_cast<VkFormat>(fmt_counter); VkFormatProperties props; - gpu.inst.dll.vkGetPhysicalDeviceFormatProperties(gpu.phys_device, fmt, &props); + gpu.inst.dll.fp_vkGetPhysicalDeviceFormatProperties(gpu.phys_device, fmt, &props); // don't print format properties that are unsupported if ((props.linearTilingFeatures || props.optimalTilingFeatures || props.bufferFeatures) == 0) continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h new/Vulkan-Tools-1.2.137/vulkaninfo/vulkaninfo.h --- old/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h 2020-03-19 22:30:30.000000000 +0100 +++ new/Vulkan-Tools-1.2.137/vulkaninfo/vulkaninfo.h 2020-04-13 20:45:36.000000000 +0200 @@ -256,168 +256,184 @@ #if defined(__linux__) library = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); if (!library) library = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL); -#elif defined(__APPLE__) - library = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL); - if (!library) library = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL); - if (!library) library = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL); #elif defined(_WIN32) library = LoadLibrary(TEXT("vulkan-1.dll")); -#else - assert(false && "unsupported platform"); #endif +#if !defined(__APPLE__) if (library == 0) return VK_ERROR_INITIALIZATION_FAILED; +#endif return VK_SUCCESS; } void Close() { -#if defined(__linux__) || defined(__APPLE__) +#if defined(__linux__) dlclose(library); #elif defined(_WIN32) FreeLibrary(library); #endif +#if !defined(__APPLE__) library = 0; +#endif } + +#if defined(__APPLE__) +#define APPLE_FP(name) name +#else +#define APPLE_FP(nama) nullptr +#endif + // Function pointers, loaded from the dll - PFN_vkCreateInstance vkCreateInstance; - PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; - PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; - PFN_vkDestroyInstance vkDestroyInstance; - PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; - PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; - PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; - PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; - PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; - PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; - PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; - PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; - PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; - PFN_vkCreateDevice vkCreateDevice; - PFN_vkDestroyDevice vkDestroyDevice; - PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; - PFN_vkGetDeviceQueue vkGetDeviceQueue; - PFN_vkCreateImage vkCreateImage; - PFN_vkDestroyImage vkDestroyImage; - PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; - PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; - PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; - PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion; - PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups; - PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; - PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; - PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2; - PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; - PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; + PFN_vkCreateInstance fp_vkCreateInstance = APPLE_FP(vkCreateInstance); + PFN_vkEnumerateInstanceExtensionProperties fp_vkEnumerateInstanceExtensionProperties = + APPLE_FP(vkEnumerateInstanceExtensionProperties); + PFN_vkEnumerateInstanceLayerProperties fp_vkEnumerateInstanceLayerProperties = APPLE_FP(vkEnumerateInstanceLayerProperties); + PFN_vkDestroyInstance fp_vkDestroyInstance = APPLE_FP(vkDestroyInstance); + PFN_vkEnumeratePhysicalDevices fp_vkEnumeratePhysicalDevices = APPLE_FP(vkEnumeratePhysicalDevices); + PFN_vkGetPhysicalDeviceFeatures fp_vkGetPhysicalDeviceFeatures = APPLE_FP(vkGetPhysicalDeviceFeatures); + PFN_vkGetPhysicalDeviceFormatProperties fp_vkGetPhysicalDeviceFormatProperties = APPLE_FP(vkGetPhysicalDeviceFormatProperties); + PFN_vkGetPhysicalDeviceImageFormatProperties fp_vkGetPhysicalDeviceImageFormatProperties = + APPLE_FP(vkGetPhysicalDeviceImageFormatProperties); + PFN_vkGetPhysicalDeviceProperties fp_vkGetPhysicalDeviceProperties = APPLE_FP(vkGetPhysicalDeviceProperties); + PFN_vkGetPhysicalDeviceQueueFamilyProperties fp_vkGetPhysicalDeviceQueueFamilyProperties = + APPLE_FP(vkGetPhysicalDeviceQueueFamilyProperties); + PFN_vkGetPhysicalDeviceMemoryProperties fp_vkGetPhysicalDeviceMemoryProperties = APPLE_FP(vkGetPhysicalDeviceMemoryProperties); + PFN_vkGetInstanceProcAddr fp_vkGetInstanceProcAddr = APPLE_FP(vkGetInstanceProcAddr); + PFN_vkGetDeviceProcAddr fp_vkGetDeviceProcAddr = APPLE_FP(vkGetDeviceProcAddr); + PFN_vkCreateDevice fp_vkCreateDevice = APPLE_FP(vkCreateDevice); + PFN_vkDestroyDevice fp_vkDestroyDevice = APPLE_FP(vkDestroyDevice); + PFN_vkEnumerateDeviceExtensionProperties fp_vkEnumerateDeviceExtensionProperties = + APPLE_FP(vkEnumerateDeviceExtensionProperties); + PFN_vkGetDeviceQueue fp_vkGetDeviceQueue = APPLE_FP(vkGetDeviceQueue); + PFN_vkCreateImage fp_vkCreateImage = APPLE_FP(vkCreateImage); + PFN_vkDestroyImage fp_vkDestroyImage = APPLE_FP(vkDestroyImage); + PFN_vkGetBufferMemoryRequirements fp_vkGetBufferMemoryRequirements = APPLE_FP(vkGetBufferMemoryRequirements); + PFN_vkGetImageMemoryRequirements fp_vkGetImageMemoryRequirements = APPLE_FP(vkGetImageMemoryRequirements); + PFN_vkGetImageSparseMemoryRequirements fp_vkGetImageSparseMemoryRequirements = APPLE_FP(vkGetImageSparseMemoryRequirements); + PFN_vkEnumerateInstanceVersion fp_vkEnumerateInstanceVersion = APPLE_FP(vkEnumerateInstanceVersion); + PFN_vkEnumeratePhysicalDeviceGroups fp_vkEnumeratePhysicalDeviceGroups = APPLE_FP(vkEnumeratePhysicalDeviceGroups); + PFN_vkGetPhysicalDeviceFeatures2 fp_vkGetPhysicalDeviceFeatures2 = APPLE_FP(vkGetPhysicalDeviceFeatures2); + PFN_vkGetPhysicalDeviceProperties2 fp_vkGetPhysicalDeviceProperties2 = APPLE_FP(vkGetPhysicalDeviceProperties2); + PFN_vkGetPhysicalDeviceFormatProperties2 fp_vkGetPhysicalDeviceFormatProperties2 = + APPLE_FP(vkGetPhysicalDeviceFormatProperties2); + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 fp_vkGetPhysicalDeviceQueueFamilyProperties2 = + APPLE_FP(vkGetPhysicalDeviceQueueFamilyProperties2); + PFN_vkGetPhysicalDeviceMemoryProperties2 fp_vkGetPhysicalDeviceMemoryProperties2 = + APPLE_FP(vkGetPhysicalDeviceMemoryProperties2); + PFN_vkDestroySurfaceKHR fp_vkDestroySurfaceKHR = APPLE_FP(vkDestroySurfaceKHR); #ifdef VK_USE_PLATFORM_XLIB_KHR - PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; + PFN_vkCreateXlibSurfaceKHR fp_vkCreateXlibSurfaceKHR = APPLE_FP(vkCreateXlibSurfaceKHR); #endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_XLIB_KHR - PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR fp_vkGetPhysicalDeviceXlibPresentationSupportKHR = + APPLE_FP(vkGetPhysicalDeviceXlibPresentationSupportKHR); #endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_XCB_KHR - PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; + PFN_vkCreateXcbSurfaceKHR fp_vkCreateXcbSurfaceKHR = APPLE_FP(vkCreateXcbSurfaceKHR); #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_XCB_KHR - PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR fp_vkGetPhysicalDeviceXcbPresentationSupportKHR = + APPLE_FP(vkGetPhysicalDeviceXcbPresentationSupportKHR); #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR - PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; + PFN_vkCreateWaylandSurfaceKHR fp_vkCreateWaylandSurfaceKHR = APPLE_FP(vkCreateWaylandSurfaceKHR); #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR - PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR fp_vkGetPhysicalDeviceWaylandPresentationSupportKHR = + APPLE_FP(vkGetPhysicalDeviceWaylandPresentationSupportKHR); #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_ANDROID_KHR - PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; + PFN_vkCreateAndroidSurfaceKHR fp_vkCreateAndroidSurfaceKHR = APPLE_FP(vkCreateAndroidSurfaceKHR); #endif // VK_USE_PLATFORM_ANDROID_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR - PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; + PFN_vkCreateWin32SurfaceKHR fp_vkCreateWin32SurfaceKHR = APPLE_FP(vkCreateWin32SurfaceKHR); #endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR - PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR fp_vkGetPhysicalDeviceWin32PresentationSupportKHR = + APPLE_FP(vkGetPhysicalDeviceWin32PresentationSupportKHR); #endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_MACOS_MVK - PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK; + PFN_vkCreateMacOSSurfaceMVK fp_vkCreateMacOSSurfaceMVK = APPLE_FP(vkCreateMacOSSurfaceMVK); #endif // VK_USE_PLATFORM_MACOS_MVK #ifdef VK_USE_PLATFORM_METAL_EXT - PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT; + PFN_vkCreateMetalSurfaceEXT fp_vkCreateMetalSurfaceEXT = APPLE_FP(vkCreateMetalSurfaceEXT); #endif // VK_USE_PLATFORM_METAL_EXT void InitializeDispatchPointers() { - Load(vkCreateInstance, "vkCreateInstance"); - Load(vkDestroyInstance, "vkDestroyInstance"); - Load(vkEnumeratePhysicalDevices, "vkEnumeratePhysicalDevices"); - Load(vkGetPhysicalDeviceFeatures, "vkGetPhysicalDeviceFeatures"); - Load(vkGetPhysicalDeviceFormatProperties, "vkGetPhysicalDeviceFormatProperties"); - Load(vkGetPhysicalDeviceImageFormatProperties, "vkGetPhysicalDeviceImageFormatProperties"); - Load(vkGetPhysicalDeviceProperties, "vkGetPhysicalDeviceProperties"); - Load(vkGetPhysicalDeviceQueueFamilyProperties, "vkGetPhysicalDeviceQueueFamilyProperties"); - Load(vkGetPhysicalDeviceMemoryProperties, "vkGetPhysicalDeviceMemoryProperties"); - Load(vkGetInstanceProcAddr, "vkGetInstanceProcAddr"); - Load(vkGetDeviceProcAddr, "vkGetDeviceProcAddr"); - Load(vkCreateDevice, "vkCreateDevice"); - Load(vkDestroyDevice, "vkDestroyDevice"); - Load(vkEnumerateInstanceExtensionProperties, "vkEnumerateInstanceExtensionProperties"); - Load(vkEnumerateDeviceExtensionProperties, "vkEnumerateDeviceExtensionProperties"); - Load(vkEnumerateInstanceLayerProperties, "vkEnumerateInstanceLayerProperties"); - Load(vkGetDeviceQueue, "vkGetDeviceQueue"); - Load(vkCreateImage, "vkCreateImage"); - Load(vkDestroyImage, "vkDestroyImage"); - Load(vkGetBufferMemoryRequirements, "vkGetBufferMemoryRequirements"); - Load(vkGetImageMemoryRequirements, "vkGetImageMemoryRequirements"); - Load(vkGetImageSparseMemoryRequirements, "vkGetImageSparseMemoryRequirements"); - Load(vkEnumerateInstanceVersion, "vkEnumerateInstanceVersion"); - Load(vkEnumeratePhysicalDeviceGroups, "vkEnumeratePhysicalDeviceGroups"); - Load(vkGetPhysicalDeviceFeatures2, "vkGetPhysicalDeviceFeatures2"); - Load(vkGetPhysicalDeviceProperties2, "vkGetPhysicalDeviceProperties2"); - Load(vkGetPhysicalDeviceFormatProperties2, "vkGetPhysicalDeviceFormatProperties2"); - Load(vkGetPhysicalDeviceQueueFamilyProperties2, "vkGetPhysicalDeviceQueueFamilyProperties2"); - Load(vkGetPhysicalDeviceMemoryProperties2, "vkGetPhysicalDeviceMemoryProperties2"); - Load(vkDestroySurfaceKHR, "vkDestroySurfaceKHR"); + Load(fp_vkCreateInstance, "vkCreateInstance"); + Load(fp_vkDestroyInstance, "vkDestroyInstance"); + Load(fp_vkEnumeratePhysicalDevices, "vkEnumeratePhysicalDevices"); + Load(fp_vkGetPhysicalDeviceFeatures, "vkGetPhysicalDeviceFeatures"); + Load(fp_vkGetPhysicalDeviceFormatProperties, "vkGetPhysicalDeviceFormatProperties"); + Load(fp_vkGetPhysicalDeviceImageFormatProperties, "vkGetPhysicalDeviceImageFormatProperties"); + Load(fp_vkGetPhysicalDeviceProperties, "vkGetPhysicalDeviceProperties"); + Load(fp_vkGetPhysicalDeviceQueueFamilyProperties, "vkGetPhysicalDeviceQueueFamilyProperties"); + Load(fp_vkGetPhysicalDeviceMemoryProperties, "vkGetPhysicalDeviceMemoryProperties"); + Load(fp_vkGetInstanceProcAddr, "vkGetInstanceProcAddr"); + Load(fp_vkGetDeviceProcAddr, "vkGetDeviceProcAddr"); + Load(fp_vkCreateDevice, "vkCreateDevice"); + Load(fp_vkDestroyDevice, "vkDestroyDevice"); + Load(fp_vkEnumerateInstanceExtensionProperties, "vkEnumerateInstanceExtensionProperties"); + Load(fp_vkEnumerateDeviceExtensionProperties, "vkEnumerateDeviceExtensionProperties"); + Load(fp_vkEnumerateInstanceLayerProperties, "vkEnumerateInstanceLayerProperties"); + Load(fp_vkGetDeviceQueue, "vkGetDeviceQueue"); + Load(fp_vkCreateImage, "vkCreateImage"); + Load(fp_vkDestroyImage, "vkDestroyImage"); + Load(fp_vkGetBufferMemoryRequirements, "vkGetBufferMemoryRequirements"); + Load(fp_vkGetImageMemoryRequirements, "vkGetImageMemoryRequirements"); + Load(fp_vkGetImageSparseMemoryRequirements, "vkGetImageSparseMemoryRequirements"); + Load(fp_vkEnumerateInstanceVersion, "vkEnumerateInstanceVersion"); + Load(fp_vkEnumeratePhysicalDeviceGroups, "vkEnumeratePhysicalDeviceGroups"); + Load(fp_vkGetPhysicalDeviceFeatures2, "vkGetPhysicalDeviceFeatures2"); + Load(fp_vkGetPhysicalDeviceProperties2, "vkGetPhysicalDeviceProperties2"); + Load(fp_vkGetPhysicalDeviceFormatProperties2, "vkGetPhysicalDeviceFormatProperties2"); + Load(fp_vkGetPhysicalDeviceQueueFamilyProperties2, "vkGetPhysicalDeviceQueueFamilyProperties2"); + Load(fp_vkGetPhysicalDeviceMemoryProperties2, "vkGetPhysicalDeviceMemoryProperties2"); + Load(fp_vkDestroySurfaceKHR, "vkDestroySurfaceKHR"); #ifdef VK_USE_PLATFORM_XLIB_KHR - Load(vkCreateXlibSurfaceKHR, "vkCreateXlibSurfaceKHR"); + Load(fp_vkCreateXlibSurfaceKHR, "vkCreateXlibSurfaceKHR"); #endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_XLIB_KHR - Load(vkGetPhysicalDeviceXlibPresentationSupportKHR, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); + Load(fp_vkGetPhysicalDeviceXlibPresentationSupportKHR, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); #endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_XCB_KHR - Load(vkCreateXcbSurfaceKHR, "vkCreateXcbSurfaceKHR"); + Load(fp_vkCreateXcbSurfaceKHR, "vkCreateXcbSurfaceKHR"); #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_XCB_KHR - Load(vkGetPhysicalDeviceXcbPresentationSupportKHR, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); + Load(fp_vkGetPhysicalDeviceXcbPresentationSupportKHR, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR - Load(vkCreateWaylandSurfaceKHR, "vkCreateWaylandSurfaceKHR"); + Load(fp_vkCreateWaylandSurfaceKHR, "vkCreateWaylandSurfaceKHR"); #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR - Load(vkGetPhysicalDeviceWaylandPresentationSupportKHR, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); + Load(fp_vkGetPhysicalDeviceWaylandPresentationSupportKHR, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_ANDROID_KHR - Load(vkCreateAndroidSurfaceKHR, "vkCreateAndroidSurfaceKHR"); + Load(fp_vkCreateAndroidSurfaceKHR, "vkCreateAndroidSurfaceKHR"); #endif // VK_USE_PLATFORM_ANDROID_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR - Load(vkCreateWin32SurfaceKHR, "vkCreateWin32SurfaceKHR"); + Load(fp_vkCreateWin32SurfaceKHR, "vkCreateWin32SurfaceKHR"); #endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR - Load(vkGetPhysicalDeviceWin32PresentationSupportKHR, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); + Load(fp_vkGetPhysicalDeviceWin32PresentationSupportKHR, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); #endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_MACOS_MVK - Load(vkCreateMacOSSurfaceMVK, "vkCreateMacOSSurfaceMVK"); + Load(fp_vkCreateMacOSSurfaceMVK, "vkCreateMacOSSurfaceMVK"); #endif // VK_USE_PLATFORM_MACOS_MVK #ifdef VK_USE_PLATFORM_METAL_EXT - Load(vkCreateMetalSurfaceEXT, "vkCreateMetalSurfaceEXT"); + Load(fp_vkCreateMetalSurfaceEXT, "vkCreateMetalSurfaceEXT"); #endif // VK_USE_PLATFORM_METAL_EXT } private: template <typename T> void Load(T &func_dest, const char *func_name) { -#if defined(__linux__) || defined(__APPLE__) +#if defined(__linux__) func_dest = reinterpret_cast<T>(dlsym(library, func_name)); #elif defined(_WIN32) func_dest = reinterpret_cast<T>(GetProcAddress(library, func_name)); #endif } -#if defined(__linux__) || defined(__APPLE__) +#if defined(__linux__) void *library; #elif defined(_WIN32) HMODULE library; @@ -587,10 +603,10 @@ } dll.InitializeDispatchPointers(); - if (!dll.vkEnumerateInstanceVersion) { + if (!dll.fp_vkEnumerateInstanceVersion) { instance_version = VK_API_VERSION_1_0; } else { - const VkResult err = dll.vkEnumerateInstanceVersion(&instance_version); + const VkResult err = dll.fp_vkEnumerateInstanceVersion(&instance_version); if (err) THROW_VK_ERR("vkEnumerateInstanceVersion", err); } @@ -616,7 +632,7 @@ const VkInstanceCreateInfo inst_info = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, &dbg_info, 0, &app_info, 0, nullptr, static_cast<uint32_t>(inst_exts.size()), inst_exts.data()}; - VkResult err = dll.vkCreateInstance(&inst_info, nullptr, &instance); + VkResult err = dll.fp_vkCreateInstance(&inst_info, nullptr, &instance); if (err == VK_ERROR_INCOMPATIBLE_DRIVER) { std::cerr << "Cannot create Vulkan instance.\n"; std::cerr << "This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU " @@ -625,11 +641,11 @@ } else if (err) { THROW_VK_ERR("vkCreateInstance", err); } - ext_funcs.LoadInstanceExtensionDispatchPointers(dll.vkGetInstanceProcAddr, instance); + ext_funcs.LoadInstanceExtensionDispatchPointers(dll.fp_vkGetInstanceProcAddr, instance); } ~AppInstance() { - if (dll.vkDestroyInstance) dll.vkDestroyInstance(instance, nullptr); + if (dll.fp_vkDestroyInstance) dll.fp_vkDestroyInstance(instance, nullptr); dll.Close(); } @@ -649,7 +665,7 @@ void AppGetInstanceExtensions() { /* Scan layers */ auto global_layer_properties = - GetVector<VkLayerProperties>("vkEnumerateInstanceLayerProperties", dll.vkEnumerateInstanceLayerProperties); + GetVector<VkLayerProperties>("vkEnumerateInstanceLayerProperties", dll.fp_vkEnumerateInstanceLayerProperties); global_layers.resize(global_layer_properties.size()); for (size_t i = 0; i < global_layer_properties.size(); i++) { @@ -673,11 +689,11 @@ std::vector<VkExtensionProperties> AppGetGlobalLayerExtensions(char *layer_name) { return GetVector<VkExtensionProperties>("vkEnumerateInstanceExtensionProperties", - dll.vkEnumerateInstanceExtensionProperties, layer_name); + dll.fp_vkEnumerateInstanceExtensionProperties, layer_name); } std::vector<VkPhysicalDevice> FindPhysicalDevices() { - return GetVector<VkPhysicalDevice>("vkEnumerateInstanceExtensionProperties", dll.vkEnumeratePhysicalDevices, instance); + return GetVector<VkPhysicalDevice>("vkEnumerateInstanceExtensionProperties", dll.fp_vkEnumeratePhysicalDevices, instance); } }; @@ -745,7 +761,7 @@ createInfo.hwnd = inst.h_wnd; VkSurfaceKHR surface; - VkResult err = inst.dll.vkCreateWin32SurfaceKHR(inst.instance, &createInfo, nullptr, &surface); + VkResult err = inst.dll.fp_vkCreateWin32SurfaceKHR(inst.instance, &createInfo, nullptr, &surface); if (err) THROW_VK_ERR("vkCreateWin32SurfaceKHR", err); return surface; } @@ -758,7 +774,7 @@ defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT) || defined(VK_USE_PLATFORM_WAYLAND_KHR) || \ defined(VK_USE_PLATFORM_ANDROID_KHR) static void AppDestroySurface(AppInstance &inst, VkSurfaceKHR surface) { // same for all platforms - inst.dll.vkDestroySurfaceKHR(inst.instance, surface, nullptr); + inst.dll.fp_vkDestroySurfaceKHR(inst.instance, surface, nullptr); } #endif @@ -813,7 +829,7 @@ xcb_createInfo.window = inst.xcb_window; VkSurfaceKHR surface; - VkResult err = inst.dll.vkCreateXcbSurfaceKHR(inst.instance, &xcb_createInfo, nullptr, &surface); + VkResult err = inst.dll.fp_vkCreateXcbSurfaceKHR(inst.instance, &xcb_createInfo, nullptr, &surface); if (err) THROW_VK_ERR("vkCreateXcbSurfaceKHR", err); return surface; } @@ -859,7 +875,7 @@ createInfo.window = inst.xlib_window; VkSurfaceKHR surface; - VkResult err = inst.dll.vkCreateXlibSurfaceKHR(inst.instance, &createInfo, nullptr, &surface); + VkResult err = inst.dll.fp_vkCreateXlibSurfaceKHR(inst.instance, &createInfo, nullptr, &surface); if (err) THROW_VK_ERR("vkCreateXlibSurfaceKHR", err); return surface; } @@ -888,7 +904,7 @@ createInfo.pView = inst.macos_window; VkSurfaceKHR surface; - VkResult err = inst.dll.vkCreateMacOSSurfaceMVK(inst.instance, &createInfo, nullptr, &surface); + VkResult err = inst.dll.fp_vkCreateMacOSSurfaceMVK(inst.instance, &createInfo, nullptr, &surface); if (err) THROW_VK_ERR("vkCreateMacOSSurfaceMVK", err); return surface; } @@ -914,7 +930,7 @@ createInfo.pLayer = static_cast<CAMetalLayer *>(GetCAMetalLayerFromMetalView(inst.metal_window)); VkSurfaceKHR surface; - VkResult err = inst.dll.vkCreateMetalSurfaceEXT(inst.instance, &createInfo, nullptr, &surface); + VkResult err = inst.dll.fp_vkCreateMetalSurfaceEXT(inst.instance, &createInfo, nullptr, &surface); if (err) THROW_VK_ERR("vkCreateMetalSurfaceEXT", err); return surface; } @@ -953,7 +969,7 @@ createInfo.surface = inst.wayland_surface; VkSurfaceKHR surface; - VkResult err = inst.dll.vkCreateWaylandSurfaceKHR(inst.instance, &createInfo, nullptr, &surface); + VkResult err = inst.dll.fp_vkCreateWaylandSurfaceKHR(inst.instance, &createInfo, nullptr, &surface); if (err) THROW_VK_ERR("vkCreateWaylandSurfaceKHR", err); return surface; } @@ -972,7 +988,7 @@ createInfo.flags = 0; createInfo.window = (struct ANativeWindow *)(inst.window); - err = inst.dll.vkCreateAndroidSurfaceKHR(inst.inst, &createInfo, NULL, &inst.surface); + err = inst.dll.fp_vkCreateAndroidSurfaceKHR(inst.inst, &createInfo, NULL, &inst.surface); THROW_VK_ERR("vkCreateAndroidSurfaceKHR", err); } static VkSurfaceKHR AppDestroyAndroidSurface(AppInstance &inst) {} @@ -987,7 +1003,7 @@ const char *display_var = getenv("DISPLAY"); if (display_var == nullptr || strlen(display_var) == 0) { has_display = false; - THROW_ERR("'DISPLAY' environment variable not set... skipping surface info"); + std::cerr << "'DISPLAY' environment variable not set... skipping surface info\n"; } #endif @@ -1183,7 +1199,7 @@ std::vector<VkPhysicalDeviceProperties> props(group.physicalDeviceCount); for (uint32_t i = 0; i < group.physicalDeviceCount; ++i) { - inst.dll.vkGetPhysicalDeviceProperties(group.physicalDevices[i], &props[i]); + inst.dll.fp_vkGetPhysicalDeviceProperties(group.physicalDevices[i], &props[i]); } return props; @@ -1207,12 +1223,12 @@ VkDevice logical_device = VK_NULL_HANDLE; - VkResult err = inst.dll.vkCreateDevice(group.physicalDevices[0], &device_ci, nullptr, &logical_device); + VkResult err = inst.dll.fp_vkCreateDevice(group.physicalDevices[0], &device_ci, nullptr, &logical_device); if (err != VK_SUCCESS && err != VK_ERROR_EXTENSION_NOT_PRESENT) THROW_VK_ERR("vkCreateDevice", err); if (err == VK_ERROR_EXTENSION_NOT_PRESENT) { VkDeviceGroupPresentCapabilitiesKHR group_capabilities = {VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR, nullptr}; - inst.dll.vkDestroyDevice(logical_device, nullptr); + inst.dll.fp_vkDestroyDevice(logical_device, nullptr); return std::pair<bool, VkDeviceGroupPresentCapabilitiesKHR>(false, group_capabilities); } @@ -1223,7 +1239,7 @@ err = inst.ext_funcs.vkGetDeviceGroupPresentCapabilitiesKHR(logical_device, &group_capabilities); if (err) THROW_VK_ERR("vkGetDeviceGroupPresentCapabilitiesKHR", err); - inst.dll.vkDestroyDevice(logical_device, nullptr); + inst.dll.fp_vkDestroyDevice(logical_device, nullptr); return std::pair<bool, VkDeviceGroupPresentCapabilitiesKHR>(true, group_capabilities); } @@ -1296,7 +1312,7 @@ AppGpu(AppInstance &inst, uint32_t id, VkPhysicalDevice phys_device, pNextChainInfos chainInfos) : inst(inst), id(id), phys_device(phys_device) { - inst.dll.vkGetPhysicalDeviceProperties(phys_device, &props); + inst.dll.fp_vkGetPhysicalDeviceProperties(phys_device, &props); // needs to find the minimum of the instance and device version, and use that to print the device info uint32_t gpu_version = props.apiVersion < inst.instance_version ? props.apiVersion : inst.instance_version; @@ -1309,11 +1325,11 @@ inst.ext_funcs.vkGetPhysicalDeviceProperties2KHR(phys_device, &props2); } /* get queue count */ - inst.dll.vkGetPhysicalDeviceQueueFamilyProperties(phys_device, &queue_count, nullptr); + inst.dll.fp_vkGetPhysicalDeviceQueueFamilyProperties(phys_device, &queue_count, nullptr); queue_props.resize(queue_count); - inst.dll.vkGetPhysicalDeviceQueueFamilyProperties(phys_device, &queue_count, queue_props.data()); + inst.dll.fp_vkGetPhysicalDeviceQueueFamilyProperties(phys_device, &queue_count, queue_props.data()); if (inst.CheckExtensionEnabled(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { queue_props2.resize(queue_count); @@ -1326,9 +1342,9 @@ inst.ext_funcs.vkGetPhysicalDeviceQueueFamilyProperties2KHR(phys_device, &queue_count, queue_props2.data()); } - inst.dll.vkGetPhysicalDeviceMemoryProperties(phys_device, &memory_props); + inst.dll.fp_vkGetPhysicalDeviceMemoryProperties(phys_device, &memory_props); - inst.dll.vkGetPhysicalDeviceFeatures(phys_device, &features); + inst.dll.fp_vkGetPhysicalDeviceFeatures(phys_device, &features); if (inst.CheckExtensionEnabled(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { memory_props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR; @@ -1355,7 +1371,7 @@ const VkDeviceCreateInfo device_ci = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, nullptr, 0, 1, &q_ci, 0, nullptr, 0, nullptr, &enabled_features}; - VkResult err = inst.dll.vkCreateDevice(phys_device, &device_ci, nullptr, &dev); + VkResult err = inst.dll.fp_vkCreateDevice(phys_device, &device_ci, nullptr, &dev); if (err) THROW_VK_ERR("vkCreateDevice", err); const VkFormat color_format = VK_FORMAT_R8G8B8A8_UNORM; @@ -1375,7 +1391,7 @@ mem_type_res_support.image[tiling][fmt_i].transient_supported = true; VkFormatProperties fmt_props; - inst.dll.vkGetPhysicalDeviceFormatProperties(phys_device, formats[fmt_i], &fmt_props); + inst.dll.fp_vkGetPhysicalDeviceFormatProperties(phys_device, formats[fmt_i], &fmt_props); if ((tiling == VK_IMAGE_TILING_OPTIMAL && fmt_props.optimalTilingFeatures == 0) || (tiling == VK_IMAGE_TILING_LINEAR && fmt_props.linearTilingFeatures == 0)) { mem_type_res_support.image[tiling][fmt_i].regular_supported = false; @@ -1420,9 +1436,9 @@ } VkImageFormatProperties img_props; - err = inst.dll.vkGetPhysicalDeviceImageFormatProperties(phys_device, image_ci.format, image_ci.imageType, - image_ci.tiling, image_ci.usage, image_ci.flags, - &img_props); + err = inst.dll.fp_vkGetPhysicalDeviceImageFormatProperties(phys_device, image_ci.format, image_ci.imageType, + image_ci.tiling, image_ci.usage, image_ci.flags, + &img_props); uint32_t *memtypes; bool *support; @@ -1448,14 +1464,14 @@ if (err != VK_SUCCESS) THROW_VK_ERR("vkGetPhysicalDeviceImageFormatProperties", err); VkImage dummy_img; - err = inst.dll.vkCreateImage(dev, &image_ci, nullptr, &dummy_img); + err = inst.dll.fp_vkCreateImage(dev, &image_ci, nullptr, &dummy_img); if (err) THROW_VK_ERR("vkCreateImage", err); VkMemoryRequirements mem_req; - inst.dll.vkGetImageMemoryRequirements(dev, dummy_img, &mem_req); + inst.dll.fp_vkGetImageMemoryRequirements(dev, dummy_img, &mem_req); *memtypes = mem_req.memoryTypeBits; - inst.dll.vkDestroyImage(dev, dummy_img, nullptr); + inst.dll.fp_vkDestroyImage(dev, dummy_img, nullptr); } } } @@ -1515,7 +1531,7 @@ }; } ~AppGpu() { - inst.dll.vkDestroyDevice(dev, nullptr); + inst.dll.fp_vkDestroyDevice(dev, nullptr); if (inst.CheckExtensionEnabled(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { freepNextChain(static_cast<VkStructureHeader *>(features2.pNext)); @@ -1538,7 +1554,7 @@ std::vector<VkExtensionProperties> AppGetPhysicalDeviceLayerExtensions(char *layer_name) { return GetVector<VkExtensionProperties>("vkEnumerateDeviceExtensionProperties", - inst.dll.vkEnumerateDeviceExtensionProperties, phys_device, layer_name); + inst.dll.fp_vkEnumerateDeviceExtensionProperties, phys_device, layer_name); } // Helper function to determine whether a format range is currently supported. @@ -1628,7 +1644,7 @@ for (auto fmtRange : gpu.supported_format_ranges) { for (int32_t fmt = fmtRange.first_format; fmt <= fmtRange.last_format; ++fmt) { VkFormatProperties props; - gpu.inst.dll.vkGetPhysicalDeviceFormatProperties(gpu.phys_device, static_cast<VkFormat>(fmt), &props); + gpu.inst.dll.fp_vkGetPhysicalDeviceFormatProperties(gpu.phys_device, static_cast<VkFormat>(fmt), &props); PropFlags pf = {props.linearTilingFeatures, props.optimalTilingFeatures, props.bufferFeatures};