From 3fb314fc446b77b0a186328b36ed18cfcd03ba4c Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Mon, 30 Jun 2025 12:29:45 +0800 Subject: [PATCH] [Fix] (MG_Util/GLSLTool): specify vulkan semantics to convert gl_VertexID/gl_InstanceID --- MG/MG_GL/Implementations/GL/Program/GL_Program.cpp | 11 ++++++----- MG/MG_UTIL/Program/GLSLTool.cpp | 7 ++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/MG/MG_GL/Implementations/GL/Program/GL_Program.cpp b/MG/MG_GL/Implementations/GL/Program/GL_Program.cpp index bd1e70c6..abc9a9f7 100644 --- a/MG/MG_GL/Implementations/GL/Program/GL_Program.cpp +++ b/MG/MG_GL/Implementations/GL/Program/GL_Program.cpp @@ -233,7 +233,7 @@ namespace MG_GL::GL { */ } MG_State::SetError(result); - MG_Util::Debug::LogE("Error deleting shader: %s", MG_Util::Debug::GLEnumToString(result)); + MG_Util::Debug::LogW("Error deleting shader: %s", MG_Util::Debug::GLEnumToString(result)); } void DeleteProgram(GLuint program) { @@ -297,7 +297,7 @@ namespace MG_GL::GL { auto it = MG_State_T::programState->shaders_.find(shaderId); if (it != MG_State_T::programState->shaders_.end() && !it->second.markedForDeletion) { shaderSources[it->first] = it->second.source; - MG_Util::Program::RenameGLSLBuiltinsForVulkan(shaderSources[it->first]); +// MG_Util::Program::RenameGLSLBuiltinsForVulkan(shaderSources[it->first]); } } @@ -394,7 +394,8 @@ namespace MG_GL::GL { ShaderCI.SourceLanguage = Diligent::SHADER_SOURCE_LANGUAGE_GLSL_VERBATIM; Diligent::IShader* pShader = nullptr; - MG_Diligent::g_pDevice->CreateShader(ShaderCI, &pShader); + Diligent::RefCntAutoPtr pMsg; + MG_Diligent::g_pDevice->CreateShader(ShaderCI, &pShader, &pMsg); if (pShader) { MG_Diligent::g_ShaderMap[shaderId] = pShader; @@ -405,7 +406,7 @@ namespace MG_GL::GL { } else { shaderObj.compiled = UncertainBool::False; shaderObj.compileStatus = GL_FALSE; - MG_Util::Debug::LogE("Failed to compile shader ID: %u for program %u", shaderId, program); + MG_Util::Debug::LogE("Failed to compile shader ID: %u for program %u. \ncompiler info:\n%s", shaderId, program, pMsg->GetConstDataPtr()); } } else { // Shader already compiled, just add to programInfo @@ -494,7 +495,7 @@ namespace MG_GL::GL { GLenum result = MG_State::QueryProgramStateIntVector(program, pname, params); if (result == GL_NO_ERROR) return; MG_State::SetError(result); - MG_Util::Debug::LogE("Error getting program param: %s", MG_Util::Debug::GLEnumToString(result)); + MG_Util::Debug::LogW("Error getting program param: %s", MG_Util::Debug::GLEnumToString(result)); } void GetShaderiv(GLuint shader, GLenum pname, GLint* params) { diff --git a/MG/MG_UTIL/Program/GLSLTool.cpp b/MG/MG_UTIL/Program/GLSLTool.cpp index f105958c..e7b0090c 100644 --- a/MG/MG_UTIL/Program/GLSLTool.cpp +++ b/MG/MG_UTIL/Program/GLSLTool.cpp @@ -7,8 +7,8 @@ namespace MG_Util::Program { void RenameGLSLBuiltinsForVulkan(std::string &src) { static const std::vector> rules = { - { std::regex(R"(\bgl_VertexID\b)"), "gl_VertexIndex" }, - { std::regex(R"(\bgl_InstanceID\b)"), "gl_InstanceIndex" } + { std::regex(R"(gl_VertexID)"), "gl_VertexIndex" }, + { std::regex(R"(gl_InstanceID)"), "gl_InstanceIndex" } }; for (auto &rule : rules) { @@ -94,7 +94,8 @@ namespace MG_Util::Program { spvc_compiler_options_set_uint(options, SPVC_COMPILER_OPTION_GLSL_VERSION, 450); spvc_compiler_options_set_bool(options, SPVC_COMPILER_OPTION_GLSL_ES, SPVC_FALSE); spvc_compiler_options_set_bool(options, SPVC_COMPILER_OPTION_FLIP_VERTEX_Y, SPVC_TRUE); - + spvc_compiler_options_set_bool(options, SPVC_COMPILER_OPTION_GLSL_VULKAN_SEMANTICS, SPVC_TRUE); + spvc_compiler_install_compiler_options(compiler, options); if ((result = spvc_compiler_compile(compiler, &glsl_source)) != SPVC_SUCCESS) {