diff options
6 files changed, 20 insertions, 16 deletions
| diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.cpp b/src/video_core/renderer_vulkan/vk_compute_pass.cpp index 2cfe9d4bd..ec9866605 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pass.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pass.cpp @@ -206,6 +206,7 @@ VKComputePass::VKComputePass(const Device& device, VKDescriptorPool& descriptor_          .codeSize = static_cast<u32>(code.size_bytes()),          .pCode = code.data(),      }); +    device.SaveShader(code);      pipeline = device.GetLogical().CreateComputePipeline({          .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,          .pNext = nullptr, diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 25dbefd5c..f699a9bdf 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -770,6 +770,7 @@ std::unique_ptr<GraphicsPipeline> PipelineCache::CreateGraphicsPipeline(          const Shader::Profile profile{MakeProfile(key, program.stage)};          const std::vector<u32> code{EmitSPIRV(profile, program, binding)}; +        device.SaveShader(code);          modules[stage_index] = BuildShader(device, code);          if (device.HasDebuggingToolAttached()) {              const std::string name{fmt::format("{:016x}{:016x}", key.unique_hashes[index][0], @@ -846,7 +847,8 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline(      Shader::Maxwell::Flow::CFG cfg{env, pools.flow_block, env.StartAddress()};      Shader::IR::Program program{TranslateProgram(pools.inst, pools.block, env, cfg)};      u32 binding{0}; -    std::vector<u32> code{EmitSPIRV(base_profile, program, binding)}; +    const std::vector<u32> code{EmitSPIRV(base_profile, program, binding)}; +    device.SaveShader(code);      vk::ShaderModule spv_module{BuildShader(device, code)};      if (device.HasDebuggingToolAttached()) {          const auto name{fmt::format("{:016x}{:016x}", key.unique_hash[0], key.unique_hash[1])}; diff --git a/src/video_core/vulkan_common/nsight_aftermath_tracker.cpp b/src/video_core/vulkan_common/nsight_aftermath_tracker.cpp index 758c038ba..209cb1e0a 100644 --- a/src/video_core/vulkan_common/nsight_aftermath_tracker.cpp +++ b/src/video_core/vulkan_common/nsight_aftermath_tracker.cpp @@ -73,12 +73,11 @@ NsightAftermathTracker::~NsightAftermathTracker() {      }  } -void NsightAftermathTracker::SaveShader(const std::vector<u32>& spirv) const { +void NsightAftermathTracker::SaveShader(std::span<const u32> spirv) const {      if (!initialized) {          return;      } - -    std::vector<u32> spirv_copy = spirv; +    std::vector<u32> spirv_copy(spirv.begin(), spirv.end());      GFSDK_Aftermath_SpirvCode shader;      shader.pData = spirv_copy.data();      shader.size = static_cast<u32>(spirv_copy.size() * 4); diff --git a/src/video_core/vulkan_common/nsight_aftermath_tracker.h b/src/video_core/vulkan_common/nsight_aftermath_tracker.h index 4fe2b14d9..eae1891dd 100644 --- a/src/video_core/vulkan_common/nsight_aftermath_tracker.h +++ b/src/video_core/vulkan_common/nsight_aftermath_tracker.h @@ -6,6 +6,7 @@  #include <filesystem>  #include <mutex> +#include <span>  #include <string>  #include <vector> @@ -33,7 +34,7 @@ public:      NsightAftermathTracker(NsightAftermathTracker&&) = delete;      NsightAftermathTracker& operator=(NsightAftermathTracker&&) = delete; -    void SaveShader(const std::vector<u32>& spirv) const; +    void SaveShader(std::span<const u32> spirv) const;  private:  #ifdef HAS_NSIGHT_AFTERMATH @@ -61,21 +62,21 @@ private:      bool initialized = false;      Common::DynamicLibrary dl; -    PFN_GFSDK_Aftermath_DisableGpuCrashDumps GFSDK_Aftermath_DisableGpuCrashDumps; -    PFN_GFSDK_Aftermath_EnableGpuCrashDumps GFSDK_Aftermath_EnableGpuCrashDumps; -    PFN_GFSDK_Aftermath_GetShaderDebugInfoIdentifier GFSDK_Aftermath_GetShaderDebugInfoIdentifier; -    PFN_GFSDK_Aftermath_GetShaderHashSpirv GFSDK_Aftermath_GetShaderHashSpirv; -    PFN_GFSDK_Aftermath_GpuCrashDump_CreateDecoder GFSDK_Aftermath_GpuCrashDump_CreateDecoder; -    PFN_GFSDK_Aftermath_GpuCrashDump_DestroyDecoder GFSDK_Aftermath_GpuCrashDump_DestroyDecoder; -    PFN_GFSDK_Aftermath_GpuCrashDump_GenerateJSON GFSDK_Aftermath_GpuCrashDump_GenerateJSON; -    PFN_GFSDK_Aftermath_GpuCrashDump_GetJSON GFSDK_Aftermath_GpuCrashDump_GetJSON; +    PFN_GFSDK_Aftermath_DisableGpuCrashDumps GFSDK_Aftermath_DisableGpuCrashDumps{}; +    PFN_GFSDK_Aftermath_EnableGpuCrashDumps GFSDK_Aftermath_EnableGpuCrashDumps{}; +    PFN_GFSDK_Aftermath_GetShaderDebugInfoIdentifier GFSDK_Aftermath_GetShaderDebugInfoIdentifier{}; +    PFN_GFSDK_Aftermath_GetShaderHashSpirv GFSDK_Aftermath_GetShaderHashSpirv{}; +    PFN_GFSDK_Aftermath_GpuCrashDump_CreateDecoder GFSDK_Aftermath_GpuCrashDump_CreateDecoder{}; +    PFN_GFSDK_Aftermath_GpuCrashDump_DestroyDecoder GFSDK_Aftermath_GpuCrashDump_DestroyDecoder{}; +    PFN_GFSDK_Aftermath_GpuCrashDump_GenerateJSON GFSDK_Aftermath_GpuCrashDump_GenerateJSON{}; +    PFN_GFSDK_Aftermath_GpuCrashDump_GetJSON GFSDK_Aftermath_GpuCrashDump_GetJSON{};  #endif  };  #ifndef HAS_NSIGHT_AFTERMATH  inline NsightAftermathTracker::NsightAftermathTracker() = default;  inline NsightAftermathTracker::~NsightAftermathTracker() = default; -inline void NsightAftermathTracker::SaveShader(const std::vector<u32>&) const {} +inline void NsightAftermathTracker::SaveShader(std::span<const u32>) const {}  #endif  } // namespace Vulkan diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index c027598ba..78bb741bc 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -493,7 +493,7 @@ void Device::ReportLoss() const {      std::this_thread::sleep_for(std::chrono::seconds{15});  } -void Device::SaveShader(const std::vector<u32>& spirv) const { +void Device::SaveShader(std::span<const u32> spirv) const {      if (nsight_aftermath_tracker) {          nsight_aftermath_tracker->SaveShader(spirv);      } diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index ac2311e7e..adf62a707 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -7,6 +7,7 @@  #include <string>  #include <string_view>  #include <unordered_map> +#include <span>  #include <vector>  #include "common/common_types.h" @@ -43,7 +44,7 @@ public:      void ReportLoss() const;      /// Reports a shader to Nsight Aftermath. -    void SaveShader(const std::vector<u32>& spirv) const; +    void SaveShader(std::span<const u32> spirv) const;      /// Returns the name of the VkDriverId reported from Vulkan.      std::string GetDriverName() const; | 
