From d8eff2623d480c649e0412c950fbe4b52b1b7e0e Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Fri, 8 Oct 2021 17:16:02 +0900 Subject: [PATCH] d3d11: d3d11device: Remove "allow-tearing" property Plugin can query DXGI_FEATURE_PRESENT_ALLOW_TEARING without d3d11device help Part-of: --- .../gst-libs/gst/d3d11/gstd3d11device.cpp | 24 ---------------------- .../gst-plugins-bad/sys/d3d11/gstd3d11window.cpp | 20 +++++++++++++++++- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp index 5eba00a..79cdaa8 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp @@ -87,7 +87,6 @@ enum PROP_VENDOR_ID, PROP_HARDWARE, PROP_DESCRIPTION, - PROP_ALLOW_TEARING, PROP_CREATE_FLAGS, PROP_ADAPTER_LUID, }; @@ -104,7 +103,6 @@ struct _GstD3D11DevicePrivate guint vendor_id; gboolean hardware; gchar *description; - gboolean allow_tearing; guint create_flags; gint64 adapter_luid; @@ -398,11 +396,6 @@ gst_d3d11_device_class_init (GstD3D11DeviceClass * klass) g_param_spec_string ("description", "Description", "Human readable device description", NULL, readable_flags)); - g_object_class_install_property (gobject_class, PROP_ALLOW_TEARING, - g_param_spec_boolean ("allow-tearing", "Allow tearing", - "Whether dxgi device supports allow-tearing feature or not", FALSE, - readable_flags)); - g_object_class_install_property (gobject_class, PROP_CREATE_FLAGS, g_param_spec_uint ("create-flags", "Create flags", "D3D11_CREATE_DEVICE_FLAG flags used for D3D11CreateDevice", @@ -810,20 +803,6 @@ gst_d3d11_device_constructed (GObject * object) GST_ERROR_OBJECT (self, "cannot create dxgi factory, hr: 0x%x", (guint) hr); goto out; } -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) - { - ComPtr < IDXGIFactory5 > factory5; - BOOL allow_tearing; - - hr = factory.As (&factory5); - if (SUCCEEDED (hr)) { - hr = factory5->CheckFeatureSupport (DXGI_FEATURE_PRESENT_ALLOW_TEARING, - (void *) &allow_tearing, sizeof (allow_tearing)); - - priv->allow_tearing = SUCCEEDED (hr) && allow_tearing; - } - } -#endif if (factory->EnumAdapters1 (priv->adapter, &adapter) == DXGI_ERROR_NOT_FOUND) { GST_DEBUG_OBJECT (self, "No adapter for index %d", priv->adapter); @@ -997,9 +976,6 @@ gst_d3d11_device_get_property (GObject * object, guint prop_id, case PROP_DESCRIPTION: g_value_set_string (value, priv->description); break; - case PROP_ALLOW_TEARING: - g_value_set_boolean (value, priv->allow_tearing); - break; case PROP_CREATE_FLAGS: g_value_set_uint (value, priv->create_flags); break; diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp index 00f98be..d0c994d 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp @@ -533,7 +533,25 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, /* Step 3: Create swapchain * (or reuse old swapchain if the format is not changed) */ window->allow_tearing = FALSE; - g_object_get (window->device, "allow-tearing", &window->allow_tearing, NULL); + +#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) + { + ComPtr < IDXGIFactory5 > factory5; + IDXGIFactory1 *factory_handle; + BOOL allow_tearing = FALSE; + + factory_handle = gst_d3d11_device_get_dxgi_factory_handle (window->device); + hr = factory_handle->QueryInterface (IID_PPV_ARGS (&factory5)); + if (SUCCEEDED (hr)) { + hr = factory5->CheckFeatureSupport (DXGI_FEATURE_PRESENT_ALLOW_TEARING, + (void *) &allow_tearing, sizeof (allow_tearing)); + } + + if (SUCCEEDED (hr) && allow_tearing) + window->allow_tearing = allow_tearing; + } +#endif + if (window->allow_tearing) { GST_DEBUG_OBJECT (window, "device support tearning"); swapchain_flags |= DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING; -- 2.7.4