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