diff --git a/CMakeLists.txt b/CMakeLists.txt index 09b57eea..5a2f8170 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,8 @@ if (MSVC) set(CMAKE_CXX_FLAGS "/EHsc ${CMAKE_CXX_FLAGS}") endif() +set(ENABLE_RTTI ON CACHE BOOL "Enables RTTI (will be took by glslang)" FORCE) + set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "Disable glslangValidator/spirv-remap" FORCE) set(ENABLE_SPVREMAPPER OFF CACHE BOOL "Disable SPVRemapper" FORCE) set(ENABLE_OPT OFF CACHE BOOL "Disable SPIRV-Tools opt usage in glslang" FORCE) @@ -86,6 +88,7 @@ set(SOURCE_FILES MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp + MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.cpp MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp diff --git a/MobileGL/Includes.h b/MobileGL/Includes.h index cda4b1b1..f0cdc208 100644 --- a/MobileGL/Includes.h +++ b/MobileGL/Includes.h @@ -56,7 +56,6 @@ // Include glslang headers #include #include -#include #include #include #include diff --git a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.h b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.h index 6c6ef566..6f5b4c35 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.h +++ b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.h @@ -1,6 +1,8 @@ #pragma once #include #include "SpvcSession.h" +#include "glslang/TVarEntryInfo.h" +#include "glslang/TMglGlslIoResolver.h" namespace MobileGL { namespace MG_Util { diff --git a/MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.cpp b/MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.cpp new file mode 100644 index 00000000..e9df15f1 --- /dev/null +++ b/MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.cpp @@ -0,0 +1,13 @@ +// +// Created by Swung 0x48 on 2025/11/10. +// + +#include "TMglGlslIoResolver.h" + +int TMglGlslIoResolver::resolveInOutLocation(EShLanguage stage, glslang::TVarEntryInfo &ent) { + return glslang::TDefaultGlslIoResolver::resolveInOutLocation(stage, ent); +} + +int TMglGlslIoResolver::resolveUniformLocation(EShLanguage stage, glslang::TVarEntryInfo &ent) { + return glslang::TDefaultGlslIoResolver::resolveUniformLocation(stage, ent); +} diff --git a/MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.h b/MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.h new file mode 100644 index 00000000..44422b9d --- /dev/null +++ b/MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.h @@ -0,0 +1,20 @@ +// +// Created by Swung 0x48 on 2025/11/10. +// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include "TVarEntryInfo.h" + +class TMglGlslIoResolver: public glslang::TDefaultGlslIoResolver { + int resolveInOutLocation(EShLanguage stage, glslang::TVarEntryInfo& ent) override; + int resolveUniformLocation(EShLanguage /*stage*/, glslang::TVarEntryInfo& ent) override; +}; + + diff --git a/MobileGL/MG_Util/ShaderTranspiler/glslang/TVarEntryInfo.h b/MobileGL/MG_Util/ShaderTranspiler/glslang/TVarEntryInfo.h new file mode 100644 index 00000000..87c18076 --- /dev/null +++ b/MobileGL/MG_Util/ShaderTranspiler/glslang/TVarEntryInfo.h @@ -0,0 +1,29 @@ +// +// Created by Swung 0x48 on 2025/11/10. +// + +#pragma once +#include + +/* + * This file is ripped from glslang/MachineIndependent/iomapper.cpp + * As an temporary solution to define a custom glslang::TIoMapResolver + * with previously public APIs + */ + +namespace glslang { + struct TVarEntryInfo { + long long id; + TIntermSymbol *symbol; + bool live; + TLayoutPacking upgradedToPushConstantPacking; // ElpNone means it hasn't been upgraded + int newBinding; + int newSet; + int newLocation; + int newComponent; + int newIndex; + EShLanguage stage; + + void clearNewAssignments(); + }; +}