From 2fde45a1ebeeb2c85fe5291c2465b7aeb9562be9 Mon Sep 17 00:00:00 2001 From: John Kessenich <cepheus@frii.com> Date: Tue, 26 May 2015 01:36:50 +0000 Subject: [PATCH] Requesting input on Bug 1346: checking in, turned off, enum-based operators for texturing and image operations. Please reply there with any input, thanks. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@31289 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- glslang/Include/intermediate.h | 46 ++++++++++++++++ glslang/MachineIndependent/Initialize.cpp | 64 +++++++++++++++++++++++ glslang/MachineIndependent/intermOut.cpp | 35 +++++++++++++ 3 files changed, 145 insertions(+) diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 46d5085ce..e488d7d4e 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -328,6 +328,52 @@ enum TOperator { // EOpArrayLength, // "Array" distinguishes from length(v) built-in function, but it applies to vectors and matrices as well. + + // + // Image operations + // + + // N.B. The following is not being used yet, pending input, as switching + // to it from the current text-based approach will break existing consumers. + + EImageQuerySize, + EImageQuerySamples, + EImageLoad, + EImageStore, + EImageAtomicAdd, + EImageAtomicMin, + EImageAtomicMax, + EImageAtomicAnd, + EImageAtomicOr, + EImageAtomicXor, + EImageAtomicExchange, + EImageAtomicCompSwap, + + // + // Texture operations + // + + ETextureQuerySize, + ETextureQueryLod, + ETextureQueryLevels, + ETextureQuerySamples, + ETexture, + ETextureProj, + ETextureLod, + ETextureOffset, + ETextureFetch, + ETextureFetchOffset, + ETextureProjOffset, + ETextureLodOffset, + ETextureProjLod, + ETextureProjLodOffset, + ETextureGrad, + ETextureGradOffset, + ETextureProjGrad, + ETextureProjGradOffset, + ETextureGather, + ETextureGatherOffset, + ETextureGatherOffsets, }; class TIntermTraverser; diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 225493654..f72de8acb 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -57,6 +57,7 @@ namespace glslang { bool ARBCompatibility = true; const bool ForwardCompatibility = false; +const bool PureOperatorBuiltins = false; // could break backward compatibility; pending feedback inline bool IncludeLegacy(int version, EProfile profile) { @@ -2965,6 +2966,69 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb symbolTable.relateToOperator("memoryBarrierBuffer", EOpMemoryBarrierBuffer); symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage); + if (PureOperatorBuiltins) { + symbolTable.relateToOperator("imageQuerySize", EImageQuerySize); + symbolTable.relateToOperator("imageQuerySamples", EImageQuerySamples); + symbolTable.relateToOperator("imageLoad", EImageLoad); + symbolTable.relateToOperator("imageStore", EImageStore); + symbolTable.relateToOperator("imageAtomicAdd", EImageAtomicAdd); + symbolTable.relateToOperator("imageAtomicMin", EImageAtomicMin); + symbolTable.relateToOperator("imageAtomicMax", EImageAtomicMax); + symbolTable.relateToOperator("imageAtomicAnd", EImageAtomicAnd); + symbolTable.relateToOperator("imageAtomicOr", EImageAtomicOr); + symbolTable.relateToOperator("imageAtomicXor", EImageAtomicXor); + symbolTable.relateToOperator("imageAtomicExchange", EImageAtomicExchange); + symbolTable.relateToOperator("imageAtomicCompSwap", EImageAtomicCompSwap); + + symbolTable.relateToOperator("textureSize", ETextureQuerySize); + symbolTable.relateToOperator("textureQueryLod", ETextureQueryLod); + symbolTable.relateToOperator("textureQueryLevels", ETextureQueryLevels); + symbolTable.relateToOperator("textureSamples", ETextureQuerySamples); + symbolTable.relateToOperator("texture", ETexture); + symbolTable.relateToOperator("textureProj", ETextureProj); + symbolTable.relateToOperator("textureLod", ETextureLod); + symbolTable.relateToOperator("textureOffset", ETextureOffset); + symbolTable.relateToOperator("textureFetch", ETextureFetch); + symbolTable.relateToOperator("textureFetchOffset", ETextureFetchOffset); + symbolTable.relateToOperator("textureProjOffset", ETextureProjOffset); + symbolTable.relateToOperator("textureLodOffset", ETextureLodOffset); + symbolTable.relateToOperator("textureProjLod", ETextureProjLod); + symbolTable.relateToOperator("textureProjLodOffset", ETextureProjLodOffset); + symbolTable.relateToOperator("textureGrad", ETextureGrad); + symbolTable.relateToOperator("textureGradOffset", ETextureGradOffset); + symbolTable.relateToOperator("textureProjGrad", ETextureProjGrad); + symbolTable.relateToOperator("textureProjGradOffset", ETextureProjGradOffset); + symbolTable.relateToOperator("textureGather", ETextureGather); + symbolTable.relateToOperator("textureGatherOffset", ETextureGatherOffset); + symbolTable.relateToOperator("textureGatherOffsets", ETextureGatherOffsets); + + if (IncludeLegacy(version, profile)) { + // TBD: add ftransform(), any others? + symbolTable.relateToOperator("texture1D", ETexture); + symbolTable.relateToOperator("texture1DProj", ETextureProj); + symbolTable.relateToOperator("texture1DLod", ETextureLod); + symbolTable.relateToOperator("texture1DProjLod", ETextureProjLod); + symbolTable.relateToOperator("texture2D", ETexture); + symbolTable.relateToOperator("texture2DProj", ETextureProj); + symbolTable.relateToOperator("texture2DLod", ETextureLod); + symbolTable.relateToOperator("texture2DProjLod", ETextureProjLod); + symbolTable.relateToOperator("texture3D", ETexture); + symbolTable.relateToOperator("texture3DProj", ETextureProj); + symbolTable.relateToOperator("texture3DLod", ETextureLod); + symbolTable.relateToOperator("texture3DProjLod", ETextureProjLod); + symbolTable.relateToOperator("textureCube", ETexture); + symbolTable.relateToOperator("textureCubeLod", ETextureLod); + symbolTable.relateToOperator("shadow1D", ETexture); + symbolTable.relateToOperator("shadow2D", ETexture); + symbolTable.relateToOperator("shadow1DProj", ETextureProj); + symbolTable.relateToOperator("shadow2DProj", ETextureProj); + symbolTable.relateToOperator("shadow1DLod", ETextureLod); + symbolTable.relateToOperator("shadow2DLod", ETextureLod); + symbolTable.relateToOperator("shadow1DProjLod", ETextureProjLod); + symbolTable.relateToOperator("shadow2DProjLod", ETextureProjLod); + } + } + switch(language) { case EShLangVertex: break; diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index c78443ae1..8bccbd6a7 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -395,6 +395,41 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpMemoryBarrierShared: out.debug << "MemoryBarrierShared"; break; case EOpGroupMemoryBarrier: out.debug << "GroupMemoryBarrier"; break; + case EImageQuerySize: out.debug << "imageQuerySize"; break; + case EImageQuerySamples: out.debug << "imageQuerySamples"; break; + case EImageLoad: out.debug << "imageLoad"; break; + case EImageStore: out.debug << "imageStore"; break; + case EImageAtomicAdd: out.debug << "imageAtomicAdd"; break; + case EImageAtomicMin: out.debug << "imageAtomicMin"; break; + case EImageAtomicMax: out.debug << "imageAtomicMax"; break; + case EImageAtomicAnd: out.debug << "imageAtomicAnd"; break; + case EImageAtomicOr: out.debug << "imageAtomicOr"; break; + case EImageAtomicXor: out.debug << "imageAtomicXor"; break; + case EImageAtomicExchange: out.debug << "imageAtomicExchange"; break; + case EImageAtomicCompSwap: out.debug << "imageAtomicCompSwap"; break; + + case ETextureQuerySize: out.debug << "textureSize"; break; + case ETextureQueryLod: out.debug << "textureQueryLod"; break; + case ETextureQueryLevels: out.debug << "textureQueryLevels"; break; + case ETextureQuerySamples: out.debug << "textureSamples"; break; + case ETexture: out.debug << "texture"; break; + case ETextureProj: out.debug << "textureProj"; break; + case ETextureLod: out.debug << "textureLod"; break; + case ETextureOffset: out.debug << "textureOffset"; break; + case ETextureFetch: out.debug << "textureFetch"; break; + case ETextureFetchOffset: out.debug << "textureFetchOffset"; break; + case ETextureProjOffset: out.debug << "textureProjOffset"; break; + case ETextureLodOffset: out.debug << "textureLodOffset"; break; + case ETextureProjLod: out.debug << "textureProjLod"; break; + case ETextureProjLodOffset: out.debug << "textureProjLodOffset"; break; + case ETextureGrad: out.debug << "textureGrad"; break; + case ETextureGradOffset: out.debug << "textureGradOffset"; break; + case ETextureProjGrad: out.debug << "textureProjGrad"; break; + case ETextureProjGradOffset: out.debug << "textureProjGradOffset"; break; + case ETextureGather: out.debug << "textureGather"; break; + case ETextureGatherOffset: out.debug << "textureGatherOffset"; break; + case ETextureGatherOffsets: out.debug << "textureGatherOffsets"; break; + default: out.debug.message(EPrefixError, "Bad aggregation op"); } -- GitLab