Вопросы о Vulkan VkSubpassDependency - PullRequest
       22

Вопросы о Vulkan VkSubpassDependency

1 голос
/ 01 августа 2020

Я изучаю Vulkan RenderPasses для хобби.

У меня есть следующие описания для членов структуры VkSubpassDependency. Многословие - это комбинация языка из источников (книги, spe c, inte rnet) и моей собственной словесной обработки. Описания могут быть неправильными из-за того, что я с ними возился.

// .srcSubpass: 
//      The subpass index from which "producing" operations should be finished before the second set of "consuming" operations executes.
//      If there are no dependencies on previous subpasses(eg: first subpass), use VK_SUBPASS_EXTERNAL.
// .srcStageMask:
//      A bitmask of the pipeline stages which produce the data read by the "consuming" commands.
// .srcAccessMask:
//      The types of memory operations that occurred during the "producing" commands.
// ----------
// .dstSubpass:
//      The index of the first subpass whose operations depend the output of this subpass; or VK_SUBPASS_EXTERNAL, if 
//      there are no destination subpasses dependencies.
// .dstStageMask:
//      A bitmask of the pipeline stages which depend on the data generated by the "producing" commands.
// .dstAccessMask:
//      The types of memory operations that will be performed in "consuming" commands.

У меня есть несколько вопросов

Допустим, RenderPass имеет 3 подпаса - S1, S2, S3, «логически» выполняется последовательно, но может выполняться графическим процессором вне очереди.

    1. srcSubpass:
  • 1.1. Возможен ли сценарий, в котором S3 не зависит ни от S1, ни от S2? Или последующие подпроходы всегда зависят от предыдущего прохода?
  • 1.2. Если 1.1 верно, то srcSubpass будет VK_SUBPASS_EXTERNAL, правильно?
  • 1.3. Или VK_SUBPASS_EXTERNAL применяется только к S1?
  • 2. dstSubpass:
  • 2.1. Это просто всегда индекс следующего логического подпрохода (ie: S1-> S2)? Или это может быть S1-> S3?
  • 2.2. Подобно вопросу 1.1, возможно ли, чтобы S3 не зависел от S2, и, таким образом, это значение было бы VK_SUBPASS_EXTERNAL для S2?
  • 3. srcStageMask:
  • 3.1. Может ли быть, что чем раньше будет этап конвейера, тем меньше будет зависимость между двумя наборами операций? То есть, srcStageMask из VK_PIPELINE_STAGE_VERTEX_INPUT_BIT будет иметь меньшее время зависимости, чем VK_PIPELINE_STAGE_VERTEX_SHADER_BIT.
  • 3.2. Если 3.1 верно, то это означает, что идеальной стадией конвейера будет VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, правильно?
  • 4. dstStageMask:
  • 4.1. Для меньшего времени зависимости между 2 наборами операций, чем дальше по конвейеру, тем лучше?
  • 4.2. Если 4.1 истинно, то VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT будет идеальным этапом для минимальной зависимости. Да?

Спасибо

1 Ответ

1 голос
/ 01 августа 2020

1.1 Все, что не невозможно \ недопустимо, возможно по определению. Возможно, имеет смысл выполнить рендеринг с двумя независимыми цветовыми вложениями с использованием одного и того же буфера вершин. Можно сэкономить на биннинге, который нужно сделать только один раз.

1.2 Не обязательно. Например, подпроход может не иметь прикрепленных цветов и вместо этого выводиться через образы хранилища. Следовательно, для него не требуется VK_SUBPASS_EXTERNAL зависимость, явная или неявная.

1.3 Нет, это применимо к любому подпроходу, который использует данное вложение первым, так как он выполняет LoadOp для этого вложения.

2.1 Да, это зависимый DAG, поэтому он может иметь S1 → S3, S2 → S3 (но не S1 → S2).

2.2 Это может быть VK_SUBPASS_EXTERNAL. Обратите внимание, что у вас может быть больше зависимостей; один может быть VK_SUBPASS_EXTERNAL, а другой может иметь другой подпроход. Одно вложение в S2 может быть завершено и иметь здесь раннюю версию StoreOp, поэтому VK_SUBPASS_EXTERNAL будет подходящим для него.

3.1 Да, более логически более ранняя стадия используется в srcStageMask, ограничение, наложенное такая зависимость меньше или равна.

3.2 Да, это была бы бездействующая зависимость. По совпадению, именно так указывается неявная зависимость подпрохода.

4.1 Да, тот же logi c. В `dstStageMask 'используется более логически более поздняя стадия, ограничение, налагаемое такой зависимостью, меньше или равно.

4.2 Это зависимость без операции. И по совпадению именно так указывается неявная зависимость подпрохода.

...