2 * Copyright 2015 Steve Lhomme
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 const UINT DXGI_DEBUG_BINARY_VERSION
= 1;
23 typedef GUID DXGI_DEBUG_ID
;
25 cpp_quote
("DEFINE_GUID(DXGI_DEBUG_ALL, 0xe48ae283, 0xda80, 0x490b,0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x08);")
26 cpp_quote
("DEFINE_GUID(DXGI_DEBUG_DX, 0x35cdd7fc, 0x13b2, 0x421d,0xa5, 0xd7, 0x7e, 0x44, 0x51, 0x28, 0x7d, 0x64);")
27 cpp_quote
("DEFINE_GUID(DXGI_DEBUG_DXGI, 0x25cddaa4, 0xb1c6, 0x47e1,0xac, 0x3e, 0x98, 0x87, 0x5b, 0x5a, 0x2e, 0x2a);")
28 cpp_quote
("DEFINE_GUID(DXGI_DEBUG_APP, 0x06cd6e01, 0x4219, 0x4ebd,0x87, 0x90, 0x27, 0xed, 0x23, 0x36, 0x0c, 0x62);")
30 typedef enum DXGI_DEBUG_RLO_FLAGS
{
31 DXGI_DEBUG_RLO_SUMMARY
= 0x0001,
32 DXGI_DEBUG_RLO_DETAIL
= 0x0002,
33 DXGI_DEBUG_RLO_IGNORE_INTERNAL
= 0x0004,
34 DXGI_DEBUG_RLO_ALL
= 0x0007
35 } DXGI_DEBUG_RLO_FLAGS
;
37 typedef enum DXGI_INFO_QUEUE_MESSAGE_CATEGORY
{
38 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_UNKNOWN
,
39 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_MISCELLANEOUS
,
40 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_INITIALIZATION
,
41 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_CLEANUP
,
42 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_COMPILATION
,
43 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_CREATION
,
44 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_SETTING
,
45 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_GETTING
,
46 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_RESOURCE_MANIPULATION
,
47 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_EXECUTION
,
48 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_SHADER
,
49 } DXGI_INFO_QUEUE_MESSAGE_CATEGORY
;
51 typedef enum DXGI_INFO_QUEUE_MESSAGE_SEVERITY
{
52 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION
,
53 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR
,
54 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING
,
55 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO
,
56 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_MESSAGE
57 } DXGI_INFO_QUEUE_MESSAGE_SEVERITY
;
59 typedef int DXGI_INFO_QUEUE_MESSAGE_ID
;
60 cpp_quote
("#define DXGI_INFO_QUEUE_MESSAGE_ID_STRING_FROM_APPLICATION 0")
62 typedef struct DXGI_INFO_QUEUE_MESSAGE
{
63 DXGI_DEBUG_ID Producer
;
64 DXGI_INFO_QUEUE_MESSAGE_CATEGORY Category
;
65 DXGI_INFO_QUEUE_MESSAGE_SEVERITY Severity
;
66 DXGI_INFO_QUEUE_MESSAGE_ID
ID;
67 const char *pDescription
;
68 SIZE_T DescriptionByteLength
;
69 } DXGI_INFO_QUEUE_MESSAGE
;
71 typedef struct DXGI_INFO_QUEUE_FILTER_DESC
{
73 DXGI_INFO_QUEUE_MESSAGE_CATEGORY
*pCategoryList
;
75 DXGI_INFO_QUEUE_MESSAGE_SEVERITY
*pSeverityList
;
77 DXGI_INFO_QUEUE_MESSAGE_ID
*pIDList
;
78 } DXGI_INFO_QUEUE_FILTER_DESC
;
80 typedef struct DXGI_INFO_QUEUE_FILTER
{
81 DXGI_INFO_QUEUE_FILTER_DESC AllowList
;
82 DXGI_INFO_QUEUE_FILTER_DESC DenyList
;
83 } DXGI_INFO_QUEUE_FILTER
;
85 cpp_quote
("#define DXGI_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024")
87 cpp_quote
("HRESULT WINAPI DXGIGetDebugInterface(REFIID riid, void **ppDebug);")
90 uuid(d67441c7
-672a
-476f
-9e82
-cd55b44949ce
),
93 pointer_default(unique)
95 interface IDXGIInfoQueue
: IUnknown
97 HRESULT SetMessageCountLimit
(
98 [in] DXGI_DEBUG_ID producer
,
101 void ClearStoredMessages
(
102 [in] DXGI_DEBUG_ID producer
);
105 [in] DXGI_DEBUG_ID producer
,
107 [out] DXGI_INFO_QUEUE_MESSAGE
*message,
108 [in, out] SIZE_T
*length
);
110 UINT64 GetNumStoredMessagesAllowedByRetrievalFilters
(
111 [in] DXGI_DEBUG_ID producer
);
113 UINT64 GetNumStoredMessages
(
114 [in] DXGI_DEBUG_ID producer
);
116 UINT64 GetNumMessagesDiscardedByMessageCountLimit
(
117 [in] DXGI_DEBUG_ID producer
);
119 UINT64 GetMessageCountLimit
(
120 [in] DXGI_DEBUG_ID producer
);
122 UINT64 GetNumMessagesAllowedByStorageFilter
(
123 [in] DXGI_DEBUG_ID producer
);
125 UINT64 GetNumMessagesDeniedByStorageFilter
(
126 [in] DXGI_DEBUG_ID producer
);
128 HRESULT AddStorageFilterEntries
(
129 [in] DXGI_DEBUG_ID producer
,
130 [in] DXGI_INFO_QUEUE_FILTER
*filter
);
132 HRESULT GetStorageFilter
(
133 [in] DXGI_DEBUG_ID producer
,
134 [out] DXGI_INFO_QUEUE_FILTER
*filter
,
135 [in, out] SIZE_T
*length
);
137 void ClearStorageFilter
(
138 [in] DXGI_DEBUG_ID producer
);
140 HRESULT PushEmptyStorageFilter
(
141 [in] DXGI_DEBUG_ID producer
);
143 HRESULT PushDenyAllStorageFilter
(
144 [in] DXGI_DEBUG_ID producer
);
146 HRESULT PushCopyOfStorageFilter
(
147 [in] DXGI_DEBUG_ID producer
);
149 HRESULT PushStorageFilter
(
150 [in] DXGI_DEBUG_ID producer
,
151 [in] DXGI_INFO_QUEUE_FILTER
*filter
);
153 void PopStorageFilter
(
154 [in] DXGI_DEBUG_ID producer
);
156 UINT GetStorageFilterStackSize
(
157 [in] DXGI_DEBUG_ID producer
);
159 HRESULT AddRetrievalFilterEntries
(
160 [in] DXGI_DEBUG_ID producer
,
161 [in] DXGI_INFO_QUEUE_FILTER
*filter
);
163 HRESULT GetRetrievalFilter
(
164 [in] DXGI_DEBUG_ID producer
,
165 [out] DXGI_INFO_QUEUE_FILTER
*filter
,
166 [in, out] SIZE_T
*length
);
168 void ClearRetrievalFilter
(
169 [in] DXGI_DEBUG_ID producer
);
171 HRESULT PushEmptyRetrievalFilter
(
172 [in] DXGI_DEBUG_ID producer
);
174 HRESULT PushDenyAllRetrievalFilter
(
175 [in] DXGI_DEBUG_ID producer
);
177 HRESULT PushCopyOfRetrievalFilter
(
178 [in] DXGI_DEBUG_ID producer
);
180 HRESULT PushRetrievalFilter
(
181 [in] DXGI_DEBUG_ID producer
,
182 [in] DXGI_INFO_QUEUE_FILTER
*filter
);
184 void PopRetrievalFilter
(
185 [in] DXGI_DEBUG_ID producer
);
187 UINT GetRetrievalFilterStackSize
(
188 [in] DXGI_DEBUG_ID producer
);
191 [in] DXGI_DEBUG_ID producer
,
192 [in] DXGI_INFO_QUEUE_MESSAGE_CATEGORY category
,
193 [in] DXGI_INFO_QUEUE_MESSAGE_SEVERITY severity
,
194 [in] DXGI_INFO_QUEUE_MESSAGE_ID
id,
195 [in] LPCSTR description
);
197 HRESULT AddApplicationMessage
(
198 [in] DXGI_INFO_QUEUE_MESSAGE_SEVERITY severity
,
199 [in] LPCSTR description
);
201 HRESULT SetBreakOnCategory
(
202 [in] DXGI_DEBUG_ID producer
,
203 [in] DXGI_INFO_QUEUE_MESSAGE_CATEGORY category
,
206 HRESULT SetBreakOnSeverity
(
207 [in] DXGI_DEBUG_ID producer
,
208 [in] DXGI_INFO_QUEUE_MESSAGE_SEVERITY severity
,
211 HRESULT SetBreakOnID
(
212 [in] DXGI_DEBUG_ID producer
,
213 [in] DXGI_INFO_QUEUE_MESSAGE_ID
id,
216 BOOL GetBreakOnCategory
(
217 [in] DXGI_DEBUG_ID producer
,
218 [in] DXGI_INFO_QUEUE_MESSAGE_CATEGORY category
);
220 BOOL GetBreakOnSeverity
(
221 [in] DXGI_DEBUG_ID producer
,
222 [in] DXGI_INFO_QUEUE_MESSAGE_SEVERITY severity
);
225 [in] DXGI_DEBUG_ID producer
,
226 [in] DXGI_INFO_QUEUE_MESSAGE_ID
id);
228 void SetMuteDebugOutput
(
229 [in] DXGI_DEBUG_ID producer
,
232 BOOL GetMuteDebugOutput
(
233 [in] DXGI_DEBUG_ID producer
);
239 uuid(119e7452
-de9e
-40fe
-8806-88f90c12b441
)
241 interface IDXGIDebug
: IUnknown
243 HRESULT ReportLiveObjects
(
245 [in] DXGI_DEBUG_RLO_FLAGS flags
);
249 uuid(c5a05f0c
-16f2
-4adf
-9f4d
-a8c4d58ac550
),
252 pointer_default(unique)
254 interface IDXGIDebug1
: IDXGIDebug
256 void EnableLeakTrackingForThread
();
257 void DisableLeakTrackingForThread
();
258 BOOL IsLeakTrackingEnabledForThread
();