From d213baea815bb854038b89d0f66e4d1e08fc588a Mon Sep 17 00:00:00 2001 From: Artem Kharytoniuk Date: Sun, 14 Jan 2018 17:06:00 +0100 Subject: [PATCH] Enable validation layers through code instead of configuration file. --- src/engine/renderer/vk.cpp | 8 ++ visual-studio/quake3.vcxproj.user.example | 3 - visual-studio/vk_layer_settings.txt | 164 ---------------------- 3 files changed, 8 insertions(+), 167 deletions(-) delete mode 100644 visual-studio/vk_layer_settings.txt diff --git a/src/engine/renderer/vk.cpp b/src/engine/renderer/vk.cpp index 92994db..3ef3790 100644 --- a/src/engine/renderer/vk.cpp +++ b/src/engine/renderer/vk.cpp @@ -444,9 +444,11 @@ static void ensure_staging_buffer_allocation(VkDeviceSize size) { static VkBool32 debug_callback(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT object_type, uint64_t object, size_t location, int32_t message_code, const char* layer_prefix, const char* message, void* user_data) { +#ifdef _WIN32 OutputDebugString(message); OutputDebugString("\n"); DebugBreak(); +#endif return VK_FALSE; } @@ -491,6 +493,12 @@ static void create_instance() { desc.enabledExtensionCount = sizeof(instance_extensions)/sizeof(instance_extensions[0]); desc.ppEnabledExtensionNames = instance_extensions; +#ifndef NDEBUG + const char* validation_layer_name = "VK_LAYER_LUNARG_standard_validation"; + desc.enabledLayerCount = 1; + desc.ppEnabledLayerNames = &validation_layer_name; +#endif + VK_CHECK(vkCreateInstance(&desc, nullptr, &vk.instance)); } } diff --git a/visual-studio/quake3.vcxproj.user.example b/visual-studio/quake3.vcxproj.user.example index 0139f00..8154fa4 100644 --- a/visual-studio/quake3.vcxproj.user.example +++ b/visual-studio/quake3.vcxproj.user.example @@ -3,9 +3,6 @@ +set fs_basepath e:/games/quake3 +set r_mode 8 +set r_renderAPI 1 WindowsLocalDebugger - VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_standard_validation -VK_DEVICE_LAYERS=VK_LAYER_LUNARG_standard_validation -$(LocalDebuggerEnvironment) +set fs_basepath e:/games/quake3 +set r_mode 8 +set r_renderAPI 1 diff --git a/visual-studio/vk_layer_settings.txt b/visual-studio/vk_layer_settings.txt deleted file mode 100644 index 1225102..0000000 --- a/visual-studio/vk_layer_settings.txt +++ /dev/null @@ -1,164 +0,0 @@ -################################################################################ -# -# 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: -# ". = " -# -# 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: -# ============= -# .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 .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: -# ============= -# .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: -# ============= -# .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 = vk_report - -# 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 = vk_report - -# 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 = vk_report - -# VK_LAYER_LUNARG_swapchain Settings -lunarg_swapchain.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG -lunarg_swapchain.report_flags = error,warn,perf -lunarg_swapchain.log_filename = vk_report - -# 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 = vk_report - -# 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 = vk_report -################################################################################ -################################################################################ -# -# 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: -# ". = " -# -# is typically the official layer name, minus the VK_LAYER -# prefix and all lower-camel-case -- i.e., for VK_LAYER_LUNARG_api_dump, the -# layer identifier is 'lunarg_api_dump'. -# -################################################################################ -################################################################################ -# VK_LAYER_LUNARG_api_dump Settings: -# ================================== -# -# DETAILED: -# ========= -# .detailed : Setting this to TRUE causes parameter details -# to be dumped in addition to API calls. -# -# NO_ADDR: -# ======== -# .no_addr : Setting this to TRUE causes "address" to be -# dumped in place of hex addresses. -# -# FILE: -# ===== -# .file : Setting this to TRUE indicates that output -# should be written to file instead of STDOUT. -# -# LOG_FILENAME: -# ============= -# .log_filename : Specifies the file to dump to when -# "file = TRUE". The default is "vk_apidump.txt". -# -# FLUSH: -# ====== -# .flush : Setting this to TRUE causes IO to be flushed -# each API call that is written -# -# INDENT SIZE -# ============== -# .indent_size : Specifies the number of spaces that a tab -# is equal to -# -# SHOW TYPES -# ============== -# .show_types : Setting this to TRUE causes types to be -# dumped in addition to values -# -# NAME SIZE -# ============== -# .name_size : The number of characters the name of a -# variable should consume, assuming more are not required -# -# TYPE SIZE -# ============== -# .type_size : The number of characters the type of a -# variable should consume, assuming more are not requires -# -# USE_SPACES -# ============== -# .use_spaces : Setting this to TRUE causes all tabs -# characters to be replaced with spaces - -# VK_LUNARG_LAYER_api_dump Settings -lunarg_api_dump.detailed = TRUE -lunarg_api_dump.no_addr = FALSE -lunarg_api_dump.file = FALSE -lunarg_api_dump.log_filename = vk_apidump.txt -lunarg_api_dump.flush = TRUE -lunarg_api_dump.indent_size = 4 -lunarg_api_dump.show_types = TRUE -lunarg_api_dump.name_size = 32 -lunarg_api_dump.type_size = 0 -lunarg_api_dump.use_spaces = TRUE -lunarg_api_dump.show_shader = FALSE