diff --git a/README.md b/README.md index 10be08b..6815d7a 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ Additional features: - JSON dump: Obtain a string in JSON format with detailed map of internal state, including list of allocations and gaps between them. - Convert this JSON dump into a picture to visualize your memory. See [tools/VmaDumpVis](tools/VmaDumpVis/README.md). - Debugging incorrect memory usage: Enable initialization of all allocated memory with a bit pattern to detect usage of uninitialized or freed memory. Enable validation of a magic number before and after every allocation to detect out-of-bounds memory corruption. +- Record and replay sequence of calls to library functions to a file to check correctness, measure performance, and gather statistics. # Prequisites diff --git a/bin/VmaReplay_Release_vs2015.exe b/bin/VmaReplay_Release_vs2015.exe new file mode 100644 index 0000000..1e08a58 Binary files /dev/null and b/bin/VmaReplay_Release_vs2015.exe differ diff --git a/bin/VulkanSample_Release_vs2015.exe b/bin/VulkanSample_Release_vs2015.exe index 05ae82b..3958098 100644 Binary files a/bin/VulkanSample_Release_vs2015.exe and b/bin/VulkanSample_Release_vs2015.exe differ diff --git a/docs/Recording file format.md b/docs/Recording file format.md new file mode 100644 index 0000000..b01eaf4 --- /dev/null +++ b/docs/Recording file format.md @@ -0,0 +1,287 @@ +This is an official documentation for file format used by Vulkan Memory Allocator library +to record and replay sequence of calls to its functions. +This feature can be enabled by using `VmaAllocatorCreateInfo::pRecordSettings` structure members. +For details, see main documentation of the library. +Playback can be launched using **VmaReplay** console application. + +Recording is a text file. +Line endings: Unix `'\n'`. +Character encoding: single-byte (can be ASCII or UTF-8, whaterver you use in custom strings). +Suggested file extension: **csv**. File can be processed sequentially - no random access is needed. +Each line forms a separate entry. +Each line consists of a set of values (also called columns), separated by comma `','` (hence "CSV" format - Comma Separated Values). +Number of columns is different in different lines. + +# Header + +First line identifies file format. It must always be: + + Vulkan Memory Allocator,Calls recording + +Second line identifies format version, where first column is major version and second column is minor version. +Formats with only minor version incremented are backward compatible. +VmaReplay application supports all older versions. +Current version is: + + 1,3 + +# Configuration + +Header is followed by mandatory configuration section (min format version 1.3). It starts with line: + + Config,Begin + +And ends with line: + + Config,End + +Between them there can be zero or more lines with configuration options. They store values of various variables from the current environment from the time of recording, like properties and limits of Vulkan physical device, available memory heaps and types, enabled Vulkan extensions, as well macros that configure VMA internals. Supported configuration options are: + + PhysicalDevice,apiVersion, + PhysicalDevice,driverVersion, + PhysicalDevice,vendorID, + PhysicalDevice,deviceID, + PhysicalDevice,deviceType, + PhysicalDevice,deviceName, + + PhysicalDeviceLimits,maxMemoryAllocationCount, + PhysicalDeviceLimits,bufferImageGranularity, + PhysicalDeviceLimits,nonCoherentAtomSize, + + PhysicalDeviceMemory,HeapCount, + PhysicalDeviceMemory,Heap,,size, + PhysicalDeviceMemory,Heap,,flags, + PhysicalDeviceMemory,TypeCount, + PhysicalDeviceMemory,Type,,heapIndex, + PhysicalDeviceMemory,Type,,propertyFlags, + + Extension,VK_KHR_dedicated_allocation, + + Macro,VMA_DEBUG_ALWAYS_DEDICATED_MEMORY, + Macro,VMA_DEBUG_ALIGNMENT, + Macro,VMA_DEBUG_MARGIN, + Macro,VMA_DEBUG_INITIALIZE_ALLOCATIONS, + Macro,VMA_DEBUG_DETECT_CORRUPTION, + Macro,VMA_DEBUG_GLOBAL_MUTEX, + Macro,VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY, + Macro,VMA_SMALL_HEAP_MAX_SIZE, + Macro,VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE, + +# Function calls + +Remaining lines contain recorded calls to VMA functions. First columns are always: + +- Thread ID : uint32 +- Time since first call : float, in seconds +- VMA frame index : uint32 +- Function name : string + +Remaining columns are function parameters and output, depending on function name, which can be: + +**vmaCreateAllocator, vmaDestroyAllocator** + +No parameters. + +**vmaCreatePool** + +- memoryTypeIndex : uint32 +- flags : uint32 +- blockSize : uint64 +- minBlockCount : uint64 +- maxBlockCount : uint64 +- frameInUseCount : uint32 +- pool (output) : pointer + +**vmaDestroyPool** + +- pool : pointer + +**vmaSetAllocationUserData** + +- allocation : pointer +- pUserData : string (may contain additional commas) + +**vmaCreateBuffer** + +- bufferCreateInfo.flags : uint32 +- bufferCreateInfo.size : uint64 +- bufferCreateInfo.usage : uint32 +- bufferCreateInfo.sharingMode : uint32 +- allocationCreateInfo.flags : uint32 +- allocationCreateInfo.usage : uint32 +- allocationCreateInfo.requiredFlags : uint32 +- allocationCreateInfo.preferredFlags : uint32 +- allocationCreateInfo.memoryTypeBits : uint32 +- allocationCreateInfo.pool : pointer +- allocation (output) : pointer +- allocationCreateInfo.pUserData : string (may contain additional commas) + +**vmaDestroyBuffer** + +- allocation : pointer + +**vmaCreateImage** + +- imageCreateInfo.flags : uint32 +- imageCreateInfo.imageType : uint32 +- imageCreateInfo.format : uint32 +- imageCreateInfo.extent.width : uint32 +- imageCreateInfo.extent.height : uint32 +- imageCreateInfo.extent.depth : uint32 +- imageCreateInfo.mipLevels : uint32 +- imageCreateInfo.arrayLayers : uint32 +- imageCreateInfo.samples : uint32 +- imageCreateInfo.tiling : uint32 +- imageCreateInfo.usage : uint32 +- imageCreateInfo.sharingMode : uint32 +- imageCreateInfo.initialLayout : uint32 +- allocationCreateInfo.flags : uint32 +- allocationCreateInfo.usage : uint32 +- allocationCreateInfo.requiredFlags : uint32 +- allocationCreateInfo.preferredFlags : uint32 +- allocationCreateInfo.memoryTypeBits : uint32 +- allocationCreateInfo.pool : pointer +- allocation (output) : pointer +- allocationCreateInfo.pUserData : string (may contain additional commas) + +**vmaDestroyImage** + +- allocation : pointer + +**vmaFreeMemory** (min format version 1.1) + +- allocation : pointer + +**vmaCreateLostAllocation** (min format version 1.2) + +- allocation (output) : pointer + +**vmaAllocateMemory** (min format version 1.2) + +- vkMemoryRequirements.size : uint64 +- vkMemoryRequirements.alignment : uint64 +- vkMemoryRequirements.memoryTypeBits : uint32 +- allocationCreateInfo.flags : uint32 +- allocationCreateInfo.usage : uint32 +- allocationCreateInfo.requiredFlags : uint32 +- allocationCreateInfo.preferredFlags : uint32 +- allocationCreateInfo.memoryTypeBits : uint32 +- allocationCreateInfo.pool : pointer +- allocation (output) : pointer +- allocationCreateInfo.pUserData : string (may contain additional commas) + +**vmaAllocateMemoryForBuffer, vmaAllocateMemoryForImage** (min format version 1.2) + +- vkMemoryRequirements.size : uint64 +- vkMemoryRequirements.alignment : uint64 +- vkMemoryRequirements.memoryTypeBits : uint32 +- requiresDedicatedAllocation : bool +- prefersDedicatedAllocation : bool +- allocationCreateInfo.flags : uint32 +- allocationCreateInfo.usage : uint32 +- allocationCreateInfo.requiredFlags : uint32 +- allocationCreateInfo.preferredFlags : uint32 +- allocationCreateInfo.memoryTypeBits : uint32 +- allocationCreateInfo.pool : pointer +- allocation (output) : pointer +- allocationCreateInfo.pUserData : string (may contain additional commas) + +**vmaMapMemory, vmaUnmapMemory** (min format version 1.2) + +- allocation : pointer + +**vmaFlushAllocation, vmaInvalidateAllocation** (min format version 1.2) + +- allocation : pointer +- offset : uint64 +- size : uint64 + +**vmaTouchAllocation, vmaGetAllocationInfo** (min format version 1.2) + +- allocation : pointer + +**vmaMakePoolAllocationsLost** (min format version: 1.2) + +- pool : pointer + +# Data types + +**bool** + +Encoded as `0` for false or `1` for true. + +**uint32, uint64** + +Encoded in decimal format. + +**pointer** + +Encoded in hexadecimal format. + +**pUserData** + +If `pUserData` was a pointer, it is encoded as hexadecimal string. +If `VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT` was used with the allocation, the string is written as-is. +It may contain additional commas. +It should not contain end-of-line characters - results are then undefined. + +# Example file + + Vulkan Memory Allocator,Calls recording + 1,3 + Config,Begin + PhysicalDevice,apiVersion,4198477 + PhysicalDevice,driverVersion,8388653 + PhysicalDevice,vendorID,4098 + PhysicalDevice,deviceID,26751 + PhysicalDevice,deviceType,2 + PhysicalDevice,deviceName,Radeon RX Vega + PhysicalDeviceLimits,maxMemoryAllocationCount,4096 + PhysicalDeviceLimits,bufferImageGranularity,1 + PhysicalDeviceLimits,nonCoherentAtomSize,128 + PhysicalDeviceMemory,HeapCount,3 + PhysicalDeviceMemory,Heap,0,size,8304721920 + PhysicalDeviceMemory,Heap,0,flags,3 + PhysicalDeviceMemory,Heap,1,size,8286175232 + PhysicalDeviceMemory,Heap,1,flags,0 + PhysicalDeviceMemory,Heap,2,size,268435456 + PhysicalDeviceMemory,Heap,2,flags,3 + PhysicalDeviceMemory,TypeCount,4 + PhysicalDeviceMemory,Type,0,heapIndex,0 + PhysicalDeviceMemory,Type,0,propertyFlags,1 + PhysicalDeviceMemory,Type,1,heapIndex,1 + PhysicalDeviceMemory,Type,1,propertyFlags,6 + PhysicalDeviceMemory,Type,2,heapIndex,2 + PhysicalDeviceMemory,Type,2,propertyFlags,7 + PhysicalDeviceMemory,Type,3,heapIndex,1 + PhysicalDeviceMemory,Type,3,propertyFlags,14 + Extension,VK_KHR_dedicated_allocation,1 + Macro,VMA_DEBUG_ALWAYS_DEDICATED_MEMORY,0 + Macro,VMA_DEBUG_ALIGNMENT,1 + Macro,VMA_DEBUG_MARGIN,0 + Macro,VMA_DEBUG_INITIALIZE_ALLOCATIONS,0 + Macro,VMA_DEBUG_DETECT_CORRUPTION,0 + Macro,VMA_DEBUG_GLOBAL_MUTEX,0 + Macro,VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY,1 + Macro,VMA_SMALL_HEAP_MAX_SIZE,1073741824 + Macro,VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE,268435456 + Config,End + 12552,0.000,0,vmaCreateAllocator + 12552,0.010,0,vmaCreateImage,0,1,37,128,128,1,1,1,1,1,1,0,8,36,2,0,0,0,0000000000000000,000001D85B8B1A80, + 12552,0.010,0,vmaSetAllocationUserData,000001D85B8B1A80,Ala ma kota + 12552,0.015,0,vmaCreateImage,0,1,37,128,128,1,1,1,1,0,6,0,0,0,1,0,0,0,0000000000000000,000001D85B8B1620, + 12552,0.017,0,vmaDestroyImage,000001D85B8B1A80 + 12552,0.017,0,vmaCreateBuffer,0,768,1,0,4,2,0,0,0,0000000000000000,000001D85B8B19E0, + 12552,0.017,0,vmaCreateBuffer,0,768,130,0,0,1,0,0,0,0000000000000000,000001D85B8B1A80, + 12552,0.017,0,vmaCreateBuffer,0,60,1,0,4,2,0,0,0,0000000000000000,000001D85B8B1DA0, + 12552,0.017,0,vmaCreateBuffer,0,60,66,0,0,1,0,0,0,0000000000000000,000001D85B8B16C0, + 12552,0.017,0,vmaDestroyBuffer,000001D85B8B1DA0 + 12552,0.017,0,vmaDestroyBuffer,000001D85B8B19E0 + 12552,0.022,0,vmaCreateImage,0,1,126,1424,704,1,1,1,1,0,32,0,0,0,1,0,0,0,0000000000000000,000001D85B8B1EE0, + 12552,0.048,0,vmaDestroyImage,000001D85B8B1EE0 + 12552,0.053,0,vmaCreateImage,0,1,126,1424,704,1,1,1,1,0,32,0,0,0,1,0,0,0,0000000000000000,000001D85B8B1EE0, + 12552,0.662,0,vmaDestroyImage,000001D85B8B1EE0 + 12552,0.695,0,vmaDestroyImage,000001D85B8B1620 + 12552,0.695,0,vmaDestroyBuffer,000001D85B8B16C0 + 12552,0.695,0,vmaDestroyBuffer,000001D85B8B1A80 + 12552,0.695,0,vmaDestroyAllocator \ No newline at end of file diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 18ddbd5..37ef74d 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -75,9 +75,10 @@ $(function() {  CVmaPoolRepresents custom memory pool  CVmaPoolCreateInfoDescribes parameter of created VmaPool  CVmaPoolStatsDescribes parameter of existing VmaPool - CVmaStatInfoCalculated statistics of memory usage in entire allocator - CVmaStatsGeneral statistics from current state of Allocator - CVmaVulkanFunctionsPointers to some Vulkan functions - a subset used by the library + CVmaRecordSettingsParameters for recording calls to VMA functions. To be used in VmaAllocatorCreateInfo::pRecordSettings + CVmaStatInfoCalculated statistics of memory usage in entire allocator + CVmaStatsGeneral statistics from current state of Allocator + CVmaVulkanFunctionsPointers to some Vulkan functions - a subset used by the library diff --git a/docs/html/classes.html b/docs/html/classes.html index b900f2a..099f7e3 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -65,10 +65,10 @@ $(function() { - - - + + + +
  v  
-
VmaAllocationInfo   VmaDefragmentationStats   VmaPoolStats   
VmaAllocator   VmaDeviceMemoryCallbacks   VmaStatInfo   
VmaAllocation   VmaAllocatorCreateInfo   VmaPool   VmaStats   
VmaAllocationCreateInfo   VmaDefragmentationInfo   VmaPoolCreateInfo   VmaVulkanFunctions   
VmaAllocationInfo   VmaDefragmentationStats   VmaPoolStats   VmaVulkanFunctions   
VmaAllocator   VmaDeviceMemoryCallbacks   VmaRecordSettings   
VmaAllocation   VmaAllocatorCreateInfo   VmaPool   VmaStatInfo   
VmaAllocationCreateInfo   VmaDefragmentationInfo   VmaPoolCreateInfo   VmaStats   
diff --git a/docs/html/functions.html b/docs/html/functions.html index 0751d69..c8ce62d 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -114,6 +114,7 @@ $(function() { : VmaAllocationCreateInfo , VmaAllocatorCreateInfo , VmaPoolCreateInfo +, VmaRecordSettings
  • frameInUseCount : VmaAllocatorCreateInfo @@ -165,6 +166,9 @@ $(function() {
  • pDeviceMemoryCallbacks : VmaAllocatorCreateInfo
  • +
  • pFilePath +: VmaRecordSettings +
  • pfnAllocate : VmaDeviceMemoryCallbacks
  • @@ -183,6 +187,9 @@ $(function() {
  • pool : VmaAllocationCreateInfo
  • +
  • pRecordSettings +: VmaAllocatorCreateInfo +
  • preferredFlags : VmaAllocationCreateInfo
  • diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 6ee6243..de9e9a0 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -114,6 +114,7 @@ $(function() { : VmaAllocationCreateInfo , VmaAllocatorCreateInfo , VmaPoolCreateInfo +, VmaRecordSettings
  • frameInUseCount : VmaAllocatorCreateInfo @@ -165,6 +166,9 @@ $(function() {
  • pDeviceMemoryCallbacks : VmaAllocatorCreateInfo
  • +
  • pFilePath +: VmaRecordSettings +
  • pfnAllocate : VmaDeviceMemoryCallbacks
  • @@ -183,6 +187,9 @@ $(function() {
  • pool : VmaAllocationCreateInfo
  • +
  • pRecordSettings +: VmaAllocatorCreateInfo +
  • preferredFlags : VmaAllocationCreateInfo
  • diff --git a/docs/html/general_considerations.html b/docs/html/general_considerations.html index 5d4362d..f631ac8 100644 --- a/docs/html/general_considerations.html +++ b/docs/html/general_considerations.html @@ -74,6 +74,23 @@ Thread safety
  • When the allocator is created with VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT flag, calls to functions that take such VmaAllocator object must be synchronized externally.
  • Access to a VmaAllocation object must be externally synchronized. For example, you must not call vmaGetAllocationInfo() and vmaMapMemory() from different threads at the same time if you pass the same VmaAllocation object to these functions.
  • +

    +Validation layer warnings

    +

    When using this library, you can meet following types of warnings issued by Vulkan validation layer. They don't necessarily indicate a bug, so you may need to just ignore them.

    +
      +
    • vkBindBufferMemory(): Binding memory to buffer 0xeb8e4 but vkGetBufferMemoryRequirements() has not been called on that buffer.
        +
      • It happens when VK_KHR_dedicated_allocation extension is enabled. vkGetBufferMemoryRequirements2KHR function is used instead, while validation layer seems to be unaware of it.
      • +
      +
    • +
    • Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.
        +
      • It happens when you map a buffer or image, because the library maps entire VkDeviceMemory block, where different types of images and buffers may end up together, especially on GPUs with unified memory like Intel.
      • +
      +
    • +
    • Non-linear image 0xebc91 is aliased with linear buffer 0xeb8e4 which may indicate a bug.
        +
      • It happens when you use lost allocations, and a new image or buffer is created in place of an existing object that bacame lost.
      • +
      +
    • +

    Allocation algorithm

    The library uses following algorithm for allocation, in order:

    @@ -90,7 +107,7 @@ Allocation algorithm Features not supported

    Features deliberately excluded from the scope of this library:

      -
    • Data transfer - issuing commands that transfer data between buffers or images, any usage of VkCommandList or VkCommandQueue and related synchronization is responsibility of the user.
    • +
    • Data transfer - issuing commands that transfer data between buffers or images, any usage of VkCommandList or VkQueue and related synchronization is responsibility of the user.
    • Allocations for imported/exported external memory. They tend to require explicit memory type index and dedicated allocation anyway, so they don't interact with main features of this library. Such special purpose allocations should be made manually, using vkCreateBuffer() and vkAllocateMemory().
    • Support for any programming languages other than C/C++. Bindings to other languages are welcomed as external projects.
    diff --git a/docs/html/globals.html b/docs/html/globals.html index 08a3076..2f1f2fb 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -128,6 +128,15 @@ $(function() {
  • VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT : vk_mem_alloc.h
  • +
  • VMA_RECORD_FLAG_BITS_MAX_ENUM +: vk_mem_alloc.h +
  • +
  • VMA_RECORD_FLUSH_AFTER_CALL_BIT +: vk_mem_alloc.h +
  • +
  • VMA_RECORDING_ENABLED +: vk_mem_alloc.h +
  • VMA_STATS_STRING_ENABLED : vk_mem_alloc.h
  • @@ -275,6 +284,15 @@ $(function() {
  • VmaPoolStats : vk_mem_alloc.h
  • +
  • VmaRecordFlagBits +: vk_mem_alloc.h +
  • +
  • VmaRecordFlags +: vk_mem_alloc.h +
  • +
  • VmaRecordSettings +: vk_mem_alloc.h +
  • vmaSetAllocationUserData() : vk_mem_alloc.h
  • diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html index aa8115b..ca5de3f 100644 --- a/docs/html/globals_defs.html +++ b/docs/html/globals_defs.html @@ -62,6 +62,9 @@ $(function() {
  • VMA_DEDICATED_ALLOCATION : vk_mem_alloc.h
  • +
  • VMA_RECORDING_ENABLED +: vk_mem_alloc.h +
  • VMA_STATS_STRING_ENABLED : vk_mem_alloc.h
  • diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html index 1df06f1..d295ccd 100644 --- a/docs/html/globals_enum.html +++ b/docs/html/globals_enum.html @@ -71,6 +71,9 @@ $(function() {
  • VmaPoolCreateFlagBits : vk_mem_alloc.h
  • +
  • VmaRecordFlagBits +: vk_mem_alloc.h +
  • diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html index 2035414..091f76b 100644 --- a/docs/html/globals_eval.html +++ b/docs/html/globals_eval.html @@ -113,6 +113,12 @@ $(function() {
  • VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT : vk_mem_alloc.h
  • +
  • VMA_RECORD_FLAG_BITS_MAX_ENUM +: vk_mem_alloc.h +
  • +
  • VMA_RECORD_FLUSH_AFTER_CALL_BIT +: vk_mem_alloc.h +
  • diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html index 0b3156b..68106a1 100644 --- a/docs/html/globals_type.html +++ b/docs/html/globals_type.html @@ -110,6 +110,15 @@ $(function() {
  • VmaPoolStats : vk_mem_alloc.h
  • +
  • VmaRecordFlagBits +: vk_mem_alloc.h +
  • +
  • VmaRecordFlags +: vk_mem_alloc.h +
  • +
  • VmaRecordSettings +: vk_mem_alloc.h +
  • VmaStatInfo : vk_mem_alloc.h
  • diff --git a/docs/html/index.html b/docs/html/index.html index e4dc71d..dc62c22 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -112,6 +112,7 @@ Table of contents
  • Corruption detection
  • +
  • Record and replay
  • Recommended usage patterns
      diff --git a/docs/html/memory_mapping.html b/docs/html/memory_mapping.html index fa97ad7..7e2c263 100644 --- a/docs/html/memory_mapping.html +++ b/docs/html/memory_mapping.html @@ -69,8 +69,11 @@ $(function() {

      To "map memory" in Vulkan means to obtain a CPU pointer to VkDeviceMemory, to be able to read from it or write to it in CPU code. Mapping is possible only of memory allocated from a memory type that has VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT flag. Functions vkMapMemory(), vkUnmapMemory() are designed for this purpose. You can use them directly with memory allocated by this library, but it is not recommended because of following issue: Mapping the same VkDeviceMemory block multiple times is illegal - only one mapping at a time is allowed. This includes mapping disjoint regions. Mapping is not reference-counted internally by Vulkan. Because of this, Vulkan Memory Allocator provides following facilities:

      Mapping functions

      -

      The library provides following functions for mapping of a specific VmaAllocation: vmaMapMemory(), vmaUnmapMemory(). They are safer and more convenient to use than standard Vulkan functions. You can map an allocation multiple times simultaneously - mapping is reference-counted internally. You can also map different allocations simultaneously regardless of whether they use the same VkDeviceMemory block. They way it's implemented is that the library always maps entire memory block, not just region of the allocation. For further details, see description of vmaMapMemory() function. Example:

      -
      // Having these objects initialized:
      struct ConstantBuffer
      {
      ...
      };
      ConstantBuffer constantBufferData;
      VmaAllocator allocator;
      VmaBuffer constantBuffer;
      VmaAllocation constantBufferAllocation;
      // You can map and fill your buffer using following code:
      void* mappedData;
      vmaMapMemory(allocator, constantBufferAllocation, &mappedData);
      memcpy(mappedData, &constantBufferData, sizeof(constantBufferData));
      vmaUnmapMemory(allocator, constantBufferAllocation);

      +

      The library provides following functions for mapping of a specific VmaAllocation: vmaMapMemory(), vmaUnmapMemory(). They are safer and more convenient to use than standard Vulkan functions. You can map an allocation multiple times simultaneously - mapping is reference-counted internally. You can also map different allocations simultaneously regardless of whether they use the same VkDeviceMemory block. The way it's implemented is that the library always maps entire memory block, not just region of the allocation. For further details, see description of vmaMapMemory() function. Example:

      +
      // Having these objects initialized:
      struct ConstantBuffer
      {
      ...
      };
      ConstantBuffer constantBufferData;
      VmaAllocator allocator;
      VkBuffer constantBuffer;
      VmaAllocation constantBufferAllocation;
      // You can map and fill your buffer using following code:
      void* mappedData;
      vmaMapMemory(allocator, constantBufferAllocation, &mappedData);
      memcpy(mappedData, &constantBufferData, sizeof(constantBufferData));
      vmaUnmapMemory(allocator, constantBufferAllocation);

      When mapping, you may see a warning from Vulkan validation layer similar to this one:

      +

      Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.

      +

      It happens because the library maps entire VkDeviceMemory block, where different types of images and buffers may end up together, especially on GPUs with unified memory like Intel. You can safely ignore it if you are sure you access only memory of the intended object that you wanted to map.

      +

      Persistently mapped memory

      Kepping your memory persistently mapped is generally OK in Vulkan. You don't need to unmap it before using its data on the GPU. The library provides a special feature designed for that: Allocations made with VMA_ALLOCATION_CREATE_MAPPED_BIT flag set in VmaAllocationCreateInfo::flags stay mapped all the time, so you can just access CPU pointer to it any time without a need to call any "map" or "unmap" function. Example:

      VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
      bufCreateInfo.size = sizeof(ConstantBuffer);
      bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
      VmaAllocationCreateInfo allocCreateInfo = {};
      allocCreateInfo.usage = VMA_MEMORY_USAGE_CPU_ONLY;
      VkBuffer buf;
      vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
      // Buffer is already mapped. You can access its memory.
      memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData));

      There are some exceptions though, when you should consider mapping memory only for a short period of time:

      diff --git a/docs/html/record_and_replay.html b/docs/html/record_and_replay.html new file mode 100644 index 0000000..d4484be --- /dev/null +++ b/docs/html/record_and_replay.html @@ -0,0 +1,97 @@ + + + + + + + +Vulkan Memory Allocator: Record and replay + + + + + + + + + +
      +
      + + + + + + +
      +
      Vulkan Memory Allocator +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      Record and replay
      +
      +
      +

      +Introduction

      +

      While using the library, sequence of calls to its functions together with their parameters can be recorded to a file and later replayed using standalone player application. It can be useful to:

      +
        +
      • Test correctness - check if same sequence of calls will not cause crash or failures on a target platform.
      • +
      • Gather statistics - see number of allocations, peak memory usage, number of calls etc.
      • +
      • Benchmark performance - see how much time it takes to replay the whole sequence.
      • +
      +

      +Usage

      +

      To record sequence of calls to a file: Fill in VmaAllocatorCreateInfo::pRecordSettings member while creating VmaAllocator object. File is opened and written during whole lifetime of the allocator.

      +

      To replay file: Use VmaReplay - standalone command-line program. Precompiled binary can be found in "bin" directory. Its source can be found in "src/VmaReplay" directory. Its project is generated by Premake. Command line syntax is printed when the program is launched without parameters. Basic usage:

      VmaReplay.exe MyRecording.csv
      +

      Documentation of file format can be found in file: "docs/Recording file format.md". It's a human-readable, text file in CSV format (Comma Separated Values).

      +

      +Additional considerations

      +
        +
      • Replaying file that was recorded on a different GPU (with different parameters like bufferImageGranularity, nonCoherentAtomSize, and especially different set of memory heaps and types) may give different performance and memory usage results, as well as issue some warnings and errors.
      • +
      • Current implementation of recording in VMA, as well as VmaReplay application, is coded and tested only on Windows. Inclusion of recording code is driven by VMA_RECORDING_ENABLED macro. Support for other platforms should be easy to add. Contributions are welcomed.
      • +
      • Currently calls to vmaDefragment() function are not recorded.
      • +
      +
      + + + + diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index 7bacfcc..347c9f3 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['flags',['flags',['../struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346',1,'VmaAllocatorCreateInfo::flags()'],['../struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b',1,'VmaAllocationCreateInfo::flags()'],['../struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446',1,'VmaPoolCreateInfo::flags()']]], + ['flags',['flags',['../struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a',1,'VmaRecordSettings::flags()'],['../struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346',1,'VmaAllocatorCreateInfo::flags()'],['../struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b',1,'VmaAllocationCreateInfo::flags()'],['../struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446',1,'VmaPoolCreateInfo::flags()']]], ['frameinusecount',['frameInUseCount',['../struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7',1,'VmaAllocatorCreateInfo::frameInUseCount()'],['../struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa',1,'VmaPoolCreateInfo::frameInUseCount()']]] ]; diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index 590465a..33e01da 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -2,6 +2,7 @@ var searchData= [ ['pallocationcallbacks',['pAllocationCallbacks',['../struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d',1,'VmaAllocatorCreateInfo']]], ['pdevicememorycallbacks',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]], + ['pfilepath',['pFilePath',['../struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d',1,'VmaRecordSettings']]], ['pfn_5fvmaallocatedevicememoryfunction',['PFN_vmaAllocateDeviceMemoryFunction',['../vk__mem__alloc_8h.html#ab6a6477cda1ce775b30bde96d766203b',1,'vk_mem_alloc.h']]], ['pfn_5fvmafreedevicememoryfunction',['PFN_vmaFreeDeviceMemoryFunction',['../vk__mem__alloc_8h.html#aef2545dc2e9dd4f29ab9ba6ac6fe2f49',1,'vk_mem_alloc.h']]], ['pfnallocate',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]], @@ -10,6 +11,7 @@ var searchData= ['physicaldevice',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo']]], ['pmappeddata',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]], ['pool',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]], + ['precordsettings',['pRecordSettings',['../struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee',1,'VmaAllocatorCreateInfo']]], ['preferredflags',['preferredFlags',['../struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d',1,'VmaAllocationCreateInfo']]], ['preferredlargeheapblocksize',['preferredLargeHeapBlockSize',['../struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a',1,'VmaAllocatorCreateInfo']]], ['puserdata',['pUserData',['../struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19',1,'VmaAllocationCreateInfo::pUserData()'],['../struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13',1,'VmaAllocationInfo::pUserData()']]], diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index f3376c8..f0c993f 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,5 +1,6 @@ var searchData= [ + ['record_20and_20replay',['Record and replay',['../record_and_replay.html',1,'index']]], ['requiredflags',['requiredFlags',['../struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90',1,'VmaAllocationCreateInfo']]], ['recommended_20usage_20patterns',['Recommended usage patterns',['../usage_patterns.html',1,'index']]] ]; diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js index a80478e..60dbc10 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -38,6 +38,9 @@ var searchData= ['vma_5fmemory_5fusage_5funknown',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]], ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]], ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]], + ['vma_5frecord_5fflag_5fbits_5fmax_5fenum',['VMA_RECORD_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e',1,'vk_mem_alloc.h']]], + ['vma_5frecord_5fflush_5fafter_5fcall_5fbit',['VMA_RECORD_FLUSH_AFTER_CALL_BIT',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7',1,'vk_mem_alloc.h']]], + ['vma_5frecording_5fenabled',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]], ['vma_5fstats_5fstring_5fenabled',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]], ['vmaallocatememory',['vmaAllocateMemory',['../vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]], ['vmaallocatememoryforbuffer',['vmaAllocateMemoryForBuffer',['../vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]], @@ -90,6 +93,9 @@ var searchData= ['vmapoolcreateflags',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]], ['vmapoolcreateinfo',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'VmaPoolCreateInfo'],['../vk__mem__alloc_8h.html#a211706e9348dcee25a843ed4ea69bce7',1,'VmaPoolCreateInfo(): vk_mem_alloc.h']]], ['vmapoolstats',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'VmaPoolStats'],['../vk__mem__alloc_8h.html#a2e5612d871d64c5624087b837a338c34',1,'VmaPoolStats(): vk_mem_alloc.h']]], + ['vmarecordflagbits',['VmaRecordFlagBits',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2',1,'VmaRecordFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ade20b626a6635ce1bf30ea53dea774e4',1,'VmaRecordFlagBits(): vk_mem_alloc.h']]], + ['vmarecordflags',['VmaRecordFlags',['../vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828',1,'vk_mem_alloc.h']]], + ['vmarecordsettings',['VmaRecordSettings',['../struct_vma_record_settings.html',1,'VmaRecordSettings'],['../vk__mem__alloc_8h.html#a0ab61e87ff6365f1d59915eadc37a9f0',1,'VmaRecordSettings(): vk_mem_alloc.h']]], ['vmasetallocationuserdata',['vmaSetAllocationUserData',['../vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]], ['vmasetcurrentframeindex',['vmaSetCurrentFrameIndex',['../vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]], ['vmastatinfo',['VmaStatInfo',['../struct_vma_stat_info.html',1,'VmaStatInfo'],['../vk__mem__alloc_8h.html#a810b009a788ee8aac72a25b42ffbe31c',1,'VmaStatInfo(): vk_mem_alloc.h']]], diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js index 152fb2b..7fe2da1 100644 --- a/docs/html/search/classes_0.js +++ b/docs/html/search/classes_0.js @@ -11,6 +11,7 @@ var searchData= ['vmapool',['VmaPool',['../struct_vma_pool.html',1,'']]], ['vmapoolcreateinfo',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'']]], ['vmapoolstats',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'']]], + ['vmarecordsettings',['VmaRecordSettings',['../struct_vma_record_settings.html',1,'']]], ['vmastatinfo',['VmaStatInfo',['../struct_vma_stat_info.html',1,'']]], ['vmastats',['VmaStats',['../struct_vma_stats.html',1,'']]], ['vmavulkanfunctions',['VmaVulkanFunctions',['../struct_vma_vulkan_functions.html',1,'']]] diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js index 336effe..bf18592 100644 --- a/docs/html/search/defines_0.js +++ b/docs/html/search/defines_0.js @@ -1,5 +1,6 @@ var searchData= [ ['vma_5fdedicated_5fallocation',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]], + ['vma_5frecording_5fenabled',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]], ['vma_5fstats_5fstring_5fenabled',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]] ]; diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js index 9bd6e39..c5ed539 100644 --- a/docs/html/search/enums_0.js +++ b/docs/html/search/enums_0.js @@ -3,5 +3,6 @@ var searchData= ['vmaallocationcreateflagbits',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597',1,'vk_mem_alloc.h']]], ['vmaallocatorcreateflagbits',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c',1,'vk_mem_alloc.h']]], ['vmamemoryusage',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc',1,'vk_mem_alloc.h']]], - ['vmapoolcreateflagbits',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'vk_mem_alloc.h']]] + ['vmapoolcreateflagbits',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'vk_mem_alloc.h']]], + ['vmarecordflagbits',['VmaRecordFlagBits',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2',1,'vk_mem_alloc.h']]] ]; diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js index ea47966..9f462fc 100644 --- a/docs/html/search/enumvalues_0.js +++ b/docs/html/search/enumvalues_0.js @@ -17,5 +17,7 @@ var searchData= ['vma_5fmemory_5fusage_5fmax_5fenum',['VMA_MEMORY_USAGE_MAX_ENUM',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]], ['vma_5fmemory_5fusage_5funknown',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]], ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]], - ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]] + ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]], + ['vma_5frecord_5fflag_5fbits_5fmax_5fenum',['VMA_RECORD_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e',1,'vk_mem_alloc.h']]], + ['vma_5frecord_5fflush_5fafter_5fcall_5fbit',['VMA_RECORD_FLUSH_AFTER_CALL_BIT',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7',1,'vk_mem_alloc.h']]] ]; diff --git a/docs/html/search/pages_7.js b/docs/html/search/pages_7.js index 1e4f738..7394f7d 100644 --- a/docs/html/search/pages_7.js +++ b/docs/html/search/pages_7.js @@ -1,4 +1,5 @@ var searchData= [ + ['record_20and_20replay',['Record and replay',['../record_and_replay.html',1,'index']]], ['recommended_20usage_20patterns',['Recommended usage patterns',['../usage_patterns.html',1,'index']]] ]; diff --git a/docs/html/search/typedefs_1.js b/docs/html/search/typedefs_1.js index 716f5e3..5d53a90 100644 --- a/docs/html/search/typedefs_1.js +++ b/docs/html/search/typedefs_1.js @@ -15,6 +15,9 @@ var searchData= ['vmapoolcreateflags',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]], ['vmapoolcreateinfo',['VmaPoolCreateInfo',['../vk__mem__alloc_8h.html#a211706e9348dcee25a843ed4ea69bce7',1,'vk_mem_alloc.h']]], ['vmapoolstats',['VmaPoolStats',['../vk__mem__alloc_8h.html#a2e5612d871d64c5624087b837a338c34',1,'vk_mem_alloc.h']]], + ['vmarecordflagbits',['VmaRecordFlagBits',['../vk__mem__alloc_8h.html#ade20b626a6635ce1bf30ea53dea774e4',1,'vk_mem_alloc.h']]], + ['vmarecordflags',['VmaRecordFlags',['../vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828',1,'vk_mem_alloc.h']]], + ['vmarecordsettings',['VmaRecordSettings',['../vk__mem__alloc_8h.html#a0ab61e87ff6365f1d59915eadc37a9f0',1,'vk_mem_alloc.h']]], ['vmastatinfo',['VmaStatInfo',['../vk__mem__alloc_8h.html#a810b009a788ee8aac72a25b42ffbe31c',1,'vk_mem_alloc.h']]], ['vmastats',['VmaStats',['../vk__mem__alloc_8h.html#a732be855fb4a7c248e6853d928a729af',1,'vk_mem_alloc.h']]], ['vmavulkanfunctions',['VmaVulkanFunctions',['../vk__mem__alloc_8h.html#a97064a1a271b0061ebfc3a079862d0c5',1,'vk_mem_alloc.h']]] diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js index 7bacfcc..347c9f3 100644 --- a/docs/html/search/variables_3.js +++ b/docs/html/search/variables_3.js @@ -1,5 +1,5 @@ var searchData= [ - ['flags',['flags',['../struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346',1,'VmaAllocatorCreateInfo::flags()'],['../struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b',1,'VmaAllocationCreateInfo::flags()'],['../struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446',1,'VmaPoolCreateInfo::flags()']]], + ['flags',['flags',['../struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a',1,'VmaRecordSettings::flags()'],['../struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346',1,'VmaAllocatorCreateInfo::flags()'],['../struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b',1,'VmaAllocationCreateInfo::flags()'],['../struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446',1,'VmaPoolCreateInfo::flags()']]], ['frameinusecount',['frameInUseCount',['../struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7',1,'VmaAllocatorCreateInfo::frameInUseCount()'],['../struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa',1,'VmaPoolCreateInfo::frameInUseCount()']]] ]; diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js index 731ce38..46cab85 100644 --- a/docs/html/search/variables_6.js +++ b/docs/html/search/variables_6.js @@ -2,12 +2,14 @@ var searchData= [ ['pallocationcallbacks',['pAllocationCallbacks',['../struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d',1,'VmaAllocatorCreateInfo']]], ['pdevicememorycallbacks',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]], + ['pfilepath',['pFilePath',['../struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d',1,'VmaRecordSettings']]], ['pfnallocate',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]], ['pfnfree',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]], ['pheapsizelimit',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]], ['physicaldevice',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo']]], ['pmappeddata',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]], ['pool',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]], + ['precordsettings',['pRecordSettings',['../struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee',1,'VmaAllocatorCreateInfo']]], ['preferredflags',['preferredFlags',['../struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d',1,'VmaAllocationCreateInfo']]], ['preferredlargeheapblocksize',['preferredLargeHeapBlockSize',['../struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a',1,'VmaAllocatorCreateInfo']]], ['puserdata',['pUserData',['../struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19',1,'VmaAllocationCreateInfo::pUserData()'],['../struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13',1,'VmaAllocationInfo::pUserData()']]], diff --git a/docs/html/struct_vma_allocator_create_info-members.html b/docs/html/struct_vma_allocator_create_info-members.html index 9340920..598ecde 100644 --- a/docs/html/struct_vma_allocator_create_info-members.html +++ b/docs/html/struct_vma_allocator_create_info-members.html @@ -72,8 +72,9 @@ $(function() { pDeviceMemoryCallbacksVmaAllocatorCreateInfo pHeapSizeLimitVmaAllocatorCreateInfo physicalDeviceVmaAllocatorCreateInfo - preferredLargeHeapBlockSizeVmaAllocatorCreateInfo - pVulkanFunctionsVmaAllocatorCreateInfo + pRecordSettingsVmaAllocatorCreateInfo + preferredLargeHeapBlockSizeVmaAllocatorCreateInfo + pVulkanFunctionsVmaAllocatorCreateInfo