Я пытаюсь реализовать один сложный алгоритм с использованием графического процессора. Единственная проблема - это ограничения HW, а максимальный доступный уровень функций - 9_3.
Алгоритм - это, по сути, алгоритм, подобный «стерео сопоставлению» для двух изображений. Из-за упомянутых ограничений все вычисления должны выполняться только в вершинных / пиксельных шейдерах (API вычислений недоступен). Вершинные шейдеры здесь бесполезны, поэтому я считал их сквозными вершинными шейдерами.
Позвольте мне вкратце описать алгоритм:
- # P4 #
# P5 #
- # P6 #
# P7 #
- # P8 #
# P9 #
- # P10 #
# P11 #
Вот в основном ОЧЕНЬ простой график, показывающий мою текущую реализацию (исключая шаги 3 и 4).
Красные точки / круги / что угодно - это временные буферы (текстуры), в которых хранятся частичные результаты, и в каждой красной точке задействован ЦП.
Вопрос 1: Разве нельзя каким-то образом сообщить графическому процессору, как выполнять формирование каждой ветви до самого низа, не задействуя ЦП и не создавая узких мест? Т.е. чтобы запрограммировать последовательность графических конвейеров за один раз, а затем позволить графическому процессору выполнять свою работу.
Еще один вопрос о рендеринге в текстуру: все ли текстуры постоянно находятся в памяти графического процессора, даже между вызовами метода Draw () и переключением пиксельных / вершинных шейдеров? Или происходит какая-либо передача от графического процессора к процессору ... Потому что это может быть еще одна проблема, которая приводит к узкому месту.
Любая помощь будет оценена по достоинству!
Заранее спасибо.
С уважением, Лукаш