[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

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

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

Info

Publication number
KR102381945B1
KR102381945B1 KR1020150161918A KR20150161918A KR102381945B1 KR 102381945 B1 KR102381945 B1 KR 102381945B1 KR 1020150161918 A KR1020150161918 A KR 1020150161918A KR 20150161918 A KR20150161918 A KR 20150161918A KR 102381945 B1 KR102381945 B1 KR 102381945B1
Authority
KR
South Korea
Prior art keywords
tile
tessellation
pipeline
draw call
type
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020150161918A
Other languages
English (en)
Other versions
KR20170058113A (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 KR1020150161918A priority Critical patent/KR102381945B1/ko
Priority to US15/202,608 priority patent/US10192357B2/en
Priority to EP16197336.7A priority patent/EP3171336B1/en
Priority to JP2016223100A priority patent/JP2017097870A/ja
Priority to CN201611013541.3A priority patent/CN107038740B/zh
Publication of KR20170058113A publication Critical patent/KR20170058113A/ko
Application granted granted Critical
Publication of KR102381945B1 publication Critical patent/KR102381945B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • 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
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

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

Abstract

그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 드로우콜에 대응되는 바운딩 박스의 타일 비닝 결과를 포함하는 비트스트림을 생성하고, 비트스트림에 의해 할당된 바운딩 박스에 대응되는 드로우콜에 대한 선별적인 테셀레이션을 수행함으로써 타일을 렌더링한다.

Description

그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법{GRAPHIC PROCESSING APPARATUS AND METHOD FOR PERFORMING GRAPHICS PIPELINE THEREOF}
그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법에 관한다.
GPU(Graphic Processing Unit)와 같은 그래픽 프로세싱 장치는 컴퓨팅 장치에서 그래픽스 데이터를 렌더링하는 역할을 담당한다. 일반적으로, 그래픽 프로세싱 장치는 2차원 또는 3차원 객체들에 해당되는 그래픽스 데이터를 2차원 픽셀 표현으로 변환하여 디스플레이를 위한 프레임을 생성한다. 컴퓨팅 장치의 종류로는, PC (personal computers), 노트북, 비디오 게임용 콘솔뿐만 아니라, 스마트폰, 태블릿 디바이스, 웨어러블 디바이스와 같은 임베디드(embedded) 디바이스들도 포함될 수 있다. 스마트폰, 태블릿 디바이스, 웨어러블 디바이스 등과 같은 임베디드 디바이스들은 비교적 낮은 연산 처리 능력과 많은 전력 소모의 문제들로 인하여, 충분한 메모리 공간과 프로세싱 파워를 확보하고 있는 PC, 노트북, 비디오 게임용 콘솔 등과 같은 워크스테이션들과 동일한 그래픽 프로세싱 성능을 갖추기 어렵다. 하지만, 최근 전세계적으로 스마트폰 또는 태블릿 디바이스와 같은 휴대용 디바이스들이 널리 보급됨에 따라 사용자들은 스마트폰 또는 태블릿 디바이스를 통해 게임을 플레이하거나 또는 영화, 드라마 등의 컨텐츠를 감상하는 빈도가 급격히 증가하였다. 이에 따라, 그래픽 프로세싱 장치의 제조사들은 사용자들의 수요에 발맞추어 임베디드 디바이스에서도 그래픽 프로세싱 장치의 성능 및 처리 효율을 높이기 위한 많은 연구들을 진행하고 있다.
그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법을 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법은, 테셀레이팅될 필요가 있는 드로우콜에 대응되는 바운딩 박스의 타일 비닝 결과를 포함하는 제 1 비트스트림을 생성하는, 비닝 파이프라인을 수행하는 단계; 및 현재 처리될 타일에서 상기 제 1 비트스트림에 의해 할당된 바운딩 박스가 식별된 경우, 상기 식별된 바운딩 박스에 대응되는 드로우콜에 대한 선별적인 테셀레이션을 수행함으로써 상기 현재 타일을 렌더링하는, 렌더링 파이프라인을 수행하는 단계를 포함한다.
또한, 상기 제 1 비트스트림은 입력된 드로우콜들 각각에 대한 테셀레이션의 필요성을 나타내는 정보 및 상기 테셀레이팅될 필요가 있는 드로우콜에 대응되는 상기 바운딩 박스를 커버하는 타일 리스트의 정보를 포함한다.
또한, 상기 비닝 파이프라인은 입력된 드로우콜들 각각의 가시성을 나타내는 정보를 포함하는 제 2 비트스트림 및 상기 입력된 드로우콜들 각각에 포함된 프리미티브의 가시성을 나타내는 정보를 포함하는 제 3 비트스트림을 생성하는 단계를 더 포함한다.
또한, 상기 비닝 파이프라인은 입력된 드로우콜들 중에서, 상기 테셀레이션이 필요한 제 1 타입의 드로우콜 및 상기 테셀레이션이 불필요한 제 2 타입의 드로우콜을 판단하는 단계; 상기 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 커버하는 타일 리스트를 식별하기 위한 타일 비닝을 수행하는 단계; 및 상기 제 1 타입의 드로우콜을 나타내는 식별 정보, 상기 제 2 타입의 드로우콜을 나타내는 식별 정보 및 상기 타일 리스트의 정보를 포함하는 상기 제 1 비트스트림을 생성하는 단계를 포함한다.
또한, 상기 그래픽스 파이프라인은 상기 렌더링 파이프라인에서만 상기 테셀레이션을 수행하는, 디퍼드 테셀레이션(deferred tessellation)을 수행한다.
또한, 상기 렌더링 파이프라인은 상기 제 1 비트스트림을 이용하여, 상기 테셀레이션이 필요한 제 1 타입의 드로우콜 및 상기 테셀레이션이 불필요한 제 2 타입의 드로우콜에 대해 서로 다른 렌더링 방식으로 상기 현재 타일을 렌더링한다.
또한, 상기 제 1 타입의 드로우콜은 테셀레이션 스테이지를 포함하는 제 1 서브 렌더링 파이프라인에 의해 처리되고, 상기 제 2 타입의 드로우콜은 테셀레이션 스테이지를 포함하지 않는 제 2 서브 렌더링 파이프라인에 의해 처리된다.
또한, 상기 제 1 서브 렌더링 파이프라인은 상기 현재 타일에서 처리될 상기 제 1 타입의 드로우콜에 대한 상기 테셀레이션이 이전 타일에서 수행된 적이 없는 경우, 상기 현재 타일에서 처리될 상기 제 1 타입의 드로우콜에 대하여 상기 테셀레이션을 수행하고, 상기 현재 타일에서 처리될 상기 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들(tessellated primitives)이 이전 타일에서 이미 생성된 경우, 상기 현재 타일에서 처리될 드로우콜에 대한 상기 테셀레이션을 스킵한다.
또한, 상기 렌더링 파이프라인은 상기 제 1 비트스트림에 포함된 상기 타일 비닝 결과에 기초하여, 상기 바운딩 박스를 커버하는 타일에 대해 높은 우선순위가 할당되도록, 타일들의 렌더링 순서를 스케쥴링하는 단계를 더 포함하고, 상기 렌더링 파이프라인은 상기 스케쥴링된 타일들의 렌더링 순서에 따라, 타일 단위로 상기 렌더링을 수행한다.
또한, 상기 렌더링 파이프라인이 수행되는 동안, 상기 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들이 다른 타일에서 더 이상 이용되지 않는 경우 메모리로부터 상기 테셀레이팅된 프리미티브들과 관련된 데이터를 삭제하는 단계를 더 포함한다.
다른 측면에 따르면, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
또 다른 측면에 따르면, 그래픽스 파이프라인을 수행하는 컴퓨팅 장치는, 테셀레이팅될 필요가 있는 드로우콜에 대응되는 바운딩 박스의 타일 비닝 결과를 포함하는 제 1 비트스트림을 생성하는 비닝 파이프라인, 및 현재 처리될 타일에서 상기 제 1 비트스트림에 의해 할당된 바운딩 박스가 식별된 경우, 상기 식별된 바운딩 박스에 대응되는 드로우콜에 대한 선별적인 테셀레이션을 수행함으로써 상기 현재 타일을 렌더링하는 렌더링 파이프라인을 수행하는 그래픽 프로세싱 장치; 및 상기 비닝 파이프라인에서 생성된 상기 제 1 비트스트림을 저장하고 상기 저장된 제 1 비트스트림을 상기 렌더링 파이프라인에 제공하는 메모리를 포함한다.
또한, 상기 제 1 비트스트림은 입력된 드로우콜들 각각에 대한 테셀레이션의 필요성을 나타내는 정보 및 상기 테셀레이팅될 필요가 있는 드로우콜에 대응되는 상기 바운딩 박스를 커버하는 타일 리스트의 정보를 포함한다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인이 수행되는 동안, 입력된 드로우콜들 각각의 가시성을 나타내는 정보를 포함하는 제 2 비트스트림 및 상기 입력된 드로우콜들 각각에 포함된 프리미티브의 가시성을 나타내는 정보를 포함하는 제 3 비트스트림을 생성한다.
또한, 상기 그래픽 프로세싱 장치는 상기 비닝 파이프라인이 수행되는 동안, 입력된 드로우콜들 중에서, 상기 테셀레이션이 필요한 제 1 타입의 드로우콜 및 상기 테셀레이션이 불필요한 제 2 타입의 드로우콜을 판단하고, 상기 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 커버하는 타일 리스트를 식별하기 위한 타일 비닝을 수행하고, 상기 제 1 타입의 드로우콜을 나타내는 식별 정보, 상기 제 2 타입의 드로우콜을 나타내는 식별 정보 및 상기 타일 리스트의 정보를 포함하는 상기 제 1 비트스트림을 생성한다.
또한, 상기 그래픽 프로세싱 장치는 디퍼드 테셀레이션(deferred tessellation)에 기초한 상기 그래픽스 파이프라인을 수행한다.
또한, 상기 그래픽 프로세싱 장치는 상기 렌더링 파이프라인이 수행되는 동안, 상기 제 1 비트스트림을 이용하여, 상기 테셀레이션이 필요한 제 1 타입의 드로우콜 및 상기 테셀레이션이 불필요한 제 2 타입의 드로우콜에 대해 서로 다른 렌더링 방식으로 상기 현재 타일을 렌더링한다.
또한, 상기 제 1 타입의 드로우콜은 테셀레이션 스테이지를 포함하는 제 1 서브 렌더링 파이프라인에 의해 처리되고, 상기 제 2 타입의 드로우콜은 테셀레이션 스테이지를 포함하지 않는 제 2 서브 렌더링 파이프라인에 의해 처리된다.
또한, 상기 그래픽 프로세싱 장치는 상기 렌더링 파이프라인이 수행되는 동안, 상기 제 1 비트스트림에 포함된 상기 타일 비닝 결과에 기초하여 상기 바운딩 박스를 커버하는 타일에 대해 높은 우선순위가 할당되도록, 타일들의 렌더링 순서를 스케쥴링하고, 상기 스케쥴링된 타일들의 렌더링 순서에 따라 타일 단위로 상기 렌더링을 수행한다.
또한, 상기 메모리는 상기 렌더링 파이프라인이 수행되는 동안, 상기 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들이 다른 타일에서 더 이상 이용되지 않는 경우 상기 테셀레이팅된 프리미티브들과 관련된 데이터를 삭제한다.
상기된 바에 따르면, 타일 기반 그래픽스 파이프라인에서 테셀레이션의 수행 횟수를 감소시킬 수 있으므로, 그래픽 프로세싱 장치의 연산량을 줄이고 처리 속도를 향상시킬 수 있다. 또한, 테셀레이션 데이터가 더 이상 사용되지 않을 때 메모리로부터 이를 삭제함으로써 메모리 용량을 보다 효율적으로 사용할 수 있다.
도 1은 일 실시예에 따른 컴퓨팅 장치를 설명하기 위한 도면이다.
도 2는 타일 기반 렌더링(TBR)을 설명하기 위한 도면이다.
도 3 내지 도 5는 테셀레이션 파이프라인을 설명하기 위한 도면들이다.
도 6은 일 실시예에 따른 도 1의 GPU의 상세 하드웨어 구조를 도시한 블록도이다.
도 7은 일 실시예에 따른 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 8은 일 실시예에 따른 비닝 파이프라인을 설명하기 위한 도면이다.
도 9는 일 실시예에 따른 바운딩 박스 비트스트림을 생성하는 방법의 흐름도이다.
도 10은 일 실시예에 따른 2×2 타일들에 의해 커버되는 드로우콜들의 예시를 도시한 도면이다.
도 11은 일 실시예에 따른 바운딩 박스의 공간과 테셀레이팅된 프리미티브들로 구성된 공간 사이의 포함 관계를 설명하기 위한 도면이다.
도 12는 일 실시예에 따라 바운딩 박스 비트스트림을 생성하는 것을 설명하기 위한 도면이다.
도 13은 일 실시예에 따라, 다양한 종류의 가시성 비트스트림들을 설명하기 위한 도면이다.
도 14는 일 실시예에 따른 렌더링 파이프라인을 설명하기 위한 도면이다.
도 15는 일 실시예에 따른 렌더링 파이프라인을 수행하는 방법의 상세 흐름도이다.
도 16은 일 실시예에 따른, 컴퓨팅 장치의 상세 하드웨어 구성을 도시한 블록도이다.
도 17은 일 실시예에 따른 그래픽스 파이프라인을 수행하는 방법의 흐름도이다.
본 실시예들에서 사용되는 용어는 본 실시예들에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 기술분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 임의로 선정된 용어도 있으며, 이 경우 해당 실시예의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서, 본 실시예들에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 실시예들의 전반에 걸친 내용을 토대로 정의되어야 한다.
실시예들에 대한 설명들에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 구성요소를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 실시예들에 기재된 “...부”, “...모듈”의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
본 실시예들에서 사용되는 “구성된다” 또는 “포함한다” 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 도는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
하기 실시예들에 대한 설명은 권리범위를 제한하는 것으로 해석되지 말아야 하며, 해당 기술분야의 당업자가 용이하게 유추할 수 있는 것은 실시예들의 권리범위에 속하는 것으로 해석되어야 할 것이다. 이하 첨부된 도면들을 참조하면서 오로지 예시를 위한 실시예들을 상세히 설명하기로 한다.
도 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)는 OpenGL (Open Graphic(s) Library), DirectX, CUDA(Compute Unified Device Architecture) 등과 같은 다양한 버전들, 종류들의 그래픽스 파이프라인(graphics pipeline)(100)을 수행하는 그래픽 전용 프로세서로서, 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)을 포함하는 그래픽스 파이프라인(100)을 수행할 수 있다. 비닝 파이프라인(101)은 2차원 또는 3차원 객체들을 구성하는(make up) 버텍스들(vertices), 프리미티브들(primitives), 또는 패치들(patches)이 어느 타일에 포함되는지 여부를 나타내는 타일 리스트를 생성하는 프로세스이다. 이와 같은 이유로 인해, 비닝 파이프라인(101)은 타일링 파이프라인(tiling pipeline), 비닝 페이즈(binning phase)의 용어와 같이 다른 용어들로도 대체될 수 있다. 렌더링 파이프라인(102)은 비닝 파이프라인(101)에서 생성된 타일 리스트에 기초하여, 타일 단위로(per tile), 객체를 렌더링하는 프로세스이다. 렌더링 파이프라인(102)이 완료되면, 2차원 디스플레이 화면 상에 표시될 2차원 또는 3차원 객체들의 픽셀 표현들이 결정될 수 있다. 렌더링 파이프라인(102)은 렌더링 페이즈(rendering phase)의 용어와 같이 다른 용어들로도 대체될 수 있다.
MicroSoft 사의 DirectX11 (DX11) API, OpenGL 4.0 API 등을 포함한 특정 그래픽스 파이프라인들은 그래픽스 프리미티브들(또는 그래픽스 패치들)의 테셀레이션을 위한 추가적인 프로세싱 스테이지들(테셀레이션 스테이지)을 포함한다. 테셀레이션은, 그래픽스 패치들을 더 작은 그래픽스 프리미티브들로 분할하여 더 미세한 디테일을 갖는 이미지의 디스플레이를 가능하게 하는 프로세스이다. 컴퓨팅 장치(1)의 GPU(10)에서 구동되는 그래픽스 파이프라인(100)은 이와 같은 테셀레이션을 지원할 수 있다. 한편, 본 명세서에서 이하에서 설명될 실시예들은 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 등과 같은 다양한 종류들을 포함할 수 있다.
도 2는 타일 기반 렌더링(TBR)을 설명하기 위한 도면이다.
도 2를 참고하면, 자동차 객체(220)는 어느 동영상에서의 어느 한 프레임에 해당되는 것으로 가정한다. 도 1의 GPU(10)는 3차원 자동차 객체(220)가 포함된 한 프레임을 N×M (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의 그래픽스 파이프라인(100)에 포함될 수 있다.
도 3을 참고하면, 테셀레이션 파이프라인(300)은 컨트롤 쉐이더(control shader)(121), 테셀레이터(tessellator)(123) 및 테셀레이션 이벨류에이션 쉐이더(tessellation evaluation shader)(125)에 의해 수행될 수 있다. 즉, 본 명세서에서 설명되는 테셀레이션 파이프라인(300)의 용어들은, 그래픽스 파이프라인(100)의 버전, 종류에 따라 다른 용어들로 대체될 수 있다. 예를 들어, 컨트롤 쉐이더(121)는 헐 쉐이더(hull shader)라는 용어로, 테셀레이션 이벨류에이션 쉐이더(125)는 도메인 쉐이더(domain shader)라는 용어로 대체될 수 있다.
컨트롤 쉐이더(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), 컨트롤 쉐이더(control shader)(121), 테셀레이터(tessellator)(123), 테셀레이션 이벨류에이션 쉐이더(tessellation evaluation shader)(125), 프리미티브 어셈블러(primitive assembler)(130), 비너(binner)(140), 래스터라이저(rasterizer)(150) 및 프래그먼트 쉐이더(fragment shader)(160)를 포함할 수 있다. 또한, GPU(10)는 컨트롤러(170) 및 버퍼들(180)을 더 포함할 수 있다. 한편, GPU(10) 내에서 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, 아래 설명될 기능들에 기초하여 분류된 것들일 수 있다. 따라서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들 각각은, 아래 설명될 기능들 각각을 실행시키는 프로그램 로직들 또는 소프트웨어 모듈들로 구현될 수 있다. 이와 다르게, 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, GPU(10) 내에 구비된 서브(sub) 프로세싱 유닛들(또는 프로세서 코어들) 각각으로 구현될 수도 있다. 즉, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 구현 형태는, 어느 하나에 의해 제한되지 않는다. 나아가서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 명칭들은 아래 설명될 기능들에 기초하여 부여된 것일 수 있으나, 이와 같은 명칭들은 다양하게 변경될 수도 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
한편, GPU(10)에서 그래픽스 파이프라인(100)을 수행하는 구성들의 명칭들은 설명의 편의를 위하여, OpenGL(Open Graphics Library)에서 정의된 명칭들을 사용하였으나, 이 구성들의 명칭들은 이에 제한되지 않는다. 즉, GPU(10)에서 그래픽스 파이프라인(100)을 수행하는 구성들은, Microsoft 사의 DirectX 11 (DX11), CUDA(Compute Unified Device Architecture) 6.0 등의 다른 종류의 API들에서 정의된 유사한 구성들에 대응될 수 있다. 예를 들어, 테셀레이션 이벨류에이션 쉐이더(125)는 DirectX 11에서 사용되는 도메인 쉐이더에 대응될 수 있고, GPU(10) 내의 다른 구성들도 마찬가지로, DirectX 11 또는 CUDA 6.0 등의 다른 API들에서 사용되는 구성들에 대응될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
입력 어셈블러(110)는, 입력된 드로우콜들(drawcalls)에 기초하여, 메모리(도 1의 30)에 저장된 객체들에 관한 버텍스들의 데이터를 그래픽스 파이프라인(100)에 공급한다. 그래픽스 파이프라인(100)에서 공급된 버텍스들은, 메쉬(mesh) 또는 표면(surface)의 표현인 패치에 관한 것일 수 있으나, 이에 제한되지 않는다. 드로우콜은 어떤 프레임에 어떤 오브젝트를 렌더링할 것인지를 나타내는 커맨드이다. 예를 들어, 드로우콜은 영상 또는 프레임에 사각형들 또는 삼각형들과 같은 프리미티브들을 그리기 위한 커맨드일 수 있다.
버텍스 쉐이더(115)는 입력 어셈블러(110)에 의해 공급된 버텍스들을 컨트롤 쉐이더(121)의 입력 컨트롤 포인트들로서 전달한다.
컨트롤 쉐이더(121), 테셀레이터(123) 및 이벨류에이션 쉐이더(125)는 앞서 도 3에서 설명되었던 테셀레이션 파이프라인(300)을 수행할 수 있다. 즉, 컨트롤 쉐이더(121)에 입력된 입력 컨트롤 포인트들은, 테셀레이션 이벨류에이션 쉐이더(125)에 의해, 출력 패치(output patch)에 관한 테셀레이팅된 버텍스들로 출력될 수 있다.
프리미티브 어셈블러(130)는 테셀레이션 파이프라인(300)이 수행된 경우, 테셀레이팅된 버텍스들을 프리미티브들(즉, 테셀레이팅된 프리미티브들(tessellated primitives))로 변환한다. 프리미티브 어셈블러(130)는 테셀레이션 파이프라인(300)이 수행되지 않은 경우에는, 버텍스 쉐이더(115)로부터 출력된 버텍스들을 프리미티브들로 변환한다.
비너(140)는 프리미티브 어셈블러(130)로부터 출력된 프리미티브들(또는 테셀레이팅된 프리미티브들)을 이용하여, 비닝 또는 타일링을 수행한다. 즉, 비너(140)는 깊이 테스트(또는 tile Z test)를 수행하여 출력 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 생성(비닝)한다. 한편, 비너(140)는 도 8 내지 도 11에서 설명될 바운딩 박스(bounding box) 비트스트림(제 1 비트스트림), 드로우콜 비트스트림(제 2 비트스트림), 프리미티브 비트스트림(제 3 비트스트림), 테셀레이션 비트스트림과 같은 가시성 비트스트림(visibility bitstream)을 생성한다. 이와 같은 가시성 비트스트림에 대해서는 도 8 내지 도 11을 참고하여 보다 상세하게 설명하도록 한다.
래스터라이저(150)는 생성된 타일 리스트에 기초하여, 출력 프리미티브들을 2차원 공간에서의 픽셀 값들로 변환한다. 프래그먼트는, 프리미티브에 의해 커버되는 픽셀들을 의미하고, 프래그먼트 쉐이더(160)는, 이와 같은 프래그먼트를 생성하고, 프래그먼트에 대한 깊이 값, 스텐실 값, 컬러 값 등을 결정한다. 프래그먼트 쉐이더(160)의 쉐이딩 결과는 버퍼들(180)(예를 들어, 프레임 버퍼)에 저장된 후, 동영상의 프레임으로서 디스플레이될 수 있다.
컨트롤러(170)는 그래픽스 파이프라인(100)의 각 구성요소들(110 내지 150)과 버퍼들(180)의 전반적인 기능들 및 동작들을 제어한다.
도 7은 일 실시예에 따른 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 7을 참고하면, 컨트롤러(170)는 비닝 파이프라인(101) 및 렌더링 파이프라인(102)의 수행을 제어한다.
비닝 파이프라인(101)에서는 테셀레이션이 수행되지 않는다(no tessellation). 앞서 도 3 등에서 설명된 바와 같이, 테셀레이션 파이프라인(300)이 수행된 경우, 많은 삼각형들에 대한 데이터가 생성되므로, 이를 처리하기 위한 많은 하드웨어/소프트웨어 리소스들이 투입되어야 한다. 따라서, 만약 비닝 파이프라인(101)과 렌더링 파이프라인(102) 모두에서 테셀레이션이 반복적으로 수행되어 많은 수의 테셀레이팅된 프리미티브들이 생성되는 경우에는, 연산량이 기하급수적으로 증가하고 연산 처리 속도도 느려질 수 있다. 이를 위하여, 본 실시예에 따른 그래픽스 파이프라인(도 1의 100)은 비닝 파이프라인(101)에서는 테셀레이션을 수행하지 않고, 오로지 렌더링 파이프라인(102)에서만 테셀레이션을 수행하는, 디퍼드 테셀레이션(deferred tessellation)을 수행한다.
한편, 렌더링 파이프라인(102)는 제 1 서브 렌더링 파이프라인(102-1) 및 제 2 서브 렌더링 파이프라인(102-2)을 포함한다. 여기서, 제 1 서브 렌더링 파이프라인(102-1)은 테셀레이션 파이프라인(300)을 수행하는 파이프라인이고, 제 2 서브 렌더링 파이프라인(102-2)은 테셀레이션 파이프라인(300)을 수행하지 않는 파이프라인이다. 즉, 비닝 파이프라인(101)에서 테셀레이션이 수행되지 않는 이유(연산량 감소, 처리 속도 증대 등)와 마찬가지의 이유로, 렌더링 파이프라인(102) 내에서도 테셀레이션이 수행되지 않을 수 있는 서브 파이프라인이 존재할 수 있다.
도 8은 일 실시예에 따른 비닝 파이프라인을 설명하기 위한 도면이다.
도 8에 도시된 비닝 파이프라인(101)에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 8에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
비닝 파이프라인(101)에는 메모리(30)로부터 제공된 드로우콜들(821)이 입력된다. 드로우콜들(821)은 현재 이미지 프레임에서 렌더링될 오브젝트에 관한 드로우 커맨드들에 해당된다.
버텍스 쉐이더(115)는 입력된 드로우콜들(821)로부터 버텍스들을 생성하기 위한 버텍스 쉐이딩(801)을 수행한다. 버텍스 쉐이더(115)는 생성된 버텍스들을 프리미티브 어셈블러(130)로 전달한다. 프리미티브 어셈블러(130)는 버텍스 쉐이더(115)로부터 출력된 버텍스들을, 프리미티브들의 집합으로 변환하는 프리미티브 어셈블링(802)을 수행한다. 비닝 파이프라인(101)에서는 버텍스 쉐이딩(801) 및 프리미티브 어셈블링(802) 사이에 테셀레이션이 수행되지 않는 것으로 설정된다. 따라서, 비닝 파이프라인(101)에서는 테셀레이팅된 프리미티브들이 생성되지 않을 수 있다.
비너(140)는 프리미티브 어셈블러(130)로부터 출력된 프리미티브들을 이용하여, 비닝(803) 또는 타일링을 수행한다. 즉, 비너(140)는 깊이 테스트(또는 tile Z test), 컬링(culling), 클리핑(clipping), HSR(hidden surface removal) 등을 수행하여 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(803)을 수행한다. 이때, 비닝된 타일 리스트는, 비트스트림(822)으로서 메모리(30)에 저장될 수 있다. 또는, 비너(140)에 의한 비닝(803)의 결과는 보다 빠른 액세스를 위하여, 메모리(30) 대신에 GPU(10)의 버퍼들(180) 내에 마련된 캐시(185)에 저장될 수도 있다. 나아가서, 비너(140)는 비닝(803)을 수행하여, 바운딩 박스 비트스트림, 드로우콜 비트스트림, 프리미티브 비트스트림 등과 같은 가시성 비트스트림들을 생성한다. 드로우콜 가시성 비트스트림은 각각의 타일에서의 드로우콜들 각각의 가시성을 나타내는 정보를 포함하고, 프리미티브 비트스트림은 각각의 타일에서의 프리미티브들 각각의 가시성을 나타내는 정보를 포함한다.
도 9는 일 실시예에 따른 바운딩 박스 비트스트림을 생성하는 방법의 흐름도이다.
도 9를 참고하면, 901 단계에서, 비너(140)는 입력된 드로우콜들 중에서, 테셀레이션이 필요한 제 1 타입의 드로우콜 및 테셀레이션이 불필요한 제 2 타입의 드로우콜을 판단한다.
902 단계에서, 비너(140)는 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 커버하는 타일 리스트를 식별하기 위한 타일 비닝을 수행한다. 하지만, 비너(140)는 테셀레이션이 불필요한 제 2 타입의 드로우콜에 대응되는 바운딩 박스에 대해서는 타일 비닝을 수행하지 않는다. 이는, 테셀레이션이 불필요한 제 2 타입의 드로우콜은 결국 렌더링 파이프라인에서도 테셀레이팅되지 않을 것이기 때문이다.
903 단계에서, 비너(140)는 제 1 타입의 드로우콜을 나타내는 식별 정보, 제 2 타입의 드로우콜을 나타내는 식별 정보 및 바운딩 박스의 타일 비닝 결과에 기초한 타일 리스트의 정보를 포함하는 바운딩 박스 비트스트림을 생성한다. 즉, 바운딩 박스 비트스트림은 입력된 드로우콜들 각각에 대한 테셀레이션의 필요성을 나타내는 정보 및 테셀레이팅될 필요가 있는 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 커버하는 타일 리스트의 정보를 포함한다.
한편, 901 단계 내지 903 단계의 바운딩 박스 비트스트림의 생성 과정은, 앞서 도 8에서 설명된 비닝(803)의 스테이지에서 수행될 수 있다.
도 10은 일 실시예에 따른 2×2 타일들에 의해 커버되는 드로우콜들의 예시를 도시한 도면이다.
도 10을 참고하면, 0번째 드로우콜(1000), 1번째 드로우콜(1001) 및 2번째 드로우콜(1002)은 타일 0 내지 타일 4의 2×2 타일들에 의해 커버될 수 있다. 다만, 도 10의 예시는 설명의 편의를 위한 것일 뿐, 본 실시예들은 이에 제한되지 않는다. 각각의 드로우콜들(1000, 1001 및 1002)은 각각 3개씩의 프리미티브들로 구성될 수 있다. 여기서, 0번째 드로우콜(1000)은 테셀레이션이 필요한 드로우콜에 해당되고, 1번째 및 2번째 드로우콜들(1001 및 1002)은 테셀레이션이 불필요한 드로우콜들에 해당되는 것으로 가정한다.
앞서 도 9에서 설명된 901 단계를 참고하면, 비너(135)는 0번째 드로우콜(1000)은 제 1 타입의 드로우콜에 해당되고, 1번째 및 2번째 드로우콜들(1001 및 1002)은 제 2 타입의 드로우콜들에 해당되는 것으로 판단한다. 그리고, 앞서 도 9에서 설명된 902 단계를 참고하면, 비너(135)는 0번째 드로우콜(1000)에 대응되는 바운딩 박스를 결정하고, 타일 비닝을 통해 0번째 드로우콜(1000)에 대응되는 바운딩 박스를 커버하는 타일 리스트(타일 0 및 타일 2)를 식별한다. 이와 같이, 제 1 타입 또는 제 2 타입의 드로우콜을 식별하고, 제 1 타입의 드로우콜에 대응되는 바운딩 박스에 대한 타일 비닝을 수행하는 이유는, 제 1 타입의 드로우콜로부터 생성된 테셀레이팅된 프리미티브들에 대한 타일 비닝에 의해 식별된 타일 리스트는, 제 1 타입의 드로우콜에 대응되는 바운딩 박스에 대한 타일 비닝에 의해 식별된 타일 리스트에 포함될 수 있기 때문이다. 다시 말하면, 제 1 타입의 드로우콜로부터 생성된 테셀레이팅된 프리미티브들로 형성된 공간은 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 벗어나지 않기 때문이다. 이에 대해서는 이하 도 11을 참고하도록 한다.
도 11은 일 실시예에 따른 바운딩 박스의 공간과 테셀레이팅된 프리미티브들로 구성된 공간 사이의 포함 관계를 설명하기 위한 도면이다.
도 11을 참고하면, 제 1 타입의 드로우콜(1101)에 대응되는 바운딩 박스(1110)는 제 1 타입의 드로우콜(1101)이 형성하는 공간을 포함하도록 설정된다. 드로우콜(1101)이 테셀레이팅된 이후에, 테셀레이팅된 프리미티브들(1102)이 형성하는 공간 또한 바운딩 박스(1110)를 벗어나지 않는다. 이는, 그래픽스 API에 의하여, 바운딩 박스(1110)가 이미 테셀레이팅된 프리미티브들(1102)이 형성하는 공간도 포함될 수 있도록 설정되어 있기 때문이다.
비닝 파이프라인(도 8의 101)에서 테셀레이션이 수행되지 않는다 할지라도, 바운딩 박스에 대한 타일 비닝을 수행한다면, 테셀레이팅된 프리미티브들에 대한 타일 비닝을 수행한 것과 유사한 결과를 획득할 수 있다. 따라서, 비닝 파이프라인(도 8의 101)에서는 테셀레이션 파이프라인(테셀레이션 스테이지)이 스킵될 수 있으므로, 비닝 파이프라인(도 8의 101)에서 테셀레이션이 수행될 때보다 GPU(10)의 연산량이 줄어들고 처리 속도가 증대될 수 있다.
도 12는 일 실시예에 따라 바운딩 박스 비트스트림을 생성하는 것을 설명하기 위한 도면이다.
도 12를 참고하면, 0번째 드로우콜(1000)은 테셀레이션이 필요한 드로우콜에 해당되고, 1번째 및 2번째 드로우콜들(1001 및 1002)은 테셀레이션이 불필요한 드로우콜들에 해당되는 것으로 가정한다.
도 12에 도시된 바운딩 박스 비트스트림에서 “1 0 2”에 대해 설명하면, 제일 앞의 “1”은 0번째 드로우콜(1000)에 대한 테셀레이션이 필요하다는 것을 의미하고, 다음의 “0 2”는 드로우콜(1000)에 대응되는 바운딩 박스(1200)를 커버하는 타일들이 “타일 0” 및 “타일 2”라는 것을 의미한다. 바운딩 박스 비트스트림에서 “1 0 2” 에 뒤이은 “0 0”은, 1번째 및 2번째 드로우콜들(1001 및 1002)에 대한 테셀레이션이 불필요하다는 것을 의미한다.
즉, 바운딩 박스 비트스트림은, 입력된 드로우콜들(1000, 1001 및 1002) 각각에 대한 테셀레이션의 필요성을 나타내는 정보 및 테셀레이팅될 필요가 있는 드로우콜(1000)에 대응되는 바운딩 박스(1200)를 커버하는 타일 리스트의 정보를 포함한다. 한편, 도 12에서 설명된 “1 0 2 0 0”과 같은 비트스트림의 형식(form)은 위와 같은 정보들이 포함될 수 있는 한, 다양하게 변경될 수 있다.
도 13은 일 실시예에 따라, 다양한 종류의 가시성 비트스트림들을 설명하기 위한 도면이다.
도 13을 참고하면, 비너(140)는 바운딩 박스 비트스트림, 드로우콜 비트스트림, 프리미티브 비트스트림 및 테셀레이션 비트스트림을 생성할 수 있다. 여기서, 바운딩 박스 비트스트림은 비닝 파이프라인(101)에서만 생성되는 비트스트림일 수 있고, 테셀레이션 비트스트림은 렌더링 파이프라인(102)에서만 생성되는 비트스트림일 수 있다.
바운딩 박스 비트스트림은, 도 12에서 설명된 것과 동일하므로, 자세한 설명은 생략하도록 한다.
드로우콜 비트스트림 및 프리미티브 비트스트림은 테셀레이션이 불필요한 제 2 타입의 드로우콜(예를 들어, 1번째 및 2번째 드로우콜들(1001 및 1002))에 대해서 생성될 수 있다. 이는, 테셀레이션이 필요한 제 1 타입의 드로우콜(예를 들어, 0번째 드로우콜(1000))에 대한 가시성은, 이미 바운딩 박스 비트스트림에 반영되어 있기 때문이다.
드로우콜 비트스트림은, 각각의 타일에서 가시적인(visible) 드로우콜을 식별하기 위한 비트스트림이다. 예를 들어, 타일 0은 1번째 드로우콜(1001)만을 커버하고 있으므로, 타일 0에 대해서는 “1 0”이 할당된다. 타일 1은 1번째 및 2번째 드로우콜들(1001 및 1002)을 모두 커버하고 있으므로, 타일 1에 대해서는 “1 1”이 할당된다. 타일 2는 아무것도 커버하고 있지 않으므로, 타일 2에 대해서는 “0 0”이 할당된다. 타일 3은 2번째 드로우콜(1002)만을 커버하고 있으므로, 타일 3에 대해서는 “0 1”이 할당된다.
프리미티브 비트스트림은, 각각의 타일에서 가시적인(visible) 프리미티브를 식별하기 위한 비트스트림이다. 예를 들어, 타일 0은 1번째 드로우콜(1001)의 프리미티브 P0만을 커버하고 있으므로, 타일 0에 대해서는 “1 0 0 0 0 0”이 할당된다. 타일 1은 1번째 및 2번째 드로우콜들(1001 및 1002)의 모든 프리미티브들을 커버하고 있으므로, 타일 1에 대해서는 “1 1 1 1 1 1”이 할당된다. 타일 2는 아무것도 커버하고 있지 않으므로, 타일 2에 대해서는 “0 0 0 0 0 0”이 할당된다. 타일 3은 2번째 드로우콜(1002)의 프리미티브들 P0, P1 및 P3을 커버하고 있으므로, 타일 3에 대해서는 “0 0 0 1 1 1”이 할당된다.
테셀레이션 비트스트림은, 앞서 설명된 바와 같이, 렌더링 파이프라인(102)에서 테셀레이션이 수행된 이후에 생성될 수 있다. 테셀레이션 비트스트림은, 각각의 타일에서 가시적인(visible) 테셀레이팅된 프리미티브를 식별하기 위한 비트스트림이다. 테셀레이션은 0번째 드로우콜(1000)에 대해서만 수행되고 0번째 드로우콜(1000)에 대응되는 바운딩 박스는 바운딩 박스 비트스트림에서 “0 2”로 정의되었으므로, 테셀레이션 비트스트림은 타일 0 및 타일 2에서의 가시성 정보만을 포함할 수 있다. 타일 0은 0번째 드로우콜(1000)의 프리미티브들 P0, P1 및 P3을 커버하고 있으므로, 타일 0에 대해서는 “1 1 1”이 할당된다. 타일 2도 0번째 드로우콜(1000)의 프리미티브들 P0, P1 및 P3을 커버하고 있으므로, 타일 2에 대해서도 “1 1 1”이 할당된다.
이와 같이, 다양한 종류의 가시성 비트스트림들에 기초하여, 렌더링 파이프라인(102)에서는 현재 처리될 타일에서 가시적인 바운딩 박스, 가시적인 드로우콜, 가시적인 프리미티브만으로 렌더링을 수행할 수 있을 뿐만 아니라 가시적인 대상이 없는 타일의 경우에는 렌더링을 스킵할 수 있으므로, GPU(10)의 연산량이 줄어들고 처리 속도가 증가할 수 있다.
도 14는 일 실시예에 따른 렌더링 파이프라인을 설명하기 위한 도면이다.
도 14에 도시된 렌더링 파이프라인(102)에 대해서는 도 6에서 설명된 GPU(10)의 하드웨어 구성들을 연계하여 설명하도록 하되, 실시예와 관련된 구성들 및 파이프라인 스테이지들에 대해서만 설명하도록 한다. 따라서, 도 14에서 설명된 구성들 및 파이프라인 스테이지들 외에 다른 범용적인 구성요소들 및 파이프라인 스테이지들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
렌더링 파이프라인(102)은, 비닝 파이프라인(101)에서 생성된 바운딩 박스 비트스트림을 이용하여, 테셀레이션이 필요한 제 1 타입의 드로우콜 및 테셀레이션이 불필요한 제 2 타입의 드로우콜에 대해 서로 다른 렌더링 방식으로 타일을 렌더링한다. 여기서, 제 1 타입의 드로우콜은 테셀레이션 스테이지를 포함하는 제 1 서브 렌더링 파이프라인(102-1)에 의해 처리되고, 제 2 타입의 드로우콜은 테셀레이션 스테이지를 포함하지 않는 제 2 서브 렌더링 파이프라인(102-2)에 의해 처리될 수 있다. 즉, 렌더링 파이프라인(102)은, 현재 처리될 타일에서 바운딩 박스 비트스트림에 의해 할당된 바운딩 박스가 식별된 경우, 식별된 바운딩 박스에 대응되는 드로우콜에 대해서만 테셀레이션을 수행하고 나머지 드로우콜에 대해서는 테셀레이션을 수행하지 않는 선별적인 테셀레이션을 수행함으로써, 현재 타일을 렌더링한다.
GPU(10)의 컨트롤러(170)는 바운딩 박스 비트스트림에 포함된 타일 비닝 결과에 기초하여, 바운딩 박스를 커버하는 타일에 대해 높은 우선순위가 할당되도록, 타일들의 렌더링 순서를 스케쥴링한다. 이에 따라, 렌더링 파이프라인(102)은 스케쥴링된 타일들의 렌더링 순서에 따라, 타일 단위로 렌더링이 수행될 수 있다.
렌더링 파이프라인(102)에는 메모리(30)로부터 제공된 드로우콜들(821)이 입력된다. 컨트롤러(170)는 입력된 드로우콜들(821) 각각이 제 1 타입의 드로우콜인지 또는 제 2 타입의 드로우콜인지 여부를 판단한다. 그리고 나서, 컨트롤러(170)는 제 1 타입의 드로우콜에 대해서는 제 1 서브 렌더링 파이프라인(102-1)의 수행을 제어하고, 제 2 타입의 드로우콜에 대해서는 제 2 서브 렌더링 파이프라인(102-2)의 수행을 제어한다.
제 1 서브 렌더링 파이프라인(102-1)은 이전 타일에서 테셀레이션이 수행되지 않았던 제 1 타입의 드로우콜에 대해서는 1411 단계 내지 1418 단계의 렌더링 스테이지들을 수행하고, 이전 타일에서 테셀레이션이 수행됨에 따라 생성된 테셀레이션 비트스트림이 메모리(30)에 저장된 적이 있는 제 1 타입의 드로우콜에 대해서는 1401 단계, 1417 단계 및 1418 단계의 렌더링 스테이지들을 수행한다. 이는, 테셀레이션이 이미 수행되었던 적이 있는 제 1 타입의 드로우콜에 대해서는 반복적인 테셀레이션이 수행되지 않도록 하여, GPU(10)의 연산량을 줄이기 위함일 수 있다.
예를 들어, 앞서 도 10 내지 도 13에서 설명되었던 2×2 타일들에 의해 커버되는 0번째, 1번째 및 2번째 드로우콜들(1000, 1001 및 1002)을 예로 들어 설명하면, 0번째 드로우콜(1000)에 대해서는 제 1 서브 렌더링 파이프라인(102-1)이 수행되고, 1번째 및 2번째 드로우콜들(1001 및 1002)에 대해서는 제 2 서브 렌더링 파이프라인(102-2)이 수행된다. 한편, 0번째 드로우콜(1000)에 대응되는 바운딩 박스는 타일 0 및 타일 2에 의해 커버되고, 타일 0에 대한 렌더링이 타일 2보다 먼저 수행되도록 스케쥴링되는 것으로 가정할 수 있다. 타일 0에는 0번째 드로우콜(1000)의 모든 프리미티브들 P0, P1 및 P2가 커버되고 있으므로, 타일 0에 대한 테셀레이션의 수행이 완료되면 프리미티브들 P0, P1 및 P2 모두에 대한 테셀레이팅된 프리미티브들이 생성되고 이는 메모리(30)의 비트스트림(822)에 저장될 수 있다. 이후에 타일 2(현재 타일)에 대한 렌더링이 수행될 때, 테셀레이션이 수행될 필요는 없을 수 있다. 왜냐하면, 타일 0(이전 타일)에 대한 렌더링에 의해 테셀레이팅된 프리미티브들이 이미 생성되었기 때문이다. 따라서, 타일 2(현재 타일)에 대한 렌더링이 수행될 때에는, 테셀레이션이 스킵되고 메모리(30)의 비트스트림(822)에 저장된 테셀레이팅된 프리미티브들에 대한 데이터를 로드(load)하여 나머지 렌더링 스테이지들을 수행한다.
이전 타일에서 테셀레이션이 수행되지 않았던 제 1 타입의 드로우콜(즉, 최초로 테셀레이팅될 드로우콜)에 대해 수행될 1411 단계 내지 1418 단계의 렌더링 스테이지들을 설명하면 다음과 같다.
버텍스 쉐이더(115)는 드로우콜들(821) 중 제 1 타입의 드로우콜로부터 버텍스들을 생성하기 위한 버텍스 쉐이딩(1411)을 수행한다. 버텍스 쉐이더(115)는 생성된 버텍스들을 컨트롤 쉐이더(121)로 전달한다.
컨트롤 쉐이더(121), 테셀레이터(123) 및 테셀레이션 이벨류에이션 쉐이더(125)는 도 3에서 설명된 바와 같이, 버텍스들을 이용하여 컨트롤 쉐이딩(1412), 테셀레이팅(1413) 및 테셀레이션 이벨류에이션 쉐이딩(1414)를 수행함으로써, 테셀레이팅된 버텍스들을 생성한다.
프리미티브 어셈블러(130)는 테셀레이팅된 버텍스들을, 테셀레이팅된 프리미티브들의 집합으로 변환하는 프리미티브 어셈블링(1415)을 수행한다.
비너(140)는 프리미티브 어셈블러(130)로부터 출력된 테셀레이팅된 프리미티브들을 이용하여, 비닝(1416) 또는 타일링을 수행한다. 즉, 비너(140)는 깊이 테스트(또는 tile Z test), 컬링(culling), 클리핑(clipping), HSR(hidden surface removal) 등을 수행하여 테셀레이팅된 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 예측하는 비닝(1416)을 수행한다. 나아가서, 비너(140)는 비닝(1416)을 수행하여, 테셀레이션 비트스트림과 같은 가시성 비트스트림을 생성하고, 이를 메모리(30)의 비트스트림(822)에 저장한다. 한편, 앞서 설명된 바와 같이, 보다 빠른 액세스를 위하여, 생성된 가시성 비트스트림은 메모리(30) 대신에 GPU(10)의 버퍼들(180) 내에 마련된 캐시(도 8의 185)에 저장될 수도 있다. 테셀레이팅된 프리미티브들에 대한 좌표 정보 등도 또한 메모리(30)나 캐시(185)에 저장될 수 있다.
래스터라이저(150)는 메모리(30) 또는 캐시(185)에 저장된 가시성 비트스트림들을 이용하여, 테셀레이팅된 프리미티브들을 2차원 공간에서의 픽셀 값들로 변환하는 래스터라이징(1417)을 수행한다. 프래그먼트 쉐이더(160)는, 프래그먼트를 생성하고 프래그먼트에 대한 깊이 값, 스텐실 값, 컬러 값 등을 결정하는 프래그먼트 쉐이딩(1418)을 수행한다. 프래그먼트 쉐이더(160)의 프래그먼트 쉐이딩(1418)의 결과는 버퍼들(180)(예를 들어, 프레임 버퍼)에 저장된 후, 동영상의 프레임으로서 디스플레이될 수 있다.
다음으로, 이전 타일에서 테셀레이션이 수행된 적이 있던 제 1 타입의 드로우콜에 대해 수행될 1401 단계, 1417 단계 및 1418 단계의 렌더링 스테이지들을 설명하면 다음과 같다.
테셀레이션 비트스트림 및 테셀레이팅된 프리미티브들의 좌표 데이터 등이 메모리(30) 또는 캐시(185)로부터 로드된다(load)(1401). 래스터라이저(150)는 로드된 테셀레이션 비트스트림 및 테셀레이팅된 프리미티브들의 좌표 데이터 등을 이용하여, 테셀레이팅된 프리미티브들을 2차원 공간에서의 픽셀 값들로 변환하는 래스터라이징(1417)을 수행한다. 프래그먼트 쉐이더(160)는, 프래그먼트를 생성하고 프래그먼트에 대한 깊이 값, 스텐실 값, 컬러 값 등을 결정하는 프래그먼트 쉐이딩(1418)을 수행한다. 프래그먼트 쉐이더(160)의 프래그먼트 쉐이딩(1418)의 결과는 버퍼들(180)(예를 들어, 프레임 버퍼)에 저장된 후, 동영상의 프레임으로서 디스플레이될 수 있다.
제 2 타입의 드로우콜에 대해서는 제 2 서브 렌더링 파이프라인(102-2)이 수행된다. 제 2 타입의 드로우콜은 테셀레이션을 필요로 하지 않으므로, 제 2 서브 렌더링 파이프라인(102-2)에는 1412 단계 내지 1414 단계와 같은 테셀레이션 파이프라인(테셀레이션 스테이지)이 포함되지 않는다. 즉, 현재 타일에서 처리될 상기 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들이 이전 타일에서 이미 생성된 경우, 현재 타일에서 처리될 드로우콜에 대한 테셀레이션은 스킵될 수 있다.
버텍스 쉐이더(115)는 드로우콜들(821) 중 제 2 타입의 드로우콜로부터 버텍스들을 생성하기 위한 버텍스 쉐이딩(1421)을 수행한다. 버텍스 쉐이더(115)는 생성된 버텍스들을 프리미티브 어셈블러(130)로 전달한다.
프리미티브 어셈블러(130)는 버텍스 쉐이더(115)로부터 출력된 버텍스들을 프리미티브들로 변환하는 프리미티브 어셈블링(1422)을 수행한다.
래스터라이저(150)는 메모리(30) 또는 캐시(185)에 저장된 가시성 비트스트림들(드로우콜 비트스트림, 프리미티브 비트스트림 등)을 이용하여, 프리미티브들을 2차원 공간에서의 픽셀 값들로 변환하는 래스터라이징(1423)을 수행한다. 프래그먼트 쉐이더(160)는, 프래그먼트를 생성하고 프래그먼트에 대한 깊이 값, 스텐실 값, 컬러 값 등을 결정하는 프래그먼트 쉐이딩(1424)을 수행한다. 프래그먼트 쉐이더(160)의 프래그먼트 쉐이딩(1424)의 결과는 버퍼들(180)(예를 들어, 프레임 버퍼)에 저장된 후, 동영상의 프레임으로서 디스플레이될 수 있다.
한편, 컨트롤러(170)는, 렌더링 파이프라인이 수행되는 동안, 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들이 다음에 처리될 다른 타일에서 더 이상 이용되지 않는 경우 테셀레이팅된 프리미티브들과 관련된 데이터들을 메모리(30) 또는 캐시(185)에서 삭제하도록 제어한다.
앞서 설명된 바와 같이, 렌더링 파이프라인(102)은 입력된 드로우콜의 종류, 즉 제 1 타입인지 또는 제 2 타입인지 여부에 따라, 서로 다른 종류의 서브 렌더링 파이프라인들(102-1 및 102-2)이 수행될 수 있다. 즉, 모든 드로우콜들에 대해 무조건적인 테셀레이션이 수행되지 않고, 테셀레이션이 필요한 드로우콜에 대해서만 테셀레이션이 수행되므로, GPU(10)의 연산량을 감소시키면서 처리 속도를 증대시킬 수 있다.
도 15는 일 실시예에 따른 렌더링 파이프라인을 수행하는 방법의 상세 흐름도이다. 도 15에 도시된, 렌더링 파이프라인(102)의 수행 방법은, 앞서 설명된 도면들에서 설명된 실시예들에 관련되므로, 이하 생략된 내용이라 할지라도, 앞서 도면들에서 설명된 내용들은 도 15의 방법에도 적용될 수 있다.
1501 단계에서, GPU(10)는 가시성 비트스트림을 이용하여 타일들의 렌더링 순서를 스케쥴링한다. 이때, GPU(10)는 바운딩 박스 비트스트림을 이용하여 바운딩 박스를 커버하고 있는 타일들에 대해 높은 우선순위가 부여되도록 타일들의 처리 순서를 스케쥴링할 수 있다.
1502 단계에서, GPU(10)는 스케쥴링 결과에 기초하여, 현재 처리될(렌더링될) 타일을 결정한다.
1503 단계에서, GPU(10)는 현재 타일에 의해 커버되는 드로우콜이 테셀레이션이 필요한 드로우콜(즉, 제 1 타입의 드로우콜)인지 여부를 판단한다. 현재 타일에 의해 커버되는 드로우콜이 제 1 타입인 경우, 1504 단계로 진행된다. 하지만, 현재 타일에 의해 커버되는 드로우콜이 제 1 타입이 아닌, 테셀레이션이 불필요한 드로우콜(즉, 제 2 타입의 드로우콜)인 경우, 1505 단계로 진행된다.
1504 단계에서, GPU(10)는 메모리(30) 또는 캐시(185)에 테셀레이션 비트스트림이 존재하는지 여부를 판단한다. 테셀레이션 비트스트림이 존재하는 경우, 1507 단계로 진행된다. 하지만, 테셀레이션 비트스트림이 존재하지 않는 경우(즉, 테셀레이션이 최초로 수행되는 경우), 1506 단계로 진행된다.
1505 단계에서, GPU(10)는, 테셀레이션이 불필요한 제 2 타입의 드로우콜에 대해 제 2 서브 렌더링 파이프라인(102-2)을 수행한다.
1506 단계에서, GPU(10)는 테셀레이션 비트스트림이 존재하지 않는 경우(즉, 테셀레이션이 최초로 수행되는 경우)에는, 입력된 제 1 타입의 드로우콜에 대해 테셀레이션 파이프라인(300)을 수행하여 테셀레이션 비트스트림을 생성한다. 그리고 나서, 생성된 테셀레이션 비트스트림 및 테셀레이팅된 프리미티브들의 좌표 데이터 등을 메모리(30) 또는 캐시(185)에 저장한다.
1507 단계에서, GPU(10)는 이전 타일의 렌더링 과정에서 저장된 테셀레이션 비트스트림 및 테셀레이팅된 프리미티브들의 좌표 데이터 등, 또는 1506 단계에서 생성된 테셀레이션 비트스트림 및 테셀레이팅된 프리미티브들의 좌표 데이터 등을 이용하여, 나머지 렌더링 스테이지들을 수행한다.
1508 단계에서, GPU(10)는 테셀레이션 비트스트림이 다음에 처리될 다른 타일에서 또 사용되는지 여부를 판단한다. 즉, GPU(10)는 현재 타일에서 처리된 제 1 타입의 드로우콜이 다음에 처리될 다른 타일에서도 사용되는지 여부를 판단한다. 만약, 현재 타일에서 처리된 제 1 타입의 드로우콜이 다음의 다른 타일에서도 사용되는 경우, 1510 단계로 진행된다. 하지만, 다음의 다른 타일에서 사용되지 않는 경우, 1509 단계로 진행된다.
1509 단계에서, GPU(10)는 현재 타일에서 처리된 제 1 타입의 드로우콜이 다음의 다른 타일에서 사용되지 않는 경우, 테셀레이팅된 프리미티브들과 관련된 데이터를 메모리(30) 또는 캐시(185)에서 삭제하도록 제어한다.
1510 단계에서, GPU(10)는 현재 타일에서 렌더링되지 않은 드로우콜이 남아 있는지 여부를 판단한다. 만약, 현재 타일에서 렌더링되지 않은 드로우콜이 남아 있는 경우, 다시 1502 단계로 진행된다. 하지만, 현재 타일에서 렌더링되지 않은 드로우콜이 남아 있지 않은 경우, 1511 단계로 진행된다.
1511 단계에서, GPU(10)는 렌더링되지 않은 타일이 남아 있는지 여부를 판단한다. 만약, 렌더링되지 않은 타일이 남아 있는 경우, 다시 1502 단계로 진행된다. 하지만, 렌더링되지 않은 타일이 남아 있지 않은 경우, 렌더링 파이프라인의 수행은 종료된다.
도 16은 일 실시예에 따른, 컴퓨팅 장치의 상세 하드웨어 구성을 도시한 블록도이다.
도 16를 참고하면, 컴퓨팅 장치(1)는 GPU(10), CPU(20), 메모리(30), 버퍼들(35), Bus(40), 디스플레이부(1601), 입력부(1603) 및 통신부(1605)를 포함한다. 도 16에 도시된 컴퓨팅 장치(1)에는 실시예와 관련된 구성요소들만이 도시되어 있다. 따라서, 도 16에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
GPU(10), CPU(20) 및 메모리(30)는 앞서 도면들에서 설명된 동작들 및 기능들을 수행할 수 있다.
버퍼들(35)은 타일 기반 그래픽스 파이프라인 또는 타일 기반 렌더링을 통해 출력된 타일 정보들을 저장한다. 예를 들어, 버퍼들(35)은 타일에서의 깊이 테스트(depth test) 결과를 저장하거나, 타일에서의 렌더링 결과를 저장할 수 있다. 비록 도 16에서 버퍼들(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) 등의 다양한 디스플레이 패널들로 구현될 수 있다.
입력부(1603)는 사용자로부터 정보를 입력받기 위한, 입력 인터페이싱 수단이다. 입력부(1603)는 터치 패드, 트랙볼, 마우스, 키보드, 게임용 컨트롤러 등과 같은 형태로 구현될 수 있다. 디스플레이부(1601)와 입력부(1603)는 일체화된 터치 스크린의 하드웨어로 구현될 수 있다.
통신부(1605)는 이동통신을 위한 이동통신 모듈, 유선/무선 랜(LAN) 모듈, 근거리 무선 통신을 위한 Wi-Fi 모듈, Bluetooth 모듈, NFC(near field communication) 모듈 등을 포함할 수 있다.
도 17은 일 실시예에 따른 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 17에 도시된, 그래픽스 파이프라인(100)의 수행 방법은, 앞서 설명된 도면들에서 설명된 실시예들에 관련되므로, 이하 생략된 내용이라 할지라도, 앞서 도면들에서 설명된 내용들은 도 17의 방법에도 적용될 수 있다.
1701 단계에서, GPU(10)는 테셀레이팅될 필요가 있는 드로우콜에 대응되는 바운딩 박스의 타일 비닝 결과를 포함하는 바운딩 박스 비트스트림을 생성하는, 비닝 파이프라인(101)을 수행한다.
1702 단계에서, GPU(10)는 현재 처리될 타일에서 바운딩 박스 비트스트림에 의해 할당된 바운딩 박스가 식별된 경우, 식별된 바운딩 박스에 대응되는 드로우콜에 대한 선별적인 테셀레이션을 수행함으로써 현재 타일을 렌더링하는, 렌더링 파이프라인(102)을 수행한다.
본 실시예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
본 실시예에서 설명하는 특정 실행들은 예시들로서, 어떠한 방법으로도 기술적 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다.
본 명세서(특히 특허청구범위에서)에서 “상기”의 용어 및 이와 유사한 지시 용어의 사용은 단수 및 복수 모두에 해당하는 것일 수 있다. 또한, 범위(range)를 기재한 경우 상기 범위에 속하는 개별적인 값을 포함하는 것으로서(이에 반하는 기재가 없다면), 상세한 설명에 상기 범위를 구성하는 각 개별적인 값을 기재한 것과 같다. 마지막으로, 방법을 구성하는 단계들에 대하여 명백하게 순서를 기재하거나 반하는 기재가 없다면, 상기 단계들은 적당한 순서로 행해질 수 있다. 반드시 상기 단계들의 기재 순서에 한정되는 것은 아니다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (20)

  1. 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법에 있어서,
    비닝 파이프라인에서, 입력된 드로우콜들 각각이 테셀레이션이 필요한 제 1 타입의 드로우콜인지 또는 테셀레이션이 불필요한 제 2 타입의 드로우콜인지 여부를 판단하는 단계;
    상기 비닝 파이프라인에서, 상기 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 커버하는 타일 리스트를 식별하기 위한 타일 비닝을 수행하는 단계;
    상기 비닝 파이프라인에서, 상기 제 1 타입의 드로우콜을 나타내는 식별 정보, 상기 제 2 타입의 드로우콜을 나타내는 식별 정보 및 상기 타일 리스트의 정보를 포함하는 바운딩 박스 비트스트림을 생성하는 단계; 및
    렌더링 파이프라인에서, 테셀레이션을 수행하는 단계를 포함하고,
    상기 테셀레이션을 수행하는 단계는 상기 제 1 타입의 드로우콜을 포함하는 타일들에 대해서만 상기 테셀레이션을 수행하고,
    제 1 타일이 상기 제 1 타입의 드로우콜을 포함하는 경우, 상기 제 1 타일의 프리미티브들은 테셀레이팅되고, 제 2 타일이 상기 제 1 타입의 드로우콜 및 상기 제 1 타일에서와 동일한 프리미티브들을 포함하는 경우, 상기 제 2 타일은 테셀레이팅되지 않는, 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 비닝 파이프라인에서,
    타일들 각각에 대하여 입력된 드로우콜들의 적어도 하나가 타일에 존재하는지 여부를 나타내는 정보를 포함하는 드로우콜 비트스트림, 및 타일들 각각에 대하여 상기 입력된 드로우콜들에 포함된 프리미티브들의 개수를 나타내는 정보를 포함하는 프리미티브 비트스트림을 생성하는 단계를 더 포함하는, 방법.
  4. 삭제
  5. 제 1 항에 있어서,
    상기 그래픽스 파이프라인은
    상기 렌더링 파이프라인에서만 상기 테셀레이션을 수행하는, 디퍼드 테셀레이션(deferred tessellation)을 수행하는, 방법.
  6. 삭제
  7. 제 1 항에 있어서,
    상기 제 1 타입의 드로우콜은
    테셀레이션 스테이지를 포함하는 제 1 서브 렌더링 파이프라인에 의해 처리되고,
    상기 제 2 타입의 드로우콜은
    테셀레이션 스테이지를 포함하지 않는 제 2 서브 렌더링 파이프라인에 의해 처리되는, 방법.
  8. 삭제
  9. 제 1 항에 있어서,
    상기 렌더링 파이프라인에서,
    상기 바운딩 박스 비트스트림에 기초하여, 상기 바운딩 박스를 커버하는 타일에 대해 상기 바운딩 박스를 커버하지 않는 타일보다 높은 우선순위가 할당되도록, 타일들의 렌더링 순서를 스케쥴링하는 단계를 더 포함하고,
    상기 렌더링 파이프라인은
    상기 스케쥴링된 타일들의 렌더링 순서에 따라, 타일 단위로 상기 렌더링을 수행하는, 방법.
  10. 제 1 항에 있어서,
    상기 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들이 다른 타일에서 더 이상 이용되지 않는 경우 메모리로부터 상기 테셀레이팅된 프리미티브들과 관련된 데이터를 삭제하는 단계를 더 포함하는, 방법.
  11. 제 1 항, 제 3 항, 제 5 항, 제 7 항, 제 9 항 및 제 10 항 중에 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적(non-transitory) 기록매체.
  12. 그래픽스 파이프라인을 수행하는 컴퓨팅 장치에 있어서,
    입력된 드로우콜들 각각이 테셀레이션이 필요한 제 1 타입의 드로우콜인지 또는 테셀레이션이 불필요한 제 2 타입의 드로우콜인지 여부를 비닝 파이프라인에서 판단하고, 상기 비닝 파이프라인에서 상기 제 1 타입의 드로우콜에 대응되는 바운딩 박스를 커버하는 타일 리스트를 식별하기 위한 타일 비닝을 수행하고, 상기 비닝 파이프라인에서 상기 제 1 타입의 드로우콜을 나타내는 식별 정보, 상기 제 2 타입의 드로우콜을 나타내는 식별 정보 및 상기 타일 리스트의 정보를 포함하는 바운딩 박스 비트스트림을 생성하고, 렌더링 파이프라인에서 상기 제 1 타입의 드로우콜을 포함하는 타일들에 대해서만 테셀레이션을 수행하는 그래픽 프로세싱 장치; 및
    상기 비닝 파이프라인에서 생성된 상기 바운딩 박스 비트스트림을 저장하고 상기 저장된 바운딩 박스 비트스트림을 상기 렌더링 파이프라인에 제공하는 메모리를 포함하고,
    제 1 타일이 상기 제 1 타입의 드로우콜을 포함하는 경우, 상기 제 1 타일의 프리미티브들은 테셀레이팅되고, 제 2 타일이 상기 제 1 타입의 드로우콜 및 상기 제 1 타일에서와 동일한 프리미티브들을 포함하는 경우, 상기 제 2 타일은 테셀레이팅되지 않는, 컴퓨팅 장치.
  13. 삭제
  14. 제 12 항에 있어서,
    상기 그래픽 프로세싱 장치는
    타일들 각각에 대하여 입력된 드로우콜들의 적어도 하나가 타일에 존재하는지 여부를 나타내는 정보를 포함하는 드로우콜 비트스트림, 및 타일들 각각에 대하여 상기 입력된 드로우콜들에 포함된 프리미티브들의 개수를 나타내는 정보를 포함하는 프리미티브 비트스트림을 생성하는, 컴퓨팅 장치.
  15. 삭제
  16. 제 12 항에 있어서,
    상기 그래픽 프로세싱 장치는
    디퍼드 테셀레이션(deferred tessellation)에 기초한 상기 그래픽스 파이프라인을 수행하는, 컴퓨팅 장치.
  17. 삭제
  18. 제 12 항에 있어서,
    상기 제 1 타입의 드로우콜은
    테셀레이션 스테이지를 포함하는 제 1 서브 렌더링 파이프라인에 의해 처리되고,
    상기 제 2 타입의 드로우콜은
    테셀레이션 스테이지를 포함하지 않는 제 2 서브 렌더링 파이프라인에 의해 처리되는, 컴퓨팅 장치.
  19. 제 12 항에 있어서,
    상기 그래픽 프로세싱 장치는
    상기 바운딩 박스 비트스트림에 기초하여 상기 바운딩 박스를 커버하는 타일에 대해 상기 바운딩 박스를 커버하지 않는 타일보다 높은 우선순위가 할당되도록, 타일들의 렌더링 순서를 스케쥴링하고, 상기 스케쥴링된 타일들의 렌더링 순서에 따라 타일 단위로 상기 렌더링을 수행하는, 컴퓨팅 장치.
  20. 제 12 항에 있어서,
    상기 메모리는
    상기 제 1 타입의 드로우콜에 대한 테셀레이팅된 프리미티브들이 다른 타일에서 더 이상 이용되지 않는 경우 상기 테셀레이팅된 프리미티브들과 관련된 데이터를 삭제하는, 컴퓨팅 장치.
KR1020150161918A 2015-11-18 2015-11-18 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법 Active KR102381945B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020150161918A KR102381945B1 (ko) 2015-11-18 2015-11-18 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
US15/202,608 US10192357B2 (en) 2015-11-18 2016-07-06 Graphic processing apparatus and method of performing graphics pipeline
EP16197336.7A EP3171336B1 (en) 2015-11-18 2016-11-04 Graphic processing apparatus and method of performing graphics pipeline
JP2016223100A JP2017097870A (ja) 2015-11-18 2016-11-16 グラフィックス処理装置を含むコンピューティング装置、及びグラフィックス処理装置においてグラフィックスパイプラインを実行する方法
CN201611013541.3A CN107038740B (zh) 2015-11-18 2016-11-17 图形处理设备和执行图形管线的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150161918A KR102381945B1 (ko) 2015-11-18 2015-11-18 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법

Publications (2)

Publication Number Publication Date
KR20170058113A KR20170058113A (ko) 2017-05-26
KR102381945B1 true KR102381945B1 (ko) 2022-04-01

Family

ID=57256107

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150161918A Active KR102381945B1 (ko) 2015-11-18 2015-11-18 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법

Country Status (5)

Country Link
US (1) US10192357B2 (ko)
EP (1) EP3171336B1 (ko)
JP (1) JP2017097870A (ko)
KR (1) KR102381945B1 (ko)
CN (1) CN107038740B (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US11080928B2 (en) * 2019-04-01 2021-08-03 Qualcomm Incorporated Methods and apparatus for visibility stream management
US11373020B2 (en) * 2019-07-29 2022-06-28 GM Global Technology Operations LLC Method and system with mesh data conversion for stamping dies
US11010862B1 (en) * 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US20210287418A1 (en) * 2020-03-10 2021-09-16 Advanced Micro Devices, Inc. Graphics processing unit render mode selection system
KR102258610B1 (ko) * 2020-08-07 2021-05-31 대한민국 모바일 기기에서의 대규모 건축물의 증강현실 구현을 위한 데이터 최적화에 의한 인터페이스 향상 방법
US11908079B2 (en) * 2022-04-08 2024-02-20 Qualcomm Incorporated Variable rate tessellation
US20240005602A1 (en) * 2022-06-30 2024-01-04 Advanced Micro Devices, Inc. Pipeline delay reduction for coarse visibility compression
CN116912395B (zh) * 2023-09-14 2024-01-12 武汉蜂鸟龙腾软件有限公司 基于OpenGL的图形混合渲染方法、装置及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130120380A1 (en) 2011-11-16 2013-05-16 Qualcomm Incorporated Tessellation in tile-based rendering
US20130265309A1 (en) 2012-04-04 2013-10-10 Qualcomm Incorporated Patched shading in graphics processing

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009093956A1 (en) 2008-01-23 2009-07-30 Swiftfoot Graphics Ab Method, apparatus, and computer program product for improved graphics performance
GB201007348D0 (en) 2010-04-30 2010-06-16 Imagination Tech Ltd Programmable tessellation in a tile based rendering system
US9330495B2 (en) * 2012-08-09 2016-05-03 Qualcomm Incorporated Extending DX11 GPU for programmable vector graphics
US8941676B2 (en) 2012-10-26 2015-01-27 Nvidia Corporation On-chip anti-alias resolve in a cache tiling architecture
US9030480B2 (en) * 2012-12-18 2015-05-12 Nvidia Corporation Triggering performance event capture via pipelined state bundles
GB2509113B (en) 2012-12-20 2017-04-26 Imagination Tech Ltd Tessellating patches of surface data in tile based computer graphics rendering
US9483861B2 (en) 2013-03-15 2016-11-01 Qualcomm Incorporated Tile-based rendering
WO2014172687A2 (en) * 2013-04-18 2014-10-23 Massachusetts Institute Of Technology, Inc. Methods and apparati for implementing programmable pipeline for three-dimensional printing including multi-material applications
KR102109130B1 (ko) 2013-08-12 2020-05-08 삼성전자주식회사 그래픽스 프로세싱 유닛, 이의 동작 방법, 및 이를 포함하는 장치들

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130120380A1 (en) 2011-11-16 2013-05-16 Qualcomm Incorporated Tessellation in tile-based rendering
US20130265309A1 (en) 2012-04-04 2013-10-10 Qualcomm Incorporated Patched shading in graphics processing

Also Published As

Publication number Publication date
US20170140573A1 (en) 2017-05-18
CN107038740A (zh) 2017-08-11
US10192357B2 (en) 2019-01-29
CN107038740B (zh) 2021-09-14
JP2017097870A (ja) 2017-06-01
KR20170058113A (ko) 2017-05-26
EP3171336A1 (en) 2017-05-24
EP3171336B1 (en) 2019-02-27

Similar Documents

Publication Publication Date Title
KR102327144B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
US10049426B2 (en) Draw call visibility stream
KR101563098B1 (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
KR102651126B1 (ko) 그래픽 프로세싱 장치 및 그래픽스 파이프라인에서 텍스처를 처리하는 방법
JP5960368B2 (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
KR102341267B1 (ko) 양안 시차 영상에 대한 렌더링 방법 및 장치
KR101697910B1 (ko) 그래픽 프로세싱을 위한 임의적 제어 지점들에서의 결함-허용 선점 메커니즘
US9715750B2 (en) System and method for layering using tile-based renderers
KR102499397B1 (ko) 그래픽스 파이프라인을 수행하는 방법 및 장치
KR20160148594A (ko) 그래픽스 프로세싱에 있어서 렌더 타깃에 기초한 플렉스 렌더링
KR102521654B1 (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법
JP6884766B2 (ja) 帯域幅圧縮グラフィックスデータの記憶
KR20230048441A (ko) 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법
CN104823220A (zh) 用于图形处理的图形存储器加载掩模
US10262391B2 (en) Graphics processing devices and graphics processing methods

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20151118

PG1501 Laying open of application
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20201118

Comment text: Request for Examination of Application

Patent event code: PA02011R01I

Patent event date: 20151118

Comment text: Patent Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20211014

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20211230

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20220329

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20220330

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
PR1001 Payment of annual fee

Payment date: 20250225

Start annual number: 4

End annual number: 4