summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-12-26 05:26:52 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2021-01-04 06:22:22 +0100
commitd235cf393399c386a59b5e39d39bc9efb161aea0 (patch)
tree4b8a3420a94b972dfc0781ed1ba8b197b8b02c95 /src/video_core/renderer_vulkan
parentrenderer_vulkan: Move device abstraction to vulkan_common (diff)
downloadyuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.tar
yuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.tar.gz
yuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.tar.bz2
yuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.tar.lz
yuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.tar.xz
yuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.tar.zst
yuzu-d235cf393399c386a59b5e39d39bc9efb161aea0.zip
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp220
-rw-r--r--src/video_core/renderer_vulkan/nsight_aftermath_tracker.h87
2 files changed, 0 insertions, 307 deletions
diff --git a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp b/src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp
deleted file mode 100644
index 5b01020ec..000000000
--- a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2020 yuzu Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
-
-#ifdef HAS_NSIGHT_AFTERMATH
-
-#include <mutex>
-#include <string>
-#include <string_view>
-#include <utility>
-#include <vector>
-
-#include <fmt/format.h>
-
-#define VK_NO_PROTOTYPES
-#include <vulkan/vulkan.h>
-
-#include <GFSDK_Aftermath.h>
-#include <GFSDK_Aftermath_Defines.h>
-#include <GFSDK_Aftermath_GpuCrashDump.h>
-#include <GFSDK_Aftermath_GpuCrashDumpDecoding.h>
-
-#include "common/common_paths.h"
-#include "common/common_types.h"
-#include "common/file_util.h"
-#include "common/logging/log.h"
-#include "common/scope_exit.h"
-
-#include "video_core/renderer_vulkan/nsight_aftermath_tracker.h"
-
-namespace Vulkan {
-
-static constexpr char AFTERMATH_LIB_NAME[] = "GFSDK_Aftermath_Lib.x64.dll";
-
-NsightAftermathTracker::NsightAftermathTracker() = default;
-
-NsightAftermathTracker::~NsightAftermathTracker() {
- if (initialized) {
- (void)GFSDK_Aftermath_DisableGpuCrashDumps();
- }
-}
-
-bool NsightAftermathTracker::Initialize() {
- if (!dl.Open(AFTERMATH_LIB_NAME)) {
- LOG_ERROR(Render_Vulkan, "Failed to load Nsight Aftermath DLL");
- return false;
- }
-
- if (!dl.GetSymbol("GFSDK_Aftermath_DisableGpuCrashDumps",
- &GFSDK_Aftermath_DisableGpuCrashDumps) ||
- !dl.GetSymbol("GFSDK_Aftermath_EnableGpuCrashDumps",
- &GFSDK_Aftermath_EnableGpuCrashDumps) ||
- !dl.GetSymbol("GFSDK_Aftermath_GetShaderDebugInfoIdentifier",
- &GFSDK_Aftermath_GetShaderDebugInfoIdentifier) ||
- !dl.GetSymbol("GFSDK_Aftermath_GetShaderHashSpirv", &GFSDK_Aftermath_GetShaderHashSpirv) ||
- !dl.GetSymbol("GFSDK_Aftermath_GpuCrashDump_CreateDecoder",
- &GFSDK_Aftermath_GpuCrashDump_CreateDecoder) ||
- !dl.GetSymbol("GFSDK_Aftermath_GpuCrashDump_DestroyDecoder",
- &GFSDK_Aftermath_GpuCrashDump_DestroyDecoder) ||
- !dl.GetSymbol("GFSDK_Aftermath_GpuCrashDump_GenerateJSON",
- &GFSDK_Aftermath_GpuCrashDump_GenerateJSON) ||
- !dl.GetSymbol("GFSDK_Aftermath_GpuCrashDump_GetJSON",
- &GFSDK_Aftermath_GpuCrashDump_GetJSON)) {
- LOG_ERROR(Render_Vulkan, "Failed to load Nsight Aftermath function pointers");
- return false;
- }
-
- dump_dir = Common::FS::GetUserPath(Common::FS::UserPath::LogDir) + "gpucrash";
-
- (void)Common::FS::DeleteDirRecursively(dump_dir);
- if (!Common::FS::CreateDir(dump_dir)) {
- LOG_ERROR(Render_Vulkan, "Failed to create Nsight Aftermath dump directory");
- return false;
- }
-
- if (!GFSDK_Aftermath_SUCCEED(GFSDK_Aftermath_EnableGpuCrashDumps(
- GFSDK_Aftermath_Version_API, GFSDK_Aftermath_GpuCrashDumpWatchedApiFlags_Vulkan,
- GFSDK_Aftermath_GpuCrashDumpFeatureFlags_Default, GpuCrashDumpCallback,
- ShaderDebugInfoCallback, CrashDumpDescriptionCallback, this))) {
- LOG_ERROR(Render_Vulkan, "GFSDK_Aftermath_EnableGpuCrashDumps failed");
- return false;
- }
-
- LOG_INFO(Render_Vulkan, "Nsight Aftermath dump directory is \"{}\"", dump_dir);
-
- initialized = true;
- return true;
-}
-
-void NsightAftermathTracker::SaveShader(const std::vector<u32>& spirv) const {
- if (!initialized) {
- return;
- }
-
- std::vector<u32> spirv_copy = spirv;
- GFSDK_Aftermath_SpirvCode shader;
- shader.pData = spirv_copy.data();
- shader.size = static_cast<u32>(spirv_copy.size() * 4);
-
- std::scoped_lock lock{mutex};
-
- GFSDK_Aftermath_ShaderHash hash;
- if (!GFSDK_Aftermath_SUCCEED(
- GFSDK_Aftermath_GetShaderHashSpirv(GFSDK_Aftermath_Version_API, &shader, &hash))) {
- LOG_ERROR(Render_Vulkan, "Failed to hash SPIR-V module");
- return;
- }
-
- Common::FS::IOFile file(fmt::format("{}/source_{:016x}.spv", dump_dir, hash.hash), "wb");
- if (!file.IsOpen()) {
- LOG_ERROR(Render_Vulkan, "Failed to dump SPIR-V module with hash={:016x}", hash.hash);
- return;
- }
- if (file.WriteArray(spirv.data(), spirv.size()) != spirv.size()) {
- LOG_ERROR(Render_Vulkan, "Failed to write SPIR-V module with hash={:016x}", hash.hash);
- return;
- }
-}
-
-void NsightAftermathTracker::OnGpuCrashDumpCallback(const void* gpu_crash_dump,
- u32 gpu_crash_dump_size) {
- std::scoped_lock lock{mutex};
-
- LOG_CRITICAL(Render_Vulkan, "called");
-
- GFSDK_Aftermath_GpuCrashDump_Decoder decoder;
- if (!GFSDK_Aftermath_SUCCEED(GFSDK_Aftermath_GpuCrashDump_CreateDecoder(
- GFSDK_Aftermath_Version_API, gpu_crash_dump, gpu_crash_dump_size, &decoder))) {
- LOG_ERROR(Render_Vulkan, "Failed to create decoder");
- return;
- }
- SCOPE_EXIT({ GFSDK_Aftermath_GpuCrashDump_DestroyDecoder(decoder); });
-
- u32 json_size = 0;
- if (!GFSDK_Aftermath_SUCCEED(GFSDK_Aftermath_GpuCrashDump_GenerateJSON(
- decoder, GFSDK_Aftermath_GpuCrashDumpDecoderFlags_ALL_INFO,
- GFSDK_Aftermath_GpuCrashDumpFormatterFlags_NONE, nullptr, nullptr, nullptr, nullptr,
- this, &json_size))) {
- LOG_ERROR(Render_Vulkan, "Failed to generate JSON");
- return;
- }
- std::vector<char> json(json_size);
- if (!GFSDK_Aftermath_SUCCEED(
- GFSDK_Aftermath_GpuCrashDump_GetJSON(decoder, json_size, json.data()))) {
- LOG_ERROR(Render_Vulkan, "Failed to query JSON");
- return;
- }
-
- const std::string base_name = [this] {
- const int id = dump_id++;
- if (id == 0) {
- return fmt::format("{}/crash.nv-gpudmp", dump_dir);
- } else {
- return fmt::format("{}/crash_{}.nv-gpudmp", dump_dir, id);
- }
- }();
-
- std::string_view dump_view(static_cast<const char*>(gpu_crash_dump), gpu_crash_dump_size);
- if (Common::FS::WriteStringToFile(false, base_name, dump_view) != gpu_crash_dump_size) {
- LOG_ERROR(Render_Vulkan, "Failed to write dump file");
- return;
- }
- const std::string_view json_view(json.data(), json.size());
- if (Common::FS::WriteStringToFile(true, base_name + ".json", json_view) != json.size()) {
- LOG_ERROR(Render_Vulkan, "Failed to write JSON");
- return;
- }
-}
-
-void NsightAftermathTracker::OnShaderDebugInfoCallback(const void* shader_debug_info,
- u32 shader_debug_info_size) {
- std::scoped_lock lock{mutex};
-
- GFSDK_Aftermath_ShaderDebugInfoIdentifier identifier;
- if (!GFSDK_Aftermath_SUCCEED(GFSDK_Aftermath_GetShaderDebugInfoIdentifier(
- GFSDK_Aftermath_Version_API, shader_debug_info, shader_debug_info_size, &identifier))) {
- LOG_ERROR(Render_Vulkan, "GFSDK_Aftermath_GetShaderDebugInfoIdentifier failed");
- return;
- }
-
- const std::string path =
- fmt::format("{}/shader_{:016x}{:016x}.nvdbg", dump_dir, identifier.id[0], identifier.id[1]);
- Common::FS::IOFile file(path, "wb");
- if (!file.IsOpen()) {
- LOG_ERROR(Render_Vulkan, "Failed to create file {}", path);
- return;
- }
- if (file.WriteBytes(static_cast<const u8*>(shader_debug_info), shader_debug_info_size) !=
- shader_debug_info_size) {
- LOG_ERROR(Render_Vulkan, "Failed to write file {}", path);
- return;
- }
-}
-
-void NsightAftermathTracker::OnCrashDumpDescriptionCallback(
- PFN_GFSDK_Aftermath_AddGpuCrashDumpDescription add_description) {
- add_description(GFSDK_Aftermath_GpuCrashDumpDescriptionKey_ApplicationName, "yuzu");
-}
-
-void NsightAftermathTracker::GpuCrashDumpCallback(const void* gpu_crash_dump,
- u32 gpu_crash_dump_size, void* user_data) {
- static_cast<NsightAftermathTracker*>(user_data)->OnGpuCrashDumpCallback(gpu_crash_dump,
- gpu_crash_dump_size);
-}
-
-void NsightAftermathTracker::ShaderDebugInfoCallback(const void* shader_debug_info,
- u32 shader_debug_info_size, void* user_data) {
- static_cast<NsightAftermathTracker*>(user_data)->OnShaderDebugInfoCallback(
- shader_debug_info, shader_debug_info_size);
-}
-
-void NsightAftermathTracker::CrashDumpDescriptionCallback(
- PFN_GFSDK_Aftermath_AddGpuCrashDumpDescription add_description, void* user_data) {
- static_cast<NsightAftermathTracker*>(user_data)->OnCrashDumpDescriptionCallback(
- add_description);
-}
-
-} // namespace Vulkan
-
-#endif // HAS_NSIGHT_AFTERMATH
diff --git a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.h b/src/video_core/renderer_vulkan/nsight_aftermath_tracker.h
deleted file mode 100644
index afe7ae99e..000000000
--- a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2020 yuzu Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
-
-#pragma once
-
-#include <mutex>
-#include <string>
-#include <vector>
-
-#define VK_NO_PROTOTYPES
-#include <vulkan/vulkan.h>
-
-#ifdef HAS_NSIGHT_AFTERMATH
-#include <GFSDK_Aftermath_Defines.h>
-#include <GFSDK_Aftermath_GpuCrashDump.h>
-#include <GFSDK_Aftermath_GpuCrashDumpDecoding.h>
-#endif
-
-#include "common/common_types.h"
-#include "common/dynamic_library.h"
-
-namespace Vulkan {
-
-class NsightAftermathTracker {
-public:
- NsightAftermathTracker();
- ~NsightAftermathTracker();
-
- NsightAftermathTracker(const NsightAftermathTracker&) = delete;
- NsightAftermathTracker& operator=(const NsightAftermathTracker&) = delete;
-
- // Delete move semantics because Aftermath initialization uses a pointer to this.
- NsightAftermathTracker(NsightAftermathTracker&&) = delete;
- NsightAftermathTracker& operator=(NsightAftermathTracker&&) = delete;
-
- bool Initialize();
-
- void SaveShader(const std::vector<u32>& spirv) const;
-
-private:
-#ifdef HAS_NSIGHT_AFTERMATH
- static void GpuCrashDumpCallback(const void* gpu_crash_dump, u32 gpu_crash_dump_size,
- void* user_data);
-
- static void ShaderDebugInfoCallback(const void* shader_debug_info, u32 shader_debug_info_size,
- void* user_data);
-
- static void CrashDumpDescriptionCallback(
- PFN_GFSDK_Aftermath_AddGpuCrashDumpDescription add_description, void* user_data);
-
- void OnGpuCrashDumpCallback(const void* gpu_crash_dump, u32 gpu_crash_dump_size);
-
- void OnShaderDebugInfoCallback(const void* shader_debug_info, u32 shader_debug_info_size);
-
- void OnCrashDumpDescriptionCallback(
- PFN_GFSDK_Aftermath_AddGpuCrashDumpDescription add_description);
-
- mutable std::mutex mutex;
-
- std::string dump_dir;
- int dump_id = 0;
-
- 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;
-#endif
-};
-
-#ifndef HAS_NSIGHT_AFTERMATH
-inline NsightAftermathTracker::NsightAftermathTracker() = default;
-inline NsightAftermathTracker::~NsightAftermathTracker() = default;
-inline bool NsightAftermathTracker::Initialize() {
- return false;
-}
-inline void NsightAftermathTracker::SaveShader(const std::vector<u32>&) const {}
-#endif
-
-} // namespace Vulkan