mirror of
https://gitlab.com/suyu-emu/suyu.git
synced 2024-03-15 23:15:44 +00:00
video_core: Replace VKSwapchain with Swapchain
This commit is contained in:
parent
a5e419535f
commit
b5d6194f6d
|
@ -71,7 +71,7 @@ private:
|
|||
MemoryAllocator memory_allocator;
|
||||
StateTracker state_tracker;
|
||||
Scheduler scheduler;
|
||||
VKSwapchain swapchain;
|
||||
Swapchain swapchain;
|
||||
BlitScreen blit_screen;
|
||||
RasterizerVulkan rasterizer;
|
||||
};
|
||||
|
|
|
@ -120,8 +120,7 @@ struct BlitScreen::BufferData {
|
|||
|
||||
BlitScreen::BlitScreen(Core::Memory::Memory& cpu_memory_, Core::Frontend::EmuWindow& render_window_,
|
||||
const Device& device_, MemoryAllocator& memory_allocator_,
|
||||
VKSwapchain& swapchain_, Scheduler& scheduler_,
|
||||
const ScreenInfo& screen_info_)
|
||||
Swapchain& swapchain_, Scheduler& scheduler_, const ScreenInfo& screen_info_)
|
||||
: cpu_memory{cpu_memory_}, render_window{render_window_}, device{device_},
|
||||
memory_allocator{memory_allocator_}, swapchain{swapchain_}, scheduler{scheduler_},
|
||||
image_count{swapchain.GetImageCount()}, screen_info{screen_info_} {
|
||||
|
|
|
@ -36,7 +36,7 @@ class Device;
|
|||
class FSR;
|
||||
class RasterizerVulkan;
|
||||
class Scheduler;
|
||||
class VKSwapchain;
|
||||
class Swapchain;
|
||||
|
||||
struct ScreenInfo {
|
||||
VkImageView image_view{};
|
||||
|
@ -48,9 +48,8 @@ struct ScreenInfo {
|
|||
class BlitScreen {
|
||||
public:
|
||||
explicit BlitScreen(Core::Memory::Memory& cpu_memory, Core::Frontend::EmuWindow& render_window,
|
||||
const Device& device, MemoryAllocator& memory_manager,
|
||||
VKSwapchain& swapchain, Scheduler& scheduler,
|
||||
const ScreenInfo& screen_info);
|
||||
const Device& device, MemoryAllocator& memory_manager, Swapchain& swapchain,
|
||||
Scheduler& scheduler, const ScreenInfo& screen_info);
|
||||
~BlitScreen();
|
||||
|
||||
void Recreate();
|
||||
|
@ -108,7 +107,7 @@ private:
|
|||
Core::Frontend::EmuWindow& render_window;
|
||||
const Device& device;
|
||||
MemoryAllocator& memory_allocator;
|
||||
VKSwapchain& swapchain;
|
||||
Swapchain& swapchain;
|
||||
Scheduler& scheduler;
|
||||
const std::size_t image_count;
|
||||
const ScreenInfo& screen_info;
|
||||
|
|
|
@ -64,15 +64,15 @@ VkExtent2D ChooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities, u32 wi
|
|||
|
||||
} // Anonymous namespace
|
||||
|
||||
VKSwapchain::VKSwapchain(VkSurfaceKHR surface_, const Device& device_, Scheduler& scheduler_,
|
||||
u32 width, u32 height, bool srgb)
|
||||
Swapchain::Swapchain(VkSurfaceKHR surface_, const Device& device_, Scheduler& scheduler_, u32 width,
|
||||
u32 height, bool srgb)
|
||||
: surface{surface_}, device{device_}, scheduler{scheduler_} {
|
||||
Create(width, height, srgb);
|
||||
}
|
||||
|
||||
VKSwapchain::~VKSwapchain() = default;
|
||||
Swapchain::~Swapchain() = default;
|
||||
|
||||
void VKSwapchain::Create(u32 width, u32 height, bool srgb) {
|
||||
void Swapchain::Create(u32 width, u32 height, bool srgb) {
|
||||
is_outdated = false;
|
||||
is_suboptimal = false;
|
||||
|
||||
|
@ -93,7 +93,7 @@ void VKSwapchain::Create(u32 width, u32 height, bool srgb) {
|
|||
resource_ticks.resize(image_count);
|
||||
}
|
||||
|
||||
void VKSwapchain::AcquireNextImage() {
|
||||
void Swapchain::AcquireNextImage() {
|
||||
const VkResult result = device.GetLogical().AcquireNextImageKHR(
|
||||
*swapchain, std::numeric_limits<u64>::max(), *present_semaphores[frame_index],
|
||||
VK_NULL_HANDLE, &image_index);
|
||||
|
@ -114,7 +114,7 @@ void VKSwapchain::AcquireNextImage() {
|
|||
resource_ticks[image_index] = scheduler.CurrentTick();
|
||||
}
|
||||
|
||||
void VKSwapchain::Present(VkSemaphore render_semaphore) {
|
||||
void Swapchain::Present(VkSemaphore render_semaphore) {
|
||||
const auto present_queue{device.GetPresentQueue()};
|
||||
const VkPresentInfoKHR present_info{
|
||||
.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
|
||||
|
@ -145,8 +145,8 @@ void VKSwapchain::Present(VkSemaphore render_semaphore) {
|
|||
}
|
||||
}
|
||||
|
||||
void VKSwapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, u32 width,
|
||||
u32 height, bool srgb) {
|
||||
void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, u32 width, u32 height,
|
||||
bool srgb) {
|
||||
const auto physical_device{device.GetPhysical()};
|
||||
const auto formats{physical_device.GetSurfaceFormatsKHR(surface)};
|
||||
const auto present_modes{physical_device.GetSurfacePresentModesKHR(surface)};
|
||||
|
@ -212,13 +212,13 @@ void VKSwapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities,
|
|||
image_view_format = srgb ? VK_FORMAT_B8G8R8A8_SRGB : VK_FORMAT_B8G8R8A8_UNORM;
|
||||
}
|
||||
|
||||
void VKSwapchain::CreateSemaphores() {
|
||||
void Swapchain::CreateSemaphores() {
|
||||
present_semaphores.resize(image_count);
|
||||
std::ranges::generate(present_semaphores,
|
||||
[this] { return device.GetLogical().CreateSemaphore(); });
|
||||
}
|
||||
|
||||
void VKSwapchain::CreateImageViews() {
|
||||
void Swapchain::CreateImageViews() {
|
||||
VkImageViewCreateInfo ci{
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
||||
.pNext = nullptr,
|
||||
|
@ -250,7 +250,7 @@ void VKSwapchain::CreateImageViews() {
|
|||
}
|
||||
}
|
||||
|
||||
void VKSwapchain::Destroy() {
|
||||
void Swapchain::Destroy() {
|
||||
frame_index = 0;
|
||||
present_semaphores.clear();
|
||||
framebuffers.clear();
|
||||
|
@ -258,11 +258,11 @@ void VKSwapchain::Destroy() {
|
|||
swapchain.reset();
|
||||
}
|
||||
|
||||
bool VKSwapchain::HasFpsUnlockChanged() const {
|
||||
bool Swapchain::HasFpsUnlockChanged() const {
|
||||
return current_fps_unlocked != Settings::values.disable_fps_limit.GetValue();
|
||||
}
|
||||
|
||||
bool VKSwapchain::NeedsPresentModeUpdate() const {
|
||||
bool Swapchain::NeedsPresentModeUpdate() const {
|
||||
// Mailbox present mode is the ideal for all scenarios. If it is not available,
|
||||
// A different present mode is needed to support unlocked FPS above the monitor's refresh rate.
|
||||
return present_mode != VK_PRESENT_MODE_MAILBOX_KHR && HasFpsUnlockChanged();
|
||||
|
|
|
@ -17,11 +17,11 @@ namespace Vulkan {
|
|||
class Device;
|
||||
class Scheduler;
|
||||
|
||||
class VKSwapchain {
|
||||
class Swapchain {
|
||||
public:
|
||||
explicit VKSwapchain(VkSurfaceKHR surface, const Device& device, Scheduler& scheduler,
|
||||
u32 width, u32 height, bool srgb);
|
||||
~VKSwapchain();
|
||||
explicit Swapchain(VkSurfaceKHR surface, const Device& device, Scheduler& scheduler, u32 width,
|
||||
u32 height, bool srgb);
|
||||
~Swapchain();
|
||||
|
||||
/// Creates (or recreates) the swapchain with a given size.
|
||||
void Create(u32 width, u32 height, bool srgb);
|
||||
|
|
Loading…
Reference in a new issue