KR20230048441A - 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법 - Google Patents

그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법 Download PDF

Info

Publication number
KR20230048441A
KR20230048441A KR1020237009907A KR20237009907A KR20230048441A KR 20230048441 A KR20230048441 A KR 20230048441A KR 1020237009907 A KR1020237009907 A KR 1020237009907A KR 20237009907 A KR20237009907 A KR 20237009907A KR 20230048441 A KR20230048441 A KR 20230048441A
Authority
KR
South Korea
Prior art keywords
rendering
gpu
render target
render
pass
Prior art date
Application number
KR1020237009907A
Other languages
English (en)
Other versions
KR102614847B1 (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 퀄컴 인코포레이티드
Publication of KR20230048441A publication Critical patent/KR20230048441A/ko
Application granted granted Critical
Publication of KR102614847B1 publication Critical patent/KR102614847B1/ko

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • A63F13/52Controlling the output signals based on the game progress involving aspects of the displayed game scene
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

본 개시는 그래픽 프로세싱 유닛에 의한 비디오/그래픽스 콘텐츠의 하이브리드 렌더링을 위한 방법 및 장치에 관한 것이다. 장치는 디스플레이 디바이스에 표시될 장면의 프레임을 위해 다수의 렌더링 패스를 수행하도록 디스플레이 장치의 그래픽스 프로세싱 유닛을 구성할 수 있다. 더욱이, 장치는 GPU의 온칩 그래픽스 메모리 또는 디스플레이 장치의 시스템 중 일방에 저장되는 제 1 렌더 타겟을 생성하기 위해 다수의 렌더링 패스 중 제 1 렌더링 패스를 수행하도록 그래픽스 프로세싱 유닛을 제어할 수 있다. 장치는 또한 디스플레이 장치의 시스템 메모리 또는 GPU의 온칩 그래픽스 메모리에 대안적으로 저장되는 제 2 렌더링 타겟을 생성하기 위해 제 2 렌더링 패스를 수행하도록 그래픽스 프로세싱 유닛을 제어할 수 있다.

Description

그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법
관련 출원(들)에 대한 상호 참조
본 특허출원은 "APPARATUS AND METHOD FOR GRAPHICS PROCESSING UNIT HYBRID RENDERING" 의 명칭으로 2020년 9월 30일자로 출원된 미국 특허출원 제17/039,873호에 대한 우선권을 주장하고 이 출원은 본 발명의 양수인에게 양도되고 참조에 의해 모든 목적을 위해 본 명세서에 명시적으로 원용된다.
기술분야
본 개시는 일반적으로 프로세싱 시스템에 관한 것으로, 더욱 상세하게는 그래픽스 또는 컴퓨터 프로세싱을 위한 하나 이상의 기술들에 관한 것이다.
컴퓨팅 디바이스는 디스플레이를 위한 그래픽 데이터의 렌더링을 가속화하기 위해 그래픽스 프로세싱 유닛 (GPU) 또는 중앙 프로세싱 유닛 (CPU) 을 종종 활용한다. 이러한 컴퓨팅 디바이스는 예를 들어, 컴퓨터 워크스테이션, 모바일 폰, 예컨대 소위 스마트폰, 임베디드 시스템, 개인용 컴퓨터, 태블릿 컴퓨터 및 비디오 게임 콘솔을 포함할 수도 있다. GPU들은, 그래픽스 프로세싱 커맨드들을 실행하고 프레임을 출력하기 위해 함께 동작하는 하나 이상의 프로세싱 스테이지를 포함하는 그래픽스 프로세싱 파이프라인을 실행한다. CPU 는 하나 이상의 그래픽스 프로세싱 커맨드를 GPU 에 발행함으로써 GPU 의 동작을 제어할 수도 있다. 현대의 CPU들은 통상적으로, 각각이 실행 동안 GPU 를 활용해야 할 수도 있는, 다수의 애플리케이션들을 동시에 실행할 수 있다. 디스플레이 상에 시각적 제시를 위한 콘텐츠를 제공하는 디바이스는 일반적으로 GPU 를 포함한다.
통상적으로, 디바이스의 CPU 또는 GPU 는 컴퓨터 또는 그래픽스 프로세싱에서 프로세스들을 수행하도록 구성된다. 그러나, 렌더링된 콘텐츠의 복잡도가 증가하고 GPU 메모리의 물리적 제약에 따라, 컴퓨터 또는 그래픽스 프로세싱 개선에 대한 필요성이 커졌다.
다음은 하나 이상의 양태들의 간략화된 개요를, 그러한 양태들의 기본적인 이해를 제공하기 위해 제시한다. 이 개요는 모든 고려된 양태들의 광범위한 개관이 아니며, 모든 양태들의 핵심적인 엘리먼트들을 식별하지도 않고 임의의 또는 모든 양태들의 범위를 기술하지도 않도록 의도된다. 그 유일한 목적은 이후에 제시되는 보다 상세한 설명에 대한 서두로서 간략화된 형태로 하나 이상의 양태의 일부 개념들을 제시하는 것이다.
본 개시는 그래픽스 프로세싱 유닛에 의한 비디오/그래픽스 콘텐츠의 하이브리드 렌더링(hybrid rendering)을 위한 방법 및 장치에 관한 것이다. 장치는 디스플레이 디바이스에 표시될 장면의 프레임을 위해 다수의 렌더링 패스를 수행하도록 디스플레이 장치의 그래픽스 프로세싱 유닛을 구성할 수 있다. 더욱이, 장치는 GPU의 온칩 그래픽스 메모리 또는 디스플레이 장치의 시스템 중 일방에 저장되는 제 1 렌더 타겟을 생성하기 위해 다수의 렌더링 패스 중 제 1 렌더링 패스를 수행하도록 그래픽스 프로세싱 유닛을 제어할 수 있다. 장치는 또한 디스플레이 장치의 시스템 메모리 또는 GPU의 온칩 그래픽스 메모리에 대안적으로 저장되는 제 2 렌더링 타겟을 생성하기 위해 제 2 렌더링 패스를 수행하도록 그래픽스 프로세싱 유닛을 제어할 수 있다. 일 양태에서, 콘텐츠의 하이브리드 렌더링을 위한 장치가 제공되며 그 장치는: 메모리; 및 상기 메모리에 커플링된 적어도 하나의 프로세서를 포함하고 그 적어도 하나의 프로세서는 디스플레이 디바이스에 표시될 장면의 적어도 하나의 프레임을 위해 복수의 렌더링 패스를 수행하도록 디스플레이 장치의 그래픽스 프로세싱 유닛(GPU)을 구성하고; GPU의 온칩 그래픽스 메모리에 저장되는 적어도 하나의 제 1 렌더 타겟을 생성하기 위해 복수의 렌더링 패스 중 제 1 렌더링 패스를 수행하게 GPU를 제어하고; 디스플레이 장치의 시스템 메모리에 저장되는 적어도 하나의 제 2 렌더 타겟을 생성하기 위해 복수의 렌더링 패스 중 제 2 렌더링 패스를 수행하게 GPU를 제어하도록 구성된다. 일 양태에서, 적어도 하나의 제 2 렌더 타겟은 디스플레이 장치의 시스템 메모리에 저장되기 전에 GPU의 온칩 그래픽스 메모리에 저장되지 않는다. 양태에서, 적어도 하나의 프로세서는 GPU의 온칩 그래픽스 메모리에 저장된 적어도 하나의 제 1 렌더 타겟의 콘텐츠를 디스플레이 장치에 의한 표시를 위해 시스템 메모리에 복사하기 위한 리졸브(resolve)를 실행하게 GPU를 제어하도록 추가로 구성된다. 양태에서, 적어도 하나의 제 1 렌더 타겟은 복수의 렌더링 패스의 중간 버퍼를 포함하고, 중간 버퍼는 제 1 렌더링 패스 동안 생성되고 제 2 렌더링 패스 동안 소비되는 렌더(render)를 포함한다. 양태에서, 적어도 하나의 제 2 렌더 타겟은 복수의 렌더링 패스의 최종 버퍼를 포함하고, 최종 버퍼는 제 2 렌더링 패스 동안만 생성되고 후속 렌더 패스에 의해 소비되지 않는 렌더를 포함한다. 양태에서, 적어도 하나의 제 1 렌더 타겟은 적어도 하나의 제 2 렌더 타겟을 생성하는 워크로드의 복잡도보다 더 큰 복잡도를 갖는 워크로드에 의해 생성된다. 양태에서, 적어도 하나의 프로세서는 제 2 복잡도를 갖는 워크로드에 의해 생성된 적어도 하나의 제 2 렌더 타겟을 포함하는 더 낮은 복잡도 워크로드를 갖는 렌더 타겟을 시스템 메모리에 직접 저장하게 GPU를 제어하도록 추가로 구성된다. 양태에서, 워크로드의 각각의 복잡도는 적어도 하나의 프레임의 드로우(draw)의 수 , 적어도 하나의 프레임의 드로우당 셰이더(shader)의 수, 및 적어도 하나의 프레임의 드로우당 프리미티브(primitive)의 수 중 적어도 하나에 기초한다. 양태에서, 적어도 하나의 프로세서는 복수의 렌더링 패스 중 적어도 제 1 렌더링 패스 동안 장면을 구성하는 복수의 프리미티브를 생성하고 그래픽스 메모리의 복수의 빈으로 복수의 프리미티브를 분류(sorting)하게 GPU를 제어하도록 추가로 구성된다. 양태에서, 적어도 하나의 프로세서는 각각의 빈에 있는 복수의 프리미티브 중 적어도 하나의 프리미티브가 최종 렌더링된 장면에서 가시적일 것인지 여부를 나타내는 가시성 스트림을 프레임을 위한 각각의 빈에 대해 생성하게 GPU를 제어하도록 추가로 구성된다. 양태에서, 적어도 하나의 프로세서는 적어도 하나의 제 1 렌더 타겟이 GPU의 온칩 그래픽스 메모리에 저장되고 동시에 적어도 하나의 제 2 렌더 타겟이 디스플레이 장치의 시스템 메모리에 저장되도록, 제 1 및 제 2 렌더링 패스를 동시에 수행하게 GPU를 제어하도록 추가로 구성된다. 양태에서, 적어도 하나의 프로세서는, 적어도 하나의 제 3 렌더 타겟이 GPU의 온칩 그래픽스 메모리에, 적어도 하나의 제 1 렌더 타겟이 그로부터 클리어(clear)된 후에, 저장되게 하도록, 제 1 및 제 2 렌더링 패스에 후속하는 제 3 렌더링 패스를 수행하게 GPU를 제어하도록 추가로 구성된다. 일 양태에서, 적어도 하나의 제 1 렌더 타겟은 알베도(albedo) 렌더 타겟, 포지션 렌더 타겟, 노말(normal) 렌더 타겟 및 깊이 렌더 타겟을 포함한다.
본 개시의 하나 이상의 예들의 상세들은 첨부 도면 및 아래의 설명에 제시되어 있다. 본 개시의 다른 특징, 목적 및 이점들은 상세한 설명 및 도면, 그리고 특허청구범위로부터 분명해질 것이다.
도 1a 는 본 개시의 하나 이상의 기법들에 따른 예시적인 콘텐츠 생성 시스템을 예시하는 블록도이다.
도 1b 는 본 개시의 하나 이상의 기법들에 따른 예시적인 콘텐츠 생성 시스템을 예시하는 블록도이다.
도 2 는 본 개시의 하나 이상의 기법들에 따른 예시적인 GPU 를 예시한다.
도 3은 본 개시의 양태들에 따라 빈들 중에 나눠진 프리미티브를 도시하는 개념도이다.
도 4 은 본 개시의 하나 이상의 기법들에 따른 빈 렌더링의 예시적인 도면을 예시한다.
도 5 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성 프로세싱의 예시적인 도면을 예시한다.
도 6 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성 프로세싱의 예시적인 도면을 예시한다.
도 7 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성 프로세싱의 예시적인 도면을 예시한다.
도 8 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성을 위한 예시적인 방법의 예시적인 플로우차트를 예시한다.
상세한 설명
시스템들, 장치들, 컴퓨터 프로그램 제품들, 및 방법들의 다양한 양태들이 첨부 도면들을 참조하여 이하에 더 충분히 설명된다. 하지만, 본 개시는 많은 상이한 형태들로 구현될 수도 있고, 본 개시 전체에 걸쳐 제시된 임의의 특정 구조 또는 기능에 한정되는 것으로 해석되어서는 안 된다. 오히려, 이들 양태는 본 개시가 철저하며 완전해지고 당업자에게 본 개시의 범위를 충분히 전달하기 위해 제공된다. 본 명세서에서의 교시들에 기초하여, 당업자는, 본 개시의 다른 양태들과 독립적으로 구현되든 또는 결합되든, 본 개시의 범위가 본 명세서에 개시된 시스템들, 장치들, 컴퓨터 프로그램 제품들 및 방법들의 임의의 양태를 커버하도록 의도된다는 것을 인식할 것이다. 예를 들어, 본 명세서에 제시된 임의의 수의 양태들을 이용하여 장치가 구현될 수도 있거나 또는 방법이 실시될 수도 있다. 또한, 본 개시의 범위는 본 명세서에 제시된 본 개시의 다양한 양태들 외에 또는 이에 추가하여 다른 구조, 기능성, 또는 구조 및 기능성을 이용하여 실시되는 그러한 장치 또는 방법을 커버하도록 의도된다. 본 명세서에 개시된 임의의 양태는 청구항의 하나 이상의 엘리먼트에 의해 구체화될 수도 있다.
다양한 양태들이 본 명세서에서 설명되지만, 이들 양태들의 많은 변형들 및 치환들은 본 개시의 범위에 속한다. 본 개시의 양태들의 일부 잠재적인 이익들 및 이점들이 언급되지만, 본 개시의 범위는 특정 이익들, 사용들, 또는 목적들에 한정되도록 의도되지 않는다. 오히려, 본 개시의 양태들은 상이한 무선 기술들, 시스템 구성들, 네트워크들, 및 송신 프로토콜들에 광범위하게 적용가능한 것으로 의도되고, 이들 중 일부는 예로서 도면들에서 그리고 다음의 설명에서 예시된다. 상세한 설명 및 도면들은 본 개시를 제한하는 것이 아니라 예시할 뿐이고, 본 개시의 범위는 첨부된 청구항들 및 그 균등물들에 의해 정의된다.
여러 양태들이 다양한 장치 및 방법들에 관하여 제시된다. 이들 장치 및 방법들은 다양한 블록들, 컴포넌트들, 회로들, 프로세스들, 알고리즘들 등 ("엘리먼트들" 로 총칭됨) 에 의해 다음의 상세한 설명에서 설명되고 첨부 도면들에 예시된다. 이들 엘리먼트들은 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이들의 임의의 조합을 사용하여 구현될 수도 있다. 이러한 엘리먼트들이 하드웨어로서 구현되는지 또는 소프트웨어로서 구현되는지는 전체 시스템에 부과된 설계 제약들 및 특정 애플리케이션에 의존한다.
예로서, 엘리먼트, 또는 엘리먼트의 임의의 부분, 또는 엘리먼트들의 임의의 조합은 (프로세싱 유닛들로서 또한 지칭될 수도 있는) 하나 이상의 프로세서들을 포함하는 "프로세싱 시스템" 으로서 구현될 수도 있다. 프로세싱 시스템에서 하나 이상의 프로세서들은 소프트웨어를 실행할 수도 있다. 소프트웨어는, 소프트웨어, 펌웨어, 미들웨어, 마이크로코드, 하드웨어 기술 언어, 또는 다른 것으로서 지칭되든 간에, 명령들, 명령 세트들, 코드, 코드 세그먼트들, 프로그램 코드, 프로그램들, 서브프로그램들, 소프트웨어 컴포넌트들, 애플리케이션들, 소프트웨어 애플리케이션들, 소프트웨어 패키지들, 루틴들, 서브루틴들, 오브젝트들, 실행가능물들, 실행 스레드들, 프로시저들, 함수들 등을 의미하는 것으로 폭넓게 해석될 수 있다. 용어 애플리케이션은 소프트웨어를 지칭할 수도 있다. 본 명세서에서 설명된 바와 같이, 하나 이상의 기법들은 하나 이상의 기능들을 수행하도록 구성되는 애플리케이션, 즉 소프트웨어를 지칭할 수도 있다. 그러한 예들에서, 애플리케이션은 메모리, 예를 들어, 프로세서의 온칩 메모리, 시스템 메모리, 또는 임의의 다른 메모리 상에 저장될 수도 있다. 프로세서와 같은, 본 명세서에서 설명된 하드웨어는 애플리케이션을 실행하도록 구성될 수도 있다. 예를 들어, 애플리케이션은, 하드웨어에 의해 실행될 경우, 하드웨어로 하여금 본 명세서에서 설명된 하나 이상의 기법들을 수행하게 하는 코드를 포함하는 것으로서 설명될 수도 있다. 예로서, 하드웨어는 메모리로부터 코드에 액세스하고 메모리로부터 액세스된 코드를 실행하여 본 명세서에서 설명된 하나 이상의 기법들을 수행할 수도 있다. 일부 예들에서, 컴포넌트들은 본 개시에서 식별된다. 그러한 예들에서, 컴포넌트들은 하드웨어, 소프트웨어, 또는 이들의 조합일 수도 있다. 컴포넌트들은 별개의 컴포넌트들 또는 단일 컴포넌트의 서브-컴포넌트들일 수도 있다.
이에 따라, 본 명세서에서 설명된 하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 소프트웨어로 구현되는 경우, 기능들은 컴퓨터 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장되거나 또는 인코딩될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 저장 매체를 포함한다. 저장 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수도 있다. 한정이 아니라 예로서, 이러한 컴퓨터 판독가능 매체는 RAM (random-access memory), ROM (read-only memory), EEPROM (electrically erasable programmable ROM), 광학 디스크 저장, 자기 디스크 저장, 다른 자기 저장 디바이스들, 전술한 유형의 컴퓨터 판독가능 매체의 조합, 또는 컴퓨터에 의해 액세스될 수 있는 명령 또는 데이터 구조 형태의 컴퓨터 실행가능 코드를 저장하는데 사용될 수 있는 임의의 다른 매체를 포함할 수 있다.
일반적으로, 본 개시는 단일의 디바이스 또는 다수의 디바이스들에서 그래픽스 프로세싱 파이프라인을 갖는 것, 그래픽 콘텐츠의 렌더링을 향상시키는 것 및/또는 그래픽스 프로세싱 유닛(“GPU”)의 로드를 감소시키는 것을 위한 기법들을 설명한다. 예를 들어, 본 개시는 그래픽스 프로세싱을 활용하는 임의의 디바이스에서 그래픽스 프로세싱을 위한 기법들을 설명한다. 다른 예시적인 이익들은 본 개시 전반에 걸쳐 설명된다.
더욱이, 본 명세서에서 사용된 바와 같이, 용어 "콘텐츠" 의 인스턴스들은 "그래픽 콘텐츠", "이미지" 를 지칭할 수도 있으며, 그 반대도 마찬가지이다. 이는 용어가 형용사, 명사 또는 다른 품사로 사용되고 있는지 여부에 관계없이 사실이다. 일부 예들에서, 본 명세서에서 사용되는 바와 같이, 용어 "그래픽 콘텐츠" 는 그래픽스 프로세싱 파이프라인의 하나 이상의 프로세스들에 의해 생성된 콘텐츠를 지칭할 수도 있다. 일부 예들에서, 본 명세서에서 사용되는 바와 같이, 용어 "그래픽 콘텐츠" 는 그래픽스 프로세싱을 수행하도록 구성된 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다. 일부 예들에서, 본 명세서에서 사용되는 바와 같이, 용어 "그래픽 콘텐츠" 는 그래픽스 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다.
일부 예들에서, 본 명세서에서 사용되는 바와 같이, 용어 "디스플레이 콘텐츠" 는 디스플레잉 프로세싱을 수행하도록 구성된 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다. 일부 예들에서, 본 명세서에서 사용되는 바와 같이, 용어 "디스플레이 콘텐츠" 는 디스플레이 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다. 그래픽 콘텐츠는 디스플레이 콘텐츠가 되도록 프로세싱될 수도 있다. 예를 들어, 그래픽스 프로세싱 유닛은 프레임과 같은 그래픽 콘텐츠를 버퍼 (프레임 버퍼로 지칭될 수도 있음) 에 출력할 수도 있다. 디스플레이 프로세싱 유닛은 버퍼로부터 하나 이상의 프레임들과 같은 그래픽 콘텐츠를 판독하고, 그에 대해 하나 이상의 디스플레이 프로세싱 기술들을 수행하여 디스플레이 콘텐츠를 생성할 수도 있다. 예를 들어, 디스플레이 프로세싱 유닛은 프레임을 생성하기 위해 하나 이상의 렌더링된 계층들에 대해 작성(composition)을 수행하도록 구성될 수도 있다. 다른 예로서, 디스플레이 프로세싱 유닛은 둘 이상의 계층들을 함께 단일 프레임으로 작성, 블렌딩, 또는 그 밖의 방법으로 결합하도록 구성될 수도 있다. 디스플레이 프로세싱 유닛은 프레임에 대해 스케일링, 예를 들어, 업스케일링 또는 다운스케일링을 수행하도록 구성될 수도 있다. 일부 예들에서, 프레임은 계층을 지칭할 수도 있다. 다른 예들에서, 프레임은 프레임을 형성하도록 이미 함께 블렌딩된 2개 이상의 계층들을 지칭할 수도 있으며, 즉, 프레임은 2개 이상의 계층들을 포함하고, 2개 이상의 계층들을 포함하는 프레임이 후속하여 블렌딩될 수도 있다.
일반적으로, GPU는 3차원(3D) 장면을 렌더링하는 데 사용될 수 있다. 이러한 3D 장면의 렌더링은 메모리 대역폭을 매우 많이 사용할 수 있기 때문에, 특수 그래픽스 메모리("GMEM")가 사용될 수도 있다. GMEM은 매우 높은 메모리 대역폭을 갖도록(즉, GMEM에 대한 판독 및 기록 액세스가 빠르도록) GPU의 그래픽스 프로세싱 코어에 가까이 위치할 수도 있다. 장면은 GPU 의 그래픽스 프로세싱 코어에 의해 GMEM으로 렌더링될 수 있고, 장면은 GMEM으로부터 메모리(예를 들어, 프레임 버퍼)로 리졸브(resolve)되어 장면은 다음으로 디스플레이 디바이스에 표시될 수 있다. 그러나, GMEM의 크기는 물리적 메모리 제약으로 인해 제한되어, GMEM이 전체 3차원 장면(예를 들어, 전체 프레임)을 포함하기에 충분한 메모리 용량을 갖지 못할 수도 있다.
일부 예에서, GPU 또는 다른 프로세싱 디바이스는 장면을 구성하는 각각의 타일이 GMEM에 피팅(fitting)될 수 있도록 3D 장면을 타일로 분할하도록 구성될 수도 있다. 이것은 타일 기반 렌더링 또는 "비닝"(binning)이라고도 한다. 예로서, GMEM이 512kB의 데이터를 저장할 수 있는 경우, 각 타일에 포함된 픽셀 데이터가 512kB 이하가 되도록 장면이 타일로 나누어질 수도 있다. 이런 식으로, GPU 또는 다른 프로세서는, 장면을 GMEM으로 렌더링될 수 있는 타일들로 나누고, 장면의 각각의 타일을 GMEM으로 개별적으로 렌더링하고, GMEM으로부터 렌더링된 타일을 프레임 버퍼에 저장하고, 장면의 각각의 타일에 대해 렌더링 및 저장을 반복하는 것에 의해, 장면을 렌더링할 수도 있다. 따라서, GPU는 장면의 각각의 타일을 렌더링하기 위해 다수의 렌더링 패스를 사용하여 장면을 타일별로(tile-by-tile) 렌더링할 수 있다.
예시적인 구현에서, 타일 기반 렌더링은 여러 단계로 수행될 수도 있다. 예를 들어, 타일 기반 아키텍처를 구현하는 GPU는 비닝 패스 동안 전체 장면을 초기에 프로세싱하거나 또는 프리프로세싱하여 다수의 빈 또는 "타일"을 정의할 수도 있다. 비닝 패스 다음에는 각각의 정의된 타일이 렌더링되는 일련의 렌더링 패스가 뒤따를 수도 있다. 일부 예에서, 각각의 렌더링 패스는 3개의 스테이지에서 완료된다. (1) 클리어(clear)/언리졸브(unresolve), (2) 렌더(render), (3) 리졸브. 클리어/언리졸브 스테이지 동안, GPU는 새 타일에 대해 GMEM을 초기화하고 외부 메모리로부터 판독된 값을 GMEM에 저장할 수도 있다. 렌더링 동안, GPU는 현재 타일과 연관된 폴리곤을 재생성할 수도 있을 뿐만 아니라, 픽셀 값을 생성하고 현재 타일을 완성하여, 타일이 디스플레이에 표시될 수 있도록 할 수도 있다. 리졸브 단계는 GPU 가 온칩 메모리(GMEM)의 콘텐츠를 완성된 장면을 표시함에 있어서 디스플레이에 의해 사용되는 버퍼와 같은 GPU 의 외부에 있는 시스템 메모리에 복사하는 것을 포함할 수도 있다.
비닝 패스 동안, GPU는 장면을 구성하는 폴리곤(예를 들어, 삼각형)을 생성하고 폴리곤을 복수의 빈으로 분류할 수도 있고, 이는 디스플레이 상에 제시되는 최종 장면의 타일로 고려될 수 있다). 예를 들어, 각각의 빈은 최종 장면의 일부(예를 들어, 비디오 데이터 프레임의 미리 정의된 부분, 컴퓨터 생성된 그래픽스 이미지, 정지 이미지 등)를 나타낸다. 장면을 구성하는 타일은 각각의 개별 타일에 포함된 프리미티브를 저장하는 메모리에 있는 빈과 각각 연관될 수 있다. 따라서, 비닝 패스는 장면을 구성하는 프리미티브를 적절한 빈으로 분류할 수 있다. 또한, 비닝 패스는 빈에 있는 임의의 프리미티브가 최종 렌더링된 장면에서 가시적일 것인지 여부를 나타내는 가시성 스트림을 프레임을 위한 각각의 빈에 대해 생성할 수도 있다. 따라서, 가시성 스트림은 프리미티브가 렌더링될 때 각각의 타일에서 가시적인지 여부를 나타내기 위해 렌더링 패스를 위한 입력으로 구성되는 비트들의 스트림이다. 빈에 대한 가시성 스트림이 빈에 가시적 프리미티브가 포함되어 있지 않음(즉, 빈에 있는 모든 프리미티브가 최종 렌더링된 장면에서 가시적이지 않을 것임)을 나타내는 경우, GPU가 빈과 연관된 간접 버퍼에 있는 명령들의 실행을 스킵함으로써 빈에 있는 프리미티브를 렌더링하지 않으면 성능이 향상될 수 있다.
멀티패스 렌더링(multi-pass rendering)의 예시적인 양태에서, 장면 및 연관된 오브젝트가 여러 번 렌더링될 수도 있다. 오브젝트를 그릴 때마다, 오브텍트의 외관의 추가 양태가 계산되어 이전 결과와 결합될 수도 있다. 일반적으로, 이것은 코어스(coarse) 초기 렌더링과 제 1 코어스 패스의 쿼리(query) 결과에 기초한 디테일(detailed) 제 2 렌더링 패스를 포함할 수도 있다. 타일형 시스템(tiled system)의 경우, 이것은 다음 순서에 대응할 수도 있다: (1) 타일형 시스템이, 가시성 스트림을 생성할 수도 있는 비닝 패스를 수행하고, 제 1 패스의 렌더링 패스를 위한 로드, 및 렌더, 및 저장을 처리할 수도 있는 코어스 패스 또는 쿼리 패스라고도 하는 제 1 패스 렌더링; (2) (애플리케이션에 의한 것일 수도 있는) 쿼리 체크; 쿼리 체크는 쿼리 패스(제 1 패스) 의 결과가 체크되는 시간이다; 및 (3) 제 2 패스. 제 2 패스는 제 1 패스의 쿼리 결과에 기초하여 행해진 모든 렌더링을 포함할 수도 있다. 그러한 예에서, 타일 기반 시스템은 비닝 패스를 수행하고, 가시성 스트림을 생성하고, 이 제 2 패스의 렌더링 패스를 위한 로드, 렌더 및 저장을 수행할 수도 있다 (이는 애플리케이션 거동에 기초하여 상이한 세트의 디테일 지오메트리를 가질 수 있으며, 이것이 가장 가능성이 높은 경우이다).
일반적으로, 그래픽스 애플리케이션은 쿼리를 트리거하고 코어스 패스(제 1 패스)를 렌더링한 다음, 그리고 나서 쿼리를 종료한다. 그래픽스 애플리케이션은 쿼리 값(즉, 디테일 렌더링이 필요한지 검출하기 위해 패스된 픽셀 수)을 체크할 수도 있다. 쿼리 결과에 기초하여 (그래픽스 애플리케이션은 제 2 패스를 트리거할 수도 있다). 쿼리가 참일 때 디테일 장면이 렌더링될 수도 있고, 쿼리가 거짓일 때 장면은 전혀 렌더링되지 않거나 또는 코어스 또는 그러나 색상 파이프 인에이블 장면이 렌더링될 수도 있다. 따라서, 제 2 패스는 모든 렌더링을 포함할 수도 있으며, 이는 제 1 패스의 쿼리 결과에 기초하여 수행될 수도 있거나 수행되지 않을 수도 있다.
도 1a 는 본 개시의 하나 이상의 기법들에 따른 하이브리드 렌더링을 위한 GPU를 포함하는 시스템(100)의 블록도이다. 일반적으로 도시된 바와 같이, 시스템(100)은 예시적인 양태에 따라 3D 장면을 렌더링하도록 구성된 프로세싱 유닛(127), GPU(120) 및 시스템 메모리(124)를 포함한다. 프로세싱 유닛(127)은 소프트웨어 애플리케이션(111), 오퍼레이팅 시스템(OS)(113) 및 그래픽스 드라이버(115)를 실행할 수도 있다. 더욱이, 시스템 메모리(124)는 GPU(120)에 의해 실행될 2차 명령뿐만 아니라 프리미티브 렌더링을 위한 커맨드 스트림을 저장하는 간접 버퍼를 포함할 수도 있다. GPU(120)는 GPU(120)와 "온칩"일 수도 있는 그래픽스 메모리(GMEM)(121)를 포함할 수도 있다. 도 1b 에 관하여 더 상세히 설명된 바처럼, 시스템 (100) 의 컴포넌트들은 비디오 디바이스들, 미디어 플레이어들, 셋탑 박스들, 모바일 전화기들 및 소위 스마트폰들과 같은 무선 핸드셋들, PDA(personal digital assistant)들, 데스크탑 컴퓨터들, 랩탑 컴퓨터들, 게이밍 콘솔들, 비디오 컨퍼런싱 유닛들, 태블릿 컴퓨팅 디바이스들 등을 포함하지만 이에 한정되지 않는, 디바이스의 부분일 수도 있다.
프로세싱 유닛 (127) 은 중앙 프로세싱 유닛 (CPU) 일 수도 있다. GPU (120) 는, 디스플레이 상으로의 제시를 위해 그래픽스 데이터를 생성 및 출력하는 것과 같은 그래픽스 관련 기능들을 수행할 뿐만 아니라, GPU (120) 에 의해 제공된 대용량 프로세싱 병렬화를 이용하는 비-그래픽스 관련 기능들을 수행하도록 구성된 프로세싱 유닛일 수도 있다. GPU (120) 가 그래픽스 프로세싱 능력들에 부가하여 범용 프로세싱 능력들을 제공할 수도 있기 때문에, GPU (120) 는 범용 GPU (GP-GPU) 로서 지칭될 수도 있다. 프로세싱 유닛 (127) 및 GPU (120) 의 예들은 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, 주문형 집적회로 (ASIC), 필드 프로그래밍가능 로직 어레이 (FPGA), 또는 다른 등가의 집적된 또는 이산 로직 회로부를 포함하지만 이에 한정되지 않는다. 일부 예들에서, GPU (120) 는, 그래픽스 프로세싱을 위한 대용량 병렬 프로세싱을 제공하는 것과 같은 특정 용도 뿐만 아니라 비-그래픽스 관련 애플리케이션들을 실행하는 것을 위해 설계된 마이크로프로세서일 수도 있다. 또한, 프로세싱 유닛(127) 및 GPU(120)가 별도의 컴포넌트로 예시되어 있지만, 본 개시의 양태들은 그에 한정되지 않고 예를 들어 공통 집적 회로(IC)에 있을 수 있다.
프로세싱 유닛 (127) 상에서 실행되는 소프트웨어 애플리케이션 (111) 은 디스플레이(도 1a에 도시되지 않음)에의 그래픽스 데이터의 렌더링을 일으키도록 프로세싱 유닛 (127) 에 명령하는 하나 이상의 그래픽스 렌더링 명령들을 포함할 수도 있다. 일부 예에서, 그래픽스 렌더링 명령은 그래픽스 애플리케이션 프로그래밍 인터페이스(API)를 따를 수도 있는 소프트웨어 명령들을 포함할 수도 있다. 그래픽스 렌더링 명령들을 프로세싱하기 위하여, 프로세싱 유닛 (127) 은 하나 이상의 그래픽스 렌더링 커맨드들을 (예를 들어, 그래픽스 드라이버 (116) 를 통해) GPU (120) 에 발행하여 GPU (120) 로 하여금 그래픽스 데이터의 렌더링의 일부 또는 전부를 수행하게 할 수도 있다. 일부 예들에서, 렌더링될 그래픽스 데이터는 그래픽스 프리미티브의 목록, 예를 들어 점, 선, 삼각형, 사변형, 삼각형 스트립 등을 포함할 수 있다.
GPU (120) 는 하나 이상의 그래픽스 프리미티브를 디스플레이에 렌더링하기 위해 그래픽스 동작을 수행하도록 구성될 수도 있다. 따라서, 프로세싱 유닛 (127) 상에서 실행하는 소프트웨어 애플리케이션들 중 하나가 그래픽스 프로세싱을 필요로 할 경우, 프로세싱 유닛 (127) 은 디스플레이로의 렌더링을 위해 그래픽스 커맨드들 및 그래픽스 데이터를 GPU (120) 에 제공할 수도 있다. 그래픽스 데이터는 예를 들어 드로잉 커맨드들, 상태 정보, 프리미티브 정보, 텍스처 정보 등을 포함할 수도 있다. GPU (120) 는 일부 경우에 프로세싱 유닛 (127) 보다 복잡한 그래픽 관련 동작의 보다 효율적인 프로세싱을 제공하는 고도의 병렬 구조로 구축될 수 있다. 예를 들어, GPU (120) 는, 다수의 정점들 또는 픽셀들 상에서 병렬 방식으로 동작하도록 구성되는 복수의 프로세싱 엘리먼트들을 포함할 수도 있다.
GPU (120) 는 GMEM (121) 에 직접 커플링될 수도 있다. 즉, GPU (120) 는 오프-칩 메모리 대신 로컬 스토리지를 사용하여 데이터를 로컬로 프로세싱할 수도 있다. 이것은 GPU (120) 로 하여금, 과중한(heavy) 버스 트래픽을 경험할 수도 있는, 예를 들어, 공유 버스를 통해, 데이터를 판독 및 기록하기 위한 GPU (120) 의 필요성을 제거함으로써 더 효율적인 방식으로 동작할 수 있게 한다. GMEM(121)은 예를 들어 RAM(random access memory), SRAM(static RAM), DRAM(dynamic RAM), 및 하나 이상의 레지스터와 같은 하나 이상의 휘발성 또는 비휘발성 메모리 또는 저장 디바이스를 포함할 수도 있다.
프로세싱 유닛(127) 및/또는 GPU(120)는, 독립 메모리일 수도 있거나 또는 시스템 메모리(124) 내에 할당될 수도 있는 프레임 버퍼(128)에 렌더링된 이미지 데이터를 저장할 수도 있다. 디스플레이 프로세서는 프레임 버퍼(128)로부터 렌더링된 이미지 데이터를 취출(retrieve)하고 렌더링된 이미지 데이터를 디스플레이에 표시할 수도 있다.
시스템 메모리 (124) 는 디바이스내의 메모리이고 프로세싱 유닛 (127) 및 GPU (120) 의 외부에 있을 수도 있다, 즉, 프로세싱 유닛 (127) 에 대하여 오프칩(off-chip), 및 GPU (120) 에 대하여 오프칩일 수도 있다. 시스템 메모리 (124) 는, 프로세싱 유닛 (127) 및 GPU (120) 에 의해 실행되는 애플리케이션들을 저장할 수도 있다. 게다가, 시스템 메모리 (124) 는, 실행된 애플리케이션들의 동작 기반인 데이터, 그리고 그 애플리케이션으로부터 발생되는 데이터를 저장할 수도 있다.
시스템 메모리(124)는 프로세싱 유닛(127)에 의한 실행을 위해 액세스 가능한 프로그램 모듈, 명령들 또는 둘 다, 프로세싱 유닛(127, 102)에서 실행되는 프로그램에 의한 사용을 위한 데이터, 또는 이들 중 둘 이상을 저장할 수도 있다. 예를 들어, 시스템 메모리 (118) 는, 디스플레이 상에 그래픽 사용자 인터페이스 (GUI) 를 제시하기 위해 프로세싱 유닛 (127) 에 의해 사용되는 윈도우 관리자 애플리케이션을 저장할 수도 있다. 부가적으로, 시스템 메모리 (124) 는 사용자 애플리케이션들 및 그 애플리케이션들과 연관된 애플리케이션 표면 데이터를 저장할 수도 있다. 아래에 자세히 설명된 바처럼, 시스템 메모리 (124) 는 GPU (120) 를 위한 디바이스 메모리로서 작용할 수도 있으며, GPU (120) 에 의해 동작될 데이터 뿐 아니라 GPU (120) 에 의해 수행된 동작들로부터 발생되는 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (135) 는 텍스처 버퍼들, 깊이 버퍼들, 스텐실 버퍼들, 버텍스 버퍼들, 프레임 버퍼들 등의 임의의 조합을 저장할 수도 있다.
시스템 메모리 (124) 의 예들은, RAM (random access memory), ROM (read only memory), 또는 EEPROM (electrically erasable programmable read-only memory), 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 나르거나 또는 저장하는데 사용될 수 있고 컴퓨터 또는 프로세서에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이에 한정되지는 않는다. 일례로서, 시스템 메모리 (124) 는 디바이스로부터 제거될 수도 있고, 다른 디바이스로 이동될 수도 있다. 다른 예로서, 시스템 메모리 (124) 와 실질적으로 유사한, 저장 디바이스가 디바이스 내에 삽입될 수도 있다.
도 1b 는 본 개시의 하나 이상의 기법들을 구현하도록 구성된 예시적인 콘텐츠 생성 시스템 (100) 을 예시하는 보다 상세한 블록도이다. 도 1b에 도시된 콘텐츠 생성 시스템(100)은 도 1a의 그것에 대응한다는 것에 유의한다. 이와 관련하여, 도 1b의 콘텐츠 생성 시스템(100)은 프로세싱 유닛(127), GPU(120) 및 시스템 메모리(124)를 포함한다.
추가로 도시된 바와 같이, 콘텐츠 생성 시스템(100)은 본 개시의 하나 이상의 기법들을 수행하도록 구성된 하나 이상의 컴포넌트를 포함할 수도 있는 디바이스(104)를 포함한다. 도시된 예에서, 디바이스 (104) 는 GPU (120), 콘텐츠 인코더/디코더 (122), 및 시스템 메모리 (124) 를 포함할 수도 있다. 일부 양태들에서, 디바이스 (104) 는 다수의 추가 및/또는 임의적인 컴포넌트들, 예를 들어, 통신 인터페이스 (126), 트랜시버 (132), 수신기 (128), 및 송신기 (130), 및 하나 이상의 디스플레이들 (131) 을 포함할 수 있다. 디스플레이 (131) 에 대한 언급은 하나 이상의 디스플레이 (131) 를 지칭할 수도 있다. 예를 들어, 디스플레이 (131) 는 단일 디스플레이 또는 다수의 디스플레이들을 포함할 수도 있다. 디스플레이 (131) 는 제 1 디스플레이 및 제 2 디스플레이를 포함할 수도 있다. 추가 예들에서, 그래픽스 프로세싱의 결과들은 디바이스 상에 표시되지 않을 수도 있고, 예를 들어, 디스플레이 (131) 는 그에 제시하기 위한 어느 프레임들도 수신하지 않을 수도 있다. 대신에, 프레임들 또는 그래픽스 프로세싱 결과들이 다른 디바이스로 전송될 수도 있다. 일부 양태들에서, 이것은 하이브리드 렌더링 (hybrid-rendering) 으로서 지칭될 수 있다.
GPU(120)는 그래픽스 메모리(GMEM)(121)를 포함한다. GPU(120)는 그래픽스 프로세싱 파이프라인(107)에서와 같은 그래픽스 프로세싱을 수행하도록 구성될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 내부 메모리 (123) 를 포함할 수도 있다. 일부 예들에서, 디바이스 (104) 는 전술된 바처럼 하나 이상의 디스플레이들 (131) 에 의한 제시 전에 GPU (120) 에 의해 생성된 하나 이상의 프레임들에 대해 하나 이상의 디스플레이 프로세싱 기법들을 수행하기 위해 프로세싱 유닛 (127) 과 같은 디스플레이 프로세서를 포함할 수도 있다. 디스플레이 프로세서 (127) 는 디스플레이 프로세싱을 수행하도록 구성될 수도 있다. 하나 이상의 디스플레이들 (131) 은 프로세싱 유닛 (127) 에 의해 프로세싱된 프레임들을 표시하거나 또는 그 밖의 방법으로 제시하도록 구성될 수도 있다. 일부 예들에서, 하나 이상의 디스플레이들 (131) 은 액정 디스플레이 (LCD), 플라즈마 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 프로젝션 디스플레이 디바이스, 증강 현실 디스플레이 디바이스, 가상 현실 디스플레이 디바이스, 머리 착용 디스플레이, 또는 임의의 다른 타입의 디스플레이 디바이스 중 하나 이상을 포함할 수도 있다.
GPU (120) 및 콘텐츠 인코더/디코더 (122) 외부의 메모리, 이를 테면 전술한 바와 같은 시스템 메모리 (124) 는 GPU (120) 및 콘텐츠 인코더/디코더 (122) 에 대해 액세스가능할 수도 있다. 예를 들어, GPU (120) 및 콘텐츠 인코더/디코더 (122) 는 시스템 메모리 (124) 와 같은 외부 메모리로부터 판독되거나 및/또는 그에 기록되도록 구성될 수도 있다. GPU(120) 및 콘텐츠 인코더/디코더(122)는 버스를 통해 시스템 메모리(124)에 통신적으로 커플링될 수도 있다. 일부 예들에서, GPU(120) 및 콘텐츠 인코더/디코더(122)는 버스 또는 상이한 접속을 통해 서로 통신적으로 커플링될 수도 있다.
콘텐츠 인코더/디코더 (122) 는 시스템 메모리 (124) 및/또는 통신 인터페이스 (126) 와 같은 임의의 소스로부터 그래픽 콘텐츠를 수신하도록 구성될 수도 있다. 시스템 메모리 (124) 는 수신된 인코딩된 또는 디코딩된 그래픽 콘텐츠를 저장하도록 구성될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 인코딩된 또는 디코딩된 그래픽 콘텐츠를, 예를 들어, 시스템 메모리 (124) 및/또는 통신 인터페이스 (126) 로부터, 인코딩된 픽셀 데이터의 형태로, 수신하도록 구성될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 임의의 그래픽 콘텐츠를 인코딩 또는 디코딩하도록 구성될 수도 있다.
GMEM (121) 또는 시스템 메모리 (124) 는 일부 예들에 따른 비일시적 저장 매체일 수도 있다. 용어 "비일시적" 은, 저장 매체가 캐리어파 또는 전파 신호에서 구체화되지 않는다는 것을 나타낼 수도 있다. 그러나, 용어 "비일시적" 은 GMEM (121) 또는 시스템 메모리 (124) 가 이동가능하지 않거나 또는 그의 콘텐츠들이 정적임을 의미하는 것으로 해석되어서는 안 된다. 일 예로서, 시스템 메모리 (124) 는 디바이스 (104) 로부터 제거될 수도 있고, 다른 디바이스로 이동될 수도 있다. 다른 예로서, 시스템 메모리 (124) 는 디바이스 (104) 로부터 제거 가능하지 않을 수도 있다.
GPU는 여기에 설명된 예시적인 기술에 따라 그래픽스 프로세싱을 수행하도록 구성될 수도 있다. 일부 예들에서, GPU (120) 는 디바이스 (104) 의 마더보드에 통합될 수도 있다. 일부 예들에서, GPU (120) 는 디바이스 (104) 의 마더보드에서의 포트에 설치되는 그래픽스 카드 상에 존재할 수도 있거나 또는 그렇지 않으면 디바이스 (104) 와 연동하도록 구성된 주변 디바이스내에 포함될 수도 있다. GPU(120)는 하나 이상의 마이크로프로세서들, GPU들, 주문형 집적회로(ASIC)들, 필드 프로그래밍가능 게이트 어레이(FPGA)들, 산술 로직 유닛(ALU)들, 디지털 신호 프로세서(DSP)들, 이산 로직, 소프트웨어, 하드웨어, 펌웨어, 다른 등가의 집적 또는 이산 로직 회로부, 또는 이들의 임의의 조합과 같은 하나 이상의 프로세서들을 포함할 수도 있다. 그 기법들이 부분적으로 소프트웨어로 구현되면, GPU (120) 는 적합한 비일시적 컴퓨터 판독가능 저장 매체에 그 소프트웨어를 위한 명령들을 저장할 수도 있고 본 개시의 기법들을 수행하기 위하여 하나 이상의 프로세서들을 이용하여 하드웨어에서 그 명령들을 실행할 수도 있다. 하드웨어, 소프트웨어, 하드웨어와 소프트웨어의 조합 등을 포함하여, 전술한 것 중 임의의 것은 하나 이상의 프로세서들인 것으로 고려될 수도 있다.
콘텐츠 인코더/디코더 (122) 는 콘텐츠 인코딩/디코딩을 수행하도록 구성된 임의의 프로세싱 유닛일 수도 있다. 일부 예들에서, 콘텐츠 인코더/디코더 (122) 는 디바이스 (104) 의 마더보드에 통합될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 하나 이상의 마이크로프로세서들, ASIC들 (application specific integrated circuits), 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 산술 로직 유닛들 (ALU들), 디지털 신호 프로세서들 (DSP들), 비디오 프로세서들, 이산 로직, 소프트웨어, 하드웨어, 펌웨어, 다른 동등한 집적 또는 이산 로직 회로부, 또는 이들의 임의의 조합과 같은 하나 이상의 프로세서들을 포함할 수도 있다. 기법들이 부분적으로 소프트웨어에서 구현되면, 콘텐츠 인코더/디코더 (122) 는 적합한 비일시적 컴퓨터 판독가능 저장 매체, 예를 들어, 내부 메모리 (123) 에 소프트웨어에 대한 명령들을 저장할 수도 있고, 본 개시의 기법들을 수행하기 위해 하나 이상의 프로세서들을 사용하여 하드웨어에서 명령들을 실행할 수도 있다. 하드웨어, 소프트웨어, 하드웨어와 소프트웨어의 조합 등을 포함하여, 전술한 것 중 임의의 것은 하나 이상의 프로세서들인 것으로 고려될 수도 있다.
일부 양태들에서, 콘텐츠 생성 시스템 (100) 은 임의적인 통신 인터페이스 (126) 를 포함할 수 있다. 통신 인터페이스 (126) 는 수신기 (128) 및 송신기 (130) 를 포함할 수도 있다. 수신기 (128) 는 디바이스 (104) 에 대해 본 명세서에서 설명된 임의의 수신 기능을 수행하도록 구성될 수도 있다. 부가적으로, 수신기 (128) 는 정보, 예를 들어, 눈 또는 머리 포지션 정보, 렌더링 커맨드들, 또는 위치 정보를 다른 디바이스로부터 수신하도록 구성될 수도 있다. 송신기 (130) 는 디바이스 (104) 에 대해 본 명세서에서 설명된 임의의 송신 기능을 수행하도록 구성될 수도 있다. 예를 들어, 송신기 (130) 는, 콘텐츠에 대한 요청을 포함할 수도 있는 정보를 다른 디바이스로 송신하도록 구성될 수도 있다. 수신기 (128) 및 송신기 (130) 는 트랜시버 (132) 로 결합될 수도 있다. 그러한 예들에서, 트랜시버 (132) 는 디바이스 (104) 에 대해 본 명세서에서 설명된 임의의 수신 기능 및/또는 송신 기능을 수행하도록 구성될 수도 있다.
다시 도 1a를 참조하면, 특정 양태들에서, 그래픽스 프로세싱 파이프라인(107)은, GPU(120)에 커플링되며 디스플레이 디바이스 상에 표시될 장면의 적어도 하나의 프레임을 위해 복수의 렌더링 패스를 수행하도록 GPU를 구성할 수 있는 하이브리드 렌더 제어기(198)를 포함할 수도 있다. 더욱이, 하이브리드 렌더 제어기(198)는 GPU의 온칩 그래픽스 메모리에 저장되는 적어도 하나의 제 1 렌더 타겟을 생성하기 위해 복수의 렌더링 패스 중 제 1 렌더링 패스를 수행하도록 GPU를 제어할 수 있고; 또한 디스플레이 장치의 시스템 메모리에 저장되는 적어도 하나의 제 2 렌더 타겟을 생성하기 위해 복수의 렌더링 패스 중 제 2 렌더링 패스를 수행하도록 GPU를 제어할 수 있다. 양태에서, 하이브리드 렌더 제어기 (198)는, GPU의 온칩 그래픽스 메모리에 저장된 적어도 하나의 제 1 렌더 타겟의 콘텐츠를 디스플레이 장치에 의한 표시를 위해 시스템 메모리에 복사하기 위한 리졸브를 실행하도록 GPU를 제어할 수 있다. 다른 양태에서, 하이브리드 렌더 제어기 (198) 는 제 2 복잡도를 갖는 워크로드에 의해 생성된 적어도 하나의 제 2 렌더 타겟을 포함하는 더 낮은 복잡도 워크로드를 갖는 렌더 타겟을 시스템 메모리에 직접 저장하도록 GPU를 제어할 수 있다. 또 다른 양태에서, 하이브리드 렌더 제어기 (198) 는 복수의 렌더링 패스 중 적어도 제 1 렌더링 패스 동안 장면을 구성하는 복수의 프리미티브를 생성하고 그래픽스 메모리의 복수의 빈으로 복수의 프리미티브를 분류하도록 GPU를 제어할 수 있다. 추가 양태에서, 하이브리드 렌더 제어기 (198) 는 적어도 하나의 제 1 렌더 타겟이 GPU의 온칩 그래픽스 메모리에 저장되고 동시에 적어도 하나의 제 2 렌더 타겟이 디스플레이 장치의 시스템 메모리에 저장되도록, 제 1 및 제 2 렌더링 패스를 동시에 수행하도록 GPU를 제어할 수 있다. 더욱이, 하이브리드 렌더 제어기 (198) 는, 적어도 하나의 제 3 렌더 타겟이 GPU의 온칩 그래픽스 메모리에, 적어도 하나의 제 1 렌더 타겟이 그로부터 클리어된 후에, 저장되게 하도록, 제 1 및 제 2 렌더링 패스에 후속하는 제 3 렌더링 패스를 수행하도록 GPU를 제어할 수 있다.
본 명세서에서 설명된 바와 같이, 디바이스 (104) 와 같은 디바이스는 본 명세서에서 설명된 하나 이상의 기술을 수행하도록 구성된 임의의 디바이스, 장치 또는 시스템을 지칭할 수도 있다. 예를 들어, 디바이스는 서버, 기지국, 사용자 장비, 클라이언트 디바이스, 스테이션, 액세스 포인트, 컴퓨터, 예를 들어, 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 컴퓨터 워크스테이션, 또는 메인프레임 컴퓨터, 최종 제품, 장치, 폰, 스마트 폰, 서버, 비디오 게임 플랫폼 또는 콘솔, 핸드헬드 디바이스, 예를 들어, 휴대용 비디오 게임 디바이스 또는 PDA (personal digital assistant), 웨어러블 컴퓨팅 디바이스, 예를 들어, 스마트 워치, 증강 현실 디바이스, 또는 가상 현실 디바이스, 비-웨어러블 디바이스, 디스플레이 또는 디스플레이 디바이스, 텔레비전, 텔레비전 셋탑 박스, 중간 네트워크 디바이스, 디지털 미디어 플레이어, 비디오 스트리밍 디바이스, 콘텐츠 스트리밍 디바이스, 차재 컴퓨터, 임의의 모바일 디바이스, 그래픽 콘텐츠를 생성하도록 구성된 임의의 디바이스, 또는 본 명세서에서 설명된 하나 이상의 기법들을 수행하도록 구성된 임의의 디바이스일 수도 있다. 본 명세서에서의 프로세스들은 특정 컴포넌트, 예를 들어, GPU 에 의해 수행되는 것으로 설명될 수도 있지만, 추가 실시형태들에서, 개시된 실시형태들과 일치하는, 다른 컴포넌트들, 예를 들어, CPU를 사용하여 수행될 수 있다.
GPU들은 GPU 파이프라인에서 다수의 타입의 데이터 또는 데이터 패킷들을 프로세싱할 수 있다. 예를 들어, 일부 양태들에서, GPU 는 2개 타입의 데이터 또는 데이터 패킷들, 예를 들어, 컨텍스트 레지스터 패킷들 및 드로우 콜 데이터를 프로세싱할 수 있다. 컨텍스트 레지스터 패킷은 그래픽 컨텍스트가 프로세싱될 방법을 조절할 수 있는, 예를 들어, 글로벌 레지스터, 셰이딩 프로그램, 또는 상수 데이터에 관한 정보와 같은 글로벌 상태 정보의 세트일 수 있다. 예를 들어, 컨텍스트 레지스터 패킷들은 컬러 포맷에 관한 정보를 포함할 수 있다. 컨텍스트 레지스터 패킷들의 일부 양태들에서, 어느 워크로드가 컨텍스트 레지스터에 속하는지를 나타내는 비트가 있을 수 있다. 또한, 동시에 및/또는 병렬로 실행되는 다수의 기능들 또는 프로그래밍이 있을 수 있다. 예를 들어, 기능들 또는 프로그래밍은 소정의 동작, 예를 들어, 컬러 모드 또는 컬러 포맷을 기술할 수 있다. 이에 따라, 컨텍스트 레지스터는 GPU 의 다수의 상태들을 정의할 수 있다.
컨텍스트 상태들은 개별 프로세싱 유닛, 예를 들어, 버텍스 페처 (VFD), 버텍스 셰이더 (VS), 셰이더 프로세서, 또는 지오메트리 프로세서가 어떻게 기능하는지, 및/또는 프로세싱 유닛이 어떤 모드에서 기능하는지를 결정하는데 활용될 수 있다. 그렇게 하기 위해, GPU들은 컨텍스트 레지스터들 및 프로그래밍 데이터를 사용할 수 있다. 일부 양태들에서, GPU 는 모드 또는 상태의 컨텍스트 레지스터 정의에 기초하여 파이프라인에서 워크로드, 예를 들어, 버텍스 또는 픽셀 워크로드를 생성할 수 있다. 소정의 프로세싱 유닛들, 예를 들어, VFD 는, 소정의 기능들, 예를 들어, 버텍스가 어셈블링되는 방법을 결정하기 위해 이들 상태들을 사용할 수 있다. 이들 모드들 또는 상태들이 변경될 수 있기 때문에, GPU들은 대응하는 컨텍스트들을 변경할 필요가 있을 수도 있다. 부가적으로, 모드 또는 상태에 대응하는 워크로드는, 변경되는 모드 또는 상태를 따를 수도 있다.
도 2 는 본 개시의 하나 이상의 기법들에 따른 예시적인 GPU (200) 를 예시한다. 도 2 에 도시된 바와 같이, GPU (200) 는 커맨드 프로세서 (CP) (210), 드로우 콜 패킷들 (212), VFD (220), VS (222), 버텍스 캐시 (VPC) (224), 삼각형 셋업 엔진 (TSE) (226), 래스터화기 (RAS) (228), Z 프로세스 엔진 (ZPE) (230), 픽셀 보간기 (PI) (232), 프래그먼트 셰이더 (FS) (234), 렌더 백엔드 (RB) (236), L2 캐시 (UCHE) (238), 및 시스템 메모리 (240) 를 포함한다. 도 2 는 GPU (200) 가 프로세싱 유닛들 (220-238) 을 포함하는 것을 표시하지만, GPU (200) 는 다수의 추가적인 프로세싱 유닛들을 포함할 수 있다.  추가적으로, 프로세싱 유닛들 (220-238) 은 단지 예일 뿐이고 프로세싱 유닛들의 임의의 조합 또는 순서가 본 개시에 따라 GPU들에 의해 사용될 수 있다. GPU (200) 는 또한, 커맨드 버퍼 (250), 컨텍스트 레지스터 패킷들 (260), 및 컨텍스트 상태들 (261) 을 포함한다.
도 2 에 도시된 바와 같이, GPU 는 CP, 예를 들어, CP (210) 또는 하드웨어 가속기를 활용하여 커맨드 버퍼를 컨텍스트 레지스터 패킷들, 예를 들어, 컨텍스트 레지스터 패킷들 (260), 및/또는 드로우 콜 데이터 패킷들, 예를 들어, 드로우 콜 패킷들 (212) 로 파싱할 수 있다. 그 다음, CP (210) 는 컨텍스트 레지스터 패킷들 (260) 또는 드로우 콜 데이터 패킷들 (212) 을 별개의 경로들을 통해 GPU 내의 프로세싱 유닛들 또는 블록들로 전송할 수 있다. 또한, 커맨드 버퍼(250)는 컨텍스트 레지스터 및 드로우 콜의 상이한 상태를 교번할 수 있다. 예를 들어, 커맨드 버퍼는 다음의 방식으로 구조화될 수 있다: 컨텍스트 N 의 컨텍스트 레지스터, 컨텍스트 N 의 드로우 콜(들), 컨텍스트 N+1 의 컨텍스트 레지스터, 및 컨텍스트 N+1 의 드로우 콜(들).
전술한 바와 같이, GPU 는 3D 장면을 타일로 분할하여 장면을 구성하는 각각의 타일이 GMEM에 피팅(fitting)될 수 있게 하도록 구성될 수도 있다. 이것은 타일 기반 렌더링 또는 "비닝"(binning)이라고 하며, 장면을 다수의 빈으로 분할하고 각각의 빈에서 가시적인 삼각형을 식별하는 가시성 패스를 수행하여 전력 소비를 줄이고 메모리 대역폭을 절약하도록 설계되었다.
도 3은 본 개시의 양태들에 따라 빈들 중에 나눠진 프리미티브를 도시하는 개념도이다. 도시된 바와 같이, 빈(302, 304, 306 및 308) 각각은 (예로서) 픽셀의 4x4 그리드를 포함하며 다수의 픽셀(310)을 포함하도록 렌더링/래스터화된다. 일반적으로, 비디오 렌더링은 기존 오브젝트 또는 모델을 기반으로 이미지를 생성하는 프로세스이다.
하나 이상의 그래픽스 프리미티브들은 각각의 빈에서 가시적일 수도 있다. 예를 들어, 삼각형 A ("Tri A") 의 부분들은 빈 (302) 및 빈 (306) 둘 다에서 가시적이다. 삼각형 B ("Tri B") 의 부분들은 4개의 빈 (302-308) 각각에서 가시적이다. 삼각형 C ("Tri C") 는 오직 빈 (304) 에서만 가시적이다. 렌더링 패스 동안, GPU(120)는 장면을 빈으로 분할할 수도 있고 삼각형을 빈에 할당할 수도 있다. 삼각형이 하나보다 많은 빈에서 가시적인 경우, GPU(120)는 삼각형이 가시적인 빈 중 단지 하나에 삼각형을 할당할 수 있으므로, 삼각형은 각각의 빈(302, 304, 306, 및 308)이 렌더링될 때 여러번 렌더링되지 않는다.
GPU(120)는 또한 최종 렌더링된 장면에서 빈에 있는 어떤 삼각형이 실제로 가시적인지 결정할 수도 있다. 예를 들어, 일부 삼각형들은 하나 이상의 다른 삼각형들 뒤에 있을 수도 있으며, 최종 렌더링된 장면에서 가시적이지 않을 것이다. 이러한 방식으로, 가시적이지 않은 삼각형들은 그 빈에 대해 렌더링될 필요가 없다. 위에서 언급한 바와 같이, 이것은 패스를 위한 입력으로 각각의 빈에서 가시적인 삼각형을 식별하는 가시성 패스라고 한다.
특정 렌더링 패스를 수행하는 동안, 그 특정 렌더링 패스와 연관된 빈을 위한 픽셀 데이터는 (때때로 빈 버퍼로서 지칭되는) GMEM (121) 과 같은 메모리에 저장될 수도 있다. 렌더링 패스를 수행한 후, GPU(120)는 GMEM(122)의 콘텐츠를 시스템 메모리(SYSMEM)(124)로 전송할 수도 있다. GMEM (122) 의 콘텐츠를 프레임 버퍼 (124) 로 전송한 이후, GPU (120) 는 GMEM (122) 를 디폴트 값들로 초기화하고, 상이한 빈에 대한 후속 렌더링 패스를 시작할 수도 있다.
GPU 프로세싱의 일부 양태에서, MSAA(Multi-Sample Anti-Aliasing)이 수행되고 여기서 단일 픽셀에 대해 다수의 샘플이 생성된 다음 최종 픽셀 값을 결정하기 위해 결합(예: 평균화)된다. 다른 양태에서, 픽셀 프로세싱 작업은 다수의 렌더 타겟(MRT)으로서 GMEM에서 하나 이상의 버퍼에 값을 출력할 수도 있는 픽셀 셰이딩 계산을 포함할 수도 있다. MRT는 픽셀 셰이더가 임의적으로, 각각이 동일한 스크린 치수를 갖는, 그러나 상이한 픽셀 포맷을 갖는, 하나보다 많은 렌더 타겟에 출력할 수 있게 한다. 일반적으로 MSAA 및 MRT 프로세스는 색상 및 깊이 버퍼의 유효 비트 깊이를 크게 증가시키고, 이는 결국 각각의 빈의 크기를 줄인다. 결과적으로, 장면을 렌더링하려면 GPU의 전체 성능과 효율성에 큰 영향을 미칠 수 있는 훨씬 더 많은 수의 빈이 필요하다.
지연 렌더링(deferred rendering)에서, GPU는 멀티 패스 렌더링(예: 위에서 논의한 일련의 렌더링 패스)을 위해 구성될 수도 있으며, 이는 동시에 GMEM에 많은 어태치먼트(attachment)를 생성할 것이고, 이는 빈 크기를 더 작게 만들 것이다. 빈 크기가 더 작다는 것은 부분 드로우를 갖는 프로세싱을 추가할 빈-렌더 패스가 많다는 것을 의미한다. 다시 말해서, 도 3을 다시 참조하면, 각각의 빈이 4x4 픽셀 빈에서 2x2 픽셀 빈으로 축소되면, 다수의 빈에 있는 프리미티브가 더 많을 것이고(예: "Tri C"는 단일 빈(304)이 아닌 4개의 빈에 있을 수도 있음), 이는 다수의 렌더 패스를 필요로 한다.
도 4 은 본 개시의 하나 이상의 기법들에 따른 빈 렌더링의 예시적인 도면을 예시한다. 도시된 바와 같이, 도면 400 은 6개의 렌더 타겟(442, 444, 446, 448, 450 및 452)을 갖는 멀티 패스 렌더링을 예시한다. 일반적으로, 6개의 렌더 타겟중에서는 15개의 빈을 포함하지만, 이것은 단지 예로서 의미되고 당업자에게 이해되는 바와 같이 각각의 렌더 타겟에 대해 더 많거나 더 적은 빈이 있을 수 있음이 이해되어야 한다. 유사하게, 아래에 설명된 각각의 후속 렌더 타겟은 본 명세서에 설명된 장치, 시스템 및 방법의 다양한 구현에 따라 각각의 렌더 타겟에 대한 빈의 수보다 많거나 적을 수 있다.
전술한 바와 같이, 패스 렌더링의 예로서 G-버퍼 패스 또는 쿼리 패스로도 지칭될 수도 있는 제 1 패스 렌더링(410) 은 GPU(120)에 의해 실행되며, 여기서 타일형 시스템은 가시성 스트림을 생성할 수도 있는 비닝 패스를 수행할 수도 있다. 이 예에서, 제 1 패스 렌더링(410)은 4개의 렌더 타겟(442(예: 알베도), 444(예: 포지션), 446(예: 노말) 및 448(예: 깊이)에 기록한다. 이 예에서, 프레임은 B0, B1 … B14 로 표기된 3x5 빈 (예: 빈 0 내지 빈 14) 로 타일화된다는 것이 이해되어야 한다. 전술한 바와 같이, 각각의 빈은 GPU(120)의 GMEM(121)에 있는 메모리의 일부이다.
추가로 도시된 바와 같이, 제 2 패스 렌더링(420)(예를 들어, 메인 패스)이 다음으로 수행되고 이는 각각의 렌더 타겟(442(예를 들어, 알베도), 444(예를 들어, 포지션), 446(예를 들어, 노말)의 빈 버퍼(bin buffer)로부터 렌더링을 판독하고 제 5 렌더 타겟(450)(예를 들어, 메인)에 기록한다. 더욱이, 제 3 렌더 패스(430)(예를 들어, 투명 오브젝트)는 렌더 타겟(448)(예를 들어, 깊이)으로부터 제 6 렌더 타겟(452)(예를 들어, 메인)으로 판독한다. 도 4에 도시된 예는 임의의 수의 패스와 패스당 임의의 수의 렌더 타겟으로 구현될 수 있다는 것이 이해되어야 한다. 그러나, 이 비닝 모드에서 렌더 타겟의 수가 많을수록 위에서 설명한 것처럼 각 빈이 더 작아지고 전체 빈이 더 많아진다는 것을 의미한다.
또한 GMEM에는 각 패스에 대해 모든 렌더 타겟 어태치먼트의 빈이 포함될 것이다. 따라서, 빈 렌더 패스는 위에서 설명한 대로 모든 빈에 대해 루프(loop)화된다. 즉, GPU(120)는 GMEM(121)에 각각의 렌더 타겟 어태치먼트가 저장된 후 리졸브 단계를 수행해야 하고 여기서 GPU(120)는 GPU(120) 외부에 있는 시스템 메모리(124)에 GMEM (121)의 콘텐츠를 복사하고, 이는 위에서 설명한 것처럼 완성된 장면을 표시함에 있어서 디스플레이에 의해 사용될 수 있다. 그런 다음 콘텐츠는 빈 렌더 패스에 대해 클리어된다. 추가로 도시된 바와 같이, 참조번호 460 는 멀티패스 렌더 프로세싱 동안 GMEM(121)의 콘텐츠의 예를 예시한다. 도시된 바와 같이, 각각의 렌더 타깃 (442, 444, 446, 448, 450 및 452)의 빈 N은 빈 렌더 패스가 모든 빈에 대해 루프화되므로 GMEM(121)에 저장될 것이다. 따라서, GPU(120)의 전체 성능은, 위에서 설명한 바와 같이 더 작은 빈 크기를 요구하고 부분 드로우를 갖는 프로세싱을 추가하는 많은 빈-렌더 패스로 이어지는, MSAA 및 MRT와 같은 복잡한(상대적) 동작에 대해 크게 영향을 받을 수 있다.
따라서, 하나의 예시적인 양태에서, GPU(120)는 어떤 렌더 타겟이 GMEM(121)에 저장되고 어떤 렌더 타겟이 시스템 메모리(124)(SYSMEM)에 직접 저장되는지 분할하도록 구성되거나 튜닝될 수 있다. 즉, 멀티패스 렌더링을 위해 구성된 GPU는 위에서 설명한 바와 같이 렌더링 타겟의 제 1 부분이 GMEM(121)의 빈 버퍼에 저장되는 반면, 렌더 타겟의 제 2 부분이 SYSMEM (124) 에 직접 저장되는 하이브리드 렌더링을 위해 추가로 구성될 수 있다. GPU(120)의 하이브리드 렌더링의 구성은, 드로우당 프리미티브의 수 등에 의존하는, 특정 렌더 타겟의 워크로드의 복잡도에 따라, 렌더 타겟이 중간 렌더인지 또는 최종 렌더인지에 기초할 수 있으며, 이에 대한 자세한 내용을 이제 설명한다.
도 5 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성 프로세싱의 예시적인 도면 500 을 예시한다. 전술한 바와 같이, 하이브리드 렌더 제어기(198)는 GPU(120)에 커플링되어 어느 타겟 렌더가 GMEM(121)에 로컬로 저장되고 어떤 타겟 렌더가 SYSMEM(124)에 저장되는지를 구성한다. 도 5에 도시된 바와 같은 일 양태에서, 하이브리드 렌더 제어기(198)는 GPU(120)가 1회 패스에서 생성되고 다음 패스에서 소비되어 GMEM(120)에 저장되는 모든 "중간" 버퍼(예를 들어, G-버퍼)를 저장하도록 GPU (120)를 구성한다. 더욱이, 하이브리드 렌더 제어기(198)는 모든 다른 버퍼(예를 들어, 전술한 바와 같이 완성된 장면을 표시하기 위해 구성된 최종 프레임 버퍼)를 저장하도록 GPU(120)를 구성한다.
일반적으로, 도 5는 도 4와 관련하여 위에 도시된 것과 유사한 멀티 패스 렌더링을 예시한다. 즉, 도면 500 의 멀티 패스 렌더링은 6개의 렌더 타겟(542, 544, 546, 548, 550 및 552)을 제공하지만, 여기에 개시된 예시적인 기술은 임의의 수의 타겟에 대해 제공될 수 있다는 것에 다시 유의한다. 일 양태에서, 제 1 패스 렌더링(510)은 4개의 렌더 타겟(542(예: 알베도), 544(예: 포지션), 546(예: 노말) 및 548(예: 깊이))에 기록하기 위해 GPU (120)에 의해 실행된다. 이 양태에서, 렌더 타겟(542, 544, 546 및 548)은 제 1 패스(510)가 GMEM(121)의 각각의 빈에 기록하고 제 2 패스(520) 및 제 3 패스(530)도 그에 대한 입력으로서 이들 렌더 타겟(542, 544, 546 및 548)으로부터 판독한다는 점에서 중간 렌더 타겟이다.
그러나, 이러한 양태에서 그리고 도 4의 예와 달리, 제 2 패스 렌더링(520)(예를 들어, 메인 패스)은 각각의 렌더 타겟(542(예를 들어, 알베도), 544(예를 들어, 포지션), 546(예를 들어, 노말))의 빈 버퍼로부터 렌더링을 판독하고 GMEM(121) 대신에 SYSMEM (124)에 저장되는 제 5 렌더 타겟 (550)(예: 메인)에 기록한다. 다시 말해, 렌더링은 이 최종 렌더(즉, 렌더링 타겟(550)의 빈으로부터 판독되는 추가 패스가 없음)라는 점에서 하이브리드 렌더링으로 고려될 수 있다. 유사하게, 제 3 렌더 패스(530)(예를 들어, 투명 오브젝트)는 렌더 타겟(548)(예를 들어, 깊이)로부터 판독하고, 또한 GMEM(212) 대신에 SYSMEM(124)에 저장된 제 6 렌더 타겟(552)(예를 들어, 메인)에 기록한다.
참조번호 560 은 멀티패스 렌더 프로세싱 동안 GMEM(121)의 콘텐츠의 예를 예시한다. 도시된 바와 같이, 빈 렌더 패스가 모든 빈에 대해 루프화되므로 각각의 렌더 타겟(542, 544, 546 및 548)의 빈 N은 GMEM(121)에 저장될 것이지만, 렌더 타겟(550 및 552)의 콘텐츠는 SYSMEM(124)에 직접 저장된다. 결과적으로, 하이브리드 렌더링은 GMEM (121)의 메모리를 효과적으로 확보(free up)한다 차례로, 프레임은 B0, B1 … B9 에 의해 표기된 바처럼 2x5 빈 (예: 빈 0 내지 빈 9) 로 타일화되고 이들 빈은 도 4의 멀티패스 렌더링에 도시된 빈보다 픽셀이 더 큰 프레임 버퍼의 타일에 대응할 것이라는 것이 이해되어야 한다. 차례로, 빈 크기가 클수록 빈-렌더 패스가 줄어들어 더 적은 부분 드로우로 프로세싱 요구 사항을 줄인다는 것을 의미한다.
따라서, 양태에 따르면, 하이브리드 렌더 제어기(198)는 "쓰기 전용" 렌더 타겟이 GMEM(121) 대신 SYSMEM(124)에 직접 저장될 수 있도록 렌더 모드를 선택하고 색상/깊이 렌더 타겟당 버퍼 위치를 프로그래밍하도록 구성될 수 있다. 그렇게 함으로써, GPU(120)는 또한 SYSMEM(124)에 복사될 필요가 있는 빈 버퍼에 이들 타겟 렌더에 대한 콘텐츠가 없을 것이기 때문에 SYSMEM(124)에 직접 저장된 렌더 타겟(예를 들어, 표면)을 위한 리졸브/언리졸브 프로세스를 스킵할 수 있고 동시에 비닝 오버헤드를 낮게 유지, 즉 도 4 와 도 5 사이의 대비로 도시된 바처럼 가능한 크게 빈 크기를 유지할 수 있다.
이 양태에서, 하이브리드 렌더 제어기(198)(예를 들어, 소프트웨어 애플리케이션 또는 드라이버)는 SYSMEM(124) 또는 GMEM(121) 중 일방에 저장될 색상, 스텐실 및/또는 깊이 어태치먼트를 선택하도록 구성될 수 있다. 하이브리드 렌더링의 이러한 유연성을 제공함으로써, 본 명세서에 개시된 바와 같은 장치 및 방법은 GPU(120)의 설계 및 구성을 확장하여 어떤 버퍼가 GMEM(121)에 저장되고 어떤 버퍼가 SYSMEM(121)에 저장되는지에 대한 세밀한 제어(fine-grained control)를 가능하게 한다. 이것은 결국 프레임을 위한 디스플레이 애플리케이션이 버퍼가 저장된 곳에 따라 독립적으로 버퍼 위치 비트에 액세스할 수 있게 한다. 효과적으로, 하이브리드 렌더 제어기(198)는 GMEM(121)에 저장될 일부 어태치먼트 및 SYSMEM(124)에 저장될 다른 어태치먼트를 선택함으로써 최적의 비닝 레이아웃을 생성하도록 구성될 수도 있다.
전술한 바와 같이, 하이브리드 렌더링을 위한 하나의 예시적인 선택 기준은 어떤 어태치먼트가 중간이고 어떤 어태치먼트가 쓰기 전용인지에 기초할 수 있다. 다른 양태에서, 기준은 렌더 동작의 복잡도에 기초할 수 있다. 예를 들어, 낮은 복잡성 MRT 어태치먼트를 SYSMEM (124)에 직접 저장되어 GMEM (121)에 저장된 나머지 어태치먼트(더 복잡한 어태치먼트)의 빈 크기를 증가시킬 수 있다.
도 6 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성 프로세싱의 예시적인 도면을 예시한다. 일반적으로, 도 6는 도 5와 관련하여 위에 설명된 바와 같은 멀티패스 렌더링의 리파인먼트(refinement)를 예시한다. 즉, 도면 600 의 멀티 패스 렌더링은 6개의 렌더 타겟(642, 644, 646, 648, 650 및 652)을 제공하지만, 여기에 개시된 예시적인 기술은 임의의 수의 타겟에 대해 제공될 수 있다는 것에 다시 유의한다. 일 양태에서, 제 1 패스 렌더링(610)은 4개의 렌더 타겟(642(예: 알베도), 644(예: 포지션), 646(예: 노말) 및 648(예: 깊이))에 기록하기 위해 GPU (120)에 의해 실행된다. 이 양태에서, GMEM(121)은 제 2 패스에서 판독된 렌더 타겟(542, 544, 546 및 550)을 저장한다.
그러나, 이러한 양태에서 그리고 도 5의 예와 달리, 렌더 타겟(648 및 652)은 SYSTEM (124)에 직접 저장된다. 따라서, 전술한 하이브리드 렌더링과 유사하게, 도 6의 예시적인 양태는 SYSMEM(124)에 직접 저장된 덜 복잡한 어태치먼트(예를 들어, 렌더 타겟(648 및 652))을 갖는 하이브리드 렌더일 수 있다. 다시 말해, 하이브리드 렌더 제어기(198)는 패스의 복잡도, 즉 워크로드의 복잡도에 기초하여 렌더 타겟을 저장하도록 GPU(120)를 제어 및/또는 구성하도록 구성될 수도 있다. 양태에서, 패스의 복잡도는, 패스에 필요한, 드로우의 수, 드로우당 셰이더의 복잡도, 드로우당 프리미티브의 수, 프리미티브의 총 수 등에 의존할 수도 있다. 일 양태에서, 수가 특정 미리결정된 임계치보다 높으면, 하이브리드 렌더 제어기(198)는 워크로드를 "복잡” 한 것으로 간주하고 그 렌더 타겟을 GMEM(121)에 저장하도록 GPU(120)를 구성할 수 있는 반면, 덜 복잡한 어태치먼트(예: 임계치 미만)는 SYSTEM (124) 에 저장된다.
참조번호 660 은 도 6의 멀티패스 렌더 프로세싱 동안 GMEM(121)의 콘텐츠의 예를 예시한다. 도시된 바와 같이, 빈 렌더 패스가 모든 빈에 대해 루프화될 때 각각의 렌더 타겟(542, 544, 546 및 550)의 빈 N은 GMEM(121)에 저장될 것이지만, 렌더 타겟(448 및 552)의 콘텐츠 (예: 덜 복잡한 렌더)는 SYSMEM(124)에 직접 저장된다. 결과적으로, 하이브리드 렌더링은 GMEM (121)의 메모리를 효과적으로 확보한다. 차례로, 프레임은 GMEM (121)에 있는 그러한 빈(예: 타겟 렌더 (642, 644, 646 및 650)) 에 대해 B0, B1 ... B9로 표기된 바와 같은 2x5 빈(예: 빈 0 내지 빈 9)으로 타일화된다는 점이 이해되어야 한다. 결과적으로, 빈 크기가 클수록 빈-렌더 패스가 줄어들어 다시 더 적은 부분 드로우로 프로세싱 요구 사항이 감소된다는 것을 의미한다.
도 7 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성 프로세싱의 예시적인 도면을 예시한다. 이 양태에서, 하이브리드 렌더링은 앞서 설명한 바와 같은 도면 500 및 600 과 유사하다. 도면 600 과 관련하여 전술한 바와 같이, 도면 700 의 하이브리드 렌더링은 제 2 패스에서 판독된 빈의 콘텐츠를 GMEM(121)에 저장하도록 GPU(120)를 유사하게 구성하고 여기서 나머지 어태치먼트는 SYSMEM(124)에 저장된다.
보다 구체적으로, 도면 700 의 멀티패스 렌더링은 6개의 렌더 타겟(742, 744, 746, 748, 750 및 752)을 제공하며, 여기서 제 1 패스 렌더링(710)은 GPU(120)에 의해 실행되어 4개의 렌더 타겟(742(예: 알베도), 744(예: 포지션), 746(예: 노말) 및 748(예: 깊이))에 기록한다. 이 양태에서, GMEM(121)은 렌더 타겟(542, 544, 및 546)을 저장한다. 또한, 제 2 패스 렌더링(720)은 렌더 타겟(750)을 GMEM(121)에 저장한다. 그러나, 이 양태에서, 제 1 및 제 2 패스 렌더링은 동시에 실행된다. 결과적으로, 참조(660)(제 1 패스 렌더(710) 및 제 2 패스 렌더(720) 동안 GMEM(121)의 콘텐츠를 예시함)는 빈 렌더 패스가 모든 빈에 대해 루프화됨에 따라 각각의 렌더 타겟(742, 744, 746, 및 750) 의 빈 N을 포함할 것이다. 더욱이, 이 양태에서, 제 3 패스 렌더(730)는 제 1 및 제 2 패스 렌더(710 및 720) 후에 독립적으로 실행된다. 결과적으로, 제 3 패스 렌더(730)의 온칩 GMEM(121)은 빈(752)의 콘텐츠를 저장할 것이다.
일반적으로, 전술한 바와 같은 각각의 도면 500, 600 및 700 은 온 칩 GMEM(121)의 사용을 효율적으로 관리하기 위해 디스플레이 콘텐츠(예를 들어, 3D 콘텐츠)를 생성하기 위한 하이브리드 렌더링을 제공한다는 것에 유의한다. 따라서, 양태에서, 하이브리드 렌더 제어기(198)는 GPU(120)에 커플링되고, 어느 타겟 렌더가 GMEM(121)에 로컬로 저장되고 어떤 타겟 렌더가 SYSMEM(124)에 저장되는지를 제어하기 위해 GPU(120)를 튜닝하도록 구성된다. 또한 전술한 바와 같이, 렌더링을 튜닝하기 위한 파라미터는 GPU(120)가 구현되고 있는 특정 칩셋 및/또는 특정 콘텐츠 생성 애플리케이션에 대해 변경 및 제어될 수 있다. 효과적으로, 하이브리드 렌더 제어기(198)는 정의된 파라미터에 기초하여 GMEM(121)에 저장될 소정 어태치먼트 및 SYSMEM(124)에 저장될 다른 어태치먼트를 결정함으로써 GPU(120) 및/또는 애플리케이션(111)을 위한 최적의 비닝 레이아웃을 생성하도록 구성될 수도 있다.
도 8 은 본 개시의 하나 이상의 기법들에 따른 콘텐츠 생성을 위한 예시적인 방법의 예시적인 플로우차트를 예시한다. 방법 (800) 은 전술한 바처럼, GPU (120) 와 같은 장치에 의해 수행될 수도 있다. 양태에서, 점선 상자로 하이라이트된 단계는 본 명세서에 설명된 기술의 양태에서 임의적인 단계를 예시한다.
블록(802)에서, CPU는 전술한 바와 같이 하이브리드 렌더를 수행하도록 구성된다. 양태에서, 하이브리드 렌더링을 위한 선택 기준은 어떤 어태치먼트가 중간이고 어떤 어태치먼트가 쓰기 전용인지에 기초할 수 있다. 다른 양태에서, 기준은 타겟 렌더가 GMEM(121) 또는 SYSMEM(124)에 저장되는지를 결정하기 위해 렌더 동작의 복잡도에 기초할 수 있다.
블록(804)에서, GPU(120)는 렌더링될 장면의 제 1 프레임을 수신한다. 본 명세서에 기재된 프로세스는 비디오 콘텐츠의 장면을 위한 복수의 프레임에 대해 반복될 수 있음을 이해해야 한다. 블록(806)에서, GPU는 하나 이상의 제 1 렌더 타겟(예를 들어, 알베도 렌더 타겟, 포지션 렌더 타겟, 노말 렌더 타겟 및/또는 깊이 렌더 타겟)을 생성하기 위해 제 1 렌더링 패스를 수행하도록 구성된다. 블록(808)에서, GPU는 위에서 논의된 바처럼 하이브리드 렌더를 위한 구성에 기초하여 GMEM 또는 SYSMEM에 하나 이상의 제 1 렌더 타겟의 콘텐츠를 저장할지 여부를 결정한다. 설명된 바와 같이, 각각의 렌더 타겟의 각각의 빈 N 은 구성에 따라 어느쪽의 GMEM(121)에 저장될 것이고 빈 렌더 패스는 모든 빈에 대해 루프화된다.
유사하게, 블록(810)에서, GPU(120)는 제 2 렌더링 패스를 수행하기 위한 입력 데이터로서 제 1 렌더 타겟의 데이터를 사용하는 하나 이상의 제 2 렌더 타겟을 생성하기 위해 제 2 렌더링 패스를 수행하도록 구성된다. 블록(812)에서, GPU는, 또한 위에서 논의된 바처럼 하이브리드 렌더를 위한 구성에 기초하여 GMEM 또는 SYSMEM에 하나 이상의 제 2 렌더 타겟의 콘텐츠를 저장할지 여부를 결정한다. 마지막으로, 블록(814)에서, 렌더 콘텐츠는 빈 버퍼로부터 버퍼 메모리로 판독되어 예를 들어 후속하여 디스플레이 장치에 표시될 수 있다.
본 명세서에서 설명된 요지는 하나 이상의 이익들 또는 이점들을 실현하기 위해 구현될 수 있다. 예를 들어, 본 명세서에 개시된 기술은 GMEM(121)에 멀티패스 렌더링에서 타겟 렌더의 제1 부분을 저장하고 SYSMEM(124)에 멀티패스 렌더링에서 타겟 렌더의 제 2 부분을 저장하도록 GPU(120)를 구성함으로써 GPU(120)로 하여금 장면을 렌더링하는 데 필요한 로컬 스토리지를 줄일 수 있게 한다. 결과적으로, 각각의 패스에 대해 온칩 GMEM에 의해 요구되는 메모리 사용량이 줄어들고, 차례로, 빈 크기가 더 커지고 빈 렌더 패스가 줄어들어 더 적은 부분 드로우로 전반적인 프로세싱 요구 사항이 감소될 것이다. 결과적으로 장치 및 방법은 온칩 그래픽스 메모리에 더 적은 데이터를 저장하기 때문에 GPU(120)의 전력 소비 및 로드 요구 사항을 더욱 감소시킨다. 이 결과는 차례로 준비 데이터의 대기 레이턴시도 감소되기 때문에 GPU의 전반적인 성능을 향상시킨다. 따라서, 본 명세서의 프로세싱 기법은 데이터 프로세싱 또는 실행을 개선하거나 고속화할 수 있고 또한 리소스 또는 데이터 활용 및/또는 리소스 효율성을 개선할 수 있다.
본 명세서에서 설명된 요지는 하나 이상의 이익들 또는 이점들을 실현하기 위해 구현될 수 있다. 예를 들어, 설명된 그래픽스 프로세싱 기법들은 서버, 클라이언트, GPU, CPU, 또는 본 명세서에 설명된 분할 렌더링 기법들을 구현하기 위해 컴퓨터 또는 그래픽스 프로세싱을 수행할 수 있는 기타 프로세서에 의해 사용될 수 있다. 이것은 또한, 다른 컴퓨터 또는 그래픽스 프로세싱 기법들과 비교하여 낮은 비용으로 달성될 수 있다. 더욱이, 본 명세서에서의 컴퓨터 또는 그래픽스 프로세싱 기법들은 데이터 프로세싱 또는 실행을 개선 또는 고속화할 수 있다. 또한, 본 명세서에서의 컴퓨터 또는 그래픽스 프로세싱 기법들은 리소스 또는 데이터 활용 및/또는 리소스 효율성을 개선할 수 있다.
본 개시에 따르면, 용어 "또는" 은 문맥이 달리 지시하지 않는 경우 "및/또는" 으로 해석될 수도 있다. 추가적으로, "하나 이상" 또는 "적어도 하나" 등과 같은 문구들이 본 명세서에 개시된 일부 특징들에 대해 사용되고 다른 특징들에 대해서는 사용되지 않았을 수도 있지만, 그러한 문언이 사용되지 않은 특징들은 문맥이 달리 지시하지 않는 경우 내재된 그러한 의미를 갖는 것으로 해석될 수도 있다.
하나 이상의 예들에서, 본원에 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 예를 들어, 용어 "프로세싱 유닛"이 본 개시 전반에 걸쳐 사용되었지만, 그러한 프로세싱 유닛들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 임의의 기능, 프로세싱 유닛, 본 명세서에 설명된 기술, 또는 다른 모듈이 소프트웨어에서 구현되는 경우, 기능, 프로세싱 유닛, 본 명세서에 설명된 기술, 또는 다른 모듈은 컴퓨터 판독가능 매체 상에 하나 이상의 명령 또는 코드로서 저장되거나 전송될 수도 있다. 컴퓨터 판독가능 매체는 일 장소로부터 다른 장소로의 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체 또는 컴퓨터 데이터 저장 매체를 포함할 수도 있다.  이런 식으로, 컴퓨터 판독가능 매체들은 일반적으로 (1) 비일시적인 유형의 컴퓨터 판독가능 저장 매체들 또는 (2) 신호 또는 캐리어 파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체들은 본 개시에서 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 가용 매체들일 수도 있다.  한정이 아닌 예로서, 그러한 컴퓨터 판독가능 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자기 디스크 저장 또는 다른 자기 저장 디바이스들을 포함할 수 있다.  여기에 사용된 바와 같이, 디스크 (disk) 및 디스크 (disc) 는 콤팩트 디스크 (compact disc; CD), 레이저 디스크 (laser disc), 광 디스크 (optical disc), DVD (digital versatile disc), 플로피 디스크 (floppy disk) 및 블루레이 디스크 (Blu-ray disc) 를 포함하며, 여기서, 디스크 (disk) 는 보통 데이터를 자기적으로 재생하지만, 디스크 (disc) 는 레이저를 이용하여 광학적으로 데이터를 재생한다. 또한, 상기의 조합들이 컴퓨터 판독가능 매체들의 범위 내에 포함되어야 한다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수도 있다.
코드는 하나 이상의 디지털 신호 프로세서들 (DSP들), 범용 마이크로 프로세서들, 주문형 집적 회로들 (ASIC들), ALU들 (arithmetic logic units), 필드 프로그래밍가능 로직 어레이들 (FPGA들), 또는 다른 균등한 집적된 또는 이산 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 이에 따라, 본 명세서에 사용된 바와 같은 용어 "프로세서" 는 전술한 구조 또는 본 명세서에서 설명된 기법들의 구현에 적합한 임의의 다른 구조 중 임의의 것을 지칭할 수도 있다. 또한, 그 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
본 개시의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 세트 (예를 들면, 칩 세트) 를 포함하는, 매우 다양한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시에 설명되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 필요로 하는 것은 아니다. 오히려, 전술된 바처럼, 다양한 유닛들이 임의의 하드웨어 유닛에 결합될 수도 있거나, 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 전술된 하나 이상의 프로세서들을 포함하는 연동적인 (inter-operative) 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이들 및 다른 예들은 다음의 청구항들의 범위 내에 있다.

Claims (30)

  1. 콘텐츠의 하이브리드 렌더링을 위한 방법으로서,
    디스플레이 디바이스에 표시될 장면의 적어도 하나의 프레임을 위해 복수의 렌더링 패스를 수행하도록 디스플레이 장치의 그래픽스 프로세싱 유닛(GPU)을 구성하는 단계;
    상기 GPU의 온칩 그래픽스 메모리에 저장된 적어도 하나의 제 1 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 1 렌더링 패스를 수행하도록 상기 GPU를 제어하는 단계; 및
    상기 디스플레이 장치의 시스템 메모리에 저장된 적어도 하나의 제 2 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 2 렌더링 패스를 수행하도록 상기 GPU를 제어하는 단계
    를 포함하는, 하이브리드 렌더링을 위한 방법.
  2. 제 1 항에 있어서,
    상기 적어도 하나의 제 2 렌더 타겟은 상기 디스플레이 장치의 상기 시스템 메모리에 저장되기 전에 상기 GPU 의 상기 온칩 그래픽스 메모리에 저장되지 않는, 하이브리드 렌더링을 위한 방법.
  3. 제 1 항에 있어서,
    상기 GPU의 상기 온칩 그래픽스 메모리에 저장된 상기 적어도 하나의 제 1 렌더 타겟의 콘텐츠를 상기 디스플레이 장치에 의한 표시를 위해 상기 시스템 메모리에 복사하기 위한 리졸브(resolve)를 실행하도록 상기 GPU를 제어하는 단계를 더 포함하는, 하이브리드 렌더링을 위한 방법.
  4. 제 1 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 상기 복수의 렌더링 패스의 중간 버퍼를 포함하고, 상기 중간 버퍼는 상기 제 1 렌더링 패스 동안 생성되고 상기 제 2 렌더링 패스 동안 소비되는 렌더를 포함하는, 하이브리드 렌더링을 위한 방법.
  5. 제 4 항에 있어서,
    상기 적어도 하나의 제 2 렌더 타겟은 상기 복수의 렌더링 패스의 최종 버퍼를 포함하고, 상기 최종 버퍼는 상기 제 2 렌더링 패스 동안만 생성되고 후속 렌더 패스에 의해 소비되지 않는 렌더를 포함하는, 하이브리드 렌더링을 위한 방법.
  6. 제 1 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 상기 적어도 하나의 제 2 렌더 타겟을 생성하는 워크로드의 복잡도보다 더 큰 복잡도를 갖는 워크로드에 의해 생성되는, 하이브리드 렌더링을 위한 방법.
  7. 제 6 항에 있어서,
    상기 제 2 복잡도를 갖는 상기 워크로드에 의해 생성된 상기 적어도 하나의 제 2 렌더 타겟을 포함하는 더 낮은 복잡도 워크로드를 갖는 렌더 타겟을 상기 시스템 메모리에 직접 저장하도록 상기 GPU를 제어하는 단계를 더 포함하는, 하이브리드 렌더링을 위한 방법.
  8. 제 6 항에 있어서,
    상기 워크로드의 상기 제 1 복잡도 및 상기 제 2 복잡도는 상기 적어도 하나의 프레임의 드로우의 수, 상기 적어도 하나의 프레임의 드로우당 셰이더의 수, 및 상기 적어도 하나의 프레임의 드로우당 프리미티브의 수 중 적어도 하나에 기초하는, 하이브리드 렌더링을 위한 방법.
  9. 제 1 항에 있어서,
    상기 복수의 렌더링 패스 중 적어도 상기 제 1 렌더링 패스 동안 상기 장면을 구성하는 복수의 프리미티브를 생성하고 상기 그래픽스 메모리의 복수의 빈으로 상기 복수의 프리미티브를 분류하도록 상기 GPU를 제어하는 단계를 더 포함하는, 하이브리드 렌더링을 위한 방법.
  10. 제 9 항에 있어서,
    각각의 빈에 있는 상기 복수의 프리미티브 중 적어도 하나의 프리미티브가 최종 렌더링된 장면에서 가시적일 것인지 여부를 나타내는 가시성 스트림을 상기 프레임을 위한 각각의 빈에 대해 생성하도록 상기 GPU를 제어하는 단계를 더 포함하는, 하이브리드 렌더링을 위한 방법.
  11. 제 1 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟이 상기 GPU의 상기 온칩 그래픽스 메모리에 저장되고 동시에 상기 적어도 하나의 제 2 렌더 타겟이 상기 디스플레이 장치의 상기 시스템 메모리에 저장되도록, 상기 제 1 및 제 2 렌더링 패스를 동시에 수행하도록 상기 GPU를 제어하는 단계를 더 포함하는, 하이브리드 렌더링을 위한 방법.
  12. 제 11 항에 있어서,
    적어도 하나의 제 3 렌더 타겟이 상기 GPU의 상기 온칩 그래픽스 메모리에, 상기 적어도 하나의 제 1 렌더 타겟이 그로부터 클리어된 후에, 저장되게 하도록, 상기 제 1 및 제 2 렌더링 패스에 후속하는 제 3 렌더링 패스를 수행하도록 상기 GPU를 제어하는 단계를 더 포함하는, 하이브리드 렌더링을 위한 방법.
  13. 제 1 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 알베도 렌더 타겟, 포지션 렌더 타겟, 노말 렌더 타겟 및 깊이 렌더 타겟을 포함하는, 하이브리드 렌더링을 위한 방법.
  14. 콘텐츠의 하이브리드 렌더링을 위한 장치로서,
    메모리; 및
    상기 메모리에 커플링된 적어도 하나의 프로세서를 포함하고
    상기 적어도 하나의 프로세서는
    디스플레이 디바이스에 표시될 장면의 적어도 하나의 프레임을 위해 복수의 렌더링 패스를 수행하게 디스플레이 장치의 그래픽스 프로세싱 유닛(GPU)을 구성하고;
    상기 GPU의 온칩 그래픽스 메모리에 저장된 적어도 하나의 제 1 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 1 렌더링 패스를 수행하게 상기 GPU를 제어하고;
    상기 디스플레이 장치의 시스템 메모리에 저장된 적어도 하나의 제 2 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 2 렌더링 패스를 수행하게 상기 GPU를 제어하도록 구성된, 하이브리드 렌더링을 위한 장치.
  15. 제 14 항에 있어서,
    상기 적어도 하나의 제 2 렌더 타겟은 상기 디스플레이 장치의 상기 시스템 메모리에 저장되기 전에 상기 GPU의 상기 온칩 그래픽스 메모리에 저장되지 않는, 하이브리드 렌더링을 위한 장치.
  16. 제 14 항에 있어서,
    상기 적어도 하나의 프로세서는 상기 GPU의 상기 온칩 그래픽스 메모리에 저장된 상기 적어도 하나의 제 1 렌더 타겟의 콘텐츠를 상기 디스플레이 장치에 의한 표시를 위해 상기 시스템 메모리에 복사하기 위한 리졸브를 실행하게 상기 GPU를 제어하도록 추가로 구성되는, 하이브리드 렌더링을 위한 장치.
  17. 제 14 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 상기 복수의 렌더링 패스의 중간 버퍼를 포함하고, 상기 중간 버퍼는 상기 제 1 렌더링 패스 동안 생성되고 상기 제 2 렌더링 패스 동안 소비되는 렌더를 포함하는, 하이브리드 렌더링을 위한 장치.
  18. 제 17 항에 있어서,
    상기 적어도 하나의 제 2 렌더 타겟은 상기 복수의 렌더링 패스의 최종 버퍼를 포함하고, 상기 최종 버퍼는 상기 제 2 렌더링 패스 동안만 생성되고 후속 렌더 패스에 의해 소비되지 않는 렌더를 포함하는, 하이브리드 렌더링을 위한 장치.
  19. 제 14 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 상기 적어도 하나의 제 2 렌더 타겟을 생성하는 워크로드의 복잡도보다 더 큰 복잡도를 갖는 워크로드에 의해 생성되는, 하이브리드 렌더링을 위한 장치.
  20. 제 19 항에 있어서,
    상기 적어도 하나의 프로세서는 상기 제 2 복잡도를 갖는 상기 워크로드에 의해 생성된 상기 적어도 하나의 제 2 렌더 타겟을 포함하는 더 낮은 복잡도 워크로드를 갖는 렌더 타겟을 상기 시스템 메모리에 직접 저장하게 상기 GPU를 제어하도록 추가로 구성되는, 하이브리드 렌더링을 위한 장치.
  21. 제 19 항에 있어서,
    상기 워크로드의 각각의 복잡도는 상기 적어도 하나의 프레임의 드로우의 수, 상기 적어도 하나의 프레임의 드로우당 셰이더의 수, 및 상기 적어도 하나의 프레임의 드로우당 프리미티브의 수 중 적어도 하나에 기초하는, 하이브리드 렌더링을 위한 장치.
  22. 제 14 항에 있어서,
    상기 적어도 하나의 프로세서는 상기 복수의 렌더링 패스 중 적어도 상기 제 1 렌더링 패스 동안 상기 장면을 구성하는 복수의 프리미티브를 생성하고 상기 그래픽스 메모리의 복수의 빈으로 상기 복수의 프리미티브를 분류하게 상기 GPU를 제어하도록 추가로 구성되는, 하이브리드 렌더링을 위한 장치.
  23. 제 22 항에 있어서,
    상기 적어도 하나의 프로세서는 각각의 빈에 있는 상기 복수의 프리미티브 중 적어도 하나의 프리미티브가 최종 렌더링된 장면에서 가시적일 것인지 여부를 나타내는 가시성 스트림을 상기 프레임을 위한 각각의 빈에 대해 생성하게 상기 GPU를 제어하도록 추가로 구성되는, 하이브리드 렌더링을 위한 장치.
  24. 제 14 항에 있어서,
    상기 적어도 하나의 프로세서는 상기 적어도 하나의 제 1 렌더 타겟이 상기 GPU의 상기 온칩 그래픽스 메모리에 저장되고 동시에 상기 적어도 하나의 제 2 렌더 타겟이 상기 디스플레이 장치의 상기 시스템 메모리에 저장되도록, 상기 제 1 및 제 2 렌더링 패스를 동시에 수행하게 상기 GPU를 제어하도록 추가로 구성되는, 하이브리드 렌더링을 위한 장치.
  25. 제 24 항에 있어서,
    상기 적어도 하나의 프로세서는, 적어도 하나의 제 3 렌더 타겟이 상기 GPU의 상기 온칩 그래픽스 메모리에, 상기 적어도 하나의 제 1 렌더 타겟이 그로부터 클리어된 후에, 저장되게 하도록, 상기 제 1 및 제 2 렌더링 패스에 후속하는 제 3 렌더링 패스를 수행하게 상기 GPU를 제어하도록 추가로 구성되는, 하이브리드 렌더링을 위한 장치.
  26. 제 14 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 알베도 렌더 타겟, 포지션 렌더 타겟, 노말 렌더 타겟 및 깊이 렌더 타겟을 포함하는, 하이브리드 렌더링을 위한 장치.
  27. 콘텐츠의 하이브리드 렌더링을 위한 장치로서,
    디스플레이 디바이스에 표시될 장면의 적어도 하나의 프레임을 위해 복수의 렌더링 패스를 수행하도록 디스플레이 장치의 그래픽스 프로세싱 유닛(GPU)을 구성하는 수단;
    상기 GPU의 온칩 그래픽스 메모리에 저장된 적어도 하나의 제 1 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 1 렌더링 패스를 수행하도록 상기 GPU를 제어하는 수단; 및
    상기 디스플레이 장치의 시스템 메모리에 저장된 적어도 하나의 제 2 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 2 렌더링 패스를 수행하도록 상기 GPU를 제어하는 수단
    을 포함하는, 하이브리드 렌더링을 위한 장치.
  28. 제 27 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 상기 복수의 렌더링 패스의 중간 버퍼를 포함하고, 상기 중간 버퍼는 상기 제 1 렌더링 패스 동안 생성되고 상기 제 2 렌더링 패스 동안 소비되는 렌더를 포함하는, 하이브리드 렌더링을 위한 장치.
  29. 그래픽스 프로세싱 유닛 (GPU) 에 의한 콘텐츠의 하이브리드 렌더링을 위한 컴퓨터 실행가능 코드를 저장하는 컴퓨터 판독가능 저장 매체로서, 상기 코드는 프로세서에 의해 실행될 때 상기 프로세서로 하여금
    디스플레이 디바이스에 표시될 장면의 적어도 하나의 프레임을 위해 복수의 렌더링 패스를 수행하도록 디스플레이 장치의 상기 GPU 를 구성하게 하고;
    상기 GPU의 온칩 그래픽스 메모리에 저장된 적어도 하나의 제 1 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 1 렌더링 패스를 수행하도록 상기 GPU를 제어하게 하고;
    상기 디스플레이 장치의 시스템 메모리에 저장된 적어도 하나의 제 2 렌더 타겟을 생성하기 위해 상기 복수의 렌더링 패스 중 제 2 렌더링 패스를 수행하도록 상기 GPU를 제어하게 하는, 컴퓨터 판독가능 저장 매체.
  30. 제 29 항에 있어서,
    상기 적어도 하나의 제 1 렌더 타겟은 상기 복수의 렌더링 패스의 중간 버퍼를 포함하고, 상기 중간 버퍼는 상기 제 1 렌더링 패스 동안 생성되고 상기 제 2 렌더링 패스 동안 소비되는 렌더를 포함하는, 컴퓨터 판독가능 저장 매체.
KR1020237009907A 2020-09-30 2021-08-31 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법 KR102614847B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/039,873 2020-09-30
US17/039,873 US11373268B2 (en) 2020-09-30 2020-09-30 Apparatus and method for graphics processing unit hybrid rendering
PCT/US2021/048433 WO2022072104A1 (en) 2020-09-30 2021-08-31 Apparatus and method for graphics processing unit hybrid rendering

Publications (2)

Publication Number Publication Date
KR20230048441A true KR20230048441A (ko) 2023-04-11
KR102614847B1 KR102614847B1 (ko) 2023-12-15

Family

ID=78086035

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237009907A KR102614847B1 (ko) 2020-09-30 2021-08-31 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법

Country Status (7)

Country Link
US (1) US11373268B2 (ko)
EP (1) EP4222713A1 (ko)
KR (1) KR102614847B1 (ko)
CN (1) CN116391205A (ko)
BR (1) BR112023004789A2 (ko)
TW (1) TW202215376A (ko)
WO (1) WO2022072104A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230419597A1 (en) * 2022-06-28 2023-12-28 Advanced Micro Devices, Inc. Binning pass with hierarchical depth data determination
US20240005602A1 (en) * 2022-06-30 2024-01-04 Advanced Micro Devices, Inc. Pipeline delay reduction for coarse visibility compression
CN117557701B (zh) * 2022-08-03 2024-09-20 荣耀终端有限公司 一种图像渲染方法和电子设备
CN115309602B (zh) * 2022-10-11 2022-12-20 深流微智能科技(深圳)有限公司 Gpu的调试装置、gpu及调试系统
CN118038780A (zh) * 2022-11-01 2024-05-14 联发科技(新加坡)私人有限公司 改善图形性能的方法及其装置
TWI829475B (zh) * 2022-12-15 2024-01-11 信驊科技股份有限公司 產生包括多個影像的佈局的影像處理裝置和影像處理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140101398A (ko) * 2011-11-30 2014-08-19 퀄컴 인코포레이티드 그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭
US20140327671A1 (en) * 2013-05-02 2014-11-06 Arm Limited Graphics processing systems
KR20160096719A (ko) * 2013-12-27 2016-08-16 퀄컴 인코포레이티드 타일화 기반 아키텍처들에 대한 최적화된 멀티-패스 렌더링

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8305384B2 (en) * 2010-05-06 2012-11-06 Himax Technologies Limited System and method for storing and accessing pixel data in a graphics display device
US9483861B2 (en) * 2013-03-15 2016-11-01 Qualcomm Incorporated Tile-based rendering
US9449410B2 (en) 2013-04-11 2016-09-20 Qualcomm Incorporated Intra-frame timestamps for tile-based rendering
US10078883B2 (en) * 2015-12-03 2018-09-18 Qualcomm Incorporated Writing graphics data from local memory to system memory
US10825129B2 (en) * 2016-06-12 2020-11-03 Apple Inc. Eliminating off screen passes using memoryless render target
GB2567207B (en) * 2017-10-06 2020-02-19 Advanced Risc Mach Ltd Graphics processing systems
GB2579592B (en) 2018-12-04 2021-03-24 Imagination Tech Ltd Tile Region Protection

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140101398A (ko) * 2011-11-30 2014-08-19 퀄컴 인코포레이티드 그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭
US20140327671A1 (en) * 2013-05-02 2014-11-06 Arm Limited Graphics processing systems
KR20160096719A (ko) * 2013-12-27 2016-08-16 퀄컴 인코포레이티드 타일화 기반 아키텍처들에 대한 최적화된 멀티-패스 렌더링

Also Published As

Publication number Publication date
CN116391205A (zh) 2023-07-04
US11373268B2 (en) 2022-06-28
TW202215376A (zh) 2022-04-16
US20220101479A1 (en) 2022-03-31
EP4222713A1 (en) 2023-08-09
KR102614847B1 (ko) 2023-12-15
WO2022072104A1 (en) 2022-04-07
BR112023004789A2 (pt) 2023-04-18

Similar Documents

Publication Publication Date Title
KR102614847B1 (ko) 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법
EP3183713A1 (en) Render target command reordering in graphics processing
JP6595101B2 (ja) 後期深度試験と保守的深度試験との間の動的切替え
EP3427229B1 (en) Visibility information modification
US11631212B2 (en) Methods and apparatus for efficient multi-view rasterization
KR102645239B1 (ko) Gpu 캐시를 활용한 다운스케일링을 위한 simo 접근 방식으로의 gpu 커널 최적화
US20240104683A1 (en) Apparatus and method for generating tile visibility information concurrently by sharing gpu hardware
KR102634506B1 (ko) Gpu 하드웨어 기반 심도 버퍼 방향 추적
US11373267B2 (en) Methods and apparatus for reducing the transfer of rendering information
US11657471B2 (en) Methods and apparatus for constant data storage
US11087431B2 (en) Methods and apparatus for reducing draw command information
KR102703870B1 (ko) 프리미티브들의 배치들의 지오메트리 프로세싱을 위한 스케일러블 프리미티브 레이트 아키텍처
WO2024055221A1 (en) Fast msaa techniques for graphics processing
US20230017522A1 (en) Optimization of depth and shadow pass rendering in tile based architectures
CN117980955A (zh) 与样本空间相关联的聚焦分箱渲染

Legal Events

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