스트림 출력 카운터
스트림 출력은 버퍼에 꼭짓점을 쓰는 GPU의 기능입니다. 스트림 출력 카운터는 진행률을 모니터링합니다.
- Direct3D 11에서 Direct3D 12 스트림 카운터의 차이점
- BufferFilledSize
- 관련 항목
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는 없습니다.
관련 항목