mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 13:48:30 +09:00
[Fix] (MG_State/Program): Map IO binding in FinalizeProgramPipeline.
This commit is contained in:
@@ -110,7 +110,21 @@ GLenum ProgramState::FinalizeProgramPipeline(GLuint program) {
|
|||||||
std::vector<std::vector<unsigned>> allSpirv =
|
std::vector<std::vector<unsigned>> allSpirv =
|
||||||
MG_Util::Program::CompileMultipleShadersToSPIRV(*this, prog, prog.infoLog);
|
MG_Util::Program::CompileMultipleShadersToSPIRV(*this, prog, prog.infoLog);
|
||||||
|
|
||||||
|
if (!prog.infoLog.empty() || allSpirv.empty()) {
|
||||||
|
prog.linked = UncertainBool::False;
|
||||||
|
prog.linkStatus = GL_FALSE;
|
||||||
|
prog.infoLog = "Program linking failed during SPIR-V compilation: " + prog.infoLog;
|
||||||
|
MG_Util::Debug::LogE("MG_State: Program: FinalizeProgramPipeline error: %s", prog.infoLog.c_str());
|
||||||
|
return GL_INVALID_OPERATION;
|
||||||
|
}
|
||||||
|
|
||||||
MG_Util::Program::ReflectSPIRVUniforms(allSpirv, prog, prog.infoLog);
|
MG_Util::Program::ReflectSPIRVUniforms(allSpirv, prog, prog.infoLog);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < prog.attachedShaders.size(); ++i) {
|
||||||
|
GLuint shaderId = prog.attachedShaders[i];
|
||||||
|
shaders_[shaderId].source = MG_Util::Program::CompileSPIRVToGLSL(allSpirv[i], 450, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (!prog.infoLog.empty()) {
|
if (!prog.infoLog.empty()) {
|
||||||
prog.linked = UncertainBool::False;
|
prog.linked = UncertainBool::False;
|
||||||
prog.linkStatus = GL_FALSE;
|
prog.linkStatus = GL_FALSE;
|
||||||
|
|||||||
@@ -658,6 +658,21 @@ namespace MG_Util::Program {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<glslang::TIoMapResolver> resolver;
|
||||||
|
for (unsigned stage = 0; stage < EShLangCount; stage++) {
|
||||||
|
auto* pResolver = program.getGlslIoResolver((EShLanguage)stage);
|
||||||
|
if (pResolver) {
|
||||||
|
resolver = std::unique_ptr<glslang::TIoMapResolver>(pResolver);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
auto ioMapper = std::unique_ptr<glslang::TIoMapper>(glslang::GetGlslIoMapper());
|
||||||
|
|
||||||
|
if (!program.mapIO(resolver.get(), ioMapper.get())) {
|
||||||
|
infoLog = "Error: [glslang] Cannot mapIO:\n" + std::to_string(program.getInfoLog());
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
SpvOptions spvOptions;
|
SpvOptions spvOptions;
|
||||||
spvOptions.disableOptimizer = false;
|
spvOptions.disableOptimizer = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user