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