Использование OpenGL draw_indirect с OpenCL - PullRequest
4 голосов
/ 08 марта 2011

Я не совсем на 100% ясно представляю, как семейство функций Draw Instanced / Draw Indirect вплоть до glDrawElementsInstancedBaseVertexBaseInstance работают вместе.

Используя OpenGL 4.0+ и совместимые с OpenCLL аппаратные средства и драйверы, как (если возможно) мы можем использовать такие инструменты, как косвенное рисование (теперь также косвенное рисование нескольких объектов), для рисования геометрии в нескольких кадрах при изменении геометрии в графическом процессоре?

Например, можно ли выполнить тесселяцию формы, а затем применить к ней какой-либо фильтр через opencl, обращаясь к геометриям, которые ЦПУ нужно будет отбирать только при необходимости?

* Оригинальное сообщение было сильно отредактировано

1 Ответ

4 голосов
/ 08 марта 2011

Непонятно, о чем вы здесь спрашиваете. Взаимодействие CL / GL, определенное Khronos, до сих пор ограничивается общими буферами / текстурами и некоторыми средствами обработки событий, ни один из которых не имеет отношения к тесселяции. Поскольку тесселяция является задачей, специфичной для растеризации моделей на основе многоугольников, она вряд ли когда-либо будет достаточно актуальной, чтобы оправдать упоминание в спецификации CL. Если вам интересно, будет ли аппаратное обеспечение тесселяции использоваться реализацией CL, то это полностью зависит от конкретных аппаратных возможностей и реализации CL.

Обновление:

Существует два вида тесселяционных шейдеров. Шейдеры управления тесселяцией принимают патч (набор треугольников или квадратов) и вычисляют некоторые атрибуты для каждой вершины, что наиболее важно, число, которое контролирует количество делений, которое должно быть выполнено.

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

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

Поскольку взаимодействие CL / GL допускает только обмен данными на основе буфера, для того, чтобы использовать CL для тесселяции, вам придется реализовать весь процесс тесселяции как, по существу, препроцессор для ваших данных вершин, и вы не сможете доступ из CL к любому выделенному оборудованию для этапа подразделения. Поскольку современное аппаратное обеспечение (насколько мне известно) включает в себя подраздел с фиксированной функцией вместо использования вычислительных модулей общего назначения, тесселлятор, реализованный в CL, почти наверняка окажется в невыгодном положении для производительности.

...