[Fix] (MG_Impl/GLImpl, MG_State/GLState): fix Vulkan depth-only fragment outputs

This commit is contained in:
2026-07-02 23:46:14 +08:00
parent 011b2ad6f8
commit ac43c0224c
2 changed files with 12 additions and 0 deletions
@@ -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;
@@ -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()