다음을 통해 공유


술어

조건자는 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는 서술되지 않습니다.

카운터 및 쿼리

성능 측정

술어 쿼리 연습