VmaReplay: Added parameter --VK_LAYER_LUNARG_standard_validation to enable/disable Vulkan validation layers.
diff --git a/src/VmaReplay/VmaReplay.cpp b/src/VmaReplay/VmaReplay.cpp
index ee310df..f9370cf 100644
--- a/src/VmaReplay/VmaReplay.cpp
+++ b/src/VmaReplay/VmaReplay.cpp
@@ -38,6 +38,7 @@
     CMD_LINE_OPT_PHYSICAL_DEVICE,

     CMD_LINE_OPT_USER_DATA,

     CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION,

+    CMD_LINE_OPT_VK_LAYER_LUNARG_STANDARD_VALIDATION,

 };

 

 static enum class VERBOSITY

@@ -118,6 +119,7 @@
 static RangeSequence<size_t> g_LineRanges;

 static bool g_UserDataEnabled = true;

 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;

 

 static bool ValidateFileVersion()

 {

@@ -282,7 +284,6 @@
 static const char* const VALIDATION_LAYER_NAME = "VK_LAYER_LUNARG_standard_validation";

 

 static bool g_MemoryAliasingWarningEnabled = true;

-static bool g_EnableValidationLayer = true;

 

 static VKAPI_ATTR VkBool32 VKAPI_CALL MyDebugReportCallback(

     VkDebugReportFlagsEXT flags,

@@ -726,13 +727,25 @@
         assert(res == VK_SUCCESS);

     }

 

-    if(g_EnableValidationLayer == true)

+    const bool validationLayersAvailable =

+        IsLayerSupported(instanceLayerProps.data(), instanceLayerProps.size(), VALIDATION_LAYER_NAME);

+

+    bool validationLayersEnabled = false;

+    switch(g_VK_LAYER_LUNARG_standard_validation)

     {

-        if(IsLayerSupported(instanceLayerProps.data(), instanceLayerProps.size(), VALIDATION_LAYER_NAME) == false)

+    case VULKAN_EXTENSION_REQUEST::DISABLED:

+        break;

+    case VULKAN_EXTENSION_REQUEST::DEFAULT:

+        validationLayersEnabled = validationLayersAvailable;

+        break;

+    case VULKAN_EXTENSION_REQUEST::ENABLED:

+        validationLayersEnabled = validationLayersAvailable;

+        if(!validationLayersAvailable)

         {

-            printf("WARNING: Layer \"%s\" not supported.\n", VALIDATION_LAYER_NAME);

-            g_EnableValidationLayer = false;

+            printf("WARNING: %s layer cannot be enabled.\n", VALIDATION_LAYER_NAME);

         }

+        break;

+    default: assert(0);

     }

 

     std::vector<const char*> instanceExtensions;

@@ -740,7 +753,7 @@
     //instanceExtensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);

 

     std::vector<const char*> instanceLayers;

-    if(g_EnableValidationLayer)

+    if(validationLayersEnabled)

     {

         instanceLayers.push_back(VALIDATION_LAYER_NAME);

         instanceExtensions.push_back("VK_EXT_debug_report");

@@ -767,8 +780,10 @@
         return RESULT_ERROR_VULKAN;

     }

 

-    if(g_EnableValidationLayer)

+    if(validationLayersEnabled)

+    {

         RegisterDebugCallbacks();

+    }

 

     // Find physical device

 

@@ -1981,8 +1996,10 @@
         "    --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"

+        "        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 defalut the extension is silently enabled if available.\n"

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

     );

 }

 

@@ -2140,6 +2157,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_KHR_DEDICATED_ALLOCATION, "VK_KHR_dedicated_allocation", true);

+    cmdLineParser.RegisterOpt(CMD_LINE_OPT_VK_LAYER_LUNARG_STANDARD_VALIDATION, VALIDATION_LAYER_NAME, true);

 

     CmdLineParser::RESULT res;

     while((res = cmdLineParser.ReadNext()) != CmdLineParser::RESULT_END)

@@ -2208,6 +2226,22 @@
                     }

                 }

                 break;

+            case CMD_LINE_OPT_VK_LAYER_LUNARG_STANDARD_VALIDATION:

+                {

+                    bool newValue;

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

+                    {

+                        g_VK_LAYER_LUNARG_standard_validation = newValue ?

+                            VULKAN_EXTENSION_REQUEST::ENABLED :

+                            VULKAN_EXTENSION_REQUEST::DISABLED;

+                    }

+                    else

+                    {

+                        PrintCommandLineSyntax();

+                        return RESULT_ERROR_COMMAND_LINE;

+                    }

+                }

+                break;

             default:

                 assert(0);

             }