renderer_vulkan.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright 2018 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <memory>
  6. #include <string>
  7. #include <vector>
  8. #include "common/dynamic_library.h"
  9. #include "video_core/renderer_base.h"
  10. #include "video_core/vulkan_common/vulkan_wrapper.h"
  11. namespace Core {
  12. class TelemetrySession;
  13. }
  14. namespace Core::Memory {
  15. class Memory;
  16. }
  17. namespace Tegra {
  18. class GPU;
  19. }
  20. namespace Vulkan {
  21. class Device;
  22. class StateTracker;
  23. class VKBlitScreen;
  24. class VKMemoryManager;
  25. class VKSwapchain;
  26. class VKScheduler;
  27. struct VKScreenInfo {
  28. VkImageView image_view{};
  29. u32 width{};
  30. u32 height{};
  31. bool is_srgb{};
  32. };
  33. class RendererVulkan final : public VideoCore::RendererBase {
  34. public:
  35. explicit RendererVulkan(Core::TelemetrySession& telemtry_session,
  36. Core::Frontend::EmuWindow& emu_window,
  37. Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
  38. std::unique_ptr<Core::Frontend::GraphicsContext> context_);
  39. ~RendererVulkan() override;
  40. bool Init() override;
  41. void ShutDown() override;
  42. void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
  43. static std::vector<std::string> EnumerateDevices();
  44. private:
  45. void InitializeDevice();
  46. void Report() const;
  47. Core::TelemetrySession& telemetry_session;
  48. Core::Memory::Memory& cpu_memory;
  49. Tegra::GPU& gpu;
  50. Common::DynamicLibrary library;
  51. vk::InstanceDispatch dld;
  52. vk::Instance instance;
  53. vk::SurfaceKHR surface;
  54. VKScreenInfo screen_info;
  55. vk::DebugUtilsMessenger debug_callback;
  56. std::unique_ptr<Device> device;
  57. std::unique_ptr<VKMemoryManager> memory_manager;
  58. std::unique_ptr<StateTracker> state_tracker;
  59. std::unique_ptr<VKScheduler> scheduler;
  60. std::unique_ptr<VKSwapchain> swapchain;
  61. std::unique_ptr<VKBlitScreen> blit_screen;
  62. };
  63. } // namespace Vulkan