| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- #include <memory>
- #include <string>
- #include <variant>
- #include "common/dynamic_library.h"
- #include "video_core/host1x/gpu_device_memory_manager.h"
- #include "video_core/renderer_base.h"
- #include "video_core/renderer_vulkan/vk_blit_screen.h"
- #include "video_core/renderer_vulkan/vk_present_manager.h"
- #include "video_core/renderer_vulkan/vk_rasterizer.h"
- #include "video_core/renderer_vulkan/vk_scheduler.h"
- #include "video_core/renderer_vulkan/vk_state_tracker.h"
- #include "video_core/renderer_vulkan/vk_swapchain.h"
- #include "video_core/renderer_vulkan/vk_turbo_mode.h"
- #include "video_core/vulkan_common/vulkan_device.h"
- #include "video_core/vulkan_common/vulkan_memory_allocator.h"
- #include "video_core/vulkan_common/vulkan_wrapper.h"
- namespace Core {
- class TelemetrySession;
- }
- namespace Core::Memory {
- class Memory;
- }
- namespace Tegra {
- class GPU;
- }
- namespace Vulkan {
- Device CreateDevice(const vk::Instance& instance, const vk::InstanceDispatch& dld,
- VkSurfaceKHR surface);
- class RendererVulkan final : public VideoCore::RendererBase {
- public:
- explicit RendererVulkan(Core::TelemetrySession& telemtry_session,
- Core::Frontend::EmuWindow& emu_window,
- Tegra::MaxwellDeviceMemoryManager& device_memory_, Tegra::GPU& gpu_,
- std::unique_ptr<Core::Frontend::GraphicsContext> context_);
- ~RendererVulkan() override;
- void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
- VideoCore::RasterizerInterface* ReadRasterizer() override {
- return &rasterizer;
- }
- [[nodiscard]] std::string GetDeviceVendor() const override {
- return device.GetDriverName();
- }
- private:
- void Report() const;
- void RenderScreenshot(const Tegra::FramebufferConfig& framebuffer);
- Core::TelemetrySession& telemetry_session;
- Tegra::MaxwellDeviceMemoryManager& device_memory;
- Tegra::GPU& gpu;
- std::shared_ptr<Common::DynamicLibrary> library;
- vk::InstanceDispatch dld;
- vk::Instance instance;
- vk::DebugUtilsMessenger debug_messenger;
- vk::SurfaceKHR surface;
- Device device;
- MemoryAllocator memory_allocator;
- StateTracker state_tracker;
- Scheduler scheduler;
- Swapchain swapchain;
- PresentManager present_manager;
- BlitScreen blit_swapchain;
- BlitScreen blit_screenshot;
- RasterizerVulkan rasterizer;
- std::optional<TurboMode> turbo_mode;
- };
- } // namespace Vulkan
|