From 3e9b53cecc113220723765c8c4d5952ace7f8b23 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Mon, 10 Nov 2025 15:53:43 +0800 Subject: [PATCH] [Feat]: (MG_Util/ShaderTranspiler): the skeleton of defining a custom TIoResolver --- CMakeLists.txt | 3 ++ MobileGL/Includes.h | 1 - .../MG_Util/ShaderTranspiler/ShaderCompiler.h | 2 ++ .../glslang/TMglGlslIoResolver.cpp | 13 +++++++++ .../glslang/TMglGlslIoResolver.h | 20 +++++++++++++ .../ShaderTranspiler/glslang/TVarEntryInfo.h | 29 +++++++++++++++++++ 6 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.cpp create mode 100644 MobileGL/MG_Util/ShaderTranspiler/glslang/TMglGlslIoResolver.h create mode 100644 MobileGL/MG_Util/ShaderTranspiler/glslang/TVarEntryInfo.h 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(); + }; +}