renderer_vulkan.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 "common/dynamic_library.h"
  7. #include "video_core/renderer_base.h"
  8. #include "video_core/renderer_vulkan/vk_blit_screen.h"
  9. #include "video_core/renderer_vulkan/vk_present_manager.h"
  10. #include "video_core/renderer_vulkan/vk_rasterizer.h"
  11. #include "video_core/renderer_vulkan/vk_scheduler.h"
  12. #include "video_core/renderer_vulkan/vk_state_tracker.h"
  13. #include "video_core/renderer_vulkan/vk_swapchain.h"
  14. #include "video_core/renderer_vulkan/vk_turbo_mode.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. Device CreateDevice(const vk::Instance& instance, const vk::InstanceDispatch& dld,
  29. VkSurfaceKHR surface);
  30. class RendererVulkan final : public VideoCore::RendererBase {
  31. public:
  32. explicit RendererVulkan(Core::TelemetrySession& telemtry_session,
  33. Core::Frontend::EmuWindow& emu_window,
  34. Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
  35. std::unique_ptr<Core::Frontend::GraphicsContext> context_);
  36. ~RendererVulkan() override;
  37. void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
  38. VideoCore::RasterizerInterface* ReadRasterizer() override {
  39. return &rasterizer;
  40. }
  41. [[nodiscard]] std::string GetDeviceVendor() const override {
  42. return device.GetDriverName();
  43. }
  44. private:
  45. void Report() const;
  46. void RenderScreenshot(const Tegra::FramebufferConfig& framebuffer, bool use_accelerated);
  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::DebugUtilsMessenger debug_callback;
  54. vk::SurfaceKHR surface;
  55. ScreenInfo screen_info;
  56. Device device;
  57. MemoryAllocator memory_allocator;
  58. StateTracker state_tracker;
  59. Scheduler scheduler;
  60. Swapchain swapchain;
  61. PresentManager present_manager;
  62. BlitScreen blit_screen;
  63. RasterizerVulkan rasterizer;
  64. std::optional<TurboMode> turbo_mode;
  65. };
  66. } // namespace Vulkan