Unity 6.3
0 онлайн 81 гостей 3 в системе
Вход

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, Вычисление шейдеров.