{
    "file_format_version": "1.2.0",
    "layer": {
        "name": "VK_LAYER_LUNARG_crash_diagnostic",
        "type": "GLOBAL",
        "status": "BETA",
        "library_path": ".\\VkLayer_crash_diagnostic.dll",
        "api_version": "1.4.304",
        "implementation_version": "1",
        "description": "Crash Diagnostic Layer is a crash/hang debugging tool that helps determines GPU progress in a Vulkan application.",
        "platforms": [ "WINDOWS", "LINUX" , "ANDROID" ],
        "url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/crash_diagnostic_layer.html",
        "enable_environment": {
            "VK_CRASH_DIAGNOSTIC_ENABLE": "1"
        },
        "disable_environment": {
            "VK_CRASH_DIAGNOSTIC_DISABLE": "1"
        },
        "instance_extensions": [
            {
                "name": "VK_EXT_debug_report",
                "spec_version": "10"
            },
            {
                "name": "VK_EXT_debug_utils",
                "spec_version": "1"
            },
            {
                "name": "VK_EXT_layer_settings",
                "spec_version": "2"
            }
        ],
        "device_extensions": [
            {
                "name": "VK_EXT_debug_report",
                "spec_version": "10",
                "entrypoints": [
                    "vkCreateDebugReportCallbackEXT",
                    "vkDebugReportMessageEXT",
                    "vkDestroyDebugReportCallbackEXT"
                ]
            },
            {
                "name": "VK_EXT_tooling_info",
                "spec_version": "1",
                "entrypoints": [
                    "vkGetPhysicalDeviceToolPropertiesEXT"
                ]
            }
        ],
	"features": {
	    "settings": [
		{
		    "key": "watchdog_timeout_ms",
		    "env": "CDL_WATCHDOG_TIMEOUT_MS",
		    "label": "Watchdog timeout (ms)",
		    "description": "If set to a non-zero number, a watchdog thread will be created. This will trigger if the application fails to submit new commands within a set time (in milliseconds) and a log will be created as if the a lost device error was encountered.",
		    "type": "INT",
		    "default": 30000,
		    "platforms": [
			"WINDOWS",
			"LINUX",
			"MACOS",
			"ANDROID"
		    ]
		},
		{
		    "key": "dump",
		    "label": "Dump files",
		    "description": "Control of dump files.",
		    "type": "GROUP",
		    "expanded": true,
		    "settings": [
			{
			    "key": "output_path",
			    "env": "CDL_OUTPUT_PATH",
			    "label": "Output Path",
			    "description": "The directory where dump files and shader binaries are written.",
			    "type": "STRING",
			    "default": "",
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			},
			{
			    "key": "dump_queue_submits",
			    "env": "CDL_DUMP_QUEUE_SUBMITS",
			    "label": "Dump queue submissions",
			    "description": "Control which queue submissions are included in the dump.",
			    "type": "ENUM",
			    "default": "running",
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ],
			    "flags": [
				{
				    "key": "running",
				    "label": "Running",
				    "description": "Submissions that were executing at the time of the dump."
				},
				{
				    "key": "pending",
				    "label": "Pending",
				    "description": "Submissions executing or pending at the time of the dump."
				}
			    ]
			},
			{
			    "key": "dump_command_buffers",
			    "env": "CDL_DUMP_COMMAND_BUFFERS",
			    "label": "Dump command buffers",
			    "description": "Control which command buffers are included in the dump.",
			    "type": "ENUM",
			    "default": "running",
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ],
			    "flags": [
				{
				    "key": "running",
				    "label": "Running",
				    "description": "Command Buffers that were executing at the time of the dump."
				},
				{
				    "key": "pending",
				    "label": "Pending",
				    "description": "Command Buffers executing or pending at the time of the dump."
				},
				{
				    "key": "all",
				    "label": "All",
				    "description": "All known Command Buffers."
				}
			    ]
			},
			{
			    "key": "dump_commands",
			    "env": "CDL_DUMP_COMMANDS",
			    "label": "Dump commands",
			    "description": "Control which commands are included in the dump.",
			    "type": "ENUM",
			    "default": "running",
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ],
			    "flags": [
				{
				    "key": "running",
				    "label": "Running",
				    "description": "Command Buffers that were executing at the time of the dump."
				},
				{
				    "key": "pending",
				    "label": "Pending",
				    "description": "Commands executing or pending at the time of the dump."
				},
				{
				    "key": "all",
				    "label": "All",
				    "description": "All known Commands."
				}
			    ]
			},
			{
			    "key": "dump_shaders",
			    "env": "CDL_DUMP_SHADERS",
			    "label": "Dump shaders",
			    "description": "Control of shader dumping.",
			    "type": "ENUM",
			    "default": "off",
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ],
			    "flags": [
				{
				    "key": "off",
				    "label": "Off",
				    "description": "Never dump shaders."
				},
				{
				    "key": "on_crash",
				    "label": "On Crash",
				    "description": "Dump currently bound shaders after a crash is detected."
				},
				{
				    "key": "on_bind",
				    "label": "On Bind",
				    "description": "Dump only bound shaders."
				},
				{
				    "key": "all",
				    "label": "All",
				    "description": "Dump all shaders."
				}
			    ]
			}
		    ]
		},
		{
		    "key": "logging",
		    "label": "Logging",
		    "description": "Control of logging.",
		    "type": "GROUP",
		    "expanded": true,
		    "settings": [
			{
			    "key": "message_severity",
			    "label": "Message Severity",
			    "description": "Comma-delineated list of options specifying the types of log messages to be reported",
			    "type": "FLAGS",
			    "flags": [
				{
				    "key": "error",
				    "label": "Error",
				    "description": "Report errors such as device lost or setup problems in the layer."
				},
				{
				    "key": "warn",
				    "label": "Warning",
				    "description": "Report non-fatal problems that may interfere with operation of the layer"
				},
				{
				    "key": "info",
				    "label": "Info",
				    "description": "Report informational messages."
				},
				{
				    "key": "verbose",
				    "label": "Verbose",
				    "description": "For layer development. Report messages for debugging layer behavior.",
				    "view": "ADVANCED"
				}
			    ],
			    "default": [
				"error"
			    ],
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			},
			{
			    "key": "log_file",
			    "env": "CDL_LOG_FILE",
			    "label": "Log file name",
			    "description": "none = no logging, stderr or stdout = to the console, otherwise an absolute or relative path",
			    "type": "STRING",
			    "default": "stderr",
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS"
			    ]
			},
			{
			    "key": "trace_on",
			    "env": "CDL_TRACE_ON",
			    "label": "Enable Tracing",
			    "description": "All Vulkan API calls intercepted by the layer will be logged to the console.",
			    "type": "BOOL",
			    "default": false,
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			},
			{
			    "key": "trace_all_semaphores",
			    "env": "CDL_TRACE_ALL_SEMAPHORES",
			    "label": "Enable semaphore log tracing.",
			    "description": "Semaphore events will be logged to console.",
			    "type": "BOOL",
			    "default": false,
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			}
		    ]
		},
		{
		    "key": "state",
		    "label": "State Tracking",
		    "description": "Control of state tracking.",
		    "type": "GROUP",
		    "expanded": false,
		    "settings": [
			{
			    "key": "sync_after_commands",
			    "env": "CDL_SYNC_AFTER_COMMANDS",
			    "label": "Synchronize commands",
			    "description": "Add pipeline barriers after instrumented commands.",
			    "type": "BOOL",
			    "default": false,
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			},
			{
			    "key": "instrument_all_commands",
			    "env": "CDL_INSTRUMENT_ALL_COMMANDS",
			    "label": "Instrument all commands",
			    "description": "All commands will be instrumented.",
			    "type": "BOOL",
			    "default": false,
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			},
			{
			    "key": "track_semaphores",
			    "env": "CDL_TRACK_SEMAPHORES",
			    "label": "Track semaphores",
			    "description": "Enable semaphore tracking.",
			    "type": "BOOL",
			    "default": true,
			    "platforms": [
				"WINDOWS",
				"LINUX",
				"MACOS",
				"ANDROID"
			    ]
			}
		    ]
		}
	    ]
	}
    }
}
