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


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

Наборы функций SetRenderTargets(D3D11) отображают целевые поверхности.

Синтаксис

PFND3D11DDI_SETRENDERTARGETS Pfnd3d11ddiSetrendertargets;

void Pfnd3d11ddiSetrendertargets(
  [in] D3D10DDI_HDEVICE unnamedParam1,
  [in] const D3D10DDI_HRENDERTARGETVIEW *unnamedParam2,
  [in] UINT NumRTVs,
  [in] UINT ClearSlots,
  [in] D3D10DDI_HDEPTHSTENCILVIEW unnamedParam5,
  [in] const D3D11DDI_HUNORDEREDACCESSVIEW *unnamedParam6,
  [in] const UINT *unnamedParam7,
       UINT UAVStartSlot,
  [in] UINT NumUAVs,
  [in] UINT UAVRangeStart,
  [in] UINT UAVRangeSize
)
{...}

Параметры

[in] unnamedParam1

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

[in] unnamedParam2

phRenderTargetView: массив дескрипторов для заданных объектов целевого представления отрисовки (RTV). Обратите внимание, что некоторые значения дескрипторов могут иметь значение NULL.

[in] NumRTVs

Количество элементов в массиве, предоставленном в phRenderTargetView для устанавливаемых RTV-представлений.

[in] ClearSlots

Количество объектов RTV для отмены привязки; то есть отрисовывает объекты целевого представления, которые ранее были привязаны, но больше не должны быть привязаны.

[in] unnamedParam5

hDepthStencilView: дескриптор буфера трафарета глубины для задания.

[in] unnamedParam6

phUnorderedAccessView: массив дескрипторов для устанавливаемых объектов неупорядоченного представления доступа (UAV).

[in] unnamedParam7

pUAVInitialCounts: массив смещений буфера добавления и использования. Этот параметр относится только к БПЛА массива phUnorderedAccessView , которые были созданы с помощью D3D11_DDI_BUFFER_UAV_FLAG_APPEND или D3D11_DDI_BUFFER_UAV_FLAG_COUNTERзаданы в элементе Flagsструктуры D3D11DDIARG_BUFFER_UNORDEREDACCESSVIEW при создании UAV; в противном случае он игнорируется. Если элемент в этом массиве имеет значение -1, текущее смещение для буфера добавления и потребления должно сохраняться. Любое другое значение приводит к тому, что драйвер устанавливает скрытый счетчик для этого БПЛА, добавляя и используя буфер.

UAVStartSlot

Индекс первого привязываемого БПЛА. Параметр UAVStartSlot должен быть по крайней мере таким же, как и параметр NumRTVs .

Примечание

Для RTV и БПЛА существует только один общий набор точек привязки. Сначала привязываются RTV, за которыми следуют БПЛА.

[in] NumUAVs

Количество привязываемых БПЛА.

[in] UAVRangeStart

Первый БПЛА в наборе всех обновленных БПЛА (включая привязки NULL ).

[in] UAVRangeSize

Количество БПЛА в наборе всех обновленных БПЛА (включая привязки NULL ).

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

None

Remarks

Дескрипторы ресурсов, такие как RTV и БПЛА, должны быть привязаны (помещены во входные слоты), прежде чем шейдеры смогут получить к ним доступ для чтения или записи.

На следующем рисунке показан пример с пятью ресурсами.

Пример RTV и UAV.

В приведенном выше примере:

  • NumRTVs = 2
  • UAVStartSlot = 2
  • NumUAV = 3

NumUAVs и UAVStartSlot указывают, какой диапазон в массиве БПЛА содержит изменения относительно состояния, которое было ранее привязано. Обратите внимание, что точки в диапазоне могут быть без изменений.

Параметры UAVRangeStart и UAVRangeSize — это удобство, которое показывает диапазон фактических изменений , учитывая, что Direct3D DDI всегда привязывает все (включая то, что не изменилось). Среда выполнения D3D11 сформулирует их от имени приложения в качестве дополнительных сведений для модулей записи драйверов в качестве подсказок для возможной оптимизации. Как правило, среда выполнения D3D11 вызывает эту функцию со значениями UAVRangeStart и UAVRangeSize , чтобы указать весь диапазон. Используя приведенный выше пример:

  • Чтобы выбрать весь диапазон (предполагается, что изменения не произойдет), UAVRangeStart = 2 и UAVRangeSize = 3.
  • Чтобы указать, что изменился только первый БПЛА, UAVRangeStart = 2 и UAVRangeSize = 1.

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

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

Требования

Требование Значение
Минимальная версия клиента SetRenderTargets(D3D11) поддерживается начиная с операционной системы Windows 7.
Целевая платформа Персональный компьютер
Верхняя часть d3d10umddi.h (включая D3d10umddi.h)

См. также раздел

D3D11DDIARG_BUFFER_UNORDEREDACCESSVIEW

D3D11DDI_DEVICEFUNCS

pfnSetErrorCb