groupshared float scratch[64]; struct Params { uint count; float scale; }; RWStructuredBuffer params : register(u0, space0); struct DataBuffer { float values[64]; }; RWStructuredBuffer data : register(u1, space0); [numthreads(64, 1, 1)] void main(uint __luma_work_local_index : SV_GroupIndex, uint3 __luma_work_global_id : SV_DispatchThreadID, uint3 __luma_work_local_id : SV_GroupThreadID, uint3 __luma_work_group_id : SV_GroupID) { uint idx = __luma_work_local_index; uint gid = __luma_work_global_id.x; uint lid = __luma_work_local_id.x; uint group_x = __luma_work_group_id.x; if ((gid < params.count)) { scratch[idx] = (data.values[idx] * params.scale); GroupMemoryBarrierWithGroupSync(); data.values[idx] = (scratch[idx] + (float)(lid + group_x)); } }