35 lines
1.1 KiB
Plaintext
35 lines
1.1 KiB
Plaintext
import FluidGridData;
|
|
|
|
struct Params
|
|
{
|
|
// read-only
|
|
FluidGridData<float> velocityX;
|
|
// read-only
|
|
FluidGridData<float> velocityY;
|
|
// read-only
|
|
FluidGridData<float> velocityZ;
|
|
// read-write
|
|
FluidGridData<float> divergence;
|
|
// read-write
|
|
FluidGridData<float> pressure;
|
|
};
|
|
ParameterBlock<Params> params;
|
|
|
|
[shader("compute")]
|
|
[numthreads(32, 8, 1)]
|
|
void computeDivergence(uint3 dispatchThreadID : SV_DispatchThreadID)
|
|
{
|
|
FluidGridData<float> velocityX = params.velocityX;
|
|
FluidGridData<float> velocityY = params.velocityY;
|
|
FluidGridData<float> velocityZ = params.velocityZ;
|
|
FluidGridData<float> divergence = params.divergence;
|
|
FluidGridData<float> pressure = params.pressure;
|
|
|
|
int x = dispatchThreadID.x + 1;
|
|
int y = dispatchThreadID.y + 1;
|
|
int z = dispatchThreadID.z + 1;
|
|
if(x >= gridSize.x - 1 || y >= gridSize.y - 1 || z >= gridSize.z - 1) return;
|
|
|
|
divergence[x, y, z] = -0.5f * (velocityX[x + 1, y, z] - velocityX[x - 1, y, z] + velocityY[x, y + 1, z] - velocityY[x, y - 1, z] + velocityZ[x, y, z + 1] - velocityZ[x, y, z - 1]) / gridSize.x;
|
|
pressure[x, y, z] = 0;
|
|
} |