1
1
Fork 0
forked from suyu/suyu

video_core: Replace VKSwapchain with Swapchain

This commit is contained in:
german77 2022-06-25 23:50:04 -05:00
parent a5e419535f
commit b5d6194f6d
5 changed files with 23 additions and 25 deletions

View file

@ -71,7 +71,7 @@ private:
MemoryAllocator memory_allocator;
StateTracker state_tracker;
Scheduler scheduler;
VKSwapchain swapchain;
Swapchain swapchain;
BlitScreen blit_screen;
RasterizerVulkan rasterizer;
};

View file

@ -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_} {

View file

@ -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;

View file

@ -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();

View file

@ -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);