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)) {