From ac43c0224c731fe047bf705217e1586cdd794016 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 2 Jul 2026 23:44:48 +0800 Subject: [PATCH] [Fix] (MG_Impl/GLImpl, MG_State/GLState): fix Vulkan depth-only fragment outputs --- MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp | 3 +++ MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp b/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp index 93960031..9b5e530b 100644 --- a/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp +++ b/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp @@ -890,6 +890,9 @@ namespace MobileGL::MG_Impl::GLImpl { case GL_MAX_DEBUG_GROUP_STACK_DEPTH: *params = 0; // debug-group entrypoints are stubbed return; + case GL_MAX_DEBUG_MESSAGE_LENGTH: + *params = 1024; // debug-message entrypoints are stubbed, but KHR_debug requires a valid limit + return; case GL_DEBUG_GROUP_STACK_DEPTH: *params = 0; // debug-group entrypoints are stubbed return; diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index c1a059c5..367953ec 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -25,6 +25,11 @@ namespace { return bracket == MobileGL::String::npos ? name : name.substr(0, bracket); } + static bool IsBuiltInPipelineOutput(const glslang::TObjectReflection& output) { + const auto* type = output.getType(); + return type && type->getQualifier().builtIn != glslang::EbvNone; + } + static int GetVertexInputLocationSpan(GLenum glType) { switch (glType) { case GL_FLOAT_MAT2: @@ -645,6 +650,10 @@ namespace MobileGL::MG_State::GLState { const Int outputCount = m_program->getNumPipeOutputs(); for (Int index = 0; index < outputCount; ++index) { const auto& output = m_program->getPipeOutput(index); + if (IsBuiltInPipelineOutput(output)) { + continue; + } + const String outputName = StripArrayElementSuffix(output.name); const auto explicitLocation = m_explicitFragDataLocation.find(outputName); const Int location = explicitLocation != m_explicitFragDataLocation.end()