From 98db5d1a11cfd111ab51aa1082ead22d3ffda6e7 Mon Sep 17 00:00:00 2001 From: Alex Loiko Date: Fri, 15 Jan 2021 09:41:56 +0000 Subject: [PATCH] Revert "Add ability to load CreateDirect3DDeviceFromDXGIDevice from d3d11.dll" This reverts commit 23f60ebe015cdefd017639d3eb826bf058cae141. Reason for revert: breaks downstream: create_direct3d_device.h(14,10): fatal error: 'windows.graphics.capture.interop.h' file not found Original change's description: > Add ability to load CreateDirect3DDeviceFromDXGIDevice from d3d11.dll > > Creating a Direct3D11Device from a DXGIDevice is necessary for the new > WGC based window capturer. However, the > CreateDirect3DDeviceFromDXGIDevice API is not available on all > versions of Windows, which means we have to load this function from > d3d11.dll at runtime. > > You can see how this function will be used in this CL: > 196624: Finish implementing WGC Window Capturer and add unit tests. | > https://webrtc-review.googlesource.com/c/src/+/196624 > > I also ensure we don't leak HSTRINGs in GetActivationFactory and fix > up some includes in ScopedComInitializer. > > Bug: webrtc:9273 > Change-Id: Ida240b2c0f637d70ec405de7d8f59f0c12aee1f1 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196622 > Reviewed-by: Mirko Bonadei > Commit-Queue: Austin Orion > Cr-Commit-Position: refs/heads/master@{#32984} TBR=mbonadei@webrtc.org,tommi@webrtc.org,sergeyu@chromium.org,auorion@microsoft.com Change-Id: If48172db15ff09a10bd32e762ee2c952dc9d9337 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:9273 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/202023 Reviewed-by: Alex Loiko Commit-Queue: Alex Loiko Cr-Commit-Position: refs/heads/master@{#32992} --- rtc_base/BUILD.gn | 2 - rtc_base/win/create_direct3d_device.cc | 57 -------------------------- rtc_base/win/create_direct3d_device.h | 34 --------------- rtc_base/win/get_activation_factory.h | 4 +- rtc_base/win/scoped_com_initializer.cc | 3 -- rtc_base/win/scoped_com_initializer.h | 2 + 6 files changed, 3 insertions(+), 99 deletions(-) delete mode 100644 rtc_base/win/create_direct3d_device.cc delete mode 100644 rtc_base/win/create_direct3d_device.h diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 7181c234f3..34485047ca 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -126,8 +126,6 @@ rtc_library("rtc_base_approved") { if (is_win) { sources += [ - "win/create_direct3d_device.cc", - "win/create_direct3d_device.h", "win/get_activation_factory.cc", "win/get_activation_factory.h", "win/hstring.cc", diff --git a/rtc_base/win/create_direct3d_device.cc b/rtc_base/win/create_direct3d_device.cc deleted file mode 100644 index 02fe340d56..0000000000 --- a/rtc_base/win/create_direct3d_device.cc +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2020 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "rtc_base/win/create_direct3d_device.h" - -#include -#include - -namespace { - -FARPROC LoadD3D11Function(const char* function_name) { - static HMODULE const handle = - ::LoadLibraryExW(L"d3d11.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); - return handle ? ::GetProcAddress(handle, function_name) : nullptr; -} - -decltype(&::CreateDirect3D11DeviceFromDXGIDevice) -GetCreateDirect3D11DeviceFromDXGIDevice() { - static decltype(&::CreateDirect3D11DeviceFromDXGIDevice) const function = - reinterpret_cast( - LoadD3D11Function("CreateDirect3D11DeviceFromDXGIDevice")); - return function; -} - -} // namespace - -namespace webrtc { - -bool ResolveCoreWinRTDirect3DDelayload() { - return GetCreateDirect3D11DeviceFromDXGIDevice(); -} - -HRESULT CreateDirect3DDeviceFromDXGIDevice( - IDXGIDevice* dxgi_device, - ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice** - out_d3d11_device) { - decltype(&::CreateDirect3D11DeviceFromDXGIDevice) create_d3d11_device_func = - GetCreateDirect3D11DeviceFromDXGIDevice(); - if (!create_d3d11_device_func) - return E_FAIL; - - Microsoft::WRL::ComPtr inspectableSurface; - HRESULT hr = create_d3d11_device_func(dxgi_device, &inspectableSurface); - if (FAILED(hr)) - return hr; - - return inspectableSurface->QueryInterface(IID_PPV_ARGS(out_d3d11_device)); -} - -} // namespace webrtc diff --git a/rtc_base/win/create_direct3d_device.h b/rtc_base/win/create_direct3d_device.h deleted file mode 100644 index 102f74148c..0000000000 --- a/rtc_base/win/create_direct3d_device.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef RTC_BASE_WIN_CREATE_DIRECT3D_DEVICE_H_ -#define RTC_BASE_WIN_CREATE_DIRECT3D_DEVICE_H_ - -#include -#include -#include -#include - -namespace webrtc { - -// Callers must check the return value of ResolveCoreWinRTDirect3DDelayload() -// before using CreateDirect3DDeviceFromDXGIDevice(). -bool ResolveCoreWinRTDirect3DDelayload(); - -// Allows for the creating of Direct3D Devices from a DXGI device on versions -// of Windows greater than Win7. -HRESULT CreateDirect3DDeviceFromDXGIDevice( - IDXGIDevice* dxgi_device, - ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice** - out_d3d11_device); - -} // namespace webrtc - -#endif // RTC_BASE_WIN_CREATE_DIRECT3D_DEVICE_H_ diff --git a/rtc_base/win/get_activation_factory.h b/rtc_base/win/get_activation_factory.h index 08f602f0c4..801f39d313 100644 --- a/rtc_base/win/get_activation_factory.h +++ b/rtc_base/win/get_activation_factory.h @@ -40,10 +40,8 @@ HRESULT GetActivationFactory(InterfaceType** factory) { return hr; hr = RoGetActivationFactoryProxy(class_id_hstring, IID_PPV_ARGS(factory)); - if (FAILED(hr)) { - DeleteHstring(class_id_hstring); + if (FAILED(hr)) return hr; - } return DeleteHstring(class_id_hstring); } diff --git a/rtc_base/win/scoped_com_initializer.cc b/rtc_base/win/scoped_com_initializer.cc index 81079fb54c..b83ad32a67 100644 --- a/rtc_base/win/scoped_com_initializer.cc +++ b/rtc_base/win/scoped_com_initializer.cc @@ -10,9 +10,6 @@ #include "rtc_base/win/scoped_com_initializer.h" -#include "rtc_base/checks.h" -#include "rtc_base/logging.h" - namespace webrtc { ScopedCOMInitializer::ScopedCOMInitializer() { diff --git a/rtc_base/win/scoped_com_initializer.h b/rtc_base/win/scoped_com_initializer.h index 2427097b5b..918812fc72 100644 --- a/rtc_base/win/scoped_com_initializer.h +++ b/rtc_base/win/scoped_com_initializer.h @@ -13,6 +13,8 @@ #include +#include "rtc_base/logging.h" + namespace webrtc { // Initializes COM in the constructor (STA or MTA), and uninitializes COM in the