From e9107bd14037e9dbf00a83202fa9252565f330f3 Mon Sep 17 00:00:00 2001 From: Stenzek <stenzek@gmail.com> Date: Sun, 14 Apr 2024 14:42:55 +1000 Subject: [PATCH] VulkanDevice: Add env var for non-semantic debug info Backport of https://github.com/PCSX2/pcsx2/commit/070068366f18f176cdfb147281eaf656106c57fd --- src/util/vulkan_device.cpp | 14 ++++++++++++-- src/util/vulkan_pipeline.cpp | 6 ++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/util/vulkan_device.cpp b/src/util/vulkan_device.cpp index 8db1197ca..aedf3c413 100644 --- a/src/util/vulkan_device.cpp +++ b/src/util/vulkan_device.cpp @@ -23,6 +23,7 @@ #include "fmt/format.h" #include "xxhash.h" +#include <cstdlib> #include <limits> #include <mutex> @@ -395,8 +396,17 @@ bool VulkanDevice::SelectDeviceExtensions(ExtensionList* extension_list, bool en m_optional_extensions.vk_khr_dynamic_rendering && SupportsExtension(VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME, false); m_optional_extensions.vk_khr_push_descriptor = SupportsExtension(VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, false); - m_optional_extensions.vk_khr_shader_non_semantic_info = - SupportsExtension(VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME, false); + + // glslang generates debug info instructions before phi nodes at the beginning of blocks when non-semantic debug info + // is enabled, triggering errors by spirv-val. Gate it by an environment variable if you want source debugging until + // this is fixed. + if (const char* val = std::getenv("USE_NON_SEMANTIC_DEBUG_INFO"); + val && StringUtil::FromChars<bool>(val).value_or(false)) + { + m_optional_extensions.vk_khr_shader_non_semantic_info = + SupportsExtension(VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME, false); + } + m_optional_extensions.vk_ext_external_memory_host = SupportsExtension(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, false); diff --git a/src/util/vulkan_pipeline.cpp b/src/util/vulkan_pipeline.cpp index 13f44c54e..a0a68d3ce 100644 --- a/src/util/vulkan_pipeline.cpp +++ b/src/util/vulkan_pipeline.cpp @@ -65,9 +65,11 @@ std::unique_ptr<GPUShader> VulkanDevice::CreateShaderFromSource(GPUShaderStage s if (m_debug_device) { - options.SetOptimizationLevel(shaderc_optimization_level_zero); + options.SetGenerateDebugInfo(); if (m_optional_extensions.vk_khr_shader_non_semantic_info) - options.SetGenerateDebugInfo(); + options.SetEmitNonSemanticDebugInfo(); + + options.SetOptimizationLevel(shaderc_optimization_level_zero); } else {