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);
