1/**************************************************************************
2 *
3 * Copyright 2010 Luca Barbieri
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial
15 * portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 **************************************************************************/
26
27import "d3d10.idl";
28
29cpp_quote("#define D3D10_TX_VERSION(a, b) (('T' << 24) | ('X' << 16) | ((a) << 8) | (b)))")
30
31const unsigned int D3D10_SHADER_DEBUG = (1 << 0);
32const unsigned int D3D10_SHADER_SKIP_VALIDATION = (1 << 1);
33const unsigned int D3D10_SHADER_SKIP_OPTIMIZATION = (1 << 2);
34const unsigned int D3D10_SHADER_PACK_MATRIX_ROW_MAJOR = (1 << 3);
35const unsigned int D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR = (1 << 4);
36const unsigned int D3D10_SHADER_PARTIAL_PRECISION = (1 << 5);
37const unsigned int D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT = (1 << 6);
38const unsigned int D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT = (1 << 7);
39const unsigned int D3D10_SHADER_NO_PRESHADER = (1 << 8);
40const unsigned int D3D10_SHADER_AVOID_FLOW_CONTROL = (1 << 9);
41const unsigned int D3D10_SHADER_PREFER_FLOW_CONTROL = (1 << 10);
42const unsigned int D3D10_SHADER_ENABLE_STRICTNESS = (1 << 11);
43const unsigned int D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY = (1 << 12);
44const unsigned int D3D10_SHADER_IEEE_STRICTNESS = (1 << 13);
45const unsigned int D3D10_SHADER_WARNINGS_ARE_ERRORS = (1 << 18);
46
47
48const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL0 = (1 << 14);
49const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL1 = 0;
50const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL2 = ((1 << 14) | (1 << 15));
51const unsigned int D3D10_SHADER_OPTIMIZATION_LEVEL3 = (1 << 15);
52
53typedef D3D_SHADER_MACRO D3D10_SHADER_MACRO;
54typedef D3D10_SHADER_MACRO* LPD3D10_SHADER_MACRO;
55
56
57typedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS;
58typedef D3D10_SHADER_VARIABLE_CLASS* LPD3D10_SHADER_VARIABLE_CLASS;
59typedef D3D_SHADER_VARIABLE_FLAGS D3D10_SHADER_VARIABLE_FLAGS;
60typedef D3D10_SHADER_VARIABLE_FLAGS* LPD3D10_SHADER_VARIABLE_FLAGS;
61typedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE;
62typedef D3D10_SHADER_VARIABLE_TYPE* LPD3D10_SHADER_VARIABLE_TYPE;
63typedef D3D_SHADER_INPUT_FLAGS D3D10_SHADER_INPUT_FLAGS;
64typedef D3D10_SHADER_INPUT_FLAGS* LPD3D10_SHADER_INPUT_FLAGS;
65typedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE;
66typedef D3D10_SHADER_INPUT_TYPE* LPD3D10_SHADER_INPUT_TYPE;
67typedef D3D_SHADER_CBUFFER_FLAGS D3D10_SHADER_CBUFFER_FLAGS;
68typedef D3D10_SHADER_CBUFFER_FLAGS* LPD3D10_SHADER_CBUFFER_FLAGS;
69typedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE;
70typedef D3D10_CBUFFER_TYPE* LPD3D10_CBUFFER_TYPE;
71typedef D3D_NAME D3D10_NAME;
72typedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE;
73typedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE;
74typedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE;
75typedef ID3DInclude* LPD3D10INCLUDE;
76
77cpp_quote("#define D3D10_SHVER_GET_TYPE(v) (((v) >> 16) & 0xffff)")
78cpp_quote("#define D3D10_SHVER_GET_MAJOR(v) (((v) >> 4) & 0xf)")
79cpp_quote("#define D3D10_SHVER_GET_MINOR(v) (((v) >> 0) & 0xf)")
80
81typedef struct _D3D10_SIGNATURE_PARAMETER_DESC
82{
83	LPCSTR SemanticName;
84	UINT SemanticIndex;
85	UINT Register;
86	D3D_NAME SystemValueType;
87	D3D_REGISTER_COMPONENT_TYPE ComponentType;
88	BYTE Mask;
89	BYTE ReadWriteMask;
90} D3D10_SIGNATURE_PARAMETER_DESC;
91
92typedef struct _D3D10_SHADER_BUFFER_DESC
93{
94	LPCSTR Name;
95	D3D_CBUFFER_TYPE Type;
96	UINT Variables;
97	UINT Size;
98	UINT uFlags;
99} D3D10_SHADER_BUFFER_DESC;
100
101typedef struct _D3D10_SHADER_VARIABLE_DESC
102{
103	LPCSTR Name;
104	UINT StartOffset;
105	UINT Size;
106	UINT uFlags;
107	LPVOID DefaultValue;
108	UINT StartTexture;
109	UINT TextureSize;
110	UINT StartSampler;
111	UINT SamplerSize;
112} D3D10_SHADER_VARIABLE_DESC;
113
114typedef struct _D3D10_SHADER_TYPE_DESC
115{
116	D3D_SHADER_VARIABLE_CLASS Class;
117	D3D_SHADER_VARIABLE_TYPE Type;
118	UINT Rows;
119	UINT Columns;
120	UINT Elements;
121	UINT Members;
122	UINT Offset;
123	LPCSTR Name;
124} D3D10_SHADER_TYPE_DESC;
125
126typedef D3D_TESSELLATOR_DOMAIN D3D10_TESSELLATOR_DOMAIN;
127typedef D3D_TESSELLATOR_PARTITIONING D3D10_TESSELLATOR_PARTITIONING;
128typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D10_TESSELLATOR_OUTPUT_PRIMITIVE;
129
130typedef struct _D3D10_SHADER_DESC
131{
132	UINT Version;
133	LPCSTR Creator;
134	UINT Flags;
135
136	UINT ConstantBuffers;
137	UINT BoundResources;
138	UINT InputParameters;
139	UINT OutputParameters;
140
141	UINT InstructionCount;
142	UINT TempRegisterCount;
143	UINT TempArrayCount;
144	UINT DefCount;
145	UINT DclCount;
146	UINT TextureNormalInstructions;
147	UINT TextureLoadInstructions;
148	UINT TextureCompInstructions;
149	UINT TextureBiasInstructions;
150	UINT TextureGradientInstructions;
151	UINT FloatInstructionCount;
152	UINT IntInstructionCount;
153	UINT UintInstructionCount;
154	UINT StaticFlowControlCount;
155	UINT DynamicFlowControlCount;
156	UINT MacroInstructionCount;
157	UINT ArrayInstructionCount;
158	UINT CutInstructionCount;
159	UINT EmitInstructionCount;
160	D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
161	UINT GSMaxOutputVertexCount;
162} D3D10_SHADER_DESC;
163
164typedef struct _D3D10_SHADER_INPUT_BIND_DESC
165{
166	LPCSTR Name;
167	D3D_SHADER_INPUT_TYPE Type;
168	UINT BindPoint;
169	UINT BindCount;
170
171	UINT uFlags;
172	D3D_RESOURCE_RETURN_TYPE ReturnType;
173	D3D_SRV_DIMENSION Dimension;
174	UINT NumSamples;
175} D3D10_SHADER_INPUT_BIND_DESC;
176
177[local, object, uuid("C530AD7D-9B16-4395-A979-BA2ECFF83ADD")]
178interface ID3D10ShaderReflectionType
179{
180	HRESULT GetDesc(
181		[out] D3D10_SHADER_TYPE_DESC *a
182	);
183
184	ID3D10ShaderReflectionType* GetMemberTypeByIndex(
185		[in] UINT a
186	);
187
188	ID3D10ShaderReflectionType* GetMemberTypeByName(
189		[in] LPCSTR a
190	);
191
192	LPCSTR GetMemberTypeName(
193		[in] UINT a
194	);
195};
196
197interface ID3D10ShaderReflectionConstantBuffer;
198
199[object, local, uuid("1BF63C95-2650-405d-99C1-3636BD1DA0A1")]
200interface ID3D10ShaderReflectionVariable
201{
202	HRESULT GetDesc(
203		[out] D3D10_SHADER_VARIABLE_DESC *a
204	);
205
206	ID3D10ShaderReflectionType* GetType();
207};
208
209[object, local, uuid("66C66A94-DDDD-4b62-A66A-F0DA33C2B4D0")]
210interface ID3D10ShaderReflectionConstantBuffer
211{
212	HRESULT GetDesc(
213		[out] D3D10_SHADER_BUFFER_DESC *a
214	);
215
216	ID3D10ShaderReflectionVariable* GetVariableByIndex(
217		[in] UINT a
218	);
219
220	ID3D10ShaderReflectionVariable* GetVariableByName(
221		[in] LPCSTR a
222	);
223};
224
225[object,local,uuid("D40E20B6-F8F7-42ad-AB20-4BAF8F15DFAA")]
226interface ID3D10ShaderReflection : IUnknown
227{
228	HRESULT GetDesc(
229		[out] D3D10_SHADER_DESC *a
230	);
231
232	ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByIndex(
233		[in] UINT a
234	);
235
236	ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByName(
237		[in] LPCSTR a
238	);
239
240	HRESULT GetResourceBindingDesc(
241		[in] UINT a,
242		[out] D3D10_SHADER_INPUT_BIND_DESC *b
243	);
244
245	HRESULT GetInputParameterDesc(
246		[in] UINT a,
247		[out] D3D10_SIGNATURE_PARAMETER_DESC *b
248	);
249
250	HRESULT GetOutputParameterDesc
251	(
252		[in] UINT a,
253		[out] D3D10_SIGNATURE_PARAMETER_DESC *b
254	);
255};
256
257HRESULT D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, const D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude,
258	LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs);
259HRESULT D3D10DisassembleShader(const void *pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob** ppDisassembly);
260LPCSTR D3D10GetPixelShaderProfile(ID3D10Device *pDevice);
261LPCSTR D3D10GetVertexShaderProfile(ID3D10Device *pDevice);
262LPCSTR D3D10GetGeometryShaderProfile(ID3D10Device *pDevice);
263HRESULT D3D10ReflectShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection **ppReflector);
264HRESULT D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, const D3D10_SHADER_MACRO* pDefines,
265	LPD3D10INCLUDE pInclude, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs);
266HRESULT D3D10GetInputSignatureBlob(const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);
267HRESULT D3D10GetOutputSignatureBlob(const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);
268HRESULT D3D10GetInputAndOutputSignatureBlob(const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);
269HRESULT D3D10GetShaderDebugInfo(const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob** ppDebugInfo);
270