|
|
@ -0,0 +1,72 @@ |
|
|
|
|
|
// Copyright 2018 yuzu Emulator Project |
|
|
|
|
|
// Licensed under GPLv2 or any later version |
|
|
|
|
|
// Refer to the license.txt file included. |
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
|
|
|
|
|
|
|
|
#include <optional> |
|
|
|
|
|
#include <vector> |
|
|
|
|
|
#include "video_core/renderer_base.h" |
|
|
|
|
|
#include "video_core/renderer_vulkan/declarations.h" |
|
|
|
|
|
|
|
|
|
|
|
namespace Core { |
|
|
|
|
|
class System; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
namespace Vulkan { |
|
|
|
|
|
|
|
|
|
|
|
class VKBlitScreen; |
|
|
|
|
|
class VKDevice; |
|
|
|
|
|
class VKFence; |
|
|
|
|
|
class VKMemoryManager; |
|
|
|
|
|
class VKResourceManager; |
|
|
|
|
|
class VKSwapchain; |
|
|
|
|
|
class VKScheduler; |
|
|
|
|
|
class VKImage; |
|
|
|
|
|
|
|
|
|
|
|
struct VKScreenInfo { |
|
|
|
|
|
VKImage* image{}; |
|
|
|
|
|
u32 width{}; |
|
|
|
|
|
u32 height{}; |
|
|
|
|
|
bool is_srgb{}; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
class RendererVulkan final : public VideoCore::RendererBase { |
|
|
|
|
|
public: |
|
|
|
|
|
explicit RendererVulkan(Core::Frontend::EmuWindow& window, Core::System& system); |
|
|
|
|
|
~RendererVulkan() override; |
|
|
|
|
|
|
|
|
|
|
|
/// Swap buffers (render frame) |
|
|
|
|
|
void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override; |
|
|
|
|
|
|
|
|
|
|
|
/// Initialize the renderer |
|
|
|
|
|
bool Init() override; |
|
|
|
|
|
|
|
|
|
|
|
/// Shutdown the renderer |
|
|
|
|
|
void ShutDown() override; |
|
|
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
|
std::optional<vk::DebugUtilsMessengerEXT> CreateDebugCallback( |
|
|
|
|
|
const vk::DispatchLoaderDynamic& dldi); |
|
|
|
|
|
|
|
|
|
|
|
bool PickDevices(const vk::DispatchLoaderDynamic& dldi); |
|
|
|
|
|
|
|
|
|
|
|
void Report() const; |
|
|
|
|
|
|
|
|
|
|
|
Core::System& system; |
|
|
|
|
|
|
|
|
|
|
|
vk::Instance instance; |
|
|
|
|
|
vk::SurfaceKHR surface; |
|
|
|
|
|
|
|
|
|
|
|
VKScreenInfo screen_info; |
|
|
|
|
|
|
|
|
|
|
|
UniqueDebugUtilsMessengerEXT debug_callback; |
|
|
|
|
|
std::unique_ptr<VKDevice> device; |
|
|
|
|
|
std::unique_ptr<VKSwapchain> swapchain; |
|
|
|
|
|
std::unique_ptr<VKMemoryManager> memory_manager; |
|
|
|
|
|
std::unique_ptr<VKResourceManager> resource_manager; |
|
|
|
|
|
std::unique_ptr<VKScheduler> scheduler; |
|
|
|
|
|
std::unique_ptr<VKBlitScreen> blit_screen; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
} // namespace Vulkan |