From d16b5b7f7f5342bed933478bcccdac02d0477038 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 18 Jan 2021 19:17:14 +0900 Subject: [PATCH] d3d11: Allow building UWP features with Desktop features if possible WINAPI_PARTITION_DESKTOP and WINAPI_PARTITION_APP can coexist. Although UWP only binaries should be used for production stage, this change will be useful for development stage Part-of: --- gst-libs/gst/d3d11/gstd3d11config.h.meson | 1 + gst-libs/gst/d3d11/meson.build | 16 ++++++++++------ sys/d3d11/gstd3d11videosink.c | 8 +++++--- sys/d3d11/gstd3d11window.cpp | 7 ++++--- sys/d3d11/meson.build | 8 ++++++-- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/gst-libs/gst/d3d11/gstd3d11config.h.meson b/gst-libs/gst/d3d11/gstd3d11config.h.meson index 65b7253888..ababe80b6d 100644 --- a/gst-libs/gst/d3d11/gstd3d11config.h.meson +++ b/gst-libs/gst/d3d11/gstd3d11config.h.meson @@ -10,6 +10,7 @@ G_BEGIN_DECLS #mesondefine GST_D3D11_DXGI_HEADER_VERSION #mesondefine GST_D3D11_HEADER_VERSION #mesondefine GST_D3D11_WINAPI_ONLY_APP +#mesondefine GST_D3D11_WINAPI_APP G_END_DECLS diff --git a/gst-libs/gst/d3d11/meson.build b/gst-libs/gst/d3d11/meson.build index da08234ce5..b699082d5f 100644 --- a/gst-libs/gst/d3d11/meson.build +++ b/gst-libs/gst/d3d11/meson.build @@ -80,15 +80,15 @@ if not have_d3d11 subdir_done() endif -winapi_desktop = cxx.compiles('''#include +d3d11_winapi_desktop = cxx.compiles('''#include #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #error "not win32" #endif''', dependencies: [d3d11_lib, dxgi_lib], - name: 'checking if building for Win32') + name: 'building for Win32') if runtimeobject_lib.found() and d3dcompiler_lib.found() - winapi_app = cxx.compiles('''#include + d3d11_winapi_app = cxx.compiles('''#include #include #include #include @@ -96,17 +96,21 @@ if runtimeobject_lib.found() and d3dcompiler_lib.found() #include #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #error "not winrt" + #endif + #if (WINVER < 0x0A00) + #error "Windows 10 API is not guaranteed" #endif''', dependencies: [d3d11_lib, dxgi_lib, runtimeobject_lib], - name: 'checking if building for WinRT') + name: 'building for WinRT') endif -if not winapi_desktop and not winapi_app +if not d3d11_winapi_desktop and not d3d11_winapi_app error('Neither Desktop partition nor App partition') endif -d3d11_winapi_only_app = winapi_app and not winapi_desktop +d3d11_winapi_only_app = d3d11_winapi_app and not d3d11_winapi_desktop d3d11_conf.set10('GST_D3D11_WINAPI_ONLY_APP', d3d11_winapi_only_app) +d3d11_conf.set10('GST_D3D11_WINAPI_APP', d3d11_winapi_app) # for enabling debug layer # NOTE: Disable d3d11/dxgi debug layer in case of [UWP build + release CRT] diff --git a/sys/d3d11/gstd3d11videosink.c b/sys/d3d11/gstd3d11videosink.c index 6fb74e0bc5..51dc45ce22 100644 --- a/sys/d3d11/gstd3d11videosink.c +++ b/sys/d3d11/gstd3d11videosink.c @@ -25,10 +25,11 @@ #include "gstd3d11videoprocessor.h" #include "gstd3d11pluginutils.h" -#if GST_D3D11_WINAPI_ONLY_APP +#if GST_D3D11_WINAPI_APP #include "gstd3d11window_corewindow.h" #include "gstd3d11window_swapchainpanel.h" -#else +#endif +#if (!GST_D3D11_WINAPI_ONLY_APP) #include "gstd3d11window_win32.h" #endif @@ -669,7 +670,8 @@ gst_d3d11_video_sink_prepare_window (GstD3D11VideoSink * self) case GST_D3D11_WINDOW_NATIVE_TYPE_HWND: self->window = gst_d3d11_window_win32_new (self->device, self->window_id); break; -#else +#endif +#if GST_D3D11_WINAPI_APP case GST_D3D11_WINDOW_NATIVE_TYPE_CORE_WINDOW: self->window = gst_d3d11_window_core_window_new (self->device, self->window_id); diff --git a/sys/d3d11/gstd3d11window.cpp b/sys/d3d11/gstd3d11window.cpp index 60dc86014d..d67958df91 100644 --- a/sys/d3d11/gstd3d11window.cpp +++ b/sys/d3d11/gstd3d11window.cpp @@ -25,7 +25,7 @@ #include "gstd3d11window.h" #include "gstd3d11pluginutils.h" -#if GST_D3D11_WINAPI_ONLY_APP +#if GST_D3D11_WINAPI_APP /* workaround for GetCurrentTime collision */ #ifdef GetCurrentTime #undef GetCurrentTime @@ -40,7 +40,7 @@ #include #endif -#if GST_D3D11_WINAPI_ONLY_APP || defined(HAVE_DIRECT_WRITE) +#if GST_D3D11_WINAPI_APP || defined(HAVE_DIRECT_WRITE) #include #include using namespace Microsoft::WRL; @@ -1259,7 +1259,8 @@ gst_d3d11_window_get_native_type_from_handle (guintptr handle) #if (!GST_D3D11_WINAPI_ONLY_APP) if (IsWindow ((HWND) handle)) return GST_D3D11_WINDOW_NATIVE_TYPE_HWND; -#else +#endif +#if GST_D3D11_WINAPI_ONLY_APP { ComPtr window = reinterpret_cast (handle); ComPtr core_window; diff --git a/sys/d3d11/meson.build b/sys/d3d11/meson.build index e10a6c144c..4a987da52c 100644 --- a/sys/d3d11/meson.build +++ b/sys/d3d11/meson.build @@ -65,11 +65,15 @@ if d3d11_winapi_only_app and (not d3dcompiler_lib.found() or not runtimeobject_l subdir_done() endif -if d3d11_winapi_only_app +# if build target is Windows 10 and WINAPI_PARTITION_APP is allowed, +# we can build UWP only modules as well +if d3d11_winapi_app d3d11_sources += ['gstd3d11window_corewindow.cpp', 'gstd3d11window_swapchainpanel.cpp'] extra_dep += [runtimeobject_lib, d3dcompiler_lib] -else +endif + +if d3d11_winapi_desktop d3d11_sources += ['gstd3d11window_win32.cpp'] if d3d11_conf.get('GST_D3D11_DXGI_HEADER_VERSION') >= 6 # Desktop Duplication API is unavailable for UWP