diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 8d6c1350..9f61329b 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -50,7 +50,8 @@ enum TSamplerDim { Esd3D, EsdCube, EsdRect, - EsdBuffer + EsdBuffer, + EsdNumDims }; struct TSampler { @@ -100,6 +101,37 @@ struct TSampler { ms == right.ms && image == right.image; } + + TString getString() const + { + TString s; + + switch (type) { + case EbtFloat: break; + case EbtInt: s.append("i"); break; + case EbtUint: s.append("u"); break; + } + if (image) + s.append("image"); + else + s.append("sampler"); + switch (dim) { + case Esd1D: s.append("1D"); break; + case Esd2D: s.append("2D"); break; + case Esd3D: s.append("3D"); break; + case EsdCube: s.append("Cube"); break; + case EsdRect: s.append("Rect"); break; + case EsdBuffer: s.append("Buffer"); break; + } + if (ms) + s.append("MS"); + if (arrayed) + s.append("Array"); + if (shadow) + s.append("Shadow"); + + return s; + } }; // @@ -385,8 +417,43 @@ public: default: return "unknown type"; } } - TString getCompleteString() const; - TString getCompleteTypeString() const; + + TString TType::getCompleteString() const + { + const int maxSize = 100; + char buf[maxSize]; + char *p = &buf[0]; + char *end = &buf[maxSize]; + + if (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal) + p += snprintf(p, end - p, "%s ", getStorageQualifierString()); + if (arraySizes) { + if (arraySizes->front() == 0) + p += snprintf(p, end - p, "unsized array of "); + else + p += snprintf(p, end - p, "%d-element array of ", arraySizes->front()); + } + if (qualifier.precision != EpqNone) + p += snprintf(p, end - p, "%s ", getPrecisionQualifierString()); + if (matrixCols > 0) + p += snprintf(p, end - p, "%dX%d matrix of ", matrixCols, matrixRows); + else if (vectorSize > 1) + p += snprintf(p, end - p, "%d-component vector of ", vectorSize); + + *p = 0; + TString s(buf); + s.append(getCompleteTypeString()); + + return s; + } + + TString getCompleteTypeString() const + { + if (type == EbtSampler) + return sampler.getString(); + else + return getBasicString(type); + } const char* getBasicString() const { return TType::getBasicString(type); } const char* getStorageQualifierString() const { return ::getStorageQualifierString(qualifier.storage); } diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 7b9b981f..f15a26c8 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -315,12 +315,9 @@ public: virtual int getVectorSize() const { return type.getVectorSize(); } virtual int getMatrixCols() const { return type.getMatrixCols(); } virtual int getMatrixRows() const { return type.getMatrixRows(); } - //virtual int getSize() const { return type.getInstanceSize(); } virtual bool isMatrix() const { return type.isMatrix(); } virtual bool isArray() const { return type.isArray(); } virtual bool isVector() const { return type.isVector(); } - const char* getBasicString() const { return type.getBasicString(); } - const char* getStorageQualifierString() const { return type.getStorageQualifierString(); } TString getCompleteString() const { return type.getCompleteString(); } protected: diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 8dd4cfe5..0bdf7935 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -55,7 +55,7 @@ TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, int v, E defaultPrecision[EbtInt] = EpqHigh; defaultPrecision[EbtFloat] = EpqHigh; defaultPrecision[EbtSampler] = EpqLow; - //?? what about different sampler types? + // TODO: functionality: need default precisions per sampler type break; case EShLangFragment: defaultPrecision[EbtInt] = EpqMedium; @@ -670,7 +670,6 @@ bool TParseContext::structQualifierErrorCheck(int line, const TPublicType& pType void TParseContext::setDefaultPrecision(int line, TBasicType type, TPrecisionQualifier qualifier) { - //?? what about different sampler types? if (type == EbtSampler || type == EbtInt || type == EbtFloat) { defaultPrecision[type] = qualifier; } else { diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index e004b80e..b7b81095 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -55,69 +55,6 @@ public: TInfoSink& infoSink; }; -TString TType::getCompleteTypeString() const -{ - TString s; - - if (type == EbtSampler) { - switch (sampler.type) { - case EbtFloat: break; - case EbtInt: s.append("i"); break; - case EbtUint: s.append("u"); break; - } - if (sampler.image) - s.append("image"); - else - s.append("sampler"); - switch (sampler.dim) { - case Esd1D: s.append("1D"); break; - case Esd2D: s.append("2D"); break; - case Esd3D: s.append("3D"); break; - case EsdCube: s.append("Cube"); break; - case EsdRect: s.append("Rect"); break; - case EsdBuffer: s.append("Buffer"); break; - } - if (sampler.arrayed) - s.append("Array"); - if (sampler.shadow) - s.append("Shadow"); - if (sampler.ms) - s.append("MS"); - } else - s.append(getBasicString()); - - return s; -} - -TString TType::getCompleteString() const -{ - const int maxSize = 100; - char buf[maxSize]; - char *p = &buf[0]; - char *end = &buf[maxSize]; - - if (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal) - p += snprintf(p, end - p, "%s ", getStorageQualifierString()); - if (arraySizes) { - if (arraySizes->front() == 0) - p += snprintf(p, end - p, "unsized array of "); - else - p += snprintf(p, end - p, "%d-element array of ", arraySizes->front()); - } - if (qualifier.precision != EpqNone) - p += snprintf(p, end - p, "%s ", getPrecisionQualifierString()); - if (matrixCols > 0) - p += snprintf(p, end - p, "%dX%d matrix of ", matrixCols, matrixRows); - else if (vectorSize > 1) - p += snprintf(p, end - p, "%d-component vector of ", vectorSize); - - *p = 0; - TString s(buf); - s.append(getCompleteTypeString()); - - return s; -} - // // Helper functions for printing, not part of traversing. //