Is it possible to use multiple compute buffers in compute shader in HLSL in Unity?

1.2k Views Asked by At

Is there any way to use two buffers in compute shader in HLSL in Unity? I need to use one to input some scalar values on a grid and one to get back vertex array generated by marching cubes.

1

There are 1 best solutions below

2
KYL3R On

You can define a RWStructuredBuffer - RW means Read+Write A normal StructuredBuffer is write-protected: you can't write TO it from the shader, but read it after passing it from C#.

You can define multiple in shader:

RWStructuredBuffer<float4> myFirstBuffer : register(u1); // index1 !
RWStructuredBuffer<float4> mySecondBuffer : register(u2); // index2 !

And access them like this in C#:

Graphics.ClearRandomWriteTargets();
material.SetPass(0);
material.SetBuffer("myFirstBuffer", myFirstBuffer);
Graphics.SetRandomWriteTarget(1, myFirstBuffer, false); // index 1!
compute_buffer.GetData(myFirstBuffer);

material.SetBuffer("mySecondBuffer", mySecondBuffer);
Graphics.SetRandomWriteTarget(2, mySecondBuffer, false); // index 2!
compute_buffer.GetData(mySecondBuffer);