renderer_vulkan.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include <string>
  6. #include <variant>
  7. #include "common/dynamic_library.h"
  8. #include "video_core/host1x/gpu_device_memory_manager.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_present_manager.h"
  12. #include "video_core/renderer_vulkan/vk_rasterizer.h"
  13. #include "video_core/renderer_vulkan/vk_scheduler.h"
  14. #include "video_core/renderer_vulkan/vk_state_tracker.h"
  15. #include "video_core/renderer_vulkan/vk_swapchain.h"
  16. #include "video_core/renderer_vulkan/vk_turbo_mode.h"
  17. #include "video_core/vulkan_common/vulkan_device.h"
  18. #include "video_core/vulkan_common/vulkan_memory_allocator.h"
  19. #include "video_core/vulkan_common/vulkan_wrapper.h"
  20. namespace Core {
  21. class TelemetrySession;
  22. }
  23. namespace Core::Memory {
  24. class Memory;
  25. }
  26. namespace Tegra {
  27. class GPU;
  28. }
  29. namespace Vulkan {
  30. Device CreateDevice(const vk::Instance& instance, const vk::InstanceDispatch& dld,
  31. VkSurfaceKHR surface);
  32. class RendererVulkan final : public VideoCore::RendererBase {
  33. public:
  34. explicit RendererVulkan(Core::TelemetrySession& telemtry_session,
  35. Core::Frontend::EmuWindow& emu_window,
  36. Tegra::MaxwellDeviceMemoryManager& device_memory_, Tegra::GPU& gpu_,
  37. std::unique_ptr<Core::Frontend::GraphicsContext> context_);
  38. ~RendererVulkan() override;
  39. void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
  40. VideoCore::RasterizerInterface* ReadRasterizer() override {
  41. return &rasterizer;
  42. }
  43. [[nodiscard]] std::string GetDeviceVendor() const override {
  44. return device.GetDriverName();
  45. }
  46. private:
  47. void Report() const;
  48. void RenderScreenshot(const Tegra::FramebufferConfig& framebuffer);
  49. Core::TelemetrySession& telemetry_session;
  50. Tegra::MaxwellDeviceMemoryManager& device_memory;
  51. Tegra::GPU& gpu;
  52. std::shared_ptr<Common::DynamicLibrary> library;
  53. vk::InstanceDispatch dld;
  54. vk::Instance instance;
  55. vk::DebugUtilsMessenger debug_messenger;
  56. vk::SurfaceKHR surface;
  57. Device device;
  58. MemoryAllocator memory_allocator;
  59. StateTracker state_tracker;
  60. Scheduler scheduler;
  61. Swapchain swapchain;
  62. PresentManager present_manager;
  63. BlitScreen blit_swapchain;
  64. BlitScreen blit_screenshot;
  65. RasterizerVulkan rasterizer;
  66. std::optional<TurboMode> turbo_mode;
  67. };
  68. } // namespace Vulkan