KR20160063079A - 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법 - Google Patents

그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법 Download PDF

Info

Publication number
KR20160063079A
KR20160063079A KR1020140166628A KR20140166628A KR20160063079A KR 20160063079 A KR20160063079 A KR 20160063079A KR 1020140166628 A KR1020140166628 A KR 1020140166628A KR 20140166628 A KR20140166628 A KR 20140166628A KR 20160063079 A KR20160063079 A KR 20160063079A
Authority
KR
South Korea
Prior art keywords
tile
pipeline
rendering
binning
tessellation
Prior art date
Application number
KR1020140166628A
Other languages
English (en)
Other versions
KR102327144B1 (ko
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 삼성전자주식회사
Priority to KR1020140166628A priority Critical patent/KR102327144B1/ko
Priority to US14/791,626 priority patent/US9870639B2/en
Priority to EP15176624.3A priority patent/EP3026635B1/en
Priority to CN201510567739.5A priority patent/CN105654553B/zh
Priority to JP2015222962A priority patent/JP6709038B2/ja
Publication of KR20160063079A publication Critical patent/KR20160063079A/ko
Application granted granted Critical
Publication of KR102327144B1 publication Critical patent/KR102327144B1/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
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 헐 쉐이더로부터 출력된 출력 패치가 포함된 타일의 개수에 기초하여 출력 패치에 대한 테셀레이팅을 스킵할 것인지를 판단하고 판단 결과에 따라 출력 패치 또는 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는, 비닝 파이프라인을 수행하고, 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행한다.

Description

그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법{GRAPHIC PROCESSING APPARATUS AND METHOD FOR PERFORMING TILE-BASED GRAPHICS PIPELINE THEREOF}
그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법에 관한다.
GPU(Graphic Processing Unit)와 같은 그래픽 프로세싱 장치는 컴퓨팅 장치에서 그래픽스 데이터를 렌더링하는 역할을 담당한다. 일반적으로, 그래픽 프로세싱 장치는 2차원 또는 3차원 객체들에 해당되는 그래픽스 데이터를 2차원 픽셀 표현으로 변환하여 디스플레이를 위한 프레임을 생성한다. 컴퓨팅 장치의 종류로는, PC (personal computers), 노트북, 비디오 게임용 콘솔뿐만 아니라, 스마트폰, 태블릿 디바이스, 웨어러블 디바이스와 같은 임베디드(embedded) 디바이스들도 포함될 수 있다. 스마트폰, 태블릿 디바이스, 웨어러블 디바이스 등과 같은 임베디드 디바이스들은 비교적 낮은 연산 처리 능력과 많은 전력 소모의 문제들로 인하여, 충분한 메모리 공간과 프로세싱 파워를 확보하고 있는 PC, 노트북, 비디오 게임용 콘솔 등과 같은 워크스테이션들과 동일한 그래픽 프로세싱 성능을 갖추기 어렵다. 하지만, 최근 전세계적으로 스마트폰 또는 태블릿 디바이스와 같은 휴대용 디바이스들이 널리 보급됨에 따라 사용자들은 스마트폰 또는 태블릿 디바이스를 통해 게임을 플레이하거나 또는 영화, 드라마 등의 컨텐츠를 감상하는 빈도가 급격히 증가하였다. 이에 따라, 그래픽 프로세싱 장치의 제조사들은 사용자들의 수요에 발맞추어 임베디드 디바이스에서도 그래픽 프로세싱 장치의 성능 및 처리 효율을 높이기 위한 많은 연구들을 진행하고 있다.
그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법을 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 헐 쉐이더로부터 출력된 출력 패치가 포함된 타일의 개수에 기초하여 상기 출력 패치에 대한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 출력 패치 또는 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는, 비닝 파이프라인을 수행하는 단계; 및 상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 단계를 포함한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 출력 패치가 포함된 상기 타일의 개수가 한 개인 경우, 테셀레이터에 의해 수행될 상기 출력 패치에 대한 상기 테셀레이팅을 스킵한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하는 단계; 상기 출력 패치에 대한 상기 타일 리스트를 비닝하는 단계; 및 상기 출력 패치가 한 타일에 포함되는지 여부를 판단하는 단계를 포함하고, 상기 렌더링 파이프라인을 수행하는 단계는 상기 출력 패치가 상기 한 타일에 포함된 것으로 판단된 경우, 상기 출력 패치에 대해 비닝된 상기 타일 리스트를 이용하여 래스터라이징을 수행한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 출력 패치가 둘 이상의 타일들에 포함된 것으로 판단된 경우, 상기 출력 패치에 대한 테셀레이터의 상기 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 상기 테셀레이팅된 프리미티브들을 생성하는 단계를 포함하고, 상기 렌더링 파이프라인을 수행하는 단계는 상기 테셀레이팅된 프리미티브들에 대해 비닝된 상기 타일 리스트를 이용하여 상기 래스터라이징을 수행한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 출력 패치가 한 타일에 포함된 경우 상기 출력 패치에 대한 가시성 스트림을 저장하고, 상기 출력 패치가 둘 이상의 타일들에 포함된 경우 상기 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 저장하는 단계를 포함한다.
또한, 상기 렌더링 파이프라인을 수행하는 단계는 상기 비닝 파이프라인에서 상기 테셀레이팅이 스킵된 경우, 상기 비닝 파이프라인에서 상기 출력 패치에 대해 저장된 빈 스트림을 이용하여, 테셀레이션 파이프라인을 수행하는 단계를 포함한다.
다른 측면에 따르면, 그래픽스 파이프라인을 수행하는 컴퓨팅 장치는, 헐 쉐이더로부터 출력된 출력 패치가 포함된 타일의 개수에 기초하여 상기 출력 패치에 대한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 출력 패치 또는 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는 비닝 파이프라인, 및 상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및 상기 비닝 파이프라인에서 비닝된 상기 타일 리스트를 저장하고 상기 저장된 타일 리스트를 상기 렌더링 파이프라인에 제공하는 메모리를 포함한다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인에서 상기 출력 패치가 포함된 상기 타일의 개수가 한 개인 것으로 판단된 경우, 상기 비닝 파이프라인에서 테셀레이터에 의해 수행될 상기 출력 패치에 대한 상기 테셀레이팅을 스킵한다.
또한, 상기 그래픽 프로세싱 장치는 입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하고, 상기 출력 패치에 대하여 상기 타일 리스트의 상기 비닝을 수행하고, 상기 출력 패치가 한 타일에 포함되는지 여부를 판단하는, 상기 비닝 파이프라인을 수행하고, 상기 출력 패치가 상기 한 타일에 포함된 것으로 판단된 경우, 상기 출력 패치에 대해 비닝된 상기 타일 리스트를 이용하여 래스터라이징을 수행하는, 상기 렌더링 파이프라인을 수행한다.
또한, 상기 그래픽 프로세싱 장치는 상기 출력 패치가 둘 이상의 타일들에 포함된 것으로 판단된 경우 상기 출력 패치에 대한 테셀레이터의 상기 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 상기 테셀레이팅된 프리미티브들을 생성하는, 상기 비닝 파이프라인을 수행하고, 상기 테셀레이팅된 프리미티브들에 대해 비닝된 상기 타일 리스트를 이용하여 상기 래스터라이징을 수행하는, 상기 렌더링 파이프라인을 수행한다.
또한, 상기 메모리는 상기 비닝 파이프라인이 수행되는 동안, 상기 출력 패치가 한 타일에 포함된 경우 상기 출력 패치에 대한 가시성 스트림을 저장하고, 상기 출력 패치가 둘 이상의 타일들에 포함된 경우 상기 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 저장하는 단계를 포함한다.
또 다른 측면에 따르면, 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 포함된 타일의 개수에 기초하여 상기 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들 또는 상기 헐 쉐이더로부터 출력된 출력 패치에 대한 타일 리스트를 비닝하는, 비닝 파이프라인을 수행하는 단계; 및 상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 단계를 포함한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 포함된 상기 타일의 개수가 한 개인 경우, 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵한다.
또한, 상기 제 2 테셀레이션 팩터는 상기 제 1 테셀레이션 팩터 보다 낮을 수 있다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 헐 쉐이더에서 상기 출력 패치를 생성하고 상기 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하는 단계; 상기 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 테셀레이터의 상기 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써, 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하는 단계; 및 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 한 타일에 포함되는지 여부를 판단하는 단계를 포함하고, 상기 렌더링 파이프라인을 수행하는 단계는 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 한 타일에 포함된 경우, 상기 출력 패치에 대해 비닝된 상기 타일 리스트를 이용하여 래스터라이징을 수행한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 둘 이상의 타일들에 포함된 것으로 판단된 경우, 상기 제 1 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 상기 테셀레이터의 상기 테셀레이팅 및 상기 도메인 쉐이더의 상기 도메인 쉐이딩을 수행함으로써, 상기 제 1 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하는 단계를 포함하고, 상기 렌더링 파이프라인을 수행하는 단계는 상기 제 1 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대해 비닝된 상기 타일 리스트를 이용하여 상기 래스터라이징을 수행한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 한 타일에 포함된 경우 상기 출력 패치에 대한 가시성 스트림을 저장하고, 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 둘 이상의 타일들에 포함된 경우 상기 제 1 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 저장하는 단계를 포함한다.
또 다른 측면에 따르면, 그래픽스 파이프라인을 수행하는 컴퓨팅 장치는, 헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 포함된 타일의 개수에 기초하여 상기 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들 또는 상기 헐 쉐이더로부터 출력된 출력 패치에 대한 타일 리스트를 비닝하는 비닝 파이프라인, 및 상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및 상기 비닝 파이프라인에서 비닝된 상기 타일 리스트를 저장하고 상기 저장된 타일 리스트를 상기 렌더링 파이프라인에 제공하는 메모리를 포함한다.
또한, 상기 그래픽 프로세싱 장치는 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 포함된 상기 타일의 개수가 한 개인 경우, 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵한다.
또한, 상기 제 2 테셀레이션 팩터는 상기 제 1 테셀레이션 팩터 보다 낮을 수 있다.
또 다른 측면에 따르면, 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 헐 쉐이더로부터 출력된 출력 패치를 비닝함으로써 상기 출력 패치가 복수의 타일들에 포함되는지를 판단하고 상기 출력 패치가 상기 복수의 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는, 비닝 파이프라인을 수행하는 단계; 및 상기 스케쥴링된 렌더링 순서에 기초하여, 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 단계를 포함하고, 첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인은 상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 생성하는 비닝을 포함한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 테셀레이터에 의해 수행될 상기 출력 패치에 대한 테셀레이팅을 스킵한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하는 단계; 상기 출력 패치에 대한 타일 리스트를 비닝하는 단계; 상기 출력 패치가 상기 복수의 타일들에 포함되는지 여부를 판단하는 단계; 및 상기 출력 패치가 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정하는 단계를 포함한다.
또한. 상기 렌더링 파이프라인을 수행하는 단계는 상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하는 단계; 및 상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하는 단계를 포함하고, 상기 제 2 렌더링 파이프라인을 수행하는 단계는 상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행한다.
또 다른 측면에 따르면, 그래픽스 파이프라인을 수행하는 컴퓨팅 장치는, 헐 쉐이더로부터 출력된 출력 패치를 비닝함으로써 상기 출력 패치가 복수의 타일들에 포함되는지를 판단하고 상기 출력 패치가 상기 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는 비닝 파이프라인, 및 상기 스케쥴링된 렌더링 순서에 기초하여 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및 첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인이 수행되는 동안 생성된, 상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 저장하는 메모리를 포함한다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인에서, 테셀레이터에 의해 수행될 상기 출력 패치에 대한 테셀레이팅을 스킵한다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인이 수행되는 동안, 입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하고 상기 출력 패치에 대한 타일 리스트를 비닝하고 상기 출력 패치가 상기 복수의 타일들에 포함되는지 여부를 판단하고 상기 출력 패치가 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정한다.
또한, 상기 그래픽 프로세싱 장치는 상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하고, 상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하고, 상기 제 2 렌더링 파이프라인은 상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행한다.
또 다른 측면에 따르면, 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들을 비닝함으로써 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는지를 판단하고 상기 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는, 비닝 파이프라인을 수행하는 단계; 및 상기 스케쥴링된 렌더링 순서에 기초하여, 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 단계를 포함하고, 첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인은 상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 생성하는 비닝을 포함한다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵한다.
또한, 상기 제 2 테셀레이션 팩터는 상기 제 1 테셀레이션 팩터 보다 낮을 수 있다.
또한, 상기 비닝 파이프라인을 수행하는 단계는 상기 헐 쉐이더에서 출력 패치를 생성하고 상기 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하는 단계; 상기 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 테셀레이터의 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써, 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하는 단계; 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는 단계; 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는지 여부를 판단하는 단계; 및 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정하는 단계를 포함한다.
또한, 상기 렌더링 파이프라인을 수행하는 단계는 상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하는 단계; 및 상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하는 단계를 포함하고, 상기 제 2 렌더링 파이프라인을 수행하는 단계는 상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행한다.
또 다른 측면에 따르면, 그래픽스 파이프라인을 수행하는 컴퓨팅 장치는, 헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들을 비닝함으로써 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는지를 판단하고 상기 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는 비닝 파이프라인, 및 상기 스케쥴링된 렌더링 순서에 기초하여 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및 첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인이 수행되는 동안 생성된, 상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 저장하는 메모리를 포함한다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인에서, 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵한다.
또한, 상기 제 2 테셀레이션 팩터는 상기 제 1 테셀레이션 팩터 보다 낮을 수 있다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인이 수행되는 동안, 상기 헐 쉐이더에서 출력 패치를 생성하고 상기 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하고 상기 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 테셀레이터의 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하고 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하고 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는지 여부를 판단하고 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정한다.
또한, 상기 그래픽 프로세싱 장치는 상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하고, 상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하고, 상기 제 2 렌더링 파이프라인은 상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행한다.
또 다른 측면에 따르면, 상기 방법들 중 적어도 하나를 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
상기된 바에 따르면, GPU에서 처리되는 그래픽스 파이프라인의 일부인 테셀레이션 파이프라인에서, 테셀레이터에 의한 테셀레이팅을 스킵하거나 또는 낮은 테셀레이션 팩터를 이용하여 테셀레이팅을 수행함으로써, GPU의 연산량을 줄이고 처리 속도를 향상시킬 수 있는 효과가 있다.
상기된 바에 따르면, GPU에서 처리되는 그래픽스 파이프라인의 일부인 테셀레이션 파이프라인에서, 테셀레이터에 의한 테셀레이팅을 스킵하거나 또는 낮은 테셀레이션 팩터를 이용하여 테셀레이팅을 수행함으로써, GPU의 연산량을 줄이고 처리 속도를 향상시킬 수 있는 효과가 있다.
본 발명에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 “...부”, “모듈” 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
본 명세서에서 사용되는 “구성된다” 또는 “포함한다” 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 도는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
또한, 본 명세서에서 사용되는 “제 1” 또는 “제 2” 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용할 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다.
이하 첨부된 도면을 참조하면서 오로지 예시를 위한 실시예에 의해 발명을 상세히 설명하기로 한다. 하기 실시예는 발명을 구체화하기 위한 것일 뿐 발명의 권리 범위를 제한하거나 한정하는 것이 아님은 물론이다. 상세한 설명 및 실시예로부터 발명이 속하는 기술분야의 전문가가 용이하게 유추할 수 있는 것은 발명의 권리범위에 속하는 것으로 해석된다.
도 1은 일 실시예에 따른 컴퓨팅 장치를 설명하기 위한 도면이다.
도 1을 참고하면, 컴퓨팅 장치(1)는 GPU (Graphic Processing Unit)(10), CPU (Central Processing Unit)(20), 메모리(30) 및 Bus(40)를 포함한다. 도 1에 도시된 컴퓨팅 장치(1)에는 실시예와 관련된 구성요소들만이 도시되어 있다. 따라서, 도 1에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
컴퓨팅 장치(1)는 데스크탑 컴퓨터, 노트북 컴퓨터, 스마트폰, PDA (personal digital assistants), 휴대형 미디어 플레이어, 비디오 게임용 콘솔, 텔레비젼 셋탑 박스, 태블릿 디바이스, 이북 리더, 웨어러블 디바이스 등을 예로 들 수 있지만, 이에 제한되지 않는다. 즉, 컴퓨팅 장치(1)는 컨텐츠의 디스플레이를 위한 그래픽스 프로세싱 기능을 갖는 장치로서, 컴퓨팅 장치(1)의 범주에는 다양한 장치들이 포함될 수 있다.
CPU(20)는 컴퓨팅 장치(1)의 전반적인 동작들 및 기능들을 제어하는 하드웨어이다. 예를 들어, CPU(20)는 운영체제(Operating System, OS)를 구동하고, GPU(10)를 위한 그래픽스 API(Application Programming Interface)를 호출하고, GPU(10)의 드라이버를 실행시킬 수 있다. 또한, CPU(20)는 메모리(30)에 저장된 다양한 애플리케이션들, 예를 들어 웹 브라우징 애플리케이션, 게임 애플리케이션, 비디오 애플리케이션 등을 실행할 수 있다.
GPU(10)는 그래픽스 파이프라인(graphics pipeline)을 수행하는 그래픽 전용 프로세서로서, 3차원 이미지 상의 3차원 객체들을 디스플레이용의 2차원 이미지로 렌더링하기 위해 3차원 그래픽스 파이프라인을 실행하도록 구현된 하드웨어일 수 있다. 예를 들면, GPU(10)는 쉐이딩, 블렌딩, 일루미네이팅과 같은 다양한 기능들 및 디스플레이될 픽셀들에 대한 픽셀 값들을 생성하기 위한 다양한 기능들을 수행할 수도 있다.
GPU(10)는 타일 기반(tile-based) 그래픽스 파이프라인 또는 타일 기반 렌더링(tile-based rendering, TBR)을 수행할 수 있다. 타일 기반이라는 용어는, 동영상의 각 프레임을 복수의 타일들로 구분한(divide 또는 partitioning) 후, 타일 단위로 렌더링을 수행하는 것을 의미한다. 타일 기반의 아키텍쳐는, 픽셀 단위로 프레임을 처리할 때보다 연산량이 적어질 수 있기 때문에, 스마트폰, 태블릿 디바이스와 같이 비교적 처리 성능이 낮은 모바일 디바이스(또는 임베디드 디바이스)에서 사용하는 그래픽스 렌더링 방법일 수 있다.
도 1을 참고하면, GPU(10)는 비닝 파이프라인(binning pipeline)(101) 및 렌더링 파이프라인(rendering pipeline)(102)을 포함하는 그래픽스 파이프라인을 수행할 수 있다. 비닝 파이프라인(101)은 2차원 또는 3차원 객체들을 구성하는(make up) 버텍스들(vertices), 프리미티브들(primitives), 또는 패치들(patches)이 어느 타일에 포함되는지 여부를 나타내는 타일 리스트를 생성하는 프로세스이다. 이와 같은 이유로 인해, 비닝 파이프라인(101)은 타일링 파이프라인(tiling pipeline), 비닝 페이즈(binning phase)의 용어와 같이 다른 용어들로도 대체될 수 있다. 렌더링 파이프라인(102)은 비닝 파이프라인(101)에서 생성된 타일 리스트에 기초하여, 타일 단위로(per tile), 객체를 렌더링하는 프로세스이다. 렌더링 파이프라인(102)이 완료되면, 2차원 디스플레이 화면 상에 표시될 2차원 또는 3차원 객체들의 픽셀 표현들이 결정될 수 있다. 렌더링 파이프라인(102)은 렌더링 페이즈(rendering phase)의 용어와 같이 다른 용어들로도 대체될 수 있다.
비닝 파이프라인(101) 및 렌더링 파이프라인(102) 각각은 테셀레이션 파이프라인(tessellation pipeline)을 포함할 수 있다. 즉, GPU(10)는 디퍼드 테셀레이션(deferred tessellation)을 수행할 수 있다. MicroSoft 사의 DirectX11 (DX11) API, OpenGL 4.0 API 등을 포함한 일부의 그래픽스 파이프라인들은 그래픽스 프리미티브들(또는 그래픽스 패치들)의 테셀레이션을 위한 추가적인 프로세싱 스테이지들을 포함한다. 테셀레이션은, 그래픽스 패치들을 더 작은 그래픽스 프리미티브들로 분할하여 더 미세한 디테일을 갖는 이미지의 디스플레이를 가능하게 하는 프로세스이다. 컴퓨팅 장치(1)의 GPU(10)에서 구동되는 비닝 파이프라인(101) 및 렌더링 파이프라인(102)을 포함하는 그래픽스 파이프라인은 이와 같은 테셀레이션을 지원할 수 있다. 한편, 본 명세서에서 이하에서 설명될 실시예들은 GPU(10)에 의해서 구동될 수 있다.
메모리(30)는 컴퓨팅 장치(1) 내에서 처리되는 각종 데이터들을 저장하는 하드웨어로서, 예를 들어, 메모리(30)는 GPU(10) 및 CPU(20)에서 처리된 데이터들 및 처리될 데이터들을 저장할 수 있다. 또한, 메모리(30)는 GPU(10) 및 CPU(20)에 의해 구동될 애플리케이션들, 드라이버들 등을 저장할 수 있다. 메모리(30)는 DRAM(dynamic random access memory), SRAM(static random access memory) 등과 같은 RAM(random access memory), ROM(read-only memory), EEPROM(electrically erasable programmable read-only memory), CD-ROM, 블루레이 또는 다른 광학 디스크 스토리지, HDD(hard disk drive), SSD(solid state drive), 또는 플래시 메모리를 포함하며, 나아가서, 컴퓨팅 장치(1)에 액세스될 수 있는 외부의 다른 스토리지 디바이스를 포함할 수 있다.
Bus(40)는 컴퓨팅 장치(1) 내의 하드웨어들 간에 데이터를 송수신할 수 있도록 하드웨어들을 연결시켜 주는 하드웨어로서, Bus(40)는 예를 들어 PCI bus, PCI Express bus 등과 같은 다양한 종류들을 포함할 수 있다.
한편, 본 명세서에서 언급되는 비닝 파이프라인(101)은, 이하의 실시예들에서 설명될 비닝 파이프라인(101-1, 101-2, 101-3 또는 101-4)을 포함하는 것으로서, 비닝 파이프라인(101-1, 101-2, 101-3 또는 101-4) 중에 어느 하나에 해당될 수 있다. 또한, 본 명세서에서 언급되는 렌더링 파이프라인(102)은, 이하의 실시예들에서 설명될 렌더링 파이프라인(102-1, 102-2, 102-3 또는 102-4)을 포함하는 것으로서, 렌더링 파이프라인(102-1, 102-2, 102-3 또는 102-4) 중에 어느 하나에 해당될 수 있다.
도 2는 타일 기반 렌더링(TBR)을 설명하기 위한 도면이다.
도 2를 참고하면, 자동차 객체(220)는 어느 동영상에서의 어느 한 프레임에 해당되는 것으로 가정한다. 도 1의 GPU(10)는 3차원 자동차 객체(220)가 포함된 한 프레임을 NxM (N, M은 자연수) 타일들(210)로 분할한다. 여기서, 3차원 자동차 객체(220)가 포함된 프레임을 타일들(210)로 분할하고, 어떠한 타일들(210)에 3차원 자동차 객체(220)가 존재하는지 판단하는 것은 도 1의 비닝 페이즈(101)에 의해 수행될 수 있다. 그 이후에, 도 1의 GPU(10)는 타일 단위로(per tile) 타일들(210)에 포함된 3차원 자동차 객체(220)를 렌더링하여 픽셀 표현들로 변환한다. 여기서, 타일 단위로 3차원 자동차 객체(220)를 렌더링하여 픽셀 표현들로 변환하는 것은 도 1의 렌더링 페이즈(102)에 의해 수행될 수 있다. 이와 같이, 한 프레임에 포함된 3차원 자동차 객체(220)를, 픽셀 단위로 렌더링하는 것이 아닌, 타일들(210)을 이용하여 렌더링하는 것을 타일 기반 렌더링(TBR)이라 한다.
도 3 내지 도 5는 테셀레이션 파이프라인을 설명하기 위한 도면들이다. 이하에서는 도 3 내지 도 5를 연계하여 설명하도록 한다. 앞서 설명된 바와 같이, 도 3 내지 도 5에서 설명될 테셀레이션 파이프라인(300)은 도 1의 비닝 파이프라인(101) 및 렌더링 파이프라인(102) 각각에 그대로 적용되어 포함되거나, 또는 약간 변형되어 적용될 수 있다.
도 3을 참고하면, 테셀레이션 파이프라인(300)은 헐 쉐이더(hull shader)(121), 테셀레이터(tessellator)(123) 및 도메인 쉐이더(domain shader)(125)에 의해 수행될 수 있다. 즉, 본 명세서에서 설명되는 테셀레이션 파이프라인(300)의 용어는 헐 쉐이더 (121)에 의한 헐 쉐이딩, 테셀레이터(123)에 의한 테셀레이팅 및 도메인 쉐이더(125)에 의한 도메인 쉐이딩의 프로세스들(또는 스테이지들) 중 하나 이상의 스테이지들을 포함하는 것으로 정의될 수 있다.
헐 쉐이더(121)는 낮은 차수(low order)의 표면을 표현하는 입력 컨트롤 포인트들(input control points)을, 패치를 구성하는(make up) 출력 컨트롤 포인트들(output control points)로 변환한다. 예를 들어, 헐 쉐이더(121)는 입력 컨트롤 포인트들을 변환하여, 도 4에 도시된 컨트롤 포인트들(P00, P01, P02, P03, P10, P11, P12, P13, P20, P21, P22, P23, P30, P31, P32 및 P33)로 구성된 메쉬(mesh)의 패치(410)를 생성할 수 있다. 여기서, 패치는 삼각형, 사각형, 등치선(isoline) 등의 폴리곤 형태를 가질 수도 있다.
헐 쉐이더(121)는 패치를 구성하는 출력 컨트롤 포인트들을 생성함과 동시에, 테셀레이션 팩터(tessellation factor, TF)(또는 테셀레이션 레벨(tessellation level, TL)를 결정할 수 있다. 테셀레이션 팩터(TF) 또는 테셀레이션 레벨(TL)은 패치를 얼마나 분할(partition)할 것인지 또는 패치를 어떻게 분할할 것인지를 나타내는 인덱스이다. 도 5에 도시된 테이블(500)은 테셀레이션 팩터(TF)와 분할될 삼각형들의 개수 간의 관계를 정의한 테이블이다. 테이블(500)에 따르면, 테셀레이션 팩터(TF)가 1인 경우, 삼각형의 개수가 1이므로, 패치에 대한 테셀레이션은 수행되지 않을 수 있다. 하지만, 테셀레이션 팩터(TF)가 증가할수록 삼각형들의 개수는 기하 급수적으로 증가한다. 다시 말하면, 테셀레이션 팩터(TF)가 증가할수록 분할될 삼각형들의 개수가 많아진다는 것은, GPU(10)에서 어느 패치에 대하여 처리되어야 할 연산량이 증가한다는 것을 의미할 수 있다. 다만, 테셀레이션 팩터(TF)가 증가하면 할수록, 객체의 패치에 대한 보다 부드러운 표현은 가능할 수 있다. 한편, 도 5의 테이블(500)에서는 분할될 폴리곤이 삼각형인 경우를 예로 들었으나, 이에 제한되지 않고, 패치는 사각형, 등치선 등의 다른 폴리곤들로도 분할될 수도 있다.
헐 쉐이더(121)는 출력 패치의 출력 컨트롤 포인트들 및 테셀레이션 팩터(TF)에 대한 정보를 테셀레이터(123) 및 도메인 쉐이더(125)로 전달한다.
테셀레이터(123)는 헐 쉐이더(121)로부터 수신된 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계(Barycentric coordinates)에서의 uvw 좌표들 및 가중치들을 계산한다.
도메인 쉐이더(125)는 헐 쉐이더(121)로부터 수신된 출력 패치의 출력 컨트롤 포인트들 및 테셀레이션 팩터에(TF) 대한 정보와, 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여, 테셀레이팅된 버텍스들(tessellated vertices)을 생성한다. 도 4를 참고하면, 테셀레이팅된 버텍스들의 위치들은 표면(420)을 형성할(make up) 수 있다. 즉, 패치들(410)은 테셀레이션 파이프라인이 수행됨으로써 보다 부드러워진 표면(420) 상의 버텍스들(또는 프리미티브들)로 변환될 수 있다.
도 6은 일 실시예에 따른 도 1의 GPU의 상세 하드웨어 구조를 도시한 블록도이다.
도 6을 참고하면, GPU(10)는 그래픽스 파이프라인(100)을 수행하는 입력 어셈블러(input assembler)(110), 버텍스 쉐이더(vertex shader)(115), 헐 쉐이더(121), 테셀레이터(123), 도메인 쉐이더(125), 지오메트리 쉐이더(geometry shader)(130), 비너(binner)(135), 래스터라이저(rasterizer)(140), 픽셀 쉐이더(pixel shader)(150) 및 출력 머저(output merger)(160)를 포함할 수 있다. 또한, GPU(10)는 컨트롤러(170) 및 버퍼들(180)을 더 포함할 수 있다. 한편, GPU(10) 내에서 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, 아래 설명될 기능들에 기초하여 분류된 것들일 수 있다. 따라서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들 각각은, 아래 설명될 기능들 각각을 실행시키는 프로그램 로직들 또는 소프트웨어 모듈들로 구현될 수 있다. 이와 다르게, 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, GPU(10) 내에 구비된 서브(sub) 프로세싱 유닛들(또는 프로세서 코어들) 각각으로 구현될 수도 있다. 즉, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 구현 형태는, 어느 하나에 의해 제한되지 않는다. 나아가서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 명칭들은 아래 설명될 기능들에 기초하여 부여된 것일 수 있으나, 이와 같은 명칭들은 다양하게 변경될 수도 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다. 예를 들어, 일 구현 형태에 따라 비너(135)와 컨트롤러(170)는 별개인 구성들일 수도 있거나, 또는 다른 구현 형태에 따라 비너(135)가 컨트롤러(170)에 포함하도록 구현됨으로써 별도의 비너(135) 없이, 컨트롤러(170)만이 존재할 수도 있다.
한편, 본 명세서에 따르면, GPU(10)에서 그래픽스 파이프라인(100)을 수행하는 구성들의 명칭들은 설명의 편의를 위하여, Microsoft 사의 DirectX 11 (DX11)에 정의된 명칭들을 사용하였으나, 이 구성들의 명칭들은 이에 제한되지 않는다. 즉, GPU(10)에서 그래픽스 파이프라인(100)을 수행하는 구성들은, OpenGL(Open Graphics Library) 4.0, CUDA(Compute Unified Device Architecture) 6.0 등의 다른 API들에서 정의된 유사한 구성들에 대응될 수 있다. 예를 들어, 도메인 쉐이더(125)는 OpenGL 4.0에서 사용되는 테셀레이션 이벨류에이션 쉐이더(tessellation evaluation shader)에 대응될 수 있고, GPU(10) 내의 다른 구성들도 마찬가지로, OpenGL 4.0 또는 CUDA 6.0 등의 다른 API들에서 사용되는 구성들에 대응될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
입력 어셈블러(110)는 메모리(도 1의 30)에 저장된 객체들에 관한 버텍스들의 데이터를 그래픽스 파이프라인(100)에 공급한다. 그래픽스 파이프라인(100)에서 공급된 버텍스들은, 메쉬(mesh) 또는 표면(surface)의 표현인 패치에 관한 것일 수 있으나, 이에 제한되지 않는다.
버텍스 쉐이더(115)는 입력 어셈블러(110)에 의해 공급된 버텍스들을 헐 쉐이더(121)의 입력 컨트롤 포인트들로서 전달한다. DirectX9 (DX9)에서 정의되었던 버텍스 쉐이딩은 버텍스들에 대한 월드-뷰-프로젝션(world-view-projection)을 수행하였다. 그러나, 이와 달리 테셀레이션 파이프라인이 도입된 DirectX11 (DX11)에서 정의된 버텍스 쉐이딩은 버텍스들에 대한 월드-뷰-프로젝션을 수행하지 않고 단지 버텍스들을 다음 스테이지로 전달하기만 한다. 본 실시예들에서 버텍스 쉐이더(115)는 이와 유사하게 동작할 수 있다. 즉, 버텍스 쉐이더(115)는 입력 어셈블러(110)에 의해 공급된 버텍스들에 대응되는 입력 컨트롤 포인트들만 헐 쉐이더(121)로 전달할 뿐, 새로운 컨트롤 포인트들을 생성하지 않는다.
헐 쉐이더(121), 테셀레이터(123) 및 도메인 쉐이더(125)는 앞서 도 3에서 설명되었던 테셀레이션 파이프라인(300)을 수행할 수 있다. 즉, 헐 쉐이더(121)에 입력된 입력 컨트롤 포인트들은, 도메인 쉐이더(125)에서 출력 패치(output patch)에 관한 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로 출력될 수 있다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하기 위해 사용될 수도 있는 옵션적인 구성요소이다.
비너(135)는 도메인 쉐이더(125) 또는 지오메트리 쉐이더(130)로부터의 출력 프리미티브들을 이용하여, 비닝 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test)를 수행하여 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 생성(비닝)한다. 한편, 다른 실시예에 따라, 비너(135)는 컨트롤러(170)에 포함된 구성일 수 있다.
래스터라이저(140)는 생성된 타일 리스트에 기초하여, 도메인 쉐이더(125) 또는 지오메트리 쉐이더(130) 로부터의 출력 프리미티브들을 2차원 공간에서의 픽셀 값들로 변환한다. 픽셀 쉐이더 (150)는, 깊이 테스트, 클리핑(clipping), 시저링(scissoring), 블렌딩 등과 같은 추가 동작들을 픽셀들에 대해 수행할 수도 있다. 픽셀 쉐이더(150)의 픽셀 쉐이딩 결과는 출력 머저(160)에 의해 버퍼들(180)에 저장된 후, 동영상의 프레임으로서 디스플레이될 수 있다.
컨트롤러(170)는 그래픽스 파이프라인(100)의 각 구성요소들(110 내지 160)과 버퍼들(180)의 전반적인 기능들 및 동작들을 제어한다. 한편, 컨트롤러(170)는 도 7에서 설명될 그래픽스 파이프라인(100)의 모드들을 제어할 수 있다.
도 7은 일 실시예에 따라 GPU에서 수행할 수 있는 다양한 종류들의 그래픽스 파이프라인들을 선택하는 것을 설명하기 위한 도면이다.
도 7을 참고하면, MODE ① 내지 MODE ⑧의 그래픽스 파이프라인들은 이하 도면들에서 설명될 실시예들로서, 컨트롤러(170)는 이들 중의 하나의 파이프라인이 GPU(10)에서 수행되도록 제어할 수 있다.
보다 상세하게 설명하면, 컨트롤러(170)는 MODE ① 내지 MODE ⑧의 그래픽스 파이프라인들에 관한 효율 모드(efficiency mode)를 끄거나(turn OFF) 또는 켤(turn ON) 수 있다. 효율 모드의 ON/OFF는 컴퓨팅 장치(1)의 사용자에 의해 설정되거나 그래픽스 파이프라인에 의해 처리될 동영상의 처리 환경(예를 들어, 해상도, 용량, 컴퓨팅 장치(1)의 성능 등)에 의존될 수 있다.
효율 모드가 꺼진(turn OFF) 경우, 컨트롤러(170)는 일반적인 그래픽스 파이프라인(109)을 수행할 수 있다. 여기서, 일반적인 그래픽스 파이프라인(109)은 이미 알려진 종래의 그래픽스 파이프라인으로서 예를 들어, DirectX9 (DX9), DirectX10 (DX10), DirectX11 (DX11), CUDA 6.0, OpenGL 4.0 등일 수 있다.
효율 모드가 켜진(turn ON) 경우, 컨트롤러(170)는 MODE ① 내지 MODE ⑧의 그래픽스 파이프라인들 중 어느 하나를 수행할 수 있다. MODE ① 내지 MODE ⑧ 중 어느 하나의 선택은 컴퓨팅 장치(1)의 사용자에 의해 설정되거나 그래픽스 파이프라인에 의해 처리될 동영상의 처리 환경(예를 들어, 타일 사이즈, 해상도, 용량, 컴퓨팅 장치(1)의 성능 등)에 의존될 수 있다. MODE ①의 경우 컨트롤러(170)는 비닝 파이프라인(101-1) 및 렌더링 파이프라인(102-1)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ②의 경우, 컨트롤러(170)는 비닝 파이프라인(101-2) 및 렌더링 파이프라인(102-1)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ③의 경우 컨트롤러(170)는 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-1)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ④의 경우, 컨트롤러(170)는 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-1)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ⑤의 경우 컨트롤러(170)는 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-2)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ⑥의 경우, 컨트롤러(170)는 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-2)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ⑦의 경우, 컨트롤러(170)는 비닝 파이프라인(101-3), 제 1 렌더링 파이프라인(102-3) 및 제 2 렌더링 파이프라인(102-4)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어하고, MODE ⑧의 경우, 컨트롤러(170)는 비닝 파이프라인(101-4), 제 1 렌더링 파이프라인(102-3) 및 제 2 렌더링 파이프라인(102-4)을 포함한 그래픽스 파이프라인이 GPU(10)에서 수행되도록 제어할 수 있다. 이하에서는, MODE ① 내지 MODE ⑧ 각각의 그래픽스 파이프라인에 관한 실시예들에 대하여 보다 상세하게 설명하도록 한다.
도 8은 일 실시예에 따른 3차원 객체를 분할하기 위한 타일들의 개수와 그래픽스 처리 성능(또는 효율)과의 관계를 설명하기 위한 도면이다.
도 8을 참고하면, 좌측의 (a) 도면은 3차원 객체(815)를 10x10의 타일들(810)로 분할한 경우를 나타내고, 우측의 (b) 도면은 3차원 객체(815)를 2x2의 타일들(820)로 분할한 경우를 나타낸다. GPU(10)는 타일 단위로, 타일 기반 렌더링 또는 타일 기반 그래픽스 파이프라인을 수행하기 때문에, 도 8의 (a) 도면에 도시된 3차원 객체(815)에 대한 렌더링은 100개의 타일들에 대해 수행될 것이다. 이와 달리, 도 8의 (b) 도면에 도시된 3차원 객체(815)에 대한 렌더링은 단지 4개의 타일들에 대해서만 수행될 것이다. 물론, 도 8의 (a) 도면에 도시된 타일들(810) 중에서는 약 1/3 정도만이 3차원 객체(815)에 오버랩되기 때문에, 나머지 약 2/3의 타일들(810)에 대해서는 렌더링이 스킵될 수 있을 것이나, 결국은 100개의 타일들(810) 각각에 대한 비닝(또는 타일링)은 선행될 수 밖에 없을 것이다. 이와 비교하여, 도 8의 (b) 도면에 도시된 4개의 타일들(820) 각각은 모두 3차원 객체(815)에 오버랩되기 때문에 4개의 타일들(820) 각각에 대한 병렬적인 그래픽스 프로세스들은 수행될 수 있다.
한편, 현재 많은 GPU들은 SIMT(Single Instruction Multiple Thread) 아키텍쳐로 제조되고 있는 추세이다. SIMT 아키텍쳐는, 하나의 프로그램으로 많은 데이터를 처리하기 위한 SPMD(Single Program Multiple Data) 프로세서를 구현하는 방식들 중 한가지이다. SIMT 아키텍쳐는 보다 적은 컨트롤 하드웨어를 사용하여 많은 양의 데이터를 처리할 수는 있으나 스레드들(threads) 각각의 흐름이 분기되는 것(thread divergence)을 처리하기가 어려워 처리 효율이 낮아지는 문제가 생길 수 있다.
앞서 설명된 도 8의 (a) 도면 및 (b) 도면을 비교하여 보면, SIMT 아키텍쳐는 (a) 도면의 100개의 타일들(810)에 대하여 100개의 스레드들을 생성 및 처리하여야 작업을 완료할 수 있으나, 이와 달리 SIMT 아키텍쳐는 (b) 도면의 4개의 타일들(820)에 대하여는 훨씬 적은, 단지 4개의 스레드들만을 생성 및 처리하면 작업을 완료할 수 있다. (a) 도면에서의 하나의 타일의 크기 및 하나의 타일에 포함된 객체의 크기는, (b) 도면과 비교하여 작기 때문에, 처리되어야 할 그래픽 데이터가 (a) 도면의 경우에 보다 적을 수는 있다. 하지만, 스레드 복잡도(thread divergence)가 월등히 증가하기 때문에 (a) 도면과 같이 많은 타일들(810)로 3차원 객체를(815) 분할하는 것이 (b) 도면의 경우보다 반드시 유리하지만은 않을 수 있다. 이와 같은 이유들 때문에, SIMT 아키텍쳐로 구현된 최근의 GPU들은 큰 타일 사이즈(big tile size)를 적용하고자 하는 추세이다.
도 9는 일 실시예에 따른 출력 패치의 출력 컨트롤 포인트들과 테셀레이팅된 프리미티브들과의 관계를 설명하기 위한 도면이다.
앞서 도 8에서 설명된 바와 같이, GPU(10)가 큰 타일 사이즈를 이용할 경우, 타일 사이즈가 커짐으로 인해 3차원 객체의 어느 패치(410)가 어느 하나의 타일(tile 0)(901)에 포함될 확률이 증가할 수 있다. 비닝 파이프라인(도 1의 101)에서 테셀레이션 파이프라인은, 출력 패치(410)(출력 컨트롤 포인트들(415))를 테셀레이팅하여 보다 많은 개수의 테셀레이팅된 프리미티브들(425)을 생성(produce)하고, 테셀레이팅된 프리미티브들(425)에 대한 비닝(또는 타일링)을 수행한다. 이때, 도 9에 도시된 바와 같이, 하나의 타일(901) 내에 포함된 출력 패치(410)(출력 컨트롤 포인트들(415))가 테셀레이션 파이프라인에 의해 처리된다 할지라도, 테셀레이팅된 프리미티브들(425)이 형성하는(form) 경계(boundary)(420)는 출력 패치(410)가 형성하는 경계(boundary)와 마찬가지로 하나의 타일(902) 내에 위치할 수 있다. 왜냐하면, 테셀레이팅된 프리미티브들(425)이 형성하는 경계(420)는 출력 패치(410)가 형성하는 경계 내에 위치하도록 GPU(10)의 그래픽스 파이프라인이 프로그래밍될 수 있기 때문이다. 또한, 그렇지 않은 경우에는, 컴파일러에 의해 디버깅(debugging)될 수 있다.
따라서, 출력 패치(410)(출력 컨트롤 포인트들(415))에 대한 비닝(또는 타일링)의 결과는 타일(tile 0)(901)로서, 테셀레이팅된 프리미티브들(425)에 대한 비닝의 결과인 타일(tile 0)(902)과 동일할 수 있다. 그러므로, 비닝 파이프라인(도 1의 101)의 테셀레이션 파이프라인 중 테셀레이터(도 6의 123)에 의한 테셀레이션이 스킵된다 할지라도, 최종적인 비닝 파이프라인(도 1의 101)의 결과는 테셀레이터(도 6의 123)에 의한 테셀레이션이 스킵되지 않는 경우와 동일하다고 가정할 수 있다.
한편, 출력 패치(410)(출력 컨트롤 포인트들(415))에 대한 테셀레이션 팩터(TF)(또는 테셀레이션 레벨(TL))에 대해서도 위와 같은 가정이 성립될 수 있다. 예를 들어, 낮은 테셀레이션 팩터(예를 들어, TF=3)에 의해 생성된 테셀레이팅된 프리미티브들이 형성하는 경계는, 높은 테셀레이션 팩터(예를 들어, TF=13)에 의해 생성된 테셀레이팅된 프리미티브들이 형성하는 경계 내에 포함될 수 있다. 따라서, 비닝 파이프라인(도 1의 101)의 테셀레이션 파이프라인에서 헐 쉐이더(도 6의 121)에 의해 결정된 테셀레이션 팩터(예를 들어, TF=13)가 아닌, 보다 낮은 테셀레이션 팩터(예를 들어, TF=3)를 새로 설정하여 테셀레이션 파이프라인을 수행한다 할지라도, 헐 쉐이더(도 6의 121)에 의해 결정된 테셀레이션 팩터(예를 들어, TF=13)를 이용한 경우 및 새로 설정된 보다 낮은 테셀레이션 팩터(예를 들어, TF=3)를 이용한 경우의 비닝(또는 타일링) 결과는 동일하다고 가정할 수 있다.
한편, GPU(10)에서 구동될 그래픽스 파이프라인을 설계하고 검사하는 컴파일러(compiler)는, 도 9에서 설명된 가정들과 같이 동작하지 않는 그래픽스 파이프라인이 설계(또는 프로그래밍)된 경우, 이를 디버깅하여 도 9에서 설명된 가정들과 같이 동작하도록 컴파일링할 수 있다.
이하의 도 10 내지 도 21에서 설명될 실시예들은 위와 같은 가정들을 전제하여 동작될 수 있으나, 이에 제한되지는 않는다.
도 10은 일 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 10을 참고하면, 비닝 파이프라인(101-1) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ①에 대응될 수 있다. 한편, 도 10에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 10에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1001)을 이용하여 버텍스 쉐이딩(1011)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(1001)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1012)을 수행한다. 헐 쉐이더(121)는 패치를 구성하는 출력 컨트롤 포인트들을 생성함과 동시에, 테셀레이션 팩터(TF)를 결정할 수 있다. 헐 쉐이더(121)는 출력 패치의 출력 컨트롤 포인트들에 대한 정보를 지오메트리 쉐이더(130) 또는 비너(135)로 전달한다.
도 3에서 설명된 바와 같이, 일반적인 테셀레이션 파이프라인(도 3의 300)은 헐 쉐이더(121), 테셀레이터(123) 및 도메인 쉐이더(125)의 스테이지들을 모두 포함하고 있으나, 도 10에 따르면, 테셀레이터(123) 및 도메인 쉐이더(125)의 스테이지들은 스킵될 수 있다. 그 이유는, 앞서 도 9에서 설명된 가정과 같이 패치(도 9의 410)의 비닝 결과와 테셀레이팅된 프리미티브들(425)의 비닝 결과는 동일할 수 있기 때문이다.
지오메트리 쉐이더(130)는 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 컨트롤 포인트들 외에, 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(1013)을 수행하기 위한 옵션적인 구성요소이다. 따라서, 지오메트리 쉐이딩(1013)은 스킵될 수도 있다.
지오메트리 쉐이딩(1013)이 스킵된 경우 비너(135)는 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들을 이용하여, 비닝(1014) 또는 타일링을 수행한다. 만약, 지오메트리 쉐이딩(1013)이 수행된 경우, 비너(135)는 지오메트리 쉐이더(130)로부터 출력된 출력 패치의 출력 프리미티브들을 이용하여, 비닝(1014) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여 출력 패치의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1014)을 수행한다. 이때, 비닝된 타일 리스트는, 가시성 스트림(visibility stream)으로서 메모리(30)의 빈 스트림(bin stream)(1002)에 저장될 수 있다. 가시성 스트림은 입력 패치(또는, 입력 컨트롤 포인트, 입력 프리미티브) 또는 출력 패치(또는, 출력 컨트롤 포인트, 출력 프리미티브)가 타일에서 보이는지 아닌지 여부를 나타내는 스트림일 수 있다. 입력 패치(또는, 입력 컨트롤 포인트, 입력 프리미티브)에 관한 가시성 스트림은 입력 가시성 스트림(input visibility stream)으로, 출력 패치(또는, 출력 컨트롤 포인트, 출력 프리미티브)에 관한 가시성 스트림은 출력 가시성 스트림(output visibility stream)으로 정의될 수 있다.
비너(135)는 비닝(1014) 결과, 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들이 하나의 타일에 포함되는지 여부를 판단한다. 출력 패치가 하나의 타일에 포함되는 경우, 비너(135)는 PASS ①에 따라, 출력 패치가 하나의 타일에 포함된다는 정보를 나타내는 가시성 스트림을 빈 스트림(1002)에 저장한다. 이로써, 어느 출력 패치에 대한 비닝 파이프라인(101-1)은 완료될 수 있다. 즉, PASS ①에 따르면, 테셀레이터(123)의 테셀레이팅(1015) 및 도메인 쉐이더(125)의 도메인 쉐이딩(1016)은 스킵될 수 있다.
하지만, 출력 패치가 하나의 타일에 포함되지 않는 경우, 비너(135)는 PASS ②에 따라, 출력 패치에 대한 테셀레이터(123)의 테셀레이팅(1015) 및 도메인 쉐이더(125)의 도메인 쉐이딩(1016)이 수행되도록 제어한다. 즉, PASS ②는 비닝(1014) 결과, 출력 패치가 하나의 타일에 포함되지 않는 경우에만 진행될 수 있다.
테셀레이터(123)는 헐 쉐이더(121)로부터 수신된 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(1015)를 수행한다.
도메인 쉐이더(125)는 헐 쉐이더(121)로부터 수신된 출력 패치의 출력 컨트롤 포인트들 및 테셀레이션 팩터에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1016)을 수행한다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(1017)을 수행하기 위해 사용될 수도 있는 옵션적인 구성요소이다. 따라서, PASS ②에서도 지오메트리 쉐이딩(1017)은 스킵될 수도 있다.
비너(135)는 PASS ②에 따라, 도메인 쉐이더(125) 또는 지오메트리 쉐이더(130)로부터 출력된 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1018) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1018)을 수행한다. 이때, 비닝된 타일 리스트는, 가시성 스트림으로서 메모리(30)의 빈 스트림(1002)에 저장될 수 있다.
GPU(10)는 비닝 파이프라인(101-1)이 완료된 경우, 타일 단위로 렌더링 파이프라인(102-1)을 수행한다. 렌더링 파이프라인(102-1)은 앞서 도 6에서 설명된 그래픽스 파이프라인(100)의 입력 어셈블러(110), 버텍스 쉐이더(115), 헐 쉐이더(121), 테셀레이터(123), 도메인 쉐이더(125), 지오메트리 쉐이더(130), 래스터라이저(140), 픽셀 쉐이더(150) 및 출력 머저(160)에 의한 스테이지들을 수행하는 것을 포함할 수 있다.
이상에서 설명된 MODE ①에 따른 도 10의 비닝 파이프라인(101-1)은, 출력 패치가 한 타일에 포함될 경우, 테셀레이터(123)에 의한 테셀레이팅(1015)을 스킵할 수 있으므로, 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성(produce)하지 않을 수 있다. 따라서, 테셀레이터(123)에 의한 테셀레이팅(1015)을 필수적으로 수행하여야 하는 도 3의 테셀레이션 파이프라인(도 3의 300)과 비교할 때, 그래픽 데이터의 연산량을 보다 줄일 수 있다.
도 11은 일 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 11의 흐름도는, 도 10에서 설명된 MODE ①에 따른 비닝 파이프라인(101-1) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 10에서 설명되었던 내용은 도 11의 흐름도에 적용될 수 있다.
1101 단계에서, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1001)을 이용하여 버텍스 쉐이딩(1011)을 수행한다.
1102 단계에서, 헐 쉐이더(121)는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1012)을 수행한다. 헐 쉐이더(121)는 출력 컨트롤 포인트들을 생성함과 동시에, 테셀레이션 팩터(TF)를 결정할 수 있다. 헐 쉐이더(121)는 출력 패치의 출력 컨트롤 포인트들에 대한 정보를 비너(135)로 전달한다.
1103 단계에서, 비너(135)는 출력 패치의 출력 프리미티브들을 이용하여, 비닝(1014) 또는 타일링을 수행한다.
1104 단계에서, 비너(135)는 비닝(1014) 결과, 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들이 하나의 타일에 포함되는지 여부를 판단한다. 만약, 출력 패치가 한 타일에 포함되는 경우, 1105 단계로 진행된다. 그러나, 출력 패치가 한 타일에 포함되지 않는 경우, 1107 단계로 진행된다.
1105 단계에서, 비닝(1014) 결과 출력 패치가 한 타일에 포함되는 경우, 비너(135)는 출력 패치의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1014)을 수행하고, 비닝된 타일 리스트에 관한 가시성 스트림을 메모리(30)의 빈 스트림(1002)에 저장한다(PASS ①).
1106 단계에서, 래스터라이저(140), 픽셀 쉐이더(150) 및 출력 머저(160)는 렌더링 파이프라인(102-1)을 수행한다. 이때, 렌더링 파이프라인(102-1)에는 비닝 파이프라인(101-1)와 마찬가지로, 입력 어셈블러(110), 버텍스 쉐이더(115), 헐 쉐이더(121), 테셀레이터(123), 도메인 쉐이더(125) 및 지오메트리 쉐이더(130)에 의한 스테이지들이 포함될 수 있다.
1107 단계에서, 비닝(1014) 결과 출력 패치가 한 타일에 포함되지 않는 경우, 테셀레이터(123)는 헐 쉐이더(121)로부터 수신된 테셀레이션 팩터(TF)를 이용하여, 출력 패치의 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(1015)를 수행한다(PASS ②).
1108 단계에서, 도메인 쉐이더(125)는 헐 쉐이더(121)로부터 수신된 출력 패치의 출력 컨트롤 포인트들 및 테셀레이션 팩터에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1016)을 수행한다.
1109 단계에서, 비너(135)는 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1018) 또는 타일링을 수행한다. 1109 단계가 완료된 후, 1105 단계에서 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1018)을 수행하고, 비닝된 타일 리스트에 관한 가시성 스트림을 메모리(30)의 빈 스트림(1002)에 저장한다.
도 12는 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 12를 참고하면, 비닝 파이프라인(101-2) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ②에 대응될 수 있다. 한편, 도 12에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 12에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1201)을 이용하여 버텍스 쉐이딩(1211)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(1201)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1212)을 수행한다. 헐 쉐이더(121)는 패치를 구성하는 출력 컨트롤 포인트들을 생성함과 동시에, 제 1 테셀레이션 팩터(TF)를 결정할 수 있다.
테셀레이터(123)는 헐 쉐이더(121)로부터 제 1 테셀레이션 팩터(TF)를 수신하고, 제 1 테셀레이션 팩터(TF)보다 낮은 제 2 테셀레이션 팩터(TF)를 새로 설정한다. 그리고, 테셀레이터(123)는 새로 설정된 제 2 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(1213)를 수행한다.
도 3에서 설명된 바와 같이, 일반적인 테셀레이션 파이프라인(도 3의 300)에서 테셀레이터(123)는 헐 쉐이더(121)에 의해 결정된 테셀레이션 팩터(TF)를 그대로 이용하였다. 하지만, 앞서 도 9에서 설명된 가정과 같이, 테셀레이터(123)가, 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)보나 낮은 제 2 테셀레이션 팩터(TF)를 이용한다 할지라도, 비닝 결과는 동일할 수 있다. 다시 말하면, 테셀레이션 팩터가 낮을수록 생성(produce)되는 프리미티브들(삼각형들)의 개수가 적어지므로 GPU(10)의 연산량은 줄어들 수 있고, GPU(10)는 동일한 비닝 결과를 획득할 수 있다.
도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 제 2 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1214)을 수행한다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(1215)을 수행하기 위해 사용될 수도 있는 옵션적인 구성요소이다. 따라서, 지오메트리 쉐이딩(1215)은 스킵될 수도 있다.
비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1216) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1216)을 수행한다.
비너(135)는 비닝(1216) 결과, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되는지 여부를 판단한다.
제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되는 경우, 비너(135)는 PASS ①에 따라, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함된다는 정보를 나타내는 가시성 스트림을 빈 스트림(1202)에 저장한다. 이로써, 제 2 테셀레이션 팩터(TF)를 이용한 비닝 파이프라인(101-2)은 완료될 수 있다. 즉, 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)보나 낮은 제 2 테셀레이션 팩터(TF)를 이용하여 비닝 파이프라인(101-2)이 완료되었으므로, GPU(10)는 보다 적은 연산량으로 비닝 파이프라인(101-2)을 완료시킬 수 있다.
제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되지 않는 경우, 비너(135)는 PASS ②에 따라, 테셀레이팅(1217)이 수행되도록 제어한다.
PASS ②에 따르면, 테셀레이터(123)는 새로 설정된 제 2 테셀레이션 팩터(TF)가 아닌, 헐 쉐이더(121)에 의해 원래 결정된 제 1 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(1217)를 수행한다.
도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 제 1 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1218)을 수행한다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(1219)을 수행하기 위해 사용될 수도 있는 옵션적인 구성요소이다. 따라서, 지오메트리 쉐이딩(1219)은 스킵될 수도 있다.
비너(135)는 제 1 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1220) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여, 제 1 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1220)을 수행한다. 그리고, 비너(135)는 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)에 대한 가시성 스트림을 빈 스트림(1202)에 저장한다. 이로써, 제 1 테셀레이션 팩터(TF)를 이용한 비닝 파이프라인(101-2)은 완료될 수 있다.
GPU(10)는 비닝 파이프라인(101-2)이 완료된 경우, 타일 단위로 렌더링 파이프라인(102-1)을 수행한다. 렌더링 파이프라인(102-1)은 앞서 도 6에서 설명된 그래픽스 파이프라인(100)의 입력 어셈블러(110), 버텍스 쉐이더(115), 헐 쉐이더(121), 테셀레이터(123), 도메인 쉐이더(125), 지오메트리 쉐이더(130), 래스터라이저(140), 픽셀 쉐이더(150) 및 출력 머저(160)에 의한 스테이지들을 수행하는 것을 포함할 수 있다.
이상에서 설명된 MODE ②에 따른 도 12의 비닝 파이프라인(101-2)은 낮은 테셀레이터 팩터를 이용하여 테셀레이터(123)에 의한 테셀레이팅(1213)을 수행할 수 있으므로, 보다 적은 개수의 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성(produce)할 수 있다. 따라서, 도 3의 테셀레이션 파이프라인(도 3의 300)과 비교할 때, 그래픽 데이터의 연산량을 보다 줄일 수 있다.
도 13은 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 13의 흐름도는, 도 12에서 설명된 MODE ②에 따른 비닝 파이프라인(101-2) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 12에서 설명되었던 내용은 도 13의 흐름도에 적용될 수 있다.
1301 단계에서, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1201)을 이용하여 버텍스 쉐이딩(1211)을 수행한다.
1302 단계에서, 헐 쉐이더(121)는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1212)을 수행한다. 헐 쉐이더(121)는 출력 컨트롤 포인트들을 생성함과 동시에, 제 1 테셀레이션 팩터(TF)를 결정할 수 있다.
1303 단계에서, 테셀레이터(123)는 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)보다 낮은 제 2 테셀레이션 팩터(TF)를 이용하여, 출력 패치의 출력 컨트롤 포인트들에 대한 테셀레이팅(1213)을 수행한다.
1304 단계에서, 도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 제 2 테셀레이션 팩터(TF)에 대한 정보와, 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1214)을 수행한다.
1305 단계에서, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1216) 또는 타일링을 수행한다.
1306 단계에서, 비너(135)는 비닝(1216) 결과, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되는지 여부를 판단한다. 만약, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되는 경우, 1307 단계로 진행된다. 그러나, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 한 타일에 포함되지 않는 경우, 1309 단계로 진행된다.
1307 단계에서, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되는 경우, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함된다는 정보를 나타내는 가시성 스트림을 빈 스트림(1202)에 저장한다.
1308 단계에서, 래스터라이저(140), 픽셀 쉐이더(150) 및 출력 머저(160)는 렌더링 파이프라인(102-1)을 수행한다. 이때, 렌더링 파이프라인(102-1)에는 비닝 파이프라인(101-2)과 마찬가지로, 입력 어셈블러(110), 버텍스 쉐이더(115), 헐 쉐이더(121), 테셀레이터(123), 도메인 쉐이더(125) 및 지오메트리 쉐이더(130)에 의한 스테이지들이 포함될 수 있다.
1309 단계에서, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되지 않는 경우, 테셀레이터(123)는 새로 설정된 제 2 테셀레이션 팩터(TF)가 아닌, 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)를 이용하여, 출력 패치의 출력 컨트롤 포인트들에 대한 테셀레이팅(1217)을 수행한다.
1310 단계에서, 도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 제 1 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1218)을 수행한다.
1311 단계에서, 비너(135)는 제 1 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1220) 또는 타일링을 수행한다. 1311 단계가 완료된 후, 1307 단계에서 비너(135)는 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)에 대한 가시성 스트림을 빈 스트림(1202)에 저장한다.
도 14는 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 14를 참고하면, 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ③에 대응될 수 있다. 한편, 도 14에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 14에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1401)을 이용하여 버텍스 쉐이딩(1411)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(1401)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1412)을 수행한다. 헐 쉐이더(121)는 출력 패치의 출력 컨트롤 포인트들에 대한 정보를 비너(135)로 전달한다.
도 3에서 설명된 바와 같이, 일반적인 테셀레이션 파이프라인(도 3의 300)은 헐 쉐이더(121), 테셀레이터(123) 및 도메인 쉐이더(125)의 스테이지들을 모두 포함하고 있으나, 도 14에 따르면, 테셀레이터(123) 및 도메인 쉐이더(125)의 스테이지들은 스킵될 수 있다. 그 이유는, 앞서 도 9에서 설명된 가정과 같이 패치(도 9의 410)의 비닝 결과와 테셀레이팅된 프리미티브들(425)의 비닝 결과는 동일할 수 있기 때문이다. 만약 비닝 결과가 동일하지 않더라도, 렌더링 파이프라인(102-1)에서 컬링(curling), 클리핑(clipping), HSR(hidden surface removal) 등의 스테이지들이 수행되기 때문에, 최종적인 픽셀 렌더링 결과는 동일할 수 있다.
비너(135)는 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들을 이용하여, 비닝(1413) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여 출력 패치의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1413)을 수행한다. 이때, 비닝된 타일 리스트는, 가시성 스트림으로서 메모리(30)의 빈 스트림(1402)에 저장될 수 있다.
도 10 내지 도 13에서 설명된 실시예들과 달리, 비너(135)는 비닝(1413) 결과, 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들이 하나의 타일에 포함되는지 여부를 판단하지 않는다. 즉, 출력 패치의 출력 프리미티브들은 하나의 타일 또는 여러 타일에 포함될 수 있다.
GPU(10)는 비닝 파이프라인(101-3)이 완료된 경우, 타일 단위로 렌더링 파이프라인(102-1)을 수행한다. 렌더링 파이프라인(102-1)은 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(1421), 헐 쉐이더(121)에 의한 헐 쉐이딩(1422), 테셀레이터(123)에 의한 테셀레이팅(1423), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(1424), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(1425), 래스터라이저(140)에 의한 래스터라이징(1426), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1427)의 스테이지들을 포함할 수 있다. 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1427) 결과는 버퍼(1403)에 저장될 수 있다.
이상에서 설명된 MODE ③에 따른 도 14의 그래픽스 파이프라인은 비닝 파이프라인(101-3)에서 테셀레이터(123)에 의한 테셀레이팅을 스킵할 수 있으므로, 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성(produce)하지 않을 수 있다. 따라서, 테셀레이터(123)에 의한 테셀레이팅을 필수적으로 수행하여야 하는 도 3의 테셀레이션 파이프라인(도 3의 300)과 비교할 때, 그래픽 데이터의 연산량을 보다 줄일 수 있다.
도 15는 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 15의 흐름도는, 도 14에서 설명된 MODE ③에 따른 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 14에서 설명되었던 내용은 도 15의 흐름도에 적용될 수 있다.
1511 단계 내지 1514 단계를 포함하는 파이프라인(1510)은 비닝 파이프라인(101-3)에 대응되고, 1521 단계를 포함하는 파이프라인(1520)은 렌더링 파이프라인(102-1)에 대응될 수 있다.
1511 단계에서, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1401)을 이용하여 버텍스 쉐이딩(1411)을 수행한다.
1512 단계에서, 헐 쉐이더(121)는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1412)을 수행한다.
1513 단계에서, 비너(135)는 출력 패치의 출력 컨트롤 포인트들에 대한 비닝(1413) 또는 타일링을 수행한다.
1514 단계에서, 비너(135)는 비닝(1413) 결과, 출력 패치의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 가시성 스트림으로서 메모리(30)의 빈 스트림(1402)에 저장한다. 도 10 내지 도 13에서 설명된 실시예들과 달리, 비너(135)는 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들이 하나의 타일에 포함되는지 여부를 판단하지 않는다. 즉, 출력 패치의 출력 프리미티브들은 하나의 타일 또는 여러 타일에 포함될 수 있다.
1521 단계에서, GPU(10)는 타일 단위로 렌더링 파이프라인(102-1)을 수행한다. 렌더링 파이프라인(102-1)은 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(1421), 헐 쉐이더(121)에 의한 헐 쉐이딩(1422), 테셀레이터(123)에 의한 테셀레이팅(1423), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(1424), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(1425), 래스터라이저(140)에 의한 래스터라이징(1426), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1427)의 스테이지들을 포함할 수 있다.
도 16은 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 16을 참고하면, 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ④에 대응될 수 있다. 한편, 도 12에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 16에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1601)을 이용하여 버텍스 쉐이딩(1611)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(1601)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1612)을 수행한다. 헐 쉐이더(121)는 패치를 구성하는 출력 컨트롤 포인트들을 생성함과 동시에, 제 1 테셀레이션 팩터(TF)를 결정할 수 있다.
테셀레이터(123)는 헐 쉐이더(121)로부터 제 1 테셀레이션 팩터(TF)를 수신하고, 제 1 테셀레이션 팩터(TF)보다 낮은 제 2 테셀레이션 팩터(TF)를 새로 설정한다. 그리고, 테셀레이터(123)는 새로 설정된 제 2 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(1613)을 수행한다.
도 3에서 설명된 바와 같이, 일반적인 테셀레이션 파이프라인(도 3의 300)에서 테셀레이터(123)는 헐 쉐이더(121)에 의해 결정된 테셀레이션 팩터(TF)를 그대로 이용하였다. 하지만, 앞서 도 9에서 설명된 가정과 같이, 테셀레이터(123)가, 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)보나 낮은 제 2 테셀레이션 팩터(TF)를 이용한다 할지라도, 비닝 결과는 동일할 수 있다. 만약 비닝 결과가 동일하지 않더라도, 렌더링 파이프라인(102-1)에서 컬링, 클리핑, HSR 등의 스테이지들이 수행되기 때문에, 최종적인 픽셀 렌더링 결과는 동일할 수 있다.
도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 제 2 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1614)을 수행한다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(1615)을 수행하기 위해 사용될 수도 있는 옵션적인 구성요소이다. 따라서, 지오메트리 쉐이딩(1615)은 스킵될 수도 있다.
비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1616) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1616)을 수행한다. 이때, 비닝된 타일 리스트는, 가시성 스트림으로서 메모리(30)의 빈 스트림(1602)에 저장될 수 있다.
도 10 내지 도 13에서 설명된 실시예들과 달리, 비너(135)는 비닝(1616) 결과, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에 포함되는지 여부를 판단하지 않는다. 즉, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)은 하나의 타일 또는 여러 타일에 포함될 수 있다.
GPU(10)는 비닝 파이프라인(101-4)이 완료된 경우, 타일 단위로(per tile) 렌더링 파이프라인(102-1)을 수행한다. 렌더링 파이프라인(102-1)은 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(1621), 헐 쉐이더(121)에 의한 헐 쉐이딩(1622), 테셀레이터(123)에 의한 테셀레이팅(1623), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(1624), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(1625), 래스터라이저(140)에 의한 래스터라이징(1626), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1627)의 스테이지들을 포함할 수 있다. 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1627) 결과는 버퍼(1603)에 저장될 수 있다.
이상에서 설명된 MODE ④에 따른 도 16의 비닝 파이프라인(101-4)은 낮은 테셀레이터 팩터를 이용하여 테셀레이터(123)에 의한 테셀레이팅(1613)을 수행할 수 있으므로, 보다 적은 개수의 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성(produce)할 수 있다. 따라서, 도 3의 테셀레이션 파이프라인(도 3의 300)과 비교할 때, 그래픽 데이터의 연산량을 보다 줄일 수 있다.
도 17은 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 17의 흐름도는, 도 16에서 설명된 MODE ④에 따른 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-1)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 16에서 설명되었던 내용은 도 17의 흐름도에 적용될 수 있다.
1711 단계 내지 1716 단계를 포함하는 파이프라인(1710)은 비닝 파이프라인(101-4)에 대응되고, 1721 단계를 포함하는 파이프라인(1720)은 렌더링 파이프라인(102-1)에 대응될 수 있다.
1711 단계에서, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1601)을 이용하여 버텍스 쉐이딩(1611)을 수행한다.
1712 단계에서, 헐 쉐이더(121)는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1612)을 수행한다.
1713 단계에서, 테셀레이터(123)는 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)보다 낮은 제 2 테셀레이션 팩터(TF)를 이용하여, 출력 패치의 출력 컨트롤 포인트들에 대한 테셀레이팅(1613)을 수행한다.
1714 단계에서, 도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 제 2 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(1614)을 수행한다.
1715 단계에서, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(1616) 또는 타일링을 수행한다.
1716 단계에서, 비너(135)는 비닝(1616) 결과, 출력 패치의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 가시성 스트림으로서 메모리(30)의 빈 스트림(1602)에 저장한다. 도 10 내지 도 13에서 설명된 실시예들과 달리, 비너(135)는 헐 쉐이더(121)로부터 출력된 출력 패치의 출력 프리미티브들이 하나의 타일에 포함되는지 여부를 판단하지 않는다. 즉, 출력 패치의 출력 프리미티브들은 하나의 타일 또는 여러 타일에 포함될 수 있다.
1721 단계에서, GPU(10)는 타일 단위로 렌더링 파이프라인(102-1)을 수행한다. 렌더링 파이프라인(102-1)은 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(1621), 헐 쉐이더(121)에 의한 헐 쉐이딩(1622), 테셀레이터(123)에 의한 테셀레이팅(1623), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(1624), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(1625), 래스터라이저(140)에 의한 래스터라이징(1626), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1627)의 스테이지들을 포함할 수 있다. 이때, 테셀레이팅(1623) 및 도메인 쉐이딩(1624)는 제 1 테셀레이션 팩터(TF)를 이용하여 수행될 수 있다.
도 18은 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 18을 참고하면, 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-2)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ⑤에 대응될 수 있다. 한편, 도 18에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 18에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
도 18에 도시된 그래픽스 파이프라인에 대해서는, 설명의 편의를 위하여 도 19에 도시된, 복수의 타일들(tile A, tile B, tile C 및 tile D)에 크로싱된(crossed) 패치(1900)에 대해 수행되는 것으로 가정하여 설명하도록 한다.
버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1801)을 이용하여 버텍스 쉐이딩(1811)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(1801)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치(1900)를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1812)을 수행한다. 헐 쉐이더(121)는 출력 패치(1900)의 출력 컨트롤 포인트들에 대한 정보를 비너(135)로 전달한다.
도 3에서 설명된 바와 같이, 일반적인 테셀레이션 파이프라인(도 3의 300)은 헐 쉐이더(121), 테셀레이터(123) 및 도메인 쉐이더(125)의 스테이지들을 모두 포함하고 있으나, 도 18에 따르면, 테셀레이터(123) 및 도메인 쉐이더(125)의 스테이지들은 스킵될 수 있다. 그 이유는, 앞서 도 9에서 설명된 가정과 같이 패치(도 9의 410)의 비닝 결과와 테셀레이팅된 프리미티브들(425)의 비닝 결과는 동일할 수 있기 때문이다. 만약 비닝 결과가 동일하지 않더라도, 렌더링 파이프라인(102-2)에서 컬링, 클리핑, HSR 등의 스테이지들이 수행되기 때문에, 최종적인 픽셀 렌더링 결과는 동일할 수 있다.
비너(135)는 헐 쉐이더(121)로부터 출력된 출력 패치(1900)의 출력 프리미티브들을 이용하여, 비닝(1813) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여 출력 패치(1900)의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1813)을 수행한다. 이때, 비닝된 타일 리스트는, 가시성 스트림으로서 메모리(30)의 빈 스트림(1802)에 저장될 수 있다.
비너(135)는 비닝(1813) 결과, 헐 쉐이더(121)로부터 출력된 출력 패치(1900)의 출력 프리미티브들이 복수의 타일들(예를 들어, 도 19의 tile A, tile B, tile C 및 tile D)에 포함되는지 여부를 판단한다. 즉, 비너(135)는 출력 패치(1900)의 출력 프리미티브들에 대하여 타일 크로싱(tile-crossing) 여부를 판단한다.
출력 패치(1900)가 타일 크로싱된 경우(또는 출력 패치(1900)가 복수의 타일들(tile A, tile B, tile C 및 tile D)에 포함되는 경우), 비너(135)는 복수의 타일들(tile A, tile B, tile C 및 tile D)의 렌더링 순서를 스케쥴링한다. 스케쥴링 결과, 비너(135)는 복수의 타일들 중 첫번째 렌더링 순서로 스케쥴링된 타일(tile A)을, 기준 타일(reference tile)로 결정한다. 여기서, 기준 타일은 복수의 타일들 중 가장 좌상단에 위치한 tile A 인 것으로 가정하여 설명하도록 하겠으나, 이에 제한되지 않고 기준 타일은 좌하단 타일, 우상단 타일, 우하단 타일, 가운데 타일 등의 다양한 소정 기준들에 의해 달라질 수 있다. 비너(135)는 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)이, 이웃 타일들(neighboring tiles) tile B, tile C 및 tile D보다 먼저 수행되도록, 렌더링 파이프라인(102-2)의 수행 타이밍을 스케쥴링한다. 복수의 타일들(tile A, tile B, tile C 및 tile D) 각각에 대한 렌더링 파이프라인(102-2)은, GPU(10) 내의 하나의 프로세서 유닛(또는 하나의 프로세서 코어)에 의해 순차적으로 수행되거나, 또는 GPU(10) 내의 복수의 프로세서 유닛들(또는 복수의 프로세서 코어들)에 의해 병렬적으로 수행될 수 있다. 이와 같은, 기준 타일의 결정 및 렌더링 타이밍의 스케쥴링은 비너(135)가 아닌, 컨트롤러(170) 또는 GPU(10) 내의 다른 구성들에 의해 수행될 수도 있다. 즉, 기준 타일의 결정 및 렌더링 타이밍의 스케쥴링의 수행의 주체는 어느 하나에 의해 제한되지 않는다.
출력 패치(1900)가 타일 크로싱된 경우, 비너(135)는 기준 타일(tile A)의 결정 결과 및 렌더링 타이밍의 스케쥴링 결과를 메모리(30)에 저장한다.
이와 달리, 출력 패치(1900)가 타일 크로싱되지 않은 경우(또는 출력 패치(1900)가 하나의 타일에만 포함되는 경우), 비너(135)는 기준 타일의 결정 및 렌더링 타이밍의 스케줄링을 수행하지 않을 수 있다.
GPU(10)는 비닝 파이프라인(101-3)이 완료된 경우, 타일 단위로 렌더링 파이프라인(102-2)을 수행한다. 이때, 비닝 파이프라인(101-3)에서 기준 타일이 tile A인 것으로 결정되었으므로, GPU(10)는 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)을 먼저 수행한다.
기준 타일 tile A에 대한 렌더링 파이프라인(102-2)은 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(1821), 헐 쉐이더(121)에 의한 헐 쉐이딩(1822), 테셀레이터(123)에 의한 테셀레이팅(1823), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(1824), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(1825), 래스터라이저(140)에 의한 래스터라이징(1826), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1827)의 스테이지들을 포함할 수 있다. 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(1827) 결과는 버퍼(1803)에 저장될 수 있다.
한편, 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)에서는, 비너(135)에 의한 비닝(1828)이 추가적으로 수행된다. 보다 상세하게 설명하면, 비너(135)는, 패치(1900)가 기준 타일 tile A에 인접한(adjacent) 이웃 타일들(tile B, tile C 및 tile D) 각각에서 가시적인지 여부를 나타내는 가시성 스트림을 생성하는 비닝(1828)을 수행한다. 여기서, 가시성 스트림은 본 명세서에서 설명되는 모든 종류의 가시성 스트림들을 포함할 수 있다. 이에 따라, GPU(10)는, 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)에서 생성된 이웃 타일들(tile B, tile C 및 tile D)에 대한 가시성 스트림을 이용하여, 이웃 타일들(tile B, tile C 및 tile D) 각각에 대한 렌더링 파이프라인(102-2)이 독립적으로 수행될 때, 가시적인 버텍스, 가시적인 프리미티브, 또는 가시적인 패치만을 처리할 수 있으므로, 이웃 타일들(tile B, tile C 및 tile D) 각각에 대한 렌더링 파이프라인(102-2)에서의 데이터 연산량이 줄어들 수 있다.
이상에서 설명된 MODE ⑤에 따른 도 18의 그래픽스 파이프라인은 비닝 파이프라인(101-3)에서 테셀레이터(123)에 의한 테셀레이팅을 스킵할 수 있으므로, 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성(produce)하지 않을 수 있다. 따라서, 테셀레이터(123)에 의한 테셀레이팅을 필수적으로 수행하여야 하는 도 3의 테셀레이션 파이프라인(도 3의 300)과 비교할 때, 그래픽 데이터의 연산량을 보다 줄일 수 있다.
도 19는 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 19의 흐름도는, 도 18에서 설명된 MODE ⑤에 따른 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-2)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 18에서 설명되었던 내용은 도 19의 흐름도에 적용될 수 있다.
1911 단계 내지 1915 단계를 포함하는 파이프라인(1910)은 비닝 파이프라인(101-3)에 대응되고, 1921 단계 내지 1924 단계를 포함하는 파이프라인(1920)은 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)에 대응될 수 있다.
1911 단계에서, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1801)을 이용하여 버텍스 쉐이딩(1811)을 수행한다.
1912 단계에서, 헐 쉐이더(121)는 입력 컨트롤 포인트들을, 패치(1900)를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(1812)을 수행한다.
1913 단계에서, 비너(135)는 출력 패치(1900)의 출력 컨트롤 포인트들에 대한 비닝(1813) 또는 타일링을 수행한다. 그리고, 비너(135)는 비닝(1813) 결과, 출력 패치(1900)의 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 메모리(30)의 빈 스트림(1802)에 저장한다.
1914 단계에서, 비너(135)는 헐 쉐이더(121)로부터 출력된 출력 패치(1900)의 출력 프리미티브들이 복수의 타일들(예를 들어, tile A, tile B, tile C 및 tile D)에 포함되는지 여부를 판단한다. 즉, 비너(135)는 출력 패치(1900)의 출력 프리미티브들에 대하여 타일 크로싱 여부를 판단한다. 만약, 출력 패치(1900)가 타일 크로싱된 경우 1915 단계로 진행되고, 출력 패치(1900)가 타일 크로싱되지 않는 경우 1930 단계로 진행된다.
1915 단계에서, 비너(135)는 복수의 타일들(tile A, tile B, tile C 및 tile D)의 렌더링 순서를 스케쥴링한다. 스케쥴링 결과, 비너(135)는 복수의 타일들 중 첫번째 렌더링 순서로 스케쥴링된 타일(tile A)을, 기준 타일로 결정할 수 있다.
1921 단계에서, 기준 타일 tile A에 대하여, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(1801)을 이용하여 버텍스 쉐이딩(1821)을 수행한다.
1922 단계에서, GPU(10)는 기준 타일 tile A에 대하여, 헐 쉐이더(121)에 의한 헐 쉐이딩(1822), 테셀레이터(123)에 의한 테셀레이팅(1823) 및 도메인 쉐이더(125)에 의한 도메인 쉐이딩(1824)을 포함하는 테셀레이션 파이프라인을 수행한다.
1923 단계에서, GPU(10)는, 기준 타일 tile A에 대하여, 테셀레이션 파이프라인에 의해 생성된, 테셀레이팅된 프리미티브들을 렌더링한다. 즉, GPU(10)는, 기준 타일 tile A에 대하여, 래스터라이징(1826) 및 픽셀 쉐이딩(1827)을 수행한다.
1924 단계에서, 비너(135)는, 패치(1900)가 이웃 타일들(tile B, tile C 및 tile D) 각각에서 가시적인지 여부를 나타내는 가시성 스트림을 생성하는 비닝(1828)을 수행하고, 이웃 타일들(tile B, tile C 및 tile D)에 대한 가시성 스트림을 저장한다. 도 19에서는 비록 도시되지 않았지만, GPU(10)는 저장된 가시성 스트림을 이용하여 이웃 타일들(tile B, tile C 및 tile D)에 대한 렌더링 파이프라인(102-2)을 각각 수행한다. 이때, 이웃 타일들(tile B, tile C 및 tile D)에 대한 렌더링 파이프라인(102-2)에서는, 이웃 타일들(tile B, tile C 및 tile D)에 대한 가시성 스트림에 의해 가시적인 버텍스, 가시적인 프리미티브, 또는 가시적인 패치만이 처리될 수도 있다.
1930 단계에서, GPU(10)는, 출력 패치(1900)가 타일 크로싱되지 않는 경우(출력 패치(1900)가 하나의 타일에만 포함된 경우), 출력 패치(1900)가 포함된 타일에 대하여 렌더링 파이프라인(102-2)을 수행한다.
도 20은 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 20을 참고하면, 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-2)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ⑥에 대응될 수 있다. 한편, 도 20에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 20에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
도 20에 도시된 그래픽스 파이프라인에 대해서는, 설명의 편의를 위하여 도 21에 도시된, 복수의 타일들(tile A, tile B, tile C 및 tile D)에 크로싱된 패치(2100)에 대해 수행되는 것으로 가정하여 설명하도록 한다.
버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(2001)을 이용하여 버텍스 쉐이딩(2011)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(2001)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치(2100)를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(2012)을 수행한다. 헐 쉐이더(121)는 패치(2100)를 구성하는 출력 컨트롤 포인트들을 생성함과 동시에, 제 1 테셀레이션 팩터(TF)를 결정할 수 있다.
테셀레이터(123)는 헐 쉐이더(121)로부터 제 1 테셀레이션 팩터(TF)를 수신하고, 제 1 테셀레이션 팩터(TF)보다 낮은 제 2 테셀레이션 팩터(TF)를 새로 설정한다. 그리고, 테셀레이터(123)는 새로 설정된 제 2 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(2013)을 수행한다.
도메인 쉐이더(125)는 출력 패치(2100)의 출력 컨트롤 포인트들 및 제 2 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(2014)을 수행한다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(2015)을 수행하기 위해 사용될 수도 있는 옵션적인 구성요소이다. 따라서, 지오메트리 쉐이딩(2015)은 스킵될 수도 있다.
비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(2016) 또는 타일링을 수행한다. 즉, 비너(135)는 깊이 테스트(또는 tile Z test) 등을 수행하여, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(2016)을 수행한다. 이때, 비닝된 타일 리스트는, 가시성 스트림으로서 메모리(30)의 빈 스트림(2002)에 저장될 수 있다.
비너(135)는 비닝(2016) 결과, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 복수의 타일들(예를 들어, 도 21의 tile A, tile B, tile C 및 tile D)에 포함되는지 여부를 판단한다. 즉, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)에 대하여 타일 크로싱 여부를 판단한다.
제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 타일 크로싱된 경우(또는 출력 패치가 복수의 타일들(tile A, tile B, tile C 및 tile D)에 포함되는 경우), 비너(135)는 복수의 타일들(tile A, tile B, tile C 및 tile D)의 렌더링 순서를 스케쥴링한다. 스케쥴링 결과, 비너(135)는 복수의 타일들 중 첫번째 렌더링 순서로 스케쥴링된 타일(tile A)을, 기준 타일(reference tile)로 결정할 수 있다. 여기서, 기준 타일은 복수의 타일들 중 가장 좌상단에 위치한 tile A 인 것으로 가정하나, 이에 제한되지 않고 기준 타일은 좌하단 타일, 우상단 타일, 우하단 타일, 가운데 타일 등의 다양한 소정 기준들에 의해 달라질 수 있다. 비너(135)는 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)이, 이웃 타일들 tile B, tile C 및 tile D보다 먼저 수행되도록, 렌더링 파이프라인(102-2)의 수행 타이밍을 스케쥴링한다. 복수의 타일들(tile A, tile B, tile C 및 tile D) 각각에 대한 렌더링 파이프라인(102-2)은, GPU(10) 내의 하나의 프로세서 유닛(또는 하나의 프로세서 코어)에 의해 순차적으로 수행되거나, 또는 GPU(10) 내의 복수의 프로세서 유닛들(또는 복수의 프로세서 코어들)에 의해 병렬적으로 수행될 수 있다. 이와 같은, 기준 타일의 결정 및 렌더링 타이밍의 스케쥴링은 비너(135)가 아닌, 컨트롤러(170) 또는 GPU(10) 내의 다른 구성들에 의해 수행될 수도 있다. 즉, 기준 타일의 결정 및 렌더링 타이밍의 스케쥴링의 수행 주체는 어느 하나에 의해 제한되지 않는다.
제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 타일 크로싱된 경우, 비너(135)는 기준 타일(tile A)의 결정 결과 및 렌더링 타이밍의 스케쥴링 결과를 메모리(30)에 저장한다.
이와 달리, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 타일 크로싱되지 않은 경우(또는 출력 패치가 하나의 타일에만 포함되는 경우), 비너(135)는 기준 타일의 결정 및 렌더링 타이밍의 스케줄링을 수행하지 않을 수 있다.
GPU(10)는 비닝 파이프라인(101-4)이 완료된 경우, 타일 단위로 렌더링 파이프라인(102-2)을 수행한다. 이때, 비닝 파이프라인(101-4)에서 기준 타일이 tile A인 것으로 결정되었으므로, GPU(10)는 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)을 먼저 수행한다.
기준 타일 tile A에 대한 렌더링 파이프라인(102-2)은 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(2021), 헐 쉐이더(121)에 의한 헐 쉐이딩(2022), 테셀레이터(123)에 의한 테셀레이팅(2023), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(2024), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(2025), 래스터라이저(140)에 의한 래스터라이징(2026), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(2027)의 스테이지들을 포함할 수 있다. 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(2027) 결과는 버퍼(2003)에 저장될 수 있다.
한편, 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)에서는, 비너(135)에 의한 비닝(2028)이 추가적으로 수행된다. 보다 상세하게 설명하면, 비너(135)는, 패치(2100)가 기준 타일 tile A에 인접한 이웃 타일들(tile B, tile C 및 tile D) 각각에서 가시적인지 여부를 나타내는 가시성 스트림을 생성하는 비닝(2028)을 수행한다. 여기서, 가시성 스트림은 본 명세서에서 설명되는 모든 종류의 가시성 스트림들을 포함할 수 있다. 이에 따라, GPU(10)는 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)에서 생성된 이웃 타일들(tile B, tile C 및 tile D)에 대한 가시성 스트림을 이용하여, 이웃 타일들(tile B, tile C 및 tile D) 각각에 대한 렌더링 파이프라인(102-2)이 독립적으로 수행될 때, 가시적인 버텍스, 가시적인 프리미티브, 또는 가시적인 패치만을 처리할 수 있으므로, 이웃 타일들(tile B, tile C 및 tile D) 각각에 대한 렌더링 파이프라인(102-2)에서의 데이터 연산량이 줄어들 수 있다.
이상에서 설명된 MODE ⑥에 따른 도 20의 그래픽스 파이프라인은 비닝 파이프라인(101-4)에서 낮은 테셀레이션 팩터에 의한 적은 수의 테셀레이팅된 프리미티브들만이 생성(produce)될 수 있다. 따라서, 도 3의 테셀레이션 파이프라인(도 3의 300)과 비교할 때, 그래픽 데이터의 연산량을 보다 줄일 수 있다.
도 21은 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 21의 흐름도는, 도 20에서 설명된 MODE ⑥에 따른 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-2)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 20에서 설명되었던 내용은 도 21의 흐름도에 적용될 수 있다.
2111 단계 내지 2117 단계를 포함하는 파이프라인(2110)은 비닝 파이프라인(101-4)에 대응되고, 2121 단계 내지 2124 단계를 포함하는 파이프라인(2120)은 기준 타일 tile A에 대한 렌더링 파이프라인(102-2)에 대응될 수 있다.
2111 단계에서, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(2001)을 이용하여 버텍스 쉐이딩(2011)을 수행한다.
2112 단계에서, 헐 쉐이더(121)는 입력 컨트롤 포인트들을, 패치(2100)를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(2012)을 수행한다.
2113 단계에서, 테셀레이터(123)는 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)보다 낮은 제 2 테셀레이션 팩터(TF)를 이용하여, 출력 패치(2100)의 출력 컨트롤 포인트들에 대한 테셀레이팅(2013)을 수행한다.
2114 단계에서, 도메인 쉐이더(125)는 출력 패치(2100)의 출력 컨트롤 포인트들 및 제 2 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(2014)을 수행한다.
2115 단계에서, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)을 이용하여, 비닝(2016) 또는 타일링을 수행한다. 그리고, 비너(135)는 비닝(2016) 결과, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들) 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 메모리(30)의 빈 스트림(2002)에 저장한다.
2116 단계에서, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 복수의 타일들(예를 들어, tile A, tile B, tile C 및 tile D)에 포함되는지 여부를 판단한다. 즉, 비너(135)는 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)에 대하여 타일 크로싱 여부를 판단한다. 만약, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 타일 크로싱된 경우 2117 단계로 진행되고, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 타일 크로싱되지 않는 경우 2130 단계로 진행된다.
2117 단계에서, 비너(135)는 복수의 타일들(tile A, tile B, tile C 및 tile D)의 렌더링 순서를 스케쥴링한다. 스케쥴링 결과, 비너(135)는 복수의 타일들 중 첫번째 렌더링 순서로 스케쥴링된 타일(tile A)을, 기준 타일로 결정할 수 있다.
2121 단계에서, 기준 타일 tile A에 대하여, 버텍스 쉐이더(115)는 메모리(30)에 저장된 버텍스들(2001)을 이용하여 버텍스 쉐이딩(2021)을 수행한다.
2122 단계에서, GPU(10)는 기준 타일 tile A에 대하여, 헐 쉐이더(121)에 의한 헐 쉐이딩(2022), 테셀레이터(123)에 의한 테셀레이팅(2023) 및 도메인 쉐이더(125)에 의한 도메인 쉐이딩(2024)을 포함하는 테셀레이션 파이프라인을 수행한다.
2123 단계에서, GPU(10)는, 기준 타일 tile A에 대하여, 테셀레이션 파이프라인에 의해 생성된, 테셀레이팅된 프리미티브들을 렌더링한다. 즉, GPU(10)는, 기준 타일 tile A에 대하여, 래스터라이징(2026) 및 픽셀 쉐이딩(2027)을 수행한다.
2124 단계에서, 비너(135)는, 패치(2100)가 이웃 타일들(tile B, tile C 및 tile D) 각각에서 가시적인지 여부를 나타내는 가시성 스트림을 생성하는 비닝(2028)을 수행하고, 이웃 타일들(tile B, tile C 및 tile D)에 대한 가시성 스트림을 저장한다. 도 21에서는 비록 도시되지 않았지만, GPU(10)는 저장된 가시성 스트림을 이용하여 이웃 타일들(tile B, tile C 및 tile D)에 대한 렌더링 파이프라인(102-2)을 각각 수행한다. 이때, 이웃 타일들(tile B, tile C 및 tile D)에 대한 렌더링 파이프라인(102-2)에서는, 이웃 타일들(tile B, tile C 및 tile D)에 대한 가시성 스트림에 의해 가시적인 버텍스, 가시적인 프리미티브, 또는 가시적인 패치만이 처리될 수도 있다.
2130 단계에서, GPU(10)는, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 타일 크로싱되지 않는 경우(제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 하나의 타일에만 포함된 경우), 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)이 포함된 타일에 대하여 렌더링 파이프라인(102-2)을 수행한다.
도 22는 다른 실시예에 따라 패치의 테셀레이션 결과 패치가 속하는 타일 리스트와 테셀레이팅된 프리미티브들이 속하는 타일 리스트가 다른 경우를 설명하기 위한 도면이다.
일반적으로, 테셀레이션 파이프라인(도 3의 300)에서 헐 쉐이더(121)와 도메인 쉐이더(125)는 프로그래머블(programmable)하나, 테셀레이터(123)는 프로그래머블 하지 않다고 알려져 있다. 따라서, 경우에 따라서 테셀레이션 파이프라인(도 3의 300)을 코딩하는 개발자는, 출력 패치(2213)가 하나의 타일(tile 0)에 포함되나 테셀레이팅된 프리미티브들(2225)은 두 개의 타일들(tile 0 및 tile 1)에 포함되도록, 헐 쉐이더(121)와 도메인 쉐이더(125)를 잘못 프로그래밍할 수 있다. 즉, 테셀레이팅된 프리미티브들(2225) 중에서 잘못 예측된(mispredicted) 프리미티브들(2230)이 존재할 수 있다. 이하의 도 23 및 도 24에서는 렌더링 파이프라인 동안, 비닝 파이프라인에서 잘못 예측된 타일 리스트가 발견된 경우에 관한 그래픽스 파이프라인에 대해 설명하도록 한다.
도 23은 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 23을 참고하면, 비닝 파이프라인(101-3) 및 렌더링 파이프라인(102-3)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ⑦에 대응될 수 있고, 비닝 파이프라인(101-4) 및 렌더링 파이프라인(102-4)을 포함하는 그래픽스 파이프라인은, 도 7에서 설명된 MODE ⑧에 대응될 수 있다. 한편, 도 23에 도시된 그래픽스 파이프라인에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 23에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
GPU(10)는 앞서 도면들에서 설명된 비닝 파이프라인(101-3 또는 101-4)을 수행한다. 비닝 파이프라인(101-3 또는 101-4)의 비닝 결과는 가시성 스트림으로서 메모리(30)의 빈 스트림(2302)에 저장될 수 있다. 다음으로, GPU(10)는 제 1 렌더링 파이프라인(102-3)을 수행한다. 제 1 렌더링 파이프라인(102-3)은 타일 단위로 수행되며, 도 23에서 제 1 렌더링 파이프라인(102-3)에서 수행되는 현재 타일은 tile X 인 것으로 가정한다.
버텍스 쉐이더(115)는 빈 스트림(2302)의 비닝 결과에 기초하여, tile X에 속하는 버텍스들(2301)을 이용하여 버텍스 쉐이딩(2311)을 수행한다. 버텍스 쉐이더(115)는 버텍스들(2301)을 변환하여, 헐 쉐이더(121)에 입력 컨트롤 포인트들로 전달한다.
헐 쉐이더(121)는 낮은 차수의 표면을 표현하는 입력 컨트롤 포인트들을, 패치를 구성하는 출력 컨트롤 포인트들로 변환하는 헐 쉐이딩(2312)을 수행한다. 헐 쉐이더(121)는 패치를 구성하는 출력 컨트롤 포인트들을 생성함과 동시에, 테셀레이션 팩터(TF)를 결정할 수 있다.
테셀레이터(123)는 헐 쉐이더(121)로부터 수신된 테셀레이션 팩터(TF)를 이용하여, 출력 컨트롤 포인트들에 대한 무게중심 좌표계에서의 uvw 좌표들 및 가중치들을 계산하는 테셀레이팅(2313)을 수행한다.
도메인 쉐이더(125)는 출력 패치의 출력 컨트롤 포인트들 및 테셀레이션 팩터(TF)에 대한 정보와 테셀레이터(123)로부터 수신된 uvw 좌표들 (w 좌표는 옵션적) 및 가중치들을 이용하여 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)을 생성하는 도메인 쉐이딩(2314)을 수행한다.
지오메트리 쉐이더(130)는 도메인 쉐이더(125)로부터 수신된 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)로부터 추가적인 버텍스들(또는 프리미티브들)을 생성하는 지오메트리 쉐이딩(2315)을 수행하기 위해 사용될 수도 있는 옵션적인 구성요소이다. 따라서, 지오메트리 쉐이딩(2315)은 스킵될 수도 있다.
래스터라이저(140)는 현재 타일인 tile X에 포함된, 테셀레이팅된 버텍스들(또는 테셀레이팅된 프리미티브들)에 대한 래스터라이징(2316)을 수행하고, 픽셀 쉐이더(150)는 래스터라이징된 프리미티브들에 대응되는 픽셀들에 대한 픽셀 쉐이딩(2317)을 수행한다. 현재 타일인 tile X에 대한 픽셀 쉐이딩(2317) 결과는 버퍼(2304)에 저장된다.
비너(135)는 현재 타일인 tile X에 포함된 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)에 대한 비닝(2318) 또는 타일링을 수행하고, 비닝(2318) 결과를 비닝 파이프라인(101-3 또는 101-4)에 의해 빈 스트림(2302)에 저장된 타일 리스트와 비교함으로써 tile X에 포함된 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)의 타일 위치들 중 잘못 예측된(mispredicted) 타일이 존재하는지 여부를 판단한다. 만약, 잘못 예측된 타일이 없는 경우, GPU(10)는 tile X의 다음 타일에 대한 제 1 렌더링 파이프라인(102-3)을 수행한다. 하지만, 비너(135)는 잘못 예측된 타일이 있는 경우, 잘못 예측된 타일에 대한 타일 리스트를 빈 스트림(2302)에 업데이트하거나, 또는 잘못 예측된 빈 스트림(mispredicted bin stream)(2303)에 저장한다. 여기서, 잘못 예측된 타일에 대한 타일 리스트를 빈 스트림(2302)에 업데이트하는 것은 잘못 예측된 타일에 대한 렌더링이 시작되지 않았을 경우에 수행될 수 있고, 잘못 예측된 타일에 대한 타일 리스트를 잘못 예측된 빈 스트림(2303)에 저장하는 것은 잘못 예측된 타일에 대한 렌더링이 완료되었을 경우에 수행될 수 있다.
GPU(10)는 모든 타일들에 대하여 타일 단위로 제 1 렌더링 파이프라인(102-3)을 완료한 후, 잘못 예측된 빈 스트림(2303)에 잘못 예측된 타일 리스트(mispredicted tile list)가 존재하는지 여부를 판단한다. 잘못 예측된 타일 리스트가 잘못 예측된 빈 스트림(2303)에 존재하는 경우, GPU(10)는 잘못 예측된 타일 리스트에 포함된 타일들에 대하여 제 2 렌더링 파이프라인(102-4)을 수행한다. 여기서, 잘못 예측된 타일 리스트에 포함된 타일들은 슈퍼 타일(super tile)이라고 부를 수 있다. 제 2 렌더링 파이프라인(102-4)은 잘못 예측된 타일 리스트에 포함된 타일들에 대하여 하나의 타일 단위로 수행되거나, 또는 슈퍼 타일 단위로 수행될 수 있다. 즉, GPU(10)는 하나의 타일 단위로 또는 슈퍼 타일 단위로, 버텍스 쉐이더(115)에 의한 버텍스 쉐이딩(2321), 헐 쉐이더(121)에 의한 헐 쉐이딩(2322), 테셀레이터(123)에 의한 테셀레이팅(2323), 도메인 쉐이더(125)에 의한 도메인 쉐이딩(2324), 지오메트리 쉐이더(130)에 의한 옵션적인 지오메트리 쉐이딩(2325), 래스터라이저(140)에 의한 래스터라이징(2326), 픽셀 쉐이더(150)에 의한 픽셀 쉐이딩(2327)의 스테이지들을 포함하는 제 2 렌더링 파이프라인(102-4)을 수행할 수 있다. 슈퍼 타일에 대한 픽셀 쉐이딩(2327) 결과는 버퍼(2304)에 저장되고, 이로써 그래픽스 파이프라인은 완료될 수 있다.
도 24는 또 다른 실시예에 따라 GPU에서 수행되는 그래픽스 파이프라인의 흐름도이다. 도 24의 흐름도는, 도 23에서 설명된 MODE ⑦ 또는 ⑧에 따른 비닝 파이프라인(101-3 또는 101-4), 제 1 렌더링 파이프라인(102-3) 및 제 2 렌더링 파이프라인(102-4)을 포함하는 그래픽스 파이프라인을 수행하는 흐름도이다. 따라서, 이하 생략된 내용이라 할지라도, 도 23에서 설명되었던 내용은 도 24의 흐름도에 적용될 수 있다.
2401 단계에서, GPU(10)는 비닝 파이프라인(101-3 또는 101-4)를 수행하여 타일 리스트를 비닝한다.
2402 단계에서, GPU(10)는 비닝된 타일 리스트를 제 1 빈 스트림(도 23의 2302)에 저장한다.
2403 단계에서, GPU(10)는 현재 타일인 tile X에 대하여, 제 1 빈 스트림(도 19의 1902)을 이용하여 제 1 렌더링 파이프라인(102-3) 중 테셀레이션 파이프라인(도 23의 2312 내지 2314)을 수행한다.
2404 단계에서, GPU(10)는 현재 타일인 tile X에 대하여, 테셀레이션 파이프라인(도 23의 2312 내지 2314)으로부터 출력된, 테셀레이팅된 프리미티브들을 이용하여 나머지 파이프라인(도 23의 2316 내지 2317)을 수행한다.
2405 단계에서, GPU(10)는 모든 타일들에 대한 렌더링이 완료되었는지 여부를 판단한다. 만약, 모든 타일들에 대한 렌더링이 완료된 경우, 2410 단계로 진행된다. 그러나, 모든 타일들에 대한 렌더링이 완료되지 않은 경우, tile X의 다음 타일에 대하여 2403 단계가 수행된다.
2406 단계에서, GPU(10)는 현재 타일인 tile X에 포함된 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)에 대한 비닝(2318) 또는 타일링을 수행하고, 비닝(2318) 결과를 비닝 파이프라인(101-3 또는 101-4)에 의해 빈 스트림(2302)에 저장된 타일 리스트와 비교함으로써 tile X에 포함된 테셀레이팅된 프리미티브들(테셀레이팅된 버텍스들)의 타일 위치들 중 잘못 예측된(mispredicted) 타일이 존재하는지 여부를 판단한다. 만약, 잘못 예측된 타일이 없는 경우, 2405 단계로 진행된다. 그러나, 잘못 예측된 타일이 있는 경우, 2407 단계로 진행된다.
2407 단계에서, GPU(10)는 잘못 예측된 타일이 이미 렌더링이 완료된 타일인지 여부를 판단한다. 만약, 잘못 예측된 타일이 이미 렌더링이 완료된 타일인 경우, 2408 단계로 진행된다. 그러나, 잘못 예측된 타일이 이미 렌더링이 완료된 타일이 아닌 경우, 2409 단계로 진행된다.
2408 단계에서, GPU(10)는 잘못 예측된 타일에 관한 타일 리스트를, 제 2 빈 스트림(도 23의 2303)에 저장한다.
2409 단계에서, GPU(10)는 잘못 예측된 타일에 대한 타일 리스트를, 제 1 빈 스트림(도 23의 2302)에 업데이트한다.
2410 단계에서, GPU(10)는 제 2 빈 스트림(도 23의 2303)에 잘못 예측된 타일 리스트가 존재하는지 여부를 판단한다. 만약, 제 2 빈 스트림(도 23의 2303)에 잘못 예측된 타일 리스트가 없는 경우, 그래픽스 파이프라인은 종료된다. 그러나, 제 2 빈 스트림(도 23의 2303)에 잘못 예측된 타일 리스트가 있는 경우, 2411 단계로 진행된다.
2411 단계에서, GPU(10)는 제 2 빈 스트림(도 23의 2303)에 기초하여 잘못 예측된 타일(슈퍼 타일)에 대하여 제 2 렌더링 파이프라인(도 23의 102-4)을 수행한다.
도 25는 일 실시예에 따른 컴퓨팅 디바이스의 상세 하드웨어 구성을 도시한 블록도이다.
도 25를 참고하면, 컴퓨팅 디바이스(1)는 GPU(10), CPU(20), 메모리(30), 버퍼들(35), Bus(40), 디스플레이부(2501), 입력부(2503) 및 통신부(2505)를 포함한다. 도 25에 도시된 컴퓨팅 장치(1)에는 실시예와 관련된 구성요소들만이 도시되어 있다. 따라서, 도 25에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
GPU(10), CPU(20) 및 메모리(30)는 앞서 도면들에서 설명된 동작들 및 기능들을 수행할 수 있다.
버퍼들(35)은 타일 기반 그래픽스 파이프라인 또는 타일 기반 렌더링을 통해 출력된 타일 정보들을 저장한다. 예를 들어, 버퍼들(35)은 타일에서의 깊이 테스트(depth test) 결과를 저장하거나, 타일에서의 렌더링 결과를 저장할 수 있다. 비록 도 21에서 버퍼들(35)은 컴퓨팅 장치(1) 내에서 GPU(10), CPU(20) 또는 메모리(30)와 별도로 구비된 것으로 도시되어 있으나, 버퍼들(35)은 GPU(10), CPU(20) 또는 메모리(30) 내에 구비된 것일 수도 있다.
디스플레이부(2501)는 컴퓨팅 장치(1)에서 처리되는 정보 또는 처리될 정보 등의 각종 정보들을 사용자에게 표시하기 위한, 표시 인터페이싱 수단이다. 디스플레이부(2501)는 컴퓨팅 장치(1)에서 처리되는 정보들을 사용자에게 시각적이고 직관적으로 제공하기 위한 GUI(Graphical User Interface)를 디스플레이 할 수도 있다. 예를 들어, 디스플레이부(2501)는 GPU(10)에 의해 처리된 그래픽 데이터를 디스플레이할 수 있다. 디스플레이부(2501)는 LCD(Liquid Crystal Display), LED(light emitting diode), PDP(Plasma Display Panel) 등의 다양한 디스플레이 패널들로 구현될 수 있다.
입력부(2503)는 사용자로부터 정보를 입력받기 위한, 입력 인터페이싱 수단이다. 입력부(2503)는 터치 패드, 트랙볼, 마우스, 키보드, 게임용 컨트롤러 등과 같은 형태로 구현될 수 있다. 디스플레이부(2501)와 입력부(2503)는 일체화된 터치 스크린의 하드웨어로 구현될 수 있다.
통신부(2505)는 이동통신을 위한 이동통신 모듈, 유선/무선 랜(LAN) 모듈, 근거리 무선 통신을 위한 Wi-Fi 모듈, Bluetooth 모듈, NFC(near field communication) 모듈 등을 포함할 수 있다.
도 26은 일 실시예에 따라 GPU에서 처리될 그래픽스 파이프라인의 종류를 선택하기 위한 조건을 설명하기 위한 도면이다.
앞서 도 7에서 MODE ① 내지 MODE ⑧은 사용자 입력에 의해 어느 하나가 선택될 수도 있고, 또는 그래픽 처리 환경에 따라 어느 하나가 선택될 수도 있다. 도 26에 따르면, GPU(10)는 한 타일(2610 또는 2620)의 크기에 대한 객체(2615 또는 2625)의 크기(또는 객체(2615 또는 2625)를 구성하는 패치의 크기)의 비율에 따라서 MODE ① 내지 MODE ⑧ 중 어느 하나를 선택할 수 있다. 예를 들어, 한 타일(2610 또는 2620)의 크기에 대한 객체(2615 또는 2625)의 크기(또는 객체(2615 또는 2625)를 구성하는 패치의 크기)의 비율은, (a)와 (b)가 서로 다르다. 이와 같은 점을 이용하여, GPU(10)는 MODE ① 내지 MODE ⑧ 각각에 대하여 소정의 임계 범위를 설정하고, 계산된 비율이 속하는 범위에 대응되는 효율 모드로 그래픽스 파이프라인이 수행되도록 제어할 수 있다.
도 27은 다른 실시예에 따라 GPU에서 처리될 그래픽스 파이프라인의 종류를 선택하기 위한 조건을 설명하기 위한 도면이다.
도 27에 따르면, GPU(10)는 타일(2710 또는 2720) 상의 객체(2715 또는 2725)(또는 객체(2715 또는 2725)를 구성하는 패치)의 위치에 따라서 MODE ① 내지 MODE ⑧ 중 어느 하나를 선택할 수 있다. 예를 들어, 타일(2710 또는 2720)의 경계와 객체(2715 또는 2725)(또는 객체(2715 또는 2725)를 구성하는 패치)의 경계 사이의 거리(distance(a) 또는 distance(b))는, (a)와 (b)가 서로 다르다. 이와 같은 점을 이용하여, GPU(10)는 MODE ① 내지 MODE ⑧ 각각에 대하여 소정의 임계 범위를 설정하고, 계산된 거리가 속하는 범위에 대응되는 효율 모드로 그래픽스 파이프라인이 수행되도록 제어할 수 있다.
도 28은 일 실시예에 따른 그래픽스 파이프라인에서 메모리의 빈 스트림에 저장된 가시성 스트림이 적용되는 예시를 설명하기 위한 도면이다.
도 28을 참고하면, 비닝 파이프라인(101)의 비닝(2811)이 수행된 경우, 메모리(30)의 빈 스트림(2802)에는 입력-패치 가시성 스트림(input-patch visibility stream)이 저장될 수 있다. 또한, 비닝 파이프라인(101)의 비닝(2811)이 수행된 경우, 메모리(30)의 빈 스트림(2802)에는 출력-프리미티브 가시성 스트림(output-primitive visibility stream)이 저장될 수 있다. 여기서, 비닝(2811)은, 앞서 도면들에서 설명된 다양한 종류의 그래픽스 파이프라인들에 포함된 비닝 스테이지들에 해당될 수 있다.
입력-패치 가시성 스트림은, 렌더링 파이프라인(102) 동안 헐 쉐이더(121)의 헐 쉐이딩(2821)의 수행을 위해 입력될 입력 패치의 가시성을 나타내는 입력-패치 가시성 마스크(input-patch visibility mask)에 대한 정보를 포함할 수 있다. 즉, 입력-패치 가시성 마스크는 입력 패치가 타일에서 보이는지 보이지 않는지 여부를 나타내는 0 또는 1의 비트 표현일 수 있다. 따라서, 입력-패치 가시성 스트림을 이용함으로써, 헐 쉐이더(121)는 렌더링 파이프라인(102) 동안 가시적인 입력 패치들만으로 헐 쉐이딩(2821)을 수행할 수 있으므로, 렌더링 파이프라인(102)에서의 연산량이 감소될 수 있다.
마찬가지로, 출력-프리미티브 가시성 스트림은, 렌더링 파이프라인(102) 동안 프리미티브 어셈블링(primitive assembling)(2822)의 수행을 위해 입력될, 출력 프리미티브들의 가시성을 나타내는 출력-프리미티브 가시성 마스크(output-primitive visibility mask)에 대한 정보를 포함할 수 있다. 즉, 출력-프리미티브 가시성 마스크는 출력 프리미티브가 타일에서 보이는지 보이지 않는지 여부를 나타내는 0 또는 1의 비트 표현일 수 있다. 따라서, 출력-프리미티브 가시성 스트림을 이용함으로써, GPU(10)는 렌더링 파이프라인(102) 동안 가시적인 출력 프리미티브들만으로 프리미티브 어셈블링(2822)을 수행할 수 있으므로, 렌더링 파이프라인(102)에서의 연산량이 감소될 수 있다.
도 29는 다른 실시예에 따른 그래픽스 파이프라인에서 메모리의 빈 스트림에 저장된 가시성 스트림이 적용되는 예시를 설명하기 위한 도면이다.
도 29를 참고하면, 도 18 내지 도 21에서 설명된 바와 같이, 기준 타일(예를 들어, 도 19 및 도 21의 tile A)에 대한 렌더링 파이프라인(102)의 비닝(2911)이 수행된 경우, 메모리(30)의 빈 스트림(2902)에는 버텍스 가시성 스트림(vertex visibility stream)이 저장될 수 있다. 또한, 렌더링 파이프라인(102)의 비닝(2811)이 수행된 경우, 메모리(30)의 빈 스트림(2902)에는 도메인 가시성 스트림(domain visibility stream)이 저장될 수 있다. 여기서, 비닝(2911)은, 도 19 및 도 21 뿐만 아니라, 앞서 도면들에서 설명된 다양한 종류의 그래픽스 파이프라인들에 포함된 비닝 스테이지들에 해당될 수 있다.
버텍스 가시성 스트림은, 기준 타일(예를 들어, 도 19 및 도 21의 tile A)에 인접한 이웃 타일(예를 들어, 도 19 및 도 21의 tile B, tile C 또는 tile D)에 대한 렌더링 파이프라인(102) 동안 버텍스 쉐이더(115)의 버텍스 쉐이딩(2921)의 수행을 위해 입력될 버텍스의 가시성을 나타내는 버텍스 가시성 마스크(vertex visibility mask)에 대한 정보를 포함할 수 있다. 즉, 버텍스 가시성 마스크는 버텍스가 타일에서 보이는지 보이지 않는지 여부를 나타내는 0 또는 1의 비트 표현일 수 있다. 따라서, 버텍스 가시성 스트림을 이용함으로써, 버텍스 쉐이더(115)는 렌더링 파이프라인(102) 동안 가시적인 버텍스들만으로 버텍스 쉐이딩(2921)을 수행할 수 있으므로, 렌더링 파이프라인(102)에서의 연산량이 감소될 수 있다.
마찬가지로, 도메인 가시성 스트림은, 렌더링 파이프라인(102) 동안 도메인 쉐이더(125)의 도메인 쉐이딩(2922)의 수행을 위해 입력될, 출력 패치들의 가시성을 나타내는 도메인 가시성 마스크(domain visibility mask)에 대한 정보를 포함할 수 있다. 즉, 도메인 가시성 마스크는 출력 프리미티브가 타일에서 보이는지 보이지 않는지 여부를 나타내는 0 또는 1의 비트 표현일 수 있다. 따라서, 도메인 가시성 스트림을 이용함으로써, 도메인 쉐이더(125)는 렌더링 파이프라인(102) 동안 가시적인 출력 패치들만으로 도메인 쉐이딩(2922)을 수행할 수 있으므로, 렌더링 파이프라인(102)에서의 연산량이 감소될 수 있다.
한편, 본 명세서에서 설명되는 가시성 스트림은 위와 같은, 입력-패치 가시성 스트림, 출력-프리미티브 가시성 스트림, 버텍스 가시성 마스크 또는 도메인 가시성 스트림을 포함할 수 있으나, 이에 제한되지 않는다.
도 30은 일 실시예에 따라 비닝 파이프라인이 완료되어 빈 스트림에 저장되는 가시성 스트림을 설명하기 위한 도면이다.
앞서 설명된 바와 같이, GPU(10)는 비닝 파이프라인(101)이 완료된 경우, 메모리(30)에 가시성 스트림을 저장할 수 있다. 도 30을 참고하면, 가시성 스트림은 입력 가시성 스트림 및 출력 가시성 스트림을 포함할 수 있다.
입력 가시성 스트림은 각각의 패치에 대해 1들과 0들의 스트링을 포함할 수 있다. 각각의 비트는 패치의 적어도 일부가 최종 프레임에서 보인다는 것을 의미한다. 예를 들어, 패치 2에 대한 비트 1은 패치 2가 최종 프레임에서 보인다는 것을 의미하고, 비트 0을 갖는 다른 패치들은 최종 장면에서 보이지 않는다는 것을 의미한다. 출력 가시성 스트림은 각각의 프리미티브들에 대해 1들과 0들의 스트림을 포함할 수도 있는데, 하나의 비트는 최종 장면에서 보이는 픽셀에 대해 그 프리미티브가 기여한다는 것을 나타내고 (예를 들면, 프리미티브 0에 대한 비트 1), 비트 0은 최종 장면에서 보이는 픽셀에 대해 그 프리미티브가 기여하지 않는다는 것을 나타낸다 (예를 들어 프리미티브 6에 대한 비트 0).
출력 가시성 스트림들은 패치 단위 기준으로 생성될 수 있다. 즉, 각각의 타일에 대한 패치마다 하나의 출력 가시성 스트림이 존재할 수 있다. 또는 각각의 타일은 입력 프리미티브들로부터 생성된 출력 프리미티브들을 모두 함께 연결하는 하나의 출력 가시성 스트림을 가질 수 있다.
도 31은 다른 실시예에 따라 비닝 파이프라인이 완료되어 빈 스트림에 저장되는 가시성 스트림을 설명하기 위한 도면이다.
도 31을 참고하면, 출력 가시성 스트림(3110)은 헐 쉐이더(121)로부터 출력된 출력 패치에 대하여 생성될 수도 있고, 출력 가시성 스트림(3120)은 도메인 쉐이더(125)로부터 출력된 테셀레이팅된 프리미티브들에 대하여 생성될 수도 있다. 하지만, 이에 제한되지 않는다.
도 32는 일 실시예에 따른 컴퓨팅 장치에서 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 32에 도시된, 컴퓨팅 장치(1)의 그래픽스 파이프라인의 수행 방법은, 앞서 설명된 도 10 및 도 11 등에서 설명된 실시예(MODE ①)와 관련된다. 따라서, 이하 생략된 내용이라 할지라도, 도 10 및 도 11 등에서 앞서 설명된 내용들은 도 32의 그래픽스 파이프라인의 수행 방법에도 적용될 수 있다.
3201 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 헐 쉐이더(121)로부터 출력된 출력 패치가 포함된 타일의 개수에 기초하여 출력 패치에 대한 테셀레이팅을 스킵할 것인지를 판단하고, 판단 결과에 따라 출력 패치 또는 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는, 비닝 파이프라인(101-1)을 수행한다.
3202 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인(102-1)을 수행한다.
보다 상세하게 설명하면, 비닝 파이프라인(101-1)을 수행하는 3201 단계는, 출력 패치가 포함된 타일의 개수가 한 개인 경우, 테셀레이터(123)에 의해 수행될 출력 패치에 대한 테셀레이팅을 스킵할 수 있다. 비닝 파이프라인(101-1)을 수행하는 3201 단계는, 입력 패치를 헐 쉐이더(121)에서 헐 쉐이딩함으로써 출력 패치를 생성하고, 출력 패치에 대한 타일 리스트를 비닝하고, 출력 패치가 한 타일에 포함되는지 여부를 판단하는 단계들을 포함할 수 있다. 이때, 렌더링 파이프라인(102-1)을 수행하는 3202 단계는 출력 패치가 한 타일에 포함된 것으로 판단된 경우, 출력 패치에 대해 비닝된 타일 리스트를 이용하여 래스터라이징을 수행할 수 있다. 여기서, 래스터라이징은 렌더링 파이프라인(102-1)에서 수행되는 일부 스테이지에 해당되는 것으로서, 렌더링 파이프라인(102-1)에는 래스터라이징 스테이지 외에도, 픽셀 쉐이딩 스테이지 등의 다양한 스테이지들이 포함될 수 있다. 렌더링 파이프라인(102-1)을 수행하는 3202 단계는 비닝 파이프라인(101-1)에서 테셀레이팅이 스킵된 경우, 비닝 파이프라인(101-1)에서 출력 패치에 대해 저장된 빈 스트림을 이용하여, 테셀레이션 파이프라인을 수행하는 단계를 포함할 수 있다. 한편, 비닝 파이프라인(101-1)을 수행하는 3201 단계에서, 테셀레이팅은 출력 패치에 의해 형성된 경계가 테셀레이팅된 프리미티브들에 의해 형성된 경계를 포함하도록 프로그래밍될 수 있다.
이와 달리, 비닝 파이프라인(101-1)을 수행하는 3201 단계는, 출력 패치가 둘 이상의 타일들에 포함된 것으로 판단된 경우(또는 출력 패치가 한 타일에 포함되지 않는 것으로 판단된 경우), 출력 패치에 대한 테셀레이터(123)의 테셀레이팅 및 도메인 쉐이더(125)의 도메인 쉐이딩을 수행함으로써 테셀레이팅된 프리미티브들을 생성할 수 있다. 이때, 렌더링 파이프라인(102-1)을 수행하는 3202 단계는 테셀레이팅된 프리미티브들에 대해 비닝된 타일 리스트를 이용하여 래스터라이징을 수행할 수 있다.
한편, 컴퓨팅 장치(1)의 메모리(30)는 비닝 파이프라인(101-1)에서 생성된 타일 리스트를 저장하고, 저장된 타일 리스트를 렌더링 파이프라인(102-1)에 제공할 수 있다. 비닝 파이프라인(101-1)을 수행하는 3201 단계는, 출력 패치가 한 타일에 포함된 경우 출력 패치에 대한 가시성 스트림을 메모리(30)에 저장하고, 출력 패치가 둘 이상의 타일들에 포함된 경우 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 메모리(30)에 저장하는 단계를 포함할 수 있다.
도 33은 다른 실시예에 따른 컴퓨팅 장치에서 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 33에 도시된, 컴퓨팅 장치(1)의 그래픽스 파이프라인의 수행 방법은, 앞서 설명된 도 12 및 도 13 등에서 설명된 실시예(MODE ②)와 관련된다. 따라서, 이하 생략된 내용이라 할지라도, 도 12 및 도 13 등에서 앞서 설명된 내용들은 도 33의 그래픽스 파이프라인의 수행 방법에도 적용될 수 있다.
3301 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 포함된 타일의 개수에 기초하여 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵할 것인지를 판단하고 판단 결과에 따라 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들 또는 헐 쉐이더(121)로부터 출력된 출력 패치에 대한 타일 리스트를 비닝하는, 비닝 파이프라인(101-2)을 수행한다.
3302 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인(102-1)을 수행한다.
보다 상세하게 설명하면, 비닝 파이프라인(101-2)을 수행하는 3301 단계는 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 포함된 타일의 개수가 한 개인 경우, 테셀레이터(123)에 의해 수행될 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵한다. 여기서, 제 2 테셀레이션 팩터는 제 1 테셀레이션 팩터 보다 낮을 수 있다. 비닝 파이프라인(101-2)을 수행하는 3301 단계는 헐 쉐이더(121)에서 출력 패치를 생성하고 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하는 단계, 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 출력 패치에 대한 테셀레이터의 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들을 생성하는 단계, 및 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 한 타일에 포함되는지 여부를 판단하는 단계를 포함할 수 있다. 이때, 렌더링 파이프라인(102-1)을 수행하는 3302 단계는 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 한 타일에 포함된 경우, 출력 패치에 대해 비닝된 타일 리스트를 이용하여 래스터라이징을 수행할 수 있다. 여기서, 래스터라이징은 렌더링 파이프라인(102-1)에서 수행되는 일부 스테이지에 해당되는 것으로서, 렌더링 파이프라인(102-1)에는 래스터라이징 스테이지 외에도, 픽셀 쉐이딩 스테이지 등의 다양한 스테이지들이 포함될 수 있다. 한편, 비닝 파이프라인(101-2)을 수행하는 3301 단계에서, 테셀레이팅은 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들에 의해 형성된 경계가 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들에 의해 형성된 경계를 포함하도록 프로그래밍될 수 있다.
이와 달리, 비닝 파이프라인(101-2)을 수행하는 3301 단계는 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 둘 이상의 타일들에 포함된 것으로 판단된 경우(또는 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 한 타일에 포함되지 않는 것으로 판단된 경우), 제 1 테셀레이션 팩터에 기초하여 출력 패치에 대한 테셀레이터(123)의 테셀레이팅 및 도메인 쉐이더(125)의 도메인 쉐이딩을 수행함으로써 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들을 생성할 수 있다. 이때, 렌더링 파이프라인(102-1)을 수행하는 3302 단계는 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들에 대해 비닝된 타일 리스트를 이용하여 래스터라이징 및 픽셀 쉐이딩을 수행할 수 있다.
한편, 컴퓨팅 장치(1)의 메모리(30)는 비닝 파이프라인(101-2)에서 생성된 타일 리스트를 저장하고, 저장된 타일 리스트를 렌더링 파이프라인(102-1)에 제공할 수 있다. 비닝 파이프라인(101-2)을 수행하는 3301 단계는 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 한 타일에 포함된 경우 출력 패치에 대한 가시성 스트림을 메모리(30)에 저장하고, 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 둘 이상의 타일들에 포함된 경우 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 메모리(30)에 저장하는 단계를 포함할 수 있다.
도 34는 또 다른 실시예에 따른 컴퓨팅 장치에서 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 34에 도시된, 컴퓨팅 장치(1)의 그래픽스 파이프라인의 수행 방법은, 앞서 설명된 도 18 및 도 19 등에서 설명된 실시예(MODE ⑤)와 관련된다. 따라서, 이하 생략된 내용이라 할지라도, 도 18 및 도 19 등에서 앞서 설명된 내용들은 도 34의 그래픽스 파이프라인의 수행 방법에도 적용될 수 있다.
3401 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 헐 쉐이더(121)로부터 출력된 출력 패치를 비닝함으로써 출력 패치가 복수의 타일들에 포함되는지를 판단하고 출력 패치가 복수의 타일들에 포함되는 경우 타일들의 렌더링 순서를 스케쥴링하는, 비닝 파이프라인(101-3)을 수행한다.
3402 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 스케쥴링된 렌더링 순서에 기초하여, 타일 단위로 타일들에 대한 렌더링 파이프라인(102-2)을 수행한다.
보다 상세하게 설명하면, 비닝 파이프라인(101-3)을 수행하는 3401 단계는, 테셀레이터(123)에 의해 수행될 출력 패치에 대한 테셀레이팅을 스킵할 수 있다. 비닝 파이프라인(101-3)을 수행하는 3401 단계는, 입력 패치를 헐 쉐이더(121)에서 헐 쉐이딩함으로써 출력 패치를 생성하고, 출력 패치에 대한 타일 리스트를 비닝하고, 출력 패치가 복수의 타일들에 포함되는지 여부를 판단하고, 출력 패치가 복수의 타일들에 포함되는 경우 첫번째 렌더링 순서에 대응되는 제 1 타일(기준 타일, 예를 들어 도 19의 tile A)을 결정하는 단계들을 포함할 수 있다.
렌더링 파이프라인(102-2)을 수행하는 3402 단계는, 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하고, 이웃 타일(예를 들어, 도 19의 tile B, tile C 또는 tile D) 에 대한 제 2 렌더링 파이프라인을 수행하는 단계들을 포함할 수 있다. 제 2 렌더링 파이프라인은, 제 1 렌더링 파이프라인에서 생성된 가시성 스트림에 기초하여 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행한다. 한편, 도 34에서 설명되는 제 1 및 제 2 렌더링 파이프라인들은, 렌더링 파이프라인(102-2)의 일부로서, 도 7의 제 1 및 제 2 렌더링 파이프라인들(102-3 및 102-4)과는 다르다.
한편, 컴퓨팅 장치(1)의 메모리(30)는 제 1 타일에 대한 렌더링 파이프라인(102-2)에서 생성된 가시성 스트림을 저장하고, 저장된 가시성 스트림을 이웃 타일에 대한 렌더링 파이프라인(102-2)에 제공할 수 있다. 즉, 렌더링 파이프라인(102-2)을 수행하는 3401 단계는, 제 1 타일에 대한 렌더링 파이프라인(102-2)에서 생성된 가시성 스트림을 메모리(30)에 저장하는 단계를 포함할 수 있다.
도 35는 또 다른 실시예에 따른 컴퓨팅 장치에서 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 35에 도시된, 컴퓨팅 장치(1)의 그래픽스 파이프라인의 수행 방법은, 앞서 설명된 도 20 및 도 21 등에서 설명된 실시예(MODE ⑥)와 관련된다. 따라서, 이하 생략된 내용이라 할지라도, 도 20 및 도 21 등에서 앞서 설명된 내용들은 도 35의 그래픽스 파이프라인의 수행 방법에도 적용될 수 있다.
3501 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 헐 쉐이더(121)에 의해 결정된 제 1 테셀레이션 팩터(TF)와 다른 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들을 비닝함으로써 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는지를 판단하고 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는 경우 복수의 타일들의 렌더링 순서를 스케쥴링하는, 비닝 파이프라인(101-4)을 수행한다.
3502 단계에서, 컴퓨팅 장치(1)의 GPU(10)는 스케쥴링된 렌더링 순서에 기초하여, 타일 단위로 타일들에 대한 렌더링 파이프라인(102-2)을 수행한다.
보다 상세하게 설명하면, 비닝 파이프라인(101-4)을 수행하는 3501 단계는, 테셀레이터(123)에 의해 수행될 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵할 수 있다. 여기서, 제 2 테셀레이션 팩터는, 제 1 테셀레이션 팩터 보다 낮은 값을 갖는다. 비닝 파이프라인(101-4)을 수행하는 3501 단계는, 헐 쉐이더(121)에서 출력 패치를 생성하고 제 1 테셀레이션 팩터(TF)를 결정하는 헐 쉐이딩을 수행하는 단계, 제 1 테셀레이션 팩터(TF) 보다 낮은 제 2 테셀레이션 팩터(TF)에 기초하여 출력 패치에 대한 테셀레이터(123)의 테셀레이팅 및 도메인 쉐이더(125)의 도메인 쉐이딩을 수행함으로써 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들을 생성하는 단계, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는 단계, 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는지 여부를 판단하는 단계, 및 제 2 테셀레이션 팩터(TF)로 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는 경우 첫번째 렌더링 순서에 대응되는 제 1 타일(기준 타일, 예를 들어 도 21의 tile A)을 결정하는 단계를 포함할 수 있다.
렌더링 파이프라인(102-2)을 수행하는 3502 단계는, 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하고, 이웃 타일(예를 들어, 도 21의 tile B, tile C 또는 tile D) 에 대한 제 2 렌더링 파이프라인을 수행하는 단계들을 포함할 수 있다. 제 2 렌더링 파이프라인은, 제 1 렌더링 파이프라인에서 생성된 가시성 스트림에 기초하여 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행한다. 한편, 도 35에서 설명되는 제 1 및 제 2 렌더링 파이프라인들은, 렌더링 파이프라인(102-2)의 일부로서, 도 7의 제 1 및 제 2 렌더링 파이프라인들(102-3 및 102-4)과는 다르다.
한편, 컴퓨팅 장치(1)의 메모리(30)는 제 1 타일에 대한 렌더링 파이프라인(102-2)에서 생성된 가시성 스트림을 저장하고, 저장된 가시성 스트림을 이웃 타일에 대한 렌더링 파이프라인(102-2)에 제공할 수 있다. 즉, 렌더링 파이프라인(102-2)을 수행하는 3501 단계는, 제 1 타일에 대한 렌더링 파이프라인(102-2)에서 생성된 가시성 스트림을 메모리(30)에 저장하는 단계를 포함할 수 있다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
1: 컴퓨팅 장치 10: GPU
20: CPU 30: 메모리
40: Bus 101: 비닝 파이프라인
102: 렌더링 파이프라인

Claims (39)

  1. 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법에 있어서,
    헐 쉐이더로부터 출력된 출력 패치가 포함된 타일의 개수에 기초하여 상기 출력 패치에 대한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 출력 패치 또는 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는, 비닝 파이프라인을 수행하는 단계; 및
    상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 출력 패치가 포함된 상기 타일의 개수가 한 개인 경우, 테셀레이터에 의해 수행될 상기 출력 패치에 대한 상기 테셀레이팅을 스킵하는, 방법.
  3. 제 1 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하는 단계;
    상기 출력 패치에 대한 상기 타일 리스트를 비닝하는 단계; 및
    상기 출력 패치가 한 타일에 포함되는지 여부를 판단하는 단계를 포함하고,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 출력 패치가 상기 한 타일에 포함된 것으로 판단된 경우, 상기 출력 패치에 대해 비닝된 상기 타일 리스트를 이용하여 래스터라이징을 수행하는, 방법.
  4. 제 3 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 출력 패치가 둘 이상의 타일들에 포함된 것으로 판단된 경우, 상기 출력 패치에 대한 테셀레이터의 상기 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 상기 테셀레이팅된 프리미티브들을 생성하는 단계를 포함하고,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 테셀레이팅된 프리미티브들에 대해 비닝된 상기 타일 리스트를 이용하여 상기 래스터라이징을 수행하는, 방법.
  5. 제 1 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 출력 패치가 한 타일에 포함된 경우 상기 출력 패치에 대한 가시성 스트림을 저장하고, 상기 출력 패치가 둘 이상의 타일들에 포함된 경우 상기 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 저장하는 단계를 포함하는, 방법.
  6. 제 1 항에 있어서,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 비닝 파이프라인에서 상기 테셀레이팅이 스킵된 경우, 상기 비닝 파이프라인에서 상기 출력 패치에 대해 저장된 빈 스트림을 이용하여, 테셀레이션 파이프라인을 수행하는 단계를 포함하는, 방법.
  7. 그래픽스 파이프라인을 수행하는 컴퓨팅 장치에 있어서,
    헐 쉐이더로부터 출력된 출력 패치가 포함된 타일의 개수에 기초하여 상기 출력 패치에 대한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 출력 패치 또는 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는 비닝 파이프라인, 및 상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및
    상기 비닝 파이프라인에서 비닝된 상기 타일 리스트를 저장하고 상기 저장된 타일 리스트를 상기 렌더링 파이프라인에 제공하는 메모리를 포함하는, 컴퓨팅 장치.
  8. 제 7 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 비닝 파이프라인에서 상기 출력 패치가 포함된 상기 타일의 개수가 한 개인 것으로 판단된 경우, 상기 비닝 파이프라인에서 테셀레이터에 의해 수행될 상기 출력 패치에 대한 상기 테셀레이팅을 스킵하는, 컴퓨팅 장치.
  9. 제 7 항에 있어서,
    상기 그래픽 프로세싱 장치는
    입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하고, 상기 출력 패치에 대하여 상기 타일 리스트의 상기 비닝을 수행하고, 상기 출력 패치가 한 타일에 포함되는지 여부를 판단하는, 상기 비닝 파이프라인을 수행하고,
    상기 출력 패치가 상기 한 타일에 포함된 것으로 판단된 경우, 상기 출력 패치에 대해 비닝된 상기 타일 리스트를 이용하여 래스터라이징을 수행하는, 상기 렌더링 파이프라인을 수행하는, 컴퓨팅 장치.
  10. 제 9 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 출력 패치가 둘 이상의 타일들에 포함된 것으로 판단된 경우 상기 출력 패치에 대한 테셀레이터의 상기 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 상기 테셀레이팅된 프리미티브들을 생성하는, 상기 비닝 파이프라인을 수행하고,
    상기 테셀레이팅된 프리미티브들에 대해 비닝된 상기 타일 리스트를 이용하여 상기 래스터라이징을 수행하는, 상기 렌더링 파이프라인을 수행하는, 컴퓨팅 장치.
  11. 제 7 항에 있어서,
    상기 메모리는
    상기 비닝 파이프라인이 수행되는 동안, 상기 출력 패치가 한 타일에 포함된 경우 상기 출력 패치에 대한 가시성 스트림을 저장하고, 상기 출력 패치가 둘 이상의 타일들에 포함된 경우 상기 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 저장하는 단계를 포함하는, 컴퓨팅 장치.
  12. 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법에 있어서,
    헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 포함된 타일의 개수에 기초하여 상기 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들 또는 상기 헐 쉐이더로부터 출력된 출력 패치에 대한 타일 리스트를 비닝하는, 비닝 파이프라인을 수행하는 단계; 및
    상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 단계를 포함하는, 방법.
  13. 제 12 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 포함된 상기 타일의 개수가 한 개인 경우, 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵하는, 방법.
  14. 제 12 항에 있어서,
    상기 제 2 테셀레이션 팩터는
    상기 제 1 테셀레이션 팩터 보다 낮은, 방법.
  15. 제 12 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 헐 쉐이더에서 상기 출력 패치를 생성하고 상기 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하는 단계;
    상기 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 테셀레이터의 상기 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써, 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하는 단계; 및
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 한 타일에 포함되는지 여부를 판단하는 단계를 포함하고,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 한 타일에 포함된 경우, 상기 출력 패치에 대해 비닝된 상기 타일 리스트를 이용하여 래스터라이징을 수행하는, 방법.
  16. 제 15 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 둘 이상의 타일들에 포함된 것으로 판단된 경우, 상기 제 1 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 상기 테셀레이터의 상기 테셀레이팅 및 상기 도메인 쉐이더의 상기 도메인 쉐이딩을 수행함으로써, 상기 제 1 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하는 단계를 포함하고,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 제 1 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대해 비닝된 상기 타일 리스트를 이용하여 상기 래스터라이징을 수행하는, 방법.
  17. 제 12 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 한 타일에 포함된 경우 상기 출력 패치에 대한 가시성 스트림을 저장하고, 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 둘 이상의 타일들에 포함된 경우 상기 제 1 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대한 가시성 스트림을 저장하는 단계를 포함하는, 방법.
  18. 그래픽스 파이프라인을 수행하는 컴퓨팅 장치에 있어서,
    헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 포함된 타일의 개수에 기초하여 상기 제 1 테셀레이션 팩터에 기초한 테셀레이팅을 스킵할 것인지를 판단하고 상기 판단 결과에 따라 상기 제 1 테셀레이션 팩터로 테셀레이팅된 프리미티브들 또는 상기 헐 쉐이더로부터 출력된 출력 패치에 대한 타일 리스트를 비닝하는 비닝 파이프라인, 및 상기 비닝된 타일 리스트에 기초하여 타일 단위로 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및
    상기 비닝 파이프라인에서 비닝된 상기 타일 리스트를 저장하고 상기 저장된 타일 리스트를 상기 렌더링 파이프라인에 제공하는 메모리를 포함하는, 컴퓨팅 장치.
  19. 제 18 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 포함된 상기 타일의 개수가 한 개인 경우, 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵하는, 컴퓨팅 장치.
  20. 제 18 항에 있어서,
    상기 제 2 테셀레이션 팩터는
    상기 제 1 테셀레이션 팩터 보다 낮은, 컴퓨팅 장치.
  21. 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법에 있어서,
    헐 쉐이더로부터 출력된 출력 패치를 비닝함으로써 상기 출력 패치가 복수의 타일들에 포함되는지를 판단하고 상기 출력 패치가 상기 복수의 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는, 비닝 파이프라인을 수행하는 단계; 및
    상기 스케쥴링된 렌더링 순서에 기초하여, 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 단계를 포함하고,
    첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인은
    상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 생성하는 비닝을 포함하는, 방법.
  22. 제 21 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    테셀레이터에 의해 수행될 상기 출력 패치에 대한 테셀레이팅을 스킵하는, 방법.
  23. 제 21 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하는 단계;
    상기 출력 패치에 대한 타일 리스트를 비닝하는 단계;
    상기 출력 패치가 상기 복수의 타일들에 포함되는지 여부를 판단하는 단계; 및
    상기 출력 패치가 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정하는 단계를 포함하는, 방법.
  24. 제 21 항에 있어서,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하는 단계; 및
    상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하는 단계를 포함하고,
    상기 제 2 렌더링 파이프라인을 수행하는 단계는
    상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행하는, 방법.
  25. 그래픽스 파이프라인을 수행하는 컴퓨팅 장치에 있어서,
    헐 쉐이더로부터 출력된 출력 패치를 비닝함으로써 상기 출력 패치가 복수의 타일들에 포함되는지를 판단하고 상기 출력 패치가 상기 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는 비닝 파이프라인, 및 상기 스케쥴링된 렌더링 순서에 기초하여 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및
    첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인이 수행되는 동안 생성된, 상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 저장하는 메모리를 포함하는, 컴퓨팅 장치.
  26. 제 25 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 비닝 파이프라인에서, 테셀레이터에 의해 수행될 상기 출력 패치에 대한 테셀레이팅을 스킵하는, 컴퓨팅 장치.
  27. 제 25 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 비닝 파이프라인이 수행되는 동안, 입력 패치를 상기 헐 쉐이더에서 헐 쉐이딩함으로써 상기 출력 패치를 생성하고 상기 출력 패치에 대한 타일 리스트를 비닝하고 상기 출력 패치가 상기 복수의 타일들에 포함되는지 여부를 판단하고 상기 출력 패치가 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정하는, 컴퓨팅 장치.
  28. 제 25 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하고, 상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하고,
    상기 제 2 렌더링 파이프라인은
    상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행하는, 컴퓨팅 장치.
  29. 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법에 있어서,
    헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들을 비닝함으로써 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는지를 판단하고 상기 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는, 비닝 파이프라인을 수행하는 단계; 및
    상기 스케쥴링된 렌더링 순서에 기초하여, 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 단계를 포함하고,
    첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인은
    상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 생성하는 비닝을 포함하는, 방법.
  30. 제 29 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵하는, 방법.
  31. 제 29 항에 있어서,
    상기 제 2 테셀레이션 팩터는
    상기 제 1 테셀레이션 팩터 보다 낮은, 방법.
  32. 제 29 항에 있어서,
    상기 비닝 파이프라인을 수행하는 단계는
    상기 헐 쉐이더에서 출력 패치를 생성하고 상기 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하는 단계;
    상기 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 테셀레이터의 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써, 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하는 단계;
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하는 단계;
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는지 여부를 판단하는 단계; 및
    상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정하는 단계를 포함하는, 방법.
  33. 제 29 항에 있어서,
    상기 렌더링 파이프라인을 수행하는 단계는
    상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하는 단계; 및
    상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하는 단계를 포함하고,
    상기 제 2 렌더링 파이프라인을 수행하는 단계는
    상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행하는, 방법.
  34. 그래픽스 파이프라인을 수행하는 컴퓨팅 장치에 있어서,
    헐 쉐이더에 의해 결정된 제 1 테셀레이션 팩터와 다른 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들을 비닝함으로써 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 복수의 타일들에 포함되는지를 판단하고 상기 제 2 테셀레이션 팩터로 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는 경우 상기 타일들의 렌더링 순서를 스케쥴링하는 비닝 파이프라인, 및 상기 스케쥴링된 렌더링 순서에 기초하여 타일 단위로 상기 타일들에 대한 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및
    첫번째 렌더링 순서로 스케쥴링된 제 1 타일에 대한 상기 렌더링 파이프라인이 수행되는 동안 생성된, 상기 제 1 타일에 인접한 이웃 타일에 대한 가시성 스트림을 저장하는 메모리를 포함하는, 컴퓨팅 장치.
  35. 제 34 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 비닝 파이프라인에서, 테셀레이터에 의해 수행될 상기 제 1 테셀레이션 팩터에 기초한 상기 테셀레이팅을 스킵하는, 컴퓨팅 장치.
  36. 제 34 항에 있어서,
    상기 제 2 테셀레이션 팩터는
    상기 제 1 테셀레이션 팩터 보다 낮은, 컴퓨팅 장치.
  37. 제 34 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 비닝 파이프라인이 수행되는 동안, 상기 헐 쉐이더에서 출력 패치를 생성하고 상기 제 1 테셀레이션 팩터를 결정하는 헐 쉐이딩을 수행하고 상기 제 1 테셀레이션 팩터 보다 낮은 상기 제 2 테셀레이션 팩터에 기초하여 상기 출력 패치에 대한 테셀레이터의 테셀레이팅 및 도메인 쉐이더의 도메인 쉐이딩을 수행함으로써 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들을 생성하고 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들에 대한 타일 리스트를 비닝하고 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 복수의 타일들에 포함되는지 여부를 판단하고 상기 제 2 테셀레이션 팩터로 상기 테셀레이팅된 프리미티브들이 상기 타일들에 포함되는 경우 상기 첫번째 렌더링 순서에 대응되는 상기 제 1 타일을 결정하는, 컴퓨팅 장치.
  38. 제 34 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 제 1 타일에 대한 제 1 렌더링 파이프라인을 수행하고, 상기 이웃 타일에 대한 제 2 렌더링 파이프라인을 수행하고,
    상기 제 2 렌더링 파이프라인은
    상기 제 1 렌더링 파이프라인에서 생성된 상기 가시성 스트림에 기초하여 상기 이웃 타일에서 가시적인 버텍스, 가시적인 프리미티브 및 가시적인 패치 중 적어도 하나에 대하여 렌더링을 수행하는, 컴퓨팅 장치.
  39. 제 1 항 내지 제 6 항, 제 12 항 내지 제 17 항, 제 21 항 내지 제 24 항, 제 29 항 내지 제 33 항 중에 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020140166628A 2014-11-26 2014-11-26 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법 KR102327144B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020140166628A KR102327144B1 (ko) 2014-11-26 2014-11-26 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
US14/791,626 US9870639B2 (en) 2014-11-26 2015-07-06 Graphic processing unit and method of performing, by graphic processing unit, tile-based graphics pipeline
EP15176624.3A EP3026635B1 (en) 2014-11-26 2015-07-14 Graphic processing unit and method of performing, by graphic processing unit, tile-based graphics pipeline
CN201510567739.5A CN105654553B (zh) 2014-11-26 2015-09-08 图形处理器和执行基于图块的图形管线的方法
JP2015222962A JP6709038B2 (ja) 2014-11-26 2015-11-13 グラフィックス・パイプラインを遂行する方法及びコンピューティング装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140166628A KR102327144B1 (ko) 2014-11-26 2014-11-26 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법

Publications (2)

Publication Number Publication Date
KR20160063079A true KR20160063079A (ko) 2016-06-03
KR102327144B1 KR102327144B1 (ko) 2021-11-16

Family

ID=53719642

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140166628A KR102327144B1 (ko) 2014-11-26 2014-11-26 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법

Country Status (5)

Country Link
US (1) US9870639B2 (ko)
EP (1) EP3026635B1 (ko)
JP (1) JP6709038B2 (ko)
KR (1) KR102327144B1 (ko)
CN (1) CN105654553B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190029279A (ko) * 2017-09-12 2019-03-20 삼성전자주식회사 경로 렌더링을 수행하는 그래픽 처리 장치 및 그래픽 처리 방법
KR20190051961A (ko) * 2016-09-22 2019-05-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 프리미티브 셰이더
US11010862B1 (en) 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2526598B (en) * 2014-05-29 2018-11-28 Imagination Tech Ltd Allocation of primitives to primitive blocks
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
KR102276909B1 (ko) * 2014-12-09 2021-07-13 삼성전자주식회사 렌더링 방법 및 장치
GB2552260B (en) 2015-06-05 2019-04-10 Imagination Tech Ltd Tessellation method
KR102465969B1 (ko) * 2015-06-23 2022-11-10 삼성전자주식회사 그래픽스 파이프라인을 수행하는 방법 및 장치
US10037625B2 (en) * 2016-09-15 2018-07-31 Intel Corporation Load-balanced tessellation distribution for parallel architectures
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
KR102646906B1 (ko) 2016-11-17 2024-03-12 삼성전자주식회사 타일 기반 렌더링 방법 및 장치
US11222397B2 (en) * 2016-12-23 2022-01-11 Qualcomm Incorporated Foveated rendering in tiled architectures
KR20180097342A (ko) * 2017-02-23 2018-08-31 한국전자통신연구원 영상 아티팩트를 최소화하는 초해상도 영상 선명화 방법 및 장치
US10885607B2 (en) 2017-06-01 2021-01-05 Qualcomm Incorporated Storage for foveated rendering
US10515431B2 (en) * 2017-12-12 2019-12-24 Intel Corporation Global optimal path determination utilizing parallel processing
US10580209B2 (en) 2018-03-06 2020-03-03 Qualcomm Incorporated Removal of degenerated sub-primitives in tessellation
US11080928B2 (en) * 2019-04-01 2021-08-03 Qualcomm Incorporated Methods and apparatus for visibility stream management
US11640649B2 (en) 2019-06-19 2023-05-02 Samsung Electronics Co., Ltd. Methods and apparatus for efficient range calculation
US11176721B2 (en) * 2019-07-25 2021-11-16 Dreamworks Animation Llc Multiplex pixel distribution for multi-machine rendering
CN110751706B (zh) * 2019-10-29 2024-03-22 网易(杭州)网络有限公司 游戏中的图形处理方法、装置、设备及存储介质
US11741653B2 (en) * 2020-07-28 2023-08-29 Advanced Micro Devices, Inc. Overlapping visibility and render passes for same frame
US11682109B2 (en) 2020-10-16 2023-06-20 Qualcomm Incorporated Configurable apron support for expanded-binning
US11508124B2 (en) * 2020-12-15 2022-11-22 Advanced Micro Devices, Inc. Throttling hull shaders based on tessellation factors in a graphics pipeline
US11776085B2 (en) 2020-12-16 2023-10-03 Advanced Micro Devices, Inc. Throttling shaders based on resource usage in a graphics pipeline
US20220198735A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Hierarchical tiling mechanism
GB2608094A (en) * 2021-01-27 2022-12-28 Advanced Risc Mach Ltd Graphics processing
US11710207B2 (en) 2021-03-30 2023-07-25 Advanced Micro Devices, Inc. Wave throttling based on a parameter buffer

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110221743A1 (en) * 2010-03-11 2011-09-15 Gary Keall Method And System For Controlling A 3D Processor Using A Control List In Memory
US20130120380A1 (en) * 2011-11-16 2013-05-16 Qualcomm Incorporated Tessellation in tile-based rendering
US20140267259A1 (en) * 2013-03-15 2014-09-18 Qualcomm Incorporated Tile-based rendering

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6359619B1 (en) 1999-06-18 2002-03-19 Mitsubishi Electric Research Laboratories, Inc Method and apparatus for multi-phase rendering
US8089486B2 (en) 2005-03-21 2012-01-03 Qualcomm Incorporated Tiled prefetched and cached depth buffer
KR101661931B1 (ko) 2010-02-12 2016-10-10 삼성전자주식회사 3차원 그래픽스 랜더링 장치 및 그 방법
GB201007348D0 (en) 2010-04-30 2010-06-16 Imagination Tech Ltd Programmable tessellation in a tile based rendering system
GB201104066D0 (en) 2011-03-09 2011-04-20 Imagination Tech Ltd Compression of a tessellated primitive index list in a tile rendering system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110221743A1 (en) * 2010-03-11 2011-09-15 Gary Keall Method And System For Controlling A 3D Processor Using A Control List In Memory
US20130120380A1 (en) * 2011-11-16 2013-05-16 Qualcomm Incorporated Tessellation in tile-based rendering
US20140267259A1 (en) * 2013-03-15 2014-09-18 Qualcomm Incorporated Tile-based rendering

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190051961A (ko) * 2016-09-22 2019-05-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 프리미티브 셰이더
KR20190029279A (ko) * 2017-09-12 2019-03-20 삼성전자주식회사 경로 렌더링을 수행하는 그래픽 처리 장치 및 그래픽 처리 방법
CN109509244A (zh) * 2017-09-12 2019-03-22 三星电子株式会社 一种执行路径渲染的图形处理器及其操作方法
CN109509244B (zh) * 2017-09-12 2023-11-14 三星电子株式会社 一种执行路径渲染的图形处理器及其操作方法
US11010862B1 (en) 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
WO2021097279A1 (en) * 2019-11-14 2021-05-20 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US11532066B2 (en) 2019-11-14 2022-12-20 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors

Also Published As

Publication number Publication date
JP2016100012A (ja) 2016-05-30
KR102327144B1 (ko) 2021-11-16
EP3026635B1 (en) 2019-09-18
CN105654553A (zh) 2016-06-08
EP3026635A3 (en) 2016-08-03
JP6709038B2 (ja) 2020-06-10
US9870639B2 (en) 2018-01-16
EP3026635A2 (en) 2016-06-01
CN105654553B (zh) 2020-08-28
US20160148424A1 (en) 2016-05-26

Similar Documents

Publication Publication Date Title
KR102327144B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
US10282813B2 (en) Flex rendering based on a render target in graphics processing
US10049426B2 (en) Draw call visibility stream
JP5847960B2 (ja) グラフィックス処理における直接レンダリングとビニングとの間の切り換え
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
US9799088B2 (en) Render target command reordering in graphics processing
KR101650999B1 (ko) 그래픽 프로세싱 유닛들에서의 렌더링 모드 선택
EP2946364B1 (en) Rendering graphics data using visibility information
KR102499397B1 (ko) 그래픽스 파이프라인을 수행하는 방법 및 장치
CN105518742A (zh) 用于图形处理的任意控制点处的容错抢占机制
US9355464B2 (en) Dynamic generation of texture atlases
KR20160130629A (ko) 양안 시차 영상에 대한 렌더링 방법 및 장치
KR20180056316A (ko) 타일-기반 렌더링을 수행하는 방법 및 장치
KR20230048441A (ko) 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법
KR20170038525A (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치의 동작 방법
US10262391B2 (en) Graphics processing devices and graphics processing methods
KR20170088687A (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant