1 // 2 // Copyright 2016 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 // TextureFunctionHLSL: Class for writing implementations of ESSL texture functions into HLSL 7 // output. Some of the implementations are straightforward and just call the HLSL equivalent of the 8 // ESSL texture function, others do more work to emulate ESSL texture sampling or size query 9 // behavior. 10 // 11 12 #ifndef COMPILER_TRANSLATOR_TEXTUREFUNCTIONHLSL_H_ 13 #define COMPILER_TRANSLATOR_TEXTUREFUNCTIONHLSL_H_ 14 15 #include <set> 16 17 #include "GLSLANG/ShaderLang.h" 18 #include "compiler/translator/BaseTypes.h" 19 #include "compiler/translator/Common.h" 20 #include "compiler/translator/InfoSink.h" 21 22 namespace sh 23 { 24 25 class TextureFunctionHLSL final : angle::NonCopyable 26 { 27 public: 28 struct TextureFunction 29 { 30 // See ESSL 3.00.6 section 8.8 for reference about what the different methods below do. 31 enum Method 32 { 33 IMPLICIT, // Mipmap LOD determined implicitly (standard lookup) 34 BIAS, 35 LOD, 36 LOD0, 37 LOD0BIAS, 38 SIZE, // textureSize() 39 FETCH, 40 GRAD, 41 GATHER 42 }; 43 44 ImmutableString name() const; 45 46 bool operator<(const TextureFunction &rhs) const; 47 48 const char *getReturnType() const; 49 50 TBasicType sampler; 51 int coords; 52 bool proj; 53 bool offset; 54 Method method; 55 }; 56 57 // Returns the name of the texture function implementation to call. 58 // The name that's passed in is the name of the GLSL texture function that it should implement. 59 ImmutableString useTextureFunction(const ImmutableString &name, 60 TBasicType samplerType, 61 int coords, 62 size_t argumentCount, 63 bool lod0, 64 sh::GLenum shaderType); 65 66 void textureFunctionHeader(TInfoSinkBase &out, 67 const ShShaderOutput outputType, 68 bool getDimensionsIgnoresBaseLevel); 69 70 private: 71 typedef std::set<TextureFunction> TextureFunctionSet; 72 TextureFunctionSet mUsesTexture; 73 }; 74 75 } // namespace sh 76 77 #endif // COMPILER_TRANSLATOR_TEXTUREFUNCTIONHLSL_H_ 78