2 * Copyright 2010 Matteo Bruni for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #ifndef __D3D11SHADER_H__
20 #define __D3D11SHADER_H__
22 #include "d3dcommon.h"
24 /* These are defined as version-neutral in d3dcommon.h */
25 typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE
;
27 typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE
;
29 typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN
;
31 typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING
;
33 typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE
;
35 typedef struct _D3D11_SHADER_DESC
43 UINT OutputParameters
;
44 UINT InstructionCount
;
45 UINT TempRegisterCount
;
49 UINT TextureNormalInstructions
;
50 UINT TextureLoadInstructions
;
51 UINT TextureCompInstructions
;
52 UINT TextureBiasInstructions
;
53 UINT TextureGradientInstructions
;
54 UINT FloatInstructionCount
;
55 UINT IntInstructionCount
;
56 UINT UintInstructionCount
;
57 UINT StaticFlowControlCount
;
58 UINT DynamicFlowControlCount
;
59 UINT MacroInstructionCount
;
60 UINT ArrayInstructionCount
;
61 UINT CutInstructionCount
;
62 UINT EmitInstructionCount
;
63 D3D_PRIMITIVE_TOPOLOGY GSOutputTopology
;
64 UINT GSMaxOutputVertexCount
;
65 D3D_PRIMITIVE InputPrimitive
;
66 UINT PatchConstantParameters
;
67 UINT cGSInstanceCount
;
69 D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive
;
70 D3D_TESSELLATOR_PARTITIONING HSPartitioning
;
71 D3D_TESSELLATOR_DOMAIN TessellatorDomain
;
72 UINT cBarrierInstructions
;
73 UINT cInterlockedInstructions
;
74 UINT cTextureStoreInstructions
;
77 typedef struct _D3D11_SHADER_VARIABLE_DESC
88 } D3D11_SHADER_VARIABLE_DESC
;
90 typedef struct _D3D11_SHADER_TYPE_DESC
92 D3D_SHADER_VARIABLE_CLASS Class
;
93 D3D_SHADER_VARIABLE_TYPE Type
;
100 } D3D11_SHADER_TYPE_DESC
;
102 typedef struct _D3D11_SHADER_BUFFER_DESC
105 D3D_CBUFFER_TYPE Type
;
109 } D3D11_SHADER_BUFFER_DESC
;
111 typedef struct _D3D11_SHADER_INPUT_BIND_DESC
114 D3D_SHADER_INPUT_TYPE Type
;
118 D3D_RESOURCE_RETURN_TYPE ReturnType
;
119 D3D_SRV_DIMENSION Dimension
;
121 } D3D11_SHADER_INPUT_BIND_DESC
;
123 typedef struct _D3D11_SIGNATURE_PARAMETER_DESC
125 const char *SemanticName
;
128 D3D_NAME SystemValueType
;
129 D3D_REGISTER_COMPONENT_TYPE ComponentType
;
133 } D3D11_SIGNATURE_PARAMETER_DESC
;
135 DEFINE_GUID(IID_ID3D11ShaderReflectionType
, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);
137 #define INTERFACE ID3D11ShaderReflectionType
138 DECLARE_INTERFACE(ID3D11ShaderReflectionType
)
140 STDMETHOD(GetDesc
)(THIS_ D3D11_SHADER_TYPE_DESC
*desc
) PURE
;
141 STDMETHOD_(struct ID3D11ShaderReflectionType
*, GetMemberTypeByIndex
)(THIS_ UINT index
) PURE
;
142 STDMETHOD_(struct ID3D11ShaderReflectionType
*, GetMemberTypeByName
)(THIS_
const char *name
) PURE
;
143 STDMETHOD_(const char *, GetMemberTypeName
)(THIS_ UINT index
) PURE
;
144 STDMETHOD(IsEqual
)(THIS_
struct ID3D11ShaderReflectionType
*type
) PURE
;
145 STDMETHOD_(struct ID3D11ShaderReflectionType
*, GetSubType
)(THIS
) PURE
;
146 STDMETHOD_(struct ID3D11ShaderReflectionType
*, GetBaseClass
)(THIS
) PURE
;
147 STDMETHOD_(UINT
, GetNumInterfaces
)(THIS
) PURE
;
148 STDMETHOD_(struct ID3D11ShaderReflectionType
*, GetInterfaceByIndex
)(THIS_ UINT index
) PURE
;
149 STDMETHOD(IsOfType
)(THIS_
struct ID3D11ShaderReflectionType
*type
) PURE
;
150 STDMETHOD(ImplementsInterface
)(THIS_ ID3D11ShaderReflectionType
*base
) PURE
;
154 DEFINE_GUID(IID_ID3D11ShaderReflectionVariable
, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);
156 #define INTERFACE ID3D11ShaderReflectionVariable
157 DECLARE_INTERFACE(ID3D11ShaderReflectionVariable
)
159 STDMETHOD(GetDesc
)(THIS_ D3D11_SHADER_VARIABLE_DESC
*desc
) PURE
;
160 STDMETHOD_(struct ID3D11ShaderReflectionType
*, GetType
)(THIS
) PURE
;
161 STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer
*, GetBuffer
)(THIS
) PURE
;
162 STDMETHOD_(UINT
, GetInterfaceSlot
)(THIS_ UINT index
) PURE
;
166 DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer
, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);
168 #define INTERFACE ID3D11ShaderReflectionConstantBuffer
169 DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer
)
171 STDMETHOD(GetDesc
)(THIS_ D3D11_SHADER_BUFFER_DESC
*desc
) PURE
;
172 STDMETHOD_(struct ID3D11ShaderReflectionVariable
*, GetVariableByIndex
)(THIS_ UINT index
) PURE
;
173 STDMETHOD_(struct ID3D11ShaderReflectionVariable
*, GetVariableByName
)(THIS_
const char *name
) PURE
;
177 #if D3D_COMPILER_VERSION <= 42
178 DEFINE_GUID(IID_ID3D11ShaderReflection
, 0x17f27486, 0xa342, 0x4d10, 0x88, 0x42, 0xab, 0x08, 0x74, 0xe7, 0xf6, 0x70);
179 #elif D3D_COMPILER_VERSION == 43
180 DEFINE_GUID(IID_ID3D11ShaderReflection
, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);
182 DEFINE_GUID(IID_ID3D11ShaderReflection
, 0x8d536ca1, 0x0cca, 0x4956, 0xa8, 0x37, 0x78, 0x69, 0x63, 0x75, 0x55, 0x84);
185 #define INTERFACE ID3D11ShaderReflection
186 DECLARE_INTERFACE_(ID3D11ShaderReflection
, IUnknown
)
188 /* IUnknown methods */
189 STDMETHOD(QueryInterface
)(THIS_ REFIID riid
, void **out
) PURE
;
190 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
191 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
192 /* ID3D11ShaderReflection methods */
193 STDMETHOD(GetDesc
)(THIS_ D3D11_SHADER_DESC
*desc
) PURE
;
194 STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer
*, GetConstantBufferByIndex
)(THIS_ UINT index
) PURE
;
195 STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer
*, GetConstantBufferByName
)(THIS_
const char *name
) PURE
;
196 STDMETHOD(GetResourceBindingDesc
)(THIS_ UINT index
, D3D11_SHADER_INPUT_BIND_DESC
*desc
) PURE
;
197 STDMETHOD(GetInputParameterDesc
)(THIS_ UINT index
, D3D11_SIGNATURE_PARAMETER_DESC
*desc
) PURE
;
198 STDMETHOD(GetOutputParameterDesc
)(THIS_ UINT index
, D3D11_SIGNATURE_PARAMETER_DESC
*desc
) PURE
;
199 STDMETHOD(GetPatchConstantParameterDesc
)(THIS_ UINT index
, D3D11_SIGNATURE_PARAMETER_DESC
*desc
) PURE
;
200 STDMETHOD_(struct ID3D11ShaderReflectionVariable
*, GetVariableByName
)(THIS_
const char *name
) PURE
;
201 STDMETHOD(GetResourceBindingDescByName
)(THIS_
const char *name
, D3D11_SHADER_INPUT_BIND_DESC
*desc
) PURE
;
202 STDMETHOD_(UINT
, GetMovInstructionCount
)(THIS
) PURE
;
203 STDMETHOD_(UINT
, GetMovcInstructionCount
)(THIS
) PURE
;
204 STDMETHOD_(UINT
, GetConversionInstructionCount
)(THIS
) PURE
;
205 STDMETHOD_(UINT
, GetBitwiseInstructionCount
)(THIS
) PURE
;
206 STDMETHOD_(D3D_PRIMITIVE
, GetGSInputPrimitive
)(THIS
) PURE
;
207 STDMETHOD_(BOOL
, IsSampleFrequencyShader
)(THIS
) PURE
;
208 STDMETHOD_(UINT
, GetNumInterfaceSlots
)(THIS
) PURE
;
209 STDMETHOD(GetMinFeatureLevel
)(THIS_
enum D3D_FEATURE_LEVEL
*level
) PURE
;
210 STDMETHOD_(UINT
, GetThreadGroupSize
)(THIS_ UINT
*sizex
, UINT
*sizey
, UINT
*sizez
) PURE
;
211 STDMETHOD_(UINT64
, GetRequiresFlags
)(THIS
) PURE
;
215 DEFINE_GUID(IID_ID3D11ModuleInstance
, 0x469e07f7, 0x45a, 0x48d5, 0xaa, 0x12, 0x68, 0xa4, 0x78, 0xcd, 0xf7, 0x5d);
217 #define INTERFACE ID3D11ModuleInstance
218 DECLARE_INTERFACE_(ID3D11ModuleInstance
, IUnknown
)
220 STDMETHOD(QueryInterface
)(THIS_ REFIID iid
, void **out
) PURE
;
221 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
222 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
224 /* ID3D11ModuleInstance methods */
225 STDMETHOD(BindConstantBuffer
)(THIS_ UINT srcslot
, UINT dstslot
, UINT dstoffset
) PURE
;
226 STDMETHOD(BindConstantBufferByName
)(THIS_
const char *name
, UINT dstslot
, UINT dstoffset
) PURE
;
228 STDMETHOD(BindResource
)(THIS_ UINT srcslot
, UINT dstslot
, UINT count
) PURE
;
229 STDMETHOD(BindResourceByName
)(THIS_
const char *name
, UINT dstslot
, UINT count
) PURE
;
231 STDMETHOD(BindSampler
)(THIS_ UINT srcslot
, UINT dstslot
, UINT count
) PURE
;
232 STDMETHOD(BindSamplerByName
)(THIS_
const char *name
, UINT dstslot
, UINT count
) PURE
;
234 STDMETHOD(BindUnorderedAccessView
)(THIS_ UINT srcslot
, UINT dstslot
, UINT count
) PURE
;
235 STDMETHOD(BindUnorderedAccessViewByName
)(THIS_
const char *name
, UINT dstslot
, UINT count
) PURE
;
237 STDMETHOD(BindResourceAsUnorderedAccessView
)(THIS_ UINT srcslot
, UINT dstslot
, UINT count
) PURE
;
238 STDMETHOD(BindResourceAsUnorderedAccessViewByName
)(THIS_
const char *name
, UINT dstslot
, UINT count
) PURE
;
242 DEFINE_GUID(IID_ID3D11Module
, 0xcac701ee, 0x80fc, 0x4122, 0x82, 0x42, 0x10, 0xb3, 0x9c, 0x8c, 0xec, 0x34);
244 #define INTERFACE ID3D11Module
245 DECLARE_INTERFACE_(ID3D11Module
, IUnknown
)
247 STDMETHOD(QueryInterface
)(THIS_ REFIID iid
, void **out
) PURE
;
248 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
249 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
251 /* ID3D11Module methods */
252 STDMETHOD(CreateInstance
)(THIS_
const char *instnamespace
, ID3D11ModuleInstance
**moduleinstance
) PURE
;