renderer_vulkan.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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/renderer_vulkan/vk_blit_screen.h"
  11. #include "video_core/renderer_vulkan/vk_rasterizer.h"
  12. #include "video_core/renderer_vulkan/vk_scheduler.h"
  13. #include "video_core/renderer_vulkan/vk_state_tracker.h"
  14. #include "video_core/renderer_vulkan/vk_swapchain.h"
  15. #include "video_core/vulkan_common/vulkan_device.h"
  16. #include "video_core/vulkan_common/vulkan_memory_allocator.h"
  17. #include "video_core/vulkan_common/vulkan_wrapper.h"
  18. namespace Core {
  19. class TelemetrySession;
  20. }
  21. namespace Core::Memory {
  22. class Memory;
  23. }
  24. namespace Tegra {
  25. class GPU;
  26. }
  27. namespace Vulkan {
  28. class RendererVulkan final : public VideoCore::RendererBase {
  29. public:
  30. explicit RendererVulkan(Core::TelemetrySession& telemtry_session,
  31. Core::Frontend::EmuWindow& emu_window,
  32. Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
  33. std::unique_ptr<Core::Frontend::GraphicsContext> context_);
  34. ~RendererVulkan() override;
  35. void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
  36. VideoCore::RasterizerInterface* ReadRasterizer() override {
  37. return &rasterizer;
  38. }
  39. [[nodiscard]] std::string GetDeviceVendor() const override {
  40. return device.GetDriverName();
  41. }
  42. private:
  43. void Report() const;
  44. Core::TelemetrySession& telemetry_session;
  45. Core::Memory::Memory& cpu_memory;
  46. Tegra::GPU& gpu;
  47. Common::DynamicLibrary library;
  48. vk::InstanceDispatch dld;
  49. vk::Instance instance;
  50. vk::DebugUtilsMessenger debug_callback;
  51. vk::SurfaceKHR surface;
  52. VKScreenInfo screen_info;
  53. Device device;
  54. MemoryAllocator memory_allocator;
  55. StateTracker state_tracker;
  56. VKScheduler scheduler;
  57. VKSwapchain swapchain;
  58. VKBlitScreen blit_screen;
  59. RasterizerVulkan rasterizer;
  60. };
  61. } // namespace Vulkan