################################################################################
#
#  This file contains per-layer settings that configure layer behavior at
#  execution time. Comments in this file are denoted with the "#" char.
#  Settings lines are of the form:
#      "<LayerIdentifier>.<SettingName> = <SettingValue>"
#
#  <LayerIdentifier> is typically the official layer name, minus the VK_LAYER
#  prefix and all lower-camel-case -- i.e., for VK_LAYER_KHRONOS_validation,
#  the layer identifier is 'khronos_validation'.
#
################################################################################
################################################################################
# Validation Layer Common Settings:
# =================================
#
#   DEBUG_ACTION:
#   =============
#   <LayerIdentifier>.debug_action : This is an enum value indicating what
#    action is to be taken when a layer wants to report information.
#    Possible settings values are defined in the vk_layer.h header file.
#    These settings are:
#    VK_DBG_LAYER_ACTION_IGNORE - Take no action.
#    VK_DBG_LAYER_ACTION_LOG_MSG - Log a txt message to stdout or to a log filename
#       specified via the <LayerIdentifier>.log_filename setting (see below).
#    VK_DBG_LAYER_ACTION_CALLBACK - Call user defined callback function(s) that
#       have been registered via the VK_EXT_debug_report extension. Since
#       app must register callback, this is a NOOP for the settings file.
#    VK_DBG_LAYER_ACTION_DEBUG_OUTPUT [Windows only] - Log a txt message using the
#       Windows OutputDebugString function -- messages will show up in the
#       Visual Studio output window, for instance.
#    VK_DBG_LAYER_ACTION_BREAK - Trigger a breakpoint.
#
#   REPORT_FLAGS:
#   =============
#   <LayerIdentifier>.report_flags : This is a comma-delineated list of options
#    telling the layer what types of messages it should report back.
#    Options are:
#    info - Report informational messages.
#    warn - 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.
#    perf - Report using the API in a way that may cause suboptimal performance.
#    error - Report errors in API usage.
#    debug - For layer development. Report messages for debugging layer
#            behavior.
#
#   LOG_FILENAME:
#   =============
#   <LayerIdentifier>.log_filename : output filename. Can be relative to
#      location of vk_layer_settings.txt file, or an absolute path. If no
#      filename is specified or if filename has invalid path, then stdout
#      is used by default.
#
#   DISABLES:
#   =============
#   <LayerIdentifier>.disables : comma separated list of feature/flag/disable enums
#      These can include VkValidationFeatureDisableEXT flags defined in the Vulkan
#      specification, or ValidationCheckDisables enums defined in chassis.h.
#      Effects of setting these flags are described in the specification (or the
#      source code in the case of the ValidationCheckDisables). The most useful
#      flags are briefly described here:
#      VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT - disables handle wrapping.
#          Disable this feature if you are running into crashes when authoring new extensions
#          or developing new Vulkan objects/structures
#      VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT - disables thread checks. It may
#          help with performance to run with thread-checking disabled most of the time,
#          enabling it occasionally for a quick sanity check, or when debugging difficult
#          application behaviors.
#      VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT - disables the main, heavy-duty
#          validation checks. This may be valuable early in the development cycle to
#          reduce validation output while correcting paramter/object usage errors.
#      VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT - disables stateless parameter
#          checks. This may not always be necessary late in a development cycle.
#      VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT - disables object tracking.
#          This may not always be necessary late in a development cycle.
#
#   ENABLES:
#   =============
#   <LayerIdentifier>.enables : comma separated list of feature enable enums
#      These can include VkValidationFeatureEnableEXT flags defined in the Vulkan
#      specification, where their effects are described.  The most useful
#      flags are briefly described here:
#      VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT - enables intrusive GPU-assisted
#      shader validation in core/khronos validation layers
#

# VK_LAYER_KHRONOS_validation Settings
khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
khronos_validation.report_flags = error,warn,perf
khronos_validation.log_filename = stdout
# Example entry showing how to disable threading checks and validation at DestroyPipeline time
#khronos_validation.disables = VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT,VALIDATION_CHECK_DISABLE_DESTROY_PIPELINE

# VK_LAYER_LUNARG_core_validation Settings
lunarg_core_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
lunarg_core_validation.report_flags = error,warn,perf
lunarg_core_validation.log_filename = stdout

# VK_LAYER_LUNARG_object_tracker Settings
lunarg_object_tracker.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
lunarg_object_tracker.report_flags = error,warn,perf
lunarg_object_tracker.log_filename = stdout

# VK_LAYER_LUNARG_parameter_validation Settings
lunarg_parameter_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
lunarg_parameter_validation.report_flags = error,warn,perf
lunarg_parameter_validation.log_filename = stdout

# VK_LAYER_GOOGLE_threading Settings
google_threading.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
google_threading.report_flags = error,warn,perf
google_threading.log_filename = stdout

# VK_LAYER_GOOGLE_unique_objects Settings
google_unique_objects.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
google_unique_objects.report_flags = error,warn,perf
google_unique_objects.log_filename = stdout
################################################################################
