Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/directx_headers/include/directx/d3d12shader.h
21648 views
1
//////////////////////////////////////////////////////////////////////////////
2
//
3
// Copyright (c) Microsoft Corporation.
4
// Licensed under the MIT license.
5
//
6
// File: D3D12Shader.h
7
// Content: D3D12 Shader Types and APIs
8
//
9
//////////////////////////////////////////////////////////////////////////////
10
11
#ifndef __D3D12SHADER_H__
12
#define __D3D12SHADER_H__
13
14
#include "d3dcommon.h"
15
16
typedef enum D3D12_SHADER_VERSION_TYPE
17
{
18
D3D12_SHVER_PIXEL_SHADER = 0,
19
D3D12_SHVER_VERTEX_SHADER = 1,
20
D3D12_SHVER_GEOMETRY_SHADER = 2,
21
22
// D3D11 Shaders
23
D3D12_SHVER_HULL_SHADER = 3,
24
D3D12_SHVER_DOMAIN_SHADER = 4,
25
D3D12_SHVER_COMPUTE_SHADER = 5,
26
27
// D3D12 Shaders
28
D3D12_SHVER_LIBRARY = 6,
29
30
D3D12_SHVER_RAY_GENERATION_SHADER = 7,
31
D3D12_SHVER_INTERSECTION_SHADER = 8,
32
D3D12_SHVER_ANY_HIT_SHADER = 9,
33
D3D12_SHVER_CLOSEST_HIT_SHADER = 10,
34
D3D12_SHVER_MISS_SHADER = 11,
35
D3D12_SHVER_CALLABLE_SHADER = 12,
36
37
D3D12_SHVER_MESH_SHADER = 13,
38
D3D12_SHVER_AMPLIFICATION_SHADER = 14,
39
40
D3D12_SHVER_NODE_SHADER = 15,
41
42
D3D12_SHVER_RESERVED0 = 0xFFF0,
43
} D3D12_SHADER_VERSION_TYPE;
44
45
#define D3D12_SHVER_GET_TYPE(_Version) \
46
(((_Version) >> 16) & 0xffff)
47
#define D3D12_SHVER_GET_MAJOR(_Version) \
48
(((_Version) >> 4) & 0xf)
49
#define D3D12_SHVER_GET_MINOR(_Version) \
50
(((_Version) >> 0) & 0xf)
51
52
// Slot ID for library function return
53
#define D3D_RETURN_PARAMETER_INDEX (-1)
54
55
typedef D3D_RESOURCE_RETURN_TYPE D3D12_RESOURCE_RETURN_TYPE;
56
57
typedef D3D_CBUFFER_TYPE D3D12_CBUFFER_TYPE;
58
59
60
typedef struct _D3D12_SIGNATURE_PARAMETER_DESC
61
{
62
LPCSTR SemanticName; // Name of the semantic
63
UINT SemanticIndex; // Index of the semantic
64
UINT Register; // Number of member variables
65
D3D_NAME SystemValueType;// A predefined system value, or D3D_NAME_UNDEFINED if not applicable
66
D3D_REGISTER_COMPONENT_TYPE ComponentType; // Scalar type (e.g. uint, float, etc.)
67
BYTE Mask; // Mask to indicate which components of the register
68
// are used (combination of D3D10_COMPONENT_MASK values)
69
BYTE ReadWriteMask; // Mask to indicate whether a given component is
70
// never written (if this is an output signature) or
71
// always read (if this is an input signature).
72
// (combination of D3D_MASK_* values)
73
UINT Stream; // Stream index
74
D3D_MIN_PRECISION MinPrecision; // Minimum desired interpolation precision
75
} D3D12_SIGNATURE_PARAMETER_DESC;
76
77
typedef struct _D3D12_SHADER_BUFFER_DESC
78
{
79
LPCSTR Name; // Name of the constant buffer
80
D3D_CBUFFER_TYPE Type; // Indicates type of buffer content
81
UINT Variables; // Number of member variables
82
UINT Size; // Size of CB (in bytes)
83
UINT uFlags; // Buffer description flags
84
} D3D12_SHADER_BUFFER_DESC;
85
86
typedef struct _D3D12_SHADER_VARIABLE_DESC
87
{
88
LPCSTR Name; // Name of the variable
89
UINT StartOffset; // Offset in constant buffer's backing store
90
UINT Size; // Size of variable (in bytes)
91
UINT uFlags; // Variable flags
92
LPVOID DefaultValue; // Raw pointer to default value
93
UINT StartTexture; // First texture index (or -1 if no textures used)
94
UINT TextureSize; // Number of texture slots possibly used.
95
UINT StartSampler; // First sampler index (or -1 if no textures used)
96
UINT SamplerSize; // Number of sampler slots possibly used.
97
} D3D12_SHADER_VARIABLE_DESC;
98
99
typedef struct _D3D12_SHADER_TYPE_DESC
100
{
101
D3D_SHADER_VARIABLE_CLASS Class; // Variable class (e.g. object, matrix, etc.)
102
D3D_SHADER_VARIABLE_TYPE Type; // Variable type (e.g. float, sampler, etc.)
103
UINT Rows; // Number of rows (for matrices, 1 for other numeric, 0 if not applicable)
104
UINT Columns; // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable)
105
UINT Elements; // Number of elements (0 if not an array)
106
UINT Members; // Number of members (0 if not a structure)
107
UINT Offset; // Offset from the start of structure (0 if not a structure member)
108
LPCSTR Name; // Name of type, can be NULL
109
} D3D12_SHADER_TYPE_DESC;
110
111
typedef D3D_TESSELLATOR_DOMAIN D3D12_TESSELLATOR_DOMAIN;
112
113
typedef D3D_TESSELLATOR_PARTITIONING D3D12_TESSELLATOR_PARTITIONING;
114
115
typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D12_TESSELLATOR_OUTPUT_PRIMITIVE;
116
117
typedef struct _D3D12_SHADER_DESC
118
{
119
UINT Version; // Shader version
120
LPCSTR Creator; // Creator string
121
UINT Flags; // Shader compilation/parse flags
122
123
UINT ConstantBuffers; // Number of constant buffers
124
UINT BoundResources; // Number of bound resources
125
UINT InputParameters; // Number of parameters in the input signature
126
UINT OutputParameters; // Number of parameters in the output signature
127
128
UINT InstructionCount; // Number of emitted instructions
129
UINT TempRegisterCount; // Number of temporary registers used
130
UINT TempArrayCount; // Number of temporary arrays used
131
UINT DefCount; // Number of constant defines
132
UINT DclCount; // Number of declarations (input + output)
133
UINT TextureNormalInstructions; // Number of non-categorized texture instructions
134
UINT TextureLoadInstructions; // Number of texture load instructions
135
UINT TextureCompInstructions; // Number of texture comparison instructions
136
UINT TextureBiasInstructions; // Number of texture bias instructions
137
UINT TextureGradientInstructions; // Number of texture gradient instructions
138
UINT FloatInstructionCount; // Number of floating point arithmetic instructions used
139
UINT IntInstructionCount; // Number of signed integer arithmetic instructions used
140
UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used
141
UINT StaticFlowControlCount; // Number of static flow control instructions used
142
UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used
143
UINT MacroInstructionCount; // Number of macro instructions used
144
UINT ArrayInstructionCount; // Number of array instructions used
145
UINT CutInstructionCount; // Number of cut instructions used
146
UINT EmitInstructionCount; // Number of emit instructions used
147
D3D_PRIMITIVE_TOPOLOGY GSOutputTopology; // Geometry shader output topology
148
UINT GSMaxOutputVertexCount; // Geometry shader maximum output vertex count
149
D3D_PRIMITIVE InputPrimitive; // GS/HS input primitive
150
UINT PatchConstantParameters; // Number of parameters in the patch constant signature
151
UINT cGSInstanceCount; // Number of Geometry shader instances
152
UINT cControlPoints; // Number of control points in the HS->DS stage
153
D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; // Primitive output by the tessellator
154
D3D_TESSELLATOR_PARTITIONING HSPartitioning; // Partitioning mode of the tessellator
155
D3D_TESSELLATOR_DOMAIN TessellatorDomain; // Domain of the tessellator (quad, tri, isoline)
156
// instruction counts
157
UINT cBarrierInstructions; // Number of barrier instructions in a compute shader
158
UINT cInterlockedInstructions; // Number of interlocked instructions
159
UINT cTextureStoreInstructions; // Number of texture writes
160
} D3D12_SHADER_DESC;
161
162
typedef struct _D3D12_SHADER_INPUT_BIND_DESC
163
{
164
LPCSTR Name; // Name of the resource
165
D3D_SHADER_INPUT_TYPE Type; // Type of resource (e.g. texture, cbuffer, etc.)
166
UINT BindPoint; // Starting bind point
167
UINT BindCount; // Number of contiguous bind points (for arrays)
168
169
UINT uFlags; // Input binding flags
170
D3D_RESOURCE_RETURN_TYPE ReturnType; // Return type (if texture)
171
D3D_SRV_DIMENSION Dimension; // Dimension (if texture)
172
UINT NumSamples; // Number of samples (0 if not MS texture)
173
UINT Space; // Register space
174
UINT uID; // Range ID in the bytecode
175
} D3D12_SHADER_INPUT_BIND_DESC;
176
177
#define D3D_SHADER_REQUIRES_DOUBLES 0x00000001
178
#define D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL 0x00000002
179
#define D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE 0x00000004
180
#define D3D_SHADER_REQUIRES_64_UAVS 0x00000008
181
#define D3D_SHADER_REQUIRES_MINIMUM_PRECISION 0x00000010
182
#define D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS 0x00000020
183
#define D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS 0x00000040
184
#define D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING 0x00000080
185
#define D3D_SHADER_REQUIRES_TILED_RESOURCES 0x00000100
186
#define D3D_SHADER_REQUIRES_STENCIL_REF 0x00000200
187
#define D3D_SHADER_REQUIRES_INNER_COVERAGE 0x00000400
188
#define D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS 0x00000800
189
#define D3D_SHADER_REQUIRES_ROVS 0x00001000
190
#define D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER 0x00002000
191
#define D3D_SHADER_REQUIRES_WAVE_OPS 0x00004000
192
#define D3D_SHADER_REQUIRES_INT64_OPS 0x00008000
193
#define D3D_SHADER_REQUIRES_VIEW_ID 0x00010000
194
#define D3D_SHADER_REQUIRES_BARYCENTRICS 0x00020000
195
#define D3D_SHADER_REQUIRES_NATIVE_16BIT_OPS 0x00040000
196
#define D3D_SHADER_REQUIRES_SHADING_RATE 0x00080000
197
#define D3D_SHADER_REQUIRES_RAYTRACING_TIER_1_1 0x00100000
198
#define D3D_SHADER_REQUIRES_SAMPLER_FEEDBACK 0x00200000
199
#define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_TYPED_RESOURCE 0x00400000
200
#define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_GROUP_SHARED 0x00800000
201
#define D3D_SHADER_REQUIRES_DERIVATIVES_IN_MESH_AND_AMPLIFICATION_SHADERS 0x01000000
202
#define D3D_SHADER_REQUIRES_RESOURCE_DESCRIPTOR_HEAP_INDEXING 0x02000000
203
#define D3D_SHADER_REQUIRES_SAMPLER_DESCRIPTOR_HEAP_INDEXING 0x04000000
204
#define D3D_SHADER_REQUIRES_WAVE_MMA 0x08000000
205
#define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000
206
#define D3D_SHADER_REQUIRES_ADVANCED_TEXTURE_OPS 0x20000000
207
#define D3D_SHADER_REQUIRES_WRITEABLE_MSAA_TEXTURES 0x40000000
208
#define D3D_SHADER_REQUIRES_SAMPLE_CMP_GRADIENT_OR_BIAS 0x80000000
209
#define D3D_SHADER_REQUIRES_EXTENDED_COMMAND_INFO 0x100000000ull
210
211
212
typedef struct _D3D12_LIBRARY_DESC
213
{
214
LPCSTR Creator; // The name of the originator of the library.
215
UINT Flags; // Compilation flags.
216
UINT FunctionCount; // Number of functions exported from the library.
217
} D3D12_LIBRARY_DESC;
218
219
typedef struct _D3D12_FUNCTION_DESC
220
{
221
UINT Version; // Shader version
222
LPCSTR Creator; // Creator string
223
UINT Flags; // Shader compilation/parse flags
224
225
UINT ConstantBuffers; // Number of constant buffers
226
UINT BoundResources; // Number of bound resources
227
228
UINT InstructionCount; // Number of emitted instructions
229
UINT TempRegisterCount; // Number of temporary registers used
230
UINT TempArrayCount; // Number of temporary arrays used
231
UINT DefCount; // Number of constant defines
232
UINT DclCount; // Number of declarations (input + output)
233
UINT TextureNormalInstructions; // Number of non-categorized texture instructions
234
UINT TextureLoadInstructions; // Number of texture load instructions
235
UINT TextureCompInstructions; // Number of texture comparison instructions
236
UINT TextureBiasInstructions; // Number of texture bias instructions
237
UINT TextureGradientInstructions; // Number of texture gradient instructions
238
UINT FloatInstructionCount; // Number of floating point arithmetic instructions used
239
UINT IntInstructionCount; // Number of signed integer arithmetic instructions used
240
UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used
241
UINT StaticFlowControlCount; // Number of static flow control instructions used
242
UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used
243
UINT MacroInstructionCount; // Number of macro instructions used
244
UINT ArrayInstructionCount; // Number of array instructions used
245
UINT MovInstructionCount; // Number of mov instructions used
246
UINT MovcInstructionCount; // Number of movc instructions used
247
UINT ConversionInstructionCount; // Number of type conversion instructions used
248
UINT BitwiseInstructionCount; // Number of bitwise arithmetic instructions used
249
D3D_FEATURE_LEVEL MinFeatureLevel; // Min target of the function byte code
250
UINT64 RequiredFeatureFlags; // Required feature flags
251
252
LPCSTR Name; // Function name
253
INT FunctionParameterCount; // Number of logical parameters in the function signature (not including return)
254
BOOL HasReturn; // TRUE, if function returns a value, false - it is a subroutine
255
BOOL Has10Level9VertexShader; // TRUE, if there is a 10L9 VS blob
256
BOOL Has10Level9PixelShader; // TRUE, if there is a 10L9 PS blob
257
} D3D12_FUNCTION_DESC;
258
259
typedef struct _D3D12_PARAMETER_DESC
260
{
261
LPCSTR Name; // Parameter name.
262
LPCSTR SemanticName; // Parameter semantic name (+index).
263
D3D_SHADER_VARIABLE_TYPE Type; // Element type.
264
D3D_SHADER_VARIABLE_CLASS Class; // Scalar/Vector/Matrix.
265
UINT Rows; // Rows are for matrix parameters.
266
UINT Columns; // Components or Columns in matrix.
267
D3D_INTERPOLATION_MODE InterpolationMode; // Interpolation mode.
268
D3D_PARAMETER_FLAGS Flags; // Parameter modifiers.
269
270
UINT FirstInRegister; // The first input register for this parameter.
271
UINT FirstInComponent; // The first input register component for this parameter.
272
UINT FirstOutRegister; // The first output register for this parameter.
273
UINT FirstOutComponent; // The first output register component for this parameter.
274
} D3D12_PARAMETER_DESC;
275
276
277
//////////////////////////////////////////////////////////////////////////////
278
// Interfaces ////////////////////////////////////////////////////////////////
279
//////////////////////////////////////////////////////////////////////////////
280
281
typedef interface ID3D12ShaderReflectionType ID3D12ShaderReflectionType;
282
typedef interface ID3D12ShaderReflectionType *LPD3D12SHADERREFLECTIONTYPE;
283
284
typedef interface ID3D12ShaderReflectionVariable ID3D12ShaderReflectionVariable;
285
typedef interface ID3D12ShaderReflectionVariable *LPD3D12SHADERREFLECTIONVARIABLE;
286
287
typedef interface ID3D12ShaderReflectionConstantBuffer ID3D12ShaderReflectionConstantBuffer;
288
typedef interface ID3D12ShaderReflectionConstantBuffer *LPD3D12SHADERREFLECTIONCONSTANTBUFFER;
289
290
typedef interface ID3D12ShaderReflection ID3D12ShaderReflection;
291
typedef interface ID3D12ShaderReflection *LPD3D12SHADERREFLECTION;
292
293
typedef interface ID3D12LibraryReflection ID3D12LibraryReflection;
294
typedef interface ID3D12LibraryReflection *LPD3D12LIBRARYREFLECTION;
295
296
typedef interface ID3D12FunctionReflection ID3D12FunctionReflection;
297
typedef interface ID3D12FunctionReflection *LPD3D12FUNCTIONREFLECTION;
298
299
typedef interface ID3D12FunctionParameterReflection ID3D12FunctionParameterReflection;
300
typedef interface ID3D12FunctionParameterReflection *LPD3D12FUNCTIONPARAMETERREFLECTION;
301
302
303
// {E913C351-783D-48CA-A1D1-4F306284AD56}
304
interface DECLSPEC_UUID("E913C351-783D-48CA-A1D1-4F306284AD56") ID3D12ShaderReflectionType;
305
DEFINE_GUID(IID_ID3D12ShaderReflectionType,
306
0xe913c351, 0x783d, 0x48ca, 0xa1, 0xd1, 0x4f, 0x30, 0x62, 0x84, 0xad, 0x56);
307
308
#undef INTERFACE
309
#define INTERFACE ID3D12ShaderReflectionType
310
311
DECLARE_INTERFACE(ID3D12ShaderReflectionType)
312
{
313
STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_TYPE_DESC *pDesc) PURE;
314
315
STDMETHOD_(ID3D12ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ _In_ UINT Index) PURE;
316
STDMETHOD_(ID3D12ShaderReflectionType*, GetMemberTypeByName)(THIS_ _In_ LPCSTR Name) PURE;
317
STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ _In_ UINT Index) PURE;
318
319
STDMETHOD(IsEqual)(THIS_ _In_ ID3D12ShaderReflectionType* pType) PURE;
320
STDMETHOD_(ID3D12ShaderReflectionType*, GetSubType)(THIS) PURE;
321
STDMETHOD_(ID3D12ShaderReflectionType*, GetBaseClass)(THIS) PURE;
322
STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;
323
STDMETHOD_(ID3D12ShaderReflectionType*, GetInterfaceByIndex)(THIS_ _In_ UINT uIndex) PURE;
324
STDMETHOD(IsOfType)(THIS_ _In_ ID3D12ShaderReflectionType* pType) PURE;
325
STDMETHOD(ImplementsInterface)(THIS_ _In_ ID3D12ShaderReflectionType* pBase) PURE;
326
};
327
328
// {8337A8A6-A216-444A-B2F4-314733A73AEA}
329
interface DECLSPEC_UUID("8337A8A6-A216-444A-B2F4-314733A73AEA") ID3D12ShaderReflectionVariable;
330
DEFINE_GUID(IID_ID3D12ShaderReflectionVariable,
331
0x8337a8a6, 0xa216, 0x444a, 0xb2, 0xf4, 0x31, 0x47, 0x33, 0xa7, 0x3a, 0xea);
332
333
#undef INTERFACE
334
#define INTERFACE ID3D12ShaderReflectionVariable
335
336
DECLARE_INTERFACE(ID3D12ShaderReflectionVariable)
337
{
338
STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_VARIABLE_DESC *pDesc) PURE;
339
340
STDMETHOD_(ID3D12ShaderReflectionType*, GetType)(THIS) PURE;
341
STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetBuffer)(THIS) PURE;
342
343
STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ _In_ UINT uArrayIndex) PURE;
344
};
345
346
// {C59598B4-48B3-4869-B9B1-B1618B14A8B7}
347
interface DECLSPEC_UUID("C59598B4-48B3-4869-B9B1-B1618B14A8B7") ID3D12ShaderReflectionConstantBuffer;
348
DEFINE_GUID(IID_ID3D12ShaderReflectionConstantBuffer,
349
0xc59598b4, 0x48b3, 0x4869, 0xb9, 0xb1, 0xb1, 0x61, 0x8b, 0x14, 0xa8, 0xb7);
350
351
#undef INTERFACE
352
#define INTERFACE ID3D12ShaderReflectionConstantBuffer
353
354
DECLARE_INTERFACE(ID3D12ShaderReflectionConstantBuffer)
355
{
356
STDMETHOD(GetDesc)(THIS_ D3D12_SHADER_BUFFER_DESC *pDesc) PURE;
357
358
STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByIndex)(THIS_ _In_ UINT Index) PURE;
359
STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE;
360
};
361
362
// The ID3D12ShaderReflection IID may change from SDK version to SDK version
363
// if the reflection API changes. This prevents new code with the new API
364
// from working with an old binary. Recompiling with the new header
365
// will pick up the new IID.
366
367
// {5A58797D-A72C-478D-8BA2-EFC6B0EFE88E}
368
interface DECLSPEC_UUID("5A58797D-A72C-478D-8BA2-EFC6B0EFE88E") ID3D12ShaderReflection;
369
DEFINE_GUID(IID_ID3D12ShaderReflection,
370
0x5a58797d, 0xa72c, 0x478d, 0x8b, 0xa2, 0xef, 0xc6, 0xb0, 0xef, 0xe8, 0x8e);
371
372
#undef INTERFACE
373
#define INTERFACE ID3D12ShaderReflection
374
375
DECLARE_INTERFACE_(ID3D12ShaderReflection, IUnknown)
376
{
377
STDMETHOD(QueryInterface)(THIS_ _In_ REFIID iid,
378
_Out_ LPVOID *ppv) PURE;
379
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
380
STDMETHOD_(ULONG, Release)(THIS) PURE;
381
382
STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_DESC *pDesc) PURE;
383
384
STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ _In_ UINT Index) PURE;
385
STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ _In_ LPCSTR Name) PURE;
386
387
STDMETHOD(GetResourceBindingDesc)(THIS_ _In_ UINT ResourceIndex,
388
_Out_ D3D12_SHADER_INPUT_BIND_DESC *pDesc) PURE;
389
390
STDMETHOD(GetInputParameterDesc)(THIS_ _In_ UINT ParameterIndex,
391
_Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
392
STDMETHOD(GetOutputParameterDesc)(THIS_ _In_ UINT ParameterIndex,
393
_Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
394
STDMETHOD(GetPatchConstantParameterDesc)(THIS_ _In_ UINT ParameterIndex,
395
_Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
396
397
STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE;
398
399
STDMETHOD(GetResourceBindingDescByName)(THIS_ _In_ LPCSTR Name,
400
_Out_ D3D12_SHADER_INPUT_BIND_DESC *pDesc) PURE;
401
402
STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;
403
STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;
404
STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;
405
STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;
406
407
STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;
408
STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE;
409
410
STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;
411
STDMETHOD(GetMinFeatureLevel)(THIS_ _Out_ enum D3D_FEATURE_LEVEL* pLevel) PURE;
412
413
STDMETHOD_(UINT, GetThreadGroupSize)(THIS_
414
_Out_opt_ UINT* pSizeX,
415
_Out_opt_ UINT* pSizeY,
416
_Out_opt_ UINT* pSizeZ) PURE;
417
418
STDMETHOD_(UINT64, GetRequiresFlags)(THIS) PURE;
419
};
420
421
// {8E349D19-54DB-4A56-9DC9-119D87BDB804}
422
interface DECLSPEC_UUID("8E349D19-54DB-4A56-9DC9-119D87BDB804") ID3D12LibraryReflection;
423
DEFINE_GUID(IID_ID3D12LibraryReflection,
424
0x8e349d19, 0x54db, 0x4a56, 0x9d, 0xc9, 0x11, 0x9d, 0x87, 0xbd, 0xb8, 0x4);
425
426
#undef INTERFACE
427
#define INTERFACE ID3D12LibraryReflection
428
429
DECLARE_INTERFACE_(ID3D12LibraryReflection, IUnknown)
430
{
431
STDMETHOD(QueryInterface)(THIS_ _In_ REFIID iid, _Out_ LPVOID * ppv) PURE;
432
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
433
STDMETHOD_(ULONG, Release)(THIS) PURE;
434
435
STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_LIBRARY_DESC * pDesc) PURE;
436
437
STDMETHOD_(ID3D12FunctionReflection *, GetFunctionByIndex)(THIS_ _In_ INT FunctionIndex) PURE;
438
};
439
440
// {1108795C-2772-4BA9-B2A8-D464DC7E2799}
441
interface DECLSPEC_UUID("1108795C-2772-4BA9-B2A8-D464DC7E2799") ID3D12FunctionReflection;
442
DEFINE_GUID(IID_ID3D12FunctionReflection,
443
0x1108795c, 0x2772, 0x4ba9, 0xb2, 0xa8, 0xd4, 0x64, 0xdc, 0x7e, 0x27, 0x99);
444
445
#undef INTERFACE
446
#define INTERFACE ID3D12FunctionReflection
447
448
DECLARE_INTERFACE(ID3D12FunctionReflection)
449
{
450
STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_FUNCTION_DESC * pDesc) PURE;
451
452
STDMETHOD_(ID3D12ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ _In_ UINT BufferIndex) PURE;
453
STDMETHOD_(ID3D12ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ _In_ LPCSTR Name) PURE;
454
455
STDMETHOD(GetResourceBindingDesc)(THIS_ _In_ UINT ResourceIndex,
456
_Out_ D3D12_SHADER_INPUT_BIND_DESC * pDesc) PURE;
457
458
STDMETHOD_(ID3D12ShaderReflectionVariable *, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE;
459
460
STDMETHOD(GetResourceBindingDescByName)(THIS_ _In_ LPCSTR Name,
461
_Out_ D3D12_SHADER_INPUT_BIND_DESC * pDesc) PURE;
462
463
// Use D3D_RETURN_PARAMETER_INDEX to get description of the return value.
464
STDMETHOD_(ID3D12FunctionParameterReflection *, GetFunctionParameter)(THIS_ _In_ INT ParameterIndex) PURE;
465
};
466
467
// {EC25F42D-7006-4F2B-B33E-02CC3375733F}
468
interface DECLSPEC_UUID("EC25F42D-7006-4F2B-B33E-02CC3375733F") ID3D12FunctionParameterReflection;
469
DEFINE_GUID(IID_ID3D12FunctionParameterReflection,
470
0xec25f42d, 0x7006, 0x4f2b, 0xb3, 0x3e, 0x2, 0xcc, 0x33, 0x75, 0x73, 0x3f);
471
472
#undef INTERFACE
473
#define INTERFACE ID3D12FunctionParameterReflection
474
475
DECLARE_INTERFACE(ID3D12FunctionParameterReflection)
476
{
477
STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_PARAMETER_DESC * pDesc) PURE;
478
};
479
480
481
//////////////////////////////////////////////////////////////////////////////
482
// APIs //////////////////////////////////////////////////////////////////////
483
//////////////////////////////////////////////////////////////////////////////
484
485
#ifdef __cplusplus
486
extern "C" {
487
#endif //__cplusplus
488
489
#ifdef __cplusplus
490
}
491
#endif //__cplusplus
492
493
#endif //__D3D12SHADER_H__
494
495
496
497