ExternalTextures imported from HTMLVideoElements get "expired" in the
"automatic expiry task source", which is implemented by scheduling a
stable state task. ExternalTextures imported from VideoFrames get
expired when the VideoFrame is closed.
Keep track of each external texture used by any used bind group when
encoding compute and render passes. When submitting, if any passes
contain expired external textures then raise a validation error.
Currently we always create a new ExternalTexture when
importExternalTexture() is called. When support for reusing previously
imported textures is added, we must ensure they are correctly
"unexpired".
Differential Revision: https://phabricator.services.mozilla.com/D260295
Most changes are automated. Relevant bit is dom/.clang-format. I had to
manually disable clang-format in a few places where importing external
files and so on that aren't self-contained, and fix a couple includes /
forward declarations.
Differential Revision: https://phabricator.services.mozilla.com/D256800
This reverts commit 22fb6f2691.
Revert "Bug 1975714 - Update backlog expectations. r=webgpu-reviewers,nical"
This reverts commit 72b4644a09.
Revert "Bug 1975714 - Use `MOZ_CAN_RUN_SCRIPT_BOUNDARY` for `reportCompilationMessagesToConsole`. r=webgpu-reviewers,ErichDonGubler"
This reverts commit 4394625f93.
Revert "Bug 1975714 - Assert that the IDs in server messages are the same as the ones the `WebGPUChild` actor expects. r=webgpu-reviewers,nical"
This reverts commit 5ce8cf9b12.
Revert "Bug 1978369 - Stop leaking queues. r=webgpu-reviewers,nical"
This reverts commit 32ab875eab.
Revert "Bug 1975714 - Move remaining ID creation/destruction into resource creation/destruction functions. r=webgpu-reviewers,nical"
This reverts commit 122e1a6529.
Revert "Bug 1975714 - Replace uses of `make_slice` with `FfiSlice`. r=webgpu-reviewers,ErichDonGubler"
This reverts commit 62add844bf.
Revert "Bug 1975714 - Use `FfiSlice` in remaining places. r=webgpu-reviewers,ErichDonGubler"
This reverts commit 3812af72dd.
Revert "Bug 1975714 - Use an opaque pointer for `WebGPUParent`. r=webgpu-reviewers,ErichDonGubler"
This reverts commit bf83ea6553.
Revert "Bug 1975714 - Remove unneeded `#[allow(dead_code)]`. r=webgpu-reviewers,ErichDonGubler"
This reverts commit a84b40d4b8.
Revert "Bug 1977861 - Stop leaking BGLs returned by GPUPipelineBase.getBindGroupLayout(). r=webgpu-reviewers,ErichDonGubler"
This reverts commit b5ec027bf9.
Revert "Bug 1975714 - Turn function pointers into extern fns. r=webgpu-reviewers,nical"
This reverts commit d3681b7012.
Revert "Bug 1975714 - Make sure to resolve/reject all pending promises in `ClearActorState`. r=webgpu-reviewers,nical"
This reverts commit 2f607174ce.
Revert "Bug 1975714 - Do not immediately resolve the lost promise on `device.destroy()`. r=webgpu-reviewers,nical"
This reverts commit 1c10e1f698.
Revert "Bug 1960399 - Reject async pipeline creation with `GPUPipelineError`. r=webgpu-reviewers,nical"
This reverts commit ee47165e63.
Revert "Bug 1975714 - Correct comments. r=webgpu-reviewers,nical"
This reverts commit 9e0aabda0e.
In preparation for remainder of the patch stack, clone `aDesc` so we have a mutable copy. We'll actually mutate it once we start accepting `Texture`s and not just `TextureView`s, which we'll convert in-place to views.
Differential Revision: https://phabricator.services.mozilla.com/D257053
How to push remote texture was changed several times. OffscreenCanvasDisplayData::mOwnerId is not used anymore.
And OffscreenCanvasDisplayData::mOwnerId blocks WebGPU OffscreenCanvas rendering.
Differential Revision: https://phabricator.services.mozilla.com/D231903
Driven by [gpuweb#4838](https://github.com/gpuweb/gpuweb/pull/4838).
The vast majority of this script was implemented with a Nushell script,
using the `nu` binary and the wonderful `fastmod` tool
```
# Copy-pasted from the OP in [`gpuweb`#4838](https://github.com/gpuweb/gpuweb/pull/4838).
let renames_table = '
Type Old New Used in
dict GPUImageDataLayout GPUTexelCopyBufferLayout "writeTexture,
parent type of ↙"
dict GPUImageCopyBuffer "GPUTexelCopyBufferInfo
extends ↑" T2B, B2T
dict GPUImageCopyTexture GPUTexelCopyTextureInfo T2B, B2T, T2T, writeTexture
dict GPUImageCopyTextureTagged "GPUCopyExternalImageDestInfo
extends ↑" copyExternalImageToTexture
dict GPUImageCopyExternalImage GPUCopyExternalImageSourceInfo copyExternalImageToTexture
union GPUImageCopyExternalImageSource GPUCopyExternalImageSource member of ↖
'
let renames_table = $renames_table
| from tsv
| select 'Old ' 'New '
| rename old new
| update new { $in | lines | get 0 } # only the first line has the renamed symbol identifier
| update new { str trim }
| update old { str trim }
| sort-by old | reverse # Replace most specific symbol names first (some have the same "word segments" but with fewer segments)
# Rename image APIs.
let rename_paths = [
...("dom/webgpu/*.{cpp,h}" | str expand)
"dom/webidl/WebGPU.webidl"
] | each { glob $in } | flatten
for entry in $renames_table {
print $'replacing ($entry.old | to nuon) with ($entry.new | to nuon)'
fastmod --accept-all $'\b($entry.old)' $entry.new ...$rename_paths
}
```
Differential Revision: https://phabricator.services.mozilla.com/D230193
Driven by [gpuweb#4838](https://github.com/gpuweb/gpuweb/pull/4838).
The vast majority of this script was implemented with a Nushell script,
using the `nu` binary and the wonderful `fastmod` tool
```
# Copy-pasted from the OP in [`gpuweb`#4838](https://github.com/gpuweb/gpuweb/pull/4838).
let renames_table = '
Type Old New Used in
dict GPUImageDataLayout GPUTexelCopyBufferLayout "writeTexture,
parent type of ↙"
dict GPUImageCopyBuffer "GPUTexelCopyBufferInfo
extends ↑" T2B, B2T
dict GPUImageCopyTexture GPUTexelCopyTextureInfo T2B, B2T, T2T, writeTexture
dict GPUImageCopyTextureTagged "GPUCopyExternalImageDestInfo
extends ↑" copyExternalImageToTexture
dict GPUImageCopyExternalImage GPUCopyExternalImageSourceInfo copyExternalImageToTexture
union GPUImageCopyExternalImageSource GPUCopyExternalImageSource member of ↖
'
let renames_table = $renames_table
| from tsv
| select 'Old ' 'New '
| rename old new
| update new { $in | lines | get 0 } # only the first line has the renamed symbol identifier
| update new { str trim }
| update old { str trim }
| sort-by old | reverse # Replace most specific symbol names first (some have the same "word segments" but with fewer segments)
# Rename image APIs.
let rename_paths = [
...("dom/webgpu/*.{cpp,h}" | str expand)
"dom/webidl/WebGPU.webidl"
] | each { glob $in } | flatten
for entry in $renames_table {
print $'replacing ($entry.old | to nuon) with ($entry.new | to nuon)'
fastmod --accept-all $'\b($entry.old)' $entry.new ...$rename_paths
}
```
Differential Revision: https://phabricator.services.mozilla.com/D230193
Because EndComputePass and EndRenderPass are called during cleanup, it's
necessary for the CommandEncoder to check for a non-null bridge. This is
noted as being necessary in dom/webgpu/ObjectModel.h.
Differential Revision: https://phabricator.services.mozilla.com/D210244
They are the same and the latter is more self explanatory.
The patch also addresses a couple of Cleanup methods where I forgot to check the bridge pointer.
Differential Revision: https://phabricator.services.mozilla.com/D206785