There are many ways to provide information to help reduce the amount of validation GPU-AV needs to do. This is very powerful when mixed with Safe Mode to detect crashes while also having very little overhead.
Shader instrumentation can be expensive, so by providing the VkShaderModule/VkPipeline/VkShaderEXT we can limit it to only those shaders.
When the Selective Instrument Shaders (VK_LAYER_GPUAV_SELECT_INSTRUMENTED_SHADERS/gpuav_select_instrumented_shaders) setting is on ONLY selected shaders are instrumented. The other shaders will not be instrumented.
We provide various ways to select these shaders.
It is normally desirable to not need to recompile your source code nor shaders. If you already have a debug name (set by vkSetDebugUtilsObjectNameEXT) then you can use those names to select which shaders to instrument.
This is done either easily in vkconfig or passing a list of regex strings to VK_LAYER_GPUAV_SHADERS_TO_INSTRUMENT/gpuav_shaders_to_instrument
as environment variables
set VK_LAYER_GPUAV_SELECT_INSTRUMENTED_SHADERS=1 set VK_LAYER_GPUAV_SHADERS_TO_INSTRUMENT=bim_bap_boom,.*_my_pipeline.*
or with VK_EXT_layer_settings
// example std::array<const char*, 2> shader_regexes = {{"bim_bap_boom", ".*_my_pipeline.*"}}; layer_setting = {"VK_LAYER_KHRONOS_validation", "gpuav_shaders_to_instrument", VK_LAYER_SETTING_TYPE_STRING_EXT, size32(shader_regexes), shader_regexes.data()};
When VK_LAYER_GPUAV_SELECT_INSTRUMENTED_SHADERS is turned on, We use the VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT as a way to signal to GPU-AV you want those shaders instrumented.
VkValidationFeatureEnableEXT enabled = VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT; VkValidationFeaturesEXT features = {}; features.enabledValidationFeatureCount = 1; features.pEnabledValidationFeatures = &enabled;
From here is is just a matter of passing it into the correct pNext
// vkCreateShaderModule VkShaderModuleCreateInfo module_ci = {}; module_ci.pNext = &features; // Pipeline (only a single shader) VkPipelineShaderStageCreateInfo stage_ci = {}; stage_ci.pNext = &features; // Pipeline (all shaders) VkGraphicsPipelineCreateInfo pipeline_ci = {}; pipeline_ci.pNext = &features; // VK_EXT_shader_object VkShaderCreateInfoEXT shader_ci = {}; shader_ci.pNext = &features;
If you have used https://github.com/LunarG/CrashDiagnosticLayer you might have a CDL Dump file.
If the file path is provided to VK_LAYER_GPUAV_CDL_DUMP_PATH/gpuav_cdl_dump_path GPU-AV will parse it and extract all the infomation out it for you.
This can be provided as supplemental, and will append to any other scoped information provided.