1 module directx.dxgidebug; 2 3 public import directx.dxgi; 4 5 alias DXGI_DEBUG_RLO_FLAGS = DWORD; 6 enum : DXGI_DEBUG_RLO_FLAGS { 7 DXGI_DEBUG_RLO_SUMMARY = 0x1, 8 DXGI_DEBUG_RLO_DETAIL = 0x2, 9 DXGI_DEBUG_RLO_ALL = 0x3 10 } 11 12 alias GUID DXGI_DEBUG_ID; 13 14 __gshared DXGI_DEBUG_ALL = GUID(0xe48ae283, 0xda80, 0x490b, [0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x08]); 15 __gshared DXGI_DEBUG_DX = GUID(0x35cdd7fc, 0x13b2, 0x421d, [0xa5, 0xd7, 0x7e, 0x44, 0x51, 0x28, 0x7d, 0x64]); 16 __gshared DXGI_DEBUG_DXGI = GUID(0x25cddaa4, 0xb1c6, 0x47e1, [0xac, 0x3e, 0x98, 0x87, 0x5b, 0x5a, 0x2e, 0x2a]); 17 __gshared DXGI_DEBUG_APP = GUID(0x06cd6e01, 0x4219, 0x4ebd, [0x87, 0x09, 0x27, 0xed, 0x23, 0x36, 0x0c, 0x62]); 18 19 alias DXGI_INFO_QUEUE_MESSAGE_CATEGORY = DWORD; 20 enum : DXGI_INFO_QUEUE_MESSAGE_CATEGORY { 21 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_UNKNOWN = 0, 22 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_MISCELLANEOUS = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_UNKNOWN + 1, 23 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_INITIALIZATION = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_MISCELLANEOUS + 1, 24 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_CLEANUP = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_INITIALIZATION + 1, 25 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_COMPILATION = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_CLEANUP + 1, 26 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_CREATION = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_COMPILATION + 1, 27 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_SETTING = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_CREATION + 1, 28 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_GETTING = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_SETTING + 1, 29 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_GETTING + 1, 30 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_EXECUTION = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1, 31 DXGI_INFO_QUEUE_MESSAGE_CATEGORY_SHADER = DXGI_INFO_QUEUE_MESSAGE_CATEGORY_EXECUTION + 1 32 } 33 34 alias DXGI_INFO_QUEUE_MESSAGE_SEVERITY = DWORD; 35 enum : DXGI_INFO_QUEUE_MESSAGE_SEVERITY { 36 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION = 0, 37 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR = DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION + 1, 38 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING = DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR + 1, 39 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO = DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING + 1, 40 DXGI_INFO_QUEUE_MESSAGE_SEVERITY_MESSAGE = DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO + 1 41 } 42 43 alias int DXGI_INFO_QUEUE_MESSAGE_ID; 44 45 enum DXGI_INFO_QUEUE_MESSAGE_ID_STRING_FROM_APPLICATION = 0; 46 struct DXGI_INFO_QUEUE_MESSAGE { 47 DXGI_DEBUG_ID Producer; 48 DXGI_INFO_QUEUE_MESSAGE_CATEGORY Category; 49 DXGI_INFO_QUEUE_MESSAGE_SEVERITY Severity; 50 DXGI_INFO_QUEUE_MESSAGE_ID ID; 51 const(char)* pDescription; 52 SIZE_T DescriptionByteLength; 53 } 54 55 struct DXGI_INFO_QUEUE_FILTER_DESC { 56 UINT NumCategories; 57 DXGI_INFO_QUEUE_MESSAGE_CATEGORY* pCategoryList; 58 UINT NumSeverities; 59 DXGI_INFO_QUEUE_MESSAGE_SEVERITY* pSeverityList; 60 UINT NumIDs; 61 DXGI_INFO_QUEUE_MESSAGE_ID* pIDList; 62 } 63 64 struct DXGI_INFO_QUEUE_FILTER { 65 DXGI_INFO_QUEUE_FILTER_DESC AllowList; 66 DXGI_INFO_QUEUE_FILTER_DESC DenyList; 67 } 68 69 enum DXGI_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT = 1024; 70 71 __gshared _DXGIGetDebugInterface DXGIGetDebugInterface; 72 73 extern (Windows) { 74 alias _DXGIGetDebugInterface = HRESULT function(REFIID riid, void** ppDebug); 75 } 76 77 mixin(uuid!(IDXGIInfoQueue, "D67441C7-672A-476f-9E82-CD55B44949CE")); 78 extern (C++) interface IDXGIInfoQueue : IUnknown { 79 HRESULT SetMessageCountLimit(DXGI_DEBUG_ID Producer, 80 UINT64 MessageCountLimit); 81 82 void ClearStoredMessages(DXGI_DEBUG_ID Producer); 83 84 HRESULT GetMessage(DXGI_DEBUG_ID Producer, 85 UINT64 MessageIndex, 86 DXGI_INFO_QUEUE_MESSAGE *pMessage, 87 SIZE_T* pMessageByteLength); 88 89 UINT64 GetNumStoredMessagesAllowedByRetrievalFilters(DXGI_DEBUG_ID Producer); 90 91 UINT64 GetNumStoredMessages(DXGI_DEBUG_ID Producer); 92 93 UINT64 GetNumMessagesDiscardedByMessageCountLimit(DXGI_DEBUG_ID Producer); 94 95 UINT64 GetMessageCountLimit(DXGI_DEBUG_ID Producer); 96 97 UINT64 GetNumMessagesAllowedByStorageFilter(DXGI_DEBUG_ID Producer); 98 99 UINT64 GetNumMessagesDeniedByStorageFilter(DXGI_DEBUG_ID Producer); 100 101 HRESULT AddStorageFilterEntries(DXGI_DEBUG_ID Producer, 102 DXGI_INFO_QUEUE_FILTER* pFilter); 103 104 HRESULT GetStorageFilter(DXGI_DEBUG_ID Producer, 105 DXGI_INFO_QUEUE_FILTER *pFilter, 106 SIZE_T* pFilterByteLength); 107 108 void ClearStorageFilter(DXGI_DEBUG_ID Producer); 109 110 HRESULT PushEmptyStorageFilter(DXGI_DEBUG_ID Producer); 111 112 HRESULT PushDenyAllStorageFilter(DXGI_DEBUG_ID Producer); 113 114 HRESULT PushCopyOfStorageFilter(DXGI_DEBUG_ID Producer); 115 116 HRESULT PushStorageFilter(DXGI_DEBUG_ID Producer, 117 DXGI_INFO_QUEUE_FILTER* pFilter); 118 119 void PopStorageFilter(DXGI_DEBUG_ID Producer); 120 121 UINT GetStorageFilterStackSize(DXGI_DEBUG_ID Producer); 122 123 HRESULT AddRetrievalFilterEntries(DXGI_DEBUG_ID Producer, 124 DXGI_INFO_QUEUE_FILTER* pFilter); 125 126 HRESULT GetRetrievalFilter(DXGI_DEBUG_ID Producer, 127 DXGI_INFO_QUEUE_FILTER *pFilter, 128 SIZE_T* pFilterByteLength); 129 130 void ClearRetrievalFilter(DXGI_DEBUG_ID Producer); 131 132 HRESULT PushEmptyRetrievalFilter(DXGI_DEBUG_ID Producer); 133 134 HRESULT PushDenyAllRetrievalFilter(DXGI_DEBUG_ID Producer); 135 136 HRESULT PushCopyOfRetrievalFilter(DXGI_DEBUG_ID Producer); 137 138 HRESULT PushRetrievalFilter(DXGI_DEBUG_ID Producer, 139 DXGI_INFO_QUEUE_FILTER* pFilter); 140 141 void PopRetrievalFilter(DXGI_DEBUG_ID Producer); 142 143 UINT GetRetrievalFilterStackSize(DXGI_DEBUG_ID Producer); 144 145 HRESULT AddMessage(DXGI_DEBUG_ID Producer, 146 DXGI_INFO_QUEUE_MESSAGE_CATEGORY Category, 147 DXGI_INFO_QUEUE_MESSAGE_SEVERITY Severity, 148 DXGI_INFO_QUEUE_MESSAGE_ID ID, 149 LPCSTR pDescription); 150 151 HRESULT AddApplicationMessage(DXGI_INFO_QUEUE_MESSAGE_SEVERITY Severity, 152 LPCSTR pDescription); 153 154 HRESULT SetBreakOnCategory(DXGI_DEBUG_ID Producer, 155 DXGI_INFO_QUEUE_MESSAGE_CATEGORY Category, 156 BOOL bEnable); 157 158 HRESULT SetBreakOnSeverity(DXGI_DEBUG_ID Producer, 159 DXGI_INFO_QUEUE_MESSAGE_SEVERITY Severity, 160 BOOL bEnable); 161 162 HRESULT SetBreakOnID(DXGI_DEBUG_ID Producer, 163 DXGI_INFO_QUEUE_MESSAGE_ID ID, 164 BOOL bEnable); 165 166 BOOL GetBreakOnCategory(DXGI_DEBUG_ID Producer, 167 DXGI_INFO_QUEUE_MESSAGE_CATEGORY Category); 168 169 BOOL GetBreakOnSeverity(DXGI_DEBUG_ID Producer, 170 DXGI_INFO_QUEUE_MESSAGE_SEVERITY Severity); 171 172 BOOL GetBreakOnID(DXGI_DEBUG_ID Producer, 173 DXGI_INFO_QUEUE_MESSAGE_ID ID); 174 175 void SetMuteDebugOutput(DXGI_DEBUG_ID Producer, BOOL bMute); 176 177 BOOL GetMuteDebugOutput(DXGI_DEBUG_ID Producer); 178 } 179 180 mixin(uuid!(IDXGIDebug, "119E7452-DE9E-40fe-8806-88F90C12B441")); 181 extern (C++) interface IDXGIDebug : IUnknown { 182 HRESULT ReportLiveObjects(GUID apiid, DXGI_DEBUG_RLO_FLAGS flags); 183 } 184 185 mixin(uuid!(IDXGIDebug1, "c5a05f0c-16f2-4adf-9f4d-a8c4d58ac550")); 186 extern (C++) interface IDXGIDebug1 : IDXGIDebug { 187 void EnableLeakTrackingForThread(); 188 void DisableLeakTrackingForThread(); 189 BOOL IsLeakTrackingEnabledForThread(); 190 }