From 546b78854aef357aa4fe31c89e9f580c59762dba Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 10 Sep 2018 11:37:38 -0600 Subject: [PATCH] Printing preprocessed shaders (not a supported path): Fix #1490: strings Put quote marks around strings, due to a change in how tokenization works. --- Test/baseResults/hlsl.pp.expand.frag.out | 1 + Test/hlsl.pp.expand.frag | 1 + glslang/MachineIndependent/ShaderLang.cpp | 17 +++++++++++++++++ glslang/Public/ShaderLang.h | 2 ++ 4 files changed, 21 insertions(+) mode change 100644 => 100755 Test/hlsl.pp.expand.frag mode change 100644 => 100755 glslang/MachineIndependent/ShaderLang.cpp mode change 100644 => 100755 glslang/Public/ShaderLang.h diff --git a/Test/baseResults/hlsl.pp.expand.frag.out b/Test/baseResults/hlsl.pp.expand.frag.out index 7197891..adfe02c 100644 --- a/Test/baseResults/hlsl.pp.expand.frag.out +++ b/Test/baseResults/hlsl.pp.expand.frag.out @@ -14,5 +14,6 @@ struct A void main() { + "a string" } diff --git a/Test/hlsl.pp.expand.frag b/Test/hlsl.pp.expand.frag old mode 100644 new mode 100755 index 765d17e..d5318a0 --- a/Test/hlsl.pp.expand.frag +++ b/Test/hlsl.pp.expand.frag @@ -14,4 +14,5 @@ struct A void main() { + "a string" } diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp old mode 100644 new mode 100755 index dd3e159..c99f958 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -67,6 +67,11 @@ #include "iomapper.h" #include "Initialize.h" +// TODO: this really shouldn't be here, it is only because of the trial addition +// of printing pre-processed tokens, which requires knowing the string literal +// token to print ", but none of that seems appropriate for this file. +#include "preprocessor/PpTokens.h" + namespace { // anonymous namespace for file-local functions and symbols // Total number of successful initializers of glslang: a refcount @@ -965,6 +970,8 @@ private: // DoPreprocessing is a valid ProcessingContext template argument, // which only performs the preprocessing step of compilation. // It places the result in the "string" argument to its constructor. +// +// This is not an officially supported or fully working path. struct DoPreprocessing { explicit DoPreprocessing(std::string* string): outputString(string) {} bool operator()(TParseContextBase& parseContext, TPpContext& ppContext, @@ -1072,7 +1079,11 @@ struct DoPreprocessing { outputBuffer += ' '; } lastToken = token; + if (token == PpAtomConstString) + outputBuffer += "\""; outputBuffer += ppToken.name; + if (token == PpAtomConstString) + outputBuffer += "\""; } while (true); outputBuffer += '\n'; *outputString = std::move(outputBuffer); @@ -1122,6 +1133,9 @@ struct DoFullParse{ // Return: True if there were no issues found in preprocessing, // False if during preprocessing any unknown version, pragmas or // extensions were found. +// +// NOTE: Doing just preprocessing to obtain a correct preprocessed shader string +// is not an officially supported or fully working path. bool PreprocessDeferred( TCompiler* compiler, const char* const shaderStrings[], @@ -1726,6 +1740,9 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion // Fill in a string with the result of preprocessing ShaderStrings // Returns true if all extensions, pragmas and version strings were valid. +// +// NOTE: Doing just preprocessing to obtain a correct preprocessed shader string +// is not an officially supported or fully working path. bool TShader::preprocess(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h old mode 100644 new mode 100755 index 3c833f8..7fc2ca3 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -532,6 +532,8 @@ public: return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages, includer); } + // NOTE: Doing just preprocessing to obtain a correct preprocessed shader string + // is not an officially supported or fully working path. bool preprocess(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages message, std::string* outputString, -- 2.7.4