[vlc-commits] win32: report DXGI/Direct3D leaks on exit in debug mode

Steve Lhomme git at videolan.org
Sun Oct 9 10:46:24 CEST 2016


vlc | branch: master | Steve Lhomme <robux4 at videolabs.io> | Tue Oct  4 15:08:05 2016 +0200| [45ff2f78e63941eac0d0141c67181287b9880edf] | committer: Jean-Baptiste Kempf

win32: report DXGI/Direct3D leaks on exit in debug mode

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=45ff2f78e63941eac0d0141c67181287b9880edf
---

 modules/video_output/win32/common.c | 22 ++++++++++++++++++++++
 modules/video_output/win32/common.h |  7 +++++++
 2 files changed, 29 insertions(+)

diff --git a/modules/video_output/win32/common.c b/modules/video_output/win32/common.c
index cbd236d..e822e40 100644
--- a/modules/video_output/win32/common.c
+++ b/modules/video_output/win32/common.c
@@ -39,6 +39,10 @@
 #include <assert.h>
 
 #define COBJMACROS
+#if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
+# define INITGUID
+# include <dxgidebug.h>
+#endif
 #include <shobjidl.h>
 
 #include "common.h"
@@ -108,6 +112,9 @@ int CommonInit(vout_display_t *vd)
 
     DisableScreensaver (vd);
 #endif
+#if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
+    sys->dxgidebug_dll = LoadLibrary(TEXT("DXGIDEBUG.DLL"));
+#endif
 
     return VLC_SUCCESS;
 }
@@ -355,6 +362,21 @@ void CommonClean(vout_display_t *vd)
     }
 
     RestoreScreensaver(vd);
+
+#if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
+    HRESULT (WINAPI  * pf_DXGIGetDebugInterface)(const GUID *riid, void **ppDebug);
+    if (sys->dxgidebug_dll) {
+        pf_DXGIGetDebugInterface = (void *)GetProcAddress(sys->dxgidebug_dll, "DXGIGetDebugInterface");
+        if (pf_DXGIGetDebugInterface) {
+            IDXGIDebug *pDXGIDebug = NULL;
+            HRESULT hr = pf_DXGIGetDebugInterface(&IID_IDXGIDebug, (void**)&pDXGIDebug);
+            if (SUCCEEDED(hr) && pDXGIDebug) {
+                hr = IDXGIDebug_ReportLiveObjects(pDXGIDebug, DXGI_DEBUG_ALL, DXGI_DEBUG_RLO_ALL);
+            }
+        }
+        FreeLibrary(sys->dxgidebug_dll);
+    }
+#endif
 }
 
 void CommonManage(vout_display_t *vd)
diff --git a/modules/video_output/win32/common.h b/modules/video_output/win32/common.h
index e626035..8dc980c 100644
--- a/modules/video_output/win32/common.h
+++ b/modules/video_output/win32/common.h
@@ -41,6 +41,9 @@
 #ifdef MODULE_NAME_IS_direct2d
 # include <d2d1.h>
 #endif
+#if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
+# include <dxgidebug.h>
+#endif
 
 /*****************************************************************************
  * event_thread_t: event thread
@@ -95,6 +98,10 @@ struct vout_display_sys_t
     /* size of the overall window (including black bands) */
     RECT         rect_parent;
 
+# if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
+    HINSTANCE     dxgidebug_dll;
+# endif
+
     unsigned changes;        /* changes made to the video display */
 
     /* Misc */



More information about the vlc-commits mailing list