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) ,則此方法不會修改目前系結的未排序存取檢視。
針對從 Windows 8 開始提供的 Direct3D 11.1 運行時間,此值的範圍可以從 0 到 D3D11_1_UAV_SLOT_COUNT - UAVStartSlot。
[in, optional] ppUnorderedAccessViews
類型: ID3D11UnorderedAccessView*
ID3D11UnorderedAccessView陣列的指標,代表要系結至裝置的未排序存取檢視。 如果此參數為 NULL 且 NumUAV 為 0,則不會繫結未排序的存取檢視。
[in, optional] pUAVInitialCounts
類型: const UINT*
附加和取用緩衝區位移的陣列。 值 -1 表示要保留目前的位移。 任何其他值都設定該可附加和消費性 UAV 的隱藏計數器。 pUAVInitialCounts 僅與建立 UAV 時所建立 的 UAV 相關D3D11_BUFFER_UAV_FLAG_APPEND或 D3D11_BUFFER_UAV_FLAG_COUNTER ;否則,會忽略 自變數。
傳回值
無
備註
針對圖元著色器,轉譯目標和未排序存取檢視會在寫出時共用相同的資源位置。這表示必須指定 UAV 的位移,以便將它們放在所系結的轉譯目標檢視之後的位置。
如果兩個 UAV 共用子資源 (,因此共用相同的資源) ,就會發生衝突。
如果 RTV 與 UAV 共用子資源或共用系結點,則會與 UAV 衝突。
OMSetRenderTargetsAndUnorderedAccessViews 會在下列情況下正常運作:
-
NumRTVs != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL 和 NumUAV != D3D11_KEEP_UNORDERED_ACCESS_VIEWS
OMSetRenderTargetsAndUnorderedAccessViews 必須符合下列條件,運行時間才能將系結資訊傳遞至驅動程式:
- NumRTV<= 8
- UAVStartSlot>= NumRTV
- UAVStartSlot + NumUAV<= 8
- 所有 ppRenderTargetViews 和 ppUnorderedAccessViews 集合中都不得發生衝突。
- ppDepthStencilView 必須符合轉譯目標檢視。 如需資源檢視的詳細資訊,請參閱 Direct3D 11 中的資源簡介。
- (SOTargets) 、計算著色器 (CS) UAV、著色器資源檢視 (SRV) ) (數據流輸出目標資源,將所有目前系結的衝突資源解除系結。
- Binds ppRenderTargetViews、 ppDepthStencilView 和 ppUnorderedAccessViews。
-
NumRTVs == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL
在此情況下, OMSetRenderTargetsAndUnorderedAccessViews 只會系結 UAV。
OMSetRenderTargetsAndUnorderedAccessViews 必須符合下列條件,運行時間才能將系結資訊傳遞至驅動程式:
- UAVStartSlot + NumUAV<= 8
- ppUnorderedAccessViews 中不得發生衝突。
- 位置 >中的所有 RTV = UAVStartSlot
- 所有與ppUnorderedAccessViews中任何UAV衝突的 RTV
- 所有目前系結的資源 (SOTargets、CS UAV、SRV) 與 ppUnorderedAccessViews 衝突
OMSetRenderTargetsAndUnorderedAccessViews 會忽略 ppDepthStencilView,而目前的深度樣板檢視仍會保持系結。
-
NumUAV == D3D11_KEEP_UNORDERED_ACCESS_VIEWS
在此情況下, OMSetRenderTargetsAndUnorderedAccessViews 只會系結 RTV 和 DSV。
OMSetRenderTargetsAndUnorderedAccessViews 必須符合下列條件,運行時間才能將系結資訊傳遞至驅動程式:
- NumRTV<= 8
- ppRenderTargetViews 中不得發生衝突。
- ppDepthStencilView 必須符合轉譯目標檢視。 如需資源檢視的詳細資訊,請參閱 Direct3D 11 中的資源簡介。
- 位置 <NumRTV 中的所有 UAV
- 所有與 ppRenderTargetViews 中任何 RTV 衝突的 UAV
- 所有目前系結的資源 (SOTargets、CS UAV、SRV) 與 ppRenderTargetViews 衝突
OMSetRenderTargetsAndUnorderedAccessViews 會忽略 UAVStartSlot。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | d3d11.h |
程式庫 | D3D11.lib |