renderdoc.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include <renderdoc_app.h>
  4. #include "common/assert.h"
  5. #include "common/dynamic_library.h"
  6. #include "core/tools/renderdoc.h"
  7. #ifdef _WIN32
  8. #include <windows.h>
  9. #else
  10. #include <dlfcn.h>
  11. #endif
  12. namespace Tools {
  13. RenderdocAPI::RenderdocAPI() {
  14. #ifdef WIN32
  15. if (HMODULE mod = GetModuleHandleA("renderdoc.dll")) {
  16. const auto RENDERDOC_GetAPI =
  17. reinterpret_cast<pRENDERDOC_GetAPI>(GetProcAddress(mod, "RENDERDOC_GetAPI"));
  18. const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdoc_api);
  19. ASSERT(ret == 1);
  20. }
  21. #else
  22. #ifdef ANDROID
  23. static constexpr const char RENDERDOC_LIB[] = "libVkLayer_GLES_RenderDoc.so";
  24. #else
  25. static constexpr const char RENDERDOC_LIB[] = "librenderdoc.so";
  26. #endif
  27. if (void* mod = dlopen(RENDERDOC_LIB, RTLD_NOW | RTLD_NOLOAD)) {
  28. const auto RENDERDOC_GetAPI =
  29. reinterpret_cast<pRENDERDOC_GetAPI>(dlsym(mod, "RENDERDOC_GetAPI"));
  30. const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdoc_api);
  31. ASSERT(ret == 1);
  32. }
  33. #endif
  34. }
  35. RenderdocAPI::~RenderdocAPI() = default;
  36. void RenderdocAPI::ToggleCapture() {
  37. if (!rdoc_api) [[unlikely]] {
  38. return;
  39. }
  40. if (!is_capturing) {
  41. rdoc_api->StartFrameCapture(NULL, NULL);
  42. } else {
  43. rdoc_api->EndFrameCapture(NULL, NULL);
  44. }
  45. is_capturing = !is_capturing;
  46. }
  47. } // namespace Tools