2

I am doing a Marching cube algorithm in a Compute shader. The vertices generated by the compute stage will be input to the vertex stage.

Compute -> Vertices -> Render

There is no way of knowing how many vertices that the compute stage will output, so I need a storage buffer looking something like this:

layout(set = 1, binding = 0) buffer Count{
  int value;
} count;

layout(set = 2, binding = 0) buffer Mesh {
  vec4 vertices[1<<15];
} mesh;

The vertices do not need a roundtrip to the CPU, but the count is a variable used by the vkCmdDraw command. So I need to put the count buffer in host visible memory, map that memory and do a memcpy after the compute stage. Is this a good way of solving this problem or is there some other way where I don't have to read back data to the CPU?

hidayat
  • 9,493
  • 13
  • 51
  • 66

1 Answers1

2

Well, this is exactly what vkCmdDrawIndirect is for. The vertex count is stored in a Vkuffer, which makes the CPU round-trip unnecessary.

krOoze
  • 12,301
  • 1
  • 20
  • 34