ComputeShader.DispatchIndirect
Declaration
public void DispatchIndirect(int kernelIndex, ComputeBuffer argsBuffer, uint argsOffset = 0);public void DispatchIndirect(int kernelIndex, GraphicsBuffer argsBuffer, uint argsOffset = 0);Параметры
| Параметр | Описание |
|---|---|
| kernelIndex | Какое ядро выполнять. Один ресурс вычислительного шейдера может иметь несколько входных точек ядра. |
| argsBuffer | Буфер с аргументами отправки. |
| argsOffset | Смещение в байтах, по которому в буфере начинаются аргументы отрисовки. |
Описание
Выполнить вычислительный шейдер.
Эта функция "запускает" вычислительный шейдер, с заданным размером работы, считываемым непосредственно из GPU. Типичный случай использования генерирует произвольный объем данных из ComputeShader и затем отправляя это, не требуя обратного чтения в CPU.
Буфер с аргументами, argsBuffer, должно иметь три целых числа на данной argsOffset offset: число рабочих групп в измерении X, число рабочих групп в измерении Y, число рабочих групп в измерении Z.
В каждой рабочей группе выполняется определенное количество вызовов шейдера ("поток"). Размер рабочей группы указывается в самом вычислительном шейдере (с помощью "numthreads" HLSL атрибут), и общее количество вызовов вычислительных шейдеров является таким образом числом групп, умноженным на размер группы потоков. Размер рабочей группы можно запросить с помощью GetKernelThreadGroupSizes функции.
Это в значительной степени соответствует Direct3D11 DispatchIndirect, OpenGL glDispatchComputeIndirect и эквивалентные функции на других графических APIs.
Дополнительные ресурсы: Dispatch, Graphics.DrawProceduralIndirect, ComputeBuffer.CopyCount, Вычисление шейдеров.