From 92ba5754d636e7d0a5741383a094c8f74f7480b5 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Fri, 16 Jan 2026 22:03:48 +0100 Subject: [PATCH] refactor: update workgroup size in compute shader and dispatch logic Modified the workgroup size in the state-update compute shader from 1 to 64 for improved parallel processing. Adjusted the dispatch logic in StateUpdatePass to calculate the correct number of workgroups based on the new size, enhancing performance during state updates. Removed unnecessary terrain parameter upload in TerritoryRenderer to streamline resource management. --- src/client/graphics/webgpu/TerritoryRenderer.ts | 3 --- src/client/graphics/webgpu/compute/StateUpdatePass.ts | 4 +++- src/client/graphics/webgpu/shaders/compute/state-update.wgsl | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/client/graphics/webgpu/TerritoryRenderer.ts b/src/client/graphics/webgpu/TerritoryRenderer.ts index 6d2dd608b..12861303c 100644 --- a/src/client/graphics/webgpu/TerritoryRenderer.ts +++ b/src/client/graphics/webgpu/TerritoryRenderer.ts @@ -316,9 +316,6 @@ export class TerritoryRenderer { // Upload palette if needed this.resources.uploadPalette(); - // Upload terrain params if needed (theme changed) - this.resources.uploadTerrainParams(); - // Upload defense posts if needed (tracks if it was dirty before upload) const wasDefensePostsDirty = (this.resources as any) .needsDefensePostsUpload; diff --git a/src/client/graphics/webgpu/compute/StateUpdatePass.ts b/src/client/graphics/webgpu/compute/StateUpdatePass.ts index a61a04789..f2d6e47a4 100644 --- a/src/client/graphics/webgpu/compute/StateUpdatePass.ts +++ b/src/client/graphics/webgpu/compute/StateUpdatePass.ts @@ -101,7 +101,9 @@ export class StateUpdatePass implements ComputePass { const pass = encoder.beginComputePass(); pass.setPipeline(this.pipeline); pass.setBindGroup(0, this.bindGroup); - pass.dispatchWorkgroups(numUpdates); + // Dispatch with workgroup_size(64), so divide by 64 and round up + const workgroupCount = Math.ceil(numUpdates / 64); + pass.dispatchWorkgroups(workgroupCount); pass.end(); } diff --git a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl index 9532b8af0..8fb0821a5 100644 --- a/src/client/graphics/webgpu/shaders/compute/state-update.wgsl +++ b/src/client/graphics/webgpu/shaders/compute/state-update.wgsl @@ -6,7 +6,7 @@ struct Update { @group(0) @binding(0) var updates: array; @group(0) @binding(1) var stateTex: texture_storage_2d; -@compute @workgroup_size(1) +@compute @workgroup_size(64) fn main(@builtin(global_invocation_id) globalId: vec3) { let idx = globalId.x; if (idx >= arrayLength(&updates)) {