236 lines
8.1 KiB
Rust
236 lines
8.1 KiB
Rust
// 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 = 0x1,
|
|
DXGI_DEBUG_RLO_DETAIL = 0x2,
|
|
DXGI_DEBUG_RLO_IGNORE_INTERNAL = 0x4,
|
|
DXGI_DEBUG_RLO_ALL = 0x7,
|
|
}}
|
|
pub type DXGI_DEBUG_ID = GUID;
|
|
DEFINE_GUID!{DXGI_DEBUG_ALL,
|
|
0xe48ae283, 0xda80, 0x490b, 0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x08}
|
|
DEFINE_GUID!{DXGI_DEBUG_DX,
|
|
0x35cdd7fc, 0x13b2, 0x421d, 0xa5, 0xd7, 0x7e, 0x44, 0x51, 0x28, 0x7d, 0x64}
|
|
DEFINE_GUID!{DXGI_DEBUG_DXGI,
|
|
0x25cddaa4, 0xb1c6, 0x47e1, 0xac, 0x3e, 0x98, 0x87, 0x5b, 0x5a, 0x2e, 0x2a}
|
|
DEFINE_GUID!{DXGI_DEBUG_APP,
|
|
0x06cd6e01, 0x4219, 0x4ebd, 0x87, 0x09, 0x27, 0xed, 0x23, 0x36, 0x0c, 0x62}
|
|
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(0xd67441c7, 0x672a, 0x476f, 0x9e, 0x82, 0xcd, 0x55, 0xb4, 0x49, 0x49, 0xce)]
|
|
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(0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41)]
|
|
interface IDXGIDebug(IDXGIDebugVtbl): IUnknown(IUnknownVtbl) {
|
|
fn ReportLiveObjects(
|
|
apiid: GUID,
|
|
flags: DXGI_DEBUG_RLO_FLAGS,
|
|
) -> HRESULT,
|
|
}}
|
|
RIDL!{#[uuid(0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41)]
|
|
interface IDXGIDebug1(IDXGIDebug1Vtbl): IDXGIDebug(IDXGIDebugVtbl) {
|
|
fn EnableLeakTrackingForThread() -> (),
|
|
fn DisableLeakTrackingForThread() -> (),
|
|
fn IsLeakTrackingEnabledForThread() -> BOOL,
|
|
}}
|
|
DEFINE_GUID!{IID_IDXGIInfoQueue,
|
|
0xd67441c7, 0x672a, 0x476f, 0x9e, 0x82, 0xcd, 0x55, 0xb4, 0x49, 0x49, 0xce}
|
|
DEFINE_GUID!{IID_IDXGIDebug,
|
|
0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41}
|
|
DEFINE_GUID!{IID_IDXGIDebug1,
|
|
0xc5a05f0c, 0x16f2, 0x4adf, 0x9f, 0x4d, 0xa8, 0xc4, 0xd5, 0x8a, 0xc5, 0x50}
|