diff options
Diffstat (limited to 'video/decode')
-rw-r--r-- | video/decode/d3d.c | 14 | ||||
-rw-r--r-- | video/decode/d3d.h | 1 | ||||
-rw-r--r-- | video/decode/hw_d3d11va.c | 16 |
3 files changed, 19 insertions, 12 deletions
diff --git a/video/decode/d3d.c b/video/decode/d3d.c index 3e6e1accc8..36d914d545 100644 --- a/video/decode/d3d.c +++ b/video/decode/d3d.c @@ -107,15 +107,29 @@ static const struct d3dva_mode d3dva_modes[] = { #endif HMODULE d3d11_dll, d3d9_dll, dxva2_dll; +PFN_D3D11_CREATE_DEVICE d3d11_D3D11CreateDevice; static pthread_once_t d3d_load_once = PTHREAD_ONCE_INIT; +#if !HAVE_UWP static void d3d_do_load(void) { d3d11_dll = LoadLibrary(L"d3d11.dll"); d3d9_dll = LoadLibrary(L"d3d9.dll"); dxva2_dll = LoadLibrary(L"dxva2.dll"); + + if (d3d11_dll) { + d3d11_D3D11CreateDevice = + (void *)GetProcAddress(d3d11_dll, "D3D11CreateDevice"); + } } +#else +static void d3d_do_load(void) +{ + + d3d11_D3D11CreateDevice = D3D11CreateDevice; +} +#endif void d3d_load_dlls(void) { diff --git a/video/decode/d3d.h b/video/decode/d3d.h index 334f12151e..8ae244c585 100644 --- a/video/decode/d3d.h +++ b/video/decode/d3d.h @@ -42,6 +42,7 @@ struct d3d_decoder_fmt { // Must call d3d_load_dlls() before accessing. Once this is done, the DLLs // remain loaded forever. extern HMODULE d3d11_dll, d3d9_dll, dxva2_dll; +extern PFN_D3D11_CREATE_DEVICE d3d11_D3D11CreateDevice; void d3d_load_dlls(void); diff --git a/video/decode/hw_d3d11va.c b/video/decode/hw_d3d11va.c index c8255a36db..b75960945d 100644 --- a/video/decode/hw_d3d11va.c +++ b/video/decode/hw_d3d11va.c @@ -607,22 +607,14 @@ static struct mp_hwdec_ctx *d3d11_create_dev(struct mpv_global *global, HRESULT hr; d3d_load_dlls(); - if (!d3d11_dll) { + if (!d3d11_D3D11CreateDevice) { mp_err(plog, "Failed to load D3D11 library\n"); return NULL; } - PFN_D3D11_CREATE_DEVICE CreateDevice = - (void *)GetProcAddress(d3d11_dll, "D3D11CreateDevice"); - if (!CreateDevice) { - mp_err(plog, "Failed to get D3D11CreateDevice symbol from DLL: %s\n", - mp_LastError_to_str()); - return NULL; - } - - hr = CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, - D3D11_CREATE_DEVICE_VIDEO_SUPPORT, NULL, 0, - D3D11_SDK_VERSION, &device, NULL, NULL); + hr = d3d11_D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, + D3D11_CREATE_DEVICE_VIDEO_SUPPORT, NULL, 0, + D3D11_SDK_VERSION, &device, NULL, NULL); if (FAILED(hr)) { mp_err(plog, "Failed to create D3D11 Device: %s\n", mp_HRESULT_to_str(hr)); |