renderer_vulkan.h 1.8 KB

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