Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
3282f4f
Fix WebGPU renderer memory churn
RenaudRohlinger Apr 19, 2026
d0308b4
WebGPURenderer: Eliminate remaining per-frame allocations.
RenaudRohlinger Apr 19, 2026
d050d8e
WebGPURenderer: Trim compute-path allocations.
RenaudRohlinger Apr 19, 2026
c71e440
E2E: Add perf/VRAM regression harness.
RenaudRohlinger Apr 19, 2026
d2f09ff
WebGPURenderer: Remove error-reporting code unrelated to this PR.
RenaudRohlinger Apr 19, 2026
9b0bc2f
WebGPURenderer: Address review feedback on PR #33419.
RenaudRohlinger Apr 20, 2026
5126da4
WebGPURenderer: Wrap `GPUTexelCopyTextureInfo` descriptors in a class.
RenaudRohlinger Apr 20, 2026
2f37c04
WebGPURenderer: Move `TexelCopyTextureInfo` to WebGPUTextureUtils.
RenaudRohlinger Apr 20, 2026
507641d
WebGPURenderer: Move `TexelCopyTextureInfo` into its own module.
RenaudRohlinger Apr 20, 2026
04f1d1a
E2E: Remove perf regression harness from this PR.
RenaudRohlinger Apr 20, 2026
2e164b2
WebGPURenderer: Remove per-draw WeakMap.set allocation in pipeline de…
RenaudRohlinger Apr 20, 2026
dbad1d4
NodeMaterialObserver: Reuse `lightsData` cache entry per frame.
RenaudRohlinger Apr 20, 2026
47bcec4
UniformsGroup: Pool per-uniform update-range objects.
RenaudRohlinger Apr 20, 2026
598a225
NodeFrame: Call `performance.now()` once per update, init `lastTime` …
RenaudRohlinger Apr 20, 2026
4c5771f
Revert three follow-up commits to re-scope this PR.
RenaudRohlinger Apr 20, 2026
df69238
WebGPURenderer: Reset compute `currentPipeline` when a new pass encod…
RenaudRohlinger Apr 20, 2026
aecadd9
Move to constructor
RenaudRohlinger Apr 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion src/renderers/common/Renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,16 @@ class Renderer {
*/
this._compilationPromises = null;

/**
* A reusable single-element array used by `compute()` when called with
* a single compute node. Avoids allocating a fresh `[ computeNodes ]`
* array on every call, which would otherwise churn the GC each frame.
*
* @private
* @type {Array<?Node>}
*/
this._computeSingleton = [ null ];

/**
* Whether the renderer should render transparent render objects or not.
*
Expand Down Expand Up @@ -2724,7 +2734,18 @@ class Renderer {
const bindings = this._bindings;
const nodes = this._nodes;

const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
let computeList;

if ( Array.isArray( computeNodes ) ) {

computeList = computeNodes;

} else {

this._computeSingleton[ 0 ] = computeNodes;
Comment thread
Mugen87 marked this conversation as resolved.
computeList = this._computeSingleton;

}

if ( computeList[ 0 ] === undefined || computeList[ 0 ].isComputeNode !== true ) {

Expand Down
Loading
Loading