################################################################################
#
#  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_LUNARG_core_validation,
#  the layer identifier is 'lunarg_core_validation', and for
#  VK_LAYER_GOOGLE_threading the layeridentifier is 'google_threading'.
#
################################################################################
################################################################################
# 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_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.
#

# 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
################################################################################
