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.
6 use ctypes::{c_char, c_int, c_void};
7 use shared::basetsd::{SIZE_T, UINT64};
8 use shared::guiddef::{GUID, REFIID};
9 use shared::minwindef::{BOOL, DWORD, UINT};
10 use um::unknwnbase::{IUnknown, IUnknownVtbl};
11 use um::winnt::{HRESULT, LPCSTR};
12 pub const DXGI_DEBUG_BINARY_VERSION: DWORD = 1;
13 ENUM!{enum DXGI_DEBUG_RLO_FLAGS {
14     DXGI_DEBUG_RLO_SUMMARY = 0x1,
15     DXGI_DEBUG_RLO_DETAIL = 0x2,
16     DXGI_DEBUG_RLO_IGNORE_INTERNAL = 0x4,
17     DXGI_DEBUG_RLO_ALL = 0x7,
18 }}
19 pub type DXGI_DEBUG_ID = GUID;
20 DEFINE_GUID!{DXGI_DEBUG_ALL,
21     0xe48ae283, 0xda80, 0x490b, 0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x08}
22 DEFINE_GUID!{DXGI_DEBUG_DX,
23     0x35cdd7fc, 0x13b2, 0x421d, 0xa5, 0xd7, 0x7e, 0x44, 0x51, 0x28, 0x7d, 0x64}
24 DEFINE_GUID!{DXGI_DEBUG_DXGI,
25     0x25cddaa4, 0xb1c6, 0x47e1, 0xac, 0x3e, 0x98, 0x87, 0x5b, 0x5a, 0x2e, 0x2a}
26 DEFINE_GUID!{DXGI_DEBUG_APP,
27     0x06cd6e01, 0x4219, 0x4ebd, 0x87, 0x09, 0x27, 0xed, 0x23, 0x36, 0x0c, 0x62}
28 ENUM!{enum DXGI_INFO_QUEUE_MESSAGE_CATEGORY {
29     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_UNKNOWN = 0,
30     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_MISCELLANEOUS = 1,
31     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_INITIALIZATION = 2,
32     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_CLEANUP = 3,
33     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_COMPILATION = 4,
34     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_CREATION = 5,
35     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_SETTING = 6,
36     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_GETTING = 7,
37     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = 8,
38     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_EXECUTION = 9,
39     DXGI_INFO_QUEUE_MESSAGE_CATEGORY_SHADER = 10,
40 }}
41 ENUM!{enum DXGI_INFO_QUEUE_MESSAGE_SEVERITY {
42     DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION = 0,
43     DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR = 1,
44     DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING = 2,
45     DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO = 3,
46     DXGI_INFO_QUEUE_MESSAGE_SEVERITY_MESSAGE = 4,
47 }}
48 pub type DXGI_INFO_QUEUE_MESSAGE_ID = c_int;
49 STRUCT!{struct DXGI_INFO_QUEUE_MESSAGE {
50     Producer: DXGI_DEBUG_ID,
51     Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
52     Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
53     ID: DXGI_INFO_QUEUE_MESSAGE_ID,
54     pDescription: *const c_char,
55     DescriptionByteLength: SIZE_T,
56 }}
57 STRUCT!{struct DXGI_INFO_QUEUE_FILTER_DESC {
58     NumCategories: UINT,
59     pCategoryList: *mut DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
60     NumSeverities: UINT,
61     pSeverityList: *mut DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
62     NumIDs: UINT,
63     pIDList: *mut DXGI_INFO_QUEUE_MESSAGE_ID,
64 }}
65 STRUCT!{struct DXGI_INFO_QUEUE_FILTER {
66     AllowList: DXGI_INFO_QUEUE_FILTER_DESC,
67     DenyList: DXGI_INFO_QUEUE_FILTER_DESC,
68 }}
69 pub const DXGI_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT: DWORD = 1024;
70 extern "system" {
DXGIGetDebugInterface( riid: REFIID, ppDebug: *mut *mut c_void, ) -> HRESULT71     pub fn DXGIGetDebugInterface(
72         riid: REFIID,
73         ppDebug: *mut *mut c_void,
74     ) -> HRESULT;
75 }
76 RIDL!{#[uuid(0xd67441c7, 0x672a, 0x476f, 0x9e, 0x82, 0xcd, 0x55, 0xb4, 0x49, 0x49, 0xce)]
77 interface IDXGIInfoQueue(IDXGIInfoQueueVtbl): IUnknown(IUnknownVtbl) {
78     fn SetMessageCountLimit(
79         Producer: DXGI_DEBUG_ID,
80         MessageCountLimit: UINT64,
81     ) -> HRESULT,
82     fn ClearStoredMessages(
83         Producer: DXGI_DEBUG_ID,
84     ) -> (),
85     fn GetMessage(
86         Producer: DXGI_DEBUG_ID,
87         MessageIndex: UINT64,
88         pMessage: *mut DXGI_INFO_QUEUE_MESSAGE,
89         pMessageByteLength: *mut SIZE_T,
90     ) -> HRESULT,
91     fn GetNumStoredMessagesAllowedByRetrievalFilters(
92         Producer: DXGI_DEBUG_ID,
93     ) -> UINT64,
94     fn GetNumStoredMessages(
95         Producer: DXGI_DEBUG_ID,
96     ) -> UINT64,
97     fn GetNumMessagesDiscardedByMessageCountLimit(
98         Producer: DXGI_DEBUG_ID,
99     ) -> UINT64,
100     fn GetMessageCountLimit(
101         Producer: DXGI_DEBUG_ID,
102     ) -> UINT64,
103     fn GetNumMessagesAllowedByStorageFilter(
104         Producer: DXGI_DEBUG_ID,
105     ) -> UINT64,
106     fn GetNumMessagesDeniedByStorageFilter(
107         Producer: DXGI_DEBUG_ID,
108     ) -> UINT64,
109     fn AddStorageFilterEntries(
110         Producer: DXGI_DEBUG_ID,
111         pFilter: *const DXGI_INFO_QUEUE_FILTER,
112     ) -> HRESULT,
113     fn GetStorageFilter(
114         Producer: DXGI_DEBUG_ID,
115         pFilter: *mut DXGI_INFO_QUEUE_FILTER,
116         pFilterByteLength: *mut SIZE_T,
117     ) -> HRESULT,
118     fn ClearStorageFilter(
119         Producer: DXGI_DEBUG_ID,
120     ) -> (),
121     fn PushEmptyStorageFilter(
122         Producer: DXGI_DEBUG_ID,
123     ) -> HRESULT,
124     fn PushDenyAllStorageFilter(
125         Producer: DXGI_DEBUG_ID,
126     ) -> HRESULT,
127     fn PushCopyOfStorageFilter(
128         Producer: DXGI_DEBUG_ID,
129     ) -> HRESULT,
130     fn PushStorageFilter(
131         Producer: DXGI_DEBUG_ID,
132         pFilter: *const DXGI_INFO_QUEUE_FILTER,
133     ) -> HRESULT,
134     fn PopStorageFilter(
135         Producer: DXGI_DEBUG_ID,
136     ) -> (),
137     fn GetStorageFilterStackSize(
138         Producer: DXGI_DEBUG_ID,
139     ) -> UINT,
140     fn AddRetrievalFilterEntries(
141         Producer: DXGI_DEBUG_ID,
142         pFilter: *const DXGI_INFO_QUEUE_FILTER,
143     ) -> HRESULT,
144     fn GetRetrievalFilter(
145         Producer: DXGI_DEBUG_ID,
146         pFilter: *mut DXGI_INFO_QUEUE_FILTER,
147         pFilterByteLength: *mut SIZE_T,
148     ) -> HRESULT,
149     fn ClearRetrievalFilter(
150         Producer: DXGI_DEBUG_ID,
151     ) -> (),
152     fn PushEmptyRetrievalFilter(
153         Producer: DXGI_DEBUG_ID,
154     ) -> HRESULT,
155     fn PushDenyAllRetrievalFilter(
156         Producer: DXGI_DEBUG_ID,
157     ) -> HRESULT,
158     fn PushCopyOfRetrievalFilter(
159         Producer: DXGI_DEBUG_ID,
160     ) -> HRESULT,
161     fn PushRetrievalFilter(
162         Producer: DXGI_DEBUG_ID,
163         pFilter: *const DXGI_INFO_QUEUE_FILTER,
164     ) -> HRESULT,
165     fn PopRetrievalFilter(
166         Producer: DXGI_DEBUG_ID,
167     ) -> (),
168     fn GetRetrievalFilterStackSize(
169         Producer: DXGI_DEBUG_ID,
170     ) -> UINT,
171     fn AddMessage(
172         Producer: DXGI_DEBUG_ID,
173         Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
174         Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
175         ID: DXGI_INFO_QUEUE_MESSAGE_ID,
176         pDescription: LPCSTR,
177     ) -> HRESULT,
178     fn AddApplicationMessage(
179         Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
180         pDescription: LPCSTR,
181     ) -> HRESULT,
182     fn SetBreakOnCategory(
183         Producer: DXGI_DEBUG_ID,
184         Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
185         bEnable: BOOL,
186     ) -> HRESULT,
187     fn SetBreakOnSeverity(
188         Producer: DXGI_DEBUG_ID,
189         Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
190         bEnable: BOOL,
191     ) -> HRESULT,
192     fn SetBreakOnID(
193         Producer: DXGI_DEBUG_ID,
194         ID: DXGI_INFO_QUEUE_MESSAGE_ID,
195         bEnable: BOOL,
196     ) -> HRESULT,
197     fn GetBreakOnCategory(
198         Producer: DXGI_DEBUG_ID,
199         Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
200     ) -> BOOL,
201     fn GetBreakOnSeverity(
202         Producer: DXGI_DEBUG_ID,
203         Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
204     ) -> BOOL,
205     fn GetBreakOnID(
206         Producer: DXGI_DEBUG_ID,
207         ID: DXGI_INFO_QUEUE_MESSAGE_ID,
208     ) -> BOOL,
209     fn SetMuteDebugOutput(
210         Producer: DXGI_DEBUG_ID,
211         bMute: BOOL,
212     ) -> (),
213     fn GetMuteDebugOutput(
214         Producer: DXGI_DEBUG_ID,
215     ) -> BOOL,
216 }}
217 RIDL!{#[uuid(0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41)]
218 interface IDXGIDebug(IDXGIDebugVtbl): IUnknown(IUnknownVtbl) {
219     fn ReportLiveObjects(
220         apiid: GUID,
221         flags: DXGI_DEBUG_RLO_FLAGS,
222     ) -> HRESULT,
223 }}
224 RIDL!{#[uuid(0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41)]
225 interface IDXGIDebug1(IDXGIDebug1Vtbl): IDXGIDebug(IDXGIDebugVtbl) {
226     fn EnableLeakTrackingForThread() -> (),
227     fn DisableLeakTrackingForThread() -> (),
228     fn IsLeakTrackingEnabledForThread() -> BOOL,
229 }}
230 DEFINE_GUID!{IID_IDXGIInfoQueue,
231     0xd67441c7, 0x672a, 0x476f, 0x9e, 0x82, 0xcd, 0x55, 0xb4, 0x49, 0x49, 0xce}
232 DEFINE_GUID!{IID_IDXGIDebug,
233     0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41}
234 DEFINE_GUID!{IID_IDXGIDebug1,
235     0xc5a05f0c, 0x16f2, 0x4adf, 0x9f, 0x4d, 0xa8, 0xc4, 0xd5, 0x8a, 0xc5, 0x50}
236