Skip to content

feat(🚧): add fence for shared texture memory#375

Open
pepperoni505 wants to merge 7 commits into
wcandillon:mainfrom
pepperoni505:feat/fences
Open

feat(🚧): add fence for shared texture memory#375
pepperoni505 wants to merge 7 commits into
wcandillon:mainfrom
pepperoni505:feat/fences

Conversation

@pepperoni505
Copy link
Copy Markdown
Contributor

Closes #369

Adds GPUSharedFence, exposing Dawn's shared-fence primitives so GPUSharedTextureMemory can be synchronized across queues/APIs. Until now beginAccess/endAccess only took the no-fence path, which is fine for single-producer still frames, but it can't safely coordinate an external producer and a GPU consumer on different queues (e.g. a video/camera surface being written while Dawn samples it).

pepperoni505 and others added 3 commits June 2, 2026 00:24
@wcandillon
Copy link
Copy Markdown
Owner

I like it a lot, thank you for the PR.

In my case I was flip flopping between 1. enabling people to do everything in JS using the SharedTextureMemory API or 2. pushing the importExternalTexture API.

And I realized that it's both 1. and 2.

Item 1 makes a lot of sense considering that this is React Native. You want to give full access/control over the native APIs. And I have a list of items there and this PR is part of that list, so again thank you for doing this.

And item 2 is also unavoidable anyway for zero-copy YUV texture support on Android.
So now my mental model on how to approach this is a bit tidier than yesterday.

@pepperoni505 pepperoni505 changed the title feat: add fence for shared texture memory feat(🚧): add fence for shared texture memory Jun 3, 2026
Copy link
Copy Markdown
Owner

@wcandillon wcandillon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! I am just confused about the two changes I commented on.

label: "test-frame",
});
const texture = memory.createTexture();
if (!memory.beginAccess(texture, true)) {
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this change make sense? Can you explain me?

frame.release();
return null;
}
memory.beginAccess(texture, true);
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this change make sense? Can you explain me?

Comment thread packages/webgpu/cpp/rnwgpu/api/GPUSharedFence.cpp Outdated
Comment thread packages/webgpu/cpp/rnwgpu/api/GPUSharedFence.h Outdated
Co-authored-by: William Candillon <wcandillon@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SharedTextureMemory: expose fences on beginAccess/endAccess?

2 participants