술어

조건자는 CPU가 아닌 GPU가 개체를 그리거나 복사하거나 디스패치하지 않도록 결정하는 기능입니다.

개요

술어는 일반적으로 폐색에서 사용됩니다. 경계 상자를 그리고 가리면 개체 자체를 그려도 분명히 아무 효과가 없습니다. 이 경우 개체의 그리기를 "조건자"로 설정하여 GPU에서 실제 렌더링에서 제거할 수 있습니다.

처음에는 표준 깊이 테스트와 초기 깊이 패스 이상으로 다시 언급된 것처럼 보일 수 있습니다. 그러나 조건자는 그리기 명령 상태 자체의 오버헤드와 래스터화를 제거할 수 있습니다. 초기 깊이 패스는 불필요한 픽셀을 제거하지만 꼭짓점, 헐, 도메인 및 기하 도형 셰이더를 실행하고 고정 함수 입력 어셈블러, 테셀레이터 및 래스터라이저를 호출할 수 있습니다. 실제 모델보다 처리 및 래스터화가 더 간단한 간단한 경계 상자 또는 이와 유사한 경계 볼륨을 그리면 불필요한 래스터화 및 처리를 방지할 수 있습니다.

Direct3D 11과 달리 술어는 쿼리에서 분리되며 앱 개발자가 결정할 수 있는 (폐색뿐 아니라) 추론에 따라 애플리케이션이 개체를 서술할 수 있도록 Direct3D 12에서 확장됩니다.

SetPredication

버퍼 내의 64비트 값에 따라 조건자를 설정할 수 있습니다( D3D12_PREDICATION_OP 참조).

GPU는 SetPredication 명령을 실행할 때 버퍼에 값을 맞춥니다. 이후에 버퍼의 데이터가 변경되더라도 소급해서 술어 상태에 영향을 주지 않습니다.

입력 매개 변수 버퍼가 NULL이면 술어를 사용할 수 없습니다.

조건자 힌트는 Direct3D 12 API에 없습니다. 및 조건자는 직접, 컴퓨팅 및 복사 명령 목록에 허용됩니다. 원본 버퍼는 모든 힙 유형(기본값, 업로드, 읽기 저장, 사용자 지정)에 있을 수 있습니다.

핵심 런타임은 다음의 유효성을 검사합니다.

  • AlignedBufferOffset은 8바이트의 배수입니다.
  • 리소스가 버퍼입니다.
  • 작업이 열거형의 유효한 멤버입니다.
  • SetPredication은 번들 내에서 호출할 수 없습니다.
  • 명령 목록 형식이 술어를 지원하지 않습니다.
  • 오프셋이 버퍼 크기를 초과하지 않습니다.

원본 버퍼가 D3D12_RESOURCE_STATE_PREDICATION(D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT 및 단순히 별칭) 상태가 아닌 경우 디버그 계층에서 오류가 발생합니다.

서술할 수 있는 작업 세트는 다음과 같습니다.

ExecuteBundle은 자체적으로 서술되지 않습니다. 대신, 번들 쪽에 포함된 위 목록의 개별 작업이 서술됩니다.

ID3D12GraphicsCommandList 메서드 ResolveQueryData, BeginQueryEndQuery는 서술되지 않습니다.

카운터 및 쿼리

성능 측정

술어 쿼리 연습