Index: libraries/source/glad/extensions/vulkan.txt =================================================================== --- libraries/source/glad/extensions/vulkan.txt +++ libraries/source/glad/extensions/vulkan.txt @@ -1,5 +1,6 @@ VK_EXT_debug_utils VK_EXT_descriptor_indexing +VK_EXT_memory_budget VK_EXT_mesh_shader VK_EXT_texture_compression_astc_hdr VK_EXT_validation_features Index: libraries/source/glad/include/glad/vulkan.h =================================================================== --- libraries/source/glad/include/glad/vulkan.h +++ libraries/source/glad/include/glad/vulkan.h @@ -1,28 +1,28 @@ /** - * Loader generated by glad 2.0.3 on Sun Jan 8 13:21:25 2023 + * Loader generated by glad 2.0.4 on 09/18/23 20:01:02 * * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 * * Generator: C/C++ * Specification: vk - * Extensions: 17 + * Extensions: 18 * * APIs: * - vulkan=1.1 * * Options: + * - ON_DEMAND = False + * - LOADER = False * - ALIAS = False - * - DEBUG = False * - HEADER_ONLY = False - * - LOADER = False + * - DEBUG = False * - MX = False - * - ON_DEMAND = False * * Commandline: - * --api='vulkan=1.1' --extensions='VK_EXT_debug_utils,VK_EXT_descriptor_indexing,VK_EXT_mesh_shader,VK_EXT_texture_compression_astc_hdr,VK_EXT_validation_features,VK_KHR_acceleration_structure,VK_KHR_buffer_device_address,VK_KHR_deferred_host_operations,VK_KHR_portability_subset,VK_KHR_ray_query,VK_KHR_ray_tracing_maintenance1,VK_KHR_ray_tracing_pipeline,VK_KHR_shader_float_controls,VK_KHR_spirv_1_4,VK_KHR_surface,VK_KHR_swapchain,VK_KHR_timeline_semaphore' c + * --api='vulkan=1.1' --extensions='VK_EXT_debug_utils,VK_EXT_descriptor_indexing,VK_EXT_memory_budget,VK_EXT_mesh_shader,VK_EXT_texture_compression_astc_hdr,VK_EXT_validation_features,VK_KHR_acceleration_structure,VK_KHR_buffer_device_address,VK_KHR_deferred_host_operations,VK_KHR_portability_subset,VK_KHR_ray_query,VK_KHR_ray_tracing_maintenance1,VK_KHR_ray_tracing_pipeline,VK_KHR_shader_float_controls,VK_KHR_spirv_1_4,VK_KHR_surface,VK_KHR_swapchain,VK_KHR_timeline_semaphore' c * * Online: - * http://glad.sh/#api=vulkan%3D1.1&extensions=VK_EXT_debug_utils%2CVK_EXT_descriptor_indexing%2CVK_EXT_mesh_shader%2CVK_EXT_texture_compression_astc_hdr%2CVK_EXT_validation_features%2CVK_KHR_acceleration_structure%2CVK_KHR_buffer_device_address%2CVK_KHR_deferred_host_operations%2CVK_KHR_portability_subset%2CVK_KHR_ray_query%2CVK_KHR_ray_tracing_maintenance1%2CVK_KHR_ray_tracing_pipeline%2CVK_KHR_shader_float_controls%2CVK_KHR_spirv_1_4%2CVK_KHR_surface%2CVK_KHR_swapchain%2CVK_KHR_timeline_semaphore&generator=c&options= + * http://glad.sh/#api=vulkan%3D1.1&extensions=VK_EXT_debug_utils%2CVK_EXT_descriptor_indexing%2CVK_EXT_memory_budget%2CVK_EXT_mesh_shader%2CVK_EXT_texture_compression_astc_hdr%2CVK_EXT_validation_features%2CVK_KHR_acceleration_structure%2CVK_KHR_buffer_device_address%2CVK_KHR_deferred_host_operations%2CVK_KHR_portability_subset%2CVK_KHR_ray_query%2CVK_KHR_ray_tracing_maintenance1%2CVK_KHR_ray_tracing_pipeline%2CVK_KHR_shader_float_controls%2CVK_KHR_spirv_1_4%2CVK_KHR_surface%2CVK_KHR_swapchain%2CVK_KHR_timeline_semaphore&generator=c&options= * */ @@ -150,7 +150,7 @@ #define GLAD_VERSION_MAJOR(version) (version / 10000) #define GLAD_VERSION_MINOR(version) (version % 10000) -#define GLAD_GENERATOR_VERSION "2.0.3" +#define GLAD_GENERATOR_VERSION "2.0.4" typedef void (*GLADapiproc)(void); @@ -167,6 +167,8 @@ #define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2 #define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" #define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 +#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget" +#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1 #define VK_EXT_MESH_SHADER_EXTENSION_NAME "VK_EXT_mesh_shader" #define VK_EXT_MESH_SHADER_SPEC_VERSION 1 #define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr" @@ -226,29 +228,27 @@ #include "vk_platform.h" /* DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead. */ #define VK_MAKE_VERSION(major, minor, patch) \ - ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) + ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) /* DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead. */ -#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) +#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) /* DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead. */ -#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU) +#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) /* DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead. */ #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) #define VK_MAKE_API_VERSION(variant, major, minor, patch) \ - ((((uint32_t)(variant)) << 29) | (((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) -#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29) -#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22) & 0x7FU) -#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU) + ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) +#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) +#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU) +#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) #define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) /* DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead. */ -/*#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0 */ +/*#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 */ /* Vulkan 1.0 version number */ #define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)/* Patch version should always be set to 0 */ /* Vulkan 1.1 version number */ #define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)/* Patch version should always be set to 0 */ /* Version of this file */ -#define VK_HEADER_VERSION 238 -/* Complete version of this file */ -#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION) +#define VK_HEADER_VERSION 264 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; #ifndef VK_USE_64_BIT_PTR_DEFINES #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) @@ -1280,6 +1280,7 @@ VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, @@ -1720,6 +1721,7 @@ VK_VENDOR_ID_CODEPLAY = 0x10004, VK_VENDOR_ID_MESA = 0x10005, VK_VENDOR_ID_POCL = 0x10006, + VK_VENDOR_ID_MOBILEYE = 0x10007, VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF } VkVendorId; typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( @@ -2409,6 +2411,8 @@ #endif +/* Complete version of this file */ +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION) typedef uint32_t VkSampleMask; typedef uint32_t VkBool32; typedef uint32_t VkFlags; @@ -2843,8 +2847,8 @@ const void * pNext; VkPipelineShaderStageCreateFlags flags; VkShaderStageFlagBits stage; - VkShaderModule module; - const char * pName; + VkShaderModule module; + const char * pName; const VkSpecializationInfo * pSpecializationInfo; } VkPipelineShaderStageCreateInfo; @@ -2970,7 +2974,7 @@ VkStructureType sType; const void * pNext; VkPipelineCreateFlags flags; - uint32_t stageCount; + uint32_t stageCount; const VkPipelineShaderStageCreateInfo * pStages; const VkPipelineVertexInputStateCreateInfo * pVertexInputState; const VkPipelineInputAssemblyStateCreateInfo * pInputAssemblyState; @@ -2992,7 +2996,7 @@ VkStructureType sType; const void * pNext; VkPipelineCacheCreateFlags flags; - size_t initialDataSize; + size_t initialDataSize; const void * pInitialData; } VkPipelineCacheCreateInfo; @@ -3378,7 +3382,7 @@ VkCompositeAlphaFlagBitsKHR compositeAlpha; VkPresentModeKHR presentMode; VkBool32 clipped; - VkSwapchainKHR oldSwapchain; + VkSwapchainKHR oldSwapchain; } VkSwapchainCreateInfoKHR; typedef struct VkPhysicalDeviceFeatures2 { @@ -3949,6 +3953,13 @@ VkBool32 rayTracingPipelineTraceRaysIndirect2; } VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; +typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT { + VkStructureType sType; + void * pNext; + VkDeviceSize heapBudget [ VK_MAX_MEMORY_HEAPS ]; + VkDeviceSize heapUsage [ VK_MAX_MEMORY_HEAPS ]; +} VkPhysicalDeviceMemoryBudgetPropertiesEXT; + typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures { VkStructureType sType; void * pNext; @@ -4167,6 +4178,8 @@ GLAD_API_CALL int GLAD_VK_EXT_debug_utils; #define VK_EXT_descriptor_indexing 1 GLAD_API_CALL int GLAD_VK_EXT_descriptor_indexing; +#define VK_EXT_memory_budget 1 +GLAD_API_CALL int GLAD_VK_EXT_memory_budget; #define VK_EXT_mesh_shader 1 GLAD_API_CALL int GLAD_VK_EXT_mesh_shader; #define VK_EXT_texture_compression_astc_hdr 1 Index: libraries/source/glad/src/vulkan.cpp =================================================================== --- libraries/source/glad/src/vulkan.cpp +++ libraries/source/glad/src/vulkan.cpp @@ -27,6 +27,7 @@ int GLAD_VK_VERSION_1_1 = 0; int GLAD_VK_EXT_debug_utils = 0; int GLAD_VK_EXT_descriptor_indexing = 0; +int GLAD_VK_EXT_memory_budget = 0; int GLAD_VK_EXT_mesh_shader = 0; int GLAD_VK_EXT_texture_compression_astc_hdr = 0; int GLAD_VK_EXT_validation_features = 0; @@ -674,6 +675,7 @@ GLAD_VK_EXT_debug_utils = glad_vk_has_extension("VK_EXT_debug_utils", extension_count, extensions); GLAD_VK_EXT_descriptor_indexing = glad_vk_has_extension("VK_EXT_descriptor_indexing", extension_count, extensions); + GLAD_VK_EXT_memory_budget = glad_vk_has_extension("VK_EXT_memory_budget", extension_count, extensions); GLAD_VK_EXT_mesh_shader = glad_vk_has_extension("VK_EXT_mesh_shader", extension_count, extensions); GLAD_VK_EXT_texture_compression_astc_hdr = glad_vk_has_extension("VK_EXT_texture_compression_astc_hdr", extension_count, extensions); GLAD_VK_EXT_validation_features = glad_vk_has_extension("VK_EXT_validation_features", extension_count, extensions); Index: source/renderer/backend/vulkan/Device.cpp =================================================================== --- source/renderer/backend/vulkan/Device.cpp +++ source/renderer/backend/vulkan/Device.cpp @@ -552,6 +552,11 @@ vulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR = vkGetPhysicalDeviceMemoryProperties2; VmaAllocatorCreateInfo allocatorCreateInfo{}; + if (hasDeviceExtension(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME)) + { + ENSURE(GLAD_VK_EXT_memory_budget); + allocatorCreateInfo.flags = VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT; + } allocatorCreateInfo.instance = device->m_Instance; allocatorCreateInfo.physicalDevice = choosenDevice.device; allocatorCreateInfo.device = device->m_Device; @@ -804,6 +809,7 @@ ProcessTextureToDestroyQueue(); ++m_FrameID; + vmaSetCurrentFrameIndex(m_VMAAllocator, m_FrameID); } void CDevice::OnWindowResize(const uint32_t width, const uint32_t height) Index: source/renderer/backend/vulkan/Texture.cpp =================================================================== --- source/renderer/backend/vulkan/Texture.cpp +++ source/renderer/backend/vulkan/Texture.cpp @@ -146,6 +146,8 @@ VmaAllocationCreateInfo allocationCreateInfo{}; if ((usage & Usage::COLOR_ATTACHMENT) || (usage & Usage::DEPTH_STENCIL_ATTACHMENT)) allocationCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; + if (GLAD_VK_EXT_memory_budget) + allocationCreateInfo.flags |= VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT; #ifndef NDEBUG allocationCreateInfo.flags |= VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT; allocationCreateInfo.pUserData = const_cast(name); Index: source/renderer/backend/vulkan/VMA.h =================================================================== --- source/renderer/backend/vulkan/VMA.h +++ source/renderer/backend/vulkan/VMA.h @@ -114,7 +114,6 @@ #define VK_KHR_bind_memory2 0 #define VK_KHR_get_memory_requirements2 0 #define VK_KHR_external_memory 0 -#define VK_EXT_memory_budget 0 #define VK_EXT_memory_priority 0 #include "third_party/vma/vk_mem_alloc.h"