xref: /aosp_15_r20/external/angle/src/compiler/translator/hlsl/UtilsHLSL.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 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_HLSL_UTILSHLSL_H_
11 #define COMPILER_TRANSLATOR_HLSL_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 namespace sh
20 {
21 
22 class TFunction;
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_MS_ARRAY,
44     HLSL_TEXTURE_2D_INT4,
45     HLSL_TEXTURE_3D_INT4,
46     HLSL_TEXTURE_2D_ARRAY_INT4,
47     HLSL_TEXTURE_2D_MS_INT4,
48     HLSL_TEXTURE_2D_MS_ARRAY_INT4,
49     HLSL_TEXTURE_2D_UINT4,
50     HLSL_TEXTURE_3D_UINT4,
51     HLSL_TEXTURE_2D_ARRAY_UINT4,
52     HLSL_TEXTURE_2D_MS_UINT4,
53     HLSL_TEXTURE_2D_MS_ARRAY_UINT4,
54 
55     HLSL_TEXTURE_BUFFER,
56     HLSL_TEXTURE_BUFFER_UNORM,
57     HLSL_TEXTURE_BUFFER_SNORM,
58     HLSL_TEXTURE_BUFFER_UINT4,
59     HLSL_TEXTURE_BUFFER_INT4,
60 
61     // Comparison samplers
62 
63     HLSL_TEXTURE_2D_COMPARISON,
64     HLSL_TEXTURE_CUBE_COMPARISON,
65     HLSL_TEXTURE_2D_ARRAY_COMPARISON,
66 
67     HLSL_COMPARISON_SAMPLER_GROUP_BEGIN = HLSL_TEXTURE_2D_COMPARISON,
68     HLSL_COMPARISON_SAMPLER_GROUP_END   = HLSL_TEXTURE_2D_ARRAY_COMPARISON,
69 
70     HLSL_TEXTURE_UNKNOWN,
71     HLSL_TEXTURE_MAX = HLSL_TEXTURE_UNKNOWN
72 };
73 
74 // HLSL RWTexture type for GLSL read and write image type.
75 enum HLSLRWTextureGroup
76 {
77     // read/write resource
78     HLSL_RWTEXTURE_2D_FLOAT4,
79     HLSL_RWTEXTURE_MIN = HLSL_RWTEXTURE_2D_FLOAT4,
80     HLSL_RWTEXTURE_2D_ARRAY_FLOAT4,
81     HLSL_RWTEXTURE_3D_FLOAT4,
82     HLSL_RWTEXTURE_2D_UNORM,
83     HLSL_RWTEXTURE_2D_ARRAY_UNORN,
84     HLSL_RWTEXTURE_3D_UNORM,
85     HLSL_RWTEXTURE_2D_SNORM,
86     HLSL_RWTEXTURE_2D_ARRAY_SNORM,
87     HLSL_RWTEXTURE_3D_SNORM,
88     HLSL_RWTEXTURE_2D_UINT4,
89     HLSL_RWTEXTURE_2D_ARRAY_UINT4,
90     HLSL_RWTEXTURE_3D_UINT4,
91     HLSL_RWTEXTURE_2D_INT4,
92     HLSL_RWTEXTURE_2D_ARRAY_INT4,
93     HLSL_RWTEXTURE_3D_INT4,
94 
95     HLSL_RWTEXTURE_BUFFER_FLOAT4,
96     HLSL_RWTEXTURE_BUFFER_UNORM,
97     HLSL_RWTEXTURE_BUFFER_SNORM,
98     HLSL_RWTEXTURE_BUFFER_UINT4,
99     HLSL_RWTEXTURE_BUFFER_INT4,
100 
101     HLSL_RWTEXTURE_UNKNOWN,
102     HLSL_RWTEXTURE_MAX = HLSL_RWTEXTURE_UNKNOWN
103 };
104 
105 HLSLTextureGroup TextureGroup(const TBasicType type,
106                               TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
107 const char *TextureString(const HLSLTextureGroup textureGroup);
108 const char *TextureString(const TBasicType type,
109                           TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
110 const char *TextureGroupSuffix(const HLSLTextureGroup type);
111 const char *TextureGroupSuffix(const TBasicType type,
112                                TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
113 const char *TextureTypeSuffix(const TBasicType type,
114                               TLayoutImageInternalFormat imageInternalFormat = EiifUnspecified);
115 HLSLRWTextureGroup RWTextureGroup(const TBasicType type,
116                                   TLayoutImageInternalFormat imageInternalFormat);
117 const char *RWTextureString(const HLSLRWTextureGroup textureGroup);
118 const char *RWTextureString(const TBasicType type, TLayoutImageInternalFormat imageInternalFormat);
119 const char *RWTextureGroupSuffix(const HLSLRWTextureGroup type);
120 const char *RWTextureGroupSuffix(const TBasicType type,
121                                  TLayoutImageInternalFormat imageInternalFormat);
122 const char *RWTextureTypeSuffix(const TBasicType type,
123                                 TLayoutImageInternalFormat imageInternalFormat);
124 
125 const char *SamplerString(const TBasicType type);
126 const char *SamplerString(HLSLTextureGroup type);
127 
128 // Adds a prefix to user-defined names to avoid naming clashes.
129 TString Decorate(const ImmutableString &string);
130 TString DecorateVariableIfNeeded(const TVariable &variable);
131 TString DecorateFunctionIfNeeded(const TFunction *func);
132 TString DecorateField(const ImmutableString &string, const TStructure &structure);
133 TString DecoratePrivate(const ImmutableString &privateText);
134 TString TypeString(const TType &type);
135 TString StructNameString(const TStructure &structure);
136 TString QualifiedStructNameString(const TStructure &structure,
137                                   bool useHLSLRowMajorPacking,
138                                   bool useStd140Packing,
139                                   bool forcePackingEnd);
140 const char *InterpolationString(TQualifier qualifier);
141 const char *QualifierString(TQualifier qualifier);
142 // Parameters may need to be included in function names to disambiguate between overloaded
143 // functions.
144 TString DisambiguateFunctionName(const TFunction *func);
145 TString DisambiguateFunctionName(const TIntermSequence *args);
146 }  // namespace sh
147 
148 #endif  // COMPILER_TRANSLATOR_HLSL_UTILSHLSL_H_
149