diff options
Diffstat (limited to 'gfx/angle/src/compiler/translator/BaseTypes.h')
-rwxr-xr-x | gfx/angle/src/compiler/translator/BaseTypes.h | 299 |
1 files changed, 26 insertions, 273 deletions
diff --git a/gfx/angle/src/compiler/translator/BaseTypes.h b/gfx/angle/src/compiler/translator/BaseTypes.h index e050c88da..72ecb50f4 100755 --- a/gfx/angle/src/compiler/translator/BaseTypes.h +++ b/gfx/angle/src/compiler/translator/BaseTypes.h @@ -13,9 +13,6 @@ #include "common/debug.h" #include "GLSLANG/ShaderLang.h" -namespace sh -{ - // // Precision qualifiers // @@ -35,10 +32,10 @@ inline const char* getPrecisionString(TPrecision p) { switch(p) { - case EbpHigh: return "highp"; - case EbpMedium: return "mediump"; - case EbpLow: return "lowp"; - default: return "mediump"; // Safest fallback + case EbpHigh: return "highp"; break; + case EbpMedium: return "mediump"; break; + case EbpLow: return "lowp"; break; + default: return "mediump"; break; // Safest fallback } } @@ -79,98 +76,19 @@ enum TBasicType EbtSampler2DShadow, EbtSamplerCubeShadow, EbtSampler2DArrayShadow, - EbtGuardSamplerEnd, // non type: see implementation of IsSampler() - EbtGSampler2D, // non type: represents sampler2D, isampler2D, and usampler2D - EbtGSampler3D, // non type: represents sampler3D, isampler3D, and usampler3D - EbtGSamplerCube, // non type: represents samplerCube, isamplerCube, and usamplerCube - EbtGSampler2DArray, // non type: represents sampler2DArray, isampler2DArray, and - // usampler2DArray - - // images - EbtGuardImageBegin, - EbtImage2D, - EbtIImage2D, - EbtUImage2D, - EbtImage3D, - EbtIImage3D, - EbtUImage3D, - EbtImage2DArray, - EbtIImage2DArray, - EbtUImage2DArray, - EbtImageCube, - EbtIImageCube, - EbtUImageCube, - EbtGuardImageEnd, - - EbtGuardGImageBegin, - EbtGImage2D, // non type: represents image2D, uimage2D, iimage2D - EbtGImage3D, // non type: represents image3D, uimage3D, iimage3D - EbtGImage2DArray, // non type: represents image2DArray, uimage2DArray, iimage2DArray - EbtGImageCube, // non type: represents imageCube, uimageCube, iimageCube - EbtGuardGImageEnd, - + EbtGuardSamplerEnd, // non type: see implementation of IsSampler() + EbtGSampler2D, // non type: represents sampler2D, isampler2D, and usampler2D + EbtGSampler3D, // non type: represents sampler3D, isampler3D, and usampler3D + EbtGSamplerCube, // non type: represents samplerCube, isamplerCube, and usamplerCube + EbtGSampler2DArray, // non type: represents sampler2DArray, isampler2DArray, and usampler2DArray EbtStruct, EbtInterfaceBlock, - EbtAddress, // should be deprecated?? + EbtAddress, // should be deprecated?? // end of list EbtLast }; -inline TBasicType convertGImageToFloatImage(TBasicType type) -{ - switch (type) - { - case EbtGImage2D: - return EbtImage2D; - case EbtGImage3D: - return EbtImage3D; - case EbtGImage2DArray: - return EbtImage2DArray; - case EbtGImageCube: - return EbtImageCube; - default: - UNREACHABLE(); - } - return EbtLast; -} - -inline TBasicType convertGImageToIntImage(TBasicType type) -{ - switch (type) - { - case EbtGImage2D: - return EbtIImage2D; - case EbtGImage3D: - return EbtIImage3D; - case EbtGImage2DArray: - return EbtIImage2DArray; - case EbtGImageCube: - return EbtIImageCube; - default: - UNREACHABLE(); - } - return EbtLast; -} - -inline TBasicType convertGImageToUnsignedImage(TBasicType type) -{ - switch (type) - { - case EbtGImage2D: - return EbtUImage2D; - case EbtGImage3D: - return EbtUImage3D; - case EbtGImage2DArray: - return EbtUImage2DArray; - case EbtGImageCube: - return EbtUImageCube; - default: - UNREACHABLE(); - } - return EbtLast; -} - const char* getBasicString(TBasicType t); inline bool IsSampler(TBasicType type) @@ -178,22 +96,6 @@ inline bool IsSampler(TBasicType type) return type > EbtGuardSamplerBegin && type < EbtGuardSamplerEnd; } -inline bool IsImage(TBasicType type) -{ - return type > EbtGuardImageBegin && type < EbtGuardImageEnd; -} - -inline bool IsGImage(TBasicType type) -{ - return type > EbtGuardGImageBegin && type < EbtGuardGImageEnd; -} - -inline bool IsOpaqueType(TBasicType type) -{ - // TODO (mradev): add atomic types as opaque. - return IsSampler(type) || IsImage(type); -} - inline bool IsIntegerSampler(TBasicType type) { switch (type) @@ -224,56 +126,6 @@ inline bool IsIntegerSampler(TBasicType type) return false; } -inline bool IsFloatImage(TBasicType type) -{ - switch (type) - { - case EbtImage2D: - case EbtImage3D: - case EbtImage2DArray: - case EbtImageCube: - return true; - default: - break; - } - - return false; -} - -inline bool IsIntegerImage(TBasicType type) -{ - - switch (type) - { - case EbtIImage2D: - case EbtIImage3D: - case EbtIImage2DArray: - case EbtIImageCube: - return true; - default: - break; - } - - return false; -} - -inline bool IsUnsignedImage(TBasicType type) -{ - - switch (type) - { - case EbtUImage2D: - case EbtUImage3D: - case EbtUImage2DArray: - case EbtUImageCube: - return true; - default: - break; - } - - return false; -} - inline bool IsSampler2D(TBasicType type) { switch (type) @@ -431,7 +283,7 @@ inline bool IsInteger(TBasicType type) inline bool SupportsPrecision(TBasicType type) { - return type == EbtFloat || type == EbtInt || type == EbtUInt || IsOpaqueType(type); + return type == EbtFloat || type == EbtInt || type == EbtUInt || IsSampler(type); } // @@ -489,11 +341,10 @@ enum TQualifier EvqLastFragData, // GLSL ES 3.0 vertex output and fragment input - EvqSmooth, // Incomplete qualifier, smooth is the default - EvqFlat, // Incomplete qualifier - EvqCentroid, // Incomplete qualifier - EvqSmoothOut, - EvqFlatOut, + EvqSmooth, // Incomplete qualifier, smooth is the default + EvqFlat, // Incomplete qualifier + EvqSmoothOut = EvqSmooth, + EvqFlatOut = EvqFlat, EvqCentroidOut, // Implies smooth EvqSmoothIn, EvqFlatIn, @@ -508,40 +359,10 @@ enum TQualifier EvqGlobalInvocationID, EvqLocalInvocationIndex, - // GLSL ES 3.1 memory qualifiers - EvqReadOnly, - EvqWriteOnly, - EvqCoherent, - EvqRestrict, - EvqVolatile, - // end of list EvqLast }; -inline bool IsQualifierUnspecified(TQualifier qualifier) -{ - return (qualifier == EvqTemporary || qualifier == EvqGlobal); -} - -enum TLayoutImageInternalFormat -{ - EiifUnspecified, - EiifRGBA32F, - EiifRGBA16F, - EiifR32F, - EiifRGBA32UI, - EiifRGBA16UI, - EiifRGBA8UI, - EiifR32UI, - EiifRGBA32I, - EiifRGBA16I, - EiifRGBA8I, - EiifR32I, - EiifRGBA8, - EiifRGBA8_SNORM -}; - enum TLayoutMatrixPacking { EmpUnspecified, @@ -560,44 +381,36 @@ enum TLayoutBlockStorage struct TLayoutQualifier { int location; - unsigned int locationsSpecified; TLayoutMatrixPacking matrixPacking; TLayoutBlockStorage blockStorage; // Compute shader layout qualifiers. sh::WorkGroupSize localSize; - // Image format layout qualifier - TLayoutImageInternalFormat imageInternalFormat; - static TLayoutQualifier create() { TLayoutQualifier layoutQualifier; layoutQualifier.location = -1; - layoutQualifier.locationsSpecified = 0; layoutQualifier.matrixPacking = EmpUnspecified; layoutQualifier.blockStorage = EbsUnspecified; layoutQualifier.localSize.fill(-1); - layoutQualifier.imageInternalFormat = EiifUnspecified; return layoutQualifier; } bool isEmpty() const { return location == -1 && matrixPacking == EmpUnspecified && - blockStorage == EbsUnspecified && !localSize.isAnyValueSet() && - imageInternalFormat == EiifUnspecified; + blockStorage == EbsUnspecified && !localSize.isAnyValueSet(); } bool isCombinationValid() const { bool workSizeSpecified = localSize.isAnyValueSet(); bool otherLayoutQualifiersSpecified = - (location != -1 || matrixPacking != EmpUnspecified || blockStorage != EbsUnspecified || - imageInternalFormat != EiifUnspecified); + (location != -1 || matrixPacking != EmpUnspecified || blockStorage != EbsUnspecified); // we can have either the work group size specified, or the other layout qualifiers return !(workSizeSpecified && otherLayoutQualifiersSpecified); @@ -609,37 +422,6 @@ struct TLayoutQualifier } }; -struct TMemoryQualifier -{ - // GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers - // An image can be qualified as both readonly and writeonly. It still can be can be used with - // imageSize(). - bool readonly; - bool writeonly; - bool coherent; - - // restrict and volatile are reserved keywords in C/C++ - bool restrictQualifier; - bool volatileQualifier; - static TMemoryQualifier create() - { - TMemoryQualifier memoryQualifier; - - memoryQualifier.readonly = false; - memoryQualifier.writeonly = false; - memoryQualifier.coherent = false; - memoryQualifier.restrictQualifier = false; - memoryQualifier.volatileQualifier = false; - - return memoryQualifier; - } - - bool isEmpty() - { - return !readonly && !writeonly && !coherent && !restrictQualifier && !volatileQualifier; - } -}; - inline const char *getWorkGroupSizeString(size_t dimension) { switch (dimension) @@ -700,9 +482,6 @@ inline const char* getQualifierString(TQualifier q) case EvqSmoothIn: return "smooth in"; case EvqFlatIn: return "flat in"; case EvqCentroidIn: return "smooth centroid in"; - case EvqCentroid: return "centroid"; - case EvqFlat: return "flat"; - case EvqSmooth: return "smooth"; case EvqComputeIn: return "in"; case EvqNumWorkGroups: return "NumWorkGroups"; case EvqWorkGroupSize: return "WorkGroupSize"; @@ -710,8 +489,6 @@ inline const char* getQualifierString(TQualifier q) case EvqLocalInvocationID: return "LocalInvocationID"; case EvqGlobalInvocationID: return "GlobalInvocationID"; case EvqLocalInvocationIndex: return "LocalInvocationIndex"; - case EvqReadOnly: return "readonly"; - case EvqWriteOnly: return "writeonly"; default: UNREACHABLE(); return "unknown qualifier"; } // clang-format on @@ -740,42 +517,18 @@ inline const char* getBlockStorageString(TLayoutBlockStorage bsq) } } -inline const char *getImageInternalFormatString(TLayoutImageInternalFormat iifq) +inline const char* getInterpolationString(TQualifier q) { - switch (iifq) + switch(q) { - case EiifRGBA32F: - return "rgba32f"; - case EiifRGBA16F: - return "rgba16f"; - case EiifR32F: - return "r32f"; - case EiifRGBA32UI: - return "rgba32ui"; - case EiifRGBA16UI: - return "rgba16ui"; - case EiifRGBA8UI: - return "rgba8ui"; - case EiifR32UI: - return "r32ui"; - case EiifRGBA32I: - return "rgba32i"; - case EiifRGBA16I: - return "rgba16i"; - case EiifRGBA8I: - return "rgba8i"; - case EiifR32I: - return "r32i"; - case EiifRGBA8: - return "rgba8"; - case EiifRGBA8_SNORM: - return "rgba8_snorm"; - default: - UNREACHABLE(); - return "unknown internal image format"; + case EvqSmoothOut: return "smooth"; break; + case EvqCentroidOut: return "smooth centroid"; break; + case EvqFlatOut: return "flat"; break; + case EvqSmoothIn: return "smooth"; break; + case EvqCentroidIn: return "smooth centroid"; break; + case EvqFlatIn: return "flat"; break; + default: UNREACHABLE(); return "unknown interpolation"; } } -} // namespace sh - #endif // COMPILER_TRANSLATOR_BASETYPES_H_ |