1use ctypes::c_void;
7use shared::basetsd::SIZE_T;
8use shared::guiddef::REFIID;
9use shared::minwindef::{BOOL, DWORD, LPCVOID, LPVOID, UINT};
10use um::d3d11shader::{ID3D11FunctionLinkingGraph, ID3D11Linker, ID3D11Module};
11use um::d3dcommon::{D3D_SHADER_MACRO, ID3DBlob, ID3DInclude};
12use um::winnt::{HRESULT, LPCSTR, LPCWSTR};
13pub const D3DCOMPILER_DLL: &'static str = "d3dcompiler_47.dll";
14pub const D3D_COMPILER_VERSION: DWORD = 47;
15extern "system" {
16 pub fn D3DReadFileToBlob(
17 pFileName: LPCWSTR,
18 ppContents: *mut *mut ID3DBlob,
19 ) -> HRESULT;
20 pub fn D3DWriteBlobToFile(
21 pBlob: *mut ID3DBlob,
22 pFileName: LPCWSTR,
23 bOverwrite: BOOL,
24 ) -> HRESULT;
25}
26pub const D3DCOMPILE_DEBUG: DWORD = 1 << 0;
27pub const D3DCOMPILE_SKIP_VALIDATION: DWORD = 1 << 1;
28pub const D3DCOMPILE_SKIP_OPTIMIZATION: DWORD = 1 << 2;
29pub const D3DCOMPILE_PACK_MATRIX_ROW_MAJOR: DWORD = 1 << 3;
30pub const D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR: DWORD = 1 << 4;
31pub const D3DCOMPILE_PARTIAL_PRECISION: DWORD = 1 << 5;
32pub const D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT: DWORD = 1 << 6;
33pub const D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT: DWORD = 1 << 7;
34pub const D3DCOMPILE_NO_PRESHADER: DWORD = 1 << 8;
35pub const D3DCOMPILE_AVOID_FLOW_CONTROL: DWORD = 1 << 9;
36pub const D3DCOMPILE_PREFER_FLOW_CONTROL: DWORD = 1 << 10;
37pub const D3DCOMPILE_ENABLE_STRICTNESS: DWORD = 1 << 11;
38pub const D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY: DWORD = 1 << 12;
39pub const D3DCOMPILE_IEEE_STRICTNESS: DWORD = 1 << 13;
40pub const D3DCOMPILE_OPTIMIZATION_LEVEL0: DWORD = 1 << 14;
41pub const D3DCOMPILE_OPTIMIZATION_LEVEL1: DWORD = 0;
42pub const D3DCOMPILE_OPTIMIZATION_LEVEL2: DWORD = (1 << 14) | (1 << 15);
43pub const D3DCOMPILE_OPTIMIZATION_LEVEL3: DWORD = 1 << 15;
44pub const D3DCOMPILE_RESERVED16: DWORD = 1 << 16;
45pub const D3DCOMPILE_RESERVED17: DWORD = 1 << 17;
46pub const D3DCOMPILE_WARNINGS_ARE_ERRORS: DWORD = 1 << 18;
47pub const D3DCOMPILE_RESOURCES_MAY_ALIAS: DWORD = 1 << 19;
48pub const D3DCOMPILE_ENABLE_UNBOUNDED_DESCRIPTOR_TABLES: DWORD = 1 << 20;
49pub const D3DCOMPILE_ALL_RESOURCES_BOUND: DWORD = 1 << 21;
50pub const D3DCOMPILE_EFFECT_CHILD_EFFECT: DWORD = 1 << 0;
51pub const D3DCOMPILE_EFFECT_ALLOW_SLOW_OPS: DWORD = 1 << 1;
52pub const D3D_COMPILE_STANDARD_FILE_INCLUDE: *mut ID3DInclude = 1 as *mut ID3DInclude;
53extern "system" {
54 pub fn D3DCompile(
55 pSrcData: LPCVOID,
56 SrcDataSize: SIZE_T,
57 pSourceName: LPCSTR,
58 pDefines: *const D3D_SHADER_MACRO,
59 pInclude: *mut ID3DInclude,
60 pEntrypoint: LPCSTR,
61 pTarget: LPCSTR,
62 Flags1: UINT,
63 Flags2: UINT,
64 ppCode: *mut *mut ID3DBlob,
65 ppErrorMsgs: *mut *mut ID3DBlob,
66 ) -> HRESULT;
67}
68pub const D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS: DWORD = 0x00000001;
69pub const D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS: DWORD = 0x00000002;
70pub const D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH: DWORD = 0x00000004;
71extern "system" {
72 pub fn D3DCompile2(
73 pSrcData: LPCVOID,
74 SrcDataSize: SIZE_T,
75 pSourceName: LPCSTR,
76 pDefines: *const D3D_SHADER_MACRO,
77 pInclude: *mut ID3DInclude,
78 pEntrypoint: LPCSTR,
79 pTarget: LPCSTR,
80 Flags1: UINT,
81 Flags2: UINT,
82 SecondaryDataFlags: UINT,
83 pSecondaryData: LPCVOID,
84 SecondaryDataSize: SIZE_T,
85 ppCode: *mut *mut ID3DBlob,
86 ppErrorMsgs: *mut *mut ID3DBlob,
87 ) -> HRESULT;
88 pub fn D3DCompileFromFile(
89 pFileName: LPCWSTR,
90 pDefines: *const D3D_SHADER_MACRO,
91 pInclude: *mut ID3DInclude,
92 pEntrypoint: LPCSTR,
93 pTarget: LPCSTR,
94 Flags1: UINT,
95 Flags2: UINT,
96 ppCode: *mut *mut ID3DBlob,
97 ppErrorMsgs: *mut *mut ID3DBlob,
98 ) -> HRESULT;
99 pub fn D3DPreprocess(
100 pSrcData: LPCVOID,
101 SrcDataSize: SIZE_T,
102 pSourceName: LPCSTR,
103 pDefines: *const D3D_SHADER_MACRO,
104 pInclude: *mut ID3DInclude,
105 ppCodeText: *mut *mut ID3DBlob,
106 ppErrorMsgs: *mut *mut ID3DBlob,
107 ) -> HRESULT;
108 pub fn D3DGetDebugInfo(
109 pSrcData: LPCVOID,
110 SrcDataSize: SIZE_T,
111 ppDebugInfo: *mut *mut ID3DBlob,
112 ) -> HRESULT;
113 pub fn D3DReflect(
114 pSrcData: LPCVOID,
115 SrcDataSize: SIZE_T,
116 pInterface: REFIID,
117 ppReflector: *mut *mut c_void,
118 ) -> HRESULT;
119 pub fn D3DReflectLibrary(
120 pSrcData: LPCVOID,
121 SrcDataSize: SIZE_T,
122 riid: REFIID,
123 ppReflector: *mut LPVOID,
124 ) -> HRESULT;
125}
126pub const D3D_DISASM_ENABLE_COLOR_CODE: DWORD = 0x00000001;
127pub const D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS: DWORD = 0x00000002;
128pub const D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING: DWORD = 0x00000004;
129pub const D3D_DISASM_ENABLE_INSTRUCTION_CYCLE: DWORD = 0x00000008;
130pub const D3D_DISASM_DISABLE_DEBUG_INFO: DWORD = 0x00000010;
131pub const D3D_DISASM_ENABLE_INSTRUCTION_OFFSET: DWORD = 0x00000020;
132pub const D3D_DISASM_INSTRUCTION_ONLY: DWORD = 0x00000040;
133pub const D3D_DISASM_PRINT_HEX_LITERALS: DWORD = 0x00000080;
134extern "system" {
135 pub fn D3DDisassemble(
136 pSrcData: LPCVOID,
137 SrcDataSize: SIZE_T,
138 Flags: UINT,
139 szComments: LPCSTR,
140 ppDisassembly: *mut *mut ID3DBlob,
141 ) -> HRESULT;
142 pub fn D3DDisassembleRegion(
143 pSrcData: LPCVOID,
144 SrcDataSize: SIZE_T,
145 Flags: UINT,
146 szComments: LPCSTR,
147 StartByteOffset: SIZE_T,
148 NumInsts: SIZE_T,
149 pFinishByteOffset: *mut SIZE_T,
150 ppDisassembly: *mut *mut ID3DBlob,
151 ) -> HRESULT;
152 pub fn D3DCreateLinker(
153 ppLinker: *mut *mut ID3D11Linker,
154 ) -> HRESULT;
155 pub fn D3DLoadModule(
156 pSrcData: LPCVOID,
157 cbSrcDataSize: SIZE_T,
158 ppModule: *mut *mut ID3D11Module,
159 ) -> HRESULT;
160 pub fn D3DCreateFunctionLinkingGraph(
161 uFlags: UINT,
162 ppFunctionLinkingGraph: *mut *mut ID3D11FunctionLinkingGraph,
163 ) -> HRESULT;
164}
165pub const D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE: DWORD = 0x00000001;
166extern "system" {
167 pub fn D3DGetTraceInstructionOffsets(
168 pSrcData: LPCVOID,
169 SrcDataSize: SIZE_T,
170 Flags: UINT,
171 StartInstIndex: SIZE_T,
172 NumInsts: SIZE_T,
173 pOffsets: *mut SIZE_T,
174 pTotalInsts: *mut SIZE_T,
175 ) -> HRESULT;
176 pub fn D3DGetInputSignatureBlob(
177 pSrcData: LPCVOID,
178 SrcDataSize: SIZE_T,
179 ppSignatureBlob: *mut *mut ID3DBlob,
180 ) -> HRESULT;
181 pub fn D3DGetOutputSignatureBlob(
182 pSrcData: LPCVOID,
183 SrcDataSize: SIZE_T,
184 ppSignatureBlob: *mut *mut ID3DBlob,
185 ) -> HRESULT;
186 pub fn D3DGetInputAndOutputSignatureBlob(
187 pSrcData: LPCVOID,
188 SrcDataSize: SIZE_T,
189 ppSignatureBlob: *mut *mut ID3DBlob,
190 ) -> HRESULT;
191}
192ENUM!{enum D3DCOMPILER_STRIP_FLAGS {
193 D3DCOMPILER_STRIP_REFLECTION_DATA = 0x00000001,
194 D3DCOMPILER_STRIP_DEBUG_INFO = 0x00000002,
195 D3DCOMPILER_STRIP_TEST_BLOBS = 0x00000004,
196 D3DCOMPILER_STRIP_PRIVATE_DATA = 0x00000008,
197 D3DCOMPILER_STRIP_ROOT_SIGNATURE = 0x00000010,
198 D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff,
199}}
200extern "system" {
201 pub fn D3DStripShader(
202 pShaderBytecode: LPCVOID,
203 BytecodeLength: SIZE_T,
204 uStripFlags: UINT,
205 ppStrippedBlob: *mut *mut ID3DBlob,
206 ) -> HRESULT;
207}
208ENUM!{enum D3D_BLOB_PART {
209 D3D_BLOB_INPUT_SIGNATURE_BLOB,
210 D3D_BLOB_OUTPUT_SIGNATURE_BLOB,
211 D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB,
212 D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB,
213 D3D_BLOB_ALL_SIGNATURE_BLOB,
214 D3D_BLOB_DEBUG_INFO,
215 D3D_BLOB_LEGACY_SHADER,
216 D3D_BLOB_XNA_PREPASS_SHADER,
217 D3D_BLOB_XNA_SHADER,
218 D3D_BLOB_PDB,
219 D3D_BLOB_PRIVATE_DATA,
220 D3D_BLOB_ROOT_SIGNATURE,
221 D3D_BLOB_TEST_ALTERNATE_SHADER = 0x8000,
222 D3D_BLOB_TEST_COMPILE_DETAILS,
223 D3D_BLOB_TEST_COMPILE_PERF,
224 D3D_BLOB_TEST_COMPILE_REPORT,
225}}
226extern "system" {
227 pub fn D3DGetBlobPart(
228 pSrcData: LPCVOID,
229 SrcDataSize: SIZE_T,
230 Part: D3D_BLOB_PART,
231 Flags: UINT,
232 ppPart: *mut *mut ID3DBlob,
233 ) -> HRESULT;
234 pub fn D3DSetBlobPart(
235 pSrcData: LPCVOID,
236 SrcDataSize: SIZE_T,
237 Part: D3D_BLOB_PART,
238 Flags: UINT,
239 pPart: LPCVOID,
240 PartSize: SIZE_T,
241 ppNewShader: *mut *mut ID3DBlob,
242 ) -> HRESULT;
243 pub fn D3DCreateBlob(
244 Size: SIZE_T,
245 ppBlob: *mut *mut ID3DBlob,
246 ) -> HRESULT;
247}
248STRUCT!{struct D3D_SHADER_DATA {
249 pBytecode: LPCVOID,
250 BytecodeLength: SIZE_T,
251}}
252extern "system" {
253 pub fn D3DCompressShaders(
254 uNumShaders: UINT,
255 pShaderData: *mut D3D_SHADER_DATA,
256 uFlags: UINT,
257 ppCompressedData: *mut *mut ID3DBlob,
258 ) -> HRESULT;
259 pub fn D3DDecompressShaders(
260 pSrcData: LPCVOID,
261 SrcDataSize: SIZE_T,
262 uNumShaders: UINT,
263 uStartIndex: UINT,
264 pIndices: *mut UINT,
265 uFlags: UINT,
266 ppShaders: *mut *mut ID3DBlob,
267 pTotalShaders: *mut UINT,
268 ) -> HRESULT;
269 }