VmaReplay: Switch to Vulkan 1.1

Recording file format version bumped to 1.8 to support "VulkanApiVersion".
VmaReplay now uses Vulkan 1.1 by default and so it removes parameter --VK_KHR_dedicated_allocation.
diff --git a/docs/Recording file format.md b/docs/Recording file format.md
index 42f6151..586064a 100644
--- a/docs/Recording file format.md
+++ b/docs/Recording file format.md
@@ -23,7 +23,7 @@
 VmaReplay application supports all older versions.

 Current version is:

 

-    1,7

+    1,8

 

 # Configuration

 

@@ -37,6 +37,8 @@
 

 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:

 

+    VulkanApiVersion,<uint32>,<uint32>

+    

     PhysicalDevice,apiVersion,<uint32>

     PhysicalDevice,driverVersion,<uint32>

     PhysicalDevice,vendorID,<uint32>

@@ -56,6 +58,8 @@
     PhysicalDeviceMemory,Type,<index:uint32>,propertyFlags,<uint32>

     

     Extension,VK_KHR_dedicated_allocation,<bool>

+    Extension,VK_KHR_bind_memory2,<bool>

+    Extension,VK_EXT_memory_budget,<bool>

     

     Macro,VMA_DEBUG_ALWAYS_DEDICATED_MEMORY,<bool>

     Macro,VMA_DEBUG_ALIGNMENT,<uint64>

@@ -276,8 +280,9 @@
 # Example file

 

     Vulkan Memory Allocator,Calls recording

-    1,7

+    1,8

     Config,Begin

+    VulkanApiVersion,1,1

     PhysicalDevice,apiVersion,4198477

     PhysicalDevice,driverVersion,8388653

     PhysicalDevice,vendorID,4098

diff --git a/src/VmaReplay/VmaReplay.cpp b/src/VmaReplay/VmaReplay.cpp
index de5c824..1e50e03 100644
--- a/src/VmaReplay/VmaReplay.cpp
+++ b/src/VmaReplay/VmaReplay.cpp
@@ -29,6 +29,8 @@
 

 static VERBOSITY g_Verbosity = VERBOSITY::DEFAULT;

 

+static const uint32_t VULKAN_API_VERSION = VK_API_VERSION_1_1;

+

 namespace DetailedStats

 {

     

@@ -668,7 +670,6 @@
 static RangeSequence<size_t> g_LineRanges;

 static bool g_UserDataEnabled = true;

 static bool g_MemStatsEnabled = false;

-VULKAN_EXTENSION_REQUEST g_VK_KHR_dedicated_allocation_request = VULKAN_EXTENSION_REQUEST::DEFAULT;

 VULKAN_EXTENSION_REQUEST g_VK_LAYER_LUNARG_standard_validation = VULKAN_EXTENSION_REQUEST::DEFAULT;

 VULKAN_EXTENSION_REQUEST g_VK_EXT_memory_budget_request        = VULKAN_EXTENSION_REQUEST::DEFAULT;

 

@@ -689,7 +690,7 @@
 static bool ValidateFileVersion()

 {

     if(GetVersionMajor(g_FileVersion) == 1 &&

-        GetVersionMinor(g_FileVersion) <= 7)

+        GetVersionMinor(g_FileVersion) <= 8)

     {

         return true;

     }

@@ -1064,12 +1065,13 @@
     void Compare(

         const VkPhysicalDeviceProperties& currDevProps,

         const VkPhysicalDeviceMemoryProperties& currMemProps,

-        bool currDedicatedAllocationExtensionEnabled,

+        uint32_t vulkanApiVersion,

         bool currMemoryBudgetEnabled);

 

 private:

     enum class OPTION

     {

+        VulkanApiVersion,

         PhysicalDevice_apiVersion,

         PhysicalDevice_driverVersion,

         PhysicalDevice_vendorID,

@@ -1159,7 +1161,11 @@
         }

 

         const StrRange optionName = csvSplit.GetRange(0);

-        if(StrRangeEq(optionName, "PhysicalDevice"))

+        if(StrRangeEq(optionName, "VulkanApiVersion"))

+        {

+            SetOption(currLineNumber, OPTION::VulkanApiVersion, StrRange{csvSplit.GetRange(1).beg, csvSplit.GetRange(2).end});

+        }

+        else if(StrRangeEq(optionName, "PhysicalDevice"))

         {

             if(csvSplit.GetCount() >= 3)

             {

@@ -1205,7 +1211,9 @@
             {

                 const StrRange subOptionName = csvSplit.GetRange(1);

                 if(StrRangeEq(subOptionName, "VK_KHR_dedicated_allocation"))

-                    SetOption(currLineNumber, OPTION::Extension_VK_KHR_dedicated_allocation, csvSplit.GetRange(2));

+                {

+                    // Ignore because this extension is promoted to Vulkan 1.1.

+                }

                 else if(StrRangeEq(subOptionName, "VK_KHR_bind_memory2"))

                     SetOption(currLineNumber, OPTION::Extension_VK_KHR_bind_memory2, csvSplit.GetRange(2));

                 else if(StrRangeEq(subOptionName, "VK_EXT_memory_budget"))

@@ -1305,9 +1313,14 @@
 void ConfigurationParser::Compare(

     const VkPhysicalDeviceProperties& currDevProps,

     const VkPhysicalDeviceMemoryProperties& currMemProps,

-    bool currDedicatedAllocationExtensionEnabled,

+    uint32_t vulkanApiVersion,

     bool currMemoryBudgetEnabled)

 {

+    char vulkanApiVersionStr[32];

+    sprintf_s(vulkanApiVersionStr, "%u,%u", VK_VERSION_MAJOR(vulkanApiVersion), VK_VERSION_MINOR(vulkanApiVersion));

+    CompareOption(VERBOSITY::DEFAULT, "VulkanApiVersion",

+        OPTION::VulkanApiVersion, vulkanApiVersionStr);

+

     CompareOption(VERBOSITY::MAXIMUM, "PhysicalDevice apiVersion",

         OPTION::PhysicalDevice_apiVersion, currDevProps.apiVersion);

     CompareOption(VERBOSITY::MAXIMUM, "PhysicalDevice driverVersion",

@@ -1327,8 +1340,6 @@
         OPTION::PhysicalDeviceLimits_bufferImageGranularity, currDevProps.limits.bufferImageGranularity);

     CompareOption(VERBOSITY::DEFAULT, "PhysicalDeviceLimits nonCoherentAtomSize",

         OPTION::PhysicalDeviceLimits_nonCoherentAtomSize, currDevProps.limits.nonCoherentAtomSize);

-    CompareOption(VERBOSITY::DEFAULT, "Extension VK_KHR_dedicated_allocation",

-        OPTION::Extension_VK_EXT_memory_budget, currMemoryBudgetEnabled);

 

     CompareMemProps(currMemProps);

 }

@@ -1588,7 +1599,6 @@
     VmaAllocator m_Allocator = VK_NULL_HANDLE;

     VkCommandPool m_CommandPool = VK_NULL_HANDLE;

     VkCommandBuffer m_CommandBuffer = VK_NULL_HANDLE;

-    bool m_DedicatedAllocationEnabled = false;

     bool m_MemoryBudgetEnabled = false;

     const VkPhysicalDeviceProperties* m_DevProps = nullptr;

     const VkPhysicalDeviceMemoryProperties* m_MemProps = nullptr;

@@ -1711,7 +1721,7 @@
 void Player::ApplyConfig(ConfigurationParser& configParser)

 {

     configParser.Compare(*m_DevProps, *m_MemProps,

-        m_DedicatedAllocationEnabled,

+        VULKAN_API_VERSION,

         m_MemoryBudgetEnabled);

 }

 

@@ -2055,7 +2065,7 @@
     appInfo.applicationVersion = VK_MAKE_VERSION(2, 2, 0);

     appInfo.pEngineName = "Vulkan Memory Allocator";

     appInfo.engineVersion = VK_MAKE_VERSION(2, 2, 0);

-    appInfo.apiVersion = VK_API_VERSION_1_0;

+    appInfo.apiVersion = VULKAN_API_VERSION;

 

     VkInstanceCreateInfo instInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO };

     instInfo.pApplicationInfo = &appInfo;

@@ -2163,7 +2173,6 @@
     InitVulkanFeatures(enabledFeatures, supportedFeatures);

 

     bool VK_KHR_get_memory_requirements2_available = false;

-    bool VK_KHR_dedicated_allocation_available = false;

 

     // Determine list of device extensions to enable.

     std::vector<const char*> enabledDeviceExtensions;

@@ -2186,10 +2195,6 @@
                 {

                     VK_KHR_get_memory_requirements2_available = true;

                 }

-                else if(strcmp(properties[i].extensionName, VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME) == 0)

-                {

-                    VK_KHR_dedicated_allocation_available = true;

-                }

                 else if(strcmp(properties[i].extensionName, VK_EXT_MEMORY_BUDGET_EXTENSION_NAME) == 0)

                 {

                     if(VK_KHR_get_physical_device_properties2_enabled)

@@ -2201,26 +2206,6 @@
         }

     }

 

-    const bool dedicatedAllocationAvailable =

-        VK_KHR_get_memory_requirements2_available && VK_KHR_dedicated_allocation_available;

-

-    switch(g_VK_KHR_dedicated_allocation_request)

-    {

-    case VULKAN_EXTENSION_REQUEST::DISABLED:

-        break;

-    case VULKAN_EXTENSION_REQUEST::DEFAULT:

-        m_DedicatedAllocationEnabled = dedicatedAllocationAvailable;

-        break;

-    case VULKAN_EXTENSION_REQUEST::ENABLED:

-        m_DedicatedAllocationEnabled = dedicatedAllocationAvailable;

-        if(!dedicatedAllocationAvailable)

-        {

-            printf("WARNING: VK_KHR_dedicated_allocation extension cannot be enabled.\n");

-        }

-        break;

-    default: assert(0);

-    }

-

     switch(g_VK_EXT_memory_budget_request)

     {

     case VULKAN_EXTENSION_REQUEST::DISABLED:

@@ -2238,11 +2223,6 @@
     default: assert(0);

     }

 

-    if(m_DedicatedAllocationEnabled)

-    {

-        enabledDeviceExtensions.push_back(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME);

-        enabledDeviceExtensions.push_back(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME);

-    }

     if(m_MemoryBudgetEnabled)

     {

         enabledDeviceExtensions.push_back(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME);

@@ -2278,11 +2258,8 @@
     allocatorInfo.device = m_Device;

     allocatorInfo.flags = VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT;

     allocatorInfo.pDeviceMemoryCallbacks = &deviceMemoryCallbacks;

+    allocatorInfo.vulkanApiVersion = VULKAN_API_VERSION;

 

-    if(m_DedicatedAllocationEnabled)

-    {

-        allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;

-    }

     if(m_MemoryBudgetEnabled)

     {

         allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT;

@@ -4005,8 +3982,6 @@
         "        Default is 1. Affects both creation of buffers and images, as well as calls to vmaSetAllocationUserData.\n"

         "    --VK_LAYER_LUNARG_standard_validation <Value> - 0 to disable or 1 to enable validation layers.\n"

         "        By default the layers are silently enabled if available.\n"

-        "    --VK_KHR_dedicated_allocation <Value> - 0 to disable or 1 to enable this extension.\n"

-        "        By default the extension is silently enabled if available.\n"

         "    --VK_EXT_memory_budget <Value> - 0 to disable or 1 to enable this extension.\n"

         "        By default the extension is silently enabled if available.\n"

     );

@@ -4227,7 +4202,6 @@
     cmdLineParser.RegisterOpt(CMD_LINE_OPT_LINES, "Lines", true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_PHYSICAL_DEVICE, "PhysicalDevice", true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_USER_DATA, "UserData", true);

-    cmdLineParser.RegisterOpt(CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION, "VK_KHR_dedicated_allocation", true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_VK_EXT_MEMORY_BUDGET, "VK_EXT_memory_budget", true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_VK_LAYER_LUNARG_STANDARD_VALIDATION, VALIDATION_LAYER_NAME, true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_MEM_STATS, "MemStats", true);

@@ -4287,22 +4261,6 @@
                     return RESULT_ERROR_COMMAND_LINE;

                 }

                 break;

-            case CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION:

-                {

-                    bool newValue;

-                    if(StrRangeToBool(StrRange(cmdLineParser.GetParameter()), newValue))

-                    {

-                        g_VK_KHR_dedicated_allocation_request = newValue ?

-                            VULKAN_EXTENSION_REQUEST::ENABLED :

-                            VULKAN_EXTENSION_REQUEST::DISABLED;

-                    }

-                    else

-                    {

-                        PrintCommandLineSyntax();

-                        return RESULT_ERROR_COMMAND_LINE;

-                    }

-                }

-                break;

             case CMD_LINE_OPT_VK_EXT_MEMORY_BUDGET:

                 {

                     bool newValue;

diff --git a/src/VmaUsage.h b/src/VmaUsage.h
index 9e0c09a..5d82451 100644
--- a/src/VmaUsage.h
+++ b/src/VmaUsage.h
@@ -59,8 +59,8 @@
 //#define VMA_DEBUG_GLOBAL_MUTEX 1

 //#define VMA_MEMORY_BUDGET 0

 

-//#define VMA_VULKAN_VERSION 1001000 // Vulkan 1.1

-#define VMA_VULKAN_VERSION 1000000 // Vulkan 1.0

+#define VMA_VULKAN_VERSION 1001000 // Vulkan 1.1

+//#define VMA_VULKAN_VERSION 1000000 // Vulkan 1.0

 

 /*

 #define VMA_DEBUG_LOG(format, ...) do { \

diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h
index 8e74dba..656dc4a 100644
--- a/src/vk_mem_alloc.h
+++ b/src/vk_mem_alloc.h
@@ -6846,6 +6846,7 @@
     void WriteConfiguration(

         const VkPhysicalDeviceProperties& devProps,

         const VkPhysicalDeviceMemoryProperties& memProps,

+        uint32_t vulkanApiVersion,

         bool dedicatedAllocationExtensionEnabled,

         bool bindMemory2ExtensionEnabled,

         bool memoryBudgetExtensionEnabled);

@@ -13951,7 +13952,7 @@
 

     // Write header.

     fprintf(m_File, "%s\n", "Vulkan Memory Allocator,Calls recording");

-    fprintf(m_File, "%s\n", "1,7");

+    fprintf(m_File, "%s\n", "1,8");

 

     return VK_SUCCESS;

 }

@@ -14420,12 +14421,15 @@
 void VmaRecorder::WriteConfiguration(

     const VkPhysicalDeviceProperties& devProps,

     const VkPhysicalDeviceMemoryProperties& memProps,

+    uint32_t vulkanApiVersion,

     bool dedicatedAllocationExtensionEnabled,

     bool bindMemory2ExtensionEnabled,

     bool memoryBudgetExtensionEnabled)

 {

     fprintf(m_File, "Config,Begin\n");

 

+    fprintf(m_File, "VulkanApiVersion,%u,%u\n", VK_VERSION_MAJOR(vulkanApiVersion), VK_VERSION_MINOR(vulkanApiVersion));

+

     fprintf(m_File, "PhysicalDevice,apiVersion,%u\n", devProps.apiVersion);

     fprintf(m_File, "PhysicalDevice,driverVersion,%u\n", devProps.driverVersion);

     fprintf(m_File, "PhysicalDevice,vendorID,%u\n", devProps.vendorID);

@@ -14668,6 +14672,7 @@
         m_pRecorder->WriteConfiguration(

             m_PhysicalDeviceProperties,

             m_MemProps,

+            m_VulkanApiVersion,

             m_UseKhrDedicatedAllocation,

             m_UseKhrBindMemory2,

             m_UseExtMemoryBudget);