При указании VkPipelineStageFlag это означает начало этапа или конец этапа? - PullRequest
0 голосов
/ 25 мая 2018

Я хочу реализовать некую критическую секцию с событиями - мне нужно знать, когда я смогу обновить хост-буфер вершин.Для этого я устанавливаю событие на хосте (vkSetEvent()) перед записью буфера команд, а затем записываю команду для сброса события (vkCmdResetEvent).vkCmdResetEvent требует указать маску этапа источника, чтобы определить, когда событие сигнализируется.И здесь я не уверен насчет сцены и не смог найти нужную формулировку в спецификации.Если я использую VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, есть ли у меня гарантия, что событие будет сброшено в конце этапа?Или начало этапа?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Исходная маска этапа указывает источник операций, с которыми вы синхронизируете.Если вы указываете источник в качестве этапа вершинного шейдера, то вы говорите, что операция, с которой вы пытаетесь синхронизироваться, произошла либо в VS, либо перед ним.

В случае vkCmdResetEvent,необходима синхронизация, чтобы команда сброса не выполнялась до того, как произойдет команда, которая проверяет событие.Таким образом, хост устанавливает событие, некоторые более поздние команды проверяют его (возможно, с vkCmdWaitEvents, используя VK_PIPELINE_STAGE_HOST_BIT в качестве источника), и vkCmdResetEvent необходимо сбросить его.Ну, последняя команда должна использовать в качестве источника (ов) этап (ы), которые vkCmdWaitEvents устанавливают в качестве пункта назначения .Это гарантирует, что команда сброса не будет выполнена до того, как будет выполнено ожидание.

0 голосов
/ 25 мая 2018

Этапам необходимо указать, в какие конвейеры должна быть вставлена ​​операция синхронизации.

Это означает, что для исходных этапов это после того, как предыдущие команды завершают этапы, а для destination этапов, прежде чем на этих этапах могут запускаться следующие команды.

...