diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f87daba..dffb06c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,7 +136,7 @@ set(SOURCE_FILES MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.cpp - MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.cpp + MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.cpp MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp diff --git a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp index dc749476..b907e57d 100644 --- a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp +++ b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp @@ -516,11 +516,15 @@ namespace MobileGL { void Uniform_State(MG_State::GLState::ProgramObject& programObject, GLuint location, T* value, SizeT byteOffsetInsideUniform = 0) { if (!programObject.IsUniformOpaqueAtLocation(location)) { + MGLOG_D("%s: program = %d, location = %d, maxLocation = %d", __func__, + programObject.GetExternalIndex(), location, programObject.GetMaxUniformLocation()); auto size = programObject.GetUniformSizesInBytes(location); auto offset = programObject.GetUniformOffset(location); MOBILEGL_ASSERT(size >= ItemCount * sizeof(T), "Uniform size mismatch, expected at least %zu bytes, got %zu bytes.", ItemCount * sizeof(T), size); + MGLOG_D("%s: program = %d, location = %d, byteOffset = %d", __func__, + programObject.GetExternalIndex(), location, offset + byteOffsetInsideUniform); Memcpy((char*)programObject.MapUBO() + offset + byteOffsetInsideUniform, value, ItemCount * sizeof(T)); } else { auto* ttype = programObject.GetUniformTType(location); diff --git a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp index d7222c99..534160a4 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp @@ -8,7 +8,7 @@ #include "ShaderCompiler.h" -#include "SpirvPasses/FloatEqualsZeroEliminationPass.h" +#include "SpirvPasses/EliminateFloatEqualsZeroPass.h" #include "spirv-tools/libspirv.h" #include "spirv-tools/optimizer.hpp" @@ -228,9 +228,12 @@ namespace MobileGL { } bool ShaderCompiler::SanitizeAndOptimizeBinary(const Vector& inputBinary, Vector& outputBinary) { - spvtools::Optimizer optimizer(SPV_ENV_UNIVERSAL_1_5); + using namespace spvtools; + Optimizer optimizer(SPV_ENV_UNIVERSAL_1_5); - optimizer.RegisterPass(spvtools::Optimizer::PassToken(MakeUnique())); + optimizer + .RegisterPass(EliminateFloatEqualsZeroPass::CreateEliminateFloatEqualsZeroPass()) + ; return optimizer.Run(inputBinary.data(), inputBinary.size(), &outputBinary); } diff --git a/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.cpp b/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.cpp similarity index 95% rename from MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.cpp rename to MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.cpp index 316287c4..89169c94 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.cpp @@ -6,7 +6,7 @@ // SPDX-License-Identifier: LGPL-3.0-only // End of Source File Header -#include "FloatEqualsZeroEliminationPass.h" +#include "EliminateFloatEqualsZeroPass.h" #include "spirv.hpp" #include "source/opt/constants.h" @@ -21,7 +21,7 @@ namespace MobileGL { namespace MG_Util { namespace ShaderTranspiler { - spvtools::opt::Pass::Status FloatEqualsZeroEliminationPass::Process() { + spvtools::opt::Pass::Status EliminateFloatEqualsZeroPass::Process() { using namespace spvtools; using namespace spvtools::opt; bool modified = false; @@ -156,6 +156,10 @@ namespace MobileGL { } return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } - } + + spvtools::Optimizer::PassToken EliminateFloatEqualsZeroPass::CreateEliminateFloatEqualsZeroPass() { + return spvtools::Optimizer::PassToken(MakeUnique()); + } + } // namespace ShaderTranspiler } } \ No newline at end of file diff --git a/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.h b/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.h similarity index 79% rename from MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.h rename to MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.h index 63f119f6..57d8c56a 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/FloatEqualsZeroEliminationPass.h +++ b/MobileGL/MG_Util/ShaderTranspiler/SpirvPasses/EliminateFloatEqualsZeroPass.h @@ -8,19 +8,23 @@ #pragma once #include "source/opt/pass.h" +#include "spirv-tools/optimizer.hpp" #include namespace MobileGL { namespace MG_Util { namespace ShaderTranspiler { - class FloatEqualsZeroEliminationPass: public spvtools::opt::Pass { + class EliminateFloatEqualsZeroPass: public spvtools::opt::Pass { public: const char* name() const override { return "float-equals-zero-elimination"; } Status Process() override; + + static spvtools::Optimizer::PassToken CreateEliminateFloatEqualsZeroPass(); private: const float K_EPSILON = 0.0001f; }; } // namespace ShaderTranspiler } // namespace MG_Util } // namespace MobileGL +