Я делаю алгоритм Marching cube в шейдере Compute. Вершины, сгенерированные каскадом вычислений, будут вводиться в ступень вершин.
Compute -> Vertices -> Render
Нет способа узнать, сколько вершин будет выводить ступень вычислений, поэтому мне нужно, чтобы storage buffer
выглядел примерно так this:
layout(set = 1, binding = 0) buffer Count{
int value;
} count;
layout(set = 2, binding = 0) buffer Mesh {
vec4 vertices[1<<15];
} mesh;
Вершинам не требуется обратная передача в CPU, но счетчик является переменной, используемой командой vkCmdDraw
. Поэтому мне нужно поместить буфер подсчета в видимую память хоста, отобразить эту память и выполнить memcpy после этапа вычисления. Это хороший способ решения этой проблемы или есть какой-то другой способ, когда мне не нужно считывать данные в ЦП?