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の範囲)。 このパラメーターが 0 以外の場合、 ppRenderTargetViews がポイントする配列内のエントリの数は、このパラメーターの数値と等しい必要があります。 NumRTV を D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff) に設定した場合、このメソッドは現在バインドされているレンダー ターゲット ビュー (RTV) を変更せず、深度ステンシル ビュー (DSV) も変更しません。

[in, optional] ppRenderTargetViews

種類: ID3D11RenderTargetView*

デバイスにバインドするレンダー ターゲットを表す ID3D11RenderTargetViewの配列へのポインター。 このパラメーターが NULL、NumRTV が 0 の場合、レンダー ターゲットはバインドされません。

[in, optional] pDepthStencilView

種類: ID3D11DepthStencilView*

デバイスにバインドする深度ステンシル ビューを表す ID3D11DepthStencilView へのポインター。 このパラメーターが NULL の場合、深度ステンシル ビューはバインドされません。

[in] UAVStartSlot

型: UINT

0 から始まる配列にインデックスを付けて、順序付けされていないアクセス ビューの設定を開始します (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*

append と consume バッファー オフセットの配列。 値 -1 は、現在のオフセットを維持することを示します。 その他の値は、その追加可能および使用可能な UAV の非表示カウンターを設定します。 pUAVInitialCounts は、 D3D11_BUFFER_UAV_FLAG_APPEND または UAV の作成時に指定された D3D11_BUFFER_UAV_FLAG_COUNTER で作成された UAV にのみ関連します。それ以外の場合、引数は無視されます。

戻り値

なし

解説

ピクセル シェーダーの場合、レンダー ターゲットと順序付けされていないアクセス ビューは、書き込み時に同じリソース スロットを共有します。つまり、UAV は、バインドされているレンダー ターゲット ビューの後のスロットに配置されるようにオフセットを指定する必要があります。

メモ RTV、DSV、および UAV を個別に設定することはできません。これらはすべて同時に設定する必要があります。
 
サブリソースを共有する (したがって同じリソースを共有する) 場合、2 つの RTV が競合します。

サブリソースを共有する (したがって同じリソースを共有する) 場合、2 つの UAV が競合します。

RTV がサブリソースを共有している場合、またはバインド ポイントを共有している場合、RTV は UAV と競合します。

OMSetRenderTargetsAndUnorderedAccessViews は 、次の状況で正しく動作します。

  1. NumRTV != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL と NumUAV != D3D11_KEEP_UNORDERED_ACCESS_VIEWS

    OMSetRenderTargetsAndUnorderedAccessViews が成功し、ランタイムがバインド情報をドライバーに渡すには、次の条件が満たされている必要があります。

    • NumRTV<= 8
    • UAVStartSlot>= NumRTV
    • UAVStartSlot + NumUAV<= 8
    • すべての ppRenderTargetViewsppUnorderedAccessViews のセットに競合があってはなりません。
    • ppDepthStencilView はレンダー ターゲット ビューと一致する必要があります。 リソース ビューの詳細については、「 Direct3D 11 のリソースの概要」を参照してください。
    OMSetRenderTargetsAndUnorderedAccessViews は 、次のタスクを実行します。
    • 現在バインドされているすべての競合するリソース (ストリーム出力ターゲット リソース (SOTargets)、コンピューティング シェーダー (CS) UAV、シェーダー リソース ビュー (SRV)) のバインドを解除します。
    • ppRenderTargetViewsppDepthStencilView、および ppUnorderedAccessViews をバインドします。
  2. NumRTV == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL

    このような状況では、 OMSetRenderTargetsAndUnorderedAccessViews は UAV のみをバインドします。

    OMSetRenderTargetsAndUnorderedAccessViews が成功し、ランタイムがバインド情報をドライバーに渡すには、次の条件が満たされている必要があります。

    • UAVStartSlot + NumUAV<= 8
    • ppUnorderedAccessViews に競合は存在しない必要があります。
    OMSetRenderTargetsAndUnorderedAccessViews は 、次の項目のバインドを解除します。
    • スロット >内のすべての RTV = UAVStartSlot
    • ppUnorderedAccessViews 内のすべての UAV と競合するすべての RTV
    • ppUnorderedAccessViews と競合するすべての現在バインドされているリソース (SOTargets、CS UAV、SRV)
    OMSetRenderTargetsAndUnorderedAccessViews はppUnorderedAccessViews をバインドします

    OMSetRenderTargetsAndUnorderedAccessViewsppDepthStencilView を無視し、現在の深度ステンシル ビューはバインドされたままです。

  3. NumUAV == D3D11_KEEP_UNORDERED_ACCESS_VIEWS

    このような状況では、 OMSetRenderTargetsAndUnorderedAccessViews は、RTV と DSV のみをバインドします。

    OMSetRenderTargetsAndUnorderedAccessViews が成功し、ランタイムがバインド情報をドライバーに渡すには、次の条件が満たされている必要があります。

    • NumRTV<= 8
    • ppRenderTargetViews に競合があってはなりません。
    • ppDepthStencilView はレンダー ターゲット ビューと一致する必要があります。 リソース ビューの詳細については、「 Direct3D 11 のリソースの概要」を参照してください。
    OMSetRenderTargetsAndUnorderedAccessViews は 、次の項目のバインドを解除します。
    • スロット < NumRTV 内のすべての UAV
    • ppRenderTargetViews 内のすべての RTV と競合するすべての UAV
    • ppRenderTargetViews と競合するすべての現在バインドされているリソース (SOTargets、CS UAV、SRV)
    OMSetRenderTargetsAndUnorderedAccessViews、ppRenderTargetViewsppDepthStencilView をバインドします。

    OMSetRenderTargetsAndUnorderedAccessViews はUAVStartSlot を無視します。

Windows Phone 8: この API はサポートされています。

要件

要件
対象プラットフォーム Windows
ヘッダー d3d11.h
Library D3D11.lib

こちらもご覧ください

ID3D11DeviceContext