{
    "file_format_version": "1.2.0",
    "layer": {
        "name": "VK_LAYER_KHRONOS_validation",
        "prefix": "vvl",
        "type": "GLOBAL",
        "library_path": "libVkLayer_khronos_validation.so",
        "api_version": "1.4.357",
        "implementation_version": "1",
        "description": "Khronos Validation Layer",
        "introduction": "The main, comprehensive Khronos validation layer.\n\nVulkan is an Explicit API, enabling direct control over how GPUs actually work. By design, minimal error checking is done inside a Vulkan driver. Applications have full control and responsibility for correct operation. Any errors in how Vulkan is used can result in a crash. \n\nThe Khronos Validation Layer can be enabled to assist development by enabling developers to verify their applications correctly use the Vulkan API.",
        "platforms": [
            "WINDOWS",
            "LINUX",
            "ANDROID",
            "MACOS"
        ],
        "url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/khronos_validation_layer.html",
        "instance_extensions": [
            {
                "name": "VK_EXT_debug_report",
                "spec_version": "9"
            },
            {
                "name": "VK_EXT_debug_utils",
                "spec_version": "1"
            },
            {
                "name": "VK_EXT_layer_settings",
                "spec_version": "2"
            },
            {
                "name": "VK_EXT_validation_features",
                "spec_version": "2"
            }
        ],
        "device_extensions": [
            {
                "name": "VK_EXT_debug_marker",
                "spec_version": "4",
                "entrypoints": [
                    "vkDebugMarkerSetObjectTagEXT",
                    "vkDebugMarkerSetObjectNameEXT",
                    "vkCmdDebugMarkerBeginEXT",
                    "vkCmdDebugMarkerEndEXT",
                    "vkCmdDebugMarkerInsertEXT"
                ]
            },
            {
                "name": "VK_EXT_validation_cache",
                "spec_version": "1",
                "entrypoints": [
                    "vkCreateValidationCacheEXT",
                    "vkDestroyValidationCacheEXT",
                    "vkGetValidationCacheDataEXT",
                    "vkMergeValidationCachesEXT"
                ]
            },
            {
                "name": "VK_EXT_tooling_info",
                "spec_version": "1",
                "entrypoints": [
                    "vkGetPhysicalDeviceToolPropertiesEXT"
                ]
            }
        ],
        "features": {
            "presets": [
                 {
                    "label": "Core Validation",
                    "description": "The same as Default settings but some fields are not reset when switching between presets (Debug Action, Duplicated Message).",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": true },
                            { "key": "check_image_layout", "value": true },
                            { "key": "check_command_buffer", "value": true },
                            { "key": "check_object_in_use", "value": true },
                            { "key": "check_query", "value": true },
                            { "key": "check_shaders", "value": true },
                            { "key": "check_shaders_caching", "value": true },
                            { "key": "debug_disable_spirv_val", "value": false },
                        { "key": "validate_sync", "value": false },
                        { "key": "stateless_param", "value": true },
                        { "key": "object_lifetime", "value": true },
                        { "key": "thread_safety", "value": true },
                        { "key": "unique_handles", "value": true },
                        { "key": "legacy_detection", "value": false },
                        { "key": "validate_best_practices", "value": false },
                        { "key": "gpuav_enable", "value": false },
                        { "key": "gpu_dump_descriptors", "value": false },
                        { "key": "gpu_dump_copy_memory_indirect", "value": false },
                        { "key": "gpu_dump_device_generated_commands", "value": false },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": false },
                        { "key": "debug_action", "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT" ] },
                        { "key": "report_flags", "value": [ "error", "warn" ] },
                        { "key": "enable_message_limit", "value": true }
                    ]
                },
                {
                    "label": "Synchronization Only",
                    "description": "Identify resource access conflicts due to missing or incorrect synchronization operations between actions reading or writing the same regions of memory.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": false },
                        { "key": "validate_sync", "value": true },
                            { "key": "syncval_submit_time_validation", "value": true },
                            { "key": "syncval_shader_accesses_heuristic", "value": false },
                            { "key": "syncval_message_extra_properties", "value": false },
                        { "key": "stateless_param", "value": false },
                        { "key": "object_lifetime", "value": false },
                        { "key": "thread_safety", "value": true },
                        { "key": "unique_handles", "value": true },
                        { "key": "legacy_detection", "value": false },
                        { "key": "validate_best_practices", "value": false },
                        { "key": "gpuav_enable", "value": false },
                        { "key": "gpu_dump_descriptors", "value": false },
                        { "key": "gpu_dump_copy_memory_indirect", "value": false },
                        { "key": "gpu_dump_device_generated_commands", "value": false },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": false },
                        { "key": "debug_action", "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT" ] },
                        { "key": "report_flags", "value": [ "error", "warn" ] },
                        { "key": "enable_message_limit", "value": true }
                    ]
                },
                {
                    "label": "GPU-Assisted Validation (GPU-AV)",
                    "description": "Check for API usage errors at shader execution time.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": false },
                        { "key": "validate_sync", "value": false },
                        { "key": "stateless_param", "value": false },
                        { "key": "object_lifetime", "value": false },
                        { "key": "thread_safety", "value": false },
                        { "key": "unique_handles", "value": false },
                        { "key": "legacy_detection", "value": false },
                        { "key": "validate_best_practices", "value": false },
                        { "key": "gpuav_enable", "value": true },
                            { "key": "gpuav_safe_mode", "value": false },
                            { "key": "gpuav_force_on_robustness", "value": false },
                            { "key": "gpuav_shader_instrumentation", "value": true },
                            { "key": "gpuav_descriptor_checks", "value": true },
                            { "key": "gpuav_post_process_descriptor_indexing", "value": true },
                            { "key": "gpuav_buffer_address_oob", "value": true },
                            { "key": "gpuav_mesh_shading", "value": true },
                            { "key": "gpuav_validate_trace_ray", "value": true },
                            { "key": "gpuav_vertex_attribute_fetch_oob", "value": true },
                            { "key": "gpuav_shader_sanitizer", "value": true },
                            { "key": "gpuav_shared_memory_data_race", "value": true },
                            { "key": "gpuav_max_indices_count", "value": 8192 },
                            { "key": "gpuav_buffers_validation", "value": true },
                            { "key": "gpuav_indirect_draws_buffers", "value": true },
                            { "key": "gpuav_indirect_dispatches_buffers", "value": true },
                            { "key": "gpuav_indirect_trace_rays_buffers", "value": true },
                            { "key": "gpuav_buffer_copies", "value": true },
                            { "key": "gpuav_copy_memory_indirect", "value": true },
                            { "key": "gpuav_index_buffers", "value": true },
                            { "key": "gpuav_acceleration_structures_builds", "value": true },
                            { "key": "gpuav_ray_tracing_buffers_consistency", "value": false },
                            { "key": "gpuav_select_instrumented_shaders", "value": false },
                            { "key": "gpuav_debug_disable_all", "value": false },
                            { "key": "gpuav_debug_validate_instrumented_shaders", "value": false },
                            { "key": "gpuav_debug_dump_instrumented_shaders", "value": false },
                            { "key": "gpuav_debug_max_instrumentations_count", "value": 0 },
                            { "key": "gpuav_debug_print_instrumentation_info", "value": false },
                            { "key": "gpuav_debug_disable_dontinline", "value": false },
                        { "key": "gpu_dump_descriptors", "value": false },
                        { "key": "gpu_dump_copy_memory_indirect", "value": false },
                        { "key": "gpu_dump_device_generated_commands", "value": false },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": false },
                        { "key": "debug_action", "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT" ] },
                        { "key": "report_flags", "value": [ "error", "warn" ] },
                        { "key": "enable_message_limit", "value": true }
                    ]
                },
                {
                    "label": "Debug Printf Only",
                    "description": "Debug shader code by \"printing\" any values of interest to the debug callback or stdout.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": false },
                        { "key": "validate_sync", "value": false },
                        { "key": "stateless_param", "value": false },
                        { "key": "object_lifetime", "value": false },
                        { "key": "thread_safety", "value": false },
                        { "key": "unique_handles", "value": false },
                        { "key": "legacy_detection", "value": false },
                        { "key": "validate_best_practices", "value": false },
                        { "key": "gpuav_enable", "value": false },
                        { "key": "gpu_dump_descriptors", "value": false },
                        { "key": "gpu_dump_copy_memory_indirect", "value": false },
                        { "key": "gpu_dump_device_generated_commands", "value": false },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": true },
                            { "key": "printf_to_stdout", "value": true },
                            { "key": "printf_verbose", "value": false },
                            { "key": "printf_buffer_size", "value": 1024 },
                        { "key": "debug_action",  "value": [] },
                        { "key": "report_flags",  "value": [ "error", "warn", "info" ] },
                        { "key": "enable_message_limit", "value": false }
                    ]
                },
                {
                    "label": "GPU Dump Only",
                    "description": "Turn on only GPU Dump and turn off everything else.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": false },
                        { "key": "validate_sync", "value": false },
                        { "key": "stateless_param", "value": false },
                        { "key": "object_lifetime", "value": false },
                        { "key": "thread_safety", "value": false },
                        { "key": "unique_handles", "value": false },
                        { "key": "legacy_detection", "value": false },
                        { "key": "validate_best_practices", "value": false },
                        { "key": "gpuav_enable", "value": false },
                        { "key": "gpu_dump_descriptors", "value": true },
                        { "key": "gpu_dump_copy_memory_indirect", "value": true },
                        { "key": "gpu_dump_device_generated_commands", "value": true },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": false },
                        { "key": "debug_action",  "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT" ] },
                        { "key": "report_flags",  "value": [ "warn" ] },
                        { "key": "enable_message_limit", "value": false }
                    ]
                },
                {
                    "label": "Legacy Detection Only",
                    "description": "Turn off everything but legacy detection.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": false },
                        { "key": "validate_sync", "value": false },
                        { "key": "stateless_param", "value": false },
                        { "key": "object_lifetime", "value": false },
                        { "key": "thread_safety", "value": false },
                        { "key": "unique_handles", "value": false },
                        { "key": "legacy_detection", "value": true },
                            { "key": "legacy_detection_mode", "value": "ALWAYS" },
                        { "key": "validate_best_practices", "value": false },
                        { "key": "gpuav_enable", "value": false },
                        { "key": "gpu_dump_descriptors", "value": false },
                        { "key": "gpu_dump_copy_memory_indirect", "value": false },
                        { "key": "gpu_dump_device_generated_commands", "value": false },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": false },
                        { "key": "debug_action",  "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT" ] },
                        { "key": "report_flags",  "value": [ "warn" ] },
                        { "key": "enable_message_limit", "value": false }
                    ]
                },
                {
                    "label": "Best Practices Only",
                    "description": "Provides warnings on valid API usage that is potential API misuse.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "status": "STABLE",
                    "settings": [
                        { "key": "validate_core", "value": false },
                        { "key": "validate_sync", "value": false },
                        { "key": "stateless_param", "value": false },
                        { "key": "object_lifetime", "value": false },
                        { "key": "thread_safety", "value": false },
                        { "key": "unique_handles", "value": false },
                        { "key": "legacy_detection", "value": false },
                        { "key": "validate_best_practices", "value": true },
                            { "key": "validate_best_practices_arm", "value": false },
                            { "key": "validate_best_practices_amd", "value": false },
                            { "key": "validate_best_practices_img", "value": false },
                            { "key": "validate_best_practices_nvidia", "value": false },
                        { "key": "gpuav_enable", "value": false },
                        { "key": "gpu_dump_descriptors", "value": false },
                        { "key": "gpu_dump_copy_memory_indirect", "value": false },
                        { "key": "gpu_dump_device_generated_commands", "value": false },
                        { "key": "descriptor_hashing", "value": false },
                        { "key": "printf_enable", "value": false },
                        { "key": "debug_action", "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT" ] },
                        { "key": "report_flags", "value": [ "error", "warn", "perf" ] },
                        { "key": "enable_message_limit", "value": true }
                    ]
                }
            ],
            "settings": [
                {
                    "key": "validation_control",
                    "label": "CPU Centric Validation",
                    "description": "Control the Validation done only on the CPU",
                    "type": "GROUP",
                    "expanded": true,
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "settings": [
                        {
                            "key": "validate_core",
                            "label": "Core",
                            "description": "The main, heavy-duty validation checks. This may be valuable early in the development cycle to reduce validation output while correcting parameter/object usage errors.",
                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/core_checks.md",
                            "type": "BOOL",
                            "default": true,
                            "expanded": false,
                            "settings": [
                                {
                                    "key": "check_image_layout",
                                    "label": "Image Layout",
                                    "description": "Check that the layout of each image subresource is correct whenever it is used by a command buffer. These checks are very CPU intensive for some applications.",
                                    "type": "BOOL",
                                    "view": "HIDDEN",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_core", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "check_command_buffer",
                                    "label": "Command Buffer State",
                                    "description": "Check that all Vulkan objects used by a command buffer have not been destroyed. These checks can be CPU intensive for some applications.",
                                    "type": "BOOL",
                                    "view": "HIDDEN",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_core", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "check_object_in_use",
                                    "label": "Object in Use",
                                    "description": "Check that Vulkan objects are not in use by a command buffer when they are destroyed.",
                                    "type": "BOOL",
                                    "view": "HIDDEN",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_core", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "check_query",
                                    "label": "Query",
                                    "description": "Checks for commands that use VkQueryPool objects.",
                                    "type": "BOOL",
                                    "view": "HIDDEN",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_core", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "check_shaders",
                                    "label": "Shader",
                                    "description": "This will validate the contents of the SPIR-V which can be CPU intensive during application start up. This does internal checks as well as calling spirv-val. (Same effect using VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT)",
                                    "type": "BOOL",
                                    "default": true,
                                    "expanded": false,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_core", "value": true }
                                        ]
                                    },
                                    "settings": [
                                        {
                                            "key": "check_shaders_caching",
                                            "label": "Caching",
                                            "description": "Creates an internal instance of VK_EXT_validation_cache and upon vkDestroyInstance, will cache the shader validation so sequential usage of the validation layers will be skipped.",
                                            "type": "BOOL",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "validate_core", "value": true },
                                                    { "key": "check_shaders", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "debug_disable_spirv_val",
                                            "label": "Disable spirv-val",
                                            "view": "DEBUG",
                                            "description": "Allows normal shader validation to run, but removes just spirv-val for performance reasons",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "validate_core", "value": true },
                                                    { "key": "check_shaders", "value": true }
                                                ]
                                            }
                                        }
                                    ]
                                }
                            ],
                            "messages": [
                                {
                                    "key": "message_validate_core_0",
                                    "title": "Validation layer performance issue",
                                    "version": 1,
                                    "description": "Both 'Core validation' and 'GPU-assisted validation' are enabled. This is going to require a lot of CPU resource causing the Vulkan application to run very slowly.",
                                    "informative": "Are you sure you want to enable 'Core Validation'?",
                                    "severity": "WARNING",
                                    "conditions": [
                                        { "setting": { "key": "validate_core", "value": true }},
                                        { "setting": { "key": "gpuav_enable", "value": true }}
                                    ],
                                    "actions": {
                                        "default": "BUTTON0",
                                        "BUTTON0": {
                                            "type": "OK",
                                            "changes": [
                                                { "setting": { "key": "validate_core", "value": true }},
                                                { "setting": { "key": "gpuav_enable", "value": true }}
                                            ]
                                        },
                                        "BUTTON1": {
                                            "type": "CANCEL",
                                            "changes": [
                                                { "setting": { "key": "validate_core", "value": false }}
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        {
                            "key": "validate_sync",
                            "label": "Synchronization",
                            "description": "Check for resource access conflicts caused by missing or incorrectly used synchronization operations.",
                            "url": "${LUNARG_SDK}/synchronization_usage.html",
                            "type": "BOOL",
                            "default": false,
                            "expanded": false,
                            "settings": [
                                {
                                    "key": "syncval_submit_time_validation",
                                    "label": "Submit time validation",
                                    "description": "Enable synchronization validation on the boundary between submitted command buffers. This also validates accesses from presentation operations. This option can incur a significant performance cost.",
                                    "type": "BOOL",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_sync", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "syncval_shader_accesses_heuristic",
                                    "label": "Shader accesses heuristic",
                                    "description": "Take into account memory accesses performed by the shader based on SPIR-V static analysis. Warning: can produce false-positives, can ignore certain types of accesses, does not support VK_EXT_descriptor_buffer.",
                                    "type": "BOOL",
                                    "default": false,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_sync", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "syncval_load_op_after_store_op_validation",
                                    "label": "LoadOp after StoreOp validation",
                                    "description": "Detect LoadOp after StoreOp hazards between render pass instances.",
                                    "view": "HIDDEN",
                                    "type": "BOOL",
                                    "default": false,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_sync", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "syncval_reporting",
                                    "label": "Error messages",
                                    "description": "Options to configure synchronization validation error reporting",
                                    "type": "GROUP",
                                    "expanded": true,
                                    "settings": [
                                        {
                                            "key": "syncval_message_extra_properties",
                                            "label": "Extra properties",
                                            "description": "Append a section of key-value properties to the error message. Useful for filtering errors.",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "validate_sync", "value": true }
                                                ]
                                            }
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            "key": "stateless_param",
                            "label": "Stateless Parameter",
                            "description": "Stateless parameter checks. This may not always be necessary late in a development cycle.",
                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/stateless_validation.md",
                            "type": "BOOL",
                            "default": true
                        },
                        {
                            "key": "object_lifetime",
                            "label": "Object Lifetime",
                            "description": "Object tracking checks. This may not always be necessary late in a development cycle.",
                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/object_lifetimes.md",
                            "type": "BOOL",
                            "default": true
                        },
                        {
                            "key": "thread_safety",
                            "label": "Thread Safety",
                            "description": "Thread checks. In order to not degrade performance, it might be best to run your program with thread-checking disabled most of the time, enabling it occasionally for a quick sanity check or when debugging difficult application behaviors.",
                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/thread_safety.md",
                            "type": "BOOL",
                            "default": true
                        },
                        {
                            "key": "unique_handles",
                            "label": "Handle Wrapping",
                            "description": "Handle wrapping checks. Disable this feature if you are experiencing crashes when creating new extensions or developing new Vulkan objects/structures.",
                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/handle_wrapping.md",
                            "type": "BOOL",
                            "default": true
                        },
                        {
                            "key": "legacy_detection",
                            "label": "Legacy Detection",
                            "description": "Give warnings when using legacy parts of the API.",
                            "type": "BOOL",
                            "default": false,
                            "expanded": false,
                            "settings": [
                                {
                                    "key": "legacy_detection_mode",
                                    "label": "When to give warning",
                                    "description": "Control when legacy detection warnings are emitted",
                                    "type": "ENUM",
                                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "legacy_detection", "value": true }
                                        ]
                                    },
                                    "default": "ALWAYS",
                                    "flags": [
                                        {
                                            "key": "ALWAYS",
                                            "label": "Always",
                                            "description": "Give warning any time using the superseded functionality."
                                        },
                                        {
                                            "key": "ONLY_SUPPORTED",
                                            "label": "Only supported",
                                            "description": "Only give warning if the instance/device supports the superseded functionality."
                                        },
                                        {
                                            "key": "ONLY_ENABLED",
                                            "label": "Only enabled",
                                            "description": "Only give warning if you enabled the superseded functionality extensions/version."
                                        }
                                    ]
                                }
                            ],
                            "messages": [
                                {
                                    "key": "message_legacy_enable_1",
                                    "title": "Warning: Legacy Detection without warning level message severity",
                                    "version": 1,
                                    "description": "Enabling Legacy Detection, but the 'warning' level message severity is disabled, so messages won't be shown.",
                                    "informative": "Do you want to add 'warning' level to 'Message Severity'?",
                                    "severity": "INFORMATION",
                                    "conditions": [
                                        { "setting": { "key": "legacy_detection", "value": true }},
                                        { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" }
                                    ],
                                    "actions": {
                                        "default": "BUTTON0",
                                        "BUTTON0": {
                                            "type": "OK",
                                            "changes": [
                                                { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                            ]
                                        },
                                        "BUTTON1": {
                                            "type": "CANCEL",
                                            "changes": [
                                                { "setting": { "key": "legacy_detection", "value": false }}
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        {
                            "key": "validate_best_practices",
                            "label": "Best Practices",
                            "description": "Outputs warnings related to common misuse of the API, but which are not explicitly prohibited by the specification.",
                            "url": "${LUNARG_SDK}/best_practices.html",
                            "type": "BOOL",
                            "default": false,
                            "expanded": false,
                            "status": "STABLE",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                            "settings": [
                                {
                                    "key": "validate_best_practices_arm",
                                    "label": "ARM-specific best practices",
                                    "description": "Outputs warnings for spec-conforming but non-ideal code on ARM GPUs.",
                                    "type": "BOOL",
                                    "default": false,
                                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_best_practices", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "validate_best_practices_amd",
                                    "label": "AMD-specific best practices",
                                    "description": "Outputs warnings for spec-conforming but non-ideal code on AMD GPUs.",
                                    "type": "BOOL",
                                    "default": false,
                                    "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_best_practices", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "validate_best_practices_img",
                                    "label": "IMG-specific best practices",
                                    "description": "Outputs warnings for spec-conforming but non-ideal code on Imagination GPUs.",
                                    "type": "BOOL",
                                    "default": false,
                                    "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_best_practices", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "validate_best_practices_nvidia",
                                    "label": "NVIDIA-specific best practices",
                                    "description": "Outputs warnings for spec-conforming but non-ideal code on NVIDIA GPUs.",
                                    "type": "BOOL",
                                    "default": false,
                                    "platforms": [ "WINDOWS", "LINUX", "ANDROID" ],
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "validate_best_practices", "value": true }
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                },
                {
                    "key": "validation_control_gpu",
                    "label": "GPU Centric Validation",
                    "description": "Control the Validation for GPU centric API",
                    "type": "GROUP",
                    "expanded": true,
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "settings": [
                        {
                            "key": "gpuav_enable",
                            "label": "GPU Assisted Validation (GPU-AV)",
                            "description": "Enable validation that cannot be done the CPU and needs hooks into the GPU execution",
                            "url": "${LUNARG_SDK}/gpu_validation.html",
                            "type": "BOOL",
                            "default": false,
                            "expanded": true,
                            "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                            "settings": [
                                {
                                    "key": "gpuav_safe_mode",
                                    "label": "Safe Mode",
                                    "description": "Will have GPU-AV try and prevent crashes, but will be much slower to validate. If using Safe Mode, consider using selective shader instrumentation, to only instrument the shaders/pipelines causing issues.",
                                    "type": "BOOL",
                                    "default": false,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "gpuav_enable", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "gpuav_force_on_robustness",
                                    "label": "Force on robustness features",
                                    "description": "This will enable all possible robustness features for the app at device creation time. This can be used to quickly detect if with robustness, your issue disappears. GPU-AV will also skip validating things already covered by robustness, so turning on should reduce GPU-AV performance overhead.",
                                    "type": "BOOL",
                                    "default": false,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "gpuav_enable", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "gpuav_shader_instrumentation",
                                    "label": "Shader instrumentation",
                                    "description": "Instrument shaders to validate descriptors, descriptor indexing, buffer device addresses and ray queries. Warning: will considerably slow down shader executions.",
                                    "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/gpu_av_shader_instrumentation.md",
                                    "type": "BOOL",
                                    "expanded": true,
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "gpuav_enable", "value": true }
                                        ]
                                    },
                                    "settings": [
                                        {
                                            "key": "gpuav_descriptor_checks",
                                            "label": "Descriptors indexing",
                                            "description": "Enable descriptors and buffer out of bounds validation when using descriptor indexing",
                                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/gpu_av_descriptor_indexing.md",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_post_process_descriptor_indexing",
                                            "label": "Post process descriptor indexing",
                                            "description": "Track which descriptor indexes were used in shader to run normal validation afterwards",
                                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/gpu_av_post_process.md",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_buffer_address_oob",
                                            "label": "Out of bounds buffer device addresses",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "description": "Check for invalid access using buffer device address",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_mesh_shading",
                                            "label": "Mesh Shading SPIR-V instructions",
                                            "description": "Enable shader instrumentation on VK_EXT_mesh_shader",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_validate_trace_ray",
                                            "label": "TraceRay SPIR-V instructions",
                                            "description": "Enable shader instrumentation on OpTraceRayKHR, OpHitObject*, OpReportIntersectionKHR, OpRayQueryInitializeKHR",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_vertex_attribute_fetch_oob",
                                            "label": "Out of bounds vertex attribute fetching",
                                            "description": "Validate that no vertex attribute fetching is out of bonds",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_shader_sanitizer",
                                            "label": "Shader Sanitizer",
                                            "description": "Things invalid to do in SPIR-V but don't have a dedicated check (example: dividing an int by zero, reaching OpUnreachable, invalid casting, overflow/undeflow). When in safe mode, will modify the invalid usage.",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_shared_memory_data_race",
                                            "label": "Shared Memory Data Race Detection",
                                            "description": "Detects data races on shared memory (Compute shaders only). Limitations: This does not handle mixing atomics and non-atomics on the same locations without a barrier in between, this could lead to false positives. This assumes barrier() is used for all shared memory synchronization.",
                                            "type": "BOOL",
                                            "view": "DEBUG",
                                            "default": true,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_shader_instrumentation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_max_indices_count",
                                            "label": "Maximum Indices",
                                            "description": "Number of indices held in the buffer used to index commands and validation resources (Max number of draws/dispatches in a command buffer that can be tracked). Can be lowered to save memory.",
                                            "type": "INT",
                                            "view": "DEBUG",
                                            "default": 8192,
                                            "range": {
                                                "min": 0,
                                                "max": 65534
                                            },
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "key": "gpuav_buffers_validation",
                                    "label": "Buffer content validation",
                                    "description": "Validate buffers containing parameters used in indirect Vulkan commands, or used in copy commands",
                                    "type": "BOOL",
                                    "view": "DEBUG",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "gpuav_enable", "value": true }
                                        ]
                                    },
                                    "settings": [
                                        {
                                            "key": "gpuav_indirect_draws_buffers",
                                            "label": "Indirect draws parameters",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate buffers containing draw parameters used in indirect draw commands. Includes vkCmdDrawMeshTasks* calls as well",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_indirect_dispatches_buffers",
                                            "label": "Indirect dispatches parameters",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate buffers containing dispatch parameters used in indirect dispatch commands",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_indirect_trace_rays_buffers",
                                            "label": "Indirect trace rays parameters",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate buffers containing ray tracing parameters used in indirect ray tracing commands",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_buffer_copies",
                                            "label": "Buffer copies",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate copies involving a VkBuffer. Right now only validates copy buffer to image.",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_copy_memory_indirect",
                                            "label": "VK_KHR_copy_memory_indirect",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate VK_KHR_copy_memory_indirect.",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_index_buffers",
                                            "label": "Index buffers",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate that indexed draws do not fetch indices outside of the bounds of the index buffer.",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_acceleration_structures_builds",
                                            "label": "Acceleration structures builds",
                                            "type": "BOOL",
                                            "default": true,
                                            "description": "Validate acceleration structures references in TLAS build commands.",
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true },
                                                    { "key": "gpuav_buffers_validation", "value": true }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "key": "gpuav_ray_tracing_buffers_consistency",
                                    "label": "Ray tracing buffers consistency",
                                    "type": "BOOL",
                                    "default": false,
                                    "description": "Validate that between a BLAS build and its update, triangle geometries using index buffer keep its content identical (VUID 03768), and that active/inactive primitives do not change this status (VUIDs 03663 and 03664). Warning: a record of vertex/index buffers will be maintained in device local memory, so validation can be GPU memory heavy.",
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "gpuav_enable", "value": true },
                                            { "key": "gpuav_buffers_validation", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "gpuav_scoped",
                                    "label": "Scoped GPU-AV",
                                    "description": "Reduce the scope of GPU-AV allowing it to be must faster.",
                                    "type": "GROUP",
                                    "expanded": false,
                                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                                    "settings": [
                                        {
                                            "key": "gpuav_select_instrumented_shaders",
                                            "label": "Selective Instrument Shaders",
                                            "description": "When turned on, shaders are NOT instrumented unless selected. This can be done by:\n- passing a VkValidationFeaturesEXT struct in the pNext of VkShaderModuleCreateInfo/VkPipelineShaderStageCreateInfo/vkCreateShadersEXT pNext\n- using a regex matching a shader/pipeline debug name.\n- Providing a CDL dump file to parse the debug names from it.",
                                            "url": "https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/gpu_av_scoped.md",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            },
                                            "settings": [
                                                {
                                                    "key": "gpuav_shaders_to_instrument",
                                                    "label": "Shader/pipeline name regexes",
                                                    "description": "Any shader or pipeline library debug name (set with vkSetDebugUtilsObjectNameEXT) fully matching any listed regular expression will be instrumented when creating pipelines with those shaders or libraries. Regex grammar: Modified ECMAScript. No support for shader objects yet. Warning: instrumentation being performed at final pipeline creation time, if shaders modules have already been destroyed at this step (possible when using pipeline libraries), they won't be found by this regex selection system. In this case, consider naming pipeline libraries instead.",
                                                    "type": "LIST",
                                                    "default": [],
                                                    "dependence": {
                                                        "mode": "ALL",
                                                        "settings": [
                                                            { "key": "gpuav_enable", "value": true },
                                                            { "key": "gpuav_select_instrumented_shaders", "value": true }
                                                        ]
                                                    }
                                                },
                                                {
                                                    "key": "gpuav_cdl_dump_path",
                                                    "label": "CDL dump file",
                                                    "description": "Path to a Crash Diagnostic Layer (CDL) dump file. Pipeline names found in this file will be selected for instrumentation.",
                                                    "type": "LOAD_FILE",
                                                    "default": "",
                                                    "dependence": {
                                                        "mode": "ALL",
                                                        "settings": [
                                                            { "key": "gpuav_enable", "value": true },
                                                            { "key": "gpuav_select_instrumented_shaders", "value": true }
                                                        ]
                                                    }
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "key": "gpuav_debug_settings",
                                    "label": "Developer Debug Settings",
                                    "description": "GPU-AV debug settings",
                                    "type": "GROUP",
                                    "view": "DEBUG",
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "gpuav_enable", "value": true }
                                        ]
                                    },
                                    "settings": [
                                        {
                                            "key": "gpuav_debug_disable_all",
                                            "label": "Disable all of GPU-AV",
                                            "description": "Acts as a VkValidationFeatureDisableEXT to override the VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT passed by the user",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_debug_validate_instrumented_shaders",
                                            "label": "Validate instrumented shaders",
                                            "description": "Run spirv-val after doing shader instrumentation",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_debug_dump_instrumented_shaders",
                                            "label": "Dump instrumented shaders",
                                            "description": "Will dump the instrumented shaders (before and after) to working directory",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_debug_max_instrumentations_count",
                                            "label": "Limit how many time a pass can instrument the SPIR-V",
                                            "description": "Zero is same as unlimited",
                                            "type": "INT",
                                            "default": 0,
                                            "range": {
                                                "min": 0
                                            },
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_debug_print_instrumentation_info",
                                            "label": "Print SPIR-V instrumentation info",
                                            "description": "Prints verbose information about the instrumentation of the SPIR-V",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        },
                                        {
                                            "key": "gpuav_debug_disable_dontinline",
                                            "label": "Disable DontInline performance boost",
                                            "description": "Disable DontInline SPIR-V function hint for instrumentations functions, at the cost of a performance boost if the driver supports it. This flag can provoke instabilities on some drivers. Currently a debug option until we learn more about these instabilities.",
                                            "type": "BOOL",
                                            "default": false,
                                            "dependence": {
                                                "mode": "ALL",
                                                "settings": [
                                                    { "key": "gpuav_enable", "value": true }
                                                ]
                                            }
                                        }
                                    ]
                                }
                            ],
                            "messages": [
                                {
                                    "key": "message_gpuav_enable_0",
                                    "title": "Validation layer performance warning",
                                    "version": 1,
                                    "description": "Both 'Core validation' and 'GPU-assisted validation' are enabled. This is going to require a lot of CPU resource causing the Vulkan application to run very slowly.",
                                    "informative": "Are you sure you want to enable 'GPU Assisted Validation'?",
                                    "severity": "WARNING",
                                    "conditions": [
                                        { "setting": { "key": "validate_core", "value": true }},
                                        { "setting": { "key": "gpuav_enable", "value": true }}
                                    ],
                                    "actions": {
                                        "default": "BUTTON0",
                                        "BUTTON0": {
                                            "type": "OK",
                                            "changes": [
                                                { "setting": { "key": "validate_core", "value": true }},
                                                { "setting": { "key": "gpuav_enable", "value": true }}
                                            ]
                                        },
                                        "BUTTON1": {
                                            "type": "CANCEL",
                                            "changes": [
                                                { "setting": { "key": "gpuav_enable", "value": false }}
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        {
                            "key": "gpu_dump",
                            "label": "GPU Dump",
                            "description": "Similar to API Dump, but using all the state tracking information, print out information for GPU centric extensions.",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                            "type": "GROUP",
                            "expanded": true,
                            "settings": [
                                {
                                    "key": "gpu_dump_descriptors",
                                    "label": "Dump Descriptor Heap/Buffer",
                                    "description": "Dump all the information at every draw/dispatch when recording VK_EXT_descriptor_heap or VK_EXT_descriptor_buffer",
                                    "type": "BOOL",
                                    "default": false,
                                    "messages": [
                                        {
                                            "key": "message_gpu_dump_enable_1",
                                            "title": "Warning: GPU Dump without info/warning level message severity",
                                            "version": 1,
                                            "description": "Enabling GPU Dump for Descriptors, but both 'info' and 'warning' level message severity is disabled, so GPU Dump message won't be shown.",
                                            "informative": "Do you want to add 'warning' level to 'Message Severity'?",
                                            "severity": "INFORMATION",
                                            "conditions": [
                                                { "setting": { "key": "gpu_dump_descriptors", "value": true }},
                                                { "setting": { "key": "gpu_dump_to_stdout", "value": false }},
                                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" },
                                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                                            ],
                                            "actions": {
                                                "default": "BUTTON0",
                                                "BUTTON0": {
                                                    "type": "OK",
                                                    "changes": [
                                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                                    ]
                                                },
                                                "BUTTON1": {
                                                    "type": "CANCEL",
                                                    "changes": [
                                                        { "setting": { "key": "gpu_dump_descriptors", "value": false }}
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                },
                                {
                                    "key": "gpu_dump_copy_memory_indirect",
                                    "label": "Dump VK_KHR_copy_memory_indirect",
                                    "description": "Dump information at each copy command when recording",
                                    "type": "BOOL",
                                    "default": false,
                                    "messages": [
                                        {
                                            "key": "message_gpu_dump_enable_2",
                                            "title": "Warning: GPU Dump without info/warning level message severity",
                                            "version": 1,
                                            "description": "Enabling GPU Dump for Copy Memory Indirect, but both 'info' and 'warning' level message severity is disabled, so GPU Dump message won't be shown.",
                                            "informative": "Do you want to add 'warning' level to 'Message Severity'?",
                                            "severity": "INFORMATION",
                                            "conditions": [
                                                { "setting": { "key": "gpu_dump_copy_memory_indirect", "value": true }},
                                                { "setting": { "key": "gpu_dump_to_stdout", "value": false }},
                                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" },
                                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                                            ],
                                            "actions": {
                                                "default": "BUTTON0",
                                                "BUTTON0": {
                                                    "type": "OK",
                                                    "changes": [
                                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                                    ]
                                                },
                                                "BUTTON1": {
                                                    "type": "CANCEL",
                                                    "changes": [
                                                        { "setting": { "key": "gpu_dump_copy_memory_indirect", "value": false }}
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                },
                                {
                                    "key": "gpu_dump_device_generated_commands",
                                    "label": "Dump VK_EXT_device_generated_commands",
                                    "description": "Dump information at each vkCmdExecuteGeneratedCommands when recording",
                                    "type": "BOOL",
                                    "default": false,
                                    "messages": [
                                        {
                                            "key": "message_gpu_dump_enable_3",
                                            "title": "Warning: GPU Dump without info/warning level message severity",
                                            "version": 1,
                                            "description": "Enabling GPU Dump for Device Generated Commands, but both 'info' and 'warning' level message severity is disabled, so GPU Dump message won't be shown.",
                                            "informative": "Do you want to add 'warning' level to 'Message Severity'?",
                                            "severity": "INFORMATION",
                                            "conditions": [
                                                { "setting": { "key": "gpu_dump_device_generated_commands", "value": true }},
                                                { "setting": { "key": "gpu_dump_to_stdout", "value": false }},
                                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" },
                                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                                            ],
                                            "actions": {
                                                "default": "BUTTON0",
                                                "BUTTON0": {
                                                    "type": "OK",
                                                    "changes": [
                                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                                    ]
                                                },
                                                "BUTTON1": {
                                                    "type": "CANCEL",
                                                    "changes": [
                                                        { "setting": { "key": "gpu_dump_copy_memory_indirect", "value": false }}
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                },
                                {
                                    "key": "gpu_dump_to_stdout",
                                    "label": "Redirect all GPU Dump to stdout",
                                    "description": "Instead of using the debug callback with information severity, redirect to stdout instead.",
                                    "type": "BOOL",
                                    "default": false
                                }
                            ]
                        },
                        {
                            "key": "descriptor_hashing",
                            "label": "Descriptor Hashing",
                            "description": "When enabled and using VK_EXT_descriptor_heap/VK_EXT_descriptor_buffer, this will attempt to track all descriptors seen such that GPU-AV and GPU Dump can detect more errors. This will increase the memory footprint.",
                            "type": "BOOL",
                            "default": false,
                            "expanded": false,
                            "settings": [
                                {
                                    "key": "descriptor_hashing_total_descriptors",
                                    "label": "Total expected descriptors used",
                                    "description": "We create a static allocation to hold all potential descriptor hashes we see. The larger it is the more memory and time it may take. The true capacity is always this value rounded up to the next power of two.",
                                    "type": "INT",
                                    "default": 65536,
                                    "range": {
                                        "min": 4,
                                        "max": 1073741824
                                    },
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "descriptor_hashing", "value": true }
                                        ]
                                    }
                                }
                            ]
                        },
                                                {
                            "key": "printf_only_preset",
                            "label": "Debug Printf only preset",
                            "description": "A single, quick setting to turn on only DebugPrintf and turn off everything else. Main usage is for people not able to use VkConfig and still want a fast preset to use.",
                            "type": "BOOL",
                            "default": false,
                            "view": "DEBUG",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS" ]
                        },
                        {
                            "key": "printf_enable",
                            "label": "Debug Printf",
                            "description": "Enable DebugPrintf and will print anything use NonSemantic.DebugPrintf in their SPIR-V",
                            "type": "BOOL",
                            "url": "${LUNARG_SDK}/debug_printf.html",
                            "default": false,
                            "expanded": false,
                            "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                            "settings": [
                                {
                                    "key": "printf_to_stdout",
                                    "label": "Redirect Printf messages to stdout",
                                    "description": "Enable redirection of Debug Printf messages from the debug callback to stdout",
                                    "type": "BOOL",
                                    "default": true,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "printf_enable", "value": true }
                                        ]
                                    },
                                    "messages": [
                                        {
                                            "key": "message_printf_enable_3",
                                            "title": "Debug Printf without 'info' level message severity flag",
                                            "version": 1,
                                            "description": "Enabling Debug Printf without stdout redirection, but 'info' level message severity is disabled, so printf message won't be shown.",
                                            "informative": "Do you want to add 'info' level to 'Message Severity'?",
                                            "severity": "INFORMATION",
                                            "conditions": [
                                                { "setting": { "key": "printf_enable", "value": true }},
                                                { "setting": { "key": "printf_to_stdout", "value": false }},
                                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                                            ],
                                            "actions": {
                                                "default": "BUTTON0",
                                                "BUTTON0": {
                                                    "type": "OK",
                                                    "changes": [
                                                        { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "APPEND" }
                                                    ]
                                                },
                                                "BUTTON1": {
                                                    "type": "CANCEL",
                                                    "changes": [
                                                        { "setting": { "key": "printf_to_stdout", "value": true }}
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                },
                                {
                                    "key": "printf_verbose",
                                    "label": "Printf verbose",
                                    "description": "Will print out handles, instruction location, position in command buffer, and more",
                                    "type": "BOOL",
                                    "default": false,
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "printf_enable", "value": true }
                                        ]
                                    }
                                },
                                {
                                    "key": "printf_buffer_size",
                                    "label": "Printf buffer size",
                                    "description": "Set the size in bytes of the buffer per VkCommandBuffer to hold the messages (Each message is about 50 bytes)",
                                    "type": "INT",
                                    "default": 1024,
                                    "range": {
                                        "min": 128,
                                        "max": 1048576
                                    },
                                    "unit": "bytes",
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "printf_enable", "value": true }
                                        ]
                                    }
                                }
                            ],
                            "messages": [
                                {
                                    "key": "message_printf_enable_1",
                                    "title": "Warning: Debug Printf without info level message severity flag",
                                    "version": 1,
                                    "description": "Enabling Debug Printf, but info level message severity is disabled, so printf message won't be shown.",
                                    "informative": "Do you want to add 'info' level to 'Message Severity'?",
                                    "severity": "INFORMATION",
                                    "conditions": [
                                        { "setting": { "key": "printf_enable", "value": true }},
                                        { "setting": { "key": "printf_to_stdout", "value": false }},
                                        { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                                    ],
                                    "actions": {
                                        "default": "BUTTON0",
                                        "BUTTON0": {
                                            "type": "OK",
                                            "changes": [
                                                { "setting": { "key": "report_flags", "value": ["info"] }, "operator": "APPEND" }
                                            ]
                                        },
                                        "BUTTON1": {
                                            "type": "CANCEL"
                                        }
                                    }
                                }
                            ]
                        }
                    ]
                },
                {
                    "key": "debug_action",
                    "label": "Debug Action",
                    "description": "Specifies what action is to be taken when a layer reports information",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "type": "FLAGS",
                    "expanded": true,
                    "flags": [
                        {
                            "key": "VK_DBG_LAYER_ACTION_LOG_MSG",
                            "label": "Log Message",
                            "description": "Log a txt message to stdout or to a log filename.",
                            "settings": [
                                {
                                    "key": "log_filename",
                                    "label": "Log Filename",
                                    "description": "Specifies the output filename",
                                    "type": "SAVE_FILE",
                                    "default": "stdout",
                                    "dependence": {
                                        "mode": "ALL",
                                        "settings": [
                                            { "key": "debug_action", "value": [ "VK_DBG_LAYER_ACTION_LOG_MSG" ] }
                                        ]
                                    }
                                }
                            ]
                        },
                        {
                            "key": "VK_DBG_LAYER_ACTION_CALLBACK",
                            "label": "Callback",
                            "description": "Call user defined callback function(s) that have been registered via the VK_EXT_debug_report extension. Since application must register callback, this is a NOOP for the settings file.",
                            "view": "HIDDEN"
                        },
                        {
                            "key": "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT",
                            "label": "Debug Output",
                            "description": "Log a txt message using the Windows OutputDebugString function.",
                            "platforms": [ "WINDOWS" ]
                        },
                        {
                            "key": "VK_DBG_LAYER_ACTION_BREAK",
                            "label": "Break",
                            "description": "Trigger a breakpoint if a debugger is in use."
                        },
                        {
                            "key": "VK_DBG_LAYER_ACTION_FAIL",
                            "label": "Fail",
                            "description": "Fail the command with VK_ERROR_VALIDATION_FAILED_EXT (prevents invalid commands from reaching the ICD)."
                        }
                    ],
                    "default": [
                        "VK_DBG_LAYER_ACTION_LOG_MSG", "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT"
                    ]
                },
                {
                    "key": "report_flags",
                    "label": "Message Severity",
                    "description": "Comma-delineated list of options specifying the types of messages to be reported",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "type": "FLAGS",
                    "expanded": true,
                    "flags": [
                        {
                            "key": "info",
                            "label": "Info",
                            "description": "Report informational messages."
                        },
                        {
                            "key": "warn",
                            "label": "Warning",
                            "description": "Report warnings from using the API in a manner which may lead to undefined behavior or to warn the user of common trouble spots. A warning does NOT necessarily signify illegal application behavior."
                        },
                        {
                            "key": "perf",
                            "label": "Performance",
                            "description": "Report usage of the API that may cause suboptimal performance."
                        },
                        {
                            "key": "error",
                            "label": "Error",
                            "description": "Report errors in API usage."
                        },
                        {
                            "key": "debug",
                            "label": "Debug",
                            "description": "For layer development. Report messages for debugging layer behavior.",
                            "view": "DEBUG"
                        }
                    ],
                    "messages": [
                        {
                            "key": "message_printf_enable_2",
                            "title": "Debug Printf without 'info' level message severity flag",
                            "version": 1,
                            "description": "Disabling info level message severity is disabled, so printf message won't be shown.",
                            "informative": "Are you sure you want to remove 'info' level from 'Message Severity'?",
                            "severity": "INFORMATION",
                            "conditions": [
                                { "setting": { "key": "printf_enable", "value": true }},
                                { "setting": { "key": "printf_to_stdout", "value": false }},
                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                            ],
                            "actions": {
                                "default": "BUTTON0",
                                "BUTTON0": {
                                    "type": "OK"
                                },
                                "BUTTON1": {
                                    "type": "CANCEL",
                                    "changes": [
                                        { "setting": {"key": "report_flags", "value": ["info"]}, "operator": "APPEND" }
                                    ]
                                }
                            }
                        },
                        {
                            "key": "message_gpu_dump_enable_1b",
                            "title": "GPU Dump without info/warning level message severity",
                            "version": 1,
                            "description": "Enabling GPU Dump for Descriptors, but both 'info' and 'warning' level message severity is disabled, so GPU Dump message won't be shown.",
                            "informative": "Are you sure you want to remove 'info' and 'warning' level to 'Message Severity'?",
                            "severity": "INFORMATION",
                            "conditions": [
                                { "setting": { "key": "gpu_dump_descriptors", "value": true }},
                                { "setting": { "key": "gpu_dump_to_stdout", "value": false }},
                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" },
                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                            ],
                            "actions": {
                                "default": "BUTTON0",
                                "BUTTON0": {
                                    "type": "OK",
                                    "changes": [
                                    ]
                                },
                                "BUTTON1": {
                                    "type": "CANCEL",
                                    "changes": [
                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                    ]
                                }
                            }
                        },
                        {
                            "key": "message_gpu_dump_enable_2b",
                            "title": "GPU Dump without info/warning level message severity",
                            "version": 1,
                            "description": "Enabling GPU Dump for Copy Memory Indirect, but both 'info' and 'warning' level message severity is disabled, so GPU Dump message won't be shown.",
                            "informative": "Are you sure you want to remove 'info' and 'warning' level to 'Message Severity'?",
                            "severity": "INFORMATION",
                            "conditions": [
                                { "setting": { "key": "gpu_dump_copy_memory_indirect", "value": true }},
                                { "setting": { "key": "gpu_dump_to_stdout", "value": false }},
                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" },
                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                            ],
                            "actions": {
                                "default": "BUTTON0",
                                "BUTTON0": {
                                    "type": "OK",
                                    "changes": [
                                    ]
                                },
                                "BUTTON1": {
                                    "type": "CANCEL",
                                    "changes": [
                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                    ]
                                }
                            }
                        },
                        {
                            "key": "message_gpu_dump_enable_3b",
                            "title": "GPU Dump without info/warning level message severity",
                            "version": 1,
                            "description": "Enabling GPU Dump for Device Generated Commands, but both 'info' and 'warning' level message severity is disabled, so GPU Dump message won't be shown.",
                            "informative": "Are you sure you want to remove 'info' and 'warning' level to 'Message Severity'?",
                            "severity": "INFORMATION",
                            "conditions": [
                                { "setting": { "key": "gpu_dump_device_generated_commands", "value": true }},
                                { "setting": { "key": "gpu_dump_to_stdout", "value": false }},
                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" },
                                { "setting": { "key": "report_flags", "value": ["info"]}, "operator": "NOT" }
                            ],
                            "actions": {
                                "default": "BUTTON0",
                                "BUTTON0": {
                                    "type": "OK",
                                    "changes": [
                                    ]
                                },
                                "BUTTON1": {
                                    "type": "CANCEL",
                                    "changes": [
                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                    ]
                                }
                            }
                        },
                        {
                            "key": "message_legacy_enable_1b",
                            "title": "Legacy Detection without warning level message severity",
                            "version": 1,
                            "description": "Enabling Legacy Detection, but the 'warning' level message severity is disabled, so messages won't be shown.",
                            "informative": "Are you sure you want to remove 'warning' level to 'Message Severity'?",
                            "severity": "INFORMATION",
                            "conditions": [
                                { "setting": { "key": "legacy_detection", "value": true }},
                                { "setting": { "key": "report_flags", "value": ["warn"]}, "operator": "NOT" }
                            ],
                            "actions": {
                                "default": "BUTTON0",
                                "BUTTON0": {
                                    "type": "OK",
                                    "changes": [
                                    ]
                                },
                                "BUTTON1": {
                                    "type": "CANCEL",
                                    "changes": [
                                        { "setting": { "key": "report_flags", "value": ["warn"] }, "operator": "APPEND" }
                                    ]
                                }
                            }
                        }
                    ],
                    "default": [
                        "error", "warn"
                    ]
                },
                {
                    "key": "enable_message_limit",
                    "label": "Limit Duplicated Messages",
                    "description": "Enable limiting of duplicate messages.",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "type": "BOOL",
                    "default": true,
                    "expanded": true,
                    "settings": [
                        {
                            "key": "duplicate_message_limit",
                            "env": "VK_LAYER_DUPLICATE_MESSAGE_LIMIT",
                            "label": "Max Duplicated Messages",
                            "description": "Maximum number of times any single validation message should be reported.",
                            "type": "INT",
                            "default": 10,
                            "range": {
                                "min": 1
                            },
                            "dependence": {
                                "mode": "ALL",
                                "settings": [
                                    { "key": "enable_message_limit", "value": true }
                                ]
                            }
                        }
                    ]
                },
                {
                    "key": "message_id_filter",
                    "label": "Mute Message VUIDs",
                    "description": "List of VUIDs which are to be IGNORED by the validation layer. The list is comma separated and can be either the entire VUID string, the hashed value, or the last 5 digit number of a VUID",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "type": "LIST",
                    "env": "VK_LAYER_MESSAGE_ID_FILTER",
                    "default": []
                },
                {
                    "key": "message_format",
                    "label": "Message Format",
                    "description": "Specifies how error messages are reported",
                    "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                    "type": "GROUP",
                    "expanded": true,
                    "settings": [
                        {
                            "key": "message_format_json",
                            "label": "JSON",
                            "description": "Display Validation as JSON (VkDebugUtilsMessengerCallbackDataEXT::pMessage will contain JSON)",
                            "type": "BOOL",
                            "default": false
                        },
                        {
                            "key": "message_format_display_application_name",
                            "label": "Display Application Name",
                            "description": "Useful when running multiple instances to know which instance the message is from.",
                            "type": "BOOL",
                            "default": false
                        }
                    ]
                },
                {
                    "key": "custom_stype_list",
                    "label": "Provide Custom SType",
                    "type": "LIST",
                    "description": "specify custom pNext structs using a vector of strings",
                    "view": "HIDDEN",
                    "default": []
                },
                {
                    "key": "disables",
                    "label": "Disables",
                    "description": "Specify areas of validation to be disabled",
                    "type": "FLAGS",
                    "status": "DEPRECATED",
                    "view": "HIDDEN",
                    "env": "VK_LAYER_DISABLES",
                    "flags": [
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT",
                            "label": "Thread Safety",
                            "description": "Thread checks. In order to not degrade performance, it might be best to run your program with thread-checking disabled most of the time, enabling it occasionally for a quick sanity check or when debugging difficult application behaviors.",
                            "deprecated_by_key": "thread_safety"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT",
                            "label": "Stateless Parameter",
                            "description": "Stateless parameter checks. This may not always be necessary late in a development cycle.",
                            "deprecated_by_key": "stateless_param"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT",
                            "label": "Object Lifetime",
                            "description": "Object tracking checks. This may not always be necessary late in a development cycle.",
                            "deprecated_by_key": "object_lifetime"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT",
                            "label": "Core",
                            "description": "The main, heavy-duty validation checks. This may be valuable early in the development cycle to reduce validation output while correcting parameter/object usage errors.",
                            "deprecated_by_key": "validate_core"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT",
                            "label": "Handle Wrapping",
                            "description": "Handle wrapping checks. Disable this feature if you are experiencing crashes when creating new extensions or developing new Vulkan objects/structures.",
                            "deprecated_by_key": "unique_handles"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT",
                            "label": "Shader Validation",
                            "description": "Shader checks. These checks can be CPU intensive during application start up, especially if Shader Validation Caching is also disabled.",
                            "deprecated_by_key": "check_shaders"
                        },
                        {
                            "key": "VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE",
                            "label": "Command Buffer State",
                            "description": "Check that all Vulkan objects used by a command buffer have not been destroyed. These checks can be CPU intensive for some applications.",
                            "deprecated_by_key": "check_command_buffer"
                        },
                        {
                            "key": "VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION",
                            "label": "Image Layout",
                            "description": "Check that the layout of each image subresource is correct whenever it is used by a command buffer. These checks are very CPU intensive for some applications.",
                            "deprecated_by_key": "check_image_layout"
                        },
                        {
                            "key": "VALIDATION_CHECK_DISABLE_QUERY_VALIDATION",
                            "label": "Query",
                            "description": "Checks for commands that use VkQueryPool objects.",
                            "deprecated_by_key": "check_query"
                        },
                        {
                            "key": "VALIDATION_CHECK_DISABLE_OBJECT_IN_USE",
                            "label": "Object in Use",
                            "description": "Check that Vulkan objects are not in use by a command buffer when they are destroyed.",
                            "deprecated_by_key": "check_object_in_use"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT",
                            "label": "Shader Validation Caching",
                            "description": "Disable caching of shader validation results.",
                            "deprecated_by_key": "check_shaders_caching"
                        }
                    ],
                    "default": [
                        "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT"
                    ]
                },
                {
                    "key": "enables",
                    "label": "Enables",
                    "description": "Setting an option here will enable specialized areas of validation",
                    "type": "FLAGS",
                    "status": "DEPRECATED",
                    "view": "HIDDEN",
                    "env": "VK_LAYER_ENABLES",
                    "flags": [
                        {
                            "key": "VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT",
                            "label": "Synchronization",
                            "description": "This feature reports resource access conflicts due to missing or incorrect synchronization operations between actions (Draw, Copy, Dispatch, Blit) reading or writing the same regions of memory.",
                            "url": "${LUNARG_SDK}/synchronization_usage.html",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                            "deprecated_by_key": "validate_sync"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT",
                            "label": "Debug Printf",
                            "description": "Enables processing of debug printf instructions in shaders and sending debug strings to the debug callback.",
                            "url": "${LUNARG_SDK}/debug_printf.html",
                            "platforms": [ "WINDOWS", "LINUX" ],
                            "deprecated_by_key": "printf_enable"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT",
                            "label": "GPU-Assisted",
                            "description": "Check for API usage errors at shader execution time.",
                            "url": "${LUNARG_SDK}/gpu_validation.html",
                            "platforms": [ "WINDOWS", "LINUX" ],
                            "deprecated_by_key": "gpuav_enable"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT",
                            "label": "Reserve Descriptor Set Binding Slot",
                            "description": "Specifies that the validation layers reserve a descriptor set binding slot for their own use. The layer reports a value for VkPhysicalDeviceLimits::maxBoundDescriptorSets that is one less than the value reported by the device. If the device supports the binding of only one descriptor set, the validation layer does not perform GPU-assisted validation.",
                            "platforms": [ "WINDOWS", "LINUX" ],
                            "deprecated_by_key": "gpuav_enable"
                        },
                        {
                            "key": "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT",
                            "label": "Best Practices",
                            "description": "Activating this feature enables the output of warnings related to common misuse of the API, but which are not explicitly prohibited by the specification.",
                            "url": "${LUNARG_SDK}/best_practices.html",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                            "deprecated_by_key": "validate_best_practices"
                        },
                        {
                            "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_ARM",
                            "label": "ARM-specific best practices",
                            "description": "Activating this feature enables the output of warnings related to ARM-specific misuse of the API, but which are not explicitly prohibited by the specification.",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS", "ANDROID" ],
                            "deprecated_by_key": "validate_best_practices_arm"
                        },
                        {
                            "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_AMD",
                            "label": "AMD-specific best practices",
                            "description": "Adds check for spec-conforming but non-ideal code on AMD GPUs.",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                            "deprecated_by_key": "validate_best_practices_amd"
                        },
                        {
                            "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_IMG",
                            "label": "IMG-specific best practices",
                            "description": "Adds check for spec-conforming but non-ideal code on Imagination GPUs.",
                            "platforms": [ "WINDOWS", "LINUX", "MACOS" ],
                            "deprecated_by_key": "validate_best_practices_img"
                        },
                        {
                            "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_NVIDIA",
                            "label": "NVIDIA-specific best practices",
                            "description": "Activating this feature enables the output of warnings related to NVIDIA-specific misuse of the API, but which are not explicitly prohibited by the specification.",
                            "platforms": [ "WINDOWS", "LINUX", "ANDROID" ],
                            "deprecated_by_key": "validate_best_practices_nvidia"
                        },
                        {
                            "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_ALL",
                            "label": "Hardware specific best practices",
                            "description": "Activating this feature enables all vendor specific best practices.",
                            "platforms": [ "WINDOWS", "LINUX", "ANDROID" ]
                        }
                    ],
                    "default": []
                }
            ]
        }
    }
}
