0

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.

Crimsoon
  • 83
  • 8
  • I used multiple `StructuredBuffer` and it works just fine. Without further details I'd expect no problems. – KYL3R Aug 26 '22 at 17:48
  • @KYL3R but how do I know which buffer do I pass data to? and which buffer do i get data from? – Crimsoon Aug 26 '22 at 17:50

1 Answers1

1

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);
KYL3R
  • 3,877
  • 1
  • 12
  • 26