From 00f5741f7f23e1c4f725752eede7da1e3061ec3a Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Wed, 13 Aug 2025 14:19:37 +0800 Subject: [PATCH] [Feat] (MG_Util/ShaderCompiler): add new item to ShaderCompileBits and implement it --- .../MG_Util/ShaderTranspiler/ShaderCompiler.cpp | 15 +++++++++++---- MobileGL/MG_Util/ShaderTranspiler/Types.h | 3 ++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp index d9f8e370..f98faf69 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp @@ -131,15 +131,22 @@ namespace MobileGL { const char* src[] = {sourceStr.data()}; tshader->setStrings(src, 1); tshader->setInvertY(true); - tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientVulkan, 450); - tshader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_3); - tshader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_5); + if (attrib.flags & ShaderCompileBits::CompileForOpenGL) { + tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientOpenGL, 450); + tshader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450); + tshader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_5); + } else { + tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientVulkan, 450); + tshader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_3); + tshader->setEnvTarget(glslang::EShTargetSpv, + ((attrib.flags & ShaderCompileBits::EmitDiscardAsDemote) ? glslang::EShTargetSpv_1_6 : glslang::EShTargetSpv_1_5)); + } tshader->setAutoMapLocations(true); tshader->setAutoMapBindings(true); tshader->setEnvInputVulkanRulesRelaxed(); // using EXT_vulkan_glsl_relaxed for gl_VertexID and // gl_InstanceID? tshader->setGlobalUniformBlockName(GLOBAL_UBO_NAME); - if (!tshader->parse(&GetTBuiltInResourceInstance(), 150, ECoreProfile, + if (!tshader->parse(&GetTBuiltInResourceInstance(), 460, ECoreProfile, /*forceDefaultVersionAndProfile: */ false, /*forwardCompatible: */ true, EShMsgDefault)) { ResultInfo r; diff --git a/MobileGL/MG_Util/ShaderTranspiler/Types.h b/MobileGL/MG_Util/ShaderTranspiler/Types.h index 90761a66..dc0fc2c8 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/Types.h +++ b/MobileGL/MG_Util/ShaderTranspiler/Types.h @@ -9,7 +9,8 @@ namespace MobileGL { struct EmptyType {}; enum class ShaderCompileBits : Uint { - EmitDiscardAsDemote = 1 << 0, + CompileForOpenGL = 1 << 0, + EmitDiscardAsDemote = 1 << 1, }; struct ShaderAttrib {