다음을 통해 공유


ID3D12GraphicsCommandList1::SetSamplePositions 메서드(d3d12.h)

이 메서드는 후속 그리기, 복사, resolve 및 유사한 작업에 사용되는 샘플 위치를 구성합니다.

구문

void SetSamplePositions(
  [in] UINT                  NumSamplesPerPixel,
  [in] UINT                  NumPixels,
  [in] D3D12_SAMPLE_POSITION *pSamplePositions
);

매개 변수

[in] NumSamplesPerPixel

형식: UINT

SAL: In

픽셀당 취할 샘플 수를 지정합니다. 이 값은 1, 2, 4, 8 또는 16일 수 있으며, 그렇지 않으면 SetSamplePosition 호출이 삭제됩니다. 샘플 수는 그리기 시 PSO에 구성된 샘플 수와 일치해야 합니다. 그렇지 않으면 동작이 정의되지 않습니다.

[in] NumPixels

형식: UINT

SAL: In

샘플 패턴을 지정하는 픽셀 수를 지정합니다. 이 값은 1 또는 4일 수 있고, 그렇지 않으면 SetSamplePosition 호출이 삭제됩니다. 값 1은 각 픽셀에 사용할 단일 샘플 패턴을 구성합니다. 값 4는 짝수 좌표에 맞춰 렌더링 대상 또는 뷰포트 공간에서 반복되는 2x2 픽셀 그리드의 각 픽셀에 대해 별도의 샘플 패턴을 구성합니다.

결합된 샘플의 최대 수는 16을 초과할 수 없으며, 그렇지 않으면 호출이 삭제됩니다. NumPixels가 4로 설정된 경우 NumSamplesPerPixel은 4개 이하의 샘플을 지정할 수 있습니다.

[in] pSamplePositions

형식: D3D12_SAMPLE_POSITION*

SAL: In_reads(NumSamplesPerPixel*NumPixels)

D3D12_SAMPLE_POSITION 요소의 배열을 지정합니다. 배열의 크기는 NumPixels * NumSamplesPerPixel입니다. NumPixels가 4로 설정된 경우 샘플 위치의 첫 번째 그룹은 픽셀의 2x2 그리드에서 왼쪽 위 픽셀에 해당합니다. 다음 샘플 위치 그룹은 오른쪽 위 픽셀, 왼쪽 아래 픽셀의 다음 그룹 및 오른쪽 아래 픽셀에 대한 최종 그룹에 해당합니다.

렌더링 중에 중심 보간을 사용하는 경우 각 픽셀의 위치 순서에 따라 중심 샘플링 우선 순위가 결정됩니다. 즉, 지정된 순서대로 첫 번째 적용된 샘플이 중심 샘플 위치로 선택됩니다.

반환 값

없음

설명

샘플 위치의 운영 의미 체계는 발생할 수 있는 다양한 그리기, 복사, resolve 및 기타 작업에 의해 결정됩니다.

CommandList: CommandList에서 SetSamplePositions에 대한 이전 호출이 없는 경우 샘플은 PSO(파이프라인 상태 개체)를 기반으로 기본 위치를 가정합니다. 기본 위치는 PSO의 SAMPLE_DESC 부분이 있는 경우 또는 PSO의 RASTERIZER_DESC 부분에 ForcedSampleCount가 0보다 큰 값으로 설정된 경우 표준 샘플 위치에 의해 결정됩니다.

SetSamplePosition이 호출된 후 후속 그리기 호출은 PSO의 SAMPLE_DESC 부분을 사용하거나 PSO의 RASTERIZER_DESC 부분에 ForcedSampleCount를 사용하여 일치하는 샘플 수를 지정하는 PSO를 사용해야 합니다.

SetSamplePositions는 그래픽 CommandList에서만 호출할 수 있습니다. 번들에서는 호출할 수 없습니다. bundles는 호출 CommandList에서 샘플 위치 상태를 상속하고 수정하지 않습니다.

SetSamplePositions(0, 0, NULL)를 호출하면 샘플 위치가 기본값으로 되돌아갑니다.

RenderTarget 지우기: 렌더링 대상을 지울 때 샘플 위치는 무시됩니다.

Clear DepthStencil: 깊이 스텐실 표면 또는 그 영역의 깊이 부분을 지우는 경우 이후 렌더링의 위치와 지워진 표면 또는 영역과 일치하도록 샘플 위치를 설정해야 합니다. 다른 샘플 위치를 사용하여 생성된 명확하지 않은 영역의 내용은 정의되지 않습니다.

깊이 스텐실 표면 또는 그 영역의 스텐실 부분을 지우면 샘플 위치가 무시됩니다.

RenderTarget에 그리기: 렌더링 대상에 그리는 경우 이전 그리기 호출과 겹치는 영역에 그리는 경우에도 각 그리기 호출에 대해 샘플 위치를 변경할 수 있습니다. 현재 샘플 위치는 각 그리기 호출의 작동 의미 체계를 결정하고 콘텐츠가 다른 샘플 위치를 사용하여 생성된 경우에도 렌더링 대상의 저장된 콘텐츠에서 샘플을 가져옵니다.

DepthStencil을 사용하여 그리기: 깊이 스텐실 표면(읽기 또는 쓰기) 또는 해당 영역으로 그리는 경우 이전에 영향을 받는 영역을 지우는 데 사용된 위치와 일치하도록 샘플 위치를 설정해야 합니다. 다른 샘플 위치를 사용하려면 먼저 대상 지역을 지워야 합니다. 지우기 영역 외부의 픽셀은 영향을 받지 않습니다.

하드웨어는 깊이 부분 또는 깊이 스텐실 표면을 평면 수식으로 저장하고 애플리케이션이 읽기를 실행할 때 깊이 값을 생성하도록 평가할 수 있습니다. 깊이 스텐실 표면의 깊이 부분의 프로그래밍 가능한 샘플 위치를 지원하려면 래스터라이저 및 출력 병합기만 필요합니다. 샘플 위치 집합으로 렌더링된 깊이 부분의 다른 읽기 또는 쓰기는 해당 부분을 무시하고 대신 표준 위치에서 샘플링할 수 있습니다.

RenderTarget 해결: 렌더링 대상 또는 해당 영역을 확인할 때 샘플 위치는 무시됩니다. 이러한 API는 저장된 색 값에서만 작동합니다.

DepthStencil 해결: 깊이 스텐실 표면 또는 그 영역의 깊이 부분을 확인할 때 샘플 위치는 과거 렌더링의 위치와 확인된 표면 또는 영역과 일치하도록 설정해야 합니다. 다른 샘플 위치를 사용하려면 먼저 대상 지역을 지워야 합니다.

깊이 스텐실 표면 또는 그 영역의 스텐실 부분을 확인할 때 샘플 위치는 무시됩니다. 스텐실 확인은 저장된 스텐실 값에서만 작동합니다.

RenderTarget 복사: 렌더링 대상에서 복사할 때 전체 복사본인지 부분 복사본인지 여부에 관계없이 샘플 위치는 무시됩니다.

DepthStencil 복사(전체 하위 리소스): 깊이 스텐실 표면에서 전체 하위 리소스를 복사하는 경우 소스 표면을 생성하는 데 사용되는 샘플 위치와 일치하도록 샘플 위치를 설정해야 합니다. 다른 샘플 위치를 사용하려면 먼저 대상 지역을 지워야 합니다.

원본 표면의 일부 하드웨어 속성(예: 깊이 값에 대한 저장된 평면 수식)에서 대상으로 전송됩니다. 따라서 대상 표면을 나중에 그릴 경우 원래 원본 콘텐츠를 생성하는 데 사용되는 샘플 위치를 대상 표면과 함께 사용해야 합니다. API는 일부 하드웨어에만 적용될 수 있더라도 일관성을 위해 모든 하드웨어에서 이를 요구합니다.

DepthStencil 복사(부분 하위 리소스): 깊이 스텐실 표면에서 부분 하위 리소스를 복사하는 경우 전체 하위 리소스를 복사하는 것과 유사하게 원본 표면을 생성하는 데 사용되는 샘플 위치와 일치하도록 샘플 위치를 설정해야 합니다. 그러나 영향을 받는 대상 하위 리소스의 콘텐츠가 복사본에서 부분적으로만 적용되는 경우 복사본 원본과 동일한 샘플 위치를 사용하여 모든 항목이 생성되지 않는 한 해당 하위 리소스 내에서 발견된 부분의 내용이 정의되지 않습니다. 다른 샘플 위치를 사용하려면 먼저 대상 지역을 지워야 합니다.

깊이 스텐실 표면의 스텐실 부분에서 부분 하위 리소스를 복사할 때 샘플 postions는 무시됩니다. 복사본에서 다루지 않는 대상 버퍼의 다른 영역에 대한 콘텐츠를 생성하는 데 사용된 샘플 위치는 중요하지 않습니다. 해당 콘텐츠는 유효한 상태로 유지됩니다.

셰이더 SamplePos: HLSL SamplePos 내장 함수는 프로그래밍 가능한 샘플 위치를 인식하지 못하며 프로그래밍 가능한 위치로 렌더링된 표면에서 이를 호출하는 셰이더에 반환된 결과는 정의되지 않습니다. 애플리케이션은 필요한 경우 셰이더에 좌표를 수동으로 전달해야 합니다. 마찬가지로 샘플 인덱스별 특성 평가는 프로그래밍 가능한 샘플 위치로 정의되지 않습니다.

DEPTH_READ 또는 DEPTH_WRITE 상태에서 전환: DEPTH_READ 또는 DEPTH_WRITE 상태의 하위 리소스가 COPY_SOURCE 또는 RESOLVE_SOURCE 포함한 다른 상태로 전환되는 경우 일부 하드웨어는 표면의 압축을 해제해야 할 수 있습니다. 따라서 소스 화면에서 콘텐츠를 생성하는 데 사용되는 위치와 일치하도록 명령 목록에서 샘플 위치를 설정해야 합니다. 또한 동일한 깊이 데이터가 남아 있는 동안 표면의 후속 전환의 경우 샘플 위치는 명령 목록에 설정된 위치와 계속 일치해야 합니다. 다른 샘플 위치를 사용하려면 먼저 대상 지역을 지워야 합니다.

일부만 사용해야 하는 경우 또는 압축을 유지하기 위해 애플리케이션이 압축 해제된 영역을 최소화하려는 경우 Rect가 지정된 DECOMPRESS 모드에서 ResolveSubresourceRegion()을 호출할 수 있습니다. 이렇게 하면 일부 하드웨어에서 원본을 그대로 두는 별도의 리소스에 대한 관련 영역의 압축을 풀지만 다른 하드웨어에서는 원본 영역도 압축을 풉니다. 그런 다음 명시적으로 압축 해제된 별도의 리소스를 원하는 상태(예: SHADER_RESOURCE)로 전환할 수 있습니다.

RENDER_TARGET 상태에서 전환: RENDER_TARGET 상태의 하위 리소스가 COPY_SOURCE 또는 RESOLVE_SOURCE 이외의 다른 항목으로 전환되는 경우 일부 구현은 표면의 압축을 해제해야 할 수 있습니다. 이 압축 해제는 샘플 위치에 구애받지 않습니다.

일부만 사용해야 하는 경우 또는 압축을 유지하기 위해 애플리케이션이 압축 해제된 영역을 최소화하려는 경우 Rect가 지정된 DECOMPRESS 모드에서 ResolveSubresourceRegion()을 호출할 수 있습니다. 이렇게 하면 일부 하드웨어에서 원본을 그대로 두는 별도의 리소스에 대한 관련 영역의 압축을 풀지만 다른 하드웨어에서는 원본 영역도 압축을 풉니다. 그런 다음 명시적으로 압축 해제된 별도의 리소스를 원하는 상태(예: SHADER_RESOURCE)로 전환할 수 있습니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 d3d12.h
라이브러리 D3d12.lib
DLL D3d12.dll

추가 정보

ID3D12GraphicsCommandList1