Так что я только недавно узнал о Compute Shader, и это похоже на то, что я понял ту же идею, что и параллельное программирование, которое вы бы делали с CUDA или OpenCL, но в конвейере шейдеров.
Если я хочу нарисовать миллион кубов в сцене, я должен использовать один метод поверх другого или оба. Если и то, и другое, как разделить это так, чтобы графический процессор не пытался параллельно вычислять и шейдер, и другой процесс одновременно
compute-shader
opencl
cuda
FrickeFresh
источник
источник
Ответы:
Сегодня не совсем правильно считать вычислительные шейдеры «находящимися в конвейере шейдеров» в том же смысле, что ваши вершинные и фрагментные шейдеры буквально подключены к конвейеру. Вычислительные шейдеры в настоящее время не «подключены» ни к чему, не могут управлять растеризацией или напрямую использовать результаты растеризации.
Однако он позволяет потреблять и производить ресурсы памяти, которые также используются вызовами отрисовки относительно эффективным способом. OpenCL делает это довольно сложно (см., Например, https://software.intel.com/en-us/articles/opencl-and-opengl-interoperability-tutorial ). Это позволяет вам эффективно интегрировать вычислительные проходы в вашем рендерере, но это не интегрировано в конвейер рендеринга
источник