KR20230028373A - 비닝 하드웨어에서 세분화 재생 제어 - Google Patents

비닝 하드웨어에서 세분화 재생 제어 Download PDF

Info

Publication number
KR20230028373A
KR20230028373A KR1020237001241A KR20237001241A KR20230028373A KR 20230028373 A KR20230028373 A KR 20230028373A KR 1020237001241 A KR1020237001241 A KR 1020237001241A KR 20237001241 A KR20237001241 A KR 20237001241A KR 20230028373 A KR20230028373 A KR 20230028373A
Authority
KR
South Korea
Prior art keywords
batch
primitives
sub
rendering
bin
Prior art date
Application number
KR1020237001241A
Other languages
English (en)
Inventor
얀 에이치. 아치레니우스
키아 칼리오
미카 칸가스루오마
루이진 우
아니루드 알. 아차랴
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20230028373A publication Critical patent/KR20230028373A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

일부 실시형태는, 프레임의 복수의 프리미티브를 렌더링하기 위한 시스템, 장치 및 방법을 제공한다. 복수의 프리미티브는 프리미티브의 복수의 배치에 분할되고 프레임은 복수의 빈에 분할된다. 복수의 배치 중 적어도 하나의 배치의 경우, 렌더링하는 단계는 복수의 빈 각각에 대해, 제1 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계, 및 복수의 빈 각각에 대해, 제2 서브 배치의 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계를 포함한다.

Description

비닝 하드웨어에서 세분화 재생 제어
관련 출원의 상호 참조
본 출원은 2020년 6월 22일에 제출된 출원 번호가 제63/042,399호이고 명칭이 "비닝 하드웨어에서 세분화 재생 제어"인 미국 가출원 및 2020년 9월 25일에 제출된 출원 번호가 제17/033,023호이고 명칭이 "비닝 하드웨어에서 세분화 재생 제어"인 미국 가출원의 우선권을 주장하며, 그 전체 내용은 본 명세서에 참조로 통합된다.
컴퓨터 그래픽에서, 객체는 일반적으로 다각형의 그룹으로 표현되며 본 명세서에서는 일반적으로 프리미티브라고 지칭된다. 다각형은 일반적으로 삼각형이며, 각각 세 개의 정점으로 표현된다. 다른 유형의 다각형 프리미티브가 일부 경우에 사용되지만, 삼각형이 가장 일반적인 예이다. 각 정점은 3차원(3D) 공간에서 위치를 정의하는 정보를 포함하고, 일부 실시형태에서는, 예를 들어 색상, 법선 벡터 및/또는 텍스처 정보와 같은 다른 정보를 포함한다.
첨부된 도면과 함께 예로서 주어진 하기 설명으로부터 보다 상세한 이해가 있을 수 있다.
도 1은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 장치의 블록도이다.
도 2는 도 1에 표시된 디바이스의 더 자세한 내용을 나타내는 블록도이다.
도 3은 일 실시예에 따른 그래픽 처리 파이프라인을 나타내는 블록도이다.
도 4는 빈에 분할된 예시적인 프레임을 나타내는 블록도이다.
도 5는 Z 함수 변경 경계에서 예시적인 배치 중단을 사용한 예시적인 Z 사전 통과 (ZPP) 동작을 나타내는 블록도이다.
도 6은 드로우콜 경계에서 예시적인 배치 중단을 사용한 예시적인 광축 최적화(LSO) 동작을 나타내는 블록도이다.
도 7은 Z 함수 변경 경계에서 예시적인 서브 배치 중단을 사용한 예시적인 ZPP 동작을 나타내는 블록도이다.
도 8은 드로우콜 경계에서 예시적인 서브 배치 중단을 사용한 예시적인 LSO 동작을 나타내는 블록도이다.
도 9는 예시적인 프리미티브가 배치된 비닝(PBB)을 나타내는 흐름도이다. 및
도 10은 서브 배치가 있는 예시적인 PBB를 나타내는 흐름도이다.
일부 실시형태에서, 전체 프레임을 빈 또는 타일로 지칭할 수 있는 서브 세트에 렌더링하는 것이 유리하다. 예를 들어, 일부 실시형태에서, 프레임은 x-y 평면의 빈으로 분할되고, 제1 빈의 픽셀에 의해 덮힌 프리미티브만이 다음 빈으로 이동하기 전에 렌더링된다. 이 접근 방식은 편의상 비닝이라고 지칭된다. 일부 경우에, 렌더링 중에 캐쉬 위치와 데이터 재사용을 증가시켜, 캐쉬에서 렌더링 데이터의 축출률을 줄일 수 있는 이점이 있다.
일부 실시형태에서는 프레임의 복수의 프리미티브를 렌더링하도록 구성된 프로세서를 제공한다. 프로세서에는 프레임의 복수의 프리미티브를 렌더링하도록 구성된 회로가 포함된다. 복수의 프리미티브는 프리미티브의 복수의 배치에 분할된다. 프레임은 복수의 빈에 분할된다. 복수의 배치 중 적어도 하나의 배치의 경우, 렌더링은 복수의 빈 각각에 대해, 제1 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계, 및 복수의 빈 각각에 대해, 제2 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계를 포함한다.
일부 실시형태에서, 프로세서는 제1 서브 배치 및 제2 서브 배치의 프리미티브를 렌더링하기 전에 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하도록 구성된 회로를 포함한다. 일부 실시형태에서, 프로세서는 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하기 전에 복수의 배치 중 다른 하나의 배치의 프리미티브를 축출하도록 구성된 회로를 포함한다. 일부 실시형태에서, 제1 서브 배치의 프리미티브를 렌더링하는 단계는, 복수의 빈 중 하나에 관한 제1 통과로 프리미티브를 렌더링 파이프라인으로 전달하는 단계, 및 다음 빈으로 이동하기 전에 복수의 빈 중 동일한 하나에 관한 제2 통과로 제1 서브 배치의 프리미티브를 렌더링 파이프라인으로 전달하는 단계를 포함한다.
일부 실시형태에서, 제1 통과는 래스터화를 포함하고, 제2 통과는 렌더링을 포함한다. 일부 실시형태에서, 제1 통과는 Z 테스트를 포함하고, 제2 통과는 렌더링을 포함한다. 일부 실시형태에서, 제2 통과는 Z 테스트의 결과를 기반으로 한 렌더링을 포함한다. 일부 실시형태에서, 프로세서는 제1 서브 배치의 프리미티브를 렌더링하기 전에 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하도록 구성된 회로를 포함한다. 일부 실시형태에서, 제1 서브 배치는 객체의 프리미티브를 포함하고, 제2 서브 배치는 제1 서브 배치에 없는 다른 객체의 프리미티브를 포함한다. 일부 실시형태에서, 제1 서브 배치에는 제2 서브 배치와 다른 Z 함수를 가진 프리미티브가 포함된다.
일부 실시형태는 프레임의 복수의 프리미티브를 렌더링하는 방법을 제공한다. 상기 방법에는 프레임의 복수의 프리미티브를 렌더링하는 단계, 복수의 프리미티브를 프리미티브의 복수의 배치에 분할하는 단계, 및 프레임을 복수의 빈에 분할하는 단계가 포함된다. 복수의 배치 중 적어도 하나의 배치의 경우, 렌더링은 복수의 빈 각각에 대해, 제1 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계, 및 복수의 빈 각각에 대해, 제2 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계를 포함한다.
일부 실시형태에서, 방법은 제1 서브 배치 및 제2 서브 배치의 프리미티브를 렌더링하기 전에, 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하는 단계를 포함한다. 일부 실시형태에서, 방법은 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하기 전에 복수의 배치 중 다른 하나의 배치의 프리미티브를 축출하는 단계를 포함한다. 일부 실시형태에서, 제1 서브 배치의 프리미티브를 렌더링하는 단계는, 복수의 빈 중 하나에 관한 제1 통과로 프리미티브를 렌더링 파이프라인으로 전달하는 단계, 및 다음 빈으로 이동하기 전에 복수의 빈 중 동일한 하나에 관한 제2 통과로 제1 서브 배치의 프리미티브를 렌더링 파이프라인에 전달하는 단계를 포함한다.
일부 실시형태에서, 제1 통과는 래스터화를 포함하고, 제2 통과는 렌더링을 포함한다. 일부 실시형태에서, 제1 통과는 Z 테스트를 포함하고, 제2 통과는 렌더링을 포함한다. 일부 실시형태에서, 제2 통과는 Z 테스트의 결과를 기반으로 한 렌더링을 포함한다. 일부 실시형태에서, 방법은 제1 서브 배치의 프리미티브를 렌더링하기 전에 복수의 배치 중 적어도 하나의 프리미티브를 캐싱하는 단계를 포함한다. 일부 실시형태에서, 제1 서브 배치는 객체의 프리미티브를 포함하고, 제2 서브 배치는 제1 서브 배치에 없는 다른 객체의 프리미티브를 포함한다. 일부 실시형태에서, 제1 서브 배치에는 제2 서브 배치와 다른 Z 함수를 가진 프리미티브가 포함된다.
도 1은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 장치(100)의 블록도이다. 장치(100)는, 예를 들어, 컴퓨터, 게임 장치, 핸드헬드(handheld) 장치, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함할 수 있다. 장치(100)는 프로세서(102), 메모리(104), 스토리지(106), 하나 이상의 입력 장치(108), 및 하나 이상의 출력 장치(110)를 포함한다. 장치(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함한다. 디바이스(100)는 도 1에 도시되지 않은 추가적인 구성요소를 포함할 수 있다는 것이 이해된다.
다양한 대안에서, 프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이 상에 위치한 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함하며, 여기서 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 다양한 대안에서, 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치하거나, 프로세서(102)와 별도로 위치한다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 예를 들어, RAM(random access memory), 동적 RAM, 또는 캐시를 포함한다.
스토리지(106)는 고정 또는 착탈식 스토리지, 예를 들어, 하드 디스크 드라이브, 고체 상태 드라이브, 광학 디스크, 또는 플래시 드라이브를 포함한다. 입력 장치(108)는, 제한 없이, 키보드, 키패드, 터치 화면, 터치 패드, 검출기, 마이크, 가속도계, 자이로스코프, 생체인식 스캐너, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다. 출력 장치(110)는, 제한 없이, 디스플레이, 스피커, 프린터, 햅틱 피드백 장치, 하나 이상의 조명, 안테나, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 장치(108)와 통신하고, 프로세서(102)가 입력 장치(108)로부터 입력을 수신할 수 있게 한다. 출력 드라이버(114)는 프로세서(102) 및 출력 장치(110)와 통신하고, 프로세서(102)가 출력 장치(110)에 출력을 송신할 수 있게 한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적 구성요소이고, 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는 경우, 장치(100)는 동일한 방식으로 동작할 것이라는 점에 유의한다. 출력 드라이버(116)는 디스플레이 디바이스(118)에 결합된 가속 처리 디바이스("APD")(116)를 포함한다. APD는 프로세서(102)로부터 컴퓨팅 커맨드 및 그래픽 렌더링 커맨드를 수용하고, 이러한 컴퓨팅 커맨드 및 그래픽 렌더링 커맨드를 처리하고, 디스플레이를 위해 디스플레이 디바이스(118)에 픽셀 출력을 제공한다. 이하에서 보다 상세히 설명되는 바와 같이, APD(116)는 하나 이상의 병렬 처리 유닛을 포함하여 SIMD(single-instruction-multiple-data) 패러다임에 따라 계산을 수행한다. 따라서, 다양한 기능이 APD(116)에 의해 또는 이와 함께 수행되는 것으로 본원에 설명되지만, 다양한 대안에서, APD(116)에 의해 수행되는 것으로 설명된 기능은 호스트 프로세서(예를 들어, 프로세서(102))에 의해 구동되지 않고 디스플레이 디바이스(118)에 그래픽 출력을 제공하는 유사한 능력을 갖는 다른 컴퓨팅 디바이스에 의해 추가적으로 또는 대안적으로 수행된다. 예를 들어, SIMD 패러다임에 따라 처리 작업을 수행하는 임의의 처리 시스템은 본원에서 설명된 기능을 수행할 수 있음이 고려된다. 또는, SIMD 패러다임에 따라 처리 작업을 수행하지 않는 컴퓨팅 시스템은 본원에 설명된 기능을 수행하는 것으로 고려된다.
도 2는, APD(116)에서 처리 작업의 실행과 관련된 추가 세부사항을 도시하는, 디바이스(100)의 블록도이다. 프로세서(102)는, 시스템 메모리(104)에, 프로세서(102)에 의한 실행을 위한 하나 이상의 제어 로직 모듈을 유지한다. 제어 로직 모듈은 운영 체제(120), 커널 모드 드라이버(122), 및 애플리케이션(126)을 포함한다. 이러한 제어 로직 모듈은 프로세서(102) 및 APD(116)의 동작의 다양한 특징을 제어한다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 통신하고, 프로세서(102) 상에서 실행되는 다른 소프트웨어를 위한 하드웨어에 인터페이스를 제공한다. 커널 모드 드라이버(122)는, 예를 들어, 프로세서(102) 상에서 실행되는 소프트웨어(예를 들어, 애플리케이션(126))에 API(application programming interface)를 제공하여 APD(116)의 다양한 기능에 액세스하는 APD(116)의 동작을 제어한다. 커널 모드 드라이버(122)는 또한 (아래에서 더 상세히 논의되는 SIMD 유닛(138)과 같은) APD(116)의 처리 구성요소로 실행하기 위한 프로그램을 컴파일하는 JIT(just-in-time) 컴파일러를 포함한다.
APD(116)는 병렬 처리에 적합할 수 있는 그래픽 연산 및 비그래픽 연산과 같은 선택된 기능에 대한 명령 및 프로그램을 실행한다. APD(116)는 픽셀 연산, 지오메트리 계산과 같은 그래픽 파이프라인 연산을 실행하고, 프로세서(102)로부터 수신된 명령에 기초하여 이미지를 디스플레이 장치(118)에 렌더링하는 데 사용될 수 있다. APD(116)는 또한, 프로세서(102)로부터 수신된 명령에 기초하여, 비디오, 물리 시뮬레이션, 계산 유체 역학, 또는 다른 작업과 관련된 연산과 같은 그래픽 연산과 직접적으로 관련되지 않은 계산 처리 동작을 실행한다.
APD(116)는 SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청에 동작을 수행하는 하나 이상의 SIMD 유닛(138)을 포함하는 계산 유닛(132)을 포함한다. SIMD 패러다임은 다수의 프로세싱 요소가 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고, 따라서 동일한 프로그램을 실행하지만, 상이한 데이터로 해당 프로그램을 실행할 수 있는 것이다. 일례에서, 각각의 SIMD 유닛(138)은 16개의 레인을 포함하고, 여기서 각각의 레인은 SIMD 유닛(138)의 다른 레인과 동일한 시간에 동일한 명령어를 실행하지만 상이한 데이터로 해당 명령어를 실행할 수 있다. 모든 레인이 주어진 명령어를 실행할 필요가 없는 경우 예측으로 레인을 끌 수 있다. 예측은 발산 제어 흐름으로 프로그램을 실행하는 데에도 사용될 수 있다. 보다 구체적으로, 제어 흐름이 개별 레인에 의해 수행된 계산에 기초하는 조건부 분기 또는 다른 명령어를 갖는 프로그램에 대해, 현재 실행되지 않은 제어 흐름 경로에 대응하는 레인의 예측, 및 상이한 제어 흐름 경로의 순차 실행이 임의의 제어 흐름을 허용한다.
계산 유닛(132)에서 실행의 기본 단위는 작업-항목이다. 각각의 작업-항목은 특정 레인에서 병렬로 실행될 프로그램의 단일 인스턴스화를 나타낸다. 작업-항목은 단일 SIMD 처리 유닛(138) 상에서 "파면(wavefront)"으로서 동시에 실행될 수 있다. 하나 이상의 파면은 동일한 프로그램을 실행하도록 지정된 작업-항목의 집합을 포함하는 "작업 그룹"에 포함된다. 작업그룹을 구성하는 파면 각각을 실행함으로써 작업그룹은 실행될 수 있다. 대안적으로, 파면은 단일 SIMD 유닛(138) 상에서 순차적으로 또는 상이한 SIMD 유닛(138) 상에서 부분적으로 또는 완전히 병렬로 실행된다. 파면은 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 있는 작업-항목의 가장 큰 집합으로 생각될 수 있다. 따라서, 프로세서(102)로부터 수신된 명령이, 프로그램이 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 없는 정도로 특정 프로그램이 병렬화되어야 함을 표시하는 경우, 해당 프로그램은 2개 이상의 SIMD 유닛(138) 상에 병렬화되거나 동일한 SIMD 유닛(138) 상에 직렬화되는 (또는 필요에 따라 병렬화 및 직렬화 모두) 파면으로 분할된다. 스케줄러(136)는 상이한 계산 유닛(132) 및 SIMD 유닛(138) 상의 다양한 파면을 스케줄링하는 것에 관련된 동작을 수행한다.
계산 유닛(132)에 의해 제공되는 병렬성은 픽셀 값 계산, 정점 변환 및 다른 그래픽 동작과 같은 그래픽 관련 동작에 적합하다. 따라서, 일부 경우에서, 프로세서(102)로부터 그래픽 처리 명령을 수용하는 그래픽 파이프라인(134)은 병렬로 실행하기 위해 계산 유닛(132)에 계산 작업을 제공한다.
계산 유닛(132)은 또한 그래픽과 관련되지 않거나 그래픽 파이프라인(134)의 "정상(normal)" 동작의 일부로서 수행되지 않는 계산 작업(예를 들어, 그래픽 파이프라인(134)의 동작을 위해 수행되는 처리를 보완하기 위해 수행된 커스텀 동작)을 수행하는 데 사용된다. 프로세서(102) 상에서 실행되는 애플리케이션(126) 또는 다른 소프트웨어는 이러한 계산 작업을 정의하는 프로그램을 실행을 위해 APD(116)에 전송한다.
도 3은 도 2에 예시된 그래픽 처리 파이프라인(134)의 추가적인 세부사항을 도시하는 블록도이다. 그래픽 처리 파이프라인(134)은, 각각이 특정 기능을 수행하는 스테이지들을 포함한다. 스테이지는 그래픽 처리 파이프라인(134)의 기능의 세분화를 나타낸다. 각각의 스테이지는 프로그램 가능한 처리 유닛(202)에서 실행되는 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현되거나, 프로그램 가능한 처리 유닛(202) 외부의 고정된 기능, 프로그램 가능하지 않은 하드웨어로서 부분적으로 또는 전체적으로 구현된다.
입력 어셈블러 스테이지(302)는 유저-필드 버퍼(user-filled buffer)(예를 들어, 애플리케이션(126)과 같은 프로세서(102)에 의해 실행되는 소프트웨어의 요청 시에 채워진 버퍼)로부터 프리미티브 데이터를 읽고, 파이프라인의 나머지 부분에서 사용하기 위해 데이터를 프리미티브 안으로 어셈블링한다. 입력 어셈블러 스테이지(302)는 유저-필드 버퍼에 포함된 프리미티브 데이터에 기초하여 다양한 유형의 프리미티브를 생성할 수 있다. 입력 어셈블러 스테이지(302)는 나머지 파이프라인에 의해서 사용되기 위해, 어셈블된 프리미티브를 포맷한다.
정점 셰이더 스테이지(304)는 입력 어셈블러 스테이지(302)에 의해 어셈블된 프리미티브의 정점을 처리한다. 정점 셰이더 스테이지(304)는 변환, 스키닝(skinning), 모핑(morphing) 및 정점별 조명처리와 같은 다양한 정점별 동작을 수행한다. 변환 연산은 정점의 좌표를 변환하는 다양한 연산을 포함한다. 이러한 연산은 모델링 변환, 보기 변환, 투영 변환, 원근 분할, 및 뷰포트 변환 중 하나 이상을 포함한다. 여기서, 이러한 변환은 변환이 수행되는 정점의 좌표 또는 "위치"를 수정하는 것으로 간주된다. 정점 셰이더 스테이지(304)의 다른 연산은 좌표 이외의 속성을 수정한다.
정점 셰이더 스테이지(304)는 하나 이상의 컴퓨팅 유닛(132) 상에서 실행될 정점 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현된다. 정점 셰이더 프로그램은 프로세서(102)에 의해 제공되고, 컴퓨터 프로그래머에 의해 미리 작성된 프로그램에 기초한다. 드라이버(122)는 이러한 컴퓨터 프로그램을 컴퓨팅 유닛(132) 내에서 실행하기에 적합한 포맷을 갖는 정점 셰이더 프로그램을 생성하도록 컴파일한다.
헐 셰이더 스테이지(306), 테셀레이터 스테이지(308) 및 도메인 셰이더 스테이지(310)는, 프리미티브를 세분화하여 단순한 프리미티브를 보다 복잡한 프리미티브로 변환하는 테셀레이션을 구현하기 위해 함께 작동된다. 헐 셰이더 스테이지(306)는 입력 프리미티브에 기초하여 테셀레이션을 위한 패치를 생성한다. 테셀레이터 스테이지(308)는 패치에 대한 일 세트의 샘플을 생성한다. 도메인 셰이더 스테이지(310)는 패치에 대한 샘플에 대응하는 정점에 대한 정점 위치를 계산한다. 헐 셰이더 스테이지(306) 및 도메인 셰이더 스테이지(310)는 프로그래밍 가능한 프로세싱 유닛(202) 상에서 실행될 셰이더 프로그램으로서 구현될 수 있다.
지오메트리 셰이더 스테이지(312)는 프리미티브 단위로 정점 연산을 수행한다. 포인트 스프린트 확장(point sprint expand), 동적 입자 시스템 연산, 퍼-핀(fur-fin) 생성, 그림자 볼륨 생성, 단일 패스 렌더-투-큐브맵(single pass render-to-cubemap), 프리미티브별 재료 스와핑, 및 프리미티브별 재료 설정과 같은 연산을 포함하여, 다양한 상이한 유형의 연산이 기하학 셰이더 스테이지(312)에 의해 수행될 수 있다. 일부 예에서, 프로그래밍 가능한 처리 유닛(202) 상에서 실행되는 셰이더 프로그램은 기하학적 구조 셰이더 스테이지(312)에 대한 연산을 수행한다.
래스터라이저 스테이지(314)는 업스트림에서 생성된 단순 프리미티브를 수용하고 래스터화한다. 래스터화는 특정 프리미티브에 커버되는 화면 픽셀(또는 하위-픽셀 샘플)을 결정하는 것을 포함한다. 래스터화는 고정 기능 하드웨어에 의해 수행된다.
픽셀 셰이더 스테이지(316)는 업스트림에서 생성된 프리미티브 및 래스터화 결과에 기초하여 스크린 픽셀에 대한 출력 값을 계산한다. 픽셀 셰이더 스테이지(316)는 텍스처 메모리로부터의 텍스처를 적용할 수 있다. 픽셀 셰이더 스테이지(316)에 대한 연산은 프로그래밍 가능한 프로세싱 유닛(202) 상에서 실행되는 셰이더 프로그램에 의해 수행된다.
출력 병합 스테이지(318)는 픽셀 셰이더 스테이지(316)로부터의 출력을 수용하고, 이러한 출력을 병합하여, 스크린 픽셀에 대한 최종 색상을 결정하기 위해 z-테스트 및 알파 블렌딩과 같은 연산을 수행한다.
텍스처를 정의하는 텍스처 데이터는 텍스처 유닛(320)에 의해 저장되고/되거나 액세스된다. 텍스처는 그래픽 처리 파이프라인(134)의 다양한 지점에서 사용되는 비트맵 이미지이다. 예를 들어, 일부 경우에서, 픽셀 셰이더 스테이지(316)는 렌더링될 정점의 수를 증가시키지 않고 명백한 렌더링 복잡성을 개선하기 위해(예를 들어, 더 "사실적인" 모습을 제공하기 위해) 픽셀에 텍스처를 적용한다.
일부 예에서, 정점 셰이더 스테이지(304)는, 예를 들어, 개선된 미학을 위해 정점을 생성 또는 수정함으로써 복잡성을 증가시키기 위해 프리미티브를 수정하기 위해 텍스처 유닛(320)으로부터의 텍스처 데이터를 사용한다. 일 예에서, 정점 셰이더 스테이지(304)는 정점의 변위를 수정하기 위해 텍스처 유닛(320)에 저장된 높이 맵을 사용한다. 이러한 유형의 기술은, 예를 들어, 물을 렌더링하기 위해서 사용되는 정점의 위치 및 수를 수정함으로써, 픽셀 셰이더 스테이지(316)에서만 사용되는 텍스처와 비교하여 보다 사실적으로 보이는 물을 생성하기 위해서 사용될 수 있다. 일부 경우에서, 기하학적 구조 셰이더 스테이지(312)는 텍스처 유닛(320)으로부터 텍스처 데이터에 액세스한다.
일반적으로, 특히 GPU에서 자주 사용되는 데이터를 고속 전용 메모리에 캐싱함으로써 다양한 컴퓨팅 연산의 성능은 증가된다. 프레임에 대해 렌더링되는 모든 프리미티브에 대한 속성 정보 (예를 들어, x, y, z, 좌표, 색상, 텍스처 등)는 처리를 위해 이 정보를 저장하는 데 사용되는 캐쉬 또는 로컬 메모리의 크기를 초과하는 경우도 있다. 따라서, 전술한 바와 같이 일부 실시형태에서, 전체 프레임을 서브 세트로 렌더링하는 것이 유리하다. 프레임의 이러한 서브 세트는 일반적으로 빈 또는 타일이라고 지칭된다. 예를 들어, 일부 실시형태에서, 프레임은 x-y 평면에서 빈으로 분할되고, 제1 빈의 픽셀에 의해 "커버되는"(즉, 3D 프리미티브는 2D 공간에서 빈과 중첩하도록 2D 빈에 투영되거나 래스터화됨) 프리미티브만 다음 빈에 이동하기 전에 렌더링된다. 이 접근 방식은 편의상 비닝이라고 지칭된다. 일부 경우에서, 비닝은 렌더링 중에 캐쉬 위치와 데이터 재사용을 증가시켜, 캐쉬에서 렌더링 데이터의 축출률을 줄일 수 있는 이점이 있다.
도 4는 빈에 분할된 예시적인 프레임(400)을 나타내는 블록도이다. 이 예에서, 프레임(400)은 25개의 빈에 분할되지만, 임의의 적합한 수의 빈이 모두 가능하다. 편의상, 빈(402), 빈(404) 및 빈(406) 세 개만 표기한다. 비닝 접근 방식을 사용하면, 먼저 빈(402) 안에 떨어진 픽셀에 의해 커버되는 프레임(400)의 프리미티브만 렌더링된다. 빈(402)에 의해 커버된 예시적인 프리미티브(408)가 도시되어 있다. 빈(402) 안에 떨어진 픽셀을 래스터링하는 프리미티브가 렌더링된 다음, 빈(404) 안에 떨어진 픽셀을 래스터링하는 프리미티브가 렌더링되고, 따라서, 프레임(400)의 각 빈 안에 있는 픽셀을 래스터링하는 프리미티브가 렌더링될 때까지 빈(406) 그리고 다른 빈 순으로 렌더링된다.
일부 실시형태에서, 캐쉬 위치와 데이터 재사용의 개선이 구현된다. 이러한 접근 방식에서, 배치로 지칭되는 프리미티브의 서브 세트가 각 빈에 대해 한 번에 빈 하나씩 렌더링된다. 각 빈에 대해 배치 프리미티브는 빈의 픽셀에 의해 커버되는지 여부를 결정하기 위해 각각 먼저 래스터화되며, 그 후에, 빈의 픽셀에 의해 커버되는 것으로 결정된 배치 프리미티브가 렌더링을 위해 전송된다. 일부 실시형태에서, 이 결정이 래스터화 알고리즘을 사용하여 수행된다. 래스터화 알고리즘은 일부 실시형태에서 PBB의 일부이다. 각 빈에 대해 배치가 한 번에 하나의 빈이 렌더링된 후, 모든 배치가 래스터화되고 모든 빈에 대해 렌더링될 때까지 각 빈에 대해 동일한 방식으로 다음 프리미티브 배치가 한 번에 한 빈이 렌더링된다.
본 명세서에서 PBB 하드웨어로 지칭되는 전용 하드웨는 각 빈에 대한 프리미티브의 배치를 "재생"하는 데 사용된다. 다시 말해서, PBB 하드웨어는 배치의 프리미티브를 저장하고, 전체 프레임이 렌더링될 때까지 각 빈에 대해 한 번씩 배치의 프리미티브를 렌더링 파이프라인에 전송한다.
PBB 하드웨어는 프리미티브를 배치(즉, 프리미티브의 서브 세트를 저장)하고 "재생"(즉, 렌더링을 위해 저장된 프리미티브의 배치를 전송함)하여 다른 순서(예를 들어, 비닝을 위한 스크린 위치 순서)로 구성된다. 일부 실시형태에서, PBB 하드웨어의 재생 기능은 Z 사전 통과(ZPP) 및 광축 최적화 (LSO)와 같은 다른 기술에도 사용할 수 있다. ZPP 및 LSO는 본 명세서에서 PBB 재생 기능의 대안적인 사용을 설명하기에 편리한 예이지만, 임의의 적합한 기술은 다른 실시형태에서 PBB 재생 기능을 사용할 수 있다는 점에 유의한다.
ZPP는 중첩된 삼각형(예를 들어, 배치 또는 빈에서 픽셀과 중첩되는 경우)을 색상 계산 없이 한 번 래스터화하여 삼각형(즉, Z 함수에 따라 관찰자와 가장 가까운 삼각형 또는 가장 먼 삼각형)의 "Z" 또는 깊이 순서를 결정함으로써 계산 부하를 줄이는 처리 기술이다. Z 또는 깊이 정보는 각 샘플의 Z 완충액에 기록된다. 이런 래스터화는 Z 사전 통과로 지칭된다. Z 사전 통과에서 관찰자에 가장 가까운 샘플이 결정된 후, 삼각형은 PBB 하드웨어의 재생 기능을 사용하여, Z 정보와 함께 색상 계산을 위해 렌더링 파이프라인으로 제2 통과에서 "재생"된다. Z 정보를 기반으로, 전방(즉, 관찰자에 가장 가까운)에 있는 샘플에 대해서만 색상 계산이 수행된다. 일부 실시형태에서, 이는 처리 부하를 감소시킴으로써 성능을 개선하는 이점이 있다. LSO는 광축 최적화를 위해 유사한 방식으로 PBB 하드웨어의 재생 기능을 사용한다.
PBB 재생 메커니즘은 배치 수준에서 실행된다. 즉, 제1 통과는 동일한 배치(즉, 프리미티브의 동일한 서브 세트)에서 "재생"(즉, 렌더링 파이프라인으로 전송)하기 전에 배치(즉, 정의된 프리미티브의 서브 세트)에서 동작을 수행한다. 그러나, ZPP 동작의 경우, 제1 통과의 모든 프리미티브에 대한 Z 계산은 동일한 Z 함수에 대한 것이어야 한다. 이는 Z 함수가 다른 프리미티브에 대하여 각 프리미티(즉, "보다 큰" 또는 GT 동작 모드에서 앞쪽에 가장 가까운 삼각형을 나타내거나, "미만"또는 LT 동작 모드에서 후면에 가장 가까운 삼각형을 나타냄)에 대한 Z 함수의 의미를 결정하기 때문이다. 따라서, 실행이 Z 함수 변경되는 지점에 도달하면, Z 함수 변경에 따른 프리미티브가 정확한 동작을 용이하게 하기 위해 별개의 배치로 처리된다. LSO 동작의 경우, 알고리즘은 광축 형상(예를 들어, 구체)의 모든 프리미티브가 배치 내부에 완전히 포함되어야 하며, 최고의 효율을 얻기 위해 각 배치 내부에 하나의 객체만 있어야 한다. 일부 실시형태에서, 각 드로우콜이 하나의 객체를 렌더링하기 때문에 배치가 드로우콜 경계에서 중단되어야 한다. 드로우콜은 CPU에서 GPU로 객체를 드로하도록 전송되는 요청이다.
도 5는 Z 함수 변경(Z 상태 변경이라고도 지칭됨) 시 예시적인 배치 중단을 설명하는 예시적인 ZPP 동작(500)을 나타내는 블록도이다. 동작(500)은 제1 배치(502)의 처리와 이어서 제2 배치(504)의 처리를 포함한다.
배치(502)의 프리미티브는, 배치(502)의 프리미티브가 배치(504)의 프리미티브와 관련된 Z 함수와는 상이한 Z 함수와 관련되어 있기 때문에, 배치(504)의 프리미티브와 별도로 배치된다. 이 예에서, 배치(502)의 프리미티브는 "보다 큰" Z 함수(GT)와 관련되고, 배치(504)의 프리미티브는 "미만" Z 함수와 관련된다. 배치(502)의 프리미티브는, 배치(504)의 프리미티브와 함께 배치될 수 있음에도 불구하고 Z 함수의 변경으로 인해 별도로 배치된다(예를 들어, 최대 배치 크기는 하나의 배치에서 모든 프리미티브를 수용할 수 있다).
배치(502)는 프레임의 각 빈에 대해 두 개의 통과로 처리된다. 제1 통과에서 배치(502)의 프리미티브를 렌더링 파이프라인에 전송하여 색상 계산 없이 프리미티브를 래스터화하여 프리미티브의 깊이 순서를 결정한다. 이러한 제1 통과는 Z 사전 통과라고 지칭된다. 깊이 정보는 Z 완충액에 기록된다. 관찰자에 가장 가까운 샘플이 Z 사전 통과에서 결정된 후, 배치(502)의 프리미티브는 PBB 하드웨어의 재생 기능을 사용하여 Z 완충액의 Z 정보와 함께 색상 계산을 위해 제2 통과로 렌더링 파이프라인으로 전송된다. Z 정보를 기반으로, 색상 계산은 그 빈에 대해 전방(즉, 관찰자와 가장 가까운 경우)에 있는 샘플에 대해서만 수행된다.
제1 통과 및 제2 통과가 프레임의 제1 빈에 대해 배치(502)에서 수행된 후, 제1 통과 및 제2 통과는 다음 빈에 대해 배치(502)에서 수행되고, 각 빈에 대해 배치(502)가 렌더링될 때까지 수행된다. 프레임의 각 빈에 대해 배치(502)가 렌더링된 후, 배치(504)는 배치(502)와 동일한 방식으로 프레임의 각 빈에 대해 두 개의 통과로 처리된다.
도 6은 드로우콜 경계에서 예시적인 배치 중단을 설명하는 예시적인 LSO 동작(600)을 나타내는 블록도이다. 동작(600)은 제1 배치(602)의 처리, 후속의 제2 배치(604)의 처리, 이에 후속의 제3 배치(606)의 처리를 포함한다.
배치(602), 배치(604) 및 배치(606)의 프리미티브는, LSO 알고리즘에서는 광축 형상(예를 들어, 구체)의 모든 프리미티브가 배치 내부에 완전히 포함되어야 하기 때문에, 별도로 배치되며 일부 실시형태에서, 각 배치 내부에 하나의 객체만 있는 것이 더 효율적이다. 하나의 배치 내부에 복수의 객체가 있을 경우, 객체는 특정 상황에 따라 서로 간섭하여 잘못된 결과를 생성한다. 따라서, 각 드로우콜이 하나의 객체를 렌더링하기 때문에, 배치는 드로우콜 경계에서 중단된다. 배치(602), 배치(604) 및 배치(606)의 프리미티브는 그들이 서로 함께 배치될 수 있음에도 불구하고 (예를 들어, 최대 배치 크기는 하나의 배치의 모든 프리미티브를 수용할 수 있음) 드로우콜 경계로 인해 별도로 배치된다.
배치(602)는 프레임의 각 빈에 대해 두 개의 통과로 처리된다. 제1 통과에서, 렌더링 파이프라인은 빈에 대한 배치의 프리미티브에 대해 래스터화 및 Z 테스트를 수행하고, Z 테스트 결과가 기록된다. 제2 통과에서, 제1 통과의 단편 중 임의의 단편이 Z 테스트를 통과하면, 렌더링 파이프라인은 뒷면을 향한 삼각형에 래스터화 및 Z 테스트를 수행하여, 광축 내부에 떨어지는 장면의 일부를 나타내기 위한 대표적인 단편을 결정한다. 프레임의 제1 빈에 대해 배치(602)에서 제1 통과와 제2 통과가 수행된 후, 다음 빈에 대해 배치(602)에서 제1 통과와 제2 통과가 수행되고, 이리 하여, 각 빈에 대해 배치(602)에서 LSO가 수행될 때까지 수행된다. 프레임의 각 빈에 대해 배치(602)에서 LSO가 수행된 후, 배치(604)는 배치(602)와 동일한 방식으로 프레임의 각 빈에 대해 두 개의 통과로 처리된다. 유사하게, 프레임의 각 빈에 대해 배치(604)에서 LSO가 수행된 후, 배치(606)는 배치(604)와 동일한 방식으로 프레임의 각 빈에 대해 두 개의 통과로 처리된다.
일부 실시형태에서 Z 함수 또는 드로우콜 경계는 PBB에 사용되는 것 이상의 추가 배치 구분을 초래하여 배치의 크기를 효과적으로 줄인다. 일부 실시형태에서, 배치 크기를 효과적으로 줄이는 것은 캐쉬 축출 개선 및/또는 PBB에 의해 제공되는 대역폭 감소에 부정적인 영향를 준다. 또한, 다른 목적을 위해 PBB에 사용되는 배치 크기를 줄이는 것 또한 잠재적으로 유사한 부정적인 영향을 줄 수 있다.
따라서, 일부 PBB 하드웨어 실시형태는 프리미티브 배치 내의 서브 배치에서 동작하도록 구성된다. 이 접근법은 제2 수준의 재생을 촉진함으로써, ZPP, LSO 및/또는 PBB 하드웨어의 재생 기능을 활용하는 다른 기능을 지원하면서도 PBB 캐쉬 축출 개선 및/또는 대역폭 이점을 유지하는 이점이 있다. 일부 실시형태에서, 배치의 서브 배치에서 비닝 동작을 수행면서 배치의 모든 프리미티브에 대해 캐쉬된 속성 정보를 유지하면, 배치의 크기를 줄임으로 인해 초래할 수 있는 캐쉬 축출 개선 및/또는 PBB에 의해 제공되는 대역폭 감소에 대한 부정적 영향을 방지하거나 제한할 수 있다.
도 7은 Z 함수 변경 경계에서 예시적인 서브 배치 중단을 나타내는 예시적인 ZPP 동작(700)을 나타내는 블록도이다. 도 7의 예에서, PBB 하드웨어는 제1 서브 배치(704)의 프리미티브를 두 개의 통과(서브 배치(704)의 프리미티브에 대한 GT 모드 Z 함수를 결정하기 위한 하나의 통과 및 결정된 Z 함수를 기반으로 서브 배치(704)의 프리미티브를 렌더링하는 하나의 통과)로 전송한 다음, 서브 배치(706)의 프리미티브를 두 개의 통과(서브 배치(706)의 프리미티브에 대한 LT 모드 Z 함수를 결정하기 위한 하나의 통과 및 결정된 Z 함수를 기반으로 서브 배치(704)의 프리미티브를 렌더링하는 하나의 통과)로 전송하는 사이에 제1 배치(702)의 모든 프리미티브에 대한 속성 정보가 캐쉬에 유지된다. PBB 하드웨어가 현재 빈의 서브 배치(704) 및 서브 배치(706) 각각에 대하여 ZPP를 수행한 후, PBB 하드웨어는 다음 빈으로 전환하여 서브 배치(704) 및 서브 배치(706)에 대해 다시 ZPP를 수행한다.
도 8은 드로우콜 경계에서 예시적인 서브 배치 중단을 설명하는 예시적인 LSO 동작(800)을 나타내는 블록도이다. 도 8의 예에서, PBB 하드웨어가 LSO에 대한 두 개의 통과를 위해 제1 서브 배치(804)의 프리미티브를 렌더링 파이프라인에 전송하는 동안 제1 배치(802)의 모든 프리미티브에 대한 속성 정보는 캐쉬(예를 들어, 색상 캐쉬 및/또는 텍스처 캐쉬)에 유지되고, 다음 LSO에 대한 두 개의 통과를 위해 서브 배치(806)의 프리미티브를 렌더링 파이프라인에 전송하고, 다음 LSO에 대한 두 개의 통과를 위해 서브 배치(808)의 프리미티브를 렌더링 파이프라인에 전송한다.
PBB 하드웨어가 현재 빈의 서브 배치(804), 서브 배치(806) 및 서브 배치(808)의 각각에 대해 LSO를수행한 후, PBB 하드웨어는 다음 빈으로 전환하여, 서브 배치(804), 서브 배치(806) 및 서브 배치(808)에 대해 다시 LSO를 수행한다.
표 1에는 배치 수준에서 PBB 재생을 설명한 의사 코드(pseudo-code)(편의상 "일반적인 PBB 재생"으로 지칭됨)가 포함되고, 표 2에는 본 명세서에 설명된 바와 같이 서브 배치 수준에서 PBB 재생을 설명하는 의사 코드가 포함된다(편의를 위해 "서브 배치를 가진 PBB 재생"으로 지칭됨).
[표 1]
//일반적인 PBB 재생
각 배치에 대해 {
각 빈에 대해 {
현재 빈을 커버하는 현재 배치의 프리미티브를 전송한다;
상기 현재 빈을 커버하는 상기 현재 배치의 상기 프리미티브를 다시 전송한다;
}
}
[표 2]
//서브 배치가 있는 PBB 재생
각 배치에 대해 {
각 빈에 대해 {
각 서브 배치에 대해 {
현재 빈을 커버하는 현재의 서브 배치의 프리미티브를 전송한다;
상기 현재 빈을 커버하는 상기 현재 서브 배치의 상기 프리미티브를 다시 전송한다;
}
}
}
일반적인 PBB 재생에서, 각 배치 및 각 빈에 대해, 현재 배치의 프리미티브가 그래픽 파이프라인(예를 들어, 빈에 의해 커버되는 배치 프리미티브를 결정하기 위한 래스터화)으로 전송된 다음, 현재 배치의 프리미티브가 그래픽 파이프라인(예를 들어, 빈에 의해 커버하기로 결정된 배치 프리미티브를 렌더링)으로 다시 전송된다.
서브 배치가 있는 PBB 재생에서, 각 배치, 각 빈 및 각 서브 배치에 대해 현재 서브 배치의 프리미티브가 그래픽 파이프라인으로 전송되고(예를 들어, 프리미티브의 Z 순서를 결정하기 위해), 그 다음, 현재 배치의 프리미티브가 그래픽 파이프라인에 다시 전송된다(예를 들어, Z 방향으로 관찰자와 가장 가까운 것으로 결정된 배치 프리미티브의 렌더링).
도 9는 PBB에 대한 예시적인 프로세스(900)를 나타내는 흐름도이다. 일부 실시형태에서, 프로세스(900) 또는 그것의 일부는, ZPP 동작 또는 LSO 동작 또는 예를 들어 본 명세서에서 설명된 바와 같이 또는 다른 동작에 사용될 수 있다. 일부 실시형태에서, 프로세스(900)는 본 명세서에서 추가로 설명된 PBB 하드웨어와 같은 임의의 적합한 하드웨어를 사용하여 구현된다.
프레임의 프리미티브는 단계(902)에서 그래픽 프로세서에 입력된다. 프레임의 프리미티브는 단계(904)에서 복수의 배치(P)에 분할된다. 프레임은 단계(906)에서 복수의 빈(Q)에 분할된다. 단계(902), 단계(904) 및 단계(906)는 임의의 적합한 방식으로 및/또는 다른 프로세스에서 수행될 수 있다는 점에 유의한다. 현재 배치는 P 배치의 제1 배치로 설정되고, 현재 빈은 단계(908)에서 Q 빈의 제1 빈으로 설정된다. 이 표기법은 단지 편리함을 위한 것으로, 카운터를 사용하거나 예시적인 초기화 단계(908)의 유무에 관계없이 적합한 방식으로 배치 및 빈을 추적할 수 있다.
단계(910)에서, 현재 배치의 프리미티브는 버퍼링되고, 현재 빈의 제1 통과를 위해 그래픽 파이프라인으로 전송된다. 예를 들어, 일부 ZPP 프로세스에서, 제1 통과는 본 명세서에 설명된 바와 같이 Z 사전 통과이다. 제1 통과 이후, 현재 배치의 프리미티브는 단계(912)에서 현재 빈에 대한 제2 통과("재생")를 위해 그래픽 파이프라인으로 전송된다. 예를 들어, 일부 ZPP 프로세스에서, 제2 통과는 제1 통과에서 결정된 깊이 정보를 기반으로 관찰자에 가장 가까운 프리미티브의 색상을 렌더링한다.
현재 빈이 Q 빈의 마지막 배치가 아니라는 조건(914)에서, 현재 빈은 단계(916)에서 다음 배치로 진전되고, 현재 배치의 프리미티브는 버퍼링되며 단계(910)에서 현재 빈에 대한 통과 1을 위해 그래픽 파이프라인으로 전송된다. 현재 빈이 Q 빈의 마지막 배치인 조건(914) 및 현재 배치가 P 배치의 마지막 빈이라는 조건(918)에서, 프로세스(900)는 종료된다. 그렇지 않으면, 현재 배치가 R 빈의 마지막 배치가 아닌 조건(918)에서, 현재 배치는 다음 배치로 진전되고, 현재 빈은 단계(920)에서 제1 빈에 재설정되고, 새로운 현재 배치의 프리미티브는 버퍼링되며, 단계(910)에서 현재 빈의 통과 1을 위해 그래픽 파이프라인에 전송된다.
도 10은, 서브 배치가 있는 PBB 재생에 대한 예시적인 프로세스(1000)를 나타내는 흐름도이다. 일부 실시형태에서, 프로세스(1000) 또는 그것의 일부는, ZPP 동작 또는 LSO 동작, 예를 들어 본 명세서에서 설명된 바와 같이 또는 다른 동작에 사용할 수 있다. 일부 실시형태에서, 프로세스(1000)는 본 명세서에서 추가로 설명된 PBB 하드웨어와 같은 임의의 적합한 하드웨어를 사용하여 구현된다.
프레임의 프리미티브는 그래픽 프로세서에 입력되고, 프레임의 프리미티브는 복수의 배치(P)에 분할되며, 복수의 배치(P)은 각각 복수의 서브 배치(R)에 분할되고, 프레임은 단계(1002)에서 복수의 빈(Q)으로 분할된다. 일부 실시형태에서, 각 배치(P)는 다른 복수의 서브 배치로 분할될 수 있고, 각각 다른 크기(즉, 프리미티브의 수)의 서브 배치로 분할될 수 있고/있거나 일부 배치는 서브 배치로 분할되지 않을 수 있다는 점에 유의한다.
단계(1002)는 임의의 적합한 방식으로 및/또는 다른 프로세스에서 수행될 수 있고, 복수의 별도의 단계들(예를 들어, 도 9와 관련하여 도시되고 설명된 바와 같은 프로세스(900)에서와 같이) 또는 단계들의 조합에서 수행될 수 있다는 점에 유의한다.
현재 배치는 P 배치의 제1 배치로 설정되고, P 배치 중 제1 배치의 프리미티브를 버퍼링하고, 현재 서브 배치는 R 서브 배치의 제1 배치에 설정되고, 현재 빈은 단계(1004)에서 Q 빈의 제1 빈으로 설정된다. 이 표기법은 단지 편리함을 위한 것으로, 예시적인 초기화 단계(1004)의 유무에 관계없이 카운터를 사용하거나 일부 실시형태에서 적합한 방식으로 배치, 서브 배치 및 빈을 추적한다.
단계(1006)에서, 현재 빈에 대한 제1 통과를 위해 현재 서브 배치의 프리미티브는 그래픽 파이프라인으로 전송된다. 예를 들어, 일부 ZPP 프로세스에서, 제1 통과는 본 명세서에 설명된 바와 같이 Z 사전 통과이다. 제1 통과 이후, 현재 서브 배치의 프리미티브는 단계(1008)에서 현재 빈에서 제2 통과("재생")를 위해 그래픽 파이프라인으로 전송된다. 예를 들어, 일부 ZPP 프로세스에서, 제2 통과는 제1 통과에서 결정된 깊이 정보를 기반으로 관찰자에 가장 가까운 프리미티브의 색상을 렌더링한다.
현재 빈이 Q 빈의 마지막 빈이 아니라는 조건(1010)에서, 현재 빈은 단계(1012)에서 다음 빈으로 진전되고, 현재 서브 배치의 프리미티브가 단계(1006)에서 새로운 현재 빈 상의 통과 1을 위해 그래픽 파이프라인으로 전송된다. 현재 빈이 Q 빈 중 마지막 빈이라는 조건(1010)에서, 현재 서브 배치가 R 서브 배치의 마지막 배치인지 여부가 결정된다.
현재 서브 배치가 R 서브 배치의 마지막 서브 배치가 아니라는 조건(1014)에 따라, 현재 서브 배치는 단계(1016)에서 현재 배치의 R 서브 배치의 다음 서브 배치로 진전되고, 그 서브 배치의 프리미티브는 단계(1006)에서 현재 빈에서 통과 1에 대해 그래픽 파이프라인으로 전송된다. 현재 서브 배치가 R 서브 배치의 마지막 서브 배치라는 조건(1014)에 따라, 현재 배치가 P 배치의 마지막 배치인지 여부가 결정된다.
현재 빈이 Q 빈 중 마지막 빈이라는 조건(1018)에서, 프로세스(1000)는 종료된다. 그렇지 않으면, 현재 배치가 P 배치의 마지막 빈이 아니라는 조건(1018)에 따라, 현재 배치는 P 배치의 다음 배치로 진전되고, 현재 서브 배치는 다음 배치의 제1 서브 배치로 재설정되며, 현재 빈은 단계(1020)에서 Q 빈의 제1 빈으로 재설정되고, 새로운 현재 배치의 제1 서브 배치의 프리미티브는 단계(1006)에서 제1 빈에서 통과 1에 대해 그래픽 파이프라인으로 전송된다.
본원의 개시에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 특징 및 요소가 특정 조합으로 위에서 설명되어 있지만, 각각의 특징 또는 요소는 다른 특징 및 요소 없이 단독으로 또는 다른 특징 및 요소와 함께 또는 이것 없이 다양한 조합으로 사용될 수 있다.
도면에 예시되고/되거나 본 명세서에 설명된 다양한 기능 유닛(프로세서(102), 입력 드라이버(112), 입력 장치(108), 출력 드라이버(114), 출력 장치(110), 가속 처리 장치(116), 스케줄러(136), 그래픽 처리 파이프라인(134), 컴퓨팅 유닛(132), SIMD 유닛(138)이 포함되나 이에 제한되지 않음)은 범용 컴퓨터, 프로세서 또는 프로세서 코어, 또는 프로그램, 소프트웨어 또는 펌웨어로 구현되고, 비일시적 컴퓨터 판독 가능한 매체 또는 다른 매체에 저장되거나, 범용 컴퓨터, 프로세서 또는 프로세서 코어에 의해 실행될 수도 있다. 제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는, 예를 들어, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 관련된 하나 이상의 마이크로프로세서, 제어기, 마이크로컨트롤러, ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array) 회로, 임의의 다른 유형의 IC(integrated circuit) 및/또는 상태 기계를 포함한다. 이러한 프로세서는 처리된 HDL(hardware description language) 명령어의 결과 및 넷리스트(예컨대 컴퓨터 판독가능 매체에 저장될 수 있는 명령어)를 포함하는 다른 중간 데이터를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 처리의 결과는 본 개시의 특징을 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 사용되는 마스크작업일 수 있다.
본원에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어에서 구현될 수 있다. 비일시적 컴퓨터 판독가능 저장 매체의 예는 ROM(read only memory), RAM(random access memory), 레지스터, 캐시 메모리, 반도체 메모리 장치, 내부 하드 디스크 및 탈착식 디스크와 같은 자기 매체, 자기 광학 매체, 및 CD-ROM 디스크 및 DVD(digital versatile disk)와 같은 광학 매체를 포함한다.
Figure pct00001

Claims (20)

  1. 프레임의 복수의 프리미티브를 렌더링하도록 구성된 프로세서로서, 상기 프로세서는,
    상기 프레임의 복수의 프리미티브를 렌더링하도록 구성된 회로를 포함하고, 상기 복수의 프리미티브는 프리미티브의 복수의 배치에 분할되며, 상기 프레임은 복수의 빈에 분할되고;
    상기 복수의 배치 중 적어도 하나의 배치에 대해, 상기 렌더링은,
    상기 복수의 빈 각각에 대해, 제1 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 것, 및
    상기 복수의 빈 각각에 대해, 제2 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 것을 포함하는, 프로세서.
  2. 제1항에 있어서,
    상기 제1 서브 배치 및 상기 제2 서브 배치의 상기 프리미티브를 렌더링하기 전에 상기 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하도록 구성된 회로를 추가로 포함하는, 프로세서.
  3. 제2항에 있어서,
    상기 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐싱하기 전에 상기 복수의 배치 중 다른 하나의 배치의 프리미티브를 축출하도록 구성된 회로를 추가로 포함하는, 프로세서.
  4. 제1항에 있어서,
    상기 제1 서브 배치의 상기 프리미티브를 렌더링하는 것은 상기 복수의 빈 중 하나에 관한 제1 통과로 상기 프리미티브를 렌더링 파이프라인으로 전송하는 것, 및 다음 빈으로 이동하기 전에 상기 복수의 빈 중 동일한 하나에 관한 제2 통과로 상기 제1 서브 배치의 프리미티브를 상기 렌더링 파이프라인으로 전송하는 것으로 구성되는, 프로세서.
  5. 제4항에 있어서,
    상기 제1 통과는 래스터화로 구성되고, 상기 제2 통과는 렌더링으로 구성되는, 프로세서.
  6. 제4항에 있어서,
    상기 제1 통과는 Z 테스트로 구성되고, 상기 제2 통과는 렌더링으로 구성되는, 프로세서.
  7. 제6항에 있어서,
    상기 제2 통과는 상기 Z 테스트 결과를 기반으로 한 렌더링으로 구성되는, 프로세서.
  8. 제1항에 있어서,
    상기 제1 서브 배치의 상기 프리미티브를 렌더링하기 전에 상기 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐쉬하도록 구성된 회로를 추가로 포함하는, 프로세서.
  9. 제1항에 있어서,
    상기 제1 서브 배치는 객체의 프리미티브를 구성하고, 상기 제2 서브 배치는 상기 제1 서브 배치에 없는 다른 객체의 프리미티브를 구성하는, 프로세서.
  10. 제1항에 있어서,
    상기 제1 서브 배치는 상기 제2 서브 배치와는 다른 Z 함수를 가진 프리미티브로 구성되는, 프로세서.
  11. 프레임의 복수의 프리미티브를 렌더링하는 방법으로서, 상기 방법은,
    프레임의 복수의 프리미티브를 렌더링하는 단계를 포함하고, 상기 복수의 프리미티브를 프리미티브의 복수의 배치에 분할하고, 상기 프레임은 복수의 빈에 분할되며;
    상기 복수의 배치 중 적어도 하나의 배치에 대해, 상기 렌더링하는 단계는,
    상기 복수의 빈 각각에 대해, 제1 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계, 및
    상기 복수의 빈 각각에 대해, 제2 서브 배치 래스터링하는 프리미티브를 그 빈에 렌더링하는 단계를 포함하는, 방법.
  12. 제11항에 있어서,
    상기 제1 서브 배치 및 상기 제2 서브 배치의 프리미티브를 렌더링하기 전에, 상기 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐싱하는 단계를 추가로 포함하는, 방법.
  13. 제12항에 있어서,
    상기 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐싱하기 전에 상기 복수의 배치 중 다른 하나의 배치의 프리미티브를 축출하는 단계를 추가로 포함하는, 방법.
  14. 제11항에 있어서,
    상기 제1 서브 배치의 프리미티브를 렌더링하는 단계는 상기 복수의 빈 중 하나에 관한 제1 통과로 프리미티브를 렌더링 파이프라인으로 전송하는 단계, 및 다음 빈으로 이동하기 전에 상기 복수의 빈 중 동일한 하나에 관한 제2 통과로 상기 제1 서브 배치의 프리미티브를 상기 렌더링 파이프라인으로 전송하는 단계를 포함하는, 방법.
  15. 제14항에 있어서,
    상기 제1 통과는 래스터화로 구성되고, 상기 제2 통과는 렌더링으로 구성되는, 방법.
  16. 제14항에 있어서,
    상기 제1 통과는 Z 테스트로 구성되고, 상기 제2 통과는 렌더링으로 구성되는, 방법.
  17. 제16항에 있어서,
    상기 제2 통과는 상기 Z 테스트 결과를 기반으로 한 렌더링으로 구성되는, 방법.
  18. 제11항에 있어서,
    상기 제1 서브 배치의 프리미티브를 렌더링하기 전에 상기 복수의 배치 중 적어도 하나의 배치의 프리미티브를 캐싱하는 단계를 추가로 포함하는, 방법.
  19. 제11항에 있어서,
    상기 제1 서브 배치는 객체의 프리미티브를 포함하고, 상기 제2 서브 배치는 상기 제1 서브 배치에 없는 다른 객체의 프리미티브를 포함하는, 방법.
  20. 제11항에 있어서,
    상기 제1 서브 배치는 상기 제2 서브 배치와 다른 Z 함수를 가진 프리미티브로 구성되는, 방법.
KR1020237001241A 2020-06-22 2021-05-24 비닝 하드웨어에서 세분화 재생 제어 KR20230028373A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063042399P 2020-06-22 2020-06-22
US63/042,399 2020-06-22
US17/033,023 2020-09-25
US17/033,023 US20210398349A1 (en) 2020-06-22 2020-09-25 Fine grained replay control in binning hardware
PCT/US2021/033943 WO2021262370A1 (en) 2020-06-22 2021-05-24 Fine grained replay control in binning hardware

Publications (1)

Publication Number Publication Date
KR20230028373A true KR20230028373A (ko) 2023-02-28

Family

ID=79023782

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237001241A KR20230028373A (ko) 2020-06-22 2021-05-24 비닝 하드웨어에서 세분화 재생 제어

Country Status (6)

Country Link
US (1) US20210398349A1 (ko)
EP (1) EP4168976A4 (ko)
JP (1) JP2023530309A (ko)
KR (1) KR20230028373A (ko)
CN (1) CN115803770A (ko)
WO (1) WO2021262370A1 (ko)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0524804D0 (en) * 2005-12-05 2006-01-11 Falanx Microsystems As Method of and apparatus for processing graphics
US8587581B2 (en) * 2009-10-15 2013-11-19 Nvidia Corporation Order-preserving distributed rasterizer
US10032243B2 (en) * 2012-10-26 2018-07-24 Nvidia Corporation Distributed tiled caching
US10169906B2 (en) * 2013-03-29 2019-01-01 Advanced Micro Devices, Inc. Hybrid render with deferred primitive batch binning
US9311743B2 (en) * 2013-10-23 2016-04-12 Qualcomm Incorporated Selectively merging partially-covered tiles to perform hierarchical z-culling
US20160322031A1 (en) * 2015-04-28 2016-11-03 Mediatek Singapore Pte. Ltd. Cost-Effective In-Bin Primitive Pre-Ordering In GPU
US10096147B2 (en) * 2016-03-10 2018-10-09 Qualcomm Incorporated Visibility information modification
US10380789B2 (en) * 2016-09-16 2019-08-13 Intel Corporation Method and apparatus for efficient depth prepass
KR102637736B1 (ko) * 2017-01-04 2024-02-19 삼성전자주식회사 그래픽스 처리 방법 및 시스템

Also Published As

Publication number Publication date
CN115803770A (zh) 2023-03-14
JP2023530309A (ja) 2023-07-14
WO2021262370A1 (en) 2021-12-30
EP4168976A1 (en) 2023-04-26
US20210398349A1 (en) 2021-12-23
EP4168976A4 (en) 2024-07-31

Similar Documents

Publication Publication Date Title
EP3087553B1 (en) Optimized multi-pass rendering on tiled base architectures
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
KR20210095914A (ko) 가변 레이트 셰이딩과 슈퍼 샘플 셰이딩의 통합
US20240257435A1 (en) Hybrid binning
JP2020506474A (ja) アウトオブオーダのピクセルシェーダのエクスポート
US11620724B2 (en) Cache replacement policy for ray tracing
KR20230010672A (ko) 데이터 압축의 방법 및 장치
US11741653B2 (en) Overlapping visibility and render passes for same frame
KR20230028373A (ko) 비닝 하드웨어에서 세분화 재생 제어
JP2023539808A (ja) 深度カリングを呼び出すためのシェーダコア命令
KR20230017220A (ko) 기계 학습 가속도계를 위한 적층 다이
US20130328884A1 (en) Direct opencl graphics rendering
US11900499B2 (en) Iterative indirect command buffers
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
US20240087078A1 (en) Two-level primitive batch binning with hardware state compression
US20220319091A1 (en) Post-depth visibility collection with two level binning
US20240104685A1 (en) Device and method of implementing subpass interleaving of tiled image rendering
US20230298261A1 (en) Distributed visibility stream generation for coarse grain binning
US20240169641A1 (en) Vertex index routing through culling shader for two level primitive batch binning
KR20220157401A (ko) 부분적으로 상주하는 텍스처에 대한 샘플링
KR20230028458A (ko) 다중 샘플 안티-앨리어싱을 위한 로드 명령어

Legal Events

Date Code Title Description
A201 Request for examination