Основы Compute Shader в dx11

Я собираюсь добавить поддержку вычислительных шейдеров в мою кодовую базу и у меня возникнут проблемы с поиском ответов на некоторые довольно простые вопросы:

  1. Во всей документации говорится, что конвейер Compute Shader работает независимо от графического процессора, однако весь пример кода dx11 использует контекстный интерфейс устройства для настройки самого шейдера, просмотра ресурсов и вызова метода dispatch (), поэтому они ставятся в очередь в команде буфер с остальными командами рендеринга или они выполняются независимо?

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

  3. Синхронизация. В большинстве статей используется команда CopyResource, которая автоматически синхронизирует завершение вычисляемого шейдера и дает процессору доступ к результатам, но, похоже, это также заблокирует графический процессор. Есть ли более эффективный способ синхронизации?

Я знаю, что смогу найти ответы на эти вопросы, экспериментируя, но любая помощь, которая экономит мое время, будет принята с благодарностью.

0

Решение

  1. Конвейер Compute Shader работает независимо от Rendering конвейер, то есть вершинные шейдеры, пиксельные шейдеры, смешанные состояния и т. д. не влияют на то, что происходит при вызове Dispatch(), Тем не менее, они попадают в одну и ту же очередь, поэтому порядок между вызовами Draw а также Dispatch сохранены

  2. Все вызовы непосредственного контекста должны выполняться из одного потока.

  3. Один общий подход заключается в использовании двух буферов. В то время как один работает с вычислительным шейдером, другой копируется обратно и читается процессором. Большинство графических процессоров смогут распараллелить это.

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector