diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h index 370e67c5..5ad9860a 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h @@ -112,6 +112,12 @@ namespace MobileGL { Vector>& GetGeneratedSpirv() { return m_generatedSpirv; } + Int GetShaderIndexByStage(ShaderStage stage) const { + auto it = std::find_if(m_shaders.begin(), m_shaders.end(), + [stage](const SharedPtr& shader) { return shader->GetShaderStage() == stage; }); + return it == m_shaders.end() ? -1 : std::distance(m_shaders.begin(), it); + } + Uint GetExternalIndex() const { return m_externalIndex; } // const UnorderedMap& GetAttribLocationMap() const { return diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index cd183e26..78e75180 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -983,7 +983,7 @@ TEST_F(ProgramTest, CompileAndLinkWithExplicitFragmentOut) { auto programObject = MG_State::pGLContext->GetCurrentProgram(); auto& spirvs = programObject->GetGeneratedSpirv(); - auto& fragSpirv = spirvs[0]; // 0 - fragment, 1 - vertex + auto& fragSpirv = spirvs[programObject->GetShaderIndexByStage(ShaderStage::Fragment)]; char* pSrcfragOut = nullptr; const char* needle = "layout(location = 7) out vec4 fragColor;"; // for (auto spirv: spirvs) {