winapi_ui_automation/um/
d3dcompiler.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6use 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    // pub fn D3DDisassemble10Effect(
270    //     pEffect: *mut ID3D10Effect,
271    //     Flags: UINT,
272    //     ppDisassembly: *mut *mut ID3DBlob,
273    // ) -> HRESULT;
274}