1 module aurora.directx.d3d12.d3d12shader;
2 
3 public import aurora.directx.com;
4 public import aurora.directx.d3d.d3dcommon;
5 
6 public:
7 
8 ///
9 /// Constants
10 ///
11 
12 alias D3D_RESOURCE_RETURN_TYPE D3D12_RESOURCE_RETURN_TYPE;
13 alias D3D_CBUFFER_TYPE D3D12_CBUFFER_TYPE;
14 alias D3D_TESSELLATOR_DOMAIN D3D12_TESSELLATOR_DOMAIN;
15 alias D3D_TESSELLATOR_PARTITIONING D3D12_TESSELLATOR_PARTITIONING;
16 alias D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D12_TESSELLATOR_OUTPUT_PRIMITIVE;
17 
18 enum uint D3D_SHADER_REQUIRES_DOUBLES = 0x00000001;
19 enum uint D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL = 0x00000002;
20 enum uint D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE = 0x00000004;
21 enum uint D3D_SHADER_REQUIRES_64_UAVS = 0x00000008;
22 enum uint D3D_SHADER_REQUIRES_MINIMUM_PRECISION = 0x00000010;
23 enum uint D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS = 0x00000020;
24 enum uint D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS = 0x00000040;
25 enum uint D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING = 0x00000080;
26 enum uint D3D_SHADER_REQUIRES_TILED_RESOURCES = 0x00000100;
27 enum uint D3D_SHADER_REQUIRES_STENCIL_REF = 0x00000200;
28 enum uint D3D_SHADER_REQUIRES_INNER_COVERAGE = 0x00000400;
29 enum uint D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS = 0x00000800;
30 enum uint D3D_SHADER_REQUIRES_ROVS = 0x00001000;
31 enum uint D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER = 0x00002000;
32 
33 ///
34 /// Functions
35 ///
36 
37 ///
38 /// Enumerations
39 ///
40 
41 enum D3D12_SHADER_VERSION_TYPE
42 {
43     PIXEL_SHADER    = 0,
44     VERTEX_SHADER   = 1,
45     GEOMETRY_SHADER = 2,
46     HULL_SHADER     = 3,
47     DOMAIN_SHADER   = 4,
48     COMPUTE_SHADER  = 5,
49     RESERVED0       = 0xFFF0,
50 }
51 
52 ///
53 /// Structures
54 ///
55 
56 struct D3D12_SIGNATURE_PARAMETER_DESC
57 {
58     const char *SemanticName; 
59     uint SemanticIndex;
60     uint Register;
61     D3D_NAME SystemValueType;
62     D3D_REGISTER_COMPONENT_TYPE ComponentType;
63     ubyte Mask;
64     ubyte ReadWriteMask;
65     uint Stream;
66     D3D_MIN_PRECISION MinPrecision;
67 }
68 
69 struct D3D12_SHADER_BUFFER_DESC
70 {
71     const char *SemanticName; 
72     D3D_CBUFFER_TYPE Type;
73     uint Variables;
74     uint Size;
75     uint uFlags;
76 }
77 
78 struct D3D12_SHADER_VARIABLE_DESC
79 {
80     const char *SemanticName; 
81     uint StartOffset;
82     uint Size;
83     uint uFlags;
84     void *DefaultValue;
85     uint StartTexture;
86     uint TextureSize;
87     uint StartSampler;
88     uint SamplerSize;
89 }
90 
91 struct D3D12_SHADER_TYPE_DESC
92 {
93     D3D_SHADER_VARIABLE_CLASS Class;
94     D3D_SHADER_VARIABLE_TYPE Type;
95     uint Rows;
96     uint Columns;
97     uint Elements;
98     uint Members;
99     uint Offset;
100     const char *SemanticName; 
101 }
102 
103 struct D3D12_SHADER_DESC
104 {
105     uint Version;
106     const char *Creator;
107     uint Flags;
108     uint ConstantBuffers;
109     uint BoundResources;
110     uint InputParameters;
111     uint OutputParameters;
112     uint InstructionCount;
113     uint TempRegisterCount;
114     uint TempArrayCount;
115     uint DefCount;
116     uint DclCount;
117     uint TextureNormalInstructions;
118     uint TextureLoadInstructions;
119     uint TextureCompInstructions;
120     uint TextureBiasInstructions;
121     uint TextureGradientInstructions;
122     uint FloatInstructionCount;
123     uint IntInstructionCount;
124     uint UintInstructionCount;
125     uint StaticFlowControlCount;
126     uint DynamicFlowControlCount;
127     uint MacroInstructionCount;
128     uint ArrayInstructionCount;
129     uint CutInstructionCount;
130     uint EmitInstructionCount;
131     D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
132     uint GSMaxOutputVertexCount;
133     D3D_PRIMITIVE InputPrimitive;
134     uint PatchConstantParameters;
135     uint cGSInstanceCount;
136     uint cControlPoints;
137     D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;
138     D3D_TESSELLATOR_PARTITIONING HSPartitioning;
139     D3D_TESSELLATOR_DOMAIN TessellatorDomain;
140     uint cBarrierInstructions;
141     uint cInterlockedInstructions;
142     uint cTextureStoreInstructions;
143 }
144 
145 struct D3D12_SHADER_INPUT_BIND_DESC
146 {
147     const char *Name;
148     D3D_SHADER_INPUT_TYPE Type;
149     uint BindPoint;
150     uint BindCount;
151     uint uFlags;
152     D3D_RESOURCE_RETURN_TYPE ReturnType;
153     D3D_SRV_DIMENSION Dimension;
154     uint NumSamples;
155     uint Space;
156     uint uID;
157 }
158 
159 struct D3D12_LIBRARY_DESC
160 {
161     const char *Creator;
162     uint Flags;
163     uint FunctionCount;
164 }
165 
166 struct D3D12_FUNCTION_DESC
167 {
168     uint Version;
169     const char *Creator;
170     uint Flags;    
171     uint ConstantBuffers;
172     uint BoundResources;
173     uint InstructionCount;
174     uint TempRegisterCount;
175     uint TempArrayCount;
176     uint DefCount;
177     uint DclCount;
178     uint TextureNormalInstructions;
179     uint TextureLoadInstructions;
180     uint TextureCompInstructions;
181     uint TextureBiasInstructions;
182     uint TextureGradientInstructions;
183     uint FloatInstructionCount;
184     uint IntInstructionCount;
185     uint UintInstructionCount;
186     uint StaticFlowControlCount;
187     uint DynamicFlowControlCount;
188     uint MacroInstructionCount;
189     uint ArrayInstructionCount;
190     uint MovInstructionCount;
191     uint MovcInstructionCount;
192     uint ConversionInstructionCount;
193     uint BitwiseInstructionCount;
194     D3D_FEATURE_LEVEL MinFeatureLevel;
195     ulong RequiredFeatureFlags;
196     const char *Name;
197     int FunctionParameterCount;
198     bool HasReturn;
199     bool Has10Level9VertexShader;
200     bool Has10Level9PixelShader;
201 }
202 
203 struct D3D12_PARAMETER_DESC
204 {
205     const char *Name;
206     const char *SemanticName;
207     D3D_SHADER_VARIABLE_TYPE Type;
208     D3D_SHADER_VARIABLE_CLASS Class;
209     uint Rows;
210     uint Columns;
211     D3D_INTERPOLATION_MODE InterpolationMode;
212     D3D_PARAMETER_FLAGS Flags;
213     uint FirstInRegister;
214     uint FirstInComponent;
215     uint FirstOutRegister;
216     uint FirstOutComponent;
217 }
218 
219 ///
220 /// Interfaces
221 ///
222 
223 mixin(uuid!(ID3D12ShaderReflectionType, "E913C351-783D-48CA-A1D1-4F306284AD56"));
224 public interface ID3D12ShaderReflectionType : IUnknown
225 {
226 extern(Windows):
227 	ID3D12ShaderReflectionType GetBaseClass();
228     HRESULT GetDesc(D3D12_SHADER_TYPE_DESC *pDesc);
229     ID3D12ShaderReflectionType GetInterfaceByIndex(uint uIndex);
230     ID3D12ShaderReflectionType GetMemberTypeByIndex(uint Index);
231     ID3D12ShaderReflectionType GetMemberTypeByName(const char *Name);
232     const char* GetMemberTypeName(uint Index);
233     uint GetNumInterfaces();
234     ID3D12ShaderReflectionType GetSubType();
235     HRESULT ImplementsInterface(ID3D12ShaderReflectionType pBase);
236     HRESULT IsEqual(ID3D12ShaderReflectionType pType);
237     HRESULT IsOfType(ID3D12ShaderReflectionType pType);
238 }
239 
240 mixin(uuid!(ID3D12ShaderReflectionVariable, "8337A8A6-A216-444A-B2F4-314733A73AEA"));
241 public interface ID3D12ShaderReflectionVariable : IUnknown
242 {
243 extern(Windows):
244 	ID3D12ShaderReflectionConstantBuffer GetBuffer();
245     HRESULT GetDesc(D3D12_SHADER_VARIABLE_DESC *pDesc);
246     uint GetInterfaceSlot(uint uArrayIndex);
247     ID3D12ShaderReflectionType GetType();
248 }
249 
250 mixin(uuid!(ID3D12ShaderReflectionConstantBuffer, "C59598B4-48B3-4869-B9B1-B1618B14A8B7"));
251 public interface ID3D12ShaderReflectionConstantBuffer : IUnknown
252 {
253 extern(Windows):
254 	HRESULT GetDesc(D3D12_SHADER_BUFFER_DESC *pDesc);
255     ID3D12ShaderReflectionVariable GetVariableByIndex(uint Index);
256     ID3D12ShaderReflectionVariable GetVariableByName(const char *Name);
257 }
258 
259 mixin(uuid!(ID3D12ShaderReflection, "5A58797D-A72C-478D-8BA2-EFC6B0EFE88E"));
260 public interface ID3D12ShaderReflection : IUnknown
261 {
262 extern(Windows):
263 	uint GetBitwiseInstructionCount();
264     ID3D12ShaderReflectionConstantBuffer GetConstantBufferByIndex(uint Index);
265     ID3D12ShaderReflectionConstantBuffer GetConstantBufferByName(const char *Name);
266     uint GetConversionInstructionCount();
267     HRESULT GetDesc(D3D12_SHADER_DESC *pDesc);
268     D3D_PRIMITIVE GetGSInputPrimitive();
269     HRESULT GetMinFeatureLevel(D3D_FEATURE_LEVEL *pLevel);
270     uint GetMovcInstructionCount();
271     uint GetMovInstructionCount();
272     uint GetNumInterfaceSlots();
273     HRESULT GetOutputParameterDesc(uint ParameterIndex, D3D12_SIGNATURE_PARAMETER_DESC *pDesc);
274     HRESULT GetPatchConstantParameterDesc(uint ParameterIndex, D3D12_SIGNATURE_PARAMETER_DESC *pDesc);
275     ulong GetRequiresFlags();
276     HRESULT GetResourceBindingDesc(uint ResourceIndex, D3D12_SHADER_INPUT_BIND_DESC *pDesc);
277     HRESULT GetResourceBindingDescByName(const char *Name, D3D12_SHADER_INPUT_BIND_DESC *pDesc);
278     uint GetThreadGroupSize(uint *pSizeX, uint *pSizeY, uint *pSizeZ);
279     ID3D12ShaderReflectionVariable GetVariableByName(const char *Name);
280     bool IsSampleFrequencyShader();
281 }
282 
283 mixin(uuid!(ID3D12LibraryReflection, "8E349D19-54DB-4A56-9DC9-119D87BDB804"));
284 public interface ID3D12LibraryReflection : IUnknown
285 {
286 extern(Windows):
287 	HRESULT GetDesc(D3D12_LIBRARY_DESC *pDesc);
288     ID3D12FunctionReflection GetFunctionByIndex(int FunctionIndex);
289 }
290 
291 mixin(uuid!(ID3D12FunctionReflection, "1108795C-2772-4BA9-B2A8-D464DC7E2799"));
292 public interface ID3D12FunctionReflection : IUnknown
293 {
294 extern(Windows):
295 	ID3D12ShaderReflectionConstantBuffer GetConstantBufferByIndex(uint BufferIndex);
296     ID3D12ShaderReflectionConstantBuffer GetConstantBufferByName(const char *Name);
297     HRESULT GetDesc(D3D12_FUNCTION_DESC *pDesc);
298     ID3D12FunctionParameterReflection GetFunctionParameter(int ParameterIndex);
299     HRESULT GetResourceBindingDesc(uint ResourceIndex, D3D12_SHADER_INPUT_BIND_DESC *pDesc);
300     HRESULT GetResourceBindingDescByName(const char *Name, D3D12_SHADER_INPUT_BIND_DESC *pDesc);
301     ID3D12ShaderReflectionVariable GetVariableByName(const char *Name);
302 }
303 
304 mixin(uuid!(ID3D12FunctionParameterReflection, "EC25F42D-7006-4F2B-B33E-02CC3375733F"));
305 public interface ID3D12FunctionParameterReflection : IUnknown
306 {
307 extern(Windows):
308     HRESULT GetDesc(D3D12_PARAMETER_DESC *pDesc);
309 }