Skip to main content
이 메서드는 이후의 그리기, 복사, 해결 및 유사한 작업에 사용되는 샘플 위치를 구성합니다.

구문

매개 변수

NumSamplesPerPixel [in]
형식: UINT
SAL: In 픽셀당 취할 샘플의 수를 지정합니다. 이 값은 1, 2, 4, 8 또는 16일 수 있으며, 그렇지 않으면 SetSamplePosition 호출이 삭제됩니다. 샘플 수는 그리기 시점의 PSO에 구성된 샘플 수와 일치해야 하며, 그렇지 않으면 동작이 정의되지 않습니다. NumPixels [in]
형식: UINT
SAL: In 샘플 패턴을 지정하는 픽셀의 수를 지정합니다. 이 값은 1 또는 4일 수 있으며, 그렇지 않으면 SetSamplePosition 호출이 삭제됩니다. 값이 1이면 각 픽셀에 사용될 단일 샘플 패턴을 구성합니다. 값이 4이면 짝수 좌표에 정렬되어 렌더 타겟 또는 뷰포트 공간에 반복되는 2x2 픽셀 그리드의 각 픽셀에 대해 별도의 샘플 패턴을 구성합니다. 결합된 샘플의 최대 수는 16을 초과할 수 없으며, 그렇지 않으면 호출이 삭제됩니다. NumPixels가 4로 설정된 경우, NumSamplesPerPixel은 4개 이상의 샘플을 지정할 수 없습니다. pSamplePositions [in]
형식: D3D12_SAMPLE_POSITION *
SAL: In_reads(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION 요소의 배열을 지정합니다. 배열의 크기는 NumPixels * NumSamplesPerPixel입니다. NumPixels가 4로 설정된 경우, 첫 번째 샘플 위치 그룹은 2x2 픽셀 그리드의 왼쪽 위 픽셀에 해당합니다. 다음 샘플 위치 그룹은 오른쪽 위 픽셀에, 그다음 그룹은 왼쪽 아래 픽셀에, 마지막 그룹은 오른쪽 아래 픽셀에 해당합니다. 렌더링 중 무게 중심 보간이 사용되는 경우, 각 픽셀의 위치 순서에 따라 무게 중심 샘플링 우선순위가 결정됩니다. 즉, 지정된 순서에서 첫 번째로 덮인 샘플이 무게 중심 샘플 위치로 선택됩니다.

반환 값

형식: void 없음.

설명

샘플 위치의 작동 의미는 발생할 수 있는 다양한 그리기, 복사, 해결 및 기타 작업에 의해 결정됩니다. CommandList: CommandList에서 SetSamplePositions에 대한 이전 호출이 없는 경우, 샘플은 파이프라인 상태 개체(PSO)를 기반으로 한 기본 위치를 사용합니다. 기본 위치는 PSO의 SAMPLE_DESC 부분이 있는 경우 이에 의해 결정되거나, PSO의 RASTERIZER_DESC 부분의 ForcedSampleCount가 0보다 큰 값으로 설정된 경우 표준 샘플 위치에 의해 결정됩니다. SetSamplePosition이 호출된 후, 이후의 그리기 호출은 PSO의 SAMPLE_DESC 부분 또는 PSO의 RASTERIZER_DESC 부분의 ForcedSampleCount를 사용하여 일치하는 샘플 수를 지정하는 PSO를 사용해야 합니다. SetSamplePositions는 그래픽 CommandList에서만 호출할 수 있습니다. 번들에서는 호출할 수 없습니다. 번들은 호출하는 CommandList에서 샘플 위치 상태를 상속받으며 이를 수정하지 않습니다. SetSamplePositions(0, 0, NULL)을 호출하면 샘플 위치가 기본값으로 되돌아갑니다. RenderTarget 지우기: 렌더 타겟을 지울 때 샘플 위치는 무시됩니다. DepthStencil 지우기: 심도 스텐실 표면 또는 그 일부 영역의 심도 부분을 지울 때, 샘플 위치는 지워진 표면 또는 영역에 대한 향후 렌더링과 일치하도록 설정되어야 합니다. 다른 샘플 위치를 사용하여 생성된 지워지지 않은 영역의 내용은 정의되지 않습니다. 심도 스텐실 표면 또는 그 일부 영역의 스텐실 부분을 지울 때, 샘플 위치는 무시됩니다. RenderTarget에 그리기: 렌더 타겟에 그릴 때, 이전 그리기 호출과 겹치는 영역에 그리는 경우에도 각 그리기 호출마다 샘플 위치를 변경할 수 있습니다. 현재 샘플 위치는 각 그리기 호출의 작동 의미를 결정하며, 다른 샘플 위치를 사용하여 생성된 내용이라도 샘플은 렌더 타겟의 저장된 내용에서 가져옵니다. DepthStencil을 사용하여 그리기: 심도 스텐실 표면(읽기 또는 쓰기) 또는 그 일부 영역에 그릴 때, 샘플 위치는 이전에 영향받는 영역을 지우는 데 사용된 것과 일치하도록 설정되어야 합니다. 다른 샘플 위치를 사용하려면 대상 영역을 먼저 지워야 합니다. 지우기 영역 밖의 픽셀은 영향을 받지 않습니다. 하드웨어는 심도 스텐실 표면의 심도 부분을 평면 방정식으로 저장하고, 애플리케이션이 읽기를 실행할 때 이를 평가하여 심도 값을 생성할 수 있습니다. 심도 스텐실 표면의 심도 부분에 대해 프로그래밍 가능한 샘플 위치를 지원해야 하는 것은 래스터라이저와 출력 병합기뿐입니다. 샘플 위치가 설정된 상태로 렌더링된 심도 부분의 다른 모든 읽기 또는 쓰기는 이를 무시하고 대신 표준 위치에서 샘플링할 수 있습니다. RenderTarget 해결: 렌더 타겟 또는 그 일부 영역을 해결할 때, 샘플 위치는 무시됩니다. 이 API는 저장된 색상 값에서만 작동합니다. DepthStencil 해결: 심도 스텐실 표면 또는 그 일부 영역의 심도 부분을 해결할 때, 샘플 위치는 해결된 표면 또는 영역에 대한 과거 렌더링과 일치하도록 설정되어야 합니다. 다른 샘플 위치를 사용하려면 대상 영역을 먼저 지워야 합니다. 심도 스텐실 표면 또는 그 일부 영역의 스텐실 부분을 해결할 때, 샘플 위치는 무시됩니다. 스텐실 해결은 저장된 스텐실 값에서만 작동합니다. RenderTarget 복사: 렌더 타겟에서 복사할 때, 전체 복사인지 부분 복사인지에 관계없이 샘플 위치는 무시됩니다. DepthStencil 복사(전체 하위 리소스): 심도 스텐실 표면에서 전체 하위 리소스를 복사할 때, 샘플 위치는 원본 표면을 생성하는 데 사용된 샘플 위치와 일치하도록 설정되어야 합니다. 다른 샘플 위치를 사용하려면 대상 영역을 먼저 지워야 합니다. 일부 하드웨어에서 원본 표면의 속성(예: 심도 값에 대한 저장된 평면 방정식)은 대상으로 전송됩니다. 따라서 대상 표면이 이후에 그려지는 경우, 원본 콘텐츠를 생성하는 데 원래 사용된 샘플 위치가 대상 표면과 함께 사용되어야 합니다. API는 일부 하드웨어에만 적용될 수 있지만 일관성을 위해 모든 하드웨어에서 이를 요구합니다. DepthStencil 복사(부분 하위 리소스): 심도 스텐실 표면에서 부분 하위 리소스를 복사할 때, 전체 하위 리소스 복사와 유사하게 샘플 위치는 원본 표면을 생성하는 데 사용된 샘플 위치와 일치하도록 설정되어야 합니다. 그러나 영향을 받는 대상 하위 리소스의 내용이 복사에 의해 부분적으로만 덮여 있는 경우, 해당 하위 리소스 내의 덮여 있지 않은 부분의 내용은 모두 복사 원본과 동일한 샘플 위치를 사용하여 생성되지 않은 한 정의되지 않습니다. 다른 샘플 위치를 사용하려면 대상 영역을 먼저 지워야 합니다. 심도 스텐실 표면의 스텐실 부분에서 부분 하위 리소스를 복사할 때, 샘플 위치는 무시됩니다. 복사에서 다루지 않는 대상 버퍼의 다른 영역에 대해 어떤 샘플 위치가 사용되었는지는 중요하지 않습니다. 그러한 내용은 유효한 상태로 유지됩니다. 셰이더 SamplePos: HLSL SamplePos 내장 함수는 프로그래밍 가능한 샘플 위치를 인식하지 못하며, 프로그래밍 가능한 위치로 렌더링된 표면에서 이를 호출하는 셰이더에 반환되는 결과는 정의되지 않습니다. 애플리케이션은 필요하면 셰이더에 좌표를 수동으로 전달해야 합니다. 마찬가지로 샘플 인덱스로 특성을 평가하는 것은 프로그래밍 가능한 샘플 위치와 함께 정의되지 않습니다. DEPTH_READ 또는 DEPTH_WRITE 상태에서 전환: DEPTH_READ 또는 DEPTH_WRITE 상태의 하위 리소스가 COPY_SOURCE 또는 RESOLVE_SOURCE를 포함하여 다른 상태로 전환되면, 일부 하드웨어에서는 표면을 압축 해제해야 할 수 있습니다. 따라서 명령 목록에서 원본 표면의 콘텐츠를 생성하는 데 사용된 것과 일치하도록 샘플 위치를 설정해야 합니다. 또한 동일한 심도 데이터가 표면에 남아 있는 동안 이 표면의 이후 전환에 대해서도, 샘플 위치는 명령 목록에 설정된 것과 계속 일치해야 합니다. 다른 샘플 위치를 사용하려면 대상 영역을 먼저 지워야 합니다. 일부만 사용하면 되거나 압축을 유지하기 위해 압축 해제된 영역을 최소화하려는 경우, ResolveSubresourceRegion()을 DECOMPRESS 모드에서 사각형을 지정하여 호출할 수 있습니다. 이렇게 하면 관련 영역만 별도의 리소스로 압축 해제되고 일부 하드웨어에서는 원본이 그대로 유지되지만, 다른 하드웨어에서는 원본 영역도 압축 해제됩니다. 별도로 명시적으로 압축 해제된 리소스는 원하는 상태(예: SHADER_RESOURCE)로 전환될 수 있습니다. RENDER_TARGET 상태에서 전환: RENDER_TARGET 상태의 하위 리소스가 COPY_SOURCE 또는 RESOLVE_SOURCE 이외의 상태로 전환되면, 일부 구현에서는 표면을 압축 해제해야 할 수 있습니다. 이 압축 해제는 샘플 위치와 무관합니다. 일부만 사용하면 되거나 압축을 유지하기 위해 압축 해제된 영역을 최소화하려는 경우, ResolveSubresourceRegion()을 DECOMPRESS 모드에서 사각형을 지정하여 호출할 수 있습니다. 이렇게 하면 관련 영역만 별도의 리소스로 압축 해제되고 일부 하드웨어에서는 원본이 그대로 유지되지만, 다른 하드웨어에서는 원본 영역도 압축 해제됩니다. 별도로 명시적으로 압축 해제된 리소스는 원하는 상태(예: SHADER_RESOURCE)로 전환될 수 있습니다.

요구 사항

헤더: d3d12_xs.h 또는 d3d12_x.h
라이브러리: d3d12_xs.lib 또는 d3d12_x.lib
지원 플랫폼: XBOX Series 콘솔 및 XBOX One 제품군

함께 보기

ID3D12GraphicsCommandList1
마지막 수정일 2026년 8월 24일