답변:
고도로 전문화 된 하드웨어가이를 처리합니다. 일반적인 전략은 GPU가 래스터 화를 타일링하고 깊이 정보를 압축 형식으로 저장하는 것입니다 (예 : 다각형이 타일을 완전히 덮을 때 z- 식). 이를 통해 전체 타일에서 한 번에 테스트 할 수 있습니다. 다른 멋진 HW 트릭에는 픽셀 쉐이더가 실행되기 전에 깊이 테스트가 포함됩니다 (조건이 허용된다고 가정하면 쉐이더가 깊이 값을 쓸 수 없음). 각 스레드가 타일의 서브 세트를 "소유"하고 각 프리미티브를 독립적으로 걸거나 대체 프레임 또는 대체 래스터 라인과 같은 멀티 GPU 전략을 모방하는 것과 같은 소프트웨어와 유사한 것을 고려할 수 있습니다.
실제 GPU에서는 여러 코어가 동일한 깊이 버퍼의 동일한 영역을 읽거나 쓰려고 시도하고 이들 사이에서 동기화를 시도하는 대신 깊이 버퍼는 타일 (예 : 16x16 또는 32x32)로 분할되며 각각 타일은 단일 코어에 할당됩니다. 그러면 해당 코어는 해당 타일의 모든 래스터 화를 담당합니다. 해당 타일에 닿는 삼각형은 소유하는 코어에 의해 (타일 내에서) 래스터 화됩니다. 그런 다음 코어간에 간섭이 없으며 프레임 버퍼의 일부에 액세스 할 때 코어를 동기화 할 필요가 없습니다.
이것은 여러 타일에 닿는 삼각형이 여러 코어로 래스터 화되어야 함을 의미합니다. 따라서 지오메트리 처리 (정점과 삼각형에 대한 작업)와 픽셀 처리간에 작업 재배포 단계가 있습니다.
지오메트리 단계에서 각 코어는 여러 입력 프리미티브를 처리 할 수 있습니다. 그런 다음 각 프리미티브에 대해 프리미티브 터치가 어느 타일 ( "거친 래스터 화"라고 함)을 신속하게 결정하고 영향을받는 타일 중 하나를 소유 한 각 코어의 대기열에 프리미티브를 추가 할 수 있습니다.
그런 다음 픽셀 단계에서 각 코어는 대기열에서 프리미티브 목록을 읽고 코어가 소유 한 타일의 픽셀 적용 범위를 계산하고 추가 조정없이 깊이 테스트, 픽셀 음영 처리 및 프레임 버퍼 업데이트를 진행할 수 있습니다. 다른 코어와 함께.