diff --git a/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp b/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp index 15dbfb3066..6c83bd73d0 100644 --- a/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp +++ b/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp @@ -701,13 +701,13 @@ static void TranslateEnvironment(const TEnvironment* environment, EShMessages& m static void RecordProcesses(TIntermediate& intermediate, EShMessages messages, const std::string& sourceEntryPointName) { if ((messages & EShMsgRelaxedErrors) != 0) - intermediate.addProcess("relaxed-errors"); + intermediate.processes.processes.push_back("relaxed-errors"); if ((messages & EShMsgSuppressWarnings) != 0) - intermediate.addProcess("suppress-warnings"); + intermediate.processes.processes.push_back("suppress-warnings"); if ((messages & EShMsgKeepUncalled) != 0) - intermediate.addProcess("keep-uncalled"); + intermediate.processes.processes.push_back("keep-uncalled"); if (sourceEntryPointName.size() > 0) { - intermediate.addProcess("source-entrypoint"); + intermediate.processes.processes.push_back("source-entrypoint"); intermediate.addProcessArgument(sourceEntryPointName); } } @@ -1321,7 +1321,7 @@ public: }; TShader::TShader(EShLanguage s) - : stage(s), lengths(nullptr), stringNames(nullptr), preamble("") + : stage(s), lengths(nullptr), stringNames(nullptr) { pool = new TPoolAllocator; infoSink = new TInfoSink; @@ -1351,72 +1351,6 @@ void TShader::setStrings(const char* const* s, int n) lengths = nullptr; } -void TShader::setStringsWithLengths(const char* const* s, const int* l, int n) -{ - strings = s; - numStrings = n; - lengths = l; -} - -void TShader::setStringsWithLengthsAndNames( - const char* const* s, const int* l, const char* const* names, int n) -{ - strings = s; - numStrings = n; - lengths = l; - stringNames = names; -} - -void TShader::setEntryPoint(const char* entryPoint) -{ - intermediate->setEntryPointName(entryPoint); -} - -void TShader::setSourceEntryPoint(const char* name) -{ - sourceEntryPointName = name; -} - -void TShader::addProcesses(const std::vector& p) -{ - intermediate->addProcesses(p); -} - -// Set binding base for given resource type -void TShader::setShiftBinding(TResourceType res, unsigned int base) { - intermediate->setShiftBinding(res, base); -} - -// Set binding base for given resource type for a given binding set. -void TShader::setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set) { - intermediate->setShiftBindingForSet(res, base, set); -} - -// Set binding base for sampler types -void TShader::setShiftSamplerBinding(unsigned int base) { setShiftBinding(EResSampler, base); } -// Set binding base for texture types (SRV) -void TShader::setShiftTextureBinding(unsigned int base) { setShiftBinding(EResTexture, base); } -// Set binding base for image types -void TShader::setShiftImageBinding(unsigned int base) { setShiftBinding(EResImage, base); } -// Set binding base for uniform buffer objects (CBV) -void TShader::setShiftUboBinding(unsigned int base) { setShiftBinding(EResUbo, base); } -// Synonym for setShiftUboBinding, to match HLSL language. -void TShader::setShiftCbufferBinding(unsigned int base) { setShiftBinding(EResUbo, base); } -// Set binding base for UAV (unordered access view) -void TShader::setShiftUavBinding(unsigned int base) { setShiftBinding(EResUav, base); } -// Set binding base for SSBOs -void TShader::setShiftSsboBinding(unsigned int base) { setShiftBinding(EResSsbo, base); } -// Enables binding automapping using TIoMapper -void TShader::setAutoMapBindings(bool map) { intermediate->setAutoMapBindings(map); } -// Enables position.Y output negation in vertex shader -void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); } -// Fragile: currently within one stage: simple auto-assignment of location -void TShader::setAutoMapLocations(bool map) { intermediate->setAutoMapLocations(map); } -void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); } -void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); } -void TShader::setResourceSetBinding(const std::vector& base) { intermediate->setResourceSetBinding(base); } -void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); } - // // Turn the shader strings into a parse tree in the TIntermediate. // @@ -1428,14 +1362,10 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion if (! InitThread()) return false; SetThreadPoolAllocator(pool); - - if (! preamble) - preamble = ""; - return CompileDeferred(compiler, strings, numStrings, lengths, stringNames, - preamble, EShOptNone, builtInResources, defaultVersion, + "", EShOptNone, builtInResources, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, - forwardCompatible, messages, *intermediate, includer, sourceEntryPointName, + forwardCompatible, messages, *intermediate, includer, "", &environment); } @@ -1451,11 +1381,7 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources, if (! InitThread()) return false; SetThreadPoolAllocator(pool); - - if (! preamble) - preamble = ""; - - return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, preamble, + return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, "", EShOptNone, builtInResources, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, message, includer, *intermediate, output_string); diff --git a/deps/glslang/glslang/glslang/MachineIndependent/localintermediate.h b/deps/glslang/glslang/glslang/MachineIndependent/localintermediate.h index 4eb38bbdd8..7a176ea845 100755 --- a/deps/glslang/glslang/glslang/MachineIndependent/localintermediate.h +++ b/deps/glslang/glslang/glslang/MachineIndependent/localintermediate.h @@ -162,14 +162,6 @@ public: TProcesses() {} ~TProcesses() {} - void addProcess(const char* process) - { - processes.push_back(process); - } - void addProcess(const std::string& process) - { - processes.push_back(process); - } void addArgument(int arg) { processes.back().append(" "); @@ -181,22 +173,6 @@ public: processes.back().append(" "); processes.back().append(arg); } - void addArgument(const std::string& arg) - { - processes.back().append(" "); - processes.back().append(arg); - } - void addIfNonZero(const char* process, int value) - { - if (value != 0) { - addProcess(process); - addArgument(value); - } - } - - const std::vector& getProcesses() const { return processes; } - -private: std::vector processes; }; @@ -242,8 +218,6 @@ public: localSizeSpecId[1] = TQualifier::layoutNotSet; localSizeSpecId[2] = TQualifier::layoutNotSet; xfbBuffers.resize(TQualifier::layoutXfbBufferEnd); - - shiftBinding.fill(0); } void setLimits(const TBuiltInResource& r) { resources = r; } @@ -256,103 +230,31 @@ public: void setEntryPointName(const char* ep) { entryPointName = ep; - processes.addProcess("entry-point"); - processes.addArgument(entryPointName); + processes.processes.push_back("entry-point"); + processes.addArgument(entryPointName.c_str()); } void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; } const std::string& getEntryPointName() const { return entryPointName; } const std::string& getEntryPointMangledName() const { return entryPointMangledName; } - void setShiftBinding(TResourceType res, unsigned int shift) - { - shiftBinding[res] = shift; - - const char* name = getResourceName(res); - if (name != nullptr) - processes.addIfNonZero(name, shift); - } - - unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; } - - void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set) - { - if (shift == 0) // ignore if there's no shift: it's a no-op. - return; - - shiftBindingForSet[res][set] = shift; - - const char* name = getResourceName(res); - if (name != nullptr) { - processes.addProcess(name); - processes.addArgument(shift); - processes.addArgument(set); - } - } - - int getShiftBindingForSet(TResourceType res, unsigned int set) const - { - const auto shift = shiftBindingForSet[res].find(set); - return shift == shiftBindingForSet[res].end() ? -1 : shift->second; - } - bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); } - - void setResourceSetBinding(const std::vector& shift) - { - resourceSetBinding = shift; - if (shift.size() > 0) { - processes.addProcess("resource-set-binding"); - for (int s = 0; s < (int)shift.size(); ++s) - processes.addArgument(shift[s]); - } - } const std::vector& getResourceSetBinding() const { return resourceSetBinding; } - void setAutoMapBindings(bool map) - { - autoMapBindings = map; - if (autoMapBindings) - processes.addProcess("auto-map-bindings"); - } bool getAutoMapBindings() const { return autoMapBindings; } - void setAutoMapLocations(bool map) - { - autoMapLocations = map; - if (autoMapLocations) - processes.addProcess("auto-map-locations"); - } bool getAutoMapLocations() const { return autoMapLocations; } - void setInvertY(bool invert) - { - invertY = invert; - if (invertY) - processes.addProcess("invert-y"); - } bool getInvertY() const { return invertY; } - void setFlattenUniformArrays(bool flatten) - { - flattenUniformArrays = flatten; - if (flattenUniformArrays) - processes.addProcess("flatten-uniform-arrays"); - } bool getFlattenUniformArrays() const { return flattenUniformArrays; } - void setNoStorageFormat(bool b) - { - useUnknownFormat = b; - if (useUnknownFormat) - processes.addProcess("no-storage-format"); - } bool getNoStorageFormat() const { return useUnknownFormat; } void setHlslOffsets() { hlslOffsets = true; if (hlslOffsets) - processes.addProcess("hlsl-offsets"); + processes.processes.push_back("hlsl-offsets"); } bool usingHlslOFfsets() const { return hlslOffsets; } void setUseStorageBuffer() { useStorageBuffer = true; - processes.addProcess("use-storage-buffer"); + processes.processes.push_back("use-storage-buffer"); } bool usingStorageBuffer() const { return useStorageBuffer; } @@ -363,8 +265,6 @@ public: name.compare(name.size() - len, len, implicitCounterName) == 0; } - void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; } - void setVersion(int v) { version = v; } int getVersion() const { return version; } void setProfile(EProfile p) { profile = p; } @@ -375,17 +275,17 @@ public: // client processes if (spvVersion.vulkan > 0) - processes.addProcess("client vulkan100"); + processes.processes.push_back("client vulkan100"); if (spvVersion.openGl > 0) - processes.addProcess("client opengl100"); + processes.processes.push_back("client opengl100"); // target-environment processes if (spvVersion.vulkan > 0) - processes.addProcess("target-env vulkan1.0"); + processes.processes.push_back("target-env vulkan1.0"); else if (spvVersion.vulkan > 0) - processes.addProcess("target-env vulkanUnknown"); + processes.processes.push_back("target-env vulkanUnknown"); if (spvVersion.openGl > 0) - processes.addProcess("target-env opengl"); + processes.processes.push_back("target-env opengl"); } const SpvVersion& getSpv() const { return spvVersion; } EShLanguage getStage() const { return language; } @@ -616,14 +516,7 @@ public: const std::string& getSourceFile() const { return sourceFile; } void addSourceText(const char* text) { sourceText = sourceText + text; } const std::string& getSourceText() const { return sourceText; } - void addProcesses(const std::vector& p) { - for (int i = 0; i < (int)p.size(); ++i) - processes.addProcess(p[i]); - } - void addProcess(const std::string& process) { processes.addProcess(process); } - void addProcessArgument(const std::string& arg) { processes.addArgument(arg); } - const std::vector& getProcesses() const { return processes.getProcesses(); } - + void addProcessArgument(const std::string& arg) { processes.addArgument(arg.c_str()); } void setNeedsLegalization() { needToLegalize = true; } bool needsLegalization() const { return needToLegalize; } @@ -632,6 +525,8 @@ public: const char* const implicitThisName; const char* const implicitCounterName; + // for OpModuleProcessed, or equivalent + TProcesses processes; protected: TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); @@ -702,12 +597,6 @@ protected: bool geoPassthroughEXT; #endif - // Base shift values - std::array shiftBinding; - - // Per-descriptor-set shift values - std::array, EResCount> shiftBindingForSet; - std::vector resourceSetBinding; bool autoMapBindings; bool autoMapLocations; @@ -733,9 +622,6 @@ protected: std::string sourceFile; std::string sourceText; - // for OpModuleProcessed, or equivalent - TProcesses processes; - bool needToLegalize; bool binaryDoubleOutput; diff --git a/deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpContext.h b/deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpContext.h index 6324923d75..07ec5ef6ce 100755 --- a/deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpContext.h +++ b/deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpContext.h @@ -191,8 +191,6 @@ public: TPpContext(TParseContextBase&, const std::string& rootFileName, TShader::Includer&); virtual ~TPpContext(); - void setPreamble(const char* preamble, size_t length); - int tokenize(TPpToken& ppToken); int tokenPaste(int token, TPpToken&); diff --git a/deps/glslang/glslang/glslang/Public/ShaderLang.h b/deps/glslang/glslang/glslang/Public/ShaderLang.h index 7fa6e995a7..a36283935a 100644 --- a/deps/glslang/glslang/glslang/Public/ShaderLang.h +++ b/deps/glslang/glslang/glslang/Public/ShaderLang.h @@ -289,10 +289,8 @@ enum TResourceType { }; // Make one TShader per shader that you will link into a program. Then -// - provide the shader through setStrings() or setStringsWithLengths() +// - provide the shader through setStrings() // - optionally call setEnv*(), see below for more detail -// - optionally use setPreamble() to set a special shader string that will be -// processed before all others but won't affect the validity of #version // - call parse(): source language and target environment must be selected // either by correct setting of EShMessages sent to parse(), or by // explicitly calling setEnv*() @@ -308,55 +306,6 @@ public: explicit TShader(EShLanguage); virtual ~TShader(); void setStrings(const char* const* s, int n); - void setStringsWithLengths(const char* const* s, const int* l, int n); - void setStringsWithLengthsAndNames( - const char* const* s, const int* l, const char* const* names, int n); - void setPreamble(const char* s) { preamble = s; } - void setEntryPoint(const char* entryPoint); - void setSourceEntryPoint(const char* sourceEntryPointName); - void addProcesses(const std::vector&); - - // IO resolver binding data: see comments in ShaderLang.cpp - void setShiftBinding(TResourceType res, unsigned int base); - void setShiftSamplerBinding(unsigned int base); // DEPRECATED: use setShiftBinding - void setShiftTextureBinding(unsigned int base); // DEPRECATED: use setShiftBinding - void setShiftImageBinding(unsigned int base); // DEPRECATED: use setShiftBinding - void setShiftUboBinding(unsigned int base); // DEPRECATED: use setShiftBinding - void setShiftUavBinding(unsigned int base); // DEPRECATED: use setShiftBinding - void setShiftCbufferBinding(unsigned int base); // synonym for setShiftUboBinding - void setShiftSsboBinding(unsigned int base); // DEPRECATED: use setShiftBinding - void setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set); - void setResourceSetBinding(const std::vector& base); - void setAutoMapBindings(bool map); - void setAutoMapLocations(bool map); - void setInvertY(bool invert); - void setFlattenUniformArrays(bool flatten); - void setNoStorageFormat(bool useUnknownFormat); - void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); - - // For setting up the environment (cleared to nothingness in the constructor). - // These must be called so that parsing is done for the right source language and - // target environment, either indirectly through TranslateEnvironment() based on - // EShMessages et. al., or directly by the user. - void setEnvInput(EShSource lang, EShLanguage envStage, EShClient client, int version) - { - environment.input.languageFamily = lang; - environment.input.stage = envStage; - environment.input.dialect = client; - environment.input.dialectVersion = version; - } - void setEnvClient(EShClient client, EShTargetClientVersion version) - { - environment.client.client = client; - environment.client.version = version; - } - void setEnvTarget(EShTargetLanguage lang, EShTargetLanguageVersion version) - { - environment.target.language = lang; - environment.target.version = version; - } - void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; } - bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; } // Interface to #include handlers. // @@ -470,8 +419,6 @@ public: const char* getInfoLog(); const char* getInfoDebugLog(); - EShLanguage getStage() const { return stage; } - TIntermediate* getIntermediate() const { return intermediate; } protected: TPoolAllocator* pool; @@ -491,12 +438,8 @@ protected: const char* const* strings; const int* lengths; const char* const* stringNames; - const char* preamble; int numStrings; - // a function in the source string can be renamed FROM this TO the name given in setEntryPoint. - std::string sourceEntryPointName; - TEnvironment environment; friend class TProgram;