다음을 통해 공유


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에서 D3D11_PS_CS_UAV_REGISTER_COUNT - 1까지의 범위) 설정을 시작하려면 0부터 시작하는 배열로 인덱싱합니다.

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에 대한 숨겨진 카운터를 설정합니다. pUAVInitialCountsUAV 를 만들 때 지정된 D3D11_BUFFER_UAV_FLAG_APPEND 또는 D3D11_BUFFER_UAV_FLAG_COUNTER 사용하여 만든 UAV와만 관련이 있습니다. 그렇지 않으면 인수가 무시됩니다.

반환 값

없음

설명

픽셀 셰이더의 경우 렌더링 대상 및 순서가 지정되지 않은 액세스 뷰는 기록될 때 동일한 리소스 슬롯을 공유합니다. 즉, UAV는 바인딩되는 렌더링 대상 뷰 다음에 슬롯에 배치되도록 오프셋을 제공해야 합니다.

참고 RTV, DSV 및 UAV는 독립적으로 설정할 수 없습니다. 모두 동시에 설정해야 합니다.
 
두 RTV는 하위 리소스를 공유하여 동일한 리소스를 공유하는 경우 충돌합니다.

두 UAV는 하위 리소스를 공유하여 동일한 리소스를 공유하는 경우 충돌합니다.

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(셰이더 리소스 뷰))를 바인딩 해제합니다.
    • ppRenderTargetViews, ppDepthStencilViewppUnorderedAccessViews를 바인딩합니다.
  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)
    OMSetRenderTargetsAndUnorderedAccessViewsppUnorderedAccessViews를 바인딩합니다.

    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)
    OMSetRenderTargetsAndUnorderedAccessViewsppRenderTargetViewsppDepthStencilView를 바인딩합니다.

    OMSetRenderTargetsAndUnorderedAccessViews는UAVStartSlot을 무시합니다.

Windows Phone 8: 이 API가 지원됩니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 d3d11.h
라이브러리 D3D11.lib

추가 정보

ID3D11DeviceContext