DirectX 12 — вопросы о списке команд

Пытаясь понять списки команд.
Ну, команда перечисляет записи моих команд для рендеринга, но также связывает ресурсы, скажем, буфер с данными вершин.

m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);

Это записывает привязку буфера вершин. Что происходит с буфером в этот момент? Что произойдет, если я изменю содержимое этого буфера вершин после его записи? Что произойдет, если я изменю содержимое этого буфера вершин после вызова списка выполнения команды, а gpu еще не завершил его?

Я полагаю, что ExecuteCommandList — это асинхронный вызов функции, я прав? Выполняет ли он всю привязку (передачу данных в gpu) одновременно или выполняет команды одну за другой, даже все привязки? Список команд выполняется драйвером или все отправлено в gpu?

Ну, из-за отсутствия хороших примеров у меня все еще много вопросов. Я был бы счастлив, если бы вы могли ответить на некоторые из них, чтобы было понятно.

1

Решение

В DirectX 12 синхронизация полностью ложится на приложение. Вы должны вставить и проверить заборы, чтобы убедиться, что графический процессор завершен с вашим буфером, прежде чем изменять его. Для динамических буферов вам нужно сделать свою собственную двойную / тройную / n буферизацию.

Когда вы звоните ExecuteCommandList это просто ставит его в очередь на GPU. Пройдет некоторое время, прежде чем GPU на самом деле его подберет, а затем завершит.

Обязательно проверьте Образцы графики DirectX GitHub проект. Примеры там и демонстрация Mini Engine — хорошие места, чтобы найти пример использования.

Такая конструкция делает DirectX 12 чрезвычайно мощным, поскольку дает приложению прямой контроль над множеством вещей, которые были «волшебными» в среде выполнения Direct3D 11. Тем не менее, в результате API много сложнее на самом деле использовать, если вы уже не достаточно хороший графический инженер, чтобы вы могли написать Direct3D 11 Runtime. Использование Direct3D 11 API все еще является хорошим выбором и для проекта.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]