Поделиться через


функция обратного вызова PFND3D11DDI_DISPATCHINDIRECT (d3d10umddi.h)

Функция DispatchIndirect выполняет шейдер вычислений.

Синтаксис

PFND3D11DDI_DISPATCHINDIRECT Pfnd3d11ddiDispatchindirect;

void Pfnd3d11ddiDispatchindirect(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  UINT unnamedParam3
)
{...}

Параметры

unnamedParam1

hDevice [in]

Дескриптор устройства отображения (графический контекст).

unnamedParam2

hBufferForArgs [in]

Дескриптор буфера, содержащий три значения UINT, которые содержат размеры в группах потоков X, Y и Z сетки потоков. Буфер содержит следующую плотно упакованную структуру:

struct DispatchArgs {
  UINT ThreadGroupCountX; 
  UINT ThreadGroupCountY;
  UINT ThreadGroupCountZ;
}

unnamedParam3

AlignedByteOffsetForArgs [in]

Смещение в байтах в буфер, который hBufferForArgs. AlignedByteOffsetForArgs должно быть кратным 4.

Возвращаемое значение

Никакой

Замечания

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

Функция DispatchIndirect выполняет ту же задачу, что и вызов функции dispatch драйвера. Среда выполнения Direct3D вызывает функцию driver DispatchIndirect на отображаемом устройстве для выполнения шейдера вычислений по ряду потоков в сетке групп потоков. Однако DispatchIndirect получает количество групп потоков, выполняемых из содержимого буфера, указанного параметром hBufferForArgs. DispatchIndirect считывает три значения UINT, начиная с смещения байтов, указанного параметром AlignedByteOffsetForArgs.

Когда среда выполнения Direct3D вызывает драйвера CreateResource(D3D11) функцию для создания буферного ресурса, указанного параметром hBufferForArgs, среда выполнения должна задать флаг D3D11_DDI_RESOURCE_MISC_DRAWINDIRECT_ARGS в MiscFlags член структуры D3D11DDIARG_CREATERESOURCE.

Драйвер не должен столкнуться с ошибкой, за исключением D3DDDIERR_DEVICEREMOVED. Таким образом, если драйвер передает любую ошибку, за исключением D3DDDIERR_DEVICEREMOVED, при вызове функции pfnSetErrorCb среда выполнения Direct3D определяет, что ошибка является критической. Даже если устройство удалено, драйвер не требуется возвращать D3DDDIERR_DEVICEREMOVED; Однако если удаление устройства вмешивается в работу DispatchIndirect (что обычно не должно произойти), драйвер может вернуть D3DDDIERR_DEVICEREMOVED.

Требования

Требование Ценность
минимальные поддерживаемые клиентские DispatchIndirect поддерживается начиная с операционной системы Windows 7.
целевая платформа Настольный
заголовка d3d10umddi.h (include D3d10umddi.h)

См. также

CreateResource(D3D11)

D3D11DDIARG_CREATERESOURCE

D3D11DDI_DEVICEFUNCS

диспетчера

pfnSetErrorCb