Commit cfc9e7c9 authored by wm4's avatar wm4 Committed by Luca Barbato
parent 5030e385
...@@ -1561,6 +1561,7 @@ HEADERS_LIST=" ...@@ -1561,6 +1561,7 @@ HEADERS_LIST="
dev_video_meteor_ioctl_meteor_h dev_video_meteor_ioctl_meteor_h
direct_h direct_h
dlfcn_h dlfcn_h
dxgidebug_h
dxva_h dxva_h
gsm_h gsm_h
io_h io_h
...@@ -4660,6 +4661,7 @@ check_struct windows.h "CONDITION_VARIABLE" Ptr ...@@ -4660,6 +4661,7 @@ check_struct windows.h "CONDITION_VARIABLE" Ptr
check_header d3d11.h check_header d3d11.h
check_header direct.h check_header direct.h
check_header dlfcn.h check_header dlfcn.h
check_header dxgidebug.h
check_header dxva.h check_header dxva.h
check_header dxva2api.h check_header dxva2api.h
check_header io.h check_header io.h
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#include "config.h"
#include <windows.h> #include <windows.h>
// Include thread.h before redefining _WIN32_WINNT, to get // Include thread.h before redefining _WIN32_WINNT, to get
...@@ -32,6 +34,10 @@ ...@@ -32,6 +34,10 @@
#include <d3d11.h> #include <d3d11.h>
#include <dxgi1_2.h> #include <dxgi1_2.h>
#if HAVE_DXGIDEBUG_H
#include <dxgidebug.h>
#endif
#include "avassert.h" #include "avassert.h"
#include "common.h" #include "common.h"
#include "hwcontext.h" #include "hwcontext.h"
...@@ -476,8 +482,18 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device, ...@@ -476,8 +482,18 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,
IDXGIAdapter *pAdapter = NULL; IDXGIAdapter *pAdapter = NULL;
ID3D10Multithread *pMultithread; ID3D10Multithread *pMultithread;
UINT creationFlags = D3D11_CREATE_DEVICE_VIDEO_SUPPORT; UINT creationFlags = D3D11_CREATE_DEVICE_VIDEO_SUPPORT;
int is_debug = !!av_dict_get(opts, "debug", NULL, 0);
int ret; int ret;
// (On UWP we can't check this.)
#if HAVE_LOADLIBRARY
if (!LoadLibrary("d3d11_1sdklayers.dll"))
is_debug = 0;
#endif
if (is_debug)
creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
if ((ret = ff_thread_once(&functions_loaded, load_functions)) != 0) if ((ret = ff_thread_once(&functions_loaded, load_functions)) != 0)
return AVERROR_UNKNOWN; return AVERROR_UNKNOWN;
if (!mD3D11CreateDevice || !mCreateDXGIFactory) { if (!mD3D11CreateDevice || !mCreateDXGIFactory) {
...@@ -511,6 +527,22 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device, ...@@ -511,6 +527,22 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,
ID3D10Multithread_Release(pMultithread); ID3D10Multithread_Release(pMultithread);
} }
#if HAVE_LOADLIBRARY && HAVE_DXGIDEBUG_H
if (is_debug) {
HANDLE dxgidebug_dll = LoadLibrary("dxgidebug.dll");
if (dxgidebug_dll) {
HRESULT (WINAPI * pf_DXGIGetDebugInterface)(const GUID *riid, void **ppDebug)
= (void *)GetProcAddress(dxgidebug_dll, "DXGIGetDebugInterface");
if (pf_DXGIGetDebugInterface) {
IDXGIDebug *dxgi_debug = NULL;
hr = pf_DXGIGetDebugInterface(&IID_IDXGIDebug, (void**)&dxgi_debug);
if (SUCCEEDED(hr) && dxgi_debug)
IDXGIDebug_ReportLiveObjects(dxgi_debug, DXGI_DEBUG_ALL, DXGI_DEBUG_RLO_ALL);
}
}
}
#endif
return 0; return 0;
} }
......
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
* Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to * Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to
* DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for * DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for
* this format. Refer to MSDN for details. * this format. Refer to MSDN for details.
*
* av_hwdevice_ctx_create() for this device type supports a key named "debug"
* for the AVDictionary entry. If this is set to any value, the device creation
* code will try to load various supported D3D debugging layers.
*/ */
#include <d3d11.h> #include <d3d11.h>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment