import FluidGridData; struct Params { FluidGridData velocityX; FluidGridData velocityY; FluidGridData velocityZ; float3 force; float dt; }; ParameterBlock params; [shader("compute")] [numthreads(32, 8, 1)] void applyForces(uint3 dispatchThreadID : SV_DispatchThreadID) { FluidGridData velocityX = params.velocityX; FluidGridData velocityY = params.velocityY; FluidGridData velocityZ = params.velocityZ; float3 force = params.force; float dt = params.dt; int x = dispatchThreadID.x + 1; int y = dispatchThreadID.y + 1; int z = dispatchThreadID.z + 1; if(x >= gridParams.gridSize.x - 1 || y >= gridParams.gridSize.y - 1 || z >= gridParams.gridSize.z - 1) return; velocityX[x, y, z] += force.x * dt; velocityY[x, y, z] += force.y * dt; velocityZ[x, y, z] += force.z * dt; }