1 // 2 // Copyright (c) 2014 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 // UtilsHLSL.h: 7 // Utility methods for GLSL to HLSL translation. 8 // 9 10 #ifndef COMPILER_TRANSLATOR_UTILSHLSL_H_ 11 #define COMPILER_TRANSLATOR_UTILSHLSL_H_ 12 13 #include <vector> 14 #include "compiler/translator/IntermNode.h" 15 #include "compiler/translator/Types.h" 16 17 #include "angle_gl.h" 18 19 class TName; 20 21 namespace sh 22 { 23 24 // HLSL Texture type for GLSL sampler type and readonly image type. 25 enum HLSLTextureGroup 26 { 27 // read resources 28 HLSL_TEXTURE_2D, 29 HLSL_TEXTURE_MIN = HLSL_TEXTURE_2D, 30 31 HLSL_TEXTURE_CUBE, 32 HLSL_TEXTURE_2D_ARRAY, 33 HLSL_TEXTURE_3D, 34 HLSL_TEXTURE_2D_UNORM, 35 HLSL_TEXTURE_CUBE_UNORM, 36 HLSL_TEXTURE_2D_ARRAY_UNORN, 37 HLSL_TEXTURE_3D_UNORM, 38 HLSL_TEXTURE_2D_SNORM, 39 HLSL_TEXTURE_CUBE_SNORM, 40 HLSL_TEXTURE_2D_ARRAY_SNORM, 41 HLSL_TEXTURE_3D_SNORM, 42 HLSL_TEXTURE_2D_MS, 43 HLSL_TEXTURE_2D_INT4, 44 HLSL_TEXTURE_3D_INT4, 45 HLSL_TEXTURE_2D_ARRAY_INT4, 46 HLSL_TEXTURE_2D_MS_INT4, 47 HLSL_TEXTURE_2D_UINT4, 48 HLSL_TEXTURE_3D_UINT4, 49 HLSL_TEXTURE_2D_ARRAY_UINT4, 50 HLSL_TEXTURE_2D_MS_UINT4, 51 52 // Comparison samplers 53 54 HLSL_TEXTURE_2D_COMPARISON, 55 HLSL_TEXTURE_CUBE_COMPARISON, 56 HLSL_TEXTURE_2D_ARRAY_COMPARISON, 57 58 HLSL_COMPARISON_SAMPLER_GROUP_BEGIN = HLSL_TEXTURE_2D_COMPARISON, 59 HLSL_COMPARISON_SAMPLER_GROUP_END = HLSL_TEXTURE_2D_ARRAY_COMPARISON, 60 61 HLSL_TEXTURE_UNKNOWN, 62 HLSL_TEXTURE_MAX = HLSL_TEXTURE_UNKNOWN 63 }; 64 65 // HLSL RWTexture type for GLSL read and write image type. 66 enum HLSLRWTextureGroup 67 { 68 // read/write resource 69 HLSL_RWTEXTURE_2D_FLOAT4, 70 HLSL_RWTEXTURE_MIN = HLSL_RWTEXTURE_2D_FLOAT4, 71 HLSL_RWTEXTURE_2D_ARRAY_FLOAT4, 72 HLSL_RWTEXTURE_3D_FLOAT4, 73 HLSL_RWTEXTURE_2D_UNORM, 74 HLSL_RWTEXTURE_2D_ARRAY_UNORN, 75 HLSL_RWTEXTURE_3D_UNORM, 76 HLSL_RWTEXTURE_2D_SNORM, 77 HLSL_RWTEXTURE_2D_ARRAY_SNORM, 78 HLSL_RWTEXTURE_3D_SNORM, 79 HLSL_RWTEXTURE_2D_UINT4, 80 HLSL_RWTEXTURE_2D_ARRAY_UINT4, 81 HLSL_RWTEXTURE_3D_UINT4, 82 HLSL_RWTEXTURE_2D_INT4, 83 HLSL_RWTEXTURE_2D_ARRAY_INT4, 84 HLSL_RWTEXTURE_3D_INT4, 85 86 HLSL_RWTEXTURE_UNKNOWN, 87 HLSL_RWTEXTURE_MAX = HLSL_RWTEXTURE_UNKNOWN 88 }; 89 90 HLSLTextureGroup TextureGroup(const TBasicType type, 91 TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified); 92 TString TextureString(const HLSLTextureGroup textureGroup); 93 TString TextureString(const TBasicType type, 94 TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified); 95 TString TextureGroupSuffix(const HLSLTextureGroup type); 96 TString TextureGroupSuffix(const TBasicType type, 97 TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified); 98 TString TextureTypeSuffix(const TBasicType type, 99 TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified); 100 HLSLRWTextureGroup RWTextureGroup(const TBasicType type, 101 TLayoutImageInternalFormat imageInternalFormat); 102 TString RWTextureString(const HLSLRWTextureGroup textureGroup); 103 TString RWTextureString(const TBasicType type, TLayoutImageInternalFormat imageInternalFormat); 104 TString RWTextureGroupSuffix(const HLSLRWTextureGroup type); 105 TString RWTextureGroupSuffix(const TBasicType type, TLayoutImageInternalFormat imageInternalFormat); 106 TString RWTextureTypeSuffix(const TBasicType type, TLayoutImageInternalFormat imageInternalFormat); 107 108 TString SamplerString(const TBasicType type); 109 TString SamplerString(HLSLTextureGroup type); 110 111 // Adds a prefix to user-defined names to avoid naming clashes. 112 TString Decorate(const TString &string); 113 TString DecorateVariableIfNeeded(const TName &name); 114 TString DecorateFunctionIfNeeded(const TName &name); 115 TString DecorateField(const TString &string, const TStructure &structure); 116 TString DecoratePrivate(const TString &privateText); 117 TString TypeString(const TType &type); 118 TString StructNameString(const TStructure &structure); 119 TString QualifiedStructNameString(const TStructure &structure, 120 bool useHLSLRowMajorPacking, 121 bool useStd140Packing); 122 TString InterpolationString(TQualifier qualifier); 123 TString QualifierString(TQualifier qualifier); 124 // Parameters may need to be included in function names to disambiguate between overloaded 125 // functions. 126 TString DisambiguateFunctionName(const TIntermSequence *parameters); 127 } 128 129 #endif // COMPILER_TRANSLATOR_UTILSHLSL_H_ 130