# The settings in this file can be used to configure the behavior of layers in this repository.
# This file doesn't display the dependencies on the various settings
#
# This file is generated by generate_settings.py

# VK_LAYER_KHRONOS_validation

# Shader
# =====================
# 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)
khronos_validation.check_shaders = true

# Caching
# =====================
# 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.
khronos_validation.check_shaders_caching = true

# Debug Action
# =====================
# Specifies what action is to be taken when a layer reports information
khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG,VK_DBG_LAYER_ACTION_DEBUG_OUTPUT

# Descriptor Hashing
# =====================
# 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.
khronos_validation.descriptor_hashing = false

# Total expected descriptors used
# =====================
# 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.
khronos_validation.descriptor_hashing_total_descriptors = 65536

# Max Duplicated Messages
# =====================
# Maximum number of times any single validation message should be reported.
khronos_validation.duplicate_message_limit = 10

# Limit Duplicated Messages
# =====================
# Enable limiting of duplicate messages.
khronos_validation.enable_message_limit = true

# Dump VK_KHR_copy_memory_indirect
# =====================
# Dump information at each copy command when recording
khronos_validation.gpu_dump_copy_memory_indirect = false

# Dump Descriptor Heap/Buffer
# =====================
# Dump all the information at every draw/dispatch when recording VK_EXT_descriptor_heap or VK_EXT_descriptor_buffer
khronos_validation.gpu_dump_descriptors = false

# Dump VK_EXT_device_generated_commands
# =====================
# Dump information at each vkCmdExecuteGeneratedCommands when recording
khronos_validation.gpu_dump_device_generated_commands = false

# Redirect all GPU Dump to stdout
# =====================
# Instead of using the debug callback with information severity, redirect to stdout instead.
khronos_validation.gpu_dump_to_stdout = false

# Acceleration structures builds
# =====================
# Validate acceleration structures references in TLAS build commands.
khronos_validation.gpuav_acceleration_structures_builds = true

# Out of bounds buffer device addresses
# =====================
# Check for invalid access using buffer device address
khronos_validation.gpuav_buffer_address_oob = true

# Buffer copies
# =====================
# Validate copies involving a VkBuffer. Right now only validates copy buffer to image.
khronos_validation.gpuav_buffer_copies = true

# Buffer content validation
# =====================
# Validate buffers containing parameters used in indirect Vulkan commands, or used in copy commands
khronos_validation.gpuav_buffers_validation = true

# CDL dump file
# =====================
# Path to a Crash Diagnostic Layer (CDL) dump file. Pipeline names found in this file will be selected for instrumentation.
khronos_validation.gpuav_cdl_dump_path =

# VK_KHR_copy_memory_indirect
# =====================
# Validate VK_KHR_copy_memory_indirect.
khronos_validation.gpuav_copy_memory_indirect = true

# Descriptors indexing
# =====================
# Enable descriptors and buffer out of bounds validation when using descriptor indexing
khronos_validation.gpuav_descriptor_checks = true

# GPU Assisted Validation (GPU-AV)
# =====================
# Enable validation that cannot be done the CPU and needs hooks into the GPU execution
khronos_validation.gpuav_enable = false

# Force on robustness features
# =====================
# 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.
khronos_validation.gpuav_force_on_robustness = false

# Index buffers
# =====================
# Validate that indexed draws do not fetch indices outside of the bounds of the index buffer.
khronos_validation.gpuav_index_buffers = true

# Indirect dispatches parameters
# =====================
# Validate buffers containing dispatch parameters used in indirect dispatch commands
khronos_validation.gpuav_indirect_dispatches_buffers = true

# Indirect draws parameters
# =====================
# Validate buffers containing draw parameters used in indirect draw commands. Includes vkCmdDrawMeshTasks* calls as well
khronos_validation.gpuav_indirect_draws_buffers = true

# Indirect trace rays parameters
# =====================
# Validate buffers containing ray tracing parameters used in indirect ray tracing commands
khronos_validation.gpuav_indirect_trace_rays_buffers = true

# Maximum Indices
# =====================
# 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.
khronos_validation.gpuav_max_indices_count = 8192

# Mesh Shading SPIR-V instructions
# =====================
# Enable shader instrumentation on VK_EXT_mesh_shader
khronos_validation.gpuav_mesh_shading = true

# Post process descriptor indexing
# =====================
# Track which descriptor indexes were used in shader to run normal validation afterwards
khronos_validation.gpuav_post_process_descriptor_indexing = true

# Ray tracing buffers consistency
# =====================
# 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.
khronos_validation.gpuav_ray_tracing_buffers_consistency = false

# Safe Mode
# =====================
# 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.
khronos_validation.gpuav_safe_mode = false

# Selective Instrument Shaders
# =====================
# When turned on, shaders are NOT instrumented unless selected. This can be done by:
- passing a VkValidationFeaturesEXT struct in the pNext of VkShaderModuleCreateInfo/VkPipelineShaderStageCreateInfo/vkCreateShadersEXT pNext
- using a regex matching a shader/pipeline debug name.
- Providing a CDL dump file to parse the debug names from it.
khronos_validation.gpuav_select_instrumented_shaders = false

# Shader instrumentation
# =====================
# Instrument shaders to validate descriptors, descriptor indexing, buffer device addresses and ray queries. Warning: will considerably slow down shader executions.
khronos_validation.gpuav_shader_instrumentation = true

# Shader Sanitizer
# =====================
# 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.
khronos_validation.gpuav_shader_sanitizer = true

# Shader/pipeline name regexes
# =====================
# 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.
khronos_validation.gpuav_shaders_to_instrument =

# Shared Memory Data Race Detection
# =====================
# 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.
khronos_validation.gpuav_shared_memory_data_race = true

# TraceRay SPIR-V instructions
# =====================
# Enable shader instrumentation on OpTraceRayKHR, OpHitObject*, OpReportIntersectionKHR, OpRayQueryInitializeKHR
khronos_validation.gpuav_validate_trace_ray = true

# Out of bounds vertex attribute fetching
# =====================
# Validate that no vertex attribute fetching is out of bonds
khronos_validation.gpuav_vertex_attribute_fetch_oob = true

# Legacy Detection
# =====================
# Give warnings when using legacy parts of the API.
khronos_validation.legacy_detection = false

# When to give warning
# =====================
# Control when legacy detection warnings are emitted
khronos_validation.legacy_detection_mode = ALWAYS

# Log Filename
# =====================
# Specifies the output filename
khronos_validation.log_filename = stdout

# Display Application Name
# =====================
# Useful when running multiple instances to know which instance the message is from.
khronos_validation.message_format_display_application_name = false

# JSON
# =====================
# Display Validation as JSON (VkDebugUtilsMessengerCallbackDataEXT::pMessage will contain JSON)
khronos_validation.message_format_json = false

# Mute Message VUIDs
# =====================
# 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
khronos_validation.message_id_filter =

# Object Lifetime
# =====================
# Object tracking checks. This may not always be necessary late in a development cycle.
khronos_validation.object_lifetime = true

# Printf buffer size
# =====================
# Set the size in bytes of the buffer per VkCommandBuffer to hold the messages (Each message is about 50 bytes)
khronos_validation.printf_buffer_size = 1024

# Debug Printf
# =====================
# Enable DebugPrintf and will print anything use NonSemantic.DebugPrintf in their SPIR-V
khronos_validation.printf_enable = false

# Debug Printf only preset
# =====================
# 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.
khronos_validation.printf_only_preset = false

# Redirect Printf messages to stdout
# =====================
# Enable redirection of Debug Printf messages from the debug callback to stdout
khronos_validation.printf_to_stdout = true

# Printf verbose
# =====================
# Will print out handles, instruction location, position in command buffer, and more
khronos_validation.printf_verbose = false

# Message Severity
# =====================
# Comma-delineated list of options specifying the types of messages to be reported
khronos_validation.report_flags = error,warn

# Stateless Parameter
# =====================
# Stateless parameter checks. This may not always be necessary late in a development cycle.
khronos_validation.stateless_param = true

# Extra properties
# =====================
# Append a section of key-value properties to the error message. Useful for filtering errors.
khronos_validation.syncval_message_extra_properties = false

# Shader accesses heuristic
# =====================
# 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.
khronos_validation.syncval_shader_accesses_heuristic = false

# Submit time validation
# =====================
# 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.
khronos_validation.syncval_submit_time_validation = true

# Thread Safety
# =====================
# 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.
khronos_validation.thread_safety = true

# Handle Wrapping
# =====================
# Handle wrapping checks. Disable this feature if you are experiencing crashes when creating new extensions or developing new Vulkan objects/structures.
khronos_validation.unique_handles = true

# Best Practices
# =====================
# Outputs warnings related to common misuse of the API, but which are not explicitly prohibited by the specification.
khronos_validation.validate_best_practices = false

# AMD-specific best practices
# =====================
# Outputs warnings for spec-conforming but non-ideal code on AMD GPUs.
khronos_validation.validate_best_practices_amd = false

# ARM-specific best practices
# =====================
# Outputs warnings for spec-conforming but non-ideal code on ARM GPUs.
khronos_validation.validate_best_practices_arm = false

# IMG-specific best practices
# =====================
# Outputs warnings for spec-conforming but non-ideal code on Imagination GPUs.
khronos_validation.validate_best_practices_img = false

# NVIDIA-specific best practices
# =====================
# Outputs warnings for spec-conforming but non-ideal code on NVIDIA GPUs.
khronos_validation.validate_best_practices_nvidia = false

# Core
# =====================
# 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.
khronos_validation.validate_core = true

# Synchronization
# =====================
# Check for resource access conflicts caused by missing or incorrectly used synchronization operations.
khronos_validation.validate_sync = false
