summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_swapchain.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.h b/src/video_core/renderer_vulkan/vk_swapchain.h
index 35c2cdc14..61a6d959e 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.h
+++ b/src/video_core/renderer_vulkan/vk_swapchain.h
@@ -33,6 +33,11 @@ public:
/// Presents the rendered image to the swapchain.
void Present(VkSemaphore render_semaphore);
+ /// Returns true when the swapchain needs to be recreated.
+ bool NeedsRecreation(bool is_srgb) const {
+ return HasColorSpaceChanged(is_srgb) || IsSubOptimal() || NeedsPresentModeUpdate();
+ }
+
/// Returns true when the color space has changed.
bool HasColorSpaceChanged(bool is_srgb) const {
return current_srgb != is_srgb;
@@ -68,8 +73,12 @@ public:
return *image_views[index];
}
- VkFormat GetImageFormat() const {
- return image_format;
+ VkFormat GetImageViewFormat() const {
+ return image_view_format;
+ }
+
+ VkSemaphore CurrentPresentSemaphore() const {
+ return *present_semaphores[frame_index];
}
private:
@@ -80,6 +89,10 @@ private:
void Destroy();
+ bool HasFpsUnlockChanged() const;
+
+ bool NeedsPresentModeUpdate() const;
+
const VkSurfaceKHR surface;
const Device& device;
VKScheduler& scheduler;
@@ -96,10 +109,12 @@ private:
u32 image_index{};
u32 frame_index{};
- VkFormat image_format{};
+ VkFormat image_view_format{};
VkExtent2D extent{};
+ VkPresentModeKHR present_mode{};
bool current_srgb{};
+ bool current_fps_unlocked{};
bool is_outdated{};
bool is_suboptimal{};
};