Scoped GPU-AV
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.
Selective Instrument Shaders
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.
Provide a Debug Name
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()};Manually do inside your code
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;CDL Dump
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.