diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2023-03-21 14:51:19 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2023-04-04 13:36:36 +0000 |
commit | 615ae5a0934f2d14cfd46a3dd21560a151ad7a69 (patch) | |
tree | c5c5ad2a23492d765964f1116a1e3a8150b4e906 | |
parent | 213de45f57c6300d535cc1a91e9e0b600cd955ce (diff) | |
download | qtwebengine-chromium-615ae5a0934f2d14cfd46a3dd21560a151ad7a69.tar.gz |
Pass through non-keymutex share handles
For some reason I can't get the keymutex share handles to work,
but we can work with non-keyed shared handles.
Change-Id: I3e7f387570775a6cd23e17582e6ce36a79c5f111
Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/467974
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
3 files changed, 10 insertions, 2 deletions
diff --git a/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing.cc b/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing.cc index 81475036145..bd784108ae1 100644 --- a/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing.cc +++ b/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing.cc @@ -758,6 +758,8 @@ std::unique_ptr<OverlayImageRepresentation> D3DImageBacking::ProduceOverlay( size(), internal_format, data_type, color_space(), d3d11_texture_, array_slice_, plane_index_, swap_chain_); } + if (dxgi_shared_handle_state_) + static_cast<gl::GLImageD3D*>(gl_image.get())->shared_handle() = dxgi_shared_handle_state_->GetSharedHandle(); return std::make_unique<OverlayD3DImageRepresentation>(manager, this, tracker, std::move(gl_image)); } diff --git a/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing_factory.cc b/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing_factory.cc index 676570201ec..427a08a8dee 100644 --- a/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing_factory.cc +++ b/chromium/gpu/command_buffer/service/shared_image/d3d_image_backing_factory.cc @@ -356,8 +356,12 @@ std::unique_ptr<SharedImageBacking> D3DImageBackingFactory::CreateSharedImage( desc.MiscFlags = 0; } else { desc.CPUAccessFlags = 0; - desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_NTHANDLE | - D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX; + if (usage & gpu::SHARED_IMAGE_USAGE_WEBGPU) + desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_NTHANDLE | + D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX; + else + desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED | + D3D11_RESOURCE_MISC_SHARED_NTHANDLE; } Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture; HRESULT hr = d3d11_device_->CreateTexture2D(&desc, nullptr, &d3d11_texture); diff --git a/chromium/ui/gl/gl_image_d3d.h b/chromium/ui/gl/gl_image_d3d.h index a688cbcabca..8bc7f82fb20 100644 --- a/chromium/ui/gl/gl_image_d3d.h +++ b/chromium/ui/gl/gl_image_d3d.h @@ -69,6 +69,7 @@ class GL_EXPORT GLImageD3D : public GLImage { const Microsoft::WRL::ComPtr<IDXGISwapChain1>& swap_chain() const { return swap_chain_; } + HANDLE& shared_handle() { return shared_handle_; } size_t array_slice() const { return array_slice_; } size_t plane_index() const { return plane_index_; } @@ -80,6 +81,7 @@ class GL_EXPORT GLImageD3D : public GLImage { Microsoft::WRL::ComPtr<ID3D11Texture2D> texture_; const size_t array_slice_; const size_t plane_index_; + HANDLE shared_handle_ = NULL; Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain_; |