Skip to content

Commit a6ef8f5

Browse files
WebGPURenderer: Fix WebGPU render bundle reuse across render contexts (#33335)
1 parent 37a0863 commit a6ef8f5

3 files changed

Lines changed: 10 additions & 11 deletions

File tree

src/renderers/common/RenderBundle.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ class RenderBundle {
1111
*
1212
* @param {BundleGroup} bundleGroup - The bundle group.
1313
* @param {Camera} camera - The camera the bundle group is rendered with.
14+
* @param {RenderContext} renderContext - The render context the bundle is rendered with.
1415
*/
15-
constructor( bundleGroup, camera ) {
16+
constructor( bundleGroup, camera, renderContext ) {
1617

1718
this.bundleGroup = bundleGroup;
1819
this.camera = camera;
20+
this.renderContext = renderContext;
1921

2022
}
2123

src/renderers/common/RenderBundles.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,29 @@ class RenderBundles {
2929
*
3030
* @param {BundleGroup} bundleGroup - The bundle group.
3131
* @param {Camera} camera - The camera the bundle group is rendered with.
32+
* @param {RenderContext} renderContext - The render context the bundle is rendered with.
3233
* @return {RenderBundle} The render bundle.
3334
*/
34-
get( bundleGroup, camera ) {
35+
get( bundleGroup, camera, renderContext ) {
3536

3637
const bundles = this.bundles;
3738

3839
_chainKeys[ 0 ] = bundleGroup;
3940
_chainKeys[ 1 ] = camera;
41+
_chainKeys[ 2 ] = renderContext;
4042

4143
let bundle = bundles.get( _chainKeys );
4244

4345
if ( bundle === undefined ) {
4446

45-
bundle = new RenderBundle( bundleGroup, camera );
47+
bundle = new RenderBundle( bundleGroup, camera, renderContext );
4648
bundles.set( _chainKeys, bundle );
4749

4850
}
4951

5052
_chainKeys[ 0 ] = null;
5153
_chainKeys[ 1 ] = null;
54+
_chainKeys[ 2 ] = null;
5255

5356
return bundle;
5457

src/renderers/common/Renderer.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,17 +1213,11 @@ class Renderer {
12131213

12141214
//
12151215

1216-
const renderBundle = this._bundles.get( bundleGroup, camera );
1216+
const renderBundle = this._bundles.get( bundleGroup, camera, renderContext );
12171217
const renderBundleData = this.backend.get( renderBundle );
12181218

1219-
if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
1220-
1221-
//
1222-
12231219
const needsUpdate = bundleGroup.version !== renderBundleData.version;
1224-
const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || needsUpdate;
1225-
1226-
renderBundleData.renderContexts.add( renderContext );
1220+
const renderBundleNeedsUpdate = needsUpdate || renderBundleData.bundleGPU === undefined;
12271221

12281222
if ( renderBundleNeedsUpdate ) {
12291223

0 commit comments

Comments
 (0)