diff --git a/dom/webgpu/Queue.cpp b/dom/webgpu/Queue.cpp index c4965c06a4c0..6434c2d5965b 100644 --- a/dom/webgpu/Queue.cpp +++ b/dom/webgpu/Queue.cpp @@ -61,11 +61,11 @@ already_AddRefed Queue::OnSubmittedWorkDone(ErrorResult& aRv) { return promise.forget(); } -void Queue::WriteBuffer(const Buffer& aBuffer, uint64_t aBufferOffset, - const dom::ArrayBufferViewOrArrayBuffer& aData, - uint64_t aDataOffset, - const dom::Optional& aSize, - ErrorResult& aRv) { +void Queue::WriteBuffer( + const Buffer& aBuffer, uint64_t aBufferOffset, + const dom::MaybeSharedArrayBufferOrMaybeSharedArrayBufferView& aData, + uint64_t aDataOffset, const dom::Optional& aSize, + ErrorResult& aRv) { if (!aBuffer.mId) { // Invalid buffers are unknown to the parent -- don't try to write // to them. @@ -178,10 +178,11 @@ static CheckedInt ComputeApproxSize( } } -void Queue::WriteTexture(const dom::GPUTexelCopyTextureInfo& aDestination, - const dom::ArrayBufferViewOrArrayBuffer& aData, - const dom::GPUTexelCopyBufferLayout& aDataLayout, - const dom::GPUExtent3D& aSize, ErrorResult& aRv) { +void Queue::WriteTexture( + const dom::GPUTexelCopyTextureInfo& aDestination, + const dom::MaybeSharedArrayBufferOrMaybeSharedArrayBufferView& aData, + const dom::GPUTexelCopyBufferLayout& aDataLayout, + const dom::GPUExtent3D& aSize, ErrorResult& aRv) { ffi::WGPUTexelCopyTextureInfo copyView = {}; CommandEncoder::ConvertTextureCopyViewToFFI(aDestination, ©View); ffi::WGPUTexelCopyBufferLayout dataLayout = {}; diff --git a/dom/webgpu/Queue.h b/dom/webgpu/Queue.h index 0e013e517de2..5fbcf882db43 100644 --- a/dom/webgpu/Queue.h +++ b/dom/webgpu/Queue.h @@ -47,15 +47,17 @@ class Queue final : public ObjectBase, public ChildOf { already_AddRefed OnSubmittedWorkDone(ErrorResult& aRv); - void WriteBuffer(const Buffer& aBuffer, uint64_t aBufferOffset, - const dom::ArrayBufferViewOrArrayBuffer& aData, - uint64_t aDataOffset, const dom::Optional& aSize, - ErrorResult& aRv); + void WriteBuffer( + const Buffer& aBuffer, uint64_t aBufferOffset, + const dom::MaybeSharedArrayBufferOrMaybeSharedArrayBufferView& data, + uint64_t aDataOffset, const dom::Optional& aSize, + ErrorResult& aRv); - void WriteTexture(const dom::GPUTexelCopyTextureInfo& aDestination, - const dom::ArrayBufferViewOrArrayBuffer& aData, - const dom::GPUTexelCopyBufferLayout& aDataLayout, - const dom::GPUExtent3D& aSize, ErrorResult& aRv); + void WriteTexture( + const dom::GPUTexelCopyTextureInfo& aDestination, + const dom::MaybeSharedArrayBufferOrMaybeSharedArrayBufferView& data, + const dom::GPUTexelCopyBufferLayout& aDataLayout, + const dom::GPUExtent3D& aSize, ErrorResult& aRv); void CopyExternalImageToTexture( const dom::GPUCopyExternalImageSourceInfo& aSource, diff --git a/dom/webgpu/mochitest/mochitest.toml b/dom/webgpu/mochitest/mochitest.toml index 36ef4d61fddc..2c20197a39f8 100644 --- a/dom/webgpu/mochitest/mochitest.toml +++ b/dom/webgpu/mochitest/mochitest.toml @@ -61,6 +61,8 @@ scheme = "http" ["test_set_bind_group_null.html"] +["test_shared_array_buffer.html"] + ["test_submit_compute_empty.html"] ["test_submit_render_empty.html"] diff --git a/dom/webgpu/mochitest/test_shared_array_buffer.html b/dom/webgpu/mochitest/test_shared_array_buffer.html new file mode 100644 index 000000000000..ce1fc6ce1806 --- /dev/null +++ b/dom/webgpu/mochitest/test_shared_array_buffer.html @@ -0,0 +1,54 @@ + + + + + + + + + + + diff --git a/dom/webidl/WebGPU.webidl b/dom/webidl/WebGPU.webidl index 0b651c94d80f..84ac44015665 100644 --- a/dom/webidl/WebGPU.webidl +++ b/dom/webidl/WebGPU.webidl @@ -1195,10 +1195,6 @@ dictionary GPUQueueDescriptor : GPUObjectDescriptorBase { }; -//TODO: use [AllowShared] on BufferSource -// https://bugzilla.mozilla.org/show_bug.cgi?id=1696216 -// https://github.com/heycam/webidl/issues/961 - [Func="mozilla::webgpu::Instance::PrefEnabled", Exposed=(Window, Worker), SecureContext] interface GPUQueue { @@ -1211,14 +1207,14 @@ interface GPUQueue { undefined writeBuffer( GPUBuffer buffer, GPUSize64 bufferOffset, - BufferSource data, + AllowSharedBufferSource data, optional GPUSize64 dataOffset = 0, optional GPUSize64 size); [Throws] undefined writeTexture( GPUTexelCopyTextureInfo destination, - BufferSource data, + AllowSharedBufferSource data, GPUTexelCopyBufferLayout dataLayout, GPUExtent3D size);