// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 > or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT >, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use ctypes::{c_char, c_int, c_void};
use shared::basetsd::{SIZE_T, UINT64};
use shared::guiddef::{GUID, REFIID};
use shared::minwindef::{BOOL, DWORD, UINT};
use um::unknwnbase::{IUnknown, IUnknownVtbl};
use um::winnt::{HRESULT, LPCSTR};
pub const DXGI_DEBUG_BINARY_VERSION: DWORD =
1 ;
ENUM !{
enum DXGI_DEBUG_RLO_FLAGS {
DXGI_DEBUG_RLO_SUMMARY =
0 x1,
DXGI_DEBUG_RLO_DETAIL =
0 x2,
DXGI_DEBUG_RLO_IGNORE_INTERNAL =
0 x4,
DXGI_DEBUG_RLO_ALL =
0 x7,
}}
pub type DXGI_DEBUG_ID = GUID;
DEFINE_GUID!{DXGI_DEBUG_ALL,
0 xe48ae283,
0 xda80,
0 x490b,
0 x87,
0 xe6,
0 x43,
0 xe9,
0 xa9,
0 xcf,
0 xda,
0 x08}
DEFINE_GUID!{DXGI_DEBUG_DX,
0 x35cdd7fc,
0 x13b2,
0 x421d,
0 xa5,
0 xd7,
0 x7e,
0 x44,
0 x51,
0 x28,
0 x7d,
0 x64}
DEFINE_GUID!{DXGI_DEBUG_DXGI,
0 x25cddaa4,
0 xb1c6,
0 x47e1,
0 xac,
0 x3e,
0 x98,
0 x87,
0 x5b,
0 x5a,
0 x2e,
0 x2a}
DEFINE_GUID!{DXGI_DEBUG_APP,
0 x06cd6e01,
0 x4219,
0 x4ebd,
0 x87,
0 x09,
0 x27,
0 xed,
0 x23,
0 x36,
0 x0c,
0 x62}
ENUM !{
enum DXGI_INFO_QUEUE_MESSAGE_CATEGORY {
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_UNKNOWN =
0 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_MISCELLANEOUS =
1 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_INITIALIZATION =
2 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_CLEANUP =
3 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_COMPILATION =
4 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_CREATION =
5 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_SETTING =
6 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_GETTING =
7 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_RESOURCE_MANIPULATION =
8 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_EXECUTION =
9 ,
DXGI_INFO_QUEUE_MESSAGE_CATEGORY_SHADER =
10 ,
}}
ENUM !{
enum DXGI_INFO_QUEUE_MESSAGE_SEVERITY {
DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION =
0 ,
DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR =
1 ,
DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING =
2 ,
DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO =
3 ,
DXGI_INFO_QUEUE_MESSAGE_SEVERITY_MESSAGE =
4 ,
}}
pub type DXGI_INFO_QUEUE_MESSAGE_ID = c_int;
STRUCT !{
struct DXGI_INFO_QUEUE_MESSAGE {
Producer: DXGI_DEBUG_ID,
Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
ID: DXGI_INFO_QUEUE_MESSAGE_ID,
pDescription: *
const c_char,
DescriptionByteLength: SIZE_T,
}}
STRUCT !{
struct DXGI_INFO_QUEUE_FILTER_DESC {
NumCategories: UINT,
pCategoryList: *
mut DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
NumSeverities: UINT,
pSeverityList: *
mut DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
NumIDs: UINT,
pIDList: *
mut DXGI_INFO_QUEUE_MESSAGE_ID,
}}
STRUCT !{
struct DXGI_INFO_QUEUE_FILTER {
AllowList: DXGI_INFO_QUEUE_FILTER_DESC,
DenyList: DXGI_INFO_QUEUE_FILTER_DESC,
}}
pub const DXGI_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT: DWORD =
1024 ;
extern "system" {
pub fn DXGIGetDebugInterface(
riid: REFIID,
ppDebug: *
mut *
mut c_void,
) -> HRESULT;
}
RIDL!{
#[ uuid(
0 xd67441c7,
0 x672a,
0 x476f,
0 x9e,
0 x82,
0 xcd,
0 x55,
0 xb4,
0 x49,
0 x49,
0 xce)]
interface IDXGIInfoQueue(IDXGIInfoQueueVtbl): IUnknown(IUnknownVtbl) {
fn SetMessageCountLimit(
Producer: DXGI_DEBUG_ID,
MessageCountLimit: UINT64,
) -> HRESULT,
fn ClearStoredMessages(
Producer: DXGI_DEBUG_ID,
) -> (),
fn GetMessage(
Producer: DXGI_DEBUG_ID,
MessageIndex: UINT64,
pMessage: *
mut DXGI_INFO_QUEUE_MESSAGE,
pMessageByteLength: *
mut SIZE_T,
) -> HRESULT,
fn GetNumStoredMessagesAllowedByRetrievalFilters(
Producer: DXGI_DEBUG_ID,
) -> UINT64,
fn GetNumStoredMessages(
Producer: DXGI_DEBUG_ID,
) -> UINT64,
fn GetNumMessagesDiscardedByMessageCountLimit(
Producer: DXGI_DEBUG_ID,
) -> UINT64,
fn GetMessageCountLimit(
Producer: DXGI_DEBUG_ID,
) -> UINT64,
fn GetNumMessagesAllowedByStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> UINT64,
fn GetNumMessagesDeniedByStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> UINT64,
fn AddStorageFilterEntries(
Producer: DXGI_DEBUG_ID,
pFilter: *
const DXGI_INFO_QUEUE_FILTER,
) -> HRESULT,
fn GetStorageFilter(
Producer: DXGI_DEBUG_ID,
pFilter: *
mut DXGI_INFO_QUEUE_FILTER,
pFilterByteLength: *
mut SIZE_T,
) -> HRESULT,
fn ClearStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> (),
fn PushEmptyStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> HRESULT,
fn PushDenyAllStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> HRESULT,
fn PushCopyOfStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> HRESULT,
fn PushStorageFilter(
Producer: DXGI_DEBUG_ID,
pFilter: *
const DXGI_INFO_QUEUE_FILTER,
) -> HRESULT,
fn PopStorageFilter(
Producer: DXGI_DEBUG_ID,
) -> (),
fn GetStorageFilterStackSize(
Producer: DXGI_DEBUG_ID,
) -> UINT,
fn AddRetrievalFilterEntries(
Producer: DXGI_DEBUG_ID,
pFilter: *
const DXGI_INFO_QUEUE_FILTER,
) -> HRESULT,
fn GetRetrievalFilter(
Producer: DXGI_DEBUG_ID,
pFilter: *
mut DXGI_INFO_QUEUE_FILTER,
pFilterByteLength: *
mut SIZE_T,
) -> HRESULT,
fn ClearRetrievalFilter(
Producer: DXGI_DEBUG_ID,
) -> (),
fn PushEmptyRetrievalFilter(
Producer: DXGI_DEBUG_ID,
) -> HRESULT,
fn PushDenyAllRetrievalFilter(
Producer: DXGI_DEBUG_ID,
) -> HRESULT,
fn PushCopyOfRetrievalFilter(
Producer: DXGI_DEBUG_ID,
) -> HRESULT,
fn PushRetrievalFilter(
Producer: DXGI_DEBUG_ID,
pFilter: *
const DXGI_INFO_QUEUE_FILTER,
) -> HRESULT,
fn PopRetrievalFilter(
Producer: DXGI_DEBUG_ID,
) -> (),
fn GetRetrievalFilterStackSize(
Producer: DXGI_DEBUG_ID,
) -> UINT,
fn AddMessage(
Producer: DXGI_DEBUG_ID,
Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
ID: DXGI_INFO_QUEUE_MESSAGE_ID,
pDescription: LPCSTR,
) -> HRESULT,
fn AddApplicationMessage(
Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
pDescription: LPCSTR,
) -> HRESULT,
fn SetBreakOnCategory(
Producer: DXGI_DEBUG_ID,
Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
bEnable: BOOL,
) -> HRESULT,
fn SetBreakOnSeverity(
Producer: DXGI_DEBUG_ID,
Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
bEnable: BOOL,
) -> HRESULT,
fn SetBreakOnID(
Producer: DXGI_DEBUG_ID,
ID: DXGI_INFO_QUEUE_MESSAGE_ID,
bEnable: BOOL,
) -> HRESULT,
fn GetBreakOnCategory(
Producer: DXGI_DEBUG_ID,
Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
) -> BOOL,
fn GetBreakOnSeverity(
Producer: DXGI_DEBUG_ID,
Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
) -> BOOL,
fn GetBreakOnID(
Producer: DXGI_DEBUG_ID,
ID: DXGI_INFO_QUEUE_MESSAGE_ID,
) -> BOOL,
fn SetMuteDebugOutput(
Producer: DXGI_DEBUG_ID,
bMute: BOOL,
) -> (),
fn GetMuteDebugOutput(
Producer: DXGI_DEBUG_ID,
) -> BOOL,
}}
RIDL!{
#[ uuid(
0 x119e7452,
0 xde9e,
0 x40fe,
0 x88,
0 x06,
0 x88,
0 xf9,
0 x0c,
0 x12,
0 xb4,
0 x41)]
interface IDXGIDebug(IDXGIDebugVtbl): IUnknown(IUnknownVtbl) {
fn ReportLiveObjects(
apiid: GUID,
flags: DXGI_DEBUG_RLO_FLAGS,
) -> HRESULT,
}}
RIDL!{
#[ uuid(
0 x119e7452,
0 xde9e,
0 x40fe,
0 x88,
0 x06,
0 x88,
0 xf9,
0 x0c,
0 x12,
0 xb4,
0 x41)]
interface IDXGIDebug1(IDXGIDebug1Vtbl): IDXGIDebug(IDXGIDebugVtbl) {
fn EnableLeakTrackingForThread() -> (),
fn DisableLeakTrackingForThread() -> (),
fn IsLeakTrackingEnabledForThread() -> BOOL,
}}
DEFINE_GUID!{IID_IDXGIInfoQueue,
0 xd67441c7,
0 x672a,
0 x476f,
0 x9e,
0 x82,
0 xcd,
0 x55,
0 xb4,
0 x49,
0 x49,
0 xce}
DEFINE_GUID!{IID_IDXGIDebug,
0 x119e7452,
0 xde9e,
0 x40fe,
0 x88,
0 x06,
0 x88,
0 xf9,
0 x0c,
0 x12,
0 xb4,
0 x41}
DEFINE_GUID!{IID_IDXGIDebug1,
0 xc5a05f0c,
0 x16f2,
0 x4adf,
0 x9f,
0 x4d,
0 xa8,
0 xc4,
0 xd5,
0 x8a,
0 xc5,
0 x50}
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland