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


Метод ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews (d3d11.h)

Привязывает ресурсы к этапу объединения выходных данных.

Синтаксис

void OMSetRenderTargetsAndUnorderedAccessViews(
  [in]           UINT                      NumRTVs,
  [in, optional] ID3D11RenderTargetView    * const *ppRenderTargetViews,
  [in, optional] ID3D11DepthStencilView    *pDepthStencilView,
  [in]           UINT                      UAVStartSlot,
  [in]           UINT                      NumUAVs,
  [in, optional] ID3D11UnorderedAccessView * const *ppUnorderedAccessViews,
  [in, optional] const UINT                *pUAVInitialCounts
);

Параметры

[in] NumRTVs

Тип: UINT

Количество целевых объектов отрисовки для привязки (в диапазоне от 0 до D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT). Если этот параметр не равен нулю, количество записей в массиве, на которые указывает ppRenderTargetViews , должно совпадать с числом в этом параметре. Если для numRTVs задано значение D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff), этот метод не изменяет текущие привязанные представления целевого отображения (RTV), а также представление трафарета глубины (DSV).

[in, optional] ppRenderTargetViews

Тип: ID3D11RenderTargetView*

Указатель на массив ID3D11RenderTargetView, представляющий целевые объекты отрисовки для привязки к устройству. Если этот параметр имеет значение NULL , а NumRTVs равен 0, целевые объекты отрисовки не привязаны.

[in, optional] pDepthStencilView

Тип: ID3D11DepthStencilView*

Указатель на ID3D11DepthStencilView , представляющий представление трафарета глубины для привязки к устройству. Если этот параметр имеет значение NULL, представление трафарета глубины не привязано.

[in] UAVStartSlot

Тип: UINT

Выполните индекс в массив отсчитываемый от нуля, чтобы начать настройку представлений неупорядоченного доступа (в диапазоне от 0 до D3D11_PS_CS_UAV_REGISTER_COUNT –1).

Для среды выполнения Direct3D 11.1, доступной начиная с Windows 8, это значение может варьироваться от 0 до D3D11_1_UAV_SLOT_COUNT –1. D3D11_1_UAV_SLOT_COUNT определяется как 64.

Для пиксельных шейдеров значение UAVStartSlot должно быть равно количеству привязанных представлений для отрисовки.

[in] NumUAVs

Тип: UINT

Количество представлений неупорядоченного доступа в ppUnorderedAccessViews. Если для NumUAV задано значение D3D11_KEEP_UNORDERED_ACCESS_VIEWS (0xffffffff), этот метод не изменяет текущие привязанные представления неупорядоченного доступа.

Для среды выполнения Direct3D 11.1, доступной начиная с Windows 8, это значение может варьироваться от 0 до D3D11_1_UAV_SLOT_COUNT — UAVStartSlot.

[in, optional] ppUnorderedAccessViews

Тип: ID3D11UnorderedAccessView*

Указатель на массив ID3D11UnorderedAccessView, представляющий представления с неупорядоченным доступом для привязки к устройству. Если этот параметр имеет значение NULL , а NumUAV равен 0, представления неупорядоченного доступа не привязаны.

[in, optional] pUAVInitialCounts

Тип: const UINT*

Массив смещения буфера добавления и использования. Значение -1 указывает на сохранение текущего смещения. Любые другие значения задают скрытый счетчик для этого добавляемого и потребляемого БПЛА. pUAVInitialCounts относится только к БПЛА, созданным с помощью D3D11_BUFFER_UAV_FLAG_APPEND или D3D11_BUFFER_UAV_FLAG_COUNTER , указанных при создании БПЛА; В противном случае аргумент игнорируется.

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

None

Remarks

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

Примечание RTV, DSV и БПЛА не могут быть настроены независимо друг от друга; Все они должны быть заданы одновременно.
 
Два RTV конфликтуют, если они совместно используют подресурс (и, следовательно, совместно используют один и тот же ресурс).

Два БПЛА конфликтуют, если они совместно используют подресурс (и, следовательно, совместно используют один и тот же ресурс).

RTV конфликтует с UAV, если у них есть общий подресурс или точка привязки.

OMSetRenderTargetsAndUnorderedAccessViews работает правильно в следующих ситуациях:

  1. NumRTVs != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL и NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS

    Следующие условия должны быть выполнены для успешного выполнения OMSetRenderTargetsAndUnorderedAccessViews и для того, чтобы среда выполнения передала сведения о привязке в драйвер:

    • NumRTV<= 8
    • UAVStartSlot>= NumRTV
    • UAVStartSlot + NumUAVs<= 8
    • В наборе всех объектов ppRenderTargetViews и ppUnorderedAccessViews не должно быть конфликтов.
    • ppDepthStencilView должен соответствовать представлениям цели отрисовки. Дополнительные сведения о представлениях ресурсов см. в статье Общие сведения о ресурсе в Direct3D 11.
    OMSetRenderTargetsAndUnorderedAccessViews выполняет следующие задачи:
    • Отменяет привязку всех связанных конфликтующих ресурсов (целевые ресурсы потокового вывода (SOTargets), БПЛА вычислительного шейдера (CS), представления ресурсов шейдера (SRV)).
    • Привязывает ppRenderTargetViews, ppDepthStencilView и ppUnorderedAccessViews.
  2. NumRTVs == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL

    В этом случае OMSetRenderTargetsAndUnorderedAccessViews привязывает только БПЛА.

    Следующие условия должны быть выполнены для успешного выполнения OMSetRenderTargetsAndUnorderedAccessViews и для того, чтобы среда выполнения передала сведения о привязке в драйвер:

    • UAVStartSlot + NumUAVs<= 8
    • В ppUnorderedAccessViews не должно быть конфликтов.
    OMSetRenderTargetsAndUnorderedAccessViews отменяет привязку следующих элементов:
    • Все RTV в слотах >= UAVStartSlot
    • Все RTV, конфликтующие с любыми БПЛА в ppUnorderedAccessViews
    • Все ресурсы, связанные в данный момент (SOTargets, БПЛА CS, SRV), конфликтующие с ppUnorderedAccessViews
    OMSetRenderTargetsAndUnorderedAccessViews привязывает ppUnorderedAccessViews.

    OMSetRenderTargetsAndUnorderedAccessViews игнорирует ppDepthStencilView, и текущее представление трафарета глубины остается привязанным.

  3. NumUAVs == D3D11_KEEP_UNORDERED_ACCESS_VIEWS

    В этом случае OMSetRenderTargetsAndUnorderedAccessViews привязывает только RTV и DSV.

    Следующие условия должны быть выполнены для успешного выполнения OMSetRenderTargetsAndUnorderedAccessViews и для того, чтобы среда выполнения передала сведения о привязке в драйвер:

    • NumRTV<= 8
    • В ppRenderTargetViews не должно быть конфликтов.
    • ppDepthStencilView должен соответствовать представлениям цели отрисовки. Дополнительные сведения о представлениях ресурсов см. в статье Общие сведения о ресурсе в Direct3D 11.
    OMSetRenderTargetsAndUnorderedAccessViews отменяет привязку следующих элементов:
    • Все БПЛА в слотах <NumRTV
    • Все БПЛА, конфликтующие с любыми RTV в ppRenderTargetViews
    • Все ресурсы, связанные в данный момент (SOTargets, БПЛА CS, SRV), которые конфликтуют с ppRenderTargetViews
    OMSetRenderTargetsAndUnorderedAccessViews привязывает ppRenderTargetViews и ppDepthStencilView.

    OMSetRenderTargetsAndUnorderedAccessViews игнорирует UAVStartSlot.

Windows Phone 8. Этот API поддерживается.

Требования

Требование Значение
Целевая платформа Windows
Header d3d11.h
Библиотека D3D11.lib

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

ID3D11DeviceContext