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 点的条目数必须与此参数中的数量相等。 如果将 NumRTV 设置为 D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff) ,此方法不会修改当前绑定的呈现目标视图 (RTV) ,也不会修改 dsV) (深度模具视图。
[in, optional] ppRenderTargetViews
指向 ID3D11RenderTargetView的数组的指针,该数组表示要绑定到设备的呈现目标。 如果此参数为 NULL 且 NumRTV 为 0,则不绑定呈现器目标。
[in, optional] pDepthStencilView
指向 ID3D11DepthStencilView 的指针,该视图表示要绑定到设备的深度模具视图。 如果此参数为 NULL,则不绑定深度模具视图。
[in] UAVStartSlot
类型: UINT
索引到从零开始的数组中,开始设置无序访问视图 (范围从 0 到 D3D11_PS_CS_UAV_REGISTER_COUNT - 1) 。
对于从 Windows 8 开始可用的 Direct3D 11.1 运行时,此值的范围可以是 0 到 D3D11_1_UAV_SLOT_COUNT - 1。 D3D11_1_UAV_SLOT_COUNT定义为 64。
对于像素着色器, UAVStartSlot 应等于绑定的呈现器目标视图数。
[in] NumUAVs
类型: UINT
ppUnorderedAccessViews 中) (UAV 的无序访问视图数。 如果将 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 指示保留当前偏移量。 任何其他值为该可追加的易耗型 UAV 设置隐藏计数器。 pUAVInitialCounts 仅适用于使用创建 UAV 时指定的 D3D11_BUFFER_UAV_FLAG_APPEND 或 D3D11_BUFFER_UAV_FLAG_COUNTER 创建的 UAV;否则,将忽略 参数。
返回值
无
备注
对于像素着色器,呈现目标和无序访问视图在写出时共享相同的资源槽。这意味着必须为 UAV 提供偏移量,以便将其放置在绑定的呈现目标视图之后的槽中。
如果两个 UAV 共享一个子资源 (因此共享同一资源) ,则它们会冲突。
如果 RTV 共享子资源或共享绑定点,则 RTV 与 UAV 冲突。
OMSetRenderTargetsAndUnorderedAccessViews 在以下情况下正常运行:
-
NumRTV != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL 和 NumUAV != D3D11_KEEP_UNORDERED_ACCESS_VIEWS
以下条件必须为 true,OMSetRenderTargetsAndUnorderedAccessViews 才能成功,运行时才能将绑定信息传递给驱动程序:
- NumRTV<= 8
- UAVStartSlot>= NumRTV
- UAVStartSlot + NumUAV<= 8
- 所有 ppRenderTargetViews 和 ppUnorderedAccessViews 的集中不得发生冲突。
- ppDepthStencilView 必须与呈现目标视图匹配。 有关资源视图的详细信息,请参阅 Direct3D 11 中的资源简介。
- 取消绑定所有当前绑定的冲突资源 (流输出目标资源 (SOTargets) 、计算着色器 (CS) UAV、着色器资源视图 (SRV) ) 。
- 绑定 ppRenderTargetViews、 ppDepthStencilView 和 ppUnorderedAccessViews。
-
NumRTV == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL
在这种情况下, OMSetRenderTargetsAndUnorderedAccessViews 仅绑定 UAV。
以下条件必须为 true,OMSetRenderTargetsAndUnorderedAccessViews 才能成功,运行时才能将绑定信息传递给驱动程序:
- UAVStartSlot + NumUAV<= 8
- ppUnorderedAccessViews 中不得发生冲突。
- 槽 >中的所有 RTV = UAVStartSlot
- 与 ppUnorderedAccessViews 中的任何 UAV 冲突的所有 RTV
- 与 ppUnorderedAccessViews 冲突的所有当前绑定资源 (SOTargets、CS UAV、SRV)
OMSetRenderTargetsAndUnorderedAccessViews 忽略 ppDepthStencilView,并且当前深度模具视图保持绑定状态。
-
NumUAV == D3D11_KEEP_UNORDERED_ACCESS_VIEWS
在这种情况下, OMSetRenderTargetsAndUnorderedAccessViews 仅绑定 RTV 和 DSV。
以下条件必须为 true,OMSetRenderTargetsAndUnorderedAccessViews 才能成功,运行时才能将绑定信息传递给驱动程序:
- NumRTV<= 8
- ppRenderTargetViews 中不得有冲突。
- ppDepthStencilView 必须与呈现目标视图匹配。 有关资源视图的详细信息,请参阅 Direct3D 11 中的资源简介。
- 槽<中的所有 UAV NumRTV
- 与 ppRenderTargetViews 中的任何 RTV 冲突的所有 UAV
- 与 ppRenderTargetViews 冲突的所有当前绑定资源 (SOTargets、CS UAV、SRV)
OMSetRenderTargetsAndUnorderedAccessViews 忽略 UAVStartSlot。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d11.h |
Library | D3D11.lib |