WebGPURenderer: Ensure valid state in compileAsync(). - #34506
Open
Mugen87 wants to merge 1 commit into
Open
Conversation
📦 Bundle sizeFull ESM build, minified and gzipped.
🌳 Bundle size after tree-shakingMinimal build including a renderer, camera, empty scene, and dependencies.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related issue: #32984
Description
As pointed out in #34481 (comment),
compileAsync()does not guarantee to operate under the correct renderer state.compileAsync()never set up the renderer state a normal render has, e.g. the internal framebuffer target, so properties likecurrentSampleswere evaluated wrongly during pre-compilation. This can lead to runtime errors or unusable pre-compilations. The state can't simply be set once becausecompileAsync()yields control back to the event loop and frames rendered in the meantime are not allowed to work under this state.The idea of this PR is to track the renderer state
compileAsync()relies on. Every time the method continues it sets this state, when the method yields control to the event loop it restores it. The new methods_beginPreCompile()and_finishPreCompile()are doing this. They must be called at different locations in pairs so the state is valid.