Merge pull request #58491 from RandomShaper/vma_upgrade
vk_mem_alloc: Update to latest upstream + volk: Finish update + Adapt custom approach to small objects
This commit is contained in:
commit
80baa1386a
9 changed files with 3311 additions and 4542 deletions
|
@ -1335,8 +1335,13 @@ Error RenderingDeviceVulkan::_buffer_allocate(Buffer *p_buffer, uint32_t p_size,
|
|||
allocInfo.requiredFlags = 0;
|
||||
allocInfo.preferredFlags = 0;
|
||||
allocInfo.memoryTypeBits = 0;
|
||||
allocInfo.pool = p_size <= SMALL_ALLOCATION_MAX_SIZE ? small_allocs_pool : nullptr;
|
||||
allocInfo.pool = nullptr;
|
||||
allocInfo.pUserData = nullptr;
|
||||
if (p_size <= SMALL_ALLOCATION_MAX_SIZE) {
|
||||
uint32_t mem_type_index = 0;
|
||||
vmaFindMemoryTypeIndexForBufferInfo(allocator, &bufferInfo, &allocInfo, &mem_type_index);
|
||||
allocInfo.pool = _find_or_create_small_allocs_pool(mem_type_index);
|
||||
}
|
||||
|
||||
VkResult err = vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &p_buffer->buffer, &p_buffer->allocation, nullptr);
|
||||
ERR_FAIL_COND_V_MSG(err, ERR_CANT_CREATE, "Can't create buffer of size: " + itos(p_size) + ", error " + itos(err) + ".");
|
||||
|
@ -1843,12 +1848,17 @@ RID RenderingDeviceVulkan::texture_create(const TextureFormat &p_format, const T
|
|||
|
||||
VmaAllocationCreateInfo allocInfo;
|
||||
allocInfo.flags = 0;
|
||||
allocInfo.pool = image_size <= SMALL_ALLOCATION_MAX_SIZE ? small_allocs_pool : nullptr;
|
||||
allocInfo.pool = nullptr;
|
||||
allocInfo.usage = p_format.usage_bits & TEXTURE_USAGE_CPU_READ_BIT ? VMA_MEMORY_USAGE_CPU_ONLY : VMA_MEMORY_USAGE_GPU_ONLY;
|
||||
allocInfo.requiredFlags = 0;
|
||||
allocInfo.preferredFlags = 0;
|
||||
allocInfo.memoryTypeBits = 0;
|
||||
allocInfo.pUserData = nullptr;
|
||||
if (image_size <= SMALL_ALLOCATION_MAX_SIZE) {
|
||||
uint32_t mem_type_index = 0;
|
||||
vmaFindMemoryTypeIndexForImageInfo(allocator, &image_create_info, &allocInfo, &mem_type_index);
|
||||
allocInfo.pool = _find_or_create_small_allocs_pool(mem_type_index);
|
||||
}
|
||||
|
||||
Texture texture;
|
||||
|
||||
|
@ -8714,6 +8724,30 @@ void RenderingDeviceVulkan::sync() {
|
|||
local_device_processing = false;
|
||||
}
|
||||
|
||||
VmaPool RenderingDeviceVulkan::_find_or_create_small_allocs_pool(uint32_t p_mem_type_index) {
|
||||
if (small_allocs_pools.has(p_mem_type_index)) {
|
||||
return small_allocs_pools[p_mem_type_index];
|
||||
}
|
||||
|
||||
print_verbose("Creating VMA small objects pool for memory type index " + itos(p_mem_type_index));
|
||||
|
||||
VmaPoolCreateInfo pci;
|
||||
pci.memoryTypeIndex = p_mem_type_index;
|
||||
pci.flags = 0;
|
||||
pci.blockSize = 0;
|
||||
pci.minBlockCount = 0;
|
||||
pci.maxBlockCount = SIZE_MAX;
|
||||
pci.priority = 0.5f;
|
||||
pci.minAllocationAlignment = 0;
|
||||
pci.pMemoryAllocateNext = nullptr;
|
||||
VmaPool pool = VK_NULL_HANDLE;
|
||||
VkResult res = vmaCreatePool(allocator, &pci, &pool);
|
||||
small_allocs_pools[p_mem_type_index] = pool; // Don't try to create it again if failed the first time
|
||||
ERR_FAIL_COND_V_MSG(res, pool, "vmaCreatePool failed with error " + itos(res) + ".");
|
||||
|
||||
return pool;
|
||||
}
|
||||
|
||||
void RenderingDeviceVulkan::_free_pending_resources(int p_frame) {
|
||||
//free in dependency usage order, so nothing weird happens
|
||||
//pipelines
|
||||
|
@ -8834,9 +8868,9 @@ uint64_t RenderingDeviceVulkan::get_memory_usage(MemoryType p_type) const {
|
|||
} else if (p_type == MEMORY_TEXTURES) {
|
||||
return image_memory;
|
||||
} else {
|
||||
VmaStats stats;
|
||||
vmaCalculateStats(allocator, &stats);
|
||||
return stats.total.usedBytes;
|
||||
VmaTotalStatistics stats;
|
||||
vmaCalculateStatistics(allocator, &stats);
|
||||
return stats.total.statistics.allocationBytes;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8935,18 +8969,6 @@ void RenderingDeviceVulkan::initialize(VulkanContext *p_context, bool p_local_de
|
|||
vmaCreateAllocator(&allocatorInfo, &allocator);
|
||||
}
|
||||
|
||||
{ //create pool for small objects
|
||||
VmaPoolCreateInfo pci;
|
||||
pci.flags = VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT;
|
||||
pci.blockSize = 0;
|
||||
pci.minBlockCount = 0;
|
||||
pci.maxBlockCount = SIZE_MAX;
|
||||
pci.priority = 0.5f;
|
||||
pci.minAllocationAlignment = 0;
|
||||
pci.pMemoryAllocateNext = nullptr;
|
||||
vmaCreatePool(allocator, &pci, &small_allocs_pool);
|
||||
}
|
||||
|
||||
frames = memnew_arr(Frame, frame_count);
|
||||
frame = 0;
|
||||
//create setup and frame buffers
|
||||
|
@ -9415,7 +9437,11 @@ void RenderingDeviceVulkan::finalize() {
|
|||
for (int i = 0; i < staging_buffer_blocks.size(); i++) {
|
||||
vmaDestroyBuffer(allocator, staging_buffer_blocks[i].buffer, staging_buffer_blocks[i].allocation);
|
||||
}
|
||||
vmaDestroyPool(allocator, small_allocs_pool);
|
||||
while (small_allocs_pools.size()) {
|
||||
Map<uint32_t, VmaPool>::Element *E = small_allocs_pools.front();
|
||||
vmaDestroyPool(allocator, E->get());
|
||||
small_allocs_pools.erase(E);
|
||||
}
|
||||
vmaDestroyAllocator(allocator);
|
||||
|
||||
while (vertex_formats.size()) {
|
||||
|
|
|
@ -1016,7 +1016,8 @@ class RenderingDeviceVulkan : public RenderingDevice {
|
|||
void _free_pending_resources(int p_frame);
|
||||
|
||||
VmaAllocator allocator = nullptr;
|
||||
VmaPool small_allocs_pool = nullptr;
|
||||
Map<uint32_t, VmaPool> small_allocs_pools;
|
||||
VmaPool _find_or_create_small_allocs_pool(uint32_t p_mem_type_index);
|
||||
|
||||
VulkanContext *context = nullptr;
|
||||
|
||||
|
|
4
thirdparty/README.md
vendored
4
thirdparty/README.md
vendored
|
@ -690,10 +690,10 @@ Files extracted from upstream source:
|
|||
SDK release: https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/master/layers/generated/vk_enum_string_helper.h
|
||||
|
||||
`vk_mem_alloc.h` is taken from https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
|
||||
Version: 3.0.0-development (2022-02-08), commit `a1895bc76547370564d604faa27e0b73de747df1`
|
||||
Version: 3.0.0-development (2022-02-24), commit `dc3f6bb9159df22ceed69c7765ddfb4fbb1b6ed0`
|
||||
`vk_mem_alloc.cpp` is a Godot file and should be preserved on updates.
|
||||
|
||||
Patches in the `patches` directory should be re-applied after updates (order must be followed among the number-prefixed ones).
|
||||
Patches in the `patches` directory should be re-applied after updates.
|
||||
|
||||
|
||||
## wslay
|
||||
|
|
175
thirdparty/volk/volk.c
vendored
175
thirdparty/volk/volk.c
vendored
|
@ -176,6 +176,9 @@ static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*,
|
|||
vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2");
|
||||
vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2");
|
||||
#endif /* defined(VK_VERSION_1_1) */
|
||||
#if defined(VK_VERSION_1_3)
|
||||
vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)load(context, "vkGetPhysicalDeviceToolProperties");
|
||||
#endif /* defined(VK_VERSION_1_3) */
|
||||
#if defined(VK_EXT_acquire_drm_display)
|
||||
vkAcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT)load(context, "vkAcquireDrmDisplayEXT");
|
||||
vkGetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)load(context, "vkGetDrmDisplayEXT");
|
||||
|
@ -503,6 +506,44 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
|
|||
vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore");
|
||||
vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores");
|
||||
#endif /* defined(VK_VERSION_1_2) */
|
||||
#if defined(VK_VERSION_1_3)
|
||||
vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering");
|
||||
vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2");
|
||||
vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2");
|
||||
vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2");
|
||||
vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2");
|
||||
vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2");
|
||||
vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2");
|
||||
vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering");
|
||||
vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2");
|
||||
vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2");
|
||||
vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2");
|
||||
vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode");
|
||||
vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable");
|
||||
vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable");
|
||||
vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp");
|
||||
vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable");
|
||||
vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable");
|
||||
vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2");
|
||||
vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace");
|
||||
vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable");
|
||||
vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology");
|
||||
vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable");
|
||||
vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount");
|
||||
vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp");
|
||||
vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable");
|
||||
vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount");
|
||||
vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2");
|
||||
vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2");
|
||||
vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot");
|
||||
vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot");
|
||||
vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements");
|
||||
vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements");
|
||||
vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements");
|
||||
vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData");
|
||||
vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2");
|
||||
vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData");
|
||||
#endif /* defined(VK_VERSION_1_3) */
|
||||
#if defined(VK_AMD_buffer_marker)
|
||||
vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD");
|
||||
#endif /* defined(VK_AMD_buffer_marker) */
|
||||
|
@ -593,6 +634,9 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
|
|||
vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT");
|
||||
vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT");
|
||||
#endif /* defined(VK_EXT_multi_draw) */
|
||||
#if defined(VK_EXT_pageable_device_local_memory)
|
||||
vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT");
|
||||
#endif /* defined(VK_EXT_pageable_device_local_memory) */
|
||||
#if defined(VK_EXT_private_data)
|
||||
vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT");
|
||||
vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT");
|
||||
|
@ -619,6 +663,13 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
|
|||
#if defined(VK_EXT_vertex_input_dynamic_state)
|
||||
vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT");
|
||||
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
|
||||
#if defined(VK_FUCHSIA_buffer_collection)
|
||||
vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA");
|
||||
vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA");
|
||||
vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA");
|
||||
vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
|
||||
vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA");
|
||||
#endif /* defined(VK_FUCHSIA_buffer_collection) */
|
||||
#if defined(VK_FUCHSIA_external_memory)
|
||||
vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA");
|
||||
vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA");
|
||||
|
@ -714,6 +765,10 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
|
|||
vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR");
|
||||
vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR");
|
||||
#endif /* defined(VK_KHR_draw_indirect_count) */
|
||||
#if defined(VK_KHR_dynamic_rendering)
|
||||
vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR");
|
||||
vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR");
|
||||
#endif /* defined(VK_KHR_dynamic_rendering) */
|
||||
#if defined(VK_KHR_external_fence_fd)
|
||||
vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR");
|
||||
vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR");
|
||||
|
@ -752,6 +807,11 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
|
|||
#if defined(VK_KHR_maintenance3)
|
||||
vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR");
|
||||
#endif /* defined(VK_KHR_maintenance3) */
|
||||
#if defined(VK_KHR_maintenance4)
|
||||
vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR");
|
||||
vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR");
|
||||
vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR");
|
||||
#endif /* defined(VK_KHR_maintenance4) */
|
||||
#if defined(VK_KHR_performance_query)
|
||||
vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR");
|
||||
vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR");
|
||||
|
@ -1063,6 +1123,44 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
|
|||
table->vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore");
|
||||
table->vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores");
|
||||
#endif /* defined(VK_VERSION_1_2) */
|
||||
#if defined(VK_VERSION_1_3)
|
||||
table->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering");
|
||||
table->vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2");
|
||||
table->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2");
|
||||
table->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2");
|
||||
table->vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2");
|
||||
table->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2");
|
||||
table->vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2");
|
||||
table->vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering");
|
||||
table->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2");
|
||||
table->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2");
|
||||
table->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2");
|
||||
table->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode");
|
||||
table->vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable");
|
||||
table->vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable");
|
||||
table->vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp");
|
||||
table->vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable");
|
||||
table->vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable");
|
||||
table->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2");
|
||||
table->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace");
|
||||
table->vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable");
|
||||
table->vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology");
|
||||
table->vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable");
|
||||
table->vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount");
|
||||
table->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp");
|
||||
table->vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable");
|
||||
table->vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount");
|
||||
table->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2");
|
||||
table->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2");
|
||||
table->vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot");
|
||||
table->vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot");
|
||||
table->vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements");
|
||||
table->vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements");
|
||||
table->vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements");
|
||||
table->vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData");
|
||||
table->vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2");
|
||||
table->vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData");
|
||||
#endif /* defined(VK_VERSION_1_3) */
|
||||
#if defined(VK_AMD_buffer_marker)
|
||||
table->vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD");
|
||||
#endif /* defined(VK_AMD_buffer_marker) */
|
||||
|
@ -1153,6 +1251,9 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
|
|||
table->vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT");
|
||||
table->vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT");
|
||||
#endif /* defined(VK_EXT_multi_draw) */
|
||||
#if defined(VK_EXT_pageable_device_local_memory)
|
||||
table->vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT");
|
||||
#endif /* defined(VK_EXT_pageable_device_local_memory) */
|
||||
#if defined(VK_EXT_private_data)
|
||||
table->vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT");
|
||||
table->vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT");
|
||||
|
@ -1179,6 +1280,13 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
|
|||
#if defined(VK_EXT_vertex_input_dynamic_state)
|
||||
table->vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT");
|
||||
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
|
||||
#if defined(VK_FUCHSIA_buffer_collection)
|
||||
table->vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA");
|
||||
table->vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA");
|
||||
table->vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA");
|
||||
table->vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
|
||||
table->vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA");
|
||||
#endif /* defined(VK_FUCHSIA_buffer_collection) */
|
||||
#if defined(VK_FUCHSIA_external_memory)
|
||||
table->vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA");
|
||||
table->vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA");
|
||||
|
@ -1274,6 +1382,10 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
|
|||
table->vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR");
|
||||
table->vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR");
|
||||
#endif /* defined(VK_KHR_draw_indirect_count) */
|
||||
#if defined(VK_KHR_dynamic_rendering)
|
||||
table->vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR");
|
||||
table->vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR");
|
||||
#endif /* defined(VK_KHR_dynamic_rendering) */
|
||||
#if defined(VK_KHR_external_fence_fd)
|
||||
table->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR");
|
||||
table->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR");
|
||||
|
@ -1312,6 +1424,11 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
|
|||
#if defined(VK_KHR_maintenance3)
|
||||
table->vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR");
|
||||
#endif /* defined(VK_KHR_maintenance3) */
|
||||
#if defined(VK_KHR_maintenance4)
|
||||
table->vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR");
|
||||
table->vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR");
|
||||
table->vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR");
|
||||
#endif /* defined(VK_KHR_maintenance4) */
|
||||
#if defined(VK_KHR_performance_query)
|
||||
table->vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR");
|
||||
table->vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR");
|
||||
|
@ -1658,6 +1775,45 @@ PFN_vkResetQueryPool vkResetQueryPool;
|
|||
PFN_vkSignalSemaphore vkSignalSemaphore;
|
||||
PFN_vkWaitSemaphores vkWaitSemaphores;
|
||||
#endif /* defined(VK_VERSION_1_2) */
|
||||
#if defined(VK_VERSION_1_3)
|
||||
PFN_vkCmdBeginRendering vkCmdBeginRendering;
|
||||
PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
|
||||
PFN_vkCmdBlitImage2 vkCmdBlitImage2;
|
||||
PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
|
||||
PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
|
||||
PFN_vkCmdCopyImage2 vkCmdCopyImage2;
|
||||
PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
|
||||
PFN_vkCmdEndRendering vkCmdEndRendering;
|
||||
PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
|
||||
PFN_vkCmdResetEvent2 vkCmdResetEvent2;
|
||||
PFN_vkCmdResolveImage2 vkCmdResolveImage2;
|
||||
PFN_vkCmdSetCullMode vkCmdSetCullMode;
|
||||
PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
|
||||
PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
|
||||
PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
|
||||
PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
|
||||
PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
|
||||
PFN_vkCmdSetEvent2 vkCmdSetEvent2;
|
||||
PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
|
||||
PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
|
||||
PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
|
||||
PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
|
||||
PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
|
||||
PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
|
||||
PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
|
||||
PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
|
||||
PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
|
||||
PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
|
||||
PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
|
||||
PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
|
||||
PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
|
||||
PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
|
||||
PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
|
||||
PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;
|
||||
PFN_vkGetPrivateData vkGetPrivateData;
|
||||
PFN_vkQueueSubmit2 vkQueueSubmit2;
|
||||
PFN_vkSetPrivateData vkSetPrivateData;
|
||||
#endif /* defined(VK_VERSION_1_3) */
|
||||
#if defined(VK_AMD_buffer_marker)
|
||||
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
|
||||
#endif /* defined(VK_AMD_buffer_marker) */
|
||||
|
@ -1792,6 +1948,9 @@ PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
|
|||
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
|
||||
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
|
||||
#endif /* defined(VK_EXT_multi_draw) */
|
||||
#if defined(VK_EXT_pageable_device_local_memory)
|
||||
PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
|
||||
#endif /* defined(VK_EXT_pageable_device_local_memory) */
|
||||
#if defined(VK_EXT_private_data)
|
||||
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
|
||||
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
|
||||
|
@ -1822,6 +1981,13 @@ PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
|
|||
#if defined(VK_EXT_vertex_input_dynamic_state)
|
||||
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
|
||||
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
|
||||
#if defined(VK_FUCHSIA_buffer_collection)
|
||||
PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
|
||||
PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
|
||||
PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
|
||||
PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
|
||||
PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
|
||||
#endif /* defined(VK_FUCHSIA_buffer_collection) */
|
||||
#if defined(VK_FUCHSIA_external_memory)
|
||||
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
|
||||
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
|
||||
|
@ -1938,6 +2104,10 @@ PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
|
|||
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
|
||||
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
|
||||
#endif /* defined(VK_KHR_draw_indirect_count) */
|
||||
#if defined(VK_KHR_dynamic_rendering)
|
||||
PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
|
||||
PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
|
||||
#endif /* defined(VK_KHR_dynamic_rendering) */
|
||||
#if defined(VK_KHR_external_fence_capabilities)
|
||||
PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
|
||||
#endif /* defined(VK_KHR_external_fence_capabilities) */
|
||||
|
@ -2005,6 +2175,11 @@ PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
|
|||
#if defined(VK_KHR_maintenance3)
|
||||
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
|
||||
#endif /* defined(VK_KHR_maintenance3) */
|
||||
#if defined(VK_KHR_maintenance4)
|
||||
PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
|
||||
PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
|
||||
PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
|
||||
#endif /* defined(VK_KHR_maintenance4) */
|
||||
#if defined(VK_KHR_performance_query)
|
||||
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
|
||||
PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
|
||||
|
|
117
thirdparty/volk/volk.h
vendored
117
thirdparty/volk/volk.h
vendored
|
@ -15,7 +15,7 @@
|
|||
#endif
|
||||
|
||||
/* VOLK_GENERATE_VERSION_DEFINE */
|
||||
#define VOLK_HEADER_VERSION 190
|
||||
#define VOLK_HEADER_VERSION 204
|
||||
/* VOLK_GENERATE_VERSION_DEFINE */
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
|
@ -285,6 +285,44 @@ struct VolkDeviceTable
|
|||
PFN_vkSignalSemaphore vkSignalSemaphore;
|
||||
PFN_vkWaitSemaphores vkWaitSemaphores;
|
||||
#endif /* defined(VK_VERSION_1_2) */
|
||||
#if defined(VK_VERSION_1_3)
|
||||
PFN_vkCmdBeginRendering vkCmdBeginRendering;
|
||||
PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
|
||||
PFN_vkCmdBlitImage2 vkCmdBlitImage2;
|
||||
PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
|
||||
PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
|
||||
PFN_vkCmdCopyImage2 vkCmdCopyImage2;
|
||||
PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
|
||||
PFN_vkCmdEndRendering vkCmdEndRendering;
|
||||
PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
|
||||
PFN_vkCmdResetEvent2 vkCmdResetEvent2;
|
||||
PFN_vkCmdResolveImage2 vkCmdResolveImage2;
|
||||
PFN_vkCmdSetCullMode vkCmdSetCullMode;
|
||||
PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
|
||||
PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
|
||||
PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
|
||||
PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
|
||||
PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
|
||||
PFN_vkCmdSetEvent2 vkCmdSetEvent2;
|
||||
PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
|
||||
PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
|
||||
PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
|
||||
PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
|
||||
PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
|
||||
PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
|
||||
PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
|
||||
PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
|
||||
PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
|
||||
PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
|
||||
PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
|
||||
PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
|
||||
PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
|
||||
PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
|
||||
PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
|
||||
PFN_vkGetPrivateData vkGetPrivateData;
|
||||
PFN_vkQueueSubmit2 vkQueueSubmit2;
|
||||
PFN_vkSetPrivateData vkSetPrivateData;
|
||||
#endif /* defined(VK_VERSION_1_3) */
|
||||
#if defined(VK_AMD_buffer_marker)
|
||||
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
|
||||
#endif /* defined(VK_AMD_buffer_marker) */
|
||||
|
@ -375,6 +413,9 @@ struct VolkDeviceTable
|
|||
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
|
||||
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
|
||||
#endif /* defined(VK_EXT_multi_draw) */
|
||||
#if defined(VK_EXT_pageable_device_local_memory)
|
||||
PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
|
||||
#endif /* defined(VK_EXT_pageable_device_local_memory) */
|
||||
#if defined(VK_EXT_private_data)
|
||||
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
|
||||
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
|
||||
|
@ -401,6 +442,13 @@ struct VolkDeviceTable
|
|||
#if defined(VK_EXT_vertex_input_dynamic_state)
|
||||
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
|
||||
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
|
||||
#if defined(VK_FUCHSIA_buffer_collection)
|
||||
PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
|
||||
PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
|
||||
PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
|
||||
PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
|
||||
PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
|
||||
#endif /* defined(VK_FUCHSIA_buffer_collection) */
|
||||
#if defined(VK_FUCHSIA_external_memory)
|
||||
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
|
||||
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
|
||||
|
@ -496,6 +544,10 @@ struct VolkDeviceTable
|
|||
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
|
||||
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
|
||||
#endif /* defined(VK_KHR_draw_indirect_count) */
|
||||
#if defined(VK_KHR_dynamic_rendering)
|
||||
PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
|
||||
PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
|
||||
#endif /* defined(VK_KHR_dynamic_rendering) */
|
||||
#if defined(VK_KHR_external_fence_fd)
|
||||
PFN_vkGetFenceFdKHR vkGetFenceFdKHR;
|
||||
PFN_vkImportFenceFdKHR vkImportFenceFdKHR;
|
||||
|
@ -534,6 +586,11 @@ struct VolkDeviceTable
|
|||
#if defined(VK_KHR_maintenance3)
|
||||
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
|
||||
#endif /* defined(VK_KHR_maintenance3) */
|
||||
#if defined(VK_KHR_maintenance4)
|
||||
PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
|
||||
PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
|
||||
PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
|
||||
#endif /* defined(VK_KHR_maintenance4) */
|
||||
#if defined(VK_KHR_performance_query)
|
||||
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
|
||||
PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR;
|
||||
|
@ -872,6 +929,45 @@ extern PFN_vkResetQueryPool vkResetQueryPool;
|
|||
extern PFN_vkSignalSemaphore vkSignalSemaphore;
|
||||
extern PFN_vkWaitSemaphores vkWaitSemaphores;
|
||||
#endif /* defined(VK_VERSION_1_2) */
|
||||
#if defined(VK_VERSION_1_3)
|
||||
extern PFN_vkCmdBeginRendering vkCmdBeginRendering;
|
||||
extern PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
|
||||
extern PFN_vkCmdBlitImage2 vkCmdBlitImage2;
|
||||
extern PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
|
||||
extern PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
|
||||
extern PFN_vkCmdCopyImage2 vkCmdCopyImage2;
|
||||
extern PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
|
||||
extern PFN_vkCmdEndRendering vkCmdEndRendering;
|
||||
extern PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
|
||||
extern PFN_vkCmdResetEvent2 vkCmdResetEvent2;
|
||||
extern PFN_vkCmdResolveImage2 vkCmdResolveImage2;
|
||||
extern PFN_vkCmdSetCullMode vkCmdSetCullMode;
|
||||
extern PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
|
||||
extern PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
|
||||
extern PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
|
||||
extern PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
|
||||
extern PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
|
||||
extern PFN_vkCmdSetEvent2 vkCmdSetEvent2;
|
||||
extern PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
|
||||
extern PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
|
||||
extern PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
|
||||
extern PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
|
||||
extern PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
|
||||
extern PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
|
||||
extern PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
|
||||
extern PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
|
||||
extern PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
|
||||
extern PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
|
||||
extern PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
|
||||
extern PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
|
||||
extern PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
|
||||
extern PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
|
||||
extern PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
|
||||
extern PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;
|
||||
extern PFN_vkGetPrivateData vkGetPrivateData;
|
||||
extern PFN_vkQueueSubmit2 vkQueueSubmit2;
|
||||
extern PFN_vkSetPrivateData vkSetPrivateData;
|
||||
#endif /* defined(VK_VERSION_1_3) */
|
||||
#if defined(VK_AMD_buffer_marker)
|
||||
extern PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
|
||||
#endif /* defined(VK_AMD_buffer_marker) */
|
||||
|
@ -1006,6 +1102,9 @@ extern PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
|
|||
extern PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
|
||||
extern PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
|
||||
#endif /* defined(VK_EXT_multi_draw) */
|
||||
#if defined(VK_EXT_pageable_device_local_memory)
|
||||
extern PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
|
||||
#endif /* defined(VK_EXT_pageable_device_local_memory) */
|
||||
#if defined(VK_EXT_private_data)
|
||||
extern PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
|
||||
extern PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
|
||||
|
@ -1036,6 +1135,13 @@ extern PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
|
|||
#if defined(VK_EXT_vertex_input_dynamic_state)
|
||||
extern PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
|
||||
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
|
||||
#if defined(VK_FUCHSIA_buffer_collection)
|
||||
extern PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
|
||||
extern PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
|
||||
extern PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
|
||||
extern PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
|
||||
extern PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
|
||||
#endif /* defined(VK_FUCHSIA_buffer_collection) */
|
||||
#if defined(VK_FUCHSIA_external_memory)
|
||||
extern PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
|
||||
extern PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
|
||||
|
@ -1152,6 +1258,10 @@ extern PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
|
|||
extern PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
|
||||
extern PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
|
||||
#endif /* defined(VK_KHR_draw_indirect_count) */
|
||||
#if defined(VK_KHR_dynamic_rendering)
|
||||
extern PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
|
||||
extern PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
|
||||
#endif /* defined(VK_KHR_dynamic_rendering) */
|
||||
#if defined(VK_KHR_external_fence_capabilities)
|
||||
extern PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
|
||||
#endif /* defined(VK_KHR_external_fence_capabilities) */
|
||||
|
@ -1219,6 +1329,11 @@ extern PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
|
|||
#if defined(VK_KHR_maintenance3)
|
||||
extern PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
|
||||
#endif /* defined(VK_KHR_maintenance3) */
|
||||
#if defined(VK_KHR_maintenance4)
|
||||
extern PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
|
||||
extern PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
|
||||
extern PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
|
||||
#endif /* defined(VK_KHR_maintenance4) */
|
||||
#if defined(VK_KHR_performance_query)
|
||||
extern PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
|
||||
extern PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
|
||||
index 52b403bede..d88c305a7c 100644
|
||||
--- a/thirdparty/vulkan/vk_mem_alloc.h
|
||||
+++ b/thirdparty/vulkan/vk_mem_alloc.h
|
||||
@@ -2366,7 +2366,7 @@ VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(
|
||||
*/
|
||||
VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(
|
||||
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
- VmaVirtualAllocation allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
|
||||
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
|
||||
|
||||
/** \brief Allocates new virtual allocation inside given #VmaVirtualBlock.
|
||||
|
||||
diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
|
||||
index d1138a7bc8..74c66b9789 100644
|
||||
--- a/thirdparty/vulkan/vk_mem_alloc.h
|
||||
+++ b/thirdparty/vulkan/vk_mem_alloc.h
|
||||
@@ -2386,7 +2386,7 @@ If the allocation fails due to not enough free space available, `VK_ERROR_OUT_OF
|
||||
VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(
|
||||
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
|
||||
- VmaVirtualAllocation* VMA_NOT_NULL pAllocation,
|
||||
+ VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation,
|
||||
VkDeviceSize* VMA_NULLABLE pOffset);
|
||||
|
||||
/** \brief Frees virtual allocation inside given #VmaVirtualBlock.
|
||||
@@ -2391,7 +2391,7 @@ It is correct to call this function with `allocation == VK_NULL_HANDLE` - it doe
|
||||
*/
|
||||
VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(
|
||||
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
- VmaVirtualAllocation allocation);
|
||||
+ VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation);
|
||||
|
||||
/** \brief Frees all virtual allocations inside given #VmaVirtualBlock.
|
||||
|
||||
@@ -2408,7 +2408,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(
|
||||
*/
|
||||
VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(
|
||||
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
- VmaVirtualAllocation allocation,
|
||||
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation,
|
||||
void* VMA_NULLABLE pUserData);
|
||||
|
||||
/** \brief Calculates and returns statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
|
||||
@@ -17835,7 +17835,7 @@ VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(VmaVirtualBlock VMA_N
|
||||
}
|
||||
|
||||
VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
- VmaVirtualAllocation allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
|
||||
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
|
||||
{
|
||||
VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pVirtualAllocInfo != VMA_NULL);
|
||||
VMA_DEBUG_LOG("vmaGetVirtualAllocationInfo");
|
||||
@@ -17853,7 +17853,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_N
|
||||
return virtualBlock->Allocate(*pCreateInfo, *pAllocation, pOffset);
|
||||
}
|
||||
|
||||
-VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation allocation)
|
||||
+VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation)
|
||||
{
|
||||
if(allocation != VK_NULL_HANDLE)
|
||||
{
|
||||
@@ -17873,7 +17873,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(VmaVirtualBlock VMA_NOT_NUL
|
||||
}
|
||||
|
||||
VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
- VmaVirtualAllocation allocation, void* VMA_NULLABLE pUserData)
|
||||
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, void* VMA_NULLABLE pUserData)
|
||||
{
|
||||
VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
|
||||
VMA_DEBUG_LOG("vmaSetVirtualAllocationUserData");
|
||||
@@ -17848,7 +17848,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_
|
||||
}
|
||||
|
||||
VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
|
||||
- const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation* VMA_NOT_NULL pAllocation,
|
||||
+ const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation,
|
||||
VkDeviceSize* VMA_NULLABLE pOffset)
|
||||
{
|
||||
VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pCreateInfo != VMA_NULL && pAllocation != VMA_NULL);
|
|
@ -1,567 +0,0 @@
|
|||
diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
|
||||
index 74c66b9789..89e00e6326 100644
|
||||
--- a/thirdparty/vulkan/vk_mem_alloc.h
|
||||
+++ b/thirdparty/vulkan/vk_mem_alloc.h
|
||||
@@ -1127,31 +1127,26 @@ typedef struct VmaAllocationCreateInfo
|
||||
/** \brief Intended usage of memory.
|
||||
|
||||
You can leave #VMA_MEMORY_USAGE_UNKNOWN if you specify memory requirements in other way. \n
|
||||
- If `pool` is not null, this member is ignored.
|
||||
*/
|
||||
VmaMemoryUsage usage;
|
||||
/** \brief Flags that must be set in a Memory Type chosen for an allocation.
|
||||
|
||||
- Leave 0 if you specify memory requirements in other way. \n
|
||||
- If `pool` is not null, this member is ignored.*/
|
||||
+ Leave 0 if you specify memory requirements in other way.*/
|
||||
VkMemoryPropertyFlags requiredFlags;
|
||||
/** \brief Flags that preferably should be set in a memory type chosen for an allocation.
|
||||
|
||||
- Set to 0 if no additional flags are preferred. \n
|
||||
- If `pool` is not null, this member is ignored. */
|
||||
+ Set to 0 if no additional flags are preferred.*/
|
||||
VkMemoryPropertyFlags preferredFlags;
|
||||
/** \brief Bitmask containing one bit set for every memory type acceptable for this allocation.
|
||||
|
||||
Value 0 is equivalent to `UINT32_MAX` - it means any memory type is accepted if
|
||||
it meets other requirements specified by this structure, with no further
|
||||
restrictions on memory type index. \n
|
||||
- If `pool` is not null, this member is ignored.
|
||||
*/
|
||||
uint32_t memoryTypeBits;
|
||||
/** \brief Pool that this allocation should be created in.
|
||||
|
||||
- Leave `VK_NULL_HANDLE` to allocate from default pool. If not null, members:
|
||||
- `usage`, `requiredFlags`, `preferredFlags`, `memoryTypeBits` are ignored.
|
||||
+ Leave `VK_NULL_HANDLE` to allocate from default pool.
|
||||
*/
|
||||
VmaPool VMA_NULLABLE pool;
|
||||
/** \brief Custom general-purpose pointer that will be stored in #VmaAllocation, can be read as VmaAllocationInfo::pUserData and changed using vmaSetAllocationUserData().
|
||||
@@ -1173,9 +1168,6 @@ typedef struct VmaAllocationCreateInfo
|
||||
/// Describes parameter of created #VmaPool.
|
||||
typedef struct VmaPoolCreateInfo
|
||||
{
|
||||
- /** \brief Vulkan memory type index to allocate this pool from.
|
||||
- */
|
||||
- uint32_t memoryTypeIndex;
|
||||
/** \brief Use combination of #VmaPoolCreateFlagBits.
|
||||
*/
|
||||
VmaPoolCreateFlags flags;
|
||||
@@ -10904,13 +10896,12 @@ struct VmaPool_T
|
||||
friend struct VmaPoolListItemTraits;
|
||||
VMA_CLASS_NO_COPY(VmaPool_T)
|
||||
public:
|
||||
- VmaBlockVector m_BlockVector;
|
||||
- VmaDedicatedAllocationList m_DedicatedAllocations;
|
||||
+ VmaBlockVector* m_pBlockVectors[VK_MAX_MEMORY_TYPES];
|
||||
+ VmaDedicatedAllocationList m_DedicatedAllocations[VK_MAX_MEMORY_TYPES];
|
||||
|
||||
VmaPool_T(
|
||||
VmaAllocator hAllocator,
|
||||
- const VmaPoolCreateInfo& createInfo,
|
||||
- VkDeviceSize preferredBlockSize);
|
||||
+ const VmaPoolCreateInfo& createInfo);
|
||||
~VmaPool_T();
|
||||
|
||||
uint32_t GetId() const { return m_Id; }
|
||||
@@ -10924,6 +10915,7 @@ public:
|
||||
#endif
|
||||
|
||||
private:
|
||||
+ const VmaAllocator m_hAllocator;
|
||||
uint32_t m_Id;
|
||||
char* m_Name;
|
||||
VmaPool_T* m_PrevPool = VMA_NULL;
|
||||
@@ -11405,8 +11397,10 @@ private:
|
||||
|
||||
void ValidateVulkanFunctions();
|
||||
|
||||
+public: // I'm sorry
|
||||
VkDeviceSize CalcPreferredBlockSize(uint32_t memTypeIndex);
|
||||
|
||||
+private:
|
||||
VkResult AllocateMemoryOfType(
|
||||
VmaPool pool,
|
||||
VkDeviceSize size,
|
||||
@@ -14176,30 +14170,36 @@ void VmaDefragmentationContext_T::AddPools(uint32_t poolCount, const VmaPool* pP
|
||||
{
|
||||
VmaPool pool = pPools[poolIndex];
|
||||
VMA_ASSERT(pool);
|
||||
- // Pools with algorithm other than default are not defragmented.
|
||||
- if (pool->m_BlockVector.GetAlgorithm() == 0)
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
|
||||
{
|
||||
- VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
|
||||
-
|
||||
- for (size_t i = m_CustomPoolContexts.size(); i--; )
|
||||
+ if(pool->m_pBlockVectors[memTypeIndex])
|
||||
{
|
||||
- if (m_CustomPoolContexts[i]->GetCustomPool() == pool)
|
||||
+ // Pools with algorithm other than default are not defragmented.
|
||||
+ if (pool->m_pBlockVectors[memTypeIndex]->GetAlgorithm() == 0)
|
||||
{
|
||||
- pBlockVectorDefragCtx = m_CustomPoolContexts[i];
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
+ VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
|
||||
|
||||
- if (!pBlockVectorDefragCtx)
|
||||
- {
|
||||
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
|
||||
- m_hAllocator,
|
||||
- pool,
|
||||
- &pool->m_BlockVector);
|
||||
- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
|
||||
- }
|
||||
+ for (size_t i = m_CustomPoolContexts.size(); i--; )
|
||||
+ {
|
||||
+ if (m_CustomPoolContexts[i]->GetCustomPool() == pool)
|
||||
+ {
|
||||
+ pBlockVectorDefragCtx = m_CustomPoolContexts[i];
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!pBlockVectorDefragCtx)
|
||||
+ {
|
||||
+ pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
|
||||
+ m_hAllocator,
|
||||
+ pool,
|
||||
+ pool->m_pBlockVectors[memTypeIndex]);
|
||||
+ m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
|
||||
+ }
|
||||
|
||||
- pBlockVectorDefragCtx->AddAll();
|
||||
+ pBlockVectorDefragCtx->AddAll();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14214,6 +14214,7 @@ void VmaDefragmentationContext_T::AddAllocations(
|
||||
{
|
||||
const VmaAllocation hAlloc = pAllocations[allocIndex];
|
||||
VMA_ASSERT(hAlloc);
|
||||
+ const uint32_t memTypeIndex = hAlloc->GetMemoryTypeIndex();
|
||||
// DedicatedAlloc cannot be defragmented.
|
||||
if (hAlloc->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK)
|
||||
{
|
||||
@@ -14224,7 +14225,7 @@ void VmaDefragmentationContext_T::AddAllocations(
|
||||
if (hAllocPool != VK_NULL_HANDLE)
|
||||
{
|
||||
// Pools with algorithm other than default are not defragmented.
|
||||
- if (hAllocPool->m_BlockVector.GetAlgorithm() == 0)
|
||||
+ if (hAllocPool->m_pBlockVectors[memTypeIndex]->GetAlgorithm() == 0)
|
||||
{
|
||||
for (size_t i = m_CustomPoolContexts.size(); i--; )
|
||||
{
|
||||
@@ -14239,7 +14240,7 @@ void VmaDefragmentationContext_T::AddAllocations(
|
||||
pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
|
||||
m_hAllocator,
|
||||
hAllocPool,
|
||||
- &hAllocPool->m_BlockVector);
|
||||
+ hAllocPool->m_pBlockVectors[memTypeIndex]);
|
||||
m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
|
||||
}
|
||||
}
|
||||
@@ -14247,7 +14248,6 @@ void VmaDefragmentationContext_T::AddAllocations(
|
||||
// This allocation belongs to default pool.
|
||||
else
|
||||
{
|
||||
- const uint32_t memTypeIndex = hAlloc->GetMemoryTypeIndex();
|
||||
pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];
|
||||
if (!pBlockVectorDefragCtx)
|
||||
{
|
||||
@@ -14481,41 +14481,61 @@ VkResult VmaDefragmentationContext_T::DefragmentPassEnd()
|
||||
#ifndef _VMA_POOL_T_FUNCTIONS
|
||||
VmaPool_T::VmaPool_T(
|
||||
VmaAllocator hAllocator,
|
||||
- const VmaPoolCreateInfo& createInfo,
|
||||
- VkDeviceSize preferredBlockSize)
|
||||
- : m_BlockVector(
|
||||
- hAllocator,
|
||||
- this, // hParentPool
|
||||
- createInfo.memoryTypeIndex,
|
||||
- createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,
|
||||
- createInfo.minBlockCount,
|
||||
- createInfo.maxBlockCount,
|
||||
- (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
|
||||
- createInfo.blockSize != 0, // explicitBlockSize
|
||||
- createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
|
||||
- createInfo.priority,
|
||||
- VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),
|
||||
- createInfo.pMemoryAllocateNext),
|
||||
+ const VmaPoolCreateInfo& createInfo) :
|
||||
+ m_hAllocator(hAllocator),
|
||||
+ m_pBlockVectors{},
|
||||
m_Id(0),
|
||||
- m_Name(VMA_NULL) {}
|
||||
+ m_Name(VMA_NULL)
|
||||
+{
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
|
||||
+ {
|
||||
+ // Create only supported types
|
||||
+ if((hAllocator->GetGlobalMemoryTypeBits() & (1u << memTypeIndex)) != 0)
|
||||
+ {
|
||||
+ m_pBlockVectors[memTypeIndex] = vma_new(hAllocator, VmaBlockVector)(
|
||||
+ hAllocator,
|
||||
+ this, // hParentPool
|
||||
+ memTypeIndex,
|
||||
+ createInfo.blockSize != 0 ? createInfo.blockSize : hAllocator->CalcPreferredBlockSize(memTypeIndex),
|
||||
+ createInfo.minBlockCount,
|
||||
+ createInfo.maxBlockCount,
|
||||
+ (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
|
||||
+ false, // explicitBlockSize
|
||||
+ createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
|
||||
+ createInfo.priority,
|
||||
+ VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(memTypeIndex), createInfo.minAllocationAlignment),
|
||||
+ createInfo.pMemoryAllocateNext);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
||||
VmaPool_T::~VmaPool_T()
|
||||
{
|
||||
VMA_ASSERT(m_PrevPool == VMA_NULL && m_NextPool == VMA_NULL);
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
|
||||
+ {
|
||||
+ vma_delete(m_hAllocator, m_pBlockVectors[memTypeIndex]);
|
||||
+ }
|
||||
}
|
||||
|
||||
void VmaPool_T::SetName(const char* pName)
|
||||
{
|
||||
- const VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()->GetAllocationCallbacks();
|
||||
- VmaFreeString(allocs, m_Name);
|
||||
-
|
||||
- if (pName != VMA_NULL)
|
||||
- {
|
||||
- m_Name = VmaCreateStringCopy(allocs, pName);
|
||||
- }
|
||||
- else
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
|
||||
{
|
||||
- m_Name = VMA_NULL;
|
||||
+ if(m_pBlockVectors[memTypeIndex])
|
||||
+ {
|
||||
+ const VkAllocationCallbacks* allocs = m_pBlockVectors[memTypeIndex]->GetAllocator()->GetAllocationCallbacks();
|
||||
+ VmaFreeString(allocs, m_Name);
|
||||
+
|
||||
+ if (pName != VMA_NULL)
|
||||
+ {
|
||||
+ m_Name = VmaCreateStringCopy(allocs, pName);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ m_Name = VMA_NULL;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
#endif // _VMA_POOL_T_FUNCTIONS
|
||||
@@ -15377,15 +15397,22 @@ VkResult VmaAllocator_T::CalcAllocationParams(
|
||||
inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
|
||||
}
|
||||
|
||||
- if(inoutCreateInfo.pool != VK_NULL_HANDLE)
|
||||
+ if(inoutCreateInfo.pool != VK_NULL_HANDLE && (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
|
||||
{
|
||||
- if(inoutCreateInfo.pool->m_BlockVector.HasExplicitBlockSize() &&
|
||||
- (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
|
||||
+ // Assuming here every block has the same block size and priority.
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
{
|
||||
- VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
|
||||
- return VK_ERROR_FEATURE_NOT_PRESENT;
|
||||
+ if(inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex])
|
||||
+ {
|
||||
+ if(inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex]->HasExplicitBlockSize())
|
||||
+ {
|
||||
+ VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
|
||||
+ return VK_ERROR_FEATURE_NOT_PRESENT;
|
||||
+ }
|
||||
+ inoutCreateInfo.priority = inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex]->GetPriority();
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
- inoutCreateInfo.priority = inoutCreateInfo.pool->m_BlockVector.GetPriority();
|
||||
}
|
||||
|
||||
if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 &&
|
||||
@@ -15429,67 +15456,46 @@ VkResult VmaAllocator_T::AllocateMemory(
|
||||
if(res != VK_SUCCESS)
|
||||
return res;
|
||||
|
||||
- if(createInfoFinal.pool != VK_NULL_HANDLE)
|
||||
+ // Bit mask of memory Vulkan types acceptable for this allocation.
|
||||
+ uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
|
||||
+ uint32_t memTypeIndex = UINT32_MAX;
|
||||
+ res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
|
||||
+ // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
|
||||
+ if(res != VK_SUCCESS)
|
||||
+ return res;
|
||||
+ do
|
||||
{
|
||||
- VmaBlockVector& blockVector = createInfoFinal.pool->m_BlockVector;
|
||||
- return AllocateMemoryOfType(
|
||||
+ VmaBlockVector* blockVector = createInfoFinal.pool == VK_NULL_HANDLE ? m_pBlockVectors[memTypeIndex] : createInfoFinal.pool->m_pBlockVectors[memTypeIndex];
|
||||
+ VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
|
||||
+ VmaDedicatedAllocationList& dedicatedAllocations = createInfoFinal.pool == VK_NULL_HANDLE ? m_DedicatedAllocations[memTypeIndex] : createInfoFinal.pool->m_DedicatedAllocations[memTypeIndex];
|
||||
+ res = AllocateMemoryOfType(
|
||||
createInfoFinal.pool,
|
||||
vkMemReq.size,
|
||||
vkMemReq.alignment,
|
||||
- prefersDedicatedAllocation,
|
||||
+ requiresDedicatedAllocation || prefersDedicatedAllocation,
|
||||
dedicatedBuffer,
|
||||
dedicatedBufferUsage,
|
||||
dedicatedImage,
|
||||
createInfoFinal,
|
||||
- blockVector.GetMemoryTypeIndex(),
|
||||
+ memTypeIndex,
|
||||
suballocType,
|
||||
- createInfoFinal.pool->m_DedicatedAllocations,
|
||||
- blockVector,
|
||||
+ dedicatedAllocations,
|
||||
+ *blockVector,
|
||||
allocationCount,
|
||||
pAllocations);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- // Bit mask of memory Vulkan types acceptable for this allocation.
|
||||
- uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
|
||||
- uint32_t memTypeIndex = UINT32_MAX;
|
||||
- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
|
||||
- // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
|
||||
- if(res != VK_SUCCESS)
|
||||
- return res;
|
||||
- do
|
||||
- {
|
||||
- VmaBlockVector* blockVector = m_pBlockVectors[memTypeIndex];
|
||||
- VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
|
||||
- res = AllocateMemoryOfType(
|
||||
- VK_NULL_HANDLE,
|
||||
- vkMemReq.size,
|
||||
- vkMemReq.alignment,
|
||||
- requiresDedicatedAllocation || prefersDedicatedAllocation,
|
||||
- dedicatedBuffer,
|
||||
- dedicatedBufferUsage,
|
||||
- dedicatedImage,
|
||||
- createInfoFinal,
|
||||
- memTypeIndex,
|
||||
- suballocType,
|
||||
- m_DedicatedAllocations[memTypeIndex],
|
||||
- *blockVector,
|
||||
- allocationCount,
|
||||
- pAllocations);
|
||||
- // Allocation succeeded
|
||||
- if(res == VK_SUCCESS)
|
||||
- return VK_SUCCESS;
|
||||
+ // Allocation succeeded
|
||||
+ if(res == VK_SUCCESS)
|
||||
+ return VK_SUCCESS;
|
||||
|
||||
- // Remove old memTypeIndex from list of possibilities.
|
||||
- memoryTypeBits &= ~(1u << memTypeIndex);
|
||||
- // Find alternative memTypeIndex.
|
||||
- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
|
||||
- } while(res == VK_SUCCESS);
|
||||
+ // Remove old memTypeIndex from list of possibilities.
|
||||
+ memoryTypeBits &= ~(1u << memTypeIndex);
|
||||
+ // Find alternative memTypeIndex.
|
||||
+ res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
|
||||
+ } while(res == VK_SUCCESS);
|
||||
|
||||
- // No other matching memory type index could be found.
|
||||
- // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
|
||||
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
||||
- }
|
||||
+ // No other matching memory type index could be found.
|
||||
+ // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
|
||||
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
||||
}
|
||||
|
||||
void VmaAllocator_T::FreeMemory(
|
||||
@@ -15515,16 +15521,16 @@ void VmaAllocator_T::FreeMemory(
|
||||
{
|
||||
VmaBlockVector* pBlockVector = VMA_NULL;
|
||||
VmaPool hPool = allocation->GetParentPool();
|
||||
+ const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
|
||||
if(hPool != VK_NULL_HANDLE)
|
||||
{
|
||||
- pBlockVector = &hPool->m_BlockVector;
|
||||
+ pBlockVector = hPool->m_pBlockVectors[memTypeIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
- const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
|
||||
pBlockVector = m_pBlockVectors[memTypeIndex];
|
||||
- VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
|
||||
}
|
||||
+ VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
|
||||
pBlockVector->Free(allocation);
|
||||
}
|
||||
break;
|
||||
@@ -15564,11 +15570,17 @@ void VmaAllocator_T::CalculateStats(VmaStats* pStats)
|
||||
VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
|
||||
for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
|
||||
{
|
||||
- VmaBlockVector& blockVector = pool->m_BlockVector;
|
||||
- blockVector.AddStats(pStats);
|
||||
- const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
|
||||
- const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
|
||||
- pool->m_DedicatedAllocations.AddStats(pStats, memTypeIndex, memHeapIndex);
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
+ {
|
||||
+ if (pool->m_pBlockVectors[memTypeIndex])
|
||||
+ {
|
||||
+ VmaBlockVector& blockVector = *pool->m_pBlockVectors[memTypeIndex];
|
||||
+ blockVector.AddStats(pStats);
|
||||
+ const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
|
||||
+ const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
|
||||
+ pool->m_DedicatedAllocations[memTypeIndex].AddStats(pStats, memTypeIndex, memHeapIndex);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15720,27 +15732,26 @@ VkResult VmaAllocator_T::CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPoo
|
||||
{
|
||||
return VK_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
- // Memory type index out of range or forbidden.
|
||||
- if(pCreateInfo->memoryTypeIndex >= GetMemoryTypeCount() ||
|
||||
- ((1u << pCreateInfo->memoryTypeIndex) & m_GlobalMemoryTypeBits) == 0)
|
||||
- {
|
||||
- return VK_ERROR_FEATURE_NOT_PRESENT;
|
||||
- }
|
||||
if(newCreateInfo.minAllocationAlignment > 0)
|
||||
{
|
||||
VMA_ASSERT(VmaIsPow2(newCreateInfo.minAllocationAlignment));
|
||||
}
|
||||
|
||||
- const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(newCreateInfo.memoryTypeIndex);
|
||||
-
|
||||
- *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo, preferredBlockSize);
|
||||
+ *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo);
|
||||
|
||||
- VkResult res = (*pPool)->m_BlockVector.CreateMinBlocks();
|
||||
- if(res != VK_SUCCESS)
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
{
|
||||
- vma_delete(this, *pPool);
|
||||
- *pPool = VMA_NULL;
|
||||
- return res;
|
||||
+ // Create only supported types
|
||||
+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
|
||||
+ {
|
||||
+ VkResult res = (*pPool)->m_pBlockVectors[memTypeIndex]->CreateMinBlocks();
|
||||
+ if(res != VK_SUCCESS)
|
||||
+ {
|
||||
+ vma_delete(this, *pPool);
|
||||
+ *pPool = VMA_NULL;
|
||||
+ return res;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
// Add to m_Pools.
|
||||
@@ -15772,8 +15783,14 @@ void VmaAllocator_T::GetPoolStats(VmaPool pool, VmaPoolStats* pPoolStats)
|
||||
pPoolStats->unusedRangeCount = 0;
|
||||
pPoolStats->blockCount = 0;
|
||||
|
||||
- pool->m_BlockVector.AddPoolStats(pPoolStats);
|
||||
- pool->m_DedicatedAllocations.AddPoolStats(pPoolStats);
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
+ {
|
||||
+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
|
||||
+ {
|
||||
+ pool->m_pBlockVectors[memTypeIndex]->AddPoolStats(pPoolStats);
|
||||
+ pool->m_DedicatedAllocations[memTypeIndex].AddPoolStats(pPoolStats);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
|
||||
@@ -15790,7 +15807,13 @@ void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
|
||||
|
||||
VkResult VmaAllocator_T::CheckPoolCorruption(VmaPool hPool)
|
||||
{
|
||||
- return hPool->m_BlockVector.CheckCorruption();
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
+ {
|
||||
+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
|
||||
+ {
|
||||
+ return hPool->m_pBlockVectors[memTypeIndex]->CheckCorruption();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
|
||||
@@ -15822,18 +15845,21 @@ VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
|
||||
VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
|
||||
for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
|
||||
{
|
||||
- if(((1u << pool->m_BlockVector.GetMemoryTypeIndex()) & memoryTypeBits) != 0)
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
{
|
||||
- VkResult localRes = pool->m_BlockVector.CheckCorruption();
|
||||
- switch(localRes)
|
||||
+ if(pool->m_pBlockVectors[memTypeIndex] && ((1u << memTypeIndex) & memoryTypeBits) != 0)
|
||||
{
|
||||
- case VK_ERROR_FEATURE_NOT_PRESENT:
|
||||
- break;
|
||||
- case VK_SUCCESS:
|
||||
- finalRes = VK_SUCCESS;
|
||||
- break;
|
||||
- default:
|
||||
- return localRes;
|
||||
+ VkResult localRes = pool->m_pBlockVectors[memTypeIndex]->CheckCorruption();
|
||||
+ switch(localRes)
|
||||
+ {
|
||||
+ case VK_ERROR_FEATURE_NOT_PRESENT:
|
||||
+ break;
|
||||
+ case VK_SUCCESS:
|
||||
+ finalRes = VK_SUCCESS;
|
||||
+ break;
|
||||
+ default:
|
||||
+ return localRes;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16155,7 +16181,7 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
|
||||
else
|
||||
{
|
||||
// Custom pool
|
||||
- parentPool->m_DedicatedAllocations.Unregister(allocation);
|
||||
+ parentPool->m_DedicatedAllocations[memTypeIndex].Unregister(allocation);
|
||||
}
|
||||
|
||||
VkDeviceMemory hMemory = allocation->GetMemory();
|
||||
@@ -16430,12 +16456,18 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
|
||||
json.EndString();
|
||||
|
||||
json.BeginObject();
|
||||
- pool->m_BlockVector.PrintDetailedMap(json);
|
||||
-
|
||||
- if (!pool->m_DedicatedAllocations.IsEmpty())
|
||||
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
|
||||
{
|
||||
- json.WriteString("DedicatedAllocations");
|
||||
- pool->m_DedicatedAllocations.BuildStatsString(json);
|
||||
+ if (pool->m_pBlockVectors[memTypeIndex])
|
||||
+ {
|
||||
+ pool->m_pBlockVectors[memTypeIndex]->PrintDetailedMap(json);
|
||||
+ }
|
||||
+
|
||||
+ if (!pool->m_DedicatedAllocations[memTypeIndex].IsEmpty())
|
||||
+ {
|
||||
+ json.WriteString("DedicatedAllocations");
|
||||
+ pool->m_DedicatedAllocations->BuildStatsString(json);
|
||||
+ }
|
||||
}
|
||||
json.EndObject();
|
||||
}
|
6845
thirdparty/vulkan/vk_mem_alloc.h
vendored
6845
thirdparty/vulkan/vk_mem_alloc.h
vendored
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue