타일 ​​기반 (지연) 렌더링을위한 데이터 구조


18

타 일식 렌더링은 현대 모바일 GPU 아키텍처에서 이미지 공간을 작은 (예를 들어, 32x32 픽셀) 타일의 규칙적인 그리드로 세분화하여 메모리 액세스의 일관성을 높이기 위해 사용됩니다. 임의로 많은 프리미티브가 임의의 주어진 타일과 겹칠 수 있다는 점을 고려하여 각 타일과 관련된 프리미티브를 추적하는 데 사용되는 데이터 구조 유형에 대한 정보는 거의 없습니다.

드라이버 개발자의 관점에서, 타일에 속하는 프리미티브 세트를 나타내는 데 일반적으로 사용되는 데이터 구조는 무엇이며, 이러한 구조는 특정 타일과 겹치는 형상에 따라 동적으로 할당 / 크기 조정됩니까?


3
정말 흥미로운 질문이며, 대부분의 중요한 세부 사항이 비밀 소스라고 생각하지만, 연구를 수행하고 요약을 작성하려는 사람에게는 좋은 출발점이 될 수 있습니다. blog.imgtec.com/powervr/…
John Calsbeek

답변:


11

John이 언급 한 블로그 게시물은 꽤 좋은 시작이지만 (내가 그렇게 말하면!) 도움이 될만한 약간의 추가 정보가 있습니다.

PowerVR 아키텍처의 경우 모든 버텍스 쉐이딩 및 타일링 프로세스가 완료된 후 타일 별 데이터를 저장하는 중간 데이터 구조 (Primary List 또는 Parameter 버퍼 (PB)라고도 함)는 실제로 대부분 다음에 의해 생성 및 관리됩니다. 드라이버가 아닌 하드웨어.

PB의 인 메모리 구조는 물리적으로 두 가지로 나뉩니다. 먼저 정점 속성을 포함하여 변환 된 정점 데이터 블록입니다. 블록은 압축되어 있으며 상상할 수 있듯이 대부분 부동 소수점 데이터가 압축되어 압축되어 있습니다. 두 번째 인 메모리 구조는 타일링 데이터이며 사실상 목록의 목록입니다.

해당 데이터 구조의 최상위 목록을 영역이라고하며 지정된 기본 블록에 대해 한 번에 하나의 타일이 아닌 타일 세트를 인코딩 할 수 있습니다. 따라서 영역은 화면 타일, 타일 상태 및 해당 영역의 지오메트리를 유지하는 압축 블록 목록의 위치 집합입니다. 지역은 래스터 라이저가 작동하는 영역이며, 래스터 라이저가 빈 지역을 방문해야 할 이유가 있지만 빈 타일은 자동으로 건너 뛴다 고 상상할 수 있습니다.

GPU가 PB에 사용하는 메모리는 모든 최신 PowerVR 구현에서 동적으로 할당됩니다. 해당 메모리에 대한 포인터는 드라이버에 의해 제공되며 GPU의 도움을 받아 드라이버가 필요에 따라 크기를 조정합니다. 이 메커니즘은 자주 재 할당해야하는 것과 할당 된 PB 공간의 양을 최소화하는 것 사이의 균형입니다.

최신 GPU는 메모리 간접적 인을 최소화하기 위해 열심히 노력하지만 래스터 화 단계를 먹이기 위해 PB를 걷는 것은 실제로 어렵고 다른 선택이없는 경우 중 하나입니다. 고맙게도 포인터 추적은 캐시가 잘되고 코어로 스트리밍되는 큰 블록을 마무리합니다.

다른 아키텍처는 PowerVR과 정확히 동일하게 작동하지 않습니다. PB가 아키텍처에있는 방식의 일부는 구현이 완전히 지연된 픽셀 음영 개념을 돕는 것이지만 일반적인 개념은 다른 모든 타일러에 적용되기 때문입니다. 내가 아는 모바일 공간.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.