1 module aurora.directx.d3d11.d3d11shader;
2 
3 import std.bitmanip;
4 import aurora.directx.com;
5 import aurora.directx.d3d11;
6 
7 public:
8 
9 ///
10 /// Constants
11 ///
12 
13 enum int D3D_SHADER_REQUIRES_DOUBLES = 0x00000001;
14 enum int D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL = 0x00000002;
15 enum int D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE = 0x00000004;
16 enum int D3D_SHADER_REQUIRES_64_UAVS = 0x00000008;
17 enum int D3D_SHADER_REQUIRES_MINIMUM_PRECISION = 0x00000010;
18 enum int D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS = 0x00000020;
19 enum int D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS = 0x00000040;
20 enum int D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING = 0x00000080;
21 enum int D3D_SHADER_REQUIRES_TILED_RESOURCES = 0x00000100;
22 
23 alias D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;
24 alias D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;
25 alias D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;
26 alias D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;
27 alias D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;
28 
29 ///
30 /// Functions
31 ///
32 
33 ///
34 /// Enumerations
35 ///
36 
37 enum D3D11_SHADER_VERSION_TYPE
38 {
39     PIXEL_SHADER    = 0,
40     VERTEX_SHADER   = 1,
41     GEOMETRY_SHADER = 2,
42     
43     // D3D11 Shaders
44     HULL_SHADER     = 3,
45     DOMAIN_SHADER   = 4,
46     COMPUTE_SHADER  = 5,
47 
48     RESERVED0       = 0xFFF0,
49 }
50 
51 ///
52 /// Structures
53 ///
54 
55 struct D3D11_SIGNATURE_PARAMETER_DESC
56 {
57     const char *SemanticName;
58     uint SemanticIndex;
59     uint Register;
60     D3D_NAME SystemValueType;
61     D3D_REGISTER_COMPONENT_TYPE ComponentType;
62     byte Mask;
63     byte ReadWriteMask;
64     uint Stream;
65     D3D_MIN_PRECISION MinPrecision;
66 }
67 
68 struct D3D11_SHADER_BUFFER_DESC
69 {
70     const char *Name;
71     D3D_CBUFFER_TYPE Type;
72     uint Variables;
73     uint Size;
74     uint uFlags;
75 }
76 
77 struct D3D11_SHADER_VARIABLE_DESC
78 {
79     const char *Name;
80     uint StartOffset;
81     uint Size;
82     uint uFlags;
83     void *DefaultValue;
84     uint StartTexture;
85     uint TextureSize;
86     uint StartSampler;
87     uint SamplerSize;
88 }
89 
90 struct D3D11_SHADER_TYPE_DESC
91 {
92     D3D_SHADER_VARIABLE_CLASS Class;
93     D3D_SHADER_VARIABLE_TYPE Type;
94     uint Rows;
95     uint Columns;
96     uint Elements;
97     uint Members;
98     uint Offset; 
99     const char *Name;
100 }
101 
102 struct D3D11_SHADER_DESC
103 {
104     uint Version;
105     const char *Creator;
106     uint Flags;
107     uint ConstantBuffers;
108     uint BoundResources;
109     uint InputParameters;
110     uint OutputParameters;
111     uint InstructionCount;
112     uint TempRegisterCount;
113     uint TempArrayCount;
114     uint DefCount;
115     uint DclCount;
116     uint TextureNormalInstructions;
117     uint TextureLoadInstructions;
118     uint TextureCompInstructions;
119     uint TextureBiasInstructions;
120     uint TextureGradientInstructions;
121     uint FloatInstructionCount;
122     uint IntInstructionCount;
123     uint UintInstructionCount;
124     uint StaticFlowControlCount;
125     uint DynamicFlowControlCount;
126     uint MacroInstructionCount;
127     uint ArrayInstructionCount;
128     uint CutInstructionCount;
129     uint EmitInstructionCount;
130     D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
131     uint GSMaxOutputVertexCount;
132     D3D_PRIMITIVE InputPrimitive;
133     uint PatchConstantParameters;
134     uint cGSInstanceCount;
135     uint cControlPoints;
136     D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;
137     D3D_TESSELLATOR_PARTITIONING HSPartitioning;
138     D3D_TESSELLATOR_DOMAIN TessellatorDomain;
139     uint cBarrierInstructions;
140     uint cInterlockedInstructions;
141     uint cTextureStoreInstructions;
142 }
143 
144 struct D3D11_SHADER_INPUT_BIND_DESC
145 {
146     const char *Name;
147     D3D_SHADER_INPUT_TYPE Type;
148     uint BindPoint;
149     uint BindCount;
150     uint uFlags;
151     D3D_RESOURCE_RETURN_TYPE ReturnType;
152     D3D_SRV_DIMENSION Dimension;
153     uint NumSamples;
154 }
155 
156 struct D3D11_LIBRARY_DESC
157 {
158     const char *Creator;
159     uint Flags;
160     uint FunctionCount;
161 }
162 
163 struct D3D11_FUNCTION_DESC
164 {
165     uint Version;
166     const char *Creator;
167     uint Flags;
168     uint ConstantBuffers;
169     uint BoundResources;
170     uint InstructionCount;
171     uint TempRegisterCount;
172     uint TempArrayCount;
173     uint DefCount;
174     uint DclCount;
175     uint TextureNormalInstructions;
176     uint TextureLoadInstructions;
177     uint TextureCompInstructions;
178     uint TextureBiasInstructions;
179     uint TextureGradientInstructions;
180     uint FloatInstructionCount;
181     uint IntInstructionCount;
182     uint UintInstructionCount;
183     uint StaticFlowControlCount;
184     uint DynamicFlowControlCount;
185     uint MacroInstructionCount;
186     uint ArrayInstructionCount;
187     uint MovInstructionCount;
188     uint MovcInstructionCount;
189     uint ConversionInstructionCount;
190     uint BitwiseInstructionCount;
191     D3D_FEATURE_LEVEL MinFeatureLevel;
192     ulong RequiredFeatureFlags;
193     const char *Name;
194     int FunctionParameterCount;
195     bool HasReturn;
196     bool Has10Level9VertexShader;
197     bool Has10Level9PixelShader;
198 }
199 
200 struct D3D11_PARAMETER_DESC
201 {
202     const char *Name;
203     const char *SemanticName;
204     D3D_SHADER_VARIABLE_TYPE Type;
205     D3D_SHADER_VARIABLE_CLASS Class;
206     uint Rows;
207     uint Columns;
208     D3D_INTERPOLATION_MODE InterpolationMode;
209     D3D_PARAMETER_FLAGS Flags;
210     uint FirstInRegister;
211     uint FirstInComponent;
212     uint FirstOutRegister;
213     uint FirstOutComponent;
214 }
215 
216 ///
217 /// Interfaces
218 ///
219 
220 mixin(uuid!(ID3D11ShaderReflectionType, "6E6FFA6A-9BAE-4613-A51E-91652D508C21"));
221 public interface ID3D11ShaderReflectionType : IUnknown
222 {
223 extern(Windows):
224     ID3D11ShaderReflectionType GetBaseClass();
225     HRESULT GetDesc(D3D11_SHADER_TYPE_DESC *pDesc);
226     ID3D11ShaderReflectionType GetInterfaceByIndex(uint uIndex);
227     ID3D11ShaderReflectionType* GetMemberTypeByIndex(uint Index);
228     ID3D11ShaderReflectionType* GetMemberTypeByName(const char *Name);
229     const char* GetMemberTypeName(uint Index);
230     uint GetNumInterfaces();
231     ID3D11ShaderReflectionType GetSubType();
232     HRESULT ImplementsInterface(ID3D11ShaderReflectionType pBase);
233     HRESULT IsEqual(ID3D11ShaderReflectionType pType);
234     HRESULT IsOfType(ID3D11ShaderReflectionType pType);
235 }
236 
237 mixin(uuid!(ID3D11ShaderReflectionVariable, "51F23923-F3E5-4BD1-91CB-606177D8DB4C"));
238 public interface ID3D11ShaderReflectionVariable : IUnknown
239 {
240 extern(Windows):
241     ID3D11ShaderReflectionConstantBuffer GetBuffer();
242     HRESULT GetDesc(D3D11_SHADER_VARIABLE_DESC pDesc);
243     uint GetInterfaceSlot(uint uArrayIndex);
244     ID3D11ShaderReflectionType GetType();
245 }
246 
247 mixin(uuid!(ID3D11ShaderReflectionConstantBuffer, "EB62D63D-93DD-4318-8AE8-C6F83AD371B8"));
248 public interface ID3D11ShaderReflectionConstantBuffer : IUnknown
249 {
250 extern(Windows):
251     HRESULT GetDesc(D3D11_SHADER_BUFFER_DESC *pDesc);
252     ID3D11ShaderReflectionVariable GetVariableByIndex(uint Index);
253     ID3D11ShaderReflectionVariable* GetVariableByName(const char *Name);
254 }
255 
256 mixin(uuid!(ID3D11ShaderReflection, "8d536ca1-0cca-4956-a837-786963755584"));
257 public interface ID3D11ShaderReflection : IUnknown
258 {
259 extern(Windows):
260     uint GetBitwiseInstructionCount();
261     ID3D11ShaderReflectionConstantBuffer GetConstantBufferByIndex(uint Index);
262     ID3D11ShaderReflectionConstantBuffer GetConstantBufferByName(const char *Name);
263     uint GetConversionInstructionCount();
264     HRESULT GetDesc(D3D11_SHADER_DESC *pDesc);
265     D3D_PRIMITIVE GetGSInputPrimitive();
266     HRESULT GetInputParameterDesc(uint ParameterIndex, D3D11_SIGNATURE_PARAMETER_DESC *pDesc);
267     HRESULT GetMinFeatureLevel(D3D_FEATURE_LEVEL *pLevel);
268     uint GetMovInstructionCount();
269     uint GetMovcInstructionCount();
270     uint GetNumInterfaceSlots();
271     HRESULT GetOutputParameterDesc(uint ParameterIndex, D3D11_SIGNATURE_PARAMETER_DESC *pDesc);
272     HRESULT GetPatchConstantParameterDesc(uint ParameterIndex, D3D11_SIGNATURE_PARAMETER_DESC *pDesc);
273     ulong GetRequiresFlags();
274     HRESULT GetResourceBindingDesc(uint ResourceIndex, D3D11_SHADER_INPUT_BIND_DESC *pDesc);
275     HRESULT GetResourceBindingDescByName(const char *Name, D3D11_SHADER_INPUT_BIND_DESC *pDesc);
276     uint GetThreadGroupSize(uint *pSizeX, uint *pSizeY, uint *pSizeZ);
277     ID3D11ShaderReflectionVariable* GetVariableByName(const char *Name);
278     bool IsSampleFrequencyShader();
279 }
280 
281 mixin(uuid!(ID3D11LibraryReflection, "54384F1B-5B3E-4BB7-AE01-60BA3097CBB6"));
282 public interface ID3D11LibraryReflection : IUnknown
283 {
284 extern(Windows):
285     HRESULT GetDesc(D3D11_LIBRARY_DESC *pDesc);
286     ID3D11FunctionReflection GetFunctionByIndex(int FunctionIndex);
287 }
288 
289 mixin(uuid!(ID3D11FunctionReflection, "207BCECB-D683-4A06-A8A3-9B149B9F73A4"));
290 public interface ID3D11FunctionReflection : IUnknown
291 {
292 extern(Windows):
293     ID3D11ShaderReflectionConstantBuffer GetConstantBufferByIndex(uint BufferIndex);
294     ID3D11ShaderReflectionConstantBuffer GetConstantBufferByName(const char *Name);
295     HRESULT GetDesc(D3D11_FUNCTION_DESC *pDesc);
296     ID3D11FunctionParameterReflection GetFunctionParameter(int ParameterIndex);
297     HRESULT GetResourceBindingDesc(uint ResourceIndex, D3D11_SHADER_INPUT_BIND_DESC *pDesc);
298     HRESULT GetResourceBindingDescByName(const char *Name, D3D11_SHADER_INPUT_BIND_DESC *pDesc);
299     ID3D11ShaderReflectionVariable* GetVariableByName(const char *Name);
300 }
301 
302 mixin(uuid!(ID3D11FunctionParameterReflection, "42757488-334F-47FE-982E-1A65D08CC462"));
303 public interface ID3D11FunctionParameterReflection : IUnknown
304 {
305 extern(Windows):
306     HRESULT GetDesc(D3D11_PARAMETER_DESC *pDesc);
307 }
308 
309 mixin(uuid!(ID3D11Module, "CAC701EE-80FC-4122-8242-10B39C8CEC34"));
310 public interface ID3D11Module : IUnknown
311 {
312 extern(Windows):
313     HRESULT CreateInstance(const char *pNamespace, ID3D11ModuleInstance *ppModuleInstance);
314 }
315 
316 mixin(uuid!(ID3D11ModuleInstance, "469E07F7-045A-48D5-AA12-68A478CDF75D"));
317 public interface ID3D11ModuleInstance : IUnknown
318 {
319 extern(Windows):
320     HRESULT BindConstantBuffer(uint uSrcSlot, uint uDstSlot, uint cbDstOffset);
321     HRESULT BindConstantBufferByName(const char *pName, uint uDstSlot, uint cbDstOffset);
322     HRESULT BindResource(uint uSrcSlot, uint uDstSlot, uint uCount);
323     HRESULT BindResourceAsUnorderedAccessView(uint uSrcSrvSlot, uint uDstUavSlot, uint uCount);
324     HRESULT BindResourceAsUnorderedAccessViewByName(const char *pSrvName, uint uDstUavSlot, uint uCount);
325     HRESULT BindResourceByName(const char *pName, uint uDstSlot, uint uCount);
326     HRESULT BindSampler(uint uSrcSlot, uint uDstSlot, uint uCount);
327     HRESULT BindSamplerByName(const char *pName, uint uDstSlot, uint uCount);
328     HRESULT BindUnorderedAccessView(uint uSrcSlot, uint uDstSlot, uint uCount);
329     HRESULT BindUnorderedAccessViewByName(const char *pName, uint uDstSlot, uint uCount);
330 }
331 
332 mixin(uuid!(ID3D11Linker, "59A6CD0E-E10D-4C1F-88C0-63ABA1DAF30E"));
333 public interface ID3D11Linker : IUnknown
334 {
335 extern(Windows):
336     HRESULT AddClipPlaneFromCBuffer(uint uCBufferSlot, uint uCBufferEntry);
337     HRESULT Link(ID3D11ModuleInstance pEntry, const char *pEntryName, const char *pTargetName, uint uFlags, ID3DBlob *ppShaderBlob, ID3DBlob *ppErrorBuffer);
338     HRESULT UseLibrary(ID3D11ModuleInstance pLibraryMI);
339 }
340 
341 mixin(uuid!(ID3D11LinkingNode, "D80DD70C-8D2F-4751-94A1-03C79B3556DB"));
342 public interface ID3D11LinkingNode : IUnknown
343 {
344 extern(Windows):
345 }
346 
347 mixin(uuid!(ID3D11FunctionLinkingGraph, "54133220-1CE8-43D3-8236-9855C5CEECFF"));
348 public interface ID3D11FunctionLinkingGraph : IUnknown
349 {
350 extern(Windows):
351     HRESULT CallFunction(const char *pModuleInstanceNamespace, ID3D11Module pModuleWithFunctionPrototype, const char *pFunctionName, ID3D11LinkingNode *ppCallNode);
352     HRESULT CreateModuleInstance(ID3D11ModuleInstance *ppModuleInstance, ID3DBlob *ppErrorBuffer);
353     HRESULT GenerateHlsl(uint uFlags, ID3DBlob *ppBuffer);
354     HRESULT GetLastError(ID3DBlob *ppErrorBuffer);
355     HRESULT PassValue(ID3D11LinkingNode pSrcNode, int SrcParameterIndex, ID3D11LinkingNode pDstNode, int DstParameterIndex);
356     HRESULT PassValueWithSwizzle(ID3D11LinkingNode pSrcNode, int SrcParameterIndex, const char *pSrcSwizzle, ID3D11LinkingNode pDstNode, int DstParameterIndex, const char *pDstSwizzle);
357     HRESULT SetInputSignature(const D3D11_PARAMETER_DESC *pInputParameters, uint  cInputParameters, ID3D11LinkingNode *ppInputNode);
358     HRESULT SetOutputSignature(const D3D11_PARAMETER_DESC *pOutputParameters, uint cOutputParameters, ID3D11LinkingNode *ppOutputNode);
359 }