[Feat]: (MG_Util/ShaderTranspiler): the skeleton of defining a custom TIoResolver

This commit is contained in:
2025-11-10 15:53:43 +08:00
parent fd3b5c3881
commit 3e9b53cecc
6 changed files with 67 additions and 1 deletions
+3
View File
@@ -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
-1
View File
@@ -56,7 +56,6 @@
// Include glslang headers
#include <glslang/Include/Types.h>
#include <glslang/Public/ShaderLang.h>
#include <glslang/Public/ShaderLang.h>
#include <glslang/SPIRV/GlslangToSpv.h>
#include <glslang/Include/intermediate.h>
#include <glslang/MachineIndependent/localintermediate.h>
@@ -1,6 +1,8 @@
#pragma once
#include <Includes.h>
#include "SpvcSession.h"
#include "glslang/TVarEntryInfo.h"
#include "glslang/TMglGlslIoResolver.h"
namespace MobileGL {
namespace MG_Util {
@@ -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);
}
@@ -0,0 +1,20 @@
//
// Created by Swung 0x48 on 2025/11/10.
//
#pragma once
#include <vector>
#include <unordered_map>
#include <glslang/Public/ShaderLang.h>
#include <glslang/Include/Types.h>
#include <glslang/Include/intermediate.h>
#include <glslang/MachineIndependent/iomapper.h>
#include "TVarEntryInfo.h"
class TMglGlslIoResolver: public glslang::TDefaultGlslIoResolver {
int resolveInOutLocation(EShLanguage stage, glslang::TVarEntryInfo& ent) override;
int resolveUniformLocation(EShLanguage /*stage*/, glslang::TVarEntryInfo& ent) override;
};
@@ -0,0 +1,29 @@
//
// Created by Swung 0x48 on 2025/11/10.
//
#pragma once
#include <glslang/Include/Types.h>
/*
* 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();
};
}