GS/VK: Detect max supported framebuffer dimensions for null framebuffer.

This commit is contained in:
TJnotJT
2026-06-28 12:13:38 -04:00
committed by Ty
parent 166c4491c2
commit dba432639e
4 changed files with 8 additions and 4 deletions
+3 -1
View File
@@ -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 &&
+2
View File
@@ -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
{
+2 -2
View File
@@ -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());
+1 -1
View File
@@ -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);