다음을 통해 공유


스트림 출력 카운터

스트림 출력은 버퍼에 꼭짓점을 쓰는 GPU의 기능입니다. 스트림 출력 카운터는 진행률을 모니터링합니다.

Direct3D 11에서 Direct3D 12로 스트림 카운터의 차이점

스트림 출력 프로세스의 일부로 GPU는 쓰는 버퍼의 현재 위치를 알아야 합니다. Direct3D 11에서 이 위치를 저장하는 메모리는 드라이버에 의해 할당되며 애플리케이션에서 이 값을 조작하는 유일한 방법은 SOSetTargets 메서드를 사용하는 것입니다. Direct3D 12에서 앱은 이 현재 위치를 저장하기 위해 메모리를 할당합니다. 이 값을 조작하는 특별한 방법은 없으며 앱은 CPU 또는 GPU를 사용하여 값을 자유롭게 읽고 쓸 수 있습니다.

BufferFilledSize

애플리케이션은 BufferFilledSize32비트 수량에 대한 스토리지를 할당합니다. 여기에는 스트림 출력 버퍼의 데이터 바이트 수가 포함됩니다. 이 스토리지는 스트림 출력 데이터를 포함하는 리소스와 동일하거나 다른 리소스에 배치할 수 있습니다. 이 값은 스트림 출력 단계의 GPU에서 액세스하여 버퍼에 새 꼭짓점 데이터를 추가할 위치를 결정합니다. 또한 이 값은 GPU에서 액세스하여 오버플로가 발생한 시기를 확인합니다.

구조 D3D12_STREAM_OUTPUT_DESC참조하세요.

디버그 계층은 ID3D12GraphicsCommandList::SOSetTargets다음의 유효성을 검사합니다.

  • BufferFilledSize NULL이 아닌 리소스가 지정된 경우 {OffsetInBytes, SizeInBytes}에 내포된 범위에 속합니다.
  • BufferFilledSizeOffsetInBytes 4의 배수입니다.
  • BufferFilledSizeOffsetInBytes 포함하는 리소스의 범위 내에 있습니다.
  • 지정된 리소스가 버퍼입니다.

모든 힙 형식에서 스트림 출력이 지원되므로 런타임은 스트림 출력 버퍼와 연결된 힙 형식의 유효성을 검사하지 않습니다.

루트 서명은 D3D12_ROOT_SIGNATURE_FLAGS 플래그를 사용하여 스트림 출력을 사용할지 지정해야 합니다.

D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT 다른 플래그를 지정하는 방법과 유사한 방식으로 HLSL로 작성된 루트 서명에 대해 지정할 수 있습니다.

CreateGraphicsPipelineState 기하 도형 셰이더에 스트림 출력이 포함되어 있지만 루트 서명에 D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT 플래그 집합이 없으면 실패합니다.

리소스가 스트림 출력 대상으로 사용되는 경우 사용된 리소스는 D3D12_RESOURCE_STATE_STREAM_OUT 상태여야 합니다. 이는 꼭짓점 데이터와 BufferFilledSize 모두에 적용됩니다(동일하거나 별도의 리소스에 있을 수 있습니다).

애플리케이션이 CPU 또는 GPU를 사용하여 BufferFilledSize 직접 쓸 수 있으므로 스트림 출력 버퍼 오프셋을 설정하는 특별한 API는 없습니다.

카운터 및 쿼리