diff --git a/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp b/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp index 52941002b3..2d55f76e60 100644 --- a/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp +++ b/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp @@ -2119,7 +2119,7 @@ bool GSDeviceVK::Create(GSVSyncMode vsync_mode, bool allow_present_throttle) return false; } - if ((m_null_framebuffer = GSTextureVK::CreateNullFramebuffer()) == VK_NULL_HANDLE) + if ((m_null_framebuffer = GSTextureVK::CreateNullFramebuffer(m_max_framebuffer_width, m_max_framebuffer_height)) == VK_NULL_HANDLE) { Host::ReportErrorAsync("GS", "Failed to create dummy framebuffer"); return false; @@ -2774,6 +2774,8 @@ bool GSDeviceVK::CheckFeatures() } m_max_texture_size = m_device_properties.limits.maxImageDimension2D; + m_max_framebuffer_width = m_device_properties.limits.maxFramebufferWidth; + m_max_framebuffer_height = m_device_properties.limits.maxFramebufferHeight; m_features.rov = m_optional_extensions.vk_ext_fragment_shader_interlock && m_device_features.fragmentStoresAndAtomics && diff --git a/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.h b/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.h index 67636f373d..19d4f4fb7c 100644 --- a/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.h +++ b/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.h @@ -293,6 +293,8 @@ private: VkPhysicalDeviceDriverPropertiesKHR m_device_driver_properties = {}; OptionalExtensions m_optional_extensions = {}; + u32 m_max_framebuffer_width = 0; + u32 m_max_framebuffer_height = 0; public: enum FeedbackLoopFlag : u8 { diff --git a/pcsx2/GS/Renderers/Vulkan/GSTextureVK.cpp b/pcsx2/GS/Renderers/Vulkan/GSTextureVK.cpp index 0bfb638ce4..f664db0a3b 100644 --- a/pcsx2/GS/Renderers/Vulkan/GSTextureVK.cpp +++ b/pcsx2/GS/Renderers/Vulkan/GSTextureVK.cpp @@ -11,7 +11,7 @@ #include "common/Console.h" #include "common/BitUtils.h" -VkFramebuffer GSTextureVK::CreateNullFramebuffer() +VkFramebuffer GSTextureVK::CreateNullFramebuffer(u32 w, u32 h) { const VkRenderPass rp = GSDeviceVK::GetInstance()->GetRenderPass( VK_FORMAT_UNDEFINED, @@ -23,7 +23,7 @@ VkFramebuffer GSTextureVK::CreateNullFramebuffer() return VK_NULL_HANDLE; Vulkan::FramebufferBuilder fbb; - fbb.SetSize(16384, 16384, 1); + fbb.SetSize(w, h, 1); fbb.SetRenderPass(rp); return fbb.Create(GSDeviceVK::GetInstance()->GetDevice()); diff --git a/pcsx2/GS/Renderers/Vulkan/GSTextureVK.h b/pcsx2/GS/Renderers/Vulkan/GSTextureVK.h index 74324ebad8..006aaaf4f6 100644 --- a/pcsx2/GS/Renderers/Vulkan/GSTextureVK.h +++ b/pcsx2/GS/Renderers/Vulkan/GSTextureVK.h @@ -72,7 +72,7 @@ public: void TransitionSubresourcesToLayout( VkCommandBuffer command_buffer, int start_level, int num_levels, Layout old_layout, Layout new_layout); - static VkFramebuffer CreateNullFramebuffer(); + static VkFramebuffer CreateNullFramebuffer(u32 w, u32 h); /// Framebuffers are lazily allocated. VkFramebuffer GetFramebuffer(bool feedback_loop);