mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-09 04:38:30 +09:00
[Feat]: (MG_Util/ShaderTranspiler): the skeleton of defining a custom TIoResolver
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user