summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2023-03-21 14:51:19 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2023-04-04 13:36:36 +0000
commit615ae5a0934f2d14cfd46a3dd21560a151ad7a69 (patch)
treec5c5ad2a23492d765964f1116a1e3a8150b4e906
parent213de45f57c6300d535cc1a91e9e0b600cd955ce (diff)
downloadqtwebengine-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>
-rw-r--r--chromium/gpu/command_buffer/service/shared_image/d3d_image_backing.cc2
-rw-r--r--chromium/gpu/command_buffer/service/shared_image/d3d_image_backing_factory.cc8
-rw-r--r--chromium/ui/gl/gl_image_d3d.h2
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_;