KR20140101398A - 그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭 - Google Patents

그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭 Download PDF

Info

Publication number
KR20140101398A
KR20140101398A KR1020147017967A KR20147017967A KR20140101398A KR 20140101398 A KR20140101398 A KR 20140101398A KR 1020147017967 A KR1020147017967 A KR 1020147017967A KR 20147017967 A KR20147017967 A KR 20147017967A KR 20140101398 A KR20140101398 A KR 20140101398A
Authority
KR
South Korea
Prior art keywords
rendering
commands
mode
binning
buffer
Prior art date
Application number
KR1020147017967A
Other languages
English (en)
Other versions
KR101615840B1 (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 KR20140101398A publication Critical patent/KR20140101398A/ko
Application granted granted Critical
Publication of KR101615840B1 publication Critical patent/KR101615840B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)

Abstract

본 개시물은 렌더링 모드 (예를 들어, 비닝 렌더링 모드 및 직접 렌더링 모드) 를 결정하기 위한 기법들 및 구조들 뿐만 아니라 이러한 렌더링 모드들 사이의 스위칭을 위한 기법들 및 구조들을 제공한다. 렌더링 모드는 렌더링 특성들을 분석함으로써 결정될 수도 있다. 렌더링 모드는 또한 빈에서의 오버드로우를 트랙킹함으로써 결정될 수도 있다. 렌더링 모드는 그래픽 메모리 어드레스들을 이용하는 커맨드들을 패치하여 시스템 메모리 어드레스들을 이용하도록 함으로써 비닝 렌더링 모드로부터 직접 렌더링 모드로 스위칭될 수도 있다. 패치하는 것은 CPU 에 의해, 또는 GPU 에 의해 실행가능한 제 2 기록 커맨드 버퍼에 의해 처리될 수도 있다.

Description

그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭{SWITCHING BETWEEN DIRECT RENDERING AND BINNING IN GRAPHICS PROCESSING}
본 출원은 2011년 11월 30일 출원된 미국 가출원 번호 제61/565,397호의 이익을 우선권으로 주장하며, 여기서는 그 전체 내용을 참조로서 포함한다.
본 개시물은 그래픽 프로세싱을 위한 기법들에 관한 것이고, 보다 자세하게는, 그래픽 프로세싱에서 직접 렌더링과 비닝 사이를 스위칭하는 기법들에 관한 것이다.
디스플레이를 위한 비쥬얼 컨텐츠, 이를 테면, 그래픽 유저 인터페이스용 컨텐츠 및 비디오 게임들은 그래픽 프로세싱 유닛 (GPU) 에 의해 생성될 수도 있다. GPU 는 2차원 또는 3차원 (3D) 오브젝트들을, 디스플레이될 수도 있는 2차원 (2D) 픽셀 표현으로 변환할 수도 있다. 3D 오브젝트에 대한 정보를, 디스플레이될 수 있는 비트맵으로 변환하는 것은 픽셀 렌더링으로서 알려져 있으며, 상당한 메모리 및 프로세싱 전력을 요구한다. 과거에, 3D 그래픽 능력은 강력한 워크스테이션에서만 이용가능하였다. 그러나, 현재 3D 그래픽 액셀레이터들이 퍼스널 컴퓨터 (PC) 뿐만 아니라 임베디드 디바이스들, 이를 테면, 스마트폰들, 테블릿 컴퓨터들, 포터블 미디어 플레이어들, 포터블 비디오 게이밍 콘솔들 등에서도 일반적으로 발견된다. 통상적으로, 임베디드 디바이스는 통상의 PC들에 비해 보다 작은 소비 전력 및 메모리 용량을 갖는다. 이에 의해, 3D 그래픽 렌더링 기법들에서의 증가된 복잡성은 임베디드 시스템 상에서 이러한 기법들을 구현할 때 어려움들을 겪게 한다.
일반적으로, 본 개시물은 그래픽 프로세싱에 있어서 직접 렌더링과 비닝 사이의 스위칭을 위한 기법들 및 렌더링 모드를 결정하는 기법들을 제공한다.
본 개시물의 일 예에서, 그래픽 프로세싱 방법은 프레임을 렌더링하는 렌더링 커맨드들을 생성하는 단계로서, 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것인, 커맨드들을 생성하는 단계, 그래픽 메모리 어드레스들을 이용하는 렌더링 커맨드들을 트랙킹하는 단계, 렌더링 특성들에 기초하여 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하는 단계로서, 상기 복수의 렌더링 모드들은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는, 결정하는 단계, 및 결정된 렌더링 모드가 직접 렌더링 모드인 경우에 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경하는 단계를 포함한다.
본 개시물의 다른 예에서, 그래픽 프로세싱 방법은 장면의 프리미티브들에 대한 비닝 동작을 수행하는 단계로서, 프리미티브들은 빈들로 분할되는, 비닝 동작을 수행하는 단계, 장면의 영역에서 프리미티브들의 오버드로우의 크기를 나타내는 오버드로우 수를 계산하는 단계, 및 계산된 스코어에 기초하여 렌더링 모드를 결정하는 단계를 포함한다.
본 개시물의 다른 예에서, 그래픽 프로세싱 방법은 제 1 버퍼에, 그래픽 동작을 실행하는 동작 커맨드들을 저장하는 단계, 및 제 2 버퍼에 기록 커맨드들을 저장하는 단계를 포함하고, 기록 커맨드들은 실행시, 제 1 버퍼에서의 동작 커맨드들을 변경하여 변경된 동작 커맨드들을 생성한다.
본 개시물의 기법들은 또한, 장치, 및 프로세서로 하여금 기법들을 수행하게 하는 명령들을 저장하는 컴퓨터 판독가능 저장 매체에 의해 설명된다. 하나 이상의 실시형태들의 상세들은 첨부된 도면과 하기의 설명으로부터 설명된다. 다른 특징들, 목적들 및 이점들은 하기의 설명 및 도면들, 및 하기의 특허청구범위로부터 명확해질 것이다.
도 1 은 본 개시물의 기법들을 이용하도록 구성된 예시적인 컴퓨팅 디바이스를 나타내는 블록도이다.
도 2 는 본 개시물의 기법들을 이용하도록 구성된 예시적인 프로세싱 유닛들을 나타내는 블록도이다.
도 3 은 비닝 렌더링 모드에 이용하는 것으로서 프레임의 빈들을 예시하는 개념도이다.
도 4 는 비닝 렌더링 모드에 이용하는 것으로서 프레임의 빈들을 보다 구체적으로 예시하는 개념도이다.
도 5 는 "소프트웨어" 비닝을 이용한 비닝 렌더링 모드에 대한 커맨드 버퍼들을 예시하는 개념도이다.
도 6 은 "하드웨어" 비닝을 이용한 비닝 렌더링 모드에 대한 커맨드 버퍼들을 예시하는 개념도이다.
도 7 은 직접 렌더링 모드에 대한 커맨드 버퍼들을 예시하는 개념도이다.
도 8 은 본 개시물의 일 예에 따른 렌더링 커맨드 패치를 나타내는 개념도이다.
도 9 는 본 개시물의 일 예에 따른 오버드로우 트랙킹을 나타내는 개념도이다.
도 10 은 본 개시물의 일 예에 따라 4개의 빈들에서의 오버드로우를 예시하는 개념도이다.
도 11 은 본 개시물의 일 예에 따른 렌더링 선택 모드를 예시하는 개념도이다.
도 12 는 본 개시물의 다른 예에 따른 렌더링 커맨드 패치를 예시하는 개념도이다.
도 13 은 본 개시물의 일 예에 따른 방법을 나타내는 흐름도이다.
도 14 는 본 개시물의 다른 예에 따른 방법을 예시하는 흐름도이다.
도 15 는 본 개시물의 다른 예에 따른 방법을 예시하는 흐름도이다.
도 16 은 본 개시물의 다른 예에 따른 방법을 예시하는 흐름도이다.
본 개시물은 그래픽 프로세싱을 위한 기법들에 관한 것이고 보다 구체적으로는, 그래픽 프로세싱 시스템에서 렌더링 모드를 결정하고 렌더링 모드들 사이를 스위칭하는 기법들에 관한 것이다.
현재의 그래픽 시스템들은 장면을 렌더링하기 위해 통상적으로 비닝 렌더링 모드 (종종 타일 기반 렌더링이라 지칭됨) 또는 직접 렌더링 모드를 이용한다. 비닝 렌더링에 있어서, 2D 또는 3D 장면의 하나의 프레임은 프레임을 더 작은 부분들 (예를 들어, 직사각형 빈들 또는 타일들) 로 나누고 이 빈들 각각을 개별적으로 렌더링함으로써 렌더링된다. 비닝 렌더링은 소규모 전용 고속 그래픽 메모리 (GMEM) 가 이용가능한 애플리케이션들, 이를 테면, 모바일 애플리케이션들에 유용하다. 타일들의 사이즈는 GMEM 에 이용가능한 데이터량을 나타내도록 구성될 수 있다. 예를 들어, GMEM 가 512kB 를 저장할 수 있다면, 타일들의 사이즈는, 그 타일에 포함된 픽셀 데이터가 512kB 이하이도록 구성될 수도 있다.
한편, 직접 렌더링 모드에서의 그래픽 프로세싱은 프레임을 더 작은 빈들로 나누지 않는다. 그 대신에, 프레임 전체가 한번에 렌더링된다. 일부 그래픽 프로세싱 시스템들 (예를 들어, 모바일 디바이스에서의 그래픽 프로세싱 시스템) 에서, GMEM 가 픽셀 데이터의 전체 프레임을 홀딩하는 것은 충분하지 않다. 그 대신에, 직접 렌더링 모드에 대해, 보다 저속의 시스템 메모리가 프레임을 렌더링하도록 이용된다.
본 개시물은 렌더링 모드 (예를 들어, 비닝 렌더링 모드 및 직접 렌더링 모드) 를 결정하기 위한 기법들 및 구조들 뿐만 아니라 이러한 렌더링 모드들 사이의 스위칭을 위한 기법들 및 구조들을 제공한다.
본 개시물의 일 예에서, 그래픽 프로세싱 방법은 프레임을 렌더링하는 렌더링 커맨드들을 생성하는 단계로서, 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것인, 커맨드들을 생성하는 단계, 그래픽 메모리 어드레스들을 이용하는 렌더링 커맨드들을 트랙킹하는 단계, 렌더링 특성들에 기초하여 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하는 단계로서, 상기 복수의 렌더링 모드들은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는, 결정하는 단계, 및 결정된 렌더링 모드가 직접 렌더링 모드인 경우에 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경하는 단계를 포함한다.
본 개시물의 다른 예에서, 그래픽 프로세싱 방법은 장면의 프리미티브들에 대한 비닝 동작을 수행하는 단계로서, 프리미티브들은 빈들로 분할되는, 비닝 동작을 수행하는 단계, 장면의 영역에서 프리미티브들의 오버드로우의 크기를 나타내는 오버드로우 수를 계산하는 단계, 및 계산된 스코어에 기초하여 렌더링 모드를 결정하는 단계를 포함한다.
본 개시물의 다른 예에서, 그래픽 프로세싱 방법은 제 1 버퍼에, 그래픽 동작을 실행하는 동작 커맨드들을 저장하는 단계, 및 제 2 버퍼에 기록 커맨드들을 저장하는 단계를 포함하고, 기록 커맨드들은 실행시, 제 1 버퍼에서의 동작 커맨드들을 변경하여, 변경된 동작 커맨드들을 생성한다.
도 1 은 렌더링 모드를 결정하고 렌더링 모드들 사이 (예를 들어, 비닝 렌더링 모드와 직접 렌더링 모드 사이) 를 스위칭하기 위한 본 개시물의 기법들을 구현하는데 이용될 수도 있는 예시적인 컴퓨팅 디바이스 (2) 를 예시하는 블록도이다. 컴퓨팅 디바이스 (2) 는 예를 들어, 퍼스널 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 테블릿 컴퓨터, 컴퓨터 워크스테이션, 비디오 게임 플랫폼 또는 콘솔, 모바일 전화기, 이를 테면, 예를 들어, 셀룰라 또는 위성 전화기, 랜드라인 전화기, 인터넷 전화기, 핸드헬드 디바이스, 이를테면, 포터블 비디오 게임 디바이스 또는 개인 휴대정보 단말기 (PDA), 퍼스널 뮤직 플레이어, 비디오 플레이어, 디스플레이 디바이스, 텔레비전, 텔레비전 셋톱 박스, 서버, 중간 네트워크 디바이스, 메인프레임 컴퓨터, 또는 임의의 모바일 디바이스, 또는 그래픽 데이터를 프로세싱 및/또는 디스플레이하는 임의의 다른 유형의 디바이스를 포함할 수도 있다.
도 1 의 예에 예시된 바와 같이, 컴퓨팅 디바이스 (2) 는 유저 입력 인터페이스 (4), 중앙 프로세싱 유닛 (CPU)(6), 메모리 제어기 (8), 시스템 메모리 (10), 그래픽 프로세싱 유닛 (GPU)(12), 그래픽 메모리 (14), 디스플레이 인터페이스 (16), 디스플레이 (18) 및 버스들 (20 및 22) 을 포함할 수도 있다. 일부 예들에서는, 그래픽 메모리 (14) 가 GPU (12) 와 "온칩"일 수도 있음을 주지한다. 일부 경우에, 도 1 에 도시된 모든 하드웨어 엘리먼트들이 예를 들어, 온칩, 예를 들어, SoC (system on a chip) 설계로 될 수도 있다. 사용자 입력 인터페이스 (4), CPU (6), 메모리 제어기 (8), GPU (12) 및 디스플레이 인터페이스 (16) 는 버스 (20) 를 이용하여 서로 통신할 수도 있다. 메모리 제어기 (8) 및 시스템 메모리 (10) 는 또한 버스 (22) 를 이용하여 서로 통신할 수도 있다. 버스들 (20, 22) 은 임의의 여러 버스 구조들, 이를 테면, 3 세대 버스 (예를 들어, HyperTransport 버스 또는 InfiniBand 버스), 2 세대 버스 (예를 들어, Advanced Graphics Port 버스, PCI (Peripheral Component Interconnect) Express 버스 또는 AXI (Advanced eXentisible Interface) 버스) 또는 또 다른 유형의 버스 또는 디바이스 상호접속부일 수도 있다. 도 1 에 도시된 상이한 컴포넌트들 간의 버스들 및 통신 인터페이스들의 특정 구성은 단지 일 예에 불과하며, 동일하거나 상이한 컴포넌트들을 이용한 컴퓨팅 디바이스들 및/또는 다른 그래픽 프로세싱 시스템들의 다른 구성들이 본 개시물의 기법들을 구현하는데 이용될 수도 있음을 주지해야 한다.
CPU (6) 는 컴퓨팅 디바이스 (2) 의 동작을 제어하는 범용 또는 특수 목적 프로세서를 포함할 수도 있다. 사용자는 CPU (6) 로 하여금 하나 이상의 소프트웨어 애플리케이션들을 실행하게끔 하는 입력을 컴퓨팅 디바이스 (2) 에 제공할 수도 있다. CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들은 예를 들어, 오퍼레이팅 시스템, 워드 프로세싱 애플리케이션, 이메일 애플리케이션, 스프레드 시트 애플리케이션, 미디어 플레이어 애플리케이션, 비디오 게임 애플리케이션, 그래픽 유저 인터페이스 애플리케이션 또는 다른 프로그램을 포함할 수도 있다. 추가로, CPU (6) 는 GPU (12) 의 동작을 제어하기 위하여 GPU 드라이버 (7) 를 실행시킬 수도 있다. 사용자는 하나 이상의 입력 디바이스들 (도시 생략), 이를 테면, 키보드, 마우스, 마이크로 폰, 터치 패드, 또는 사용자 입력 인터페이스 (4) 를 통하여 컴퓨팅 디바이스 (2) 에 커플링되는 다른 입력 디바이스를 통하여 컴퓨팅 디바이스 (2) 에 입력을 제공할 수도 있다.
CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들은 디스플레이 (18) 에 대한 그래픽 데이터의 렌더링을 발생시키도록 CPU (6) 에 명령하는 하나 이상의 그래픽 렌더링 애플리케이션들을 포함할 수도 있다. 일부 예들에서, 소프트웨어 명령들은 API (graphics application programming interface), 이를 테면, 예를 들어, OpenGL® (Open Graphics Library) API, OpenGL ES (Open Graphics Library Embedded Systems) API, Direct3D API, X3D API, RenderMan API, WebGL API, 또는 임의의 다른 공용 또는 독점적인 표준 그래픽 API 에 따를 수도 있다. 그래픽 렌더링 명령들을 프로세싱하기 위하여, CPU (6) 는 GPU (12) 로 하여금 그래픽 데이터의 렌더링의 일부 또는 전부를 수행하게끔 하도록 하나 이상의 그래픽 렌더링 커맨드들을 GPU (12) 에 발행할 수도 있다. 일부 예들에서, 렌더링될 그래픽 데이터는 그래픽 프리미티브들의 리스트, 예를 들어, 점, 선, 삼각형, 사각형들, 삼각형 스트립들 등을 포함할 수도 있다.
메모리 제어기 (8) 는 시스템 메모리 (10) 내에 그리고 외부로 진행하는 데이터의 전송을 용이하게 한다. 예를 들어, 메모리 제어기 (8) 는 컴퓨팅 디바이스 (2) 에서의 컴포넌트들에 메모리 서비스들을 제공하기 위하여, 메모리 판독 및 기록 커맨드들을 수신하고 메모리 시스템 (10) 에 대하여 이러한 커맨드들을 서비스할 수도 있다. 메모리 제어기 (8) 는 메모리 버스 (22) 를 통하여 시스템 메모리 (10) 에 통신가능하게 커플링된다. 메모리 제어기 (8) 는 CPU (6) 및 시스템 메모리 (10) 양쪽 모두와 분리된 프로세싱 모듈인 것으로서 도 1 에 예시되어 있지만, 다른 예들에서, 메모리 제어기 (8) 의 기능의 일부 또는 전부가 CPU (6) 및 시스템 메모리 (10) 의 일방 또는 양방에서 구현될 수도 있다.
시스템 메모리 (10) 는 CPU (6) 에 의한 실행을 위하여 액세스가능한 프로그램 모듈들 및/또는 명령들, 및/또는 CPU (6) 상에서 실행하는 프로그램들에 의한 이용을 위한 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 CPU (6) 에 의해 이용되어 그래픽 사용자 인터페이스 (GUI) 를 디스플레이 (18) 상에 제공하는 윈도우 매니저 애플리케이션을 저장할 수도 있다. 추가로, 시스템 메모리 (10) 는 애플리케이션들와 연관된 애플리케이션 표면 데이터 및 사용자 애플리케이션들을 저장할 수도 있다. 시스템 메모리 (10) 는 컴퓨팅 디바이스 (2) 의 다른 컴포넌트들에 의해 생성되고/되거나 다른 컴포넌트들에 의해 이용하기 위한 정보를 추가로 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 GPU (12) 에 대한 디바이스 메모리로서 작용할 수도 있고, GPU (12) 에 의해 동작될 데이터 뿐만 아니라 GPU (12) 에 의해 수행된 동작들로부터 야기되는 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 텍스쳐 버퍼들, 심도 버퍼들, 스텐실 버퍼들, 버텍스 버퍼들, 프레임 버퍼들 등의 임의의 조합을 저장할 수도 있다. 시스템 메모리 (10) 는 하나 이상의 휘발성 또는 비휘발성 메모리들, 또는 저장 디바이스들, 이를 테면, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 읽기 전용 메모리 (ROM), 소거가능 프로그래밍가능 ROM (EPROM), 전기적 소거가능 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체, 또는 광학 저장 매체를 포함할 수도 있다.
GPU (12) 는 하나 이상의 그래픽 프리미티브들을 디스플레이 (18) 에 렌더링하기 위해 그래픽 동작들을 수행하도록 구성될 수도 있다. 따라서, CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들 중 하나가 그래픽 프로세싱을 요구할 때, CPU (6) 는 디스플레이 (18) 에 렌더링하기 위해 GPU (12) 에 그래픽 커맨드들 및 그래픽 데이터를 제공할 수도 있다. 그래픽 데이터는 예를 들어, 드로잉 커맨드들, 스테이트 정보, 프리미티브 정보, 텍스쳐 정보 등을 포함할 수도 있다. GPU (12) 는 일부 경우에, CPU (6) 보다 더 효율적인 복잡한 그래픽 관련 동작들의 프로세싱을 제공하는 고병렬 구조로 구축될 수도 있다. 예를 들어, GPU (12) 는 병렬 방식으로 다수의 버텍스들 또는 픽셀들 상에서 동작하도록 구성된 복수의 프로세싱 엘리먼트들을 포함할 수도 있다. GPU (12) 의 고병렬 특성은 일부 경우에, CPU (6) 를 이용하여 장면을 직접 디스플레이 (18) 에 드로잉하는 것보다 더 신속하게, GPU (12) 로 하여금 그래픽 이미지들 (예를 들어, GUI들 및 2 차원 (2D) 및/또는 3차원 (3D) 그래픽 장면들) 을 디스플레이 (18) 상에 드로잉하게 허용할 수도 있다.
GPU (12) 는 일부 경우에, 컴퓨팅 디바이스 (2) 의 마더보드 내에 통합될 수도 있다. 다른 경우에, GPU (12) 는 컴퓨팅 디바이스 (2) 의 마더보드에서의 포트에 설치된 그래픽 카드 상에 존재할 수도 있거나 또는 컴퓨팅 디바이스 (2) 와 상호동작하도록 구성된 주변 디바이스 내에 달리 통합될 수도 있다. GPU (12) 는 하나 이상의 프로세서들, 이를 테면, 하나 이상의 마이크로프로세서들, 응용 주문형 집적 회로들 (ASICs), 필드 프로그래밍가능 게이트 어레이들 (FPGAs), 디지털 신호 프로세서들 (DSPs), 또는 다른 등가의 통합된 또는 별도의 논리 회로를 포함할 수도 있다.
GPU (12) 는 그래픽 메모리 (14) 에 직접 커플링될 수도 있다. 따라서, GPU (12) 는 버스 (20) 를 사용하지 않고 그래픽 메모리 (14) 로부터 데이터를 판독하고 메모리에 데이터를 기록할 수도 있다. 즉, GPU (12) 는 오프칩 메모리 대신에, 로컬 스토리지를 이용하여 국부적으로 데이터를 프로세싱할 수도 있다. 이는 GPU (12) 가 버스 (20) 를 통하여 데이터를 판독 및 기록하게 하는 (이는 매우 심한 버스 트래픽을 경험하게 할 수도 있음) 필요성을 제거함으로써 GPU (12) 로 하여금 보다 효율적인 방식으로 동작하도록 허용한다. 그러나, 일부 경우에, GPU (12) 는 별도의 메모리를 포함하지 않을 수도 있고 그 대신에, 버스 (20) 를 통하여 시스템 메모리 (10) 를 이용한다. 그래픽 메모리 (14) 는 하나 이상의 휘발성 또는 비휘발성 메모리들, 또는 저장 디바이스들, 이를 테면, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능 프로그래밍가능 ROM (EPROM), 전기적 소거가능 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체, 또는 광학 저장 매체를 포함할 수도 있다.
CPU (6) 및/또는 GPU (12) 는 프레임 버퍼 (15) 에, 렌더링된 이미지 데이터를 저장할 수도 있다. 프레임 버퍼 (15) 는 독립형 메모리일 수도 있거나 또는 시스템 메모리 (10) 내에 할당될 수도 있다. 디스플레이 인터페이스 (16) 는 프레임 버퍼 (15) 로부터 데이터를 취출할 수도 있고 렌더링된 이미지 데이터에 의해 표현되는 이미지를 디스플레이하도록 디스플레이 (18) 를 구성시킬 수도 있다. 일부 예들에서, 디스플레이 인터페이스 (16) 는 프레임 버퍼로부터 취출된 디지털 값들을 디스플레이 (18) 에 의해 소비가능한 아날로그 신호로 변환하도록 구성된 디지털/아날로그 변환기 (DAC) 를 포함할 수도 있다. 다른 예들에서, 디스플레이 인터페이스 (16) 는 프로세싱을 위하여 디스플레이 (18) 에 직접 디지털 값들을 패스할 수도 있다. 디스플레이 (18) 는 모니터, 텔레비전, 프로젝션 디바이스, 액정 디스플레이 (LCD), 플라즈마 디스플레이 패널, 발광 다이오드 (LED) 어레이, 이를 테면, 유기 LED (OLED) 디스플레이, 음극선관 (CRT) 디스플레이, 전자 페이퍼, 표면 전도 전자 방출 디스플레이 (SED), 레이저 텔레비전 디스플레이, 비정질 디스플레이, 또는 다른 유형의 디스플레이 유닛을 포함할 수도 있다. 디스플레이 (18) 는 컴퓨팅 디바이스 (2) 내에 통합될 수도 있다. 예를 들어, 디스플레이 (18) 는 모바일 전화기의 장면일 수도 있다. 대안으로서, 디스플레이 (18) 는 유선 또는 무선 통신 링크를 통하여 컴퓨팅 디바이스 (2) 에 커플링된 독립형 디바이스일 수도 있다. 예를 들어, 디스플레이 (18) 는 케이블 또는 무선 링크를 통하여 퍼스널 컴퓨터에 접속된 컴퓨터 모니터 또는 플랫 패널 디스플레이일 수도 있다.
본 개시물의 일 예에 따르면, CPU (6) 및/또는 GPU 드라이버 (7) 는 프레임을 렌더링하는 렌더링 커맨드들을 생성하는 것으로서, 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것이고, 그래픽 메모리 어드레스들을 이용하는 렌더링 커맨드들을 트랙킹하고, 렌더링 특성들에 기초하여 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하는 것으로서, 상기 복수의 렌더링 모드들은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하고, 및 결정된 렌더링 모드가 직접 렌더링 모드인 경우에 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경하도록 구성될 수도 있다.
본 개시물의 다른 예에 따르면, CPU (6) 및/또는 GPU 드라이버 (7) 는 장면의 프리미티브들에 대한 비닝 동작을 수행하는 것으로서, 프리미티브들은 빈들로 분할되고, 장면의 영역에서 프리미티브들의 오버드로우의 크기를 나타내는 오버드로우 수를 계산하고, 및 계산된 스코어에 기초하여 렌더링 모드를 결정하도록 구성될 수도 있다.
본 개시물의 다른 예에서, CPU (6) 및/또는 GPU 드라이버 (7) 는 제 1 버퍼에, 그래픽 동작을 실행하는 동작 커맨드들을 저장하고, 및 제 2 버퍼에 기록 커맨드들을 저장하도록 구성될 수도 있고, 기록 커맨드들은 실행시, 제 1 버퍼에서의 동작 커맨드들을 변경하여, 변경된 동작 커맨드들로 생성한다.
도 2 는 도 1 의 CPU (6), GPU (12) 및 시스템 메모리 (10) 의 예시적인 구현들을 보다 자세하게 예시하는 블록도이다. CPU (6) 는 적어도 하나의 소프트웨어 애플리케이션 (24), 그래픽 API (26) 및 GPU 드라이버 (7) 를 포함할 수도 있으며, 이들 각각은 CPU (6) 상에서 실행하는 하나 이상의 소프트웨어 애플리케이션들 또는 서비스들일 수도 있다. GPU (12) 는 그래픽 프로세싱 커맨드들을 실행하기 위해 함께 동작하는 복수의 그래픽 프로세싱 스테이지들을 포함하는 그래픽 프로세싱 파이프라인 (30) 을 포함할 수도 있다. GPU (12) 는 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는 여러 렌더링 모드들로 그래픽 프로세싱 파이프라인 (30) 을 실행시키도록 구성될 수도 있다. 도 2 에 도시된 바와 같이, 그래픽 프로세싱 파이프라인 (30) 은 커맨드 엔진 (32), 지오메트리 프로세싱 스테이지 (34), 래스터화 스테이지 (36) 및 픽셀 프로세싱 파이프라인 (38) 을 포함할 수도 있다. 그래픽 프로세싱 파이프라인 (30) 에서의 컴포넌트들 각각은 고정 기능 컴포넌트들로서, 프로그래밍가능 컴포넌트들로서 (예를 들어, 프로그래밍 가능 쉐이더 유닛 상에서 실행하는 쉐이더 프로그램의 일부로서), 또는 고정 기능 및 프로그래밍가능 컴포넌트들의 조합으로서 구현될 수도 있다. CPU (6) 및 GPU (12) 에 이용가능한 메모리는 시스템 메모리 (10) 및 프레임 버퍼 (15) 를 포함할 수도 있다. 프레임 버퍼 (15) 는 시스템 메모리 (10) 로부터 분리될 수도 있거나 또는 시스템 메모리 (10) 의 일부일 수도 있다. 프레임 퍼버 (15) 는 렌더링된 이미지 데이터를 저장할 수도 있다.
소프트웨어 애플리케이션 (24) 은 GPU (12) 의 기능들을 이용하는 임의의 애플리케이션일 수도 있다. 예를 들어, 소프트웨어 애플리케이션 (24) 은 GUI 애플리케이션, 오퍼레이팅 시스템, 포터블 매핑 애플리케이션, 엔지니어링 또는 아티스트 애플리케이션들을 위한 컴퓨터 보조 설계 프로그램, 비디오 게임 애플리케이션 또는 2D 또는 3D 그래픽들을 이용하는 임의의 다른 유형의 소프트웨어 애플리케이션일 수도 있다.
소프트웨어 애플리케이션 (24) 은 그래픽 사용자 인터페이스 (GUI) 및/또는 그래픽 장면을 렌더링하도록 GUI 에 명령하는 하나 이상의 드로잉 명령들을 포함할 수도 있다. 예를 들어, 드로잉 명령들은 GPU (12) 에 의해 렌더링될 하나 이상의 그래픽 프리미티브들의 세트를 정의하는 명령들을 포함할 수도 있다. 일부 예들에서, 드로잉 명령들은 GUI 에 이용되는 복수의 윈도잉 표면들의 전부 또는 일부를 총괄적으로 정의할 수도 있다. 추가 예들에서, 드로잉 명령들은 애플리케이션에 의해 정의된 모델 공간 또는 실제 공간 내에서 하나 이상의 그래픽 오브젝트들을 포함하는 그래픽 장면의 전부 또는 일부를 총괄적으로 정의할 수도 있다.
소프트웨어 애플리케이션 (24) 은 그래픽 API (26) 를 통하여 GPU 드라이버 (7) 를 인보크하여, 하나 이상의 그래픽 프리미티브들을 디스플레이가능 그래픽 이미지들로 렌더링하기 위한 하나 이상의 커맨드들을 GPU (12) 에 발행할 수도 있다. 예를 들어, 소프트웨어 애플리케이션 (24) 은 그래픽 API (26) 를 통하여 GPU 드라이버 (7) 를 인보크하여, 프리미티브 정의들을 GPU (12) 에 제공할 수도 있다. 일부 예들에서, 프리미티브 정의들은 그래픽 프리미티브들의 리스트, 예를 들어, 삼각형, 사각형들, 삼각형 팬들, 삼각형 스트립들 등의 형태로 GPU (12) 에 제공될 수도 있다. 프리미티브 정의들은 렌더링될 프리미티브들과 연관된 하나 이상의 버텍스들을 특정하는 버텍스 사양들을 포함할 수도 있다. 버텍스 사양들은 각각의 버텍스에 대한 위치 좌표들, 및 일부 경우에 버텍스와 연관된 다른 속성들, 이를 테면, 예를 들어, 컬러 좌표, 법선 벡터들, 및 텍스쳐 좌표들을 포함할 수도 있다. 프리미티브 정의들은 또한 프리미티브 유형 정보 (예를 들어, 삼각형, 사각형, 삼각형 팬, 삼각형 스트립 등), 스케일링 정보, 회전 정보 등을 포함할 수도 있다. 소프트웨어 애플리케이션 (24) 에 의해 GPU 드라이버 (7) 에 발행된 명령들에 기초하여, GPU 드라이버 (7) 는 프리미티브를 렌더링하기 위해 GPU (12) 가 수행하는 하나 이상의 동작들을 특정하는 하나 이상의 커맨드들을 퍼뮬레이션할 수도 있다. GPU (12) 가 CPU (6) 로부터 커맨드를 수신할 때, 그래픽 프로세싱 파이프라인 (30) 은 커맨드를 디코딩하고, 커맨드에서 특정된 동작을 수행하도록 그래픽 프로세싱 파이프라인 (30) 내의 하나 이상의 프로세싱 엘리먼트들을 구성시킨다. 특정된 동작들을 수행한 후, 그래픽 프로세싱 파이프라인 (30) 은 디스플레이 디바이스와 연관된 프레임 버퍼 (40) 에 렌더링된 데이터를 출력한다. 그래픽 파이프라인 (30) 은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함한 복수의 상이한 렌더링 모드들 중 하나에서 실행하도록 구성될 수도 있다. 비닝 렌더링 모드 및 직접 렌더링 모드의 동작은 아래 보다 자세히 설명될 것이다.
GPU 드라이버 (7) 는 또한, 하나 이상의 쉐이더 프로그램들을 컴파일하고, GPU (12) 내에 포함된 하나 이상의 프로그래밍가능 쉐이더 유닛들 상으로 컴파일된 쉐이더 프로그램들을 다운로드하도록 구성될 수도 있다. 쉐이더 프로그램들은 하이 레벨 쉐이딩 언어, 이를 테면, 예를 들어, GLSL (OpenGL Shading Language), HLSL (High Level Shading Language), Cg (C for Graphics) 쉐이딩 언어 등으로 기록될 수도 있다. 컴파일된 쉐이더 프로그램들은 GPU (12) 내에서의 프로그래밍가능 쉐이더 유닛의 동작을 제어하는 하나 이상의 명령들을 포함할 수도 있다. 예를 들어, 쉐이더 프로그램들은 버텍스 쉐이더 프로그램들 및/또는 픽셀 쉐이더 프로그램들을 포함할 수도 있다. 버텍스 쉐이더 프로그램은 프로그래밍가능 버텍스 쉐이더 유닛 또는 통합형 쉐이더 유닛의 실행을 제어할 수도 있고 하나 이상의 버텍스 동작들을 구체화하는 명령들을 포함할 수도 있다. 픽셀 쉐이더 프로그램은 프로그래밍가능 픽셀 쉐이더 유닛 또는 통합형 쉐이더 유닛의 실행을 제어하는 픽셀 쉐이더 프로그램들을 포함할 수도 있고, 하나 이상의 픽셀당 동작들을 특정하는 명령들을 포함할 수도 있다. 본 개시물의 일부 예시적인 실시형태들에 따르면, 픽셀 쉐이더 프로그램은 소스 픽셀들에 대한 대응하는 정의 알파값들에 기초하여 선택적으로 텍스쳐 값들이 소스 픽셀들에 대하여 취출되게끔 하는 명령들을 또한 포함할 수도 있다.
본 개시물의 기법들에 따르면, GPU 드라이버 (7) 는 또한 GMEM 어드레스들을 이용하는 비닝 렌더링 모드에서의 렌더링을 위하여 생성된 커맨드들을 트랙킹하도록 구성될 수도 있다. GMEM 어드레스를 이용하는 각각의 커맨드에 대해, GPU 드라이버 (7) 는 직접 렌더링 모드에 이용될 대응하는 시스템 메모리 어드레스를 저장할 수도 있다. 렌더링 모드가 비닝 렌더링 모드에서 직접 렌더링 모드로 스위칭되면, GPU 드라이버 (7) 는 GMEM 어드레스들을 시스템 메모리 어드레스들로 교체하도록 렌더링 커맨드들을 패치 (즉, 변경) 할 수도 있다. GMEM 어드레스들을 시스템 메모리 어드레스들로 패치하는 추가적인 기법들은 아래 자세하게 설명된다.
그래픽 프로세싱 파이프라인 (30) 은 CPU (6) 로부터 그래픽 드라이버 (28) 를 통하여 하나 이상의 그래픽 프로세싱 커맨드들을 수신하고, 그래픽 프로세싱 커맨드들을 실행하여 디스플레이가능 그래픽 이미지들을 생성하도록 구성될 수도 있다. 위에 설명된 바와 같이, 그래픽 프로세싱 파이프라인 (30) 은 그래픽 프로세싱 커맨드들을 생성하도록 함께 동작하는 복수의 스테이지들을 포함한다. 그러나, 이러한 스테이지는 별도의 하드웨어 블록들로 반드시 구현될 필요가 있는 것은 아님을 주지해야 한다. 예를 들어, 복수의 지오메트리 프로세싱 스테이지 (34) 및 픽셀 프로세싱 파이프라인 (38) 은 통합형 쉐이더 유닛의 일부로서 구현될 수도 있다. 또한, 그래픽 파이프라인 (30) 은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는 복수의 상이한 렌더링 모드들 중 하나에서 실행하도록 구성될 수도 있다.
커맨드 엔진 (32) 은 그래픽 프로세싱 커맨드들을 수신하고 그래픽 프로세싱 커맨드들을 실행하기 위한 여러 동작들을 수행하도록 그래픽 프로세싱 파이프라인 (30) 내의 나머지 프로세싱 스테이지들을 구성할 수도 있다. 그래픽 프로세싱 커맨드들은 예를 들어, 드로잉 커맨드 및 그래픽 스테이팅 커맨드들을 포함할 수도 있다. 드로잉 커맨드들은 각각의 버텍스에 대한 위치 좌표들을 특정하는 버텍스 사양 커맨드들, 및 일부 경우에 버텍스와 연관된 다른 속성들, 이를 테면, 예를 들어, 컬러 좌표, 법선 벡터들, 텍스쳐 좌표들, 및 포그 좌표들을 포함할 수도 있다. 그래픽 스테이팅 커맨드들은 프리미티브 유형 커맨드들, 변환 커맨드들, 조명 커맨드들을 포함할 수도 있다. 프리미티브 유형 커맨드들은 렌더링될 프리미티의 유형 및/또는 버텍스가 프리미티브를 형성하도록 어떻게 결합되는지를 특정할 수도 있다. 변환 커맨드들은 버텍스들에 대해 수행하는 변환들의 유형들을 특정할 수도 있다. 조명 커맨드들은 그래픽 장면 내의 상이한 광들의 유형, 방향 및/또는 배치를 특정할 수도 있다. 커맨드 엔진 (32) 은 지오메트리 프로세싱 스테이지 (34) 로 하여금 하나 이상의 수신된 커맨드들과 연관된 버텍스들 및/또는 프리미티브들에 대한 지오메트리 프로세싱을 수행하도록 할 수도 있다.
지오메트리 프로세싱 스테이지 (34) 는 래스터화 스테이지 (36) 에 대한 프리미티브 데이터를 생성하기 위하여, 하나 이상의 버텍스들에 대한 버텍스-단위 동작들 (per-vertex operations) 및/또는 프리미티브 세트업 동작들을 수행할 수도 있다. 각각의 버텍스는 속성들의 세트, 이를 테면, 예를 들어, 위치 좌표, 컬러 값들, 법선 벡터 및 텍스쳐 좌표들과 연관될 수도 있다. 지오메트리 프로세싱 스테이지 (34) 는 여러 버텍스-단위 동작들에 따라 이들 속성들 중 하나 이상을 변경한다. 예를 들어, 지오메트리 프로세싱 스테이지 (34) 는 변경된 버텍스 위치 좌표들을 생성하기 위해 버텍스 위치 좌표들에 대한 하나 이상의 변환들을 수행할 수도 있다. 지오메트리 프로세싱 스테이지 (34) 는 예를 들어, 모델링 변환, 뷰잉 변환, 프로젝션 변환, ModelView 변환, ModelViewProjection 변환, 뷰포트 변환 및 심도 범위 스케일링 변환 중 하나 이상을 버텍스 위치 좌표들에 적용하여 변경된 위치 좌표들을 생성할 수도 있다. 일부 경우에, 버텍스 위치 좌표들은 모델링 공간 좌표들일 수도 있고 변경된 버텍스 위치 좌표들은 스크린 공간 좌표들일 수도 있다. 스크린 공간 좌표들은 모델링, 뷰잉, 프로젝션 및 뷰포트 변환들의 적용 후에 얻어질 수도 있다. 일부 경우에, 지오메트리 스테이지 (34) 는 또한, 버텍스들에 대한 변경된 컬러 좌표들을 생성하기 위해 버텍스들에 대해 버텍스-단위 조명 동작을 수행할 수도 있다. 지오메트리 스테이지 (34) 는 또한, 예를 들어, 정상 변환, 정상 정규화 동작들, 뷰 볼륨 클립핑, 균일 분할 및/또는 백페이스 컬링 동작들 (backface culling operations) 을 포함하는 다른 동작들을 수행할 수도 있다.
지오메트리 프로세싱 스테이지 (34) 는 레스터화될 프리미티브를 정의하는 하나 이상의 변경된 버텍스들의 세트를 포함하는 프리미티브 데이터 뿐만 아니라 버텍스들이 프리미티브를 형성하기 위해 어떻게 결합하는지를 특정하는 데이터를 생성할 수도 있다. 변경된 버텍스들 각각은 예를 들어, 버텍스와 연관되는 프로세싱된 버텍스 속성 값들 및 변경된 버텍스 위치 좌표들을 포함할 수도 있다. 프리미티브 데이터는 그래픽 프로세싱 파이프라인 (30) 의 추가 스테이지들에 의해 래스터화될 프리미티브에 총괄적으로 대응할 수도 있다. 개념적으로, 각각의 버텍스는 프리미티브의 두개의 에지들이 만나는 프리미티브의 코너에 대응할 수도 있다. 지오메트리 프로세싱 스테이지 (34) 는 추가의 프로세싱을 위하여 래스터화 스테이지 (36) 에 프리미티브 데이터를 제공할 수도 있다.
일부 예들에서, 지오메트리 프로세싱 스테이지 (34) 의 전부 또는 일부가 하나 이상의 쉐이더 유닛들 상에서 동작하는 하나 이상의 쉐이더 프로그램들에 의해 구현될 수도 있다. 예를 들어, 지오메트리 프로세싱 스테이지 (34) 는 이러한 예들에서, 버텍스 쉐이더, 지오메트리 쉐이더 또는 이들의 임의의 조합에 의해 구현될 수도 있다. 다른 예들에서, 지오메트리 프로세싱 스테이지 (34) 는 하나 이상의 쉐이더 유닛들 상에서 실행하는 하나 이상의 쉐이더 프로그램들 및 고정 기능 하드웨어의 조합으로서 또는 고정 기능 하드웨어 프로세싱 파이프라인으로서 구현될 수도 있다.
래스터화 스테이지 (36) 는 지오메트리 프로세싱 스테이지 (34) 로부터, 래스터화될 프리미티브를 나타내는 프리미티브 데이터를 수신하고, 래스터화된 프리미티브에 대응하는 복수의 소스 픽셀들을 생성하기 위해 프리미티브를 래스터화하도록 구성된다. 일부 예들에서, 래스터화 스테이지 (36) 는 어느 스크린 픽셀 로케이션들이 래스터화될 프리미티브에 의해 커버되는지를 결정할 수도 있고, 프리미티브에 의해 커버되도록 결정된 각각의 스크린 픽셀 로케이션에 대해 소스 픽셀을 생성할 수도 있다. 래스터화 스테이지 (36) 는 당해 기술 분야의 숙련된 자에 의해 알려진 기법, 이를 테면 예를 들어, 에지 워킹 기법 (edge-walking technique), 평가 에지 등식들 (evaluating edge equations) 등을 이용하여, 어느 스크린 픽셀 로케이션들이 프리미티브에 의해 커버되는지를 결정할 수도 있다. 래스터화 스테이지 (36) 는 추가의 프로세싱을 위하여 픽셀 프로세싱 파이프라인 (38) 에 결과적인 소스 픽셀들을 제공할 수도 있다.
래스터화 스테이지 (36) 에 의해 생성된 소스 픽셀들은 스크린 픽셀 로케이션, 예를 들어, 목적지 픽셀에 대응할 수도 있고 하나 이상의 컬러 속성들과 연관될 수도 있다. 특정의 래스터화된 프리미티브에 대하여 생성된 소스 픽셀들 모두는 래스터화된 프리미티브와 연관된 것이라 말할 수도 있다. 프리미티브에 의해 커버되는 것으로서, 래스터화 스테이지 (36) 에 의해 결정된 픽셀들은 프리미티브의 버텍스들을 나타내는 픽셀들, 프리미티브의 에지들을 나타내는 픽셀들, 및 프리미티브의 내부를 나타내는 픽셀들을 개념적으로 포함할 수도 있다.
픽셀 프로세싱 파이프라인 (38) 은 래스터화된 프리미티브와 연관된 소스 픽셀들을 수신하고, 소스 픽셀 상에서의 하나 이상의 픽셀 동작들을 수행하도록 구성된다. 픽셀 프로세싱 파이프라인 (38) 에 의해 수행될 수도 있는 픽셀 단위 동작들은 예를 들어, 알파 테스트, 텍스쳐 매핑, 컬러 계산, 픽셀 쉐이딩, 픽셀 단위 조명, 포그 프로세싱, 블렌딩, 픽셀 오너쉽 텍스트, 소스 알파 테스트, 스텐실 테스트, 심도 테스트, 시저스 테스트 (scissors test) 및/또는 스티플링 동작들을 포함한다. 추가로, 픽셀 프로세싱 파이프라인 (38) 은 하나 이상의 픽셀 단위 동작들을 수행하기 위해 하나 이상의 쉐이더 프로그램들을 실행할 수도 있다. 픽셀 프로세싱 파이프라인 (38) 에 의해 생성된 결과적인 데이터는 본 명세서에서는 목적지 픽셀 데이터로서 지칭될 수도 있으며, 프레임 버퍼 (15) 에 저장될 수도 있다. 목적지 픽셀 데이터는 프로세싱되었던 소스 픽셀과 동일한 디스플레이 로케이션을 갖는 프레임 버퍼 (15) 에서의 목적지 픽셀과 연관될 수도 있다. 목적지 픽셀 데이터는 데이터, 이를 테면, 예를 들어, 컬러 값들, 목적지 알파 값들, 심도 값들 등을 포함할 수도 있다.
프레임 버퍼 (15) 는 GPU (12) 에 대해 목적지 픽셀들을 저장한다. 각각의 목적지 픽셀은 고유의 스크린 픽셀 로케이션과 연관될 수도 있다. 일부 실시예들에서, 프레임 버퍼 (15) 는 각각의 목적지 픽셀에 대해 컬러 성분들 및 목적지 알파 값을 저장할 수도 있다. 예를 들어, 프레임 버퍼 (15) 는 각각의 픽셀에 대해 RGBA (Red, Green, Blue, Alpha) 성분들을 저장할 수도 있고, 여기에서, "RGB" 성분들은 컬러 값들에 대응하고, "A" 성분은 목적지 알파 값에 대응한다. 프레임 버퍼 (15) 및 시스템 메모리 (10) 가 별도의 메모리 유닛들로서 예시되어 있지만, 다른 예들에서는 프레임 버퍼 (15) 가 시스템 메모리 (10) 의 일부일 수도 있다.
위에 설명된 바와 같이, 그래픽 프로세싱 파이프라인 (30) 은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는 특정 렌더링 모드에 따라 그래픽 이미지를 렌더링할 수도 있다. 비닝 렌더링 모드에 따라 렌더링할 때, 그래픽 프로세싱 파이프라인 (30) 은 프리미티브들의 뱃치 (batch)(즉, 하나 이상의 프리미티브들) 를 수신하여 결과적인 그래픽 이미지로 렌더링할 수도 있다. 프리미티브들의 뱃치들을 렌더링하기 위하여, 결과적인 그래픽 이미지는 복수의 더 작은 부분들 (예를 들어, 픽셀들의 타일들 또는 빈들) 로 세분될 수도 있으며, 그래픽 프로세싱 파이프라인 (30) 은 별도의 렌더링 패스로서 그래픽 이미지의 각각의 부분을 렌더링할 수도 있다.
도 3 은 비닝 렌더링 모드에 대해 빈들로 분할된 프레임을 나타내는 개념도이다. 프레임 (40) 은 복수의 빈들, 이를 테면, 빈들 (42) 로 분할될 수도 있다. 통상적으로, 그래픽 하드웨어는 데이터의 적어도 하나의 빈을 홀딩하기에 충분한 사이즈로 이루어진 고속 메모리 (예를 들어, 도 2 의 그래픽 메모리 (14)) 를 포함할 것이다. 프레임의 특정 부분에 대한 단일의 렌더링 패스의 일부로서, 그래픽 프로세싱 파이프라인 (30) 은 프레임의 목적지 픽셀들의 특정 서브세트 (예를 들어, 목적지 픽셀들의 특정 빈) 에 대하여 프리미티브들의 뱃치의 서브세트 또는 전부를 렌더링할 수도 있다. 제 1 빈에 대하여 제 1 렌더링 패스를 수행한 후, 그래픽 프로세싱 파이프라인 (30) 은 제 2 빈에 대하여 제 2 렌더링 패스를 수행할 수도 있고, 이하 동일하다. 그래픽 프로세싱 파이프라인 (30) 은 모든 빈과 연관된 프리미티브들이 렌더링되었을 때까지 빈들 전반을 증분적으로 트래버싱할 수도 있다.
도 4 는 비닝 렌더링 모드에 이용된 빈들을 보다 자세하게 나타내는 개념도이다. 빈들 (44, 46, 48 및 50) 은 다수의 픽셀들 (52) 을 포함하도록 렌더링/래스터화된다. 하나 이상의 그래픽 프리미티브들은 각각의 빈에서 가시적일 수도 있다. 예를 들어, 삼각형 A (Tri A) 의 부분들은 빈 (44) 및 빈 (48) 에서 가시적이다. 삼각형 B (Tri B) 의 부분들은 빈 (44), 빈 (46), 빈 (48) 및 빈 (50) 각각에서 가시적이다. 삼각형 C (Tri C) 는 빈 (46) 에서만 가시적이다. 렌더링 패스 동안에, 비닝 렌더링 모드의 일 예에서는, 장면이 빈들로 스플릿되고, 빈에 있는 모든 삼각형들이 렌더링된다 (이는 때때로 삼각형 비닝이라 지칭됨). 비닝 렌더링 모드의 다른 예에서, 빈에서의 어느 삼각형들이 최종 렌더링 장면에서 실제로 가시적인지를 결정하기 위해 추가적인 단계가 수행된다 (이는 때때로 하드웨어 비닝이라 지칭됨). 예를 들어, 일부 삼각형은 하나 이상의 다른 삼각형들 뒤에 있을 수도 있고 최종 렌더링된 장면에 가시적이지 못할 수도 있다. 이 방식으로, 가시적이지 못한 삼각형들은 그 빈에 대해 렌더링될 필요가 없다.
특정 렌더링 패스를 수행하는 동안, 특정 렌더링 패스와 연관된 빈에 대한 픽셀 데이터는 그래픽 메모리 (14)(때때로 빈 버퍼라 지칭됨) 에 저장될 수도 있다. 렌더링 패스를 수행한 후, 그래픽 프로세싱 파이프라인 (30) 은 그래픽 메모리 (14) 의 컨텐츠를 프레임 버퍼 (15) 에 전달할 수도 있다. 일부 경우에, 그래픽 프로세싱 파이프라인 (30) 은 그래픽 메모리 (14) 에 저장된 데이터에 의해 프레임 버퍼 (15) 에서의 데이터의 일부분을 오버라이트할 수도 있다. 다른 경우에, 그래픽 프로세싱 파이프라인 (30) 은 그래픽 메모리 (14) 에 저장된 데이터와 함께 프레임 버퍼 (15) 에서의 데이터를 결합 또는 작성할 수도 있다. 그래픽 메모리 (14) 의 컨텐츠를 프레임 버퍼 (15) 에 전달한 후, 그래픽 프로세싱 파이프라인 (30) 은 디폴트 값들로 그래픽 메모리 (14) 를 초기화하고 상이한 빈에 대하여 후속의 렌더링 패스를 시작할 수도 있다.
도 5 는 "소프트웨어" 비닝을 이용한 비닝 렌더링 모드를 이용하여 장면을 렌더링하는 예시적인 커맨드 구조를 나타내는 개념도이다. 레벨 1 IB1 (indirect buffer)(60) 는 그래픽 메모리 파이프라인 (30) 의 여러 단계들을 수행하도록 GPU (12) 에 지시하기 위한 일련의 실행 커맨드들을 포함한다. IB1 (60) 에서의 각각의 실행 커맨드는 본질적으로 렌더링 파이프라인의 여러 양태들에 대한 커맨드들을 포함하는 하나 이상의 레벨 2 IB2 (indirect buffer) 로의 포인터이다. 이 방식으로, 둘 이상의 레벨 구조가 그래픽 렌더링 파이프라인을 실행하기 위하여 확립된다. GPU (12) 는 IB1 (60) 에서의 각각의 실행 커맨드를 통하여 순차적으로 스텝핑할 수도 있고, IB1 (60) 에서의 각각의 실행은 IB2 에 저장된 커맨드들의 특정 스택을 포인팅한다. IB1들 및 IB2들은 온보드 GPU (12) 인 메모리일 수도 있거나 또는 시스템 메모리 (10) 와 같은 GPU (12) 에 대한 외부 메모리일 수도 있다.
IB1 (60) 에서의 프리앰블 실행 커맨드는 GPU (12) 에 의해 실행가능한 프리앰블 커맨드들을 포함하는 IB2 프리앰블 (62) 을 포인팅한다. 예를 들어, IB2 프리앰블 (62) 는 GPU (12) 의 그 정적 스테이트를 초기화하고 GPU (12) 의 초기 렌더링 스테이트를 설정하는 커맨드들을 포함할 수도 있다. GPU 의 정적 스테이트는 특정 애플리케이션에 기초하여 변경되지 않은 설정들을 포함한다. 한편, 렌더링 스테이트는 특정 애플리케이션 (예를 들어, OpenGL 애플리케이션 대 Direct X 애플리케이션) 에 기초하여 변경될 수도 있는 GPU 설정들을 포함한다. IB2 프리앰블에서의 커맨드들이 완료된 후, 제어는 IB1 (60) 로 리턴하여 다음 실행 커맨드를 수행한다.
IB1 (60) 에서의 다음 실행 커맨드는 채택 중인 렌더링 모드에 대한 렌더링 패스를 구성한다. 또한, 도 5 의 예에서는, 렌더링 모드는 소프트웨어 비닝을 이용한 비닝 렌더링 모드이다. 다음, IB1 (60) 에서의 빈 로딩 실행은 IB2 로딩 (66) 에서의 커맨드들을 포인팅한다. 소프트웨어 비닝에 대해, 특정 빈에 대한 데이터는 GMEM (14) 로 로딩 (2 GMEM 로딩) 된다. 그 후, 제어는 IB1 (60) 로 다시 패스하고 빈 렌더링 실행 커맨드가 IB2 렌더링을 포인팅한다. IB2 렌더링 (68) 은 삼각형을 로딩된 빈으로 드로잉하기 위하여 일련의 스테이팅 커맨드들 및 드로잉 커맨드들로 구성된다. 각각의 드로잉 커맨드는 커맨드들 및/또는 GPU 하드웨어에 의해 확립된 그래픽 프로세싱 파이프라인 (30)(예를 들어, 지오메트리 프로세싱 스테이지 (34), 래스터화 스테이지 (36) 및/또는 픽셀 프로세싱 파이프라인 (38)) 에 따라 삼각형을 드로잉하도록 GPU (12) 에 명령한다. IB2 렌더링 (68) 으로 도시된 바와 같이, 드로잉 커맨드들 각각은, 특정 삼각형들을 빈에서 실제로 가시적인지를 결정하기 위해 가시성 스트림이 이용되지 않음을 나타낸다. 가시성 스트림들은 "하드웨어 비닝"을 이용하는 비닝 렌더링 모드에서 생성되며, 도 6 을 참조로 보다 자세히 설명된다. IB2 렌더링 (68) 에서의 스테이팅 커맨드들은 GPU (12) 에 의해 실행되는 그래픽 프로세싱 파이프라인들의 거동에 영향을 준다. 예를 들어, 스테이팅 커맨드들은 컬러, 다각형 모드 (예를 들어, 솔리드들이나 선들 대신에 점들), 블렌딩 (on/off), 심도 테스팅 (on/off), 텍스쳐링 (on/off), 컬링, 클립핑 및 다른 논리 연산 동작들을 변경할 수도 있다. IB2 렌더링 (68) 에서 도시된 바와 같이, 스테이팅 커맨드들은 삼각형 (또는 프리미티브 단위) 기반으로 발행될 수도 있다. 즉, 커맨드 "Tri A 스테이팅" 은 삼각형 A 를 드로잉할 때 GPU (12) 의 거동에 영향을 줄 수도 있는 한편, "Tri B1 스테이팅" 및 "Tri B2 스테이팅"에서의 커맨드들은 삼각형 B 를 드로잉할 때 GPU (12) 의 거동에 영향을 줄 수도 있다. "Tri B1 스테이팅" 및 "Tri B2 스테이팅"에서의 커맨드는 단지, 다수의 스테이팅 커맨드들이 각각의 삼각형에 대해 실행될 수도 있음을 나타낸다.
모든 커맨드가 IB2 렌더링 (68) 에서 실행된 후 (예를 들어, 모든 삼각형들이 드로잉된 후), 제어는 IB1 (60) 으로 리턴한다. 빈 저장 실행 커맨드는 GMEM (14) 으로부터 메모리 (예를 들어, 프레임 버퍼 (15)) 로 렌더링된 빈을 저장하라는 커맨드를 포함하는 IB2 저장 (70) 으로의 포인터를 포함할 수도 있다. 그 후, 렌더 패스 (예를 들어, IB1 (60) 에서 도시된 바와 같이 렌더 패스 컨피규어로부터 빈 저장으로의 실행 커맨드) 는 하나의 프레임들에 대한 각각의 빈 (72) 에 대해 반복된다.
도 6 은 "하드웨어" 비닝을 이용한 비닝 렌더링 모드를 이용하여 장면을 렌더링하는 예시적인 커맨드 구조를 나타내는 개념도이다. IB1 (61) 에서의 실행 커맨드는, 커맨드들의 실행이 "비닝" 패스에 관련된다는 것을 제외하고는 도 6 의 IB1 (60) 의 실행 커맨드와 동일하다. "비닝" 패스는 빈에서의 특정 삼각형들이 최종 렌더링된 장면에서 실제로 가시적인지의 여부를 나타내는 가시성 스트림을 생성하는데 이용된다. 예를 들어, 몇몇 삼각형들은 장면에서 다른 삼각형 뒤에 있을 수도 있으며, 일부 시나리오에서 (예를 들어, 앞에 있는 삼각형이 불투명할 때 또는 블렌딩이 이용되지 않을 때) 가시적이지 않을 것이다. 빈 렌더링 (72) 전에, IB1 (61) 은 IB2 비닝 (74) 에서의 커맨드들을 포인팅하는 비닝 패스 실행 커맨드를 포함할 수도 있다. IB2 비닝 (74) 는 GPU (12) 로 하여금 그래픽 파이프라인의 단순화된 버전 (예를 들어, IB2 렌더링 (69) 의 단순화된 버전) 을 수행하게 하는 커맨드들을 포함하지만, 삼각형이 최종 렌더링된 장면에서 가시적인지의 여부를 결정하는 심도 테스트 (Z 테스트) 에 기초하여 빈에서의 각각의 삼각형에 대한 가시성 스트림을 업데이트하는 단계를 추가한다.
비닝 패스의 목표는 현재 빈과 교차하는 삼각형들을 식별하는 것이다. 이에 의해, 삼각형이 특정 빈과 교차하는지를 식별하기 위해 삼각형의 버텍스들의 포지션만이 결정될 필요가 있다. 비닝 패스는 버텍스들의 포지션에 영향을 주는 명령들만을 포함하는 단순화된 버텍스 쉐이더를 이용한다. 예를 들어, 컬러 명령들, 텍스쳐 좌표들, 및 삼각형 버텍스의 위치에 영향을 주지 않는 다른 명령들은 비닝 패스에 이용된 단순화된 버텍스 쉐이더로부터 제거될 수도 있다. 비닝 패스는 또한 각각의 삼각형의 근사화 심도를 결정하기 위하여, 미세 래스터화 보다는 대략적 래스터화를 이용한다. 대략적 래스터화는 미세 래스터화보다 낮은 정밀도에서 (예를 들어, 보다 낮은 비트 수를 이용하여) 심도 값을 계산한다. 삼각형이 빈에서 가시적인지를 결정하는데 근사화 심도 값들만이 필요하다. 픽셀 쉐이더들은 비닝 패스에 이용되지 않는다.
그 후, 비닝 패스는 빈에서 삼각형이 빈에서의 다른 삼각형들에 비해 가시적인지를 결정하도록 대략적 심도 값들에 대한 심도 테스트를 이용한다. 심도 테스트에 기초하여, 가시성 스트림이 업데이트된다. 가시성 스트림은 렌더링된 빈에서의 특정 삼각형이 가시적인지의 여부를 나타내는 빈들의 스트링일 수도 있다 (예를 들어, 1 은 삼각형이 가시적임을 나타내고, 0 은 삼각형이 가시적이지 않음을 나타낸다).
IB2 렌더링 (69) 에서의 커맨드는 가시성 스트림의 이용에 대한 것을 제외하고는, 도 5 에서의 IB 렌더링 (68) 에서의 커맨드와 유사하다. IB2 렌더링 (69) 에서의 드로잉 커맨드들 (예를 들어, Tri A 드로잉, Tri B 드로잉, Tri C 드로잉 등) 은 특정 삼각형을 드로잉할 필요가 있는지의 여부를 결정하기 위해 비닝 패스에 의해 생성된 가시성 스트림을 이용할 수도 있다. 예를 들어, 드로잉은 가시성 스트림에 의해 가시적이지 않은 것으로서 나타내는 삼각형들에 대해 스킵될 수도 있다.
비닝 렌더링 모드에서와 같이, 프레임을 빈 단위로 렌더링하는 것과 반대로, 직접 렌더링은 그래픽 파이프라인을 통하여 하나의 패스로 전체 프레임을 렌더링한다. 통상적으로, 직접 렌더링은 그래픽 메모리의 제한된 크기에 의해, 비닝 기반 아키텍쳐에서 실행될 때 보다 저속의 시스템 메모리를 이용한다.
도 7 은 직접 렌더링 모드를 이용하여 장면을 렌더링하는 예시적인 커맨드 구조를 나타내는 개념도이다. 직접 커맨드 모드에 대한 커맨드들은 빈 단위 기반으로 렌더링하는 대신에, 전체 프레임이 하나의 패스로 렌더링된되는 것을 제외하고는 도 5 에서의 소프트웨어 비닝에 대한 커맨드들과 동일하다. 예를 들어, IB1 (80) 에서의 실행 커맨드가 빈들을 로딩, 렌더링 및 저장하기 보다는 프레임들을 로딩, 렌더링 및 저장하는 각각의 IB2들에서의 커맨드들을 포인팅한다는 것을 제외하면, IB1 (80) 에서의 실행 커맨드는 IB1 (60) 에서의 실행 커맨드와 동일하다. 보다 구체적으로, IB1 (80) 에서의 로드 프레임 실행 커맨드는 프레임에 대한 데이터를 시스템 메모리로 로딩하기 위한 커맨드 (2 시스템 메모리로 로딩) 를 포함하는 IB2 로딩 (86) 을 포인팅한다. IB1 (80) 에서의 커맨드들은 프리앰블, 프리앰블/리스토어, 렌더 패스 컨피규어, 프레임 로딩, 프레임 렌더링 및 프레임 저장을 포함할 수도 있다. IB1 (80) 에서의 프레임 렌더링 실행 커맨드는 GPU (12) 로 하여금 프레임에서의 프리미티브들을 드로잉하게끔 하는 명령들을 포함하는 IB2 렌더링 (88) 을 포인팅한다. 소프트웨어 비닝과 마찬가지로, 직접 렌더링 모드에서의 렌더링은 가시성 스트림 또는 하드웨어 비닝 패스를 이용하지 않는다. IB2 렌더링 (88) 에서의 임의의 드로잉 커맨드들 (예를 들어, Tri A 드로잉, Tri B 드로잉, Tri C 드로잉) 은 렌더링된 삼각형들을 저장하기 위해 시스템 메모리를 이용한다. 프레임 저장 실행 커맨드는 렌더링된 프레임을 시스템 메모리로부터 다른 메모리 (예를 들어, 프레임 버퍼 (15)) 로 저장하라는 명령들 (시스템 메모리로부터 저장) 을 포함하는 IB2 저장 (90) 을 포인팅한다.
IB1 에서의 프리앰블 실행 커맨드 (80) 는 GPU (12) 의 정적 스테이트 및 초기 렌더링 스테이트를 확립하는 명령들을 포함하는 IB2 프리앰블 (82) 을 포인팅한다. 이들 커맨드들은 비닝 렌더링 모드 보다는 직접 렌더링 모드에 대한 렌더링 스테이트를 설정하는 것을 제외하고는, 도 6 의 IB2 프리앰블 (62) 에서의 커맨드들과 유사하다.
본 개시물의 기법들에 따르면, 애플리케이션 (예를 들어, 도 2 의 소프트웨어 애플리케이션 (24)) 이 장면을 렌더링하기 시작하기 전에, 하나 이상의 프로세서들 (예를 들어, CPU (6)) 상에서 실행하는 그래픽 드라이버 (예를 들어, 그래픽 드라이버 (7)) 는 원하는 렌더링 패스에 관한 발견적 데이터 (heuristic data) 에 기초하여 렌더링 모드의 결정 (예를 들어, 비닝 렌더링과 직접 렌더링 사이의 결정) 을 행한다. 일부 기법들에서, 현재 렌더링 패스에 관한 발견된 데이터는 이전 렌더링 패스들로부터 수집될 수도 있다. 그러나, 이 기법은 새로운 장면을 렌더링하기 전에 애플리케이션이 렌더링 기법을 스위칭할 수도 있기 때문에, 렌더링 모드를 결정하는데 있어 항상 최적의 것은 아닐 수도 있다. 이에 의해, 이 기법은 적절한 렌더링 모드로 스위칭하도록 충분히 새로운 데이터가 어큐뮬레이트될 때까지 비효율적인 렌더링을 야기할 수도 있다.
추가로, 과거 렌더링들에 관한 발견적 데이터는 현재의 장면이 이전 장면들과 상이한 경우에, 현재 장면에 대한 가장 최적의 렌더링 모드를 항상 제공하는 것은 아닐 수도 있다. 예를 들어, 렌더링 모드를 고속으로 변경하는 것을 최적으로 이용하는 애플리케이션은 이러한 발견적 분석을 이용하여 많은 잘못된 예측을 야기할 수도 있다. 이상적으로, 그래픽 드라이버는 주어진 렌더 타겟에 대한 렌더링 로드를 결정할 수 있고 렌더링 모드 결정을 즉시 행할 수 있다. 본 개시물은 렌더링 모드의 보다 최적의 결정을 위한 기법들 및 렌더링 모드들 사이의 스위칭에 대한 기법들을 제안한다.
다음 기법들은 임의의 그래픽 애플리케이션 프로그램 인터페이스 (API) 를 이용한 그래픽 프로세싱 시스템에 적용가능하며, 특히 비닝 렌더링을 이용하는 그래픽 API들에 대해 적합하다. API들의 예는 Microsoft의 DirectX9 (DX9), DX10, 및 DX11 뿐만 아니라, 오픈 소스 그래픽 API들, 이를 테면, OpenGL 및 OpenGL ES 를 포함한다.
도 8 은 본 개시물의 일 예에 따른 렌더링 커맨드 페칭을 예시하는 개념도이다. 초기에, 그래픽 프로세싱 시스템 (예를 들어, 도 1 의 컴퓨팅 디바이스 (2)) 는 특정 애플리케이션이 비닝 모드에서 현재의 렌더 타겟 (예를 들어, 하나 이상의 프레임들) 에 대해 보다 최적으로 렌더링한다고 초기에 가정한다. 특정 렌더링 모드 (예를 들어, 비닝 또는 직접 렌더링) 의 선택은 그래픽 드라이버 (7) 에 의해 처리될 수도 있다. 비닝이 인에이블될 때, 그래픽 드라이버 (7) 는 커맨드들을 플러쉬하도록 요구받을 때까지, 주어진 렌더 타겟에 대해 로딩, 저장, 렌더링 및 BLT (block transfer) 커맨드들을 뱃치한다. 이 문맥에서, 플러쉬는 드라이버에 의해 뱃치된 임의의 렌더링 커맨드들을 하드웨어 (예를들어, GPU (12)) 에 전송하는 것을 의미한다. 로딩, 저장, 렌더링 및 BLT들에 대한 커맨드들은 별도의 버퍼들 (예를 들어, 별도의 IB2 버퍼) 에 저장될 수도 있다. 예를 들어, 렌더링 커맨드들은 IB2 비닝 렌더링 모드 (68) 에 저장될 수도 있다.
비닝 렌더링 모드에서의 렌더링 커맨드들은 GMEM (fast graphics memory) 이 액세스될 수 있도록 특정 레지스터들에 기록된 특정 어드레스들을 이용한다. 그래픽 드라이버 (7) 가 초기에 비닝이 모든 렌더링에 대해 인에이블된다고 가정하기 때문에, GMEM 대 시스템 메모리의 선택을 갖는 모든 레지스터는 GMEM 어드레스를 이용한다. 도 8 에서의 IB2 비닝 렌더링 모드 (68) 는 삼각형을 드로잉 (Tri 드로잉) 하는 것과 연관된 일련의 커맨드들을 보여주며, 여기에서 커맨드들 1, 4 및 5 가 GMEM 어드레스들을 이용한다.
렌더링이 플러쉬되어질 때, 그래픽 드라이버는 지금 바로 수행할 예정인 모든 렌더링 커맨드들에 대한 액세스를 갖는다. 본 개시물의 기법들에 따르면, 그래픽 드라이버 (7) 는 렌더링 커맨드들을 분석하도록 구성될 수도 있고 하나 이상의 렌더링 특성들 (즉, 렌더링 패스에 관한 발견적 데이터) 을 고려할 수도 있다. 이러한 렌더링 특성들이 렌더 타겟의 사이즈 및 유형, 심도 테스팅이 인에이블되는지의 여부의 표시, 이용된 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독 수, 임의의 텍스쳐들의 사이즈들, 및/또는 이용중인 모든 표면들의 마이크로 타일링 모드를 포함할 수도 있다.
예를 들어, 렌더 타겟의 사이즈에 기초하여, GPU 드라이버 (7) 는 비닝의 오버헤드 (예를 들어, GMEM 에 대한 로딩/저장 사이클에 더하여 비닝 패스를 수행하는 시간) 가 비닝의 긍정적 효과들에 의해 오프셋될 것인지의 여부를 결정할 수도 있다. 예를 들어, 미소한 렌더 타겟 (예를 들어, 16x16) 이 시스템 메모리로의 저장시에도 직접 렌더링 모드에서 보다 고속으로 실행할 수도 있다.
다른 예로서, 심도 테스팅을 이용하지 않는 그래픽 파이프라인은 비닝 렌더링 모드의 이점들을 이용하지 않을 수도 있다. 통상적으로 비닝이 이용되지 않을 때, 심도 테스트는 기존의 심도 값을 판독한 다음, 시스템 메모리에서 버퍼에 다시 새로운 심도 값을 기록하도록 적용되어야 한다. 비닝에서, 심도 테스트 모드는 GMEM 에서 행해지며, 이는 GMEM 를 "프리 상태 (free)" 로 만든다 (즉, 최소의 오버헤드 시간으로 매우 고속으로 만든다). 이에 의해, 특정 그래픽 파이프라인에 대해 인에이블되는 심도 테스팅이 없는 경우, 비닝 렌더링 모드는 심도 테스팅에 관련된 어떠한 메모리 대역폭 저장도 제공하지 않는다. 이에 의해, 심도 테스팅이 디스에이블되거나 또는 이용되지 않는 경우, GPU 드라이버 (7) 는 직접 렌더링 모드가 바람직하다고 결정할 수도 있다.
다른 예로서, 비닝 렌더링 모드는 심도 복잡성 (예를 들어, 여러 심도들에서의 프리미티브들) 및 삼각형들 사이의 오버랩이 존재할 때 가장 이점을 제공한다. 드로잉되는 프리미티브들의 수가 작을 때, 비닝 렌더링 모드로부터의 이점은 또한 매우 작을 수도 있다. 이에 의해, GPU 드라이버 (7) 는 적은 수의 프리미티브가 드로잉되어야 할 경우, 직접 렌더링 모드가 바람직하다고 결정할 수도 있다. 마찬가지로, GPU 드라이버 (7) 는 비닝 렌더링 모드가 많은 수의 프리미티브들이 드로잉되어야 할 경우에 바람직하다고 결정할 수도 있다.
다른 예로서, 텍스쳐를 수행할 때, 시스템 메모리로부터 및 시스템 메모리로의 과도한 저장 및 판독들은 시스템 메모리 대역폭에 대해 부정적인 영향을 준다. 이에 의해, 텍스쳐링될 때, 비닝 렌더링 모드는 메모리에 대해 보다 신속한 액세스를 제공한다 (즉, 대부분의 저장들 및 판독들이 보다 고속의 GMEM 으로 수행된다). 드로잉되는 장면에서의 텍스쳐링 동작의 수와 빈도는 비닝 렌더링 모드로부터 이득을 무력화시킨다. 즉, 보다 적은 텍스쳐 동작들은 비닝 렌더링 모드가 보다 적은 이점들을 제공하기 때문에 직접 렌더링 모드가 이용되어야 한다고 제안할 수도 있다.
렌더링 커맨드들의 분석 결과는 "스코어"로서 계산될 수도 있으며, 이는 위에 설명된 여러 특성들 중 하나 이상을 예를 들어, 가중처리된 또는 비가중처리된 기반으로 고려할 수도 있다. 이 스코어가 소정의 임계값 미만이면, 직접 렌더링 모드가 이용된다. 이 스코어가 소정의 임계값 위에 있으면, 비닝 렌더링 모드가 이용된다. 이에 의해 이 기법은 현재 렌더링 모드를 결정하기 위해 현재의 렌더 타겟의 JIT (just-in-time) 분석을 제공한다. 과거 렌더 패스들의 발견적 분석은 요구되지 않는다. 그러나, 과거 렌더링 패스들의 발견적 분석이 현재 렌더 타겟의 분석 대신에 또는 분석과 결합하여 이용될 수도 있다. 예를 들어, 현재 렌더링 모드의 JIT 분석은 과거 렌더링들의 어큐뮬레이트된 발견적 분석으로부터 결정된 렌더링 모드가 무효하다는 표시자로서 이용될 수도 있다.
본 개시물의 다른 예에 따르면, 렌더링 모드의 결정 (예를 들어, 비닝 렌더링 모드와 직접 렌더링 모드 사이의 결정) 은 "하드웨어" 비닝을 이용하여 그래픽 프로세싱 시스템에서 오버드로우 트랙커를 이용하여 행해질 수도 있다.
도 9 는 본 개시물의 일 예에 따른 오버드로우 트랙킹을 나타내는 개념도이다. 비닝 렌더링 모드는 높은 오버드로우 양이 있을 때 직접 렌더링 모드에 비해 가장 효과적이다. 오버드로우는 오버랩하는 수개의 그래픽 프리미티브들이 존재하는 경우에 발생한다. 일부 프리미티브들의 부분들이 최종 장면에서 가시적이지 않을 수도 있기 때문에 (예를 들어, 프리미티브들이 다른 불투명한 프리미티브 뒤에 있음) 이러한 프리미티브들 모두를 드로잉하는 것은 효과적이지 않을 수도 있다. "하드웨어" 비닝은 (예를 들어, 위에 설명된 바와 같이 가시성 스트림을 생성함으로써) 프레임의 특정 타일들에서의 오버드로우를 감소시키는데 이용될 수도 있다.
비닝을 이용하는 그래픽 아키텍쳐에 있어서, 통상적인 2개의 페이즈들, 1) 자신의 변환된 버텍스 위치들에 기초하여 프리미티브들을 스크린 정렬 빈들로 분류하는 비닝 페이즈, 및 2) 이들 빈 각각 (즉, 빈에서의 프리미티브들) 이 렌더링되는 렌더링 페이즈가 존재한다. 분류 단계에 더하여, 일부 그래픽 프로세싱 아키텍쳐들은 또한, 프리미티브 마다의 가시성 스트림 및 영역 (예를 들어, 소위 "하드웨어" 비닝에서) 과 연관된 대략적으로 미세화된 (coarse grained) 심도 (Z) 값을 생성한다. 그러나, 이 "하드웨어" 비닝은 빈들에서의 프리미티브들의 분포와 관련 오버드로우의 직접 정보를 생성하지 않을 수도 있다. 본 개시물은 대략적으로 미세화된 Z 래스터화기의 것과 동일한 미세화도 (granularity) 에서 오버드로우 트랙커를 추가하는 것을 제안한다 (즉, IB2 비닝 (94) 에서의 커맨드들). 예를 들어, 커맨드들 (예를 들어, "오버드로우 계산" 및 "오버드로우 트랙커 업데이트") 은 각각의 빈에 대한 오버드로우의 양을 계산하고 계산된 오버드로우의 양에 기초하여 오버드로우 트랙커를 업데이트하도록 GPU (12) 에 명령하는 IB2 비닝 (94) 에 추가될 수도 있다.
이 "오버드로우" 는 영역에서 래스터화된 프리미티브들 사이의 오버랩을 나타내는 영역 (여기에서 영역은, 픽셀, 빈의 일부분, 빈, 또는 복수의 빈들일 수도 있음) 마다의 정수값일 수도 있고 따라서, 비닝 렌더링을 이용하는 이점일 수도 있다. 그래픽 드라이버 (7) 는 렌더링 모드 결정들을 행하기 위해 오버드로우 수에 대한 액세스를 가질 수도 있으며 오버드로우 수를 이용할 수도 있다. 그 후, 이 기법은 빈에서의 모든 영역들로 이 값을 애그리게이션하고 추가로 장면 내의 모든 빈들에 대해 애그리게이션하도록 확장될 수도 있다. 이는 소프트웨어 애플리케이션 및/또는 드라이버 (예를 들어, 그래픽 드라이버 (7)) 가 비닝 렌더링이 바람직한지의 여부에 대해 (다른 발견적 정보들에 비교될 때) 즉각적인 결정을 행하도록 허용한다. 추가로, 이들 기법들은 또한 복잡한 렌더링 시나리오에서의 액티비티 영역들을 가시화하도록 디버그 툴로서 이용될 수 있다.
도 10 은 4 개의 16x16 빈들에서의 오버드로우를 계산하는 일 예를 나타낸다. 이 예에서, "오버드로우" 는 각각의 픽셀에 대하여 먼저 계산된다. 오버랩은 픽셀을 터치하는 1 보다 많은 프리미티브들의 수로서 정의된다. 빈들 (95 및 99) 에서의 모든 픽셀들은 0의 오버랩 스코어를 갖는 한편, 예를 들어, 빈 (101) 의 픽셀 (96) 은 두개의 삼각형들이 그 픽셀 안에 있기 때문에 1 의 오버랩 스코어를 갖는다. "오버드로우" 수는 빈에 대한 오버랩 스코어들의 합을 빈에서의 픽셀들의 총 수로 나눈 것 (예를 들어, 오버드로우 = 픽셀 마다의 오버랩의 합/픽셀들의 수) 으로서 정의될 수도 있다. 도 10 에 도시된 예에서, 빈 (101) 은 30/16 의 오버드로우 수를 갖는 한편, 빈들 (95 및 99) 은 0 의 오버드로우 스코어를 갖는다. 특정 임계값보다 큰 오버드로우 수는 비닝 렌더링 모드가 오버드로우 수와 연관된 영역에 대해 이용되어야 함을 나타낼 수도 있는 한편, 특정 임계값 미만의 오버드로우 수는 직접 렌더링 모드가 오버드로우 수와 연관된 영역에 이용되어야 함을 나타낼 수도 있다.
도 8 로 돌아가서, 스코어에 기초하여 (렌더링 커맨드 및/또는 오버드로우 트랙커의 분석에 기초하여) 그래픽 드라이버 (7) 는 최적의 모드를 결정한다. 보다 최적의 렌더링 모드를 결정하는 것과 연관하여, 그래픽 드라이버 (7) 는 또한, GMEM 어드레스를 이용하는 모든 비닝 렌더링 커맨드들 (예를 들어, 도 8 의 예에서 커맨드들 1, 4 및 5) 을 트랙킹하도록 구성될 수도 있다. 그래픽 드라이버 (7) 는 GMEM 어드레스들을 이용하여 비닝 렌더링 커맨드들이 시스템 메모리 어드레스를 이용하는 것으로 대체될 수도 있도록, 이들 커맨드들 각각에 대해 대응하는 시스템 메모리 어드레스를 (예를 들어, 시스템 메모리 (10) 에) 저장할 수도 있다. 직접 렌더링이 보다 최적의 모드인 것으로 결정되면, 그래픽 드라이버 (7) 는 IB2 비닝 렌더링 모드 (86) 를 패치하여, GMEM 어드레스들을 시스템 메모리 어드레스들로 대체할 수도 있으며, 따라서 IB2 직접 렌더링 모드 (88) 를 생성한다. 이러한 방식으로, IB2 직접 렌더링 모드 에 대한 전체 커맨드 구조를 재생성할 필요 없이 직접 렌더링을 위한 렌더링 커맨드가 생성될 수도 있다. 마지막으로, 플러쉬 시간에, 그래픽 드라이버 (7) 는 BLT IB2 및 IB2 렌더링을 실행하도록 IB1 (예를 들어, 도 7 의 IB1 (80)) 에 커맨드들을 추가하고 (이 경우에, IB2 렌더링은 시스템 메모리 어드레스들을 사용하는 것으로 변경된다), GPU (7) 는 IB1 을 실행하기 시작하도록 시그널링된다.
본 개시물의 다른 예에서, 렌더링 모드에 이용된 각각의 레지스터는 하드웨어에서 구현될 수도 있다. 도 11 은 본 개시물의 일 예에 따라 렌더링 모드 선택을 예시하는 개념도이다. 글로벌 제어 레지스터 (102) 는 어느 레지스터들의 세트 (예를 들어, 비닝 렌더링 모드 레지스터 (104) 또는 직접 렌더링 모드 레지스터 (106)) 가 주어진 렌더링 모드에 이용되는지를 제어하는데 이용될 수도 있다. 비닝 렌더링 모드 레지스터 (104) 는 목적지 표면 정보 (즉, 빈들), GMEM 에 대한 어드레스 레지스터들, 및 가시성 스트림 사용 (하드웨어 기반 비닝 렌더링) 을 처리할 수도 있다. 직접 렌더링 모드 레지스터 (106) 는 시스템 메모리에 대한 어드레스들을 포함한다. 글로벌 제어 레지스터 (102) 는 위에 설명된 바와 같이, 위의 레지스터들 중 어느 버전이 예를 들어, JIT 분석에 기초하여 IB2 렌더링 (118) 에서의 커맨드들을 파퓰레이션하는데 이용되는지를 제어한다. 그래픽 드라이버 (7) 는 비닝 렌더링 모드 레지스터 (104) 또는 직접 렌더링 모드 레지스터 (106) 를 선택하도록 글로벌 제어 레지스터 (102) 를 제어할 수도 있다. 위에 설명된 바와 같이, 소프트웨어에 의해 IB2 를 패치하기 보다는, 이 기법은 하드웨어 레지스터들을 이용한다. 글로벌 제어 레지스터 (102) 는 IB1 에 있을 수도 있다.
본 개시물의 다른 예에서, 커맨드 퍼버를 패치하는 기법이 제안된다. 도 12 는 본 개시물의 이 예에 따라 렌더링 커맨드 패치를 예시하는 개념도이다. 본 예의 제안된 기법은 비닝 렌더링 모드로부터 직접 렌더링 모드로 스위칭할 때, 커맨드 버퍼를 패치하는데 이용될 수도 있다. 그러나, 다음 기법들은 커맨드 버퍼를 패치하는 것이 바람직할 경우의 임의의 상황에 이용될 수도 있다. 예를 들어, 커맨드들은 그래픽 메모리의 가시성을 지원하거나, 보다 낮은 MIP들에서의 리소스 LOD (level-of-detail) 의 MIP 레벨을 변경하거나, 커맨드 버퍼를 실행하기 전에 정확성 스캐너를 구동시키도록 패치될 수도 있다. 비닝 렌더링 모드에서부터 직접 렌더링 모드로 스위칭하기 위해 커맨드 버퍼를 패치하는데 요구되는 CPU 사이클들은 특정 시나리오들에서 희생될 수도 있다. 이 예는 CPU 오버헤드를 감소시키는 것을 돕는다.
일반적으로, 이 기법은 그래픽 드라이버 (7) 가 커맨드 버퍼를 패치하기 위해 GPU 드라이버 (7) 대신에) GPU (12) 를 이용하는 방식을 제공하며, 이에 의해 CPU 오버헤드를 최소화한다. 도 8 의 예에서, 그래픽 드라이버 (7) 가 비닝 및 직접 렌더링 사이를 스위칭하고자 하면, 그래픽 드라이버 (7) 는 IB1 에 실행 커맨드들을 추가하기 전에, IB2 커맨드들의 모드를 트랙킹 및 패치한다. 이 예는 패치 리스트 (예를 들어, 도 8 의 시스템 메모리 (10) 에 도시도니 패치 리스트) 를 구축하는 대신에, 그래픽 드라이버 (7) 는 다른 IB2 에서의 커맨드 (예를 들어, 임의의 일반 동작 커맨드) 를 변경하는 기록 커맨드들을 포함하는 별도의 IB2 패치 (98) 를 구축한다. 예를 들어, 기록 커맨드들의 목적지는 직접 렌더링 모드가 그래픽 드라이버 (7) 에 의해 선택되는 경우에 시스템 메모리 어드레스들을 이용하도록 변경되는 것이 필요한 IB2 비닝 렌더링 모드 (68) 에서의 로케이션들일 수도 있다. 그래픽 드라이버 (7) 가 커맨드들을 플러쉬할 준비가 될 때, 그래픽 드라이버는 직접 렌더링 모드에 진입하도록 "IB2 패치"에서의 커맨드들을 실행하거나 또는 IB2 패치를 스킵하고 비닝 모드로 진행하는 옵션을 갖는다. 그래픽 드라이버 (7) 는 IB1 (80) 에서의 실행 커맨드들에 실행 커맨드 (IB2 패치 렌더링) 을 추가함으로써 실행되도록 IB2 패치에 작용할 수도 있다. 이 방식으로, GPU (12) 는 IB2 (68) 에서의 렌더링 커맨드들을 실행하기 전에, IB2 (98) 에서의 패치 커맨드들을 실행할 것이다. 이에 의해, GPU (12) 자체는 CPU (6) 이 패치들을 행하게 하기 보다는, IB2 렌더링 (68) 으로의 패치를 행하여 렌더링 모드 스위치에 작용한다.
도 13 은 본 개시물의 일 예에 따른 방법을 나타내는 흐름도이다. 도 13 의 방법은 컴퓨팅 디바이스 (2) 상에 상주하는, CPU (6), GPU (12) 및/또는 임의의 다른 하드웨어, 펌웨어, 소프트웨어 엘리먼트 또는 이들의 조합에 의해 수행될 수도 있다. CPU (6) 는 프레임을 렌더링하기 위한 렌더링 커맨드들을 생성하도록 구성될 수도 있으며, 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것이다 (1302). CPU (6) 는 그래픽 메모리 어드레스들을 이용하는 렌더링 커맨드들을 트랙킹하도록 또한 구성될 수도 있다 (1304).
그 후, CPU (6) 는 렌더링 특성들에 기초하여 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정할 수도 있으며, 복수의 렌더링 모드들은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함한다 (1306). 렌더링 특성들은 렌더 타겟의 사이즈 및 유형, 심도 테스트 상태, 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독 수, 텍스쳐들의 사이즈, 및 마이크로 타일링 모드 중 적어도 하나를 포함한다. 복수의 렌더링 모드 중 하나를 결정하는 것은 현재 프레임의 렌더링 특성들에 기초하여 복수의 렌더링 모드들 중 하나를 결정하는 것을 포함할 수도 있다. 다른 예에서, 복수의 렌더링 모드들 중 하나를 결정하는 것은 현재의 프레임 및 이전에 렌더링된 프레임들의 렌더링 특성들에 기초하여 복수의 렌더링 모드들 중 하나를 결정하는 것을 포함할 수도 있다.
CPU (6) 는 결정된 렌더링 모드가 직접 렌더링 모드인 경우에, 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경할 수도 있다 (1308). 결정된 렌더링 모드가 비닝 렌더링 모드인 경우에, CPU (6) 는 렌더링 커맨드들을 변경하지 않는다.
CPU (6) 는 또한, 제 1 버퍼에 실행 커맨드들을 저장하고 제 2 버퍼에 렌더링 커맨드들을 저장하도록 구성될 수도 있다. 실행 커맨드들은 렌더링 커맨드들을 포인팅한다. 렌더링 커맨드들을 변경하는 것 (1308) 은 그래픽 메모리 어드레스들을 시스템 메모리 어드레스들로 대체하도록 제 2 버퍼를 패치하는 것을 포함할 수도 있다. CPU (6) 는 제 2 버퍼에서의 렌더링 커맨드들을 포인팅하는 제 1 버퍼에 실행 커맨드를 추가할 수도 있다. 그 후, GPU (12) 는 제 1 버퍼에서의 실행 커맨드들을 실행시킬 수도 있다.
다른 예에서, CPU (6) 는 제 1 레지스터에 비닝 모드 특정 정보를 저장하고, 제 2 레지스터에 직접 렌더링 모드 특정 정보를 저장하고, 결정된 렌더링 모드에 기초하여 제 1 레지스터와 제 2 레지스터 사이를 선택하도록 글로벌 레지스터를 이용하도록 구성될 수도 있다. 비닝 모드 특정 정보는 목적지 표면 정보를 처리하는 레지스터 어드레스들, 및 가시성 스트림 사용 중 적어도 하나를 포함하며, 직접 렌더링 모드 특정 정보는 시스템 메모리 어드레스들을 포함한다.
도 14 는 본 개시물의 일 예에 따른 방법을 예시하는 흐름도이다. 도 14 의 방법은 컴퓨팅 디바이스 (2) 상에 상주하는, CPU (6), GPU (12) 및/또는 임의의 다른 하드웨어, 펌웨어, 소프트웨어 엘리먼트 또는 이들의 조합에 의해 수행될 수도 있다. CPU (6) 는 장면의 프리미티브들에 대한 비닝 동작을 수행하는 것으로서, 프리미티브들은 빈들로 분할되고 (1402), 장면의 영역에서 프리미티브들의 오버드로우의 크기를 나타내는 오버드로우 수를 계산하고 (1404), 및 계산된 스코어에 기초하여 렌더링 모드를 결정 (1406) 하도록 구성될 수도 있다. 오버드로우 수가 일정 임계값보다 크다면, 비닝 렌더링 모드가 렌더링 모드로서 결정될 수도 있다. 오버드로우 수가 일정 임계값보다 작다면, 직접 렌더링 모드가 렌더링 모드로서 결정될 수도 있다. 그 후, GPU (12) 는 결정된 렌더링 모드에 따라 장면을 렌더링할 수도 있다 (1408).
오버드로우 수는 전체 장면에 대한 및/또는 다수의 빈들에 걸쳐 빈의 영역에 대하여 계산될 수도 있다. 빈에 대해 오버드로우 수를 계산 (1404) 하는 기법의 일 예는 빈에서의 각각의 픽셀에 대한 오버랩 값을 계산하는 것, 빈에서의 각각의 픽셀에 대한 각각의 계산된 오버랩 값을 합산하여 총 오버랩 값을 생성하는 것, 및 총 오버랩 값을 빈에서의 픽셀들의 수로 나누어 오버드로우 수를 생성하는 것을 포함할 수도 있다. 오버랩 값은 픽셀을 터치하는 하나보다 많은 프리미티브들의 수로서 정의된다.
도 15 는 본 개시물의 일 예에 따른 방법을 예시하는 흐름도이다. 도 15 의 방법은 컴퓨팅 디바이스 (2) 상에 상주하는, CPU (6), GPU (12) 및/또는 임의의 다른 하드웨어, 펌웨어, 소프트웨어 엘리먼트 또는 이들의 조합에 의해 수행될 수도 있다. CPU (6) 는 제 1 퍼버에 그래픽 동작을 실행하기 위한 동작 커맨드들을 저장하고 (1502), 제 2 버퍼에 기록 커맨드들을 저장하는 것으로서, 기록 커맨드는 제 1 버퍼에서의 동작 커맨드들을 변경하여 변경된 동작 커맨드들을 생성 (1504) 하도록 구성될 수도 있다. 동작 커맨드들 및 기록 커맨드들은 그래픽 프로세서들에 의해 실행가능하다. CPU (6) 는 또한, 제 2 버퍼에서의 기록 커맨드들로 하여금 실행되게끔 하고 (1506), 제 1 버퍼에서의 기록 커맨드들로 하여금 실헹되게끔 한 후에 제 1 버퍼에서의 변경된 동작 커맨드들로 하여금 실행되게끔 하도록 (1508) 구성될 수도 있다. 일 예에서, 동작 커맨드는 비닝 렌더링 모드에 대한 렌더링 커맨드들을 포함하고, 기록 커맨드들은 비닝 렌더링 모드에 대한 렌더링 커맨드들을 직접 렌더링 모드에 대한 렌더링 커맨드들로 변경시킨다.
도 16 은 도 15 에 도시된 일반적인 기법을 이용하는 예시적인 방법을 예시하는 흐름도이다. 도 16 의 방법은 컴퓨팅 디바이스 (2) 상에 상주하는, CPU (6), GPU (12) 및/또는 임의의 다른 하드웨어, 펌웨어, 소프트웨어 엘리먼트 또는 이들의 조합에 의해 수행될 수도 있다. CPU (6) 는 프레임을 렌더링하기 위한 동작 커맨드들을 생성하는 것으로서, 동작 커맨드들은 비닝 렌더링 모드에 대한 것이고 (1602), 그래픽 메모리 어드레스들을 사용하는 동작 커맨드들을 트랙킹하도록 (1604) 구성될 수도 있다. CPU (6) 는 또한, 기록 커맨드들을 생성하도록 구성될 수도 있으며, 기록 커맨드들은 그래픽 메모리 어드레스들을 이용하는 동작 커맨드들을 시스템 메모리 어드레스들을 이용하는 동작 커맨드이도록 변경한다 (1606). CPU (6) 는 제 1 버퍼에 동작 커맨드를 저장하고 (1608) 제 2 버퍼에 기록 커맨드를 저장한다 (1610).
CPU 는 또한, 렌더링 특성들에 기초하여 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하도록 구성될 수도 있으며, 복수의 렌더링 모드들은 비닝 렌더링 모드 및 직접 렌더링 모드를 포함한다 (1612). 렌더링 특성들은 렌더 타겟의 사이즈 및 유형, 심도 테스트 상태, 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독 수, 텍스쳐들의 사이즈, 및 마이크로 타일링 모드 중 적어도 하나를 포함한다. 복수의 렌더링 모드 중 하나를 결정하는 것은 현재 프레임의 렌더링 특성들에 기초하여 복수의 렌더링 모드들 중 하나를 결정하는 것을 포함할 수도 있다. 다른 예에서, 복수의 렌더링 모드들 중 하나를 결정하는 것은 현재의 프레임 및 이전에 렌더링된 프레임들의 렌더링 특성들에 기초하여 복수의 렌더링 모드들 중 하나를 결정하는 것을 포함할 수도 있다.
CPU (6) 는 또한, 결정된 렌더링 모드가 직접 렌더링 모드인 경우에 (예를 들어, GPU (12) 에 의해) 제 2 버퍼에서의 기록 커맨드들이 실행되게끔 하도록 (1614) 구성된다.
하나 이상의 실시형태들에서, 상술된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되면, 상기 기능들은 비일시적 컴퓨터 판독 가능 매체를 포함하는 제조 물품 상의 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 컴퓨터 판독가능 매체들은 컴퓨터 데이터 저장 매체들을 포함할 수도 있다. 데이터 스토리지 매체는 본원에서 설명된 기술들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 리트리브 하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수도 있다. 비제한적인 예로서, 이러한 컴퓨터 판독 가능한 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 스토리지, 자기 디스크 스토리지 또는 다른 자기 스토리지 디바이스들, 플래시 메모리, 또는 요구되는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 이송 또는 저장하기 위해 사용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 본원에서 사용된 디스크(disk)와 디스크(disc)는 컴팩트 디스크(CD), 레이저 디스크, 광학 디스크, 디지털 다기능 디스크(DVD), 플로피 디스크 및 블루레이 디스크를 포함하며, 디스크(disk)는 데이터를 자기적으로 주로 재생하고, 디스크(disc)는 데이터를 주로 레이저를 통해 재생한다. 위의 조합들도 컴퓨터 판독가능 매체들의 범위 내에 포함되어야 한다.
하나 이상의 DSPs, 범용 마이크로프로세서들, ASICs, FPGAs, 또는 다른 등가의 집적 또는 이산 로직 회로부와 같은 하나 이상의 프로세서들에 의해 코드가 실행될 수도 있다. 또한, 몇몇 양태들에서, 본원에서 설명된 기능성은 전용 하드웨어 및/또는 소프트웨어 모듈들에 의해 제공될 수도 있다. 또한, 상기 기술들은 하나 이상의 회로들 또는 로직 소자들에서 완전히 구현될 수 있다.
이 개시물의 기법들은 무선 핸드셋, 집적 회로 (integrated circuit; IC), 또는 IC 들의 세트 (예를 들어, 칩셋) 를 포함하여, 매우 다양한 디바이스들 또는 장치들로 구현될 수도 있다. 개시된 기술들을 수행하도록 구성된 디바이스들의 기능적 양태를 강조하기 위해 다양한 소자들, 모듈들, 또는 유닛들이 본 개시에서 설명되었지만, 반드시 상이한 하드웨어 유닛들에 의해 실현될 필요는 없다. 오히려, 상술한 바와 같이, 다양한 유닛들은, 적절한 소프트웨어 및/또는 펌웨어와 연계하여, 코덱 하드웨어 유닛에 통합되거나 또는 상술한 하나 이상의 프로세서들을 포함하여 상호 동작적인 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이들 및 다른 실시형태들은 하기의 특허청구범위 내에 있다.

Claims (37)

  1. 그래픽 프로세싱 방법으로서,
    프레임을 렌더링하는 렌더링 커맨드들을 생성하는 단계로서, 상기 렌더링 커맨드들은 비닝 (binning) 렌더링 모드에 대한 것인, 상기 커맨드들을 생성하는 단계;
    그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 트랙킹하는 단계;
    렌더링 특성들에 기초하여 상기 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하는 단계로서, 상기 복수의 렌더링 모드들은 상기 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는, 상기 결정하는 단계; 및
    결정된 상기 렌더링 모드가 상기 직접 렌더링 모드인 경우에 상기 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경하는 단계를 포함하는, 그래픽 프로세싱 방법.
  2. 제 1 항에 있어서,
    상기 결정된 렌더링 모드가 상기 비닝 렌더링 모드인 경우에 상기 렌더링 커맨드들을 변경하지 않는 단계를 더 포함하는, 그래픽 프로세싱 방법.
  3. 제 2 항에 있어서,
    실행 커맨드들을 제 1 버퍼에 저장하는 단계; 및
    상기 렌더링 커맨드들을 제 2 버퍼에 저장하는 단계를 더 포함하며,
    상기 실행 커맨드들은 상기 렌더링 커맨드들을 포인팅하고, 상기 렌더링 커맨드들을 변경하는 단계는 그래픽 메모리 어드레스들을 시스템 메모리 어드레스들로 대체하도록 상기 제 2 버퍼를 패치 (patch) 하는 단계를 포함하는, 그래픽 프로세싱 방법.
  4. 제 3 항에 있어서,
    상기 제 2 버퍼에서의 상기 렌더링 커맨드들을 포인팅하는 실행 커맨드를 상기 제 1 버퍼에 추가하는 단계; 및
    상기 제 1 버퍼에서의 상기 실행 커맨드들을 실행하는 단계를 더 포함하는, 그래픽 프로세싱 방법.
  5. 제 1 항에 있어서,
    상기 렌더링 특성들은 렌더 타겟의 사이즈 및 유형, 심도 테스트 상태, 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독들의 수, 텍스쳐들의 사이즈, 및 마이크로 타일링 모드 중 적어도 하나를 포함하는, 그래픽 프로세싱 방법.
  6. 제 5 항에 있어서,
    상기 복수의 렌더링 모드들 중 하나를 결정하는 단계는 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하는 단계를 더 포함하는, 그래픽 프로세싱 방법.
  7. 제 5 항에 있어서,
    상기 복수의 렌더링 모드들 중 하나를 결정하는 단계는 이전에 렌더링된 프레임들 및 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하는 단계를 더 포함하는, 그래픽 프로세싱 방법.
  8. 제 1 항에 있어서,
    제 1 레지스터에 비닝 모드 특정 정보를 저장하는 단계;
    제 2 레지스터에 직접 렌더링 모드 특정 정보를 저장하는 단계; 및
    상기 렌더링 커맨드들을 변경하기 위해, 결정된 상기 렌더링 모드에 기초하여 상기 제 1 레지스터와 상기 제 2 레지스터 사이를 선택하도록 글로벌 레지스터를 이용하는 단계를 더 포함하는, 그래픽 프로세싱 방법.
  9. 제 8 항에 있어서,
    상기 비닝 모드 특정 정보는 목적지 표면 정보를 처리하는 레지스터 어드레스들, 상기 그래픽 메모리 어드레스들 및 가시성 스트림 사용 (usage) 중 적어도 하나를 포함하며,
    상기 직접 렌더링 모드 특정 정보는 시스템 메모리 어드레스들을 포함하는, 그래픽 프로세싱 방법.
  10. 그래픽 프로세싱을 위하여 구성된 장치로서,
    프레임을 렌더링하는 렌더링 커맨드들을 생성하는 수단으로서, 상기 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것인, 상기 커맨드들을 생성하는 수단;
    그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 트랙킹하는 수단;
    렌더링 특성들에 기초하여 상기 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하는 수단으로서, 상기 복수의 렌더링 모드들은 상기 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는, 상기 결정하는 수단; 및
    결정된 상기 렌더링 모드가 상기 직접 렌더링 모드인 경우에 상기 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경하는 수단을 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  11. 제 10 항에 있어서,
    상기 결정된 렌더링 모드가 상기 비닝 렌더링 모드인 경우에 상기 렌더링 커맨드들을 변경하지 않는 수단을 더 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  12. 제 11 항에 있어서,
    실행 커맨드들을 제 1 버퍼에 저장하는 수단; 및
    상기 렌더링 커맨드들을 제 2 버퍼에 저장하는 수단을 더 포함하며,
    상기 실행 커맨드들은 상기 렌더링 커맨드들을 포인팅하고, 상기 렌더링 커맨드들을 변경하는 수단은 그래픽 메모리 어드레스들을 시스템 메모리 어드레스들로 대체하도록 상기 제 2 버퍼를 패치하는 수단을 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  13. 제 12 항에 있어서,
    상기 제 2 버퍼에서의 상기 렌더링 커맨드들을 포인팅하는 실행 커맨드를 상기 제 1 버퍼에 추가하는 수단; 및
    상기 제 1 버퍼에서의 상기 실행 커맨드들을 실행하는 수단을 더 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  14. 제 10 항에 있어서,
    상기 렌더링 특성들은 렌더 타겟의 사이즈 및 유형, 심도 테스트 상태, 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독들의 수, 텍스쳐들의 사이즈, 및 마이크로 타일링 모드 중 적어도 하나를 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  15. 제 14 항에 있어서,
    상기 복수의 렌더링 모드들 중 하나를 결정하는 수단은 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하는 수단을 더 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  16. 제 14 항에 있어서,
    상기 복수의 렌더링 모드들 중 하나를 결정하는 수단은 이전에 렌더링된 프레임들 및 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하는 수단을 더 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  17. 제 10 항에 있어서,
    제 1 레지스터에 비닝 모드 특정 정보를 저장하는 수단;
    제 2 레지스터에 직접 렌더링 모드 특정 정보를 저장하는 수단; 및
    상기 렌더링 커맨드들을 변경하기 위해, 결정된 상기 렌더링 모드에 기초하여 상기 제 1 레지스터와 상기 제 2 레지스터 사이를 선택하도록 글로벌 레지스터를 이용하는 수단을 더 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  18. 제 17 항에 있어서,
    상기 비닝 모드 특정 정보는 목적지 표면 정보를 처리하는 레지스터 어드레스들, 상기 그래픽 메모리 어드레스들 및 가시성 스트림 사용 중 적어도 하나를 포함하며, 상기 직접 렌더링 모드 특정 정보는 시스템 메모리 어드레스들을 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  19. 그래픽 프로세싱을 위하여 구성된 장치로서,
    하나 이상의 프로세서들을 포함하고,
    상기 하나 이상의 프로세서들은,
    프레임을 렌더링하는 렌더링 커맨드들을 생성하는 것으로서, 상기 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것인, 상기 렌더링 커맨드들을 생성하고;
    그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 트랙킹하고;
    렌더링 특성들에 기초하여 상기 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하는 것으로서, 상기 복수의 렌더링 모드들은 상기 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는, 상기 복수의 렌더링 모드들 중 하나를 결정하고;
    결정된 상기 렌더링 모드가 상기 직접 렌더링 모드인 경우에 상기 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하게 변경하도록 구성되는, 그래픽 프로세싱을 위하여 구성된 장치.
  20. 제 19 항에 있어서,
    상기 하나 이상의 프로세서들은 또한,
    상기 결정된 렌더링 모드가 상기 비닝 렌더링 모드인 경우에 상기 렌더링 커맨드들을 변경하지 않도록 구성되는, 그래픽 프로세싱을 위하여 구성된 장치.
  21. 제 20 항에 있어서,
    상기 하나 이상의 프로세서들은 또한,
    실행 커맨드들을 제 1 버퍼에 저장하고;
    상기 렌더링 커맨드들을 제 2 버퍼에 저장하도록 구성되고,
    상기 실행 커맨드들은 상기 렌더링 커맨드들을 포인팅하고, 상기 렌더링 커맨드들을 변경하는 것은 그래픽 메모리 어드레스들을 시스템 메모리 어드레스들로 대체하도록 상기 제 2 버퍼를 패치하는 것을 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  22. 제 21 항에 있어서,
    상기 하나 이상의 프로세서들은 또한,
    상기 제 2 버퍼에서의 상기 렌더링 커맨드들을 포인팅하는 실행 커맨드를 상기 제 1 버퍼에 추가하도록 구성되고,
    상기 장치는 상기 제 1 버퍼에서의 상기 실행 커맨드들을 실행하도록 구성되는 그래픽 프로세서를 더 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  23. 제 19 항에 있어서,
    상기 렌더링 특성들은 렌더 타겟의 사이즈 및 유형, 심도 테스트 상태, 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독들의 수, 텍스쳐들의 사이즈, 및 마이크로 타일링 모드 중 적어도 하나를 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  24. 제 23 항에 있어서,
    상기 하나 이상의 프로세서들은 또한, 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하도록 구성되는, 그래픽 프로세싱을 위하여 구성된 장치.
  25. 제 23 항에 있어서,
    상기 하나 이상의 프로세서들은 또한, 이전에 렌더링된 프레임들 및 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하도록 구성되는, 그래픽 프로세싱을 위하여 구성된 장치.
  26. 제 19 항에 있어서,
    상기 하나 이상의 프로세서들은 또한,
    제 1 레지스터에 비닝 모드 특정 정보를 저장하고;
    제 2 레지스터에 직접 렌더링 모드 특정 정보를 저장하고;
    상기 렌더링 커맨드들을 변경하기 위해, 결정된 상기 렌더링 모드에 기초하여 상기 제 1 레지스터와 상기 제 2 레지스터 사이를 선택하도록 글로벌 레지스터를 이용하도록 구성되는, 그래픽 프로세싱을 위하여 구성된 장치.
  27. 제 26 항에 있어서,
    상기 비닝 모드 특정 정보는 목적지 표면 정보를 처리하는 레지스터 어드레스들, 상기 그래픽 메모리 어드레스들 및 가시성 스트림 사용 중 적어도 하나를 포함하며,
    상기 직접 렌더링 모드 특정 정보는 시스템 메모리 어드레스들을 포함하는, 그래픽 프로세싱을 위하여 구성된 장치.
  28. 제 19 항에 있어서,
    상기 하나 이상의 프로세서들은 모바일 디바이스에 있는, 그래픽 프로세싱을 위하여 구성된 장치.
  29. 명령들을 저장한 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은 실행시, 그래픽 프로세싱을 위하여 구성된 디바이스의 하나 이상의 프로세서들로 하여금,
    프레임을 렌더링하는 렌더링 커맨드들을 생성하게 하는 것으로서, 상기 렌더링 커맨드들은 비닝 렌더링 모드에 대한 것인, 상기 렌더링 커맨드들을 생성하게 하고;
    그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 트랙킹하게 하고;
    렌더링 특성들에 기초하여 상기 프레임에 대한 복수의 렌더링 모드들 중 하나를 결정하게 하는 것으로서, 상기 복수의 렌더링 모드들은 상기 비닝 렌더링 모드 및 직접 렌더링 모드를 포함하는, 상기 복수의 렌더링 모드들 중 하나를 결정하게 하고;
    결정된 상기 렌더링 모드가 상기 직접 렌더링 모드인 경우에 상기 그래픽 메모리 어드레스들을 이용하는 상기 렌더링 커맨드들을 시스템 메모리 어드레스들을 이용하도록 변경하게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  30. 제 29 항에 있어서,
    상기 명령들은 또한 상기 하나 이상의 프로세서들로 하여금,
    상기 결정된 렌더링 모드가 상기 비닝 렌더링 모드인 경우에 상기 렌더링 커맨드들을 변경하지 않게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  31. 제 30 항에 있어서,
    상기 명령들은 또한 상기 하나 이상의 프로세서들로 하여금,
    실행 커맨드들을 제 1 버퍼에 저장하게 하고;
    상기 렌더링 커맨드들을 제 2 버퍼에 저장하게 하며,
    상기 실행 커맨드들은 상기 렌더링 커맨드들을 포인팅하고, 상기 렌더링 커맨드들을 변경하게 하는 것은 그래픽 메모리 어드레스들을 시스템 메모리 어드레스들로 대체하도록 상기 제 2 버퍼를 패치하는 것을 포함하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  32. 제 31 항에 있어서,
    상기 명령들은 또한 상기 하나 이상의 프로세서들로 하여금,
    상기 제 2 버퍼에서의 상기 렌더링 커맨드들을 포인팅하는 실행 커맨드를 상기 제 1 버퍼에 추가하게 하고;
    그래픽 프로세서로 하여금 상기 제 1 버퍼에서의 상기 실행 커맨드들을 실행하도록 하게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  33. 제 29 항에 있어서,
    상기 렌더링 특성들은 렌더 타겟의 사이즈 및 유형, 심도 테스트 상태, 쉐이더들의 복잡성, 드로잉된 프리미티브들의 수, 텍스쳐 판독들의 수, 텍스쳐들의 사이즈, 및 마이크로 타일링 모드 중 적어도 하나를 포함하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  34. 제 33 항에 있어서,
    상기 명령들은 또한 상기 하나 이상의 프로세서들로 하여금,
    현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  35. 제 33 항에 있어서,
    상기 명령들은 또한 상기 하나 이상의 프로세서들로 하여금,
    이전에 렌더링된 프레임들 및 현재 프레임의 렌더링 특성들에 기초하여 상기 복수의 렌더링 모드들 중 하나를 결정하게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  36. 제 29 항에 있어서,
    상기 명령들은 또한 상기 하나 이상의 프로세서들로 하여금,
    제 1 레지스터에 비닝 모드 특정 정보를 저장하게 하고;
    제 2 레지스터에 직접 렌더링 모드 특정 정보를 저장하게 하고;
    상기 렌더링 커맨드들을 변경하기 위해, 결정된 상기 렌더링 모드에 기초하여 상기 제 1 레지스터와 상기 제 2 레지스터 사이를 선택하도록 글로벌 레지스터를 이용하게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
  37. 제 36 항에 있어서,
    상기 비닝 모드 특정 정보는 목적지 표면 정보를 처리하는 레지스터 어드레스들, 상기 그래픽 메모리 어드레스들 및 가시성 스트림 사용 중 적어도 하나를 포함하며,
    상기 직접 렌더링 모드 특정 정보는 시스템 메모리 어드레스들을 포함하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
KR1020147017967A 2011-11-30 2012-11-07 그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭 KR101615840B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161565397P 2011-11-30 2011-11-30
US61/565,397 2011-11-30
US13/553,624 2012-07-19
US13/553,624 US8830246B2 (en) 2011-11-30 2012-07-19 Switching between direct rendering and binning in graphics processing
PCT/US2012/063949 WO2013081789A1 (en) 2011-11-30 2012-11-07 Switching between direct rendering and binning in graphics processing

Publications (2)

Publication Number Publication Date
KR20140101398A true KR20140101398A (ko) 2014-08-19
KR101615840B1 KR101615840B1 (ko) 2016-04-26

Family

ID=48466428

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147017967A KR101615840B1 (ko) 2011-11-30 2012-11-07 그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭

Country Status (7)

Country Link
US (3) US9117302B2 (ko)
EP (2) EP2786350B1 (ko)
JP (2) JP5866457B2 (ko)
KR (1) KR101615840B1 (ko)
CN (2) CN103959338B (ko)
IN (1) IN2014CN03595A (ko)
WO (3) WO2013081789A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230048441A (ko) * 2020-09-30 2023-04-11 퀄컴 인코포레이티드 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9117302B2 (en) 2011-11-30 2015-08-25 Qualcomm Incorporated Switching between direct rendering and binning in graphics processing using an overdraw tracker
US9087410B2 (en) * 2013-01-17 2015-07-21 Qualcomm Incorporated Rendering graphics data using visibility information
DE102013022169A1 (de) 2013-03-14 2014-09-18 Nvidia Corporation Fehlerpuffer zur verfolgung von seitenfehlern in einem vereinheitlichten virtuellen speichersystem
US10445243B2 (en) 2013-03-14 2019-10-15 Nvidia Corporation Fault buffer for resolving page faults in unified virtual memory system
US9342857B2 (en) * 2013-03-29 2016-05-17 Nvidia Corporation Techniques for locally modifying draw calls
US9286649B2 (en) * 2013-05-31 2016-03-15 Qualcomm Incorporated Conditional execution of rendering commands based on per bin visibility information with added inline operations
US20150106587A1 (en) * 2013-10-16 2015-04-16 Advanced Micro Devices, Inc. Data remapping for heterogeneous processor
US9280845B2 (en) * 2013-12-27 2016-03-08 Qualcomm Incorporated Optimized multi-pass rendering on tiled base architectures
US9928565B2 (en) 2014-04-21 2018-03-27 Qualcomm Incorporated Flex rendering based on a render target in graphics processing
JP6274962B2 (ja) * 2014-04-25 2018-02-07 株式会社スクウェア・エニックス 情報処理装置、制御方法、プログラム及び記録媒体
US9754402B2 (en) * 2014-05-13 2017-09-05 Mediatek Inc. Graphics processing method and graphics processing apparatus
US9940686B2 (en) * 2014-05-14 2018-04-10 Intel Corporation Exploiting frame to frame coherency in a sort-middle architecture
GB2526598B (en) 2014-05-29 2018-11-28 Imagination Tech Ltd Allocation of primitives to primitive blocks
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US9799088B2 (en) * 2014-08-21 2017-10-24 Qualcomm Incorporated Render target command reordering in graphics processing
US9613392B2 (en) * 2014-09-03 2017-04-04 Mediatek Inc. Method for performing graphics processing of a graphics system in an electronic device with aid of configurable hardware, and associated apparatus
US9600926B2 (en) * 2014-12-15 2017-03-21 Intel Corporation Apparatus and method decoupling visibility bins and render tile dimensions for tiled rendering
US9489710B2 (en) * 2015-02-10 2016-11-08 Qualcomm Incorporated Hybrid rendering in graphics processing
US9830731B2 (en) * 2015-04-01 2017-11-28 Mediatek Inc. Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus
US9836869B2 (en) 2015-04-01 2017-12-05 Mediatek Inc. Graphics-processing method of a graphics-processing unit and graphics-processing apparatus
CN104809684B (zh) 2015-04-02 2018-03-27 华为技术有限公司 图形处理方法、装置及系统
US9773340B2 (en) * 2015-06-12 2017-09-26 Qualcomm Incorporated Rendering using ray tracing to generate a visibility stream
US20170004647A1 (en) * 2015-06-30 2017-01-05 Microsoft Technology Licensing, Llc Rendering graphics data on demand
US10140268B2 (en) 2015-08-27 2018-11-27 Qualcomm Innovation Center, Inc. Efficient browser composition for tiled-rendering graphics processing units
US10210655B2 (en) 2015-09-25 2019-02-19 Intel Corporation Position only shader context submission through a render command streamer
US10062139B2 (en) 2016-07-25 2018-08-28 Qualcomm Incorporated Vertex shaders for binning based graphics processing
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
KR102637736B1 (ko) 2017-01-04 2024-02-19 삼성전자주식회사 그래픽스 처리 방법 및 시스템
GB2558886B (en) 2017-01-12 2019-12-25 Imagination Tech Ltd Graphics processing units and methods for controlling rendering complexity using cost indications for sets of tiles of a rendering space
US10430912B2 (en) * 2017-02-14 2019-10-01 Qualcomm Incorporated Dynamic shader instruction nullification for graphics processing
US10521321B2 (en) * 2017-12-21 2019-12-31 Qualcomm Incorporated Diverse redundancy approach for safety critical applications
CN108389151B (zh) * 2018-01-08 2022-03-18 珠海金山网络游戏科技有限公司 一种过度绘制的评估方法和系统
US10269167B1 (en) 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
CN109165058A (zh) * 2018-07-06 2019-01-08 北京三快在线科技有限公司 一种图片处理方法及装置
US20200020067A1 (en) * 2018-07-13 2020-01-16 Qualcomm Incorporated Concurrent binning and rendering
CN109325899B (zh) 2018-09-07 2023-04-04 格兰菲智能科技有限公司 计算机系统、图形处理单元及其图形处理方法
CN109242756B (zh) * 2018-09-07 2023-04-04 格兰菲智能科技有限公司 计算机系统、图形处理单元及其图形处理方法
CN110152291A (zh) * 2018-12-13 2019-08-23 腾讯科技(深圳)有限公司 游戏画面的渲染方法、装置、终端及存储介质
CN112764668A (zh) * 2019-11-01 2021-05-07 伊姆西Ip控股有限责任公司 扩展gpu存储器的方法、电子设备和计算机程序产品
US11972518B2 (en) * 2020-01-20 2024-04-30 Advanced Micro Devices, Inc. Hybrid binning
CN113269842A (zh) * 2020-02-17 2021-08-17 苏州苏大维格科技集团股份有限公司 图形光栅化方法、装置及存储介质
US20210287418A1 (en) * 2020-03-10 2021-09-16 Advanced Micro Devices, Inc. Graphics processing unit render mode selection system
US11321806B2 (en) * 2020-07-22 2022-05-03 Samsung Electronics Co., Ltd. Enhanced early coverage discard using opportunistic bypassing and dynamic queue resizing
US20220044350A1 (en) * 2020-08-07 2022-02-10 Advanced Micro Devices, Inc. Graphics processing unit with selective two-level binning
US11321804B1 (en) * 2020-10-15 2022-05-03 Qualcomm Incorporated Techniques for flexible rendering operations
US11416960B2 (en) 2020-11-06 2022-08-16 Samsung Electronics Co., Ltd. Shader accessible configurable binning subsystem
CN112652025B (zh) * 2020-12-18 2022-03-22 完美世界(北京)软件科技发展有限公司 图像渲染方法、装置、计算机设备及可读存储介质
CN114332311B (zh) * 2021-12-05 2023-08-04 北京字跳网络技术有限公司 一种图像生成方法、装置、计算机设备及存储介质
CN116894906A (zh) * 2023-09-11 2023-10-17 瀚博半导体(上海)有限公司 图形渲染方法和处理器硬件架构

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5793385A (en) * 1996-06-12 1998-08-11 Chips And Technologies, Inc. Address translator for a shared memory computing system
US5990911A (en) * 1996-06-21 1999-11-23 Autodesk, Inc. Immediate mode drawing interface for the construction of graphics software
US6208361B1 (en) * 1998-06-15 2001-03-27 Silicon Graphics, Inc. Method and system for efficient context switching in a computer graphics system
US6646639B1 (en) 1998-07-22 2003-11-11 Nvidia Corporation Modified method and apparatus for improved occlusion culling in graphics systems
US6380935B1 (en) * 1999-03-17 2002-04-30 Nvidia Corporation circuit and method for processing render commands in a tile-based graphics system
US6321314B1 (en) * 1999-06-09 2001-11-20 Ati International S.R.L. Method and apparatus for restricting memory access
US6330654B1 (en) * 1999-08-26 2001-12-11 Micron Technology, Inc. Memory cache with sequential page indicators
US6466217B1 (en) * 1999-12-22 2002-10-15 Intel Corporation Method and apparatus for ensuring backward compatibility in a bucket rendering system
US6560657B1 (en) 1999-12-23 2003-05-06 Intel Corporation System and method for controlling peripheral devices
US6724390B1 (en) * 1999-12-29 2004-04-20 Intel Corporation Allocating memory
US6538650B1 (en) * 2000-01-10 2003-03-25 Intel Corporation Efficient TLB entry management for the render operands residing in the tiled memory
US6762765B2 (en) * 2001-12-31 2004-07-13 Intel Corporation Bandwidth reduction for zone rendering via split vertex buffers
US6747657B2 (en) 2001-12-31 2004-06-08 Intel Corporation Depth write disable for zone rendering
US20040075654A1 (en) 2002-10-16 2004-04-22 Silicon Integrated Systems Corp. 3-D digital image processor and method for visibility processing for use in the same
US7242400B2 (en) 2002-11-13 2007-07-10 Ati Technologies Ulc Compression and decompression of data using plane equations
US7248267B2 (en) * 2003-03-20 2007-07-24 International Business Machines Corporation Method and apparatus for simulated direct frame buffer access for graphics adapters
KR100505134B1 (ko) * 2003-06-10 2005-08-02 한국과학기술원 3차원 컴퓨터 그래픽 시스템의 제산유니트
GB2406184B (en) * 2003-09-17 2006-03-15 Advanced Risc Mach Ltd Data processing system
US7324691B2 (en) 2003-09-24 2008-01-29 Microsoft Corporation System and method for shape recognition of hand-drawn objects
US7411591B2 (en) * 2003-12-24 2008-08-12 Intel Corporation Graphics memory switch
US20050237329A1 (en) 2004-04-27 2005-10-27 Nvidia Corporation GPU rendering to system memory
US7586500B2 (en) 2004-09-24 2009-09-08 Canon Kabushiki Kaisha Dynamic render algorithm selection
GB0425204D0 (en) 2004-11-15 2004-12-15 Falanx Microsystems As Processing of 3-dimensional graphics
GB0426170D0 (en) 2004-11-29 2004-12-29 Falanx Microsystems As Processing of computer graphics
US8089486B2 (en) 2005-03-21 2012-01-03 Qualcomm Incorporated Tiled prefetched and cached depth buffer
US7289119B2 (en) 2005-05-10 2007-10-30 Sony Computer Entertainment Inc. Statistical rendering acceleration
US20070052715A1 (en) * 2005-09-07 2007-03-08 Konstantin Levit-Gurevich Device, system and method of graphics processing
US7499057B2 (en) * 2005-09-09 2009-03-03 Microsoft Corporation Address translation in an integrated graphics environment
US20080273031A1 (en) 2005-12-08 2008-11-06 Xgi Technology Inc. (Cayman) Page based rendering in 3D graphics system
US8212832B2 (en) 2005-12-08 2012-07-03 Ati Technologies Ulc Method and apparatus with dynamic graphics surface memory allocation
US7545382B1 (en) * 2006-03-29 2009-06-09 Nvidia Corporation Apparatus, system, and method for using page table entries in a graphics system to provide storage format information for address translation
GB0710795D0 (en) 2007-06-05 2007-07-18 Arm Norway As Method of and apparatus for processing graphics
US8448067B2 (en) 2006-12-07 2013-05-21 Sony Computer Entertainment America, LLC Graphics command management tool and methods for analyzing performance for command changes before application modification
US7830381B2 (en) 2006-12-21 2010-11-09 Sectra Ab Systems for visualizing images using explicit quality prioritization of a feature(s) in multidimensional image data sets, related methods and computer products
ITMI20070038A1 (it) 2007-01-12 2008-07-13 St Microelectronics Srl Dispositivo di renderizzazione per grafica a tre dimensioni con architettura di tipo sort-middle.
US8094943B2 (en) * 2007-09-27 2012-01-10 Behavioral Recognition Systems, Inc. Background-foreground module for video analysis system
US8031194B2 (en) 2007-11-09 2011-10-04 Vivante Corporation Intelligent configurable graphics bandwidth modulator
US8026912B1 (en) 2007-12-04 2011-09-27 Nvidia Corporation System and method for structuring an A-buffer
GB0810311D0 (en) * 2008-06-05 2008-07-09 Advanced Risc Mach Ltd Graphics processing systems
GB2461900B (en) 2008-07-16 2012-11-07 Advanced Risc Mach Ltd Monitoring graphics processing
GB0818277D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing system
US8675000B2 (en) 2008-11-07 2014-03-18 Google, Inc. Command buffers for web-based graphics rendering
GB2469525A (en) 2009-04-17 2010-10-20 Advanced Risc Mach Ltd Graphics Filled Shape Drawing
US8610731B2 (en) * 2009-04-30 2013-12-17 Microsoft Corporation Dynamic graphics pipeline and in-place rasterization
KR20100132605A (ko) 2009-06-10 2010-12-20 삼성전자주식회사 하이브리드 렌더링 장치 및 방법
US8341380B2 (en) * 2009-09-22 2012-12-25 Nvidia Corporation Efficient memory translator with variable size cache line coverage
US8872823B2 (en) 2009-10-09 2014-10-28 Microsoft Corporation Automatic real-time shader modification for texture fetch instrumentation
US8988441B2 (en) * 2011-02-10 2015-03-24 Edward A. Hutchins Reconfigurable 3D graphics processor
US8982136B2 (en) * 2011-05-16 2015-03-17 Qualcomm Incorporated Rendering mode selection in graphics processing units
WO2012159246A1 (en) 2011-05-20 2012-11-29 Microsoft Corporation Displaying and inputting symbols
US9117302B2 (en) 2011-11-30 2015-08-25 Qualcomm Incorporated Switching between direct rendering and binning in graphics processing using an overdraw tracker

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230048441A (ko) * 2020-09-30 2023-04-11 퀄컴 인코포레이티드 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법

Also Published As

Publication number Publication date
US8830246B2 (en) 2014-09-09
WO2013081789A1 (en) 2013-06-06
US9117302B2 (en) 2015-08-25
EP2786351A1 (en) 2014-10-08
KR101615840B1 (ko) 2016-04-26
JP2015506018A (ja) 2015-02-26
JP5847960B2 (ja) 2016-01-27
IN2014CN03595A (ko) 2015-10-09
EP2786351B1 (en) 2016-03-30
CN103959338B (zh) 2016-09-14
US20130135329A1 (en) 2013-05-30
EP2786350A1 (en) 2014-10-08
EP2786350B1 (en) 2018-09-12
CN103959338A (zh) 2014-07-30
WO2013081787A1 (en) 2013-06-06
US20130135341A1 (en) 2013-05-30
US20130135322A1 (en) 2013-05-30
JP5866457B2 (ja) 2016-02-17
CN103959337A (zh) 2014-07-30
US9547930B2 (en) 2017-01-17
WO2013081788A1 (en) 2013-06-06
CN103959337B (zh) 2016-06-01
JP2015506017A (ja) 2015-02-26

Similar Documents

Publication Publication Date Title
KR101615840B1 (ko) 그래픽 프로세싱에서 직접 렌더링과 비닝 사이의 스위칭
US10282813B2 (en) Flex rendering based on a render target in graphics processing
CN107209923B (zh) 图形处理中的混合渲染
EP3308359B1 (en) Rendering using ray tracing to generate a visibility stream
US9836810B2 (en) Optimized multi-pass rendering on tiled base architectures
EP3044754A1 (en) Fault-tolerant preemption mechanism at arbitrary control points for graphics processing
WO2019055918A1 (en) ADDING METADATA TO TEXTURE SURFACES FOR BANDWIDTH COMPRESSION

Legal Events

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

Payment date: 20190327

Year of fee payment: 4