функция обратного вызова 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.
Возвращаемое значение
None
Remarks
Драйвер может использовать функцию обратного вызова pfnSetErrorCb , чтобы задать код ошибки.
Функция DispatchIndirect выполняет ту же задачу, что и вызов функции Dispatch драйвера. Среда выполнения Direct3D вызывает функцию 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 (включая D3d10umddi.h) |