renderer_vulkan.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 <optional>
  7. #include <vector>
  8. #include "video_core/renderer_base.h"
  9. #include "video_core/renderer_vulkan/declarations.h"
  10. namespace Core {
  11. class System;
  12. }
  13. namespace Vulkan {
  14. class StateTracker;
  15. class VKBlitScreen;
  16. class VKDevice;
  17. class VKFence;
  18. class VKMemoryManager;
  19. class VKResourceManager;
  20. class VKSwapchain;
  21. class VKScheduler;
  22. class VKImage;
  23. struct VKScreenInfo {
  24. VKImage* image{};
  25. u32 width{};
  26. u32 height{};
  27. bool is_srgb{};
  28. };
  29. class RendererVulkan final : public VideoCore::RendererBase {
  30. public:
  31. explicit RendererVulkan(Core::Frontend::EmuWindow& window, Core::System& system);
  32. ~RendererVulkan() override;
  33. bool Init() override;
  34. void ShutDown() override;
  35. void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
  36. bool TryPresent(int timeout_ms) override;
  37. private:
  38. std::optional<vk::DebugUtilsMessengerEXT> CreateDebugCallback(
  39. const vk::DispatchLoaderDynamic& dldi);
  40. bool PickDevices(const vk::DispatchLoaderDynamic& dldi);
  41. void Report() const;
  42. Core::System& system;
  43. vk::Instance instance;
  44. vk::SurfaceKHR surface;
  45. VKScreenInfo screen_info;
  46. UniqueDebugUtilsMessengerEXT debug_callback;
  47. std::unique_ptr<VKDevice> device;
  48. std::unique_ptr<VKSwapchain> swapchain;
  49. std::unique_ptr<VKMemoryManager> memory_manager;
  50. std::unique_ptr<VKResourceManager> resource_manager;
  51. std::unique_ptr<StateTracker> state_tracker;
  52. std::unique_ptr<VKScheduler> scheduler;
  53. std::unique_ptr<VKBlitScreen> blit_screen;
  54. };
  55. } // namespace Vulkan