1 /***********************************************************************\
2 *                             d3d10shader.d                             *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                       Placed into public domain                       *
7 \***********************************************************************/
8 module win32.directx.d3d10shader;
9 version(Windows):
10 
11 private import win32.windows;
12 private import win32.directx.d3d10;
13 
14 
15 uint D3D10_TX_VERSION(uint _Major, uint _Minor) {
16 	return ('T' << 24) | ('X' << 16) | (_Major << 8) | _Minor;
17 }
18 
19 const D3D10_SHADER_DEBUG							= 1 << 0;
20 const D3D10_SHADER_SKIP_VALIDATION					= 1 << 1;
21 const D3D10_SHADER_SKIP_OPTIMIZATION				= 1 << 2;
22 const D3D10_SHADER_PACK_MATRIX_ROW_MAJOR			= 1 << 3;
23 const D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR			= 1 << 4;
24 const D3D10_SHADER_PARTIAL_PRECISION				= 1 << 5;
25 const D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT			= 1 << 6;
26 const D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT			= 1 << 7;
27 const D3D10_SHADER_NO_PRESHADER						= 1 << 8;
28 const D3D10_SHADER_AVOID_FLOW_CONTROL				= 1 << 9;
29 const D3D10_SHADER_PREFER_FLOW_CONTROL				= 1 << 10;
30 const D3D10_SHADER_ENABLE_STRICTNESS				= 1 << 11;
31 const D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY	= 1 << 12;
32 const D3D10_SHADER_IEEE_STRICTNESS					= 1 << 13;
33 const D3D10_SHADER_OPTIMIZATION_LEVEL0				= 1 << 14;
34 const D3D10_SHADER_OPTIMIZATION_LEVEL1				= 0;
35 const D3D10_SHADER_OPTIMIZATION_LEVEL2				= (1 << 14) | (1 << 15);
36 const D3D10_SHADER_OPTIMIZATION_LEVEL3				= 1 << 15;
37 
38 struct D3D10_SHADER_MACRO {
39 	LPCSTR Name;
40 	LPCSTR Definition;
41 }
42 
43 enum D3D10_SHADER_VARIABLE_CLASS {
44 	D3D10_SVC_SCALAR,
45 	D3D10_SVC_VECTOR,
46 	D3D10_SVC_MATRIX_ROWS,
47 	D3D10_SVC_MATRIX_COLUMNS,
48 	D3D10_SVC_OBJECT,
49 	D3D10_SVC_STRUCT,
50 	D3D10_SVC_FORCE_DWORD = 0x7fffffff
51 }
52 
53 enum D3D10_SHADER_VARIABLE_FLAGS {
54 	D3D10_SVF_USERPACKED	= 1,
55 	D3D10_SVF_USED			= 2,
56 	D3D10_SVF_FORCE_DWORD	= 0x7fffffff
57 }
58 
59 enum D3D10_SHADER_VARIABLE_TYPE {
60 	D3D10_SVT_VOID = 0,
61 	D3D10_SVT_BOOL = 1,
62 	D3D10_SVT_INT = 2,
63 	D3D10_SVT_FLOAT = 3,
64 	D3D10_SVT_STRING = 4,
65 	D3D10_SVT_TEXTURE = 5,
66 	D3D10_SVT_TEXTURE1D = 6,
67 	D3D10_SVT_TEXTURE2D = 7,
68 	D3D10_SVT_TEXTURE3D = 8,
69 	D3D10_SVT_TEXTURECUBE = 9,
70 	D3D10_SVT_SAMPLER = 10,
71 	D3D10_SVT_PIXELSHADER = 15,
72 	D3D10_SVT_VERTEXSHADER = 16,
73 	D3D10_SVT_UINT = 19,
74 	D3D10_SVT_UINT8 = 20,
75 	D3D10_SVT_GEOMETRYSHADER = 21,
76 	D3D10_SVT_RASTERIZER = 22,
77 	D3D10_SVT_DEPTHSTENCIL = 23,
78 	D3D10_SVT_BLEND = 24,
79 	D3D10_SVT_BUFFER = 25,
80 	D3D10_SVT_CBUFFER = 26,
81 	D3D10_SVT_TBUFFER = 27,
82 	D3D10_SVT_TEXTURE1DARRAY = 28,
83 	D3D10_SVT_TEXTURE2DARRAY = 29,
84 	D3D10_SVT_RENDERTARGETVIEW = 30,
85 	D3D10_SVT_DEPTHSTENCILVIEW = 31,
86 	D3D10_SVT_TEXTURE2DMS = 32,
87 	D3D10_SVT_TEXTURE2DMSARRAY = 33,
88 	D3D10_SVT_TEXTURECUBEARRAY = 34,
89 	D3D10_SVT_FORCE_DWORD = 0x7fffffff
90 }
91 
92 enum D3D10_SHADER_INPUT_FLAGS {
93 	D3D10_SIF_USERPACKED = 1,
94 	D3D10_SIF_COMPARISON_SAMPLER = 2,
95 	D3D10_SIF_TEXTURE_COMPONENT_0 = 4,
96 	D3D10_SIF_TEXTURE_COMPONENT_1 = 8,
97 	D3D10_SIF_TEXTURE_COMPONENTS = 12,
98 	D3D10_SIF_FORCE_DWORD = 0x7fffffff
99 }
100 
101 enum D3D10_SHADER_INPUT_TYPE {
102 	D3D10_SIT_CBUFFER,
103 	D3D10_SIT_TBUFFER,
104 	D3D10_SIT_TEXTURE,
105 	D3D10_SIT_SAMPLER
106 }
107 
108 enum D3D10_SHADER_CBUFFER_FLAGS {
109 	D3D10_CBF_USERPACKED = 1,
110 	D3D10_CBF_FORCE_DWORD = 0x7fffffff
111 }
112 
113 enum D3D10_CBUFFER_TYPE {
114 	D3D10_CT_CBUFFER,
115 	D3D10_CT_TBUFFER
116 }
117 
118 enum D3D10_NAME {
119 	D3D10_NAME_UNDEFINED = 0,
120 	D3D10_NAME_POSITION = 1,
121 	D3D10_NAME_CLIP_DISTANCE = 2,
122 	D3D10_NAME_CULL_DISTANCE = 3,
123 	D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = 4,
124 	D3D10_NAME_VIEWPORT_ARRAY_INDEX = 5,
125 	D3D10_NAME_VERTEX_ID = 6,
126 	D3D10_NAME_PRIMITIVE_ID = 7,
127 	D3D10_NAME_INSTANCE_ID = 8,
128 	D3D10_NAME_IS_FRONT_FACE = 9,
129 	D3D10_NAME_SAMPLE_INDEX = 10,
130 	D3D10_NAME_TARGET = 64,
131 	D3D10_NAME_DEPTH = 65,
132 	D3D10_NAME_COVERAGE = 66
133 }
134 
135 enum D3D10_RESOURCE_RETURN_TYPE {
136 	D3D10_RETURN_TYPE_UNORM = 1,
137 	D3D10_RETURN_TYPE_SNORM,
138 	D3D10_RETURN_TYPE_SINT,
139 	D3D10_RETURN_TYPE_UINT,
140 	D3D10_RETURN_TYPE_FLOAT,
141 	D3D10_RETURN_TYPE_MIXED
142 }
143 
144 enum D3D10_REGISTER_COMPONENT_TYPE {
145 	D3D10_REGISTER_COMPONENT_UNKNOWN = 0,
146 	D3D10_REGISTER_COMPONENT_UINT32,
147 	D3D10_REGISTER_COMPONENT_SINT32,
148 	D3D10_REGISTER_COMPONENT_FLOAT32
149 }
150 
151 enum D3D10_INCLUDE_TYPE {
152     D3D10_INCLUDE_LOCAL,
153     D3D10_INCLUDE_SYSTEM,
154     D3D10_INCLUDE_FORCE_DWORD = 0x7fffffff
155 }
156 
157 interface ID3D10Include {
158 /* TODO: fix vtbl[0] bug
159 	extern(Windows) :
160 	HRESULT Open(D3D10_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID* ppData, UINT* pBytes);
161 	HRESULT Close(LPCVOID pData);
162 	*/
163 }
164 
165 struct D3D10_SHADER_DESC {
166 	UINT	Version;
167 	LPCSTR	Creator;
168 	UINT	Flags;
169 	UINT	ConstantBuffers;
170 	UINT	BoundResources;
171 	UINT	InputParameters;
172 	UINT	OutputParameters;
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	CutInstructionCount;
191 	UINT	EmitInstructionCount;
192 	D3D10_PRIMITIVE_TOPOLOGY	GSOutputTopology;
193 	UINT	GSMaxOutputVertexCount;
194 }
195 
196 struct D3D10_SHADER_BUFFER_DESC {
197 	LPCSTR				Name;
198 	D3D10_CBUFFER_TYPE	Type;
199 	UINT				Variables;
200 	UINT				Size;
201 	UINT				uFlags;
202 }
203 
204 struct D3D10_SHADER_VARIABLE_DESC {
205 	LPCSTR	Name;
206 	UINT	StartOffset;
207 	UINT	Size;
208 	UINT	uFlags;
209 	LPVOID	DefaultValue;
210 }
211 
212 struct D3D10_SHADER_TYPE_DESC {
213 	D3D10_SHADER_VARIABLE_CLASS	Class;
214 	D3D10_SHADER_VARIABLE_TYPE	Type;
215 	UINT	Rows;
216 	UINT	Columns;
217 	UINT	Elements;
218 	UINT	Members;
219 	UINT	Offset;
220 }
221 
222 struct D3D10_SHADER_INPUT_BIND_DESC {
223 	LPCSTR	Name;
224 	D3D10_SHADER_INPUT_TYPE	Type;
225 	UINT	BindPoint;
226 	UINT	BindCount;
227 	UINT	uFlags;
228 	D3D10_RESOURCE_RETURN_TYPE	ReturnType;
229 	D3D10_SRV_DIMENSION	Dimension;
230 	UINT	NumSamples;
231 }
232 
233 struct D3D10_SIGNATURE_PARAMETER_DESC {
234     LPCSTR	SemanticName;
235     UINT	SemanticIndex;
236     UINT	Register;
237     D3D10_NAME	SystemValueType;
238     D3D10_REGISTER_COMPONENT_TYPE	ComponentType;
239     BYTE	Mask;
240     BYTE	ReadWriteMask;
241 }
242 
243 extern(C) const GUID IID_ID3D10ShaderReflectionType = {0xc530ad7d, 0x9b16, 0x4395, [0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd]};
244 
245 interface ID3D10ShaderReflectionType {
246 /* TODO: fix vtbl[0] bug
247 	extern(Windows) :
248 	HRESULT GetDesc(D3D10_SHADER_TYPE_DESC* pDesc);
249 	ID3D10ShaderReflectionType* GetMemberTypeByIndex(UINT Index);
250 	ID3D10ShaderReflectionType* GetMemberTypeByName(LPCSTR Name);
251 	LPCSTR GetMemberTypeName(UINT Index);
252 	*/
253 }
254 
255 extern(C) const GUID IID_ID3D10ShaderReflectionVariable = {0x1bf63c95, 0x2650, 0x405d, [0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1]};
256 
257 interface ID3D10ShaderReflectionVariable {
258 /* TODO: fix vtbl[0] bug
259 	extern(Windows) :
260 	HRESULT GetDesc(D3D10_SHADER_VARIABLE_DESC* pDesc);
261 	ID3D10ShaderReflectionType* GetType();
262 	*/
263 }
264 
265 extern(C) const GUID IID_ID3D10ShaderReflectionConstantBuffer = {0x66c66a94, 0xdddd, 0x4b62, [0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0]};
266 
267 interface ID3D10ShaderReflectionConstantBuffer {
268 /* TODO: fix vtbl[0] bug
269 	extern(Windows) :
270 	HRESULT GetDesc(D3D10_SHADER_BUFFER_DESC* pDesc);
271 	ID3D10ShaderReflectionVariable* GetVariableByIndex(UINT Index);
272 	ID3D10ShaderReflectionVariable* GetVariableByName(LPCSTR Name);
273 	*/
274 }
275 
276 extern(C) const GUID IID_ID3D10ShaderReflection = {0xd40e20b6, 0xf8f7, 0x42ad, [0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa]};
277 
278 interface ID3D10ShaderReflection : IUnknown {
279 	extern(Windows) :
280 	HRESULT QueryInterface(REFIID iid, LPVOID* ppv);
281 	ULONG AddRef();
282 	ULONG Release();
283 	HRESULT GetDesc(D3D10_SHADER_DESC* pDesc);
284 	ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByIndex(UINT Index);
285 	ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByName(LPCSTR Name);
286 	HRESULT GetResourceBindingDesc(UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC* pDesc);
287 	HRESULT GetInputParameterDesc(UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc);
288 	HRESULT GetOutputParameterDesc(UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc);
289 }
290 
291 HRESULT D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob* ppShader, ID3D10Blob* ppErrorMsgs);
292 HRESULT D3D10DisassembleShader(void* pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob* ppDisassembly);
293 LPCSTR D3D10GetPixelShaderProfile(ID3D10Device pDevice);
294 LPCSTR D3D10GetVertexShaderProfile(ID3D10Device pDevice);
295 LPCSTR D3D10GetGeometryShaderProfile(ID3D10Device pDevice);
296 HRESULT D3D10ReflectShader(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection* ppReflector);
297 HRESULT D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, ID3D10Blob* ppShaderText, ID3D10Blob* ppErrorMsgs);
298 HRESULT D3D10GetInputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob);
299 HRESULT D3D10GetOutputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob);
300 HRESULT D3D10GetInputAndOutputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob);
301 HRESULT D3D10GetShaderDebugInfo(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppDebugInfo);
302