Replace usage of old VK_LAYER_LUNARG_standard_validation and extension VK_EXT_debug_report with new VK_LAYER_KHRONOS_validation and extension VK_EXT_debug_utils also in VmaReplay
diff --git a/src/VmaReplay/Constants.h b/src/VmaReplay/Constants.h
index d2a5db0..5db0858 100644
--- a/src/VmaReplay/Constants.h
+++ b/src/VmaReplay/Constants.h
@@ -37,7 +37,7 @@
     CMD_LINE_OPT_USER_DATA,

     CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION,

     CMD_LINE_OPT_VK_EXT_MEMORY_BUDGET,

-    CMD_LINE_OPT_VK_LAYER_LUNARG_STANDARD_VALIDATION,

+    CMD_LINE_OPT_VK_LAYER_KHRONOS_VALIDATION,

     CMD_LINE_OPT_MEM_STATS,

     CMD_LINE_OPT_DUMP_STATS_AFTER_LINE,

     CMD_LINE_OPT_DEFRAGMENT_AFTER_LINE,

diff --git a/src/VmaReplay/VmaReplay.cpp b/src/VmaReplay/VmaReplay.cpp
index 5a1f960..774f070 100644
--- a/src/VmaReplay/VmaReplay.cpp
+++ b/src/VmaReplay/VmaReplay.cpp
@@ -670,8 +670,8 @@
 static RangeSequence<size_t> g_LineRanges;

 static bool g_UserDataEnabled = true;

 static bool g_MemStatsEnabled = false;

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

+VULKAN_EXTENSION_REQUEST g_VK_LAYER_KHRONOS_validation           = VULKAN_EXTENSION_REQUEST::DEFAULT;

+VULKAN_EXTENSION_REQUEST g_VK_EXT_memory_budget_request          = VULKAN_EXTENSION_REQUEST::DEFAULT;

 VULKAN_EXTENSION_REQUEST g_VK_AMD_device_coherent_memory_request = VULKAN_EXTENSION_REQUEST::DEFAULT;

 

 struct StatsAfterLineEntry

@@ -1494,53 +1494,16 @@
 ////////////////////////////////////////////////////////////////////////////////

 // class Player

 

-static const char* const VALIDATION_LAYER_NAME = "VK_LAYER_LUNARG_standard_validation";

+static const char* const VALIDATION_LAYER_NAME = "VK_LAYER_KHRONOS_validation";

 

-static const bool g_MemoryAliasingWarningEnabled = false;

-

-static VKAPI_ATTR VkBool32 VKAPI_CALL MyDebugReportCallback(

-    VkDebugReportFlagsEXT flags,

-    VkDebugReportObjectTypeEXT objectType,

-    uint64_t object,

-    size_t location,

-    int32_t messageCode,

-    const char* pLayerPrefix,

-    const char* pMessage,

-    void* pUserData)

+static VkBool32 VKAPI_PTR MyDebugReportCallback(

+    VkDebugUtilsMessageSeverityFlagBitsEXT           messageSeverity,

+    VkDebugUtilsMessageTypeFlagsEXT                  messageTypes,

+    const VkDebugUtilsMessengerCallbackDataEXT*      pCallbackData,

+    void*                                            pUserData)

 {

-    // "Non-linear image 0xebc91 is aliased with linear buffer 0xeb8e4 which may indicate a bug."

-    if(!g_MemoryAliasingWarningEnabled && flags == VK_DEBUG_REPORT_WARNING_BIT_EXT &&

-        (strstr(pMessage, " is aliased with non-linear ") || strstr(pMessage, " is aliased with linear ")))

-    {

-        return VK_FALSE;

-    }

-

-    // Ignoring because when VK_KHR_dedicated_allocation extension is enabled,

-    // vkGetBufferMemoryRequirements2KHR function is used instead, while Validation

-    // Layer seems to be unaware of it.

-    if (strstr(pMessage, "but vkGetBufferMemoryRequirements() has not been called on that buffer") != nullptr)

-    {

-        return VK_FALSE;

-    }

-    if (strstr(pMessage, "but vkGetImageMemoryRequirements() has not been called on that image") != nullptr)

-    {

-        return VK_FALSE;

-    }

-    

-    /*

-    "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."

-    Ignoring because we map entire VkDeviceMemory blocks, where different types of

-    images and buffers may end up together, especially on GPUs with unified memory

-    like Intel.

-    */

-    if(strstr(pMessage, "Mapping an image with layout") != nullptr &&

-        strstr(pMessage, "can result in undefined behavior if this memory is used by the device") != nullptr)

-    {

-        return VK_FALSE;

-    }

-

-    printf("%s \xBA %s\n", pLayerPrefix, pMessage);

-

+    assert(pCallbackData && pCallbackData->pMessageIdName && pCallbackData->pMessage);

+    printf("%s \xBA %s\n", pCallbackData->pMessageIdName, pCallbackData->pMessage);

     return VK_FALSE;

 }

 

@@ -1609,10 +1572,9 @@
     const VkPhysicalDeviceProperties* m_DevProps = nullptr;

     const VkPhysicalDeviceMemoryProperties* m_MemProps = nullptr;

 

-    PFN_vkCreateDebugReportCallbackEXT m_pvkCreateDebugReportCallbackEXT;

-    PFN_vkDebugReportMessageEXT m_pvkDebugReportMessageEXT;

-    PFN_vkDestroyDebugReportCallbackEXT m_pvkDestroyDebugReportCallbackEXT;

-    VkDebugReportCallbackEXT m_hCallback;

+    PFN_vkCreateDebugUtilsMessengerEXT m_vkCreateDebugUtilsMessengerEXT = nullptr;

+    PFN_vkDestroyDebugUtilsMessengerEXT m_vkDestroyDebugUtilsMessengerEXT = nullptr;

+    VkDebugUtilsMessengerEXT m_DebugUtilsMessenger = VK_NULL_HANDLE;

 

     uint32_t m_VmaFrameIndex = 0;

 

@@ -1659,6 +1621,7 @@
     int InitVulkan();

     void FinalizeVulkan();

     void RegisterDebugCallbacks();

+    void UnregisterDebugCallbacks();

 

     // If parmeter count doesn't match, issues warning and returns false.

     bool ValidateFunctionParameterCount(size_t lineNumber, const CsvSplit& csvSplit, size_t expectedParamCount, bool lastUnbound);

@@ -2018,7 +1981,7 @@
         IsLayerSupported(instanceLayerProps.data(), instanceLayerProps.size(), VALIDATION_LAYER_NAME);

 

     bool validationLayersEnabled = false;

-    switch(g_VK_LAYER_LUNARG_standard_validation)

+    switch(g_VK_LAYER_KHRONOS_validation)

     {

     case VULKAN_EXTENSION_REQUEST::DISABLED:

         break;

@@ -2053,10 +2016,10 @@
     if(validationLayersEnabled)

     {

         instanceLayers.push_back(VALIDATION_LAYER_NAME);

-        enabledInstanceExtensions.push_back("VK_EXT_debug_report");

     }

 

     bool VK_KHR_get_physical_device_properties2_enabled = false;

+    bool VK_EXT_debug_utils_enabled = false;

     for(const auto& extensionProperties : availableInstanceExtensions)

     {

         if(strcmp(extensionProperties.extensionName, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) == 0)

@@ -2064,6 +2027,14 @@
             enabledInstanceExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);

             VK_KHR_get_physical_device_properties2_enabled = true;

         }

+        else if(strcmp(extensionProperties.extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0)

+        {

+            if(validationLayersEnabled)

+            {

+                enabledInstanceExtensions.push_back("VK_EXT_debug_utils");

+                VK_EXT_debug_utils_enabled = true;

+            }

+        }

     }

 

     VkApplicationInfo appInfo = { VK_STRUCTURE_TYPE_APPLICATION_INFO };

@@ -2087,7 +2058,7 @@
         return RESULT_ERROR_VULKAN;

     }

 

-    if(validationLayersEnabled)

+    if(VK_EXT_debug_utils_enabled)

     {

         RegisterDebugCallbacks();

     }

@@ -2388,11 +2359,7 @@
         m_Device = nullptr;

     }

 

-    if(m_pvkDestroyDebugReportCallbackEXT && m_hCallback != VK_NULL_HANDLE)

-    {

-        m_pvkDestroyDebugReportCallbackEXT(m_VulkanInstance, m_hCallback, nullptr);

-        m_hCallback = VK_NULL_HANDLE;

-    }

+    UnregisterDebugCallbacks();

 

     if(m_VulkanInstance != VK_NULL_HANDLE)

     {

@@ -2403,29 +2370,41 @@
 

 void Player::RegisterDebugCallbacks()

 {

-    m_pvkCreateDebugReportCallbackEXT =

-        reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>

-            (vkGetInstanceProcAddr(m_VulkanInstance, "vkCreateDebugReportCallbackEXT"));

-    m_pvkDebugReportMessageEXT =

-        reinterpret_cast<PFN_vkDebugReportMessageEXT>

-            (vkGetInstanceProcAddr(m_VulkanInstance, "vkDebugReportMessageEXT"));

-    m_pvkDestroyDebugReportCallbackEXT =

-        reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>

-            (vkGetInstanceProcAddr(m_VulkanInstance, "vkDestroyDebugReportCallbackEXT"));

-    assert(m_pvkCreateDebugReportCallbackEXT);

-    assert(m_pvkDebugReportMessageEXT);

-    assert(m_pvkDestroyDebugReportCallbackEXT);

+    static const VkDebugUtilsMessageSeverityFlagsEXT DEBUG_UTILS_MESSENGER_MESSAGE_SEVERITY =

+        //VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |

+        //VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT |

+        VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |

+        VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;

+    static const VkDebugUtilsMessageTypeFlagsEXT DEBUG_UTILS_MESSENGER_MESSAGE_TYPE =

+        VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |

+        VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |

+        VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;

 

-    VkDebugReportCallbackCreateInfoEXT callbackCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT };

-    callbackCreateInfo.flags = //VK_DEBUG_REPORT_INFORMATION_BIT_EXT |

-        VK_DEBUG_REPORT_ERROR_BIT_EXT |

-        VK_DEBUG_REPORT_WARNING_BIT_EXT |

-        VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT /*|

-        VK_DEBUG_REPORT_DEBUG_BIT_EXT*/;

-    callbackCreateInfo.pfnCallback = &MyDebugReportCallback;

+    m_vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(

+        m_VulkanInstance, "vkCreateDebugUtilsMessengerEXT");

+    m_vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(

+        m_VulkanInstance, "vkDestroyDebugUtilsMessengerEXT");

+    assert(m_vkCreateDebugUtilsMessengerEXT);

+    assert(m_vkDestroyDebugUtilsMessengerEXT);

 

-    VkResult res = m_pvkCreateDebugReportCallbackEXT(m_VulkanInstance, &callbackCreateInfo, nullptr, &m_hCallback);

-    assert(res == VK_SUCCESS);

+    VkDebugUtilsMessengerCreateInfoEXT messengerCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT };

+    messengerCreateInfo.messageSeverity = DEBUG_UTILS_MESSENGER_MESSAGE_SEVERITY;

+    messengerCreateInfo.messageType = DEBUG_UTILS_MESSENGER_MESSAGE_TYPE;

+    messengerCreateInfo.pfnUserCallback = MyDebugReportCallback;

+    VkResult res = m_vkCreateDebugUtilsMessengerEXT(m_VulkanInstance, &messengerCreateInfo, nullptr, &m_DebugUtilsMessenger);

+    if(res != VK_SUCCESS)

+    {

+        printf("ERROR: vkCreateDebugUtilsMessengerEXT failed (%d)\n", res);

+        m_DebugUtilsMessenger = VK_NULL_HANDLE;

+    }

+}

+

+void Player::UnregisterDebugCallbacks()

+{

+    if(m_DebugUtilsMessenger)

+    {

+        m_vkDestroyDebugUtilsMessengerEXT(m_VulkanInstance, m_DebugUtilsMessenger, nullptr);

+    }

 }

 

 void Player::Defragment()

@@ -3991,7 +3970,7 @@
         "    --PhysicalDevice <Index> - Choice of Vulkan physical device. Default: 0.\n"

         "    --UserData <Value> - 0 to disable or 1 to enable setting pUserData during playback.\n"

         "        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"

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

         "        By default the layers are 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"

@@ -4214,7 +4193,7 @@
     cmdLineParser.RegisterOpt(CMD_LINE_OPT_PHYSICAL_DEVICE, "PhysicalDevice", true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_USER_DATA, "UserData", 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_VK_LAYER_KHRONOS_VALIDATION, VALIDATION_LAYER_NAME, true);

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

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_DUMP_STATS_AFTER_LINE, "DumpStatsAfterLine", true);

     cmdLineParser.RegisterOpt(CMD_LINE_OPT_DEFRAGMENT_AFTER_LINE, "DefragmentAfterLine", true);

@@ -4288,12 +4267,12 @@
                     }

                 }

                 break;

-            case CMD_LINE_OPT_VK_LAYER_LUNARG_STANDARD_VALIDATION:

+            case CMD_LINE_OPT_VK_LAYER_KHRONOS_VALIDATION:

                 {

                     bool newValue;

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

                     {

-                        g_VK_LAYER_LUNARG_standard_validation = newValue ?

+                        g_VK_LAYER_KHRONOS_validation = newValue ?

                             VULKAN_EXTENSION_REQUEST::ENABLED :

                             VULKAN_EXTENSION_REQUEST::DISABLED;

                     }

diff --git a/src/VulkanSample.cpp b/src/VulkanSample.cpp
index 257d729..1c31f07 100644
--- a/src/VulkanSample.cpp
+++ b/src/VulkanSample.cpp
@@ -44,7 +44,6 @@
 VkDevice g_hDevice;

 VmaAllocator g_hAllocator;

 VkInstance g_hVulkanInstance;

-bool g_MemoryAliasingWarningEnabled = true;

 

 bool g_EnableValidationLayer = true;

 bool VK_KHR_get_memory_requirements2_enabled = false;

@@ -1771,10 +1770,7 @@
         g_hSurface = VK_NULL_HANDLE;

     }

 

-    if(VK_EXT_debug_utils_enabled)

-    {

-        UnregisterDebugCallbacks();

-    }

+    UnregisterDebugCallbacks();

 

     if(g_hVulkanInstance != VK_NULL_HANDLE)

     {