Вычислить в зависимости от графики - PullRequest
2 голосов
/ 30 марта 2020

Я делаю алгоритм 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 после этапа вычисления. Это хороший способ решения этой проблемы или есть какой-то другой способ, когда мне не нужно считывать данные в ЦП?

1 Ответ

2 голосов
/ 30 марта 2020

Ну, это именно то, для чего vkCmdDrawIndirect . Число вершин сохраняется в Vkuffer, что делает ненужным циклическое использование ЦП.

...