From 18b37c32ae56732530b640fda18abd318b0f1bf0 Mon Sep 17 00:00:00 2001 From: Chaos02 Date: Thu, 16 Jul 2026 09:30:04 +0200 Subject: [PATCH] Fix crash on renderbuffers with no sampler filter (#674) VkGlRenderbuffer treats a GL renderbuffer like a sampled texture and demands a min-filter. A GL renderbuffer is a render target, not a sampled resource, so it legitimately has no sampler/filter: minFilter stays at its unset default of 0. updateSampler() then falls through to its default -> branch and throws: java.lang.IllegalStateException: Unexpected min filter value: 0 at net.vulkanmod.gl.VkGlRenderbuffer.updateSampler(VkGlRenderbuffer.java:178) at net.vulkanmod.gl.VkGlRenderbuffer.allocateIfNeeded(VkGlRenderbuffer.java:133) at net.vulkanmod.gl.VkGlRenderbuffer.renderbufferStorage(VkGlRenderbuffer.java:58) This crashes any mod that builds a custom FBO with a depth renderbuffer; in the wild it is triggered by Xaero's ImprovedFramebuffer.renderbufferStorage (issue #674). Fix: treat minFilter == 0 as "no sampler needed" and return early from updateSampler(), skipping sampler creation for the renderbuffer. --- src/main/java/net/vulkanmod/gl/VkGlRenderbuffer.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/net/vulkanmod/gl/VkGlRenderbuffer.java b/src/main/java/net/vulkanmod/gl/VkGlRenderbuffer.java index 63b7a62ed..9d69b7d9c 100644 --- a/src/main/java/net/vulkanmod/gl/VkGlRenderbuffer.java +++ b/src/main/java/net/vulkanmod/gl/VkGlRenderbuffer.java @@ -156,6 +156,14 @@ void allocateImage(int width, int height, int vkFormat) { } void updateSampler() { + // A renderbuffer is a render target, not a sampled resource, so it may + // legitimately have no sampler filter set (minFilter == 0, the unset + // default). Treat that as "no sampler needed" and skip the sampler + // build instead of falling through to the "Unexpected min filter value" + // throw below. See issue #674 (Xaero's custom depth renderbuffer FBO). + if (minFilter == 0) + return; + if (vulkanImage == null) return;