From 09d1e035ed4e77d3862c5c46ffb14ad78d5db136 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Wed, 13 Aug 2025 17:05:21 +0800 Subject: [PATCH] Revert "[Fix] (MG_State/Program): use vector to save uniforms instead" This reverts commit bfb62872c9c98765257266da01637df113c5efdc. --- .../GLState/ProgramState/ShaderObject.cpp | 7 +------ .../MG_State/GLState/ProgramState/ShaderObject.h | 2 +- MobileGL/MG_Test/Program/ProgramUtilTest.cpp | 15 +++++---------- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp index 646ec7c7..d90f40e9 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp @@ -67,12 +67,7 @@ namespace MobileGL { root->traverse(&traverser); auto& symbols = traverser.GetCollectedSymbols(); for (const auto& symbol : symbols) { - auto layoutLoc = symbol->getQualifier().layoutLocation; - if (layoutLoc >= m_uniforms.size()) { - m_uniforms.reserve(std::bit_ceil(layoutLoc)); - m_uniforms.resize(layoutLoc + 1); - } - m_uniforms[layoutLoc] = symbol->getName().c_str(); + m_uniforms[symbol->getName().c_str()] = symbol->getQualifier().layoutLocation; } return true; diff --git a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h index 70a598b5..60a0285d 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h +++ b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h @@ -73,7 +73,7 @@ namespace MobileGL { const ShaderStage m_stage; String m_source; SharedPtr m_shader; - Vector m_uniforms; + UnorderedMap m_uniforms; String m_infoLog; Bool m_deleteStatus = false; diff --git a/MobileGL/MG_Test/Program/ProgramUtilTest.cpp b/MobileGL/MG_Test/Program/ProgramUtilTest.cpp index 6701e5f7..58f650fb 100644 --- a/MobileGL/MG_Test/Program/ProgramUtilTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramUtilTest.cpp @@ -199,7 +199,7 @@ TEST_F(ProgramUtilTest, CompileVertexShaderWithLocation) { ASSERT_NE(res.error().errc, 0); FAIL() << "errc: " << res.error().errc << "\nlog: " << res.error().log; } - Vector uniforms; + UnorderedMap uniforms; auto pShader = res.value(); auto root = pShader->getIntermediate()->getTreeRoot(); @@ -207,17 +207,12 @@ TEST_F(ProgramUtilTest, CompileVertexShaderWithLocation) { root->traverse(&traverser); auto& symbols = traverser.GetCollectedSymbols(); for (const auto& symbol : symbols) { - auto layoutLoc = symbol->getQualifier().layoutLocation; - if (layoutLoc >= uniforms.size()) { - uniforms.reserve(std::bit_ceil(layoutLoc)); - uniforms.resize(layoutLoc + 1); - } - uniforms[layoutLoc] = symbol->getName().c_str(); + uniforms[symbol->getName().c_str()] = symbol->getQualifier().layoutLocation; } - EXPECT_EQ(uniforms[1], "ProjMat"); - EXPECT_EQ(uniforms[20], "InSize"); - EXPECT_EQ(uniforms[4095], "OutSize"); + EXPECT_EQ(uniforms["ProjMat"], 1); + EXPECT_EQ(uniforms["InSize"], 20); + EXPECT_EQ(uniforms["OutSize"], 4095); } TEST_F(ProgramUtilTest, CompileAndLinkProgram) {