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 Answer
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);
StructuredBuffer<float4>and it works just fine. Without further details I'd expect no problems.