KR20190100194A - 타일식 아키텍처들에서의 포비티드 렌더링 - Google Patents

타일식 아키텍처들에서의 포비티드 렌더링 Download PDF

Info

Publication number
KR20190100194A
KR20190100194A KR1020197017666A KR20197017666A KR20190100194A KR 20190100194 A KR20190100194 A KR 20190100194A KR 1020197017666 A KR1020197017666 A KR 1020197017666A KR 20197017666 A KR20197017666 A KR 20197017666A KR 20190100194 A KR20190100194 A KR 20190100194A
Authority
KR
South Korea
Prior art keywords
tile
image content
image
resolution
gpu
Prior art date
Application number
KR1020197017666A
Other languages
English (en)
Other versions
KR102475212B1 (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 KR20190100194A publication Critical patent/KR20190100194A/ko
Application granted granted Critical
Publication of KR102475212B1 publication Critical patent/KR102475212B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformation in the plane of the image
    • G06T3/40Scaling the whole image or part thereof
    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/387Composing, repositioning or otherwise geometrically modifying originals
    • H04N1/3876Recombination of partial images to recreate the original image
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/387Composing, repositioning or otherwise geometrically modifying originals
    • H04N1/393Enlarging or reducing
    • H04N1/3935Enlarging or reducing with modification of image resolution, i.e. determining the values of picture elements at new relative positions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20021Dividing image into blocks, subimages or windows
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Computing Systems (AREA)
  • Geometry (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Engineering & Computer Science (AREA)

Abstract

본 개시는 포비에이션 렌더링의 예들을 기재한다. 그래픽스 프로세싱 유닛 (GPU) 은 GPU 가 프리미티브들의 정점들이 어느 타일들에 속하는지를 결정한 비닝 패스 후에 렌더링 패스의 일부로서 상이한 크기로 각각의 타일에 대한 이미지 콘텐츠를 렌더링할 수도 있다. GPU 는 GPU 가 이미지 콘텐츠를 렌더링한 크기에 기초하여 렌더링된 이미지 콘텐츠를 업샘플링하고, 이후의 디스플레이를 위해 업샘플링된 이미지 콘텐츠를 출력할 수도 있다.

Description

타일식 아키텍처들에서의 포비티드 렌더링
본 개시는 그래픽스 프로세싱에 관한 것이다.
컴퓨팅 디바이스는 디스플레이를 위한 그래픽스 데이터의 렌더링을 가속화하기 위해 그래픽스 프로세싱 유닛 (GPU) 을 종종 활용한다. 이러한 컴퓨팅 디바이스는 예를 들어 컴퓨터 워크스테이션, 모바일 폰, 예컨대 이른바 스마트 폰, 임베디드 시스템, 개인용 컴퓨터, 태블릿 컴퓨터 및 비디오 게임 콘솔을 포함할 수도 있다. GPU들은 통상적으로 그래픽스 프로세싱 커맨드들을 실행하도록 함께 동작하는 복수의 그래픽스 프로세싱 스테이지들을 포함하는 그래픽스 프로세싱 파이프라인을 실행한다. 호스트 중앙 프로세싱 유닛 (CPU) 은 하나 이상의 그래픽스 프로세싱 커맨드들을 GPU 에 발행함으로써 GPU 의 동작을 제어할 수도 있다. 현대의 CPU들은 통상적으로 다중 애플리케이션들을 동시에 실행할 수 있으며, 그 각각은 실행 동안 GPU 를 활용해야 할 수도 있다.
본 개시는 그래픽스 콘텐츠의 포비티드 (foveated) 렌더링에 관한 것이다. 그래픽스 프로세싱 유닛 (GPU) 은 이미지 표면의 타일의 이미지 콘텐츠를 타일의 크기보다는 그 타일의 이미지 콘텐츠의 해상도에 기초하여 선택되는 크기로 렌더링할 수도 있다. GPU 는 이미지 프레임의 하나 이상의 타일들에 대해 이것을 반복하고, 그 후 하나 이상의 타일들의 이미지 콘텐츠를 타일들의 크기로 업샘플링할 수도 있다. 이러한 방식으로, GPU 는 포비에이션 (foveation) 렌더링을 위해 이미지 프레임의 상이한 부분에서 상이한 해상도를 달성할 수 있다.
일 예에서, 본 개시는 포비에이션 렌더링의 방법을 기재하며, 방법은, 이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 단계로서, 제 1 해상도는 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하는 단계, 제 1 타일의 크기보다 작은 크기로 그리고 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도에 기초하여 제 1 타일에 대한 이미지 콘텐츠를 렌더링하는 단계, 업샘플링된 이미지 콘텐츠를 생성하기 위해 제 1 타일에서의 이미지 콘텐츠를 업샘플링하는 단계, 및 업샘플링된 이미지 콘텐츠를 출력하는 단계를 포함한다.
일 예에서, 본 개시는 포비에이션 렌더링을 위한 디바이스를 개시하며, 디바이스는, 시스템 메모리, 및 프로그램가능 또는 고정-기능 (fixed-function) 회로부 중 적어도 하나를 포함하는 그래픽스 프로세싱 유닛 (GPU) 를 포함하고, GPU 는, 이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 것으로서, 제 1 해상도는 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하고, 제 1 타일의 크기보다 작은 크기로 그리고 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도에 기초하여 제 1 타일에 대한 이미지 콘텐츠를 렌더링하고, 제 1 타일에서의 이미지 콘텐츠를 업샘플링하여 업샘플링된 이미지 콘텐츠를 생성하며, 그리고 업샘플링된 이미지 콘텐츠를 출력하도록 구성된다.
일 예에서, 본 개시는 포비에이션 렌더링을 위한 디바이스를 기재하며, 디바이스는, 이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 수단으로서, 제 1 해상도는 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하는 수단, 제 1 타일의 크기보다 작은 크기로 그리고 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도에 기초하여 제 1 타일에 대한 이미지 콘텐츠를 렌더링하는 수단, 업샘플링된 이미지 콘텐츠를 생성하기 위해 제 1 타일에서의 이미지 콘텐츠를 업샘플링하는 수단, 및 업샘플링된 이미지 콘텐츠를 출력하는 수단을 포함한다.
일 예에서, 본 개시는 명령들이 저장된 컴퓨터 판독가능 저장 매체를 기재하며, 명령들은 실행될 때, 포비에이션 렌더링을 위한 디바이스의 하나 이상의 프로세서들로 하여금, 이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하게 하는 것으로서, 제 1 해상도는 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하게 하고, 제 1 타일의 크기보다 작은 크기로 그리고 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도에 기초하여 제 1 타일에 대한 이미지 콘텐츠를 렌더링하게 하고, 업샘플링된 이미지 콘텐츠를 생성하기 위해 제 1 타일에서의 이미지 콘텐츠를 업샘플링하게 하며, 그리고 업샘플링된 이미지 콘텐츠를 출력하게 한다.
본 개시의 하나 이상의 예들의 상세들은 첨부 도면들 및 하기의 설명에서 기술된다. 다른 피처들, 목적들 및 이점들은 설명 및 도면들, 및 청구항들로부터 명확해질 것이다.
도 1 은 본 개시의 기법들을 구현하는데 사용될 수도 있는 일 예의 컴퓨팅 디바이스를 도시하는 블록 다이어그램이다.
도 2 는 도 1 의 컴퓨팅 디바이스의 CPU, GPU 및 메모리를 더 상세히 도시하는 블록 다이어그램이다.
도 3 은 도 1 의 컴퓨팅 디바이스의 GPU 및 메모리를 더 상세히 도시하는 블록 다이어그램이다.
도 4 는 포비에이션 렌더링의 일 예를 도시하는 회화적 (pictorial) 다이어그램이다.
도 5 는 포비에이션 렌더링의 일 예의 방법을 도시하는 플로우차트이다.
포비티드 렌더링은 렌더링의 초점을 최대 해상도로 둠으로써 높은 이미지 품질을 유지하면서 프레임버퍼의 평균 해상도를 감소시킴으로써 프레그먼트 프로세싱 작업부하, 대역폭, 및 다른 렌더링 작업부하들을 감소시키는 것을 목표로 하는 기법이다. 예를 들어, 포비티드 렌더링에서, 이미지 프레임의 상이한 부분들은 상이한 해상도들에 있다. 이것은 소정의 부분들이 다른 부분들보다 더 희미하게 보이게 한다.
포비티드 렌더링은 작업부하 효율성, 감소된 앨리어싱, 전력 감소, 및 우수한 뷰어 경험의 이익을 갖는다. 저 해상도 이미지 콘텐츠를 생성하는 것은 일반적으로 고 해상도 이미지 콘텐츠보다 적은 프로세싱을 필요로 하며, 따라서 포비에이션은 전반적인 프로세싱 양을 감소시키는 경향이 있다. 또한, 이미지 콘텐츠 생성자는 뷰어가 이미지의 소정 부분들 (예를 들어, 전경 대 배경) 을 포커싱하기를 원할 수도 있고, 또는 뷰어에게 덜 관심있는 부분들이 있을 수도 있다. 이미지의 일부 부분들을 희미하게 하고 다른 부분들을 선명하게 함으로써, 뷰어는 더 선명한 부분으로 주의를 옮기는 경향이 있다. 따라서, 포비에이션은 이미지의 소정의 부분들을 뷰잉하도록 뷰어를 안내하는 툴일 수도 있다.
그래픽스 프로세싱 유닛 (GPU) 은 포비에이션 렌더링을 수행하도록 구성될 수도 있다. 많은 그래픽스 프로세싱 아키텍처들은 2-패스 프로세싱 스킴을 사용한다. 비닝 패스로서 지칭되는 제 1 패스에서, GPU 는 이미지 프레임을 복수의 빈들 (타일들로 또한 지칭됨) 로 분할한다. GPU 는 비닝 패스에서 어느 프리미티브들 (예를 들어, 삼각형들) 이 어느 타일들에 속하는지를 결정한다. 렌더링 패스로 지칭되는 다음 패스에서, GPU 는 타일 바이 타일 단위로 프리미티브들을 렌더링한다 (예를 들어, 빈당 단위로 프리미티브들을 렌더링한다).
본 개시에 설명된 예들에서, 중앙 프로세싱 유닛 (CPU) 상에서 실행하는 애플리케이션 (예를 들어, 비디오 게임) 은 포비에이션 렌더링을 위한 이미지 프레임의 상이한 부분들의 이미지 해상도들을 결정할 수도 있다. 각각의 타일을 렌더링하는데 있어서, GPU 는 먼저 그 타일에 의해 캡처된 부분의 이미지 해상도를 결정할 수도 있다. 그 후, 그 타일의 이미지 부분을 타일과 동일한 크기가 되도록 (예를 들어, 이미지 부분이 전체 타일을 커버하도록) 렌더링하기 보다, GPU 는 이미지 콘텐츠를 더 작은 크기로 (예를 들어, 타일의 크기보다 적게) 렌더링할 수도 있다. 그 후, 렌더링된 데이터를 프레임 버퍼에 저장하기 위해, GPU 는 렌더링된 이미지 콘텐츠를 업샘플링할 수도 있다. GPU 는 각각의 타일에 대해 이를 반복할 수도 있다.
일부 예들에서, GPU 는 포스트-프로세싱 동작들의 일부로서 렌더링된 이미지 콘텐츠를 업샘플링할 수도 있다. 포스트-프로세싱 동작들은 프레임이 생성된 후 그 프레임에 대해 수행되는 동작들을 지칭한다. 예를 들어, 프레임에 블러링을 부가하는 것, 프레임을 흑백 (black-and-white) 으로 변환하는 것 등이 포스트-프로세싱 동작들의 예들이다. 포스트-프로세싱 동작의 또 다른 예는 타임워프 (timewarp) 패스이다. 타임워프 패스에서, GPU 는 예컨대 프레임에서의 오브젝트들의 위치를 수정함으로써 막 생성된 프레임을 수정하여 부가 프레임들을 생성할 수도 있다. 일부 예들에서, 포스트-프로세싱 동작들은 생성된 프레임에서의 각각의 픽셀에 적용될 수도 있지만, 각각의 픽셀에 대한 동작들이 모든 예에서 반드시 필요한 것은 아니다.
GPU 보다는, 디스플레이 프로세서가 일부 예들에서 업샘플링을 수행할 수도 있다. 예를 들어, GPU 는 렌더링된 이미지 콘텐츠를 더 작은 (예를 들어, 타일의 크기보다 작은) 크기로 저장할 수도 있다. 그 후, 디스플레이 프로세서는 디스플레이 프로세서의 동작들의 일부로서 타일의 이미지 콘텐츠를 업샘플링할 수도 있다.
GPU 가 이미지 콘텐츠를 더 작은 크기로 렌더링한 다음 업샘플링하는 방법의 이해를 돕는 일 예로서, 이미지 프레임이 3x3 어레이의 타일들로 배열된 9 개의 타일들 (또는 빈들) 을 포함한다고 가정한다. 상단 3 개의 타일들의 이미지 콘텐츠는 전체 해상도에 대해 1/16 해상도이다. 하단 3 개의 타일들, 및 중심 타일의 좌측 및 우측으로 2 개의 타일들의 이미지 콘텐츠는 전체 해상도에 대해 1/4 해상도에 있다. 중간 타일의 이미지 콘텐츠는 전체 해상도이다.
이 예에서, 상단 3 개의 타일들에서의 이미지 콘텐츠에 대해, GPU 는 이미지 콘텐츠를 타일의 크기와 같은 1/16 로 렌더링할 수도 있다. 그 후, GPU 는 이미지 콘텐츠를 16x 로 업샘플링하고 결과의 이미지 콘텐츠를 프레임 버퍼에 저장할 수도 있다. 업샘플링에 의하면, 해상도가 더 작은 크기의 이미지 콘텐츠에 대해 동일하기 때문에 (예를 들어, 1/16 크기의 이미지에서의 하나의 픽셀이 업샘플링 후 16 픽셀들로 표현됨), 이미지 콘텐츠가 희미하게 보일 수도 있다. 보간 필터는 업샘플링의 일부로서 또는 업샘플링 후에 선택적으로 픽셀 데이터를 평활화하는데 사용될 수도 있다. GPU 는 하단 3 개의 타일들, 및 중심 타일의 좌측 및 우측 상의 타일들과 유사한 동작들을 수행할 수도 있지만, 업샘플링은 4 의 팩터로 수행할 수도 있다. 이 경우, 업샘플링 후, 하단 3 개의 타일들 및 중심 타일의 좌측 및 우측으로의 타일들은, 이들 타일들이 4 배의 해상도를 갖게 될 것이기 때문에 상단의 타일들보다 더 선명하게 보일 것이다. 중심 타일에 대해, GPU 는 이미지 콘텐츠가 타일과 동일한 크기가 되도록 전체 해상도로 이미지 콘텐츠를 렌더링할 수도 있다. 그 후 GPU 는 상이한 해상도를 갖는 디스플레이를 위한 이미지 프레임을 형성하기 위해 이미지 콘텐츠 모두를 함께 결합할 수도 있다.
도 1 은 본 개시의 기법들을 구현하는데 사용될 수도 있는 일 예의 컴퓨팅 디바이스 (2) 를 도시하는 블록 다이어그램이다. 컴퓨팅 디바이스 (2) 는 카메라, 컴퓨터 (예를 들어, 개인용 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터 및/또는 컴퓨터 워크스테이션), 비디오 게임 플랫폼 또는 콘솔, 모바일 디바이스, 예컨대 무선 통신 디바이스 (예를 들어, 모바일 전화기, 셀룰러 전화기, 위성 전화기, 및/또는 모바일 전화기 핸드셋), 유선 전화기 (landline telephone), 인터넷 전화기, 핸드헬드 디바이스, 예컨대 휴대용 비디오 게임 디바이스 또는 개인용 디지털 보조기 (PDA), 개인용 뮤직 플레이어, 비디오 플레이어, 디스플레이 디바이스, 텔레비전, 셋톱 박스, 브로드캐스트 수신기, 서버, 중간 네트워크 디바이스, 메인프레임 컴퓨터 또는 그래픽 데이터를 프로세싱 및/또는 디스플레이하는 임의의 다른 유형의 디바이스를 포함할 수도 있다.
도 1 의 예에 도시된 바와 같이, 컴퓨팅 디바이스 (2) 는 사용자 입력 인터페이스 (4), CPU (6), 메모리 제어기 (8), 시스템 메모리 (10), 그래픽스 프로세싱 유닛 (GPU)(12), GPU (12) 의 로컬 메모리 (14), 디스플레이 프로세서 (16), 디스플레이 (18) 및 버스 (20) 를 포함한다. 사용자 입력 인터페이스 (4), CPU (6), 메모리 제어기 (8), GPU (12) 및 디스플레이 인터페이스 (16) 는 버스 (20) 를 이용하여 서로 통신할 수도 있다. 버스 (20) 는 제 3 세대 버스 (예를 들어, HyperTransport 버스 또는 InfiniBand 버스), 제 2 세대 버스 (예를 들어, 어드밴스드 그래픽스 포트 (Advanced Graphics Port) 버스, PCI (Peripheral Component Interconnect) 익스프레스 (Express) 버스, 또는 AXI (Advanced eXtensible Interface) 버스) 또는 다른 유형의 버스 또는 디바이스 상호접속과 같은 다양한 버스 구조들 중 임의의 것일 수도 있다. 도 1 에 도시된 상이한 컴포넌트들 사이의 버스들 및 통신 인터페이스들의 특정 구성은 단지 예시적일 뿐이고 동일하거나 상이한 컴포넌트들을 갖는 다른 그래픽스 프로세싱 시스템들 및/또는 컴퓨팅 디바이스들의 다른 구성들이 본 개시의 기법들을 구현하기 위해 사용될 수도 있음을 유의해야 한다.
CPU (6) 는 컴퓨팅 디바이스 (2) 의 동작을 제어하는 범용 또는 특수 목적 프로세서를 포함할 수도 있다. 사용자는 컴퓨팅 디바이스 (2) 에 입력을 제공하여 CPU (6) 로 하여금 하나 이상의 소프트웨어 애플리케이션들을 실행하게 할 수도 있다. CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들은, 예를 들어, 오퍼레이팅 시스템, 워드 프로세서 애플리케이션, 이메일 애플리케이션, 스프레드 시트 애플리케이션, 미디어 플레이어 애플리케이션, 미디어 편집 애플리케이션, 비디오 게임 애플리케이션, 그래픽 사용자 인터페이스 애플리케이션, 텔레컨퍼런싱 애플리케이션, 또는 다른 프로그램을 포함할 수도 있다. 사용자는 하나 이상의 입력 디바이스들 (미도시), 예컨대 키보드, 마우스, 마이크로폰, 터치 패드, 또는 사용자 입력 인터페이스 (4) 를 통하여 컴퓨팅 디바이스 (2) 에 커플링되는 다른 입력 디바이스를 통하여 컴퓨팅 디바이스 (2) 에 입력을 제공할 수도 있다.
CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들은, 그래픽스 데이터의 디스플레이 (18) 로의 렌더링을 야기하도록 CPU (6) 에게 명령하는 하나 이상의 그래픽스 렌더링 명령들을 포함할 수도 있다. 일부 예들에서, 소프트웨어 명령들은 예를 들어, 오픈 그래픽스 라이브러리 (OpenGL®) API, 오픈 그래픽스 라이브러리 임베디드 시스템들 (OpenGL ES) API, Direct3D API, X3D API, RebderMan API, WebGL API, 또는 임의의 다른 공개 또는 독점 표준 그래픽스 API 와 같은 그래픽스 애플리케이션 프로그래밍 인터페이스 (API) 에 부합할 수도 있다. 그래픽스 렌더링 명령들을 프로세싱하기 위하여, CPU (6) 는 하나 이상의 그래픽스 렌더링 커맨드들을 GPU (12) 에 발행하여 GPU (12) 로 하여금 그래픽스 데이터의 렌더링의 일부 또는 전부를 수행하게 할 수도 있다. 일부 예들에서, 렌더링될 그래픽스 데이터는 그래픽스 프리미티브들의 리스트, 예를 들어, 점들, 선들, 삼각형들, 사변형 (quadralateral) 들, 삼각형 스트립들 등을 포함할 수도 있다.
메모리 제어기 (8) 는 시스템 메모리 (10) 로 들어가고 나오는 데이터의 전송을 용이하게 한다. 예를 들어, 메모리 제어기 (8) 는 메모리 판독 및 기입 커맨드를 수신하고, 메모리 (10) 에 대해 그러한 커맨드들을 서비스하여 컴퓨팅 디바이스 (2) 에서의 컴포넌트들에 메모리 서비스를 제공할 수도 있다. 메모리 제어기 (8) 는 시스템 메모리 (10) 에 통신가능하게 커플링된다. 메모리 제어기 (8) 가 CPU (6) 및 시스템 메모리 (10) 양자로부터 분리된 프로세싱 모듈인 것으로서 도 1 의 예시적인 컴퓨팅 디바이스 (2) 에 도시되지만, 다른 예들에 있어서, 메모리 제어기 (8) 의 기능성의 일부 또는 전부는 CPU (6) 및 시스템 메모리 (10) 중 하나 또는 양자 모두 상에서 구현될 수도 있다.
시스템 메모리 (10) 는, CPU (6) 에 의한 실행을 위해 액세스가능한 프로그램 모듈들 및/또는 명령들 및/또는 CPU (6) 상에서 실행하는 프로그램들에 의한 사용을 위한 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 사용자 애플리케이션들 및 그 애플리케이션들과 연관된 그래픽스 데이터를 저장할 수도 있다. 시스템 메모리 (10) 는 부가적으로, 컴퓨팅 디바이스 (2) 의 다른 컴포넌트들에 의해 사용하기 위한 및/또는 그 다른 컴포넌트들에 의해 생성된 정보를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 GPU (12) 에 대한 디바이스 메모리로서 작용할 수도 있으며, GPU (12) 에 의해 동작될 데이터 뿐 아니라 GPU (12) 에 의해 수행된 동작들로부터 기인한 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 텍스처 버퍼들, 심도 버퍼들, 스텐실 버퍼들, 정점 버퍼들, 프레임 버퍼들 등의 임의의 조합을 저장할 수도 있다. 또한, 시스템 메모리 (10) 는 GPU (12) 에 의한 프로세싱을 위한 커맨드 스트림들을 저장할 수도 있다. 시스템 메모리 (10) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들, 이를 테면 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 판독 전용 메모리 (ROM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체들 또는 광학 저장 매체들을 포함할 수도 있다.
GPU (12) 는 하나 이상의 그래픽스 프리미티브들을 디스플레이 (18) 에 렌더링하기 위해 그래픽스 동작들을 수행하도록 구성될 수도 있다. 따라서, CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들 중 하나가 그래픽스 프로세싱을 요구할 경우, CPU (6) 는 디스플레이 (18) 로의 렌더링을 위해 그래픽스 커맨드들 및 그래픽스 데이터를 GPU (12) 에 제공할 수도 있다. 그래픽스 커맨드들은 예를 들어 드로잉 커맨드들, 예컨대 드로 콜, GPU 상태 프로그래밍 커맨드들, 메모리 전달 커맨드들, 범용 컴퓨팅 커맨드들, 커널 실행 커맨드들 등을 포함할 수도 있다. 일부 예들에서, CPU (6) 는 커맨드들 및 그래픽스 데이터를 GPU (12) 에 의해 액세스될 수도 있는 메모리 (10) 에 기입함으로써 GPU (12) 에 커맨드들 및 그래픽스 데이터를 제공할 수도 있다. 일부 예들에서, GPU (12) 는 CPU (6) 상에서 실행하는 애플리케이션들을 위한 범용 컴퓨팅을 수행하도록 추가로 구성될 수도 있다.
GPU (12) 는, 일부 경우들에 있어서, CPU (6) 보다 더 효율적인 벡터 동작들의 프로세싱을 제공하는 고도-병렬 구조로 구축될 수도 있다. 예를 들어, GPU (12) 는, 다중의 정점들 또는 픽셀들 상에서 병렬 방식으로 동작하도록 구성되는 복수의 프로세싱 엘리먼트들을 포함할 수도 있다. GPU (12) 의 고도-병렬 성질은, 일부 경우들에서, CPU (6) 를 이용하여, 장면을 직접 디스플레이 (18) 에 드로잉하는 것보다 더 신속하게, GPU (12) 가 그래픽스 이미지들 (예를 들어, GUI들 및 2 차원 (2D) 및/또는 3차원 (3D) 그래픽스 장면들) 을 디스플레이 (18) 상에 드로잉하게 할 수도 있다. 또한, GPU (12) 의 고도 병렬 성질은 GPU (12) 가 CPU (6) 보다 더 빨리 범용 컴퓨팅 애플리케이션들을 위한 소정 유형의 벡터 및 행렬 동작들을 프로세싱하게 할 수도 있다.
GPU (12) 는 일부 경우에, 컴퓨팅 디바이스 (2) 의 마더보드 내에 통합될 수도 있다. 다른 경우들에서, GPU (12) 는 컴퓨팅 디바이스 (2) 의 마더보드에서의 포트에 설치된 그래픽스 카드 상에 존재할 수도 있거나 또는 컴퓨팅 디바이스 (2) 와 상호동작하도록 구성된 주변 디바이스 내에 달리 통합될 수도 있다. 추가 경우들에서, GPU (12) 는 시스템 온 칩 칩 (SoC) 을 형성하는 CPU (6) 와 동일한 마이크로칩 상에 위치될 수도 있다. GPU (12) 는 하나 이상의 프로세서들, 예컨대 마이크로프로세서들, 주문형 집적회로들 (ASIC들), 필드 프로그래밍가능 로직 어레이들 (FPGA들), 디지털 신호 프로세서들 (DSP들), 또는 다른 등가의 집적된 회로들 또는 이산 로직 회로들을 포함할 수도 있다.
GPU (12) 는 GPU 로컬 메모리 (14) 에 직접 커플링될 수도 있다. 따라서, GPU (12) 는 버스 (20) 를 반드시 사용하지 않으면서 데이터를 GPU 로컬 메모리 (14) 로부터 판독하고 이 GPU 로컬 메모리 (14) 에 기입할 수도 있다. 즉, GPU (12) 는 오프칩 메모리 대신에, 로컬 저장부를 이용하여 국부적으로 데이터를 프로세싱할 수도 있다. 이는 GPU (12) 가 무거운 버스 트래픽을 경험할 수도 있는 버스 (20) 를 통해 데이터를 판독 및 기입하기 위한 GPU (12) 의 필요성을 제거함으로써 더 효율적인 방식으로 동작하게 한다. 하지만, 일부 경우들에서, GPU (12) 는 별도의 캐시를 포함하지 않을 수도 있지만, 대신 버스 (20) 를 통해 시스템 메모리 (10) 를 활용할 수도 있다. GPU 로컬 메모리 (14) 는, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체들 또는 광학 저장 매체들과 같은 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
CPU (6) 및/또는 GPU (12) 는 시스템 메모리 (10) 에 할당되는 프레임 버퍼에 렌더링된 이미지 데이터를 저장할 수도 있다. 디스플레이 프로세서 (16) 는 프레임 버퍼로부터 데이터를 취출하며, 렌더링된 이미지 데이터에 의해 표현된 이미지를 디스플레이하도록 디스플레이 (18) 를 구성할 수도 있다. 일부 예들에서, 디스플레이 프로세서 (16) 는, 프레임 버퍼로부터 취출된 디지털 값들을 디스플레이 (18) 에 의해 소비가능한 아날로그 신호로 변환하도록 구성된 디지털-아날로그 변환기 (DAC) 를 포함할 수도 있다. 다른 예들에서, 디스플레이 프로세서 (16) 는 프로세싱을 위해 디지털 값들을 디스플레이 (18) 로 직접 패스할 수도 있다. 디스플레이 (18) 는 모니터, 텔레비전, 프로젝션 디바이스, 액정 디스플레이 (LCD), 플라즈마 디스플레이 패널, 발광 다이오드 (LED) 어레이, CRT (cathode ray tube) 디스플레이, 전자 종이, SED (surface-conduction electron-emitted display), 레이저 텔레비전 디스플레이, 나노결정 디스플레이 또는 다른 유형의 디스플레이 유닛을 포함할 수도 있다. 디스플레이 (18) 는 컴퓨팅 디바이스 (2) 내에 통합될 수도 있다. 예를 들어, 디스플레이 (18) 는 이동 전화 핸드셋 또는 태블릿 컴퓨터의 스크린일 수도 있다. 대안으로, 디스플레이 (18) 는 유선 또는 무선 통신 링크를 통해 컴퓨팅 디바이스 (2) 에 커플링된 독립형 (stand-alone) 디바이스일 수도 있다. 예를 들어, 디스플레이 (18) 는 케이블 또는 무선 링크를 통해 개인용 컴퓨터에 접속된 컴퓨터 모니터 또는 플랫 패널 디스플레이일 수도 있다.
일부 예들에서, GPU (12) 는 어떤 면에서 포비티드 렌더링으로서 지칭되는 상이한 이미지 해상도들로 이미지 콘텐츠를 생성할 수도 있다. 보다 상세하게 기술된 바와 같이, GPU (12) 는 먼저 전체 해상도보다 낮은 픽셀 해상도로 이미지 콘텐츠를 렌더링하고, 그 후 업샘플링된 이미지 콘텐츠를 생성하기 위해 이미지 콘텐츠를 업샘플링할 수도 있다. 업샘플링된 이미지 콘텐츠의 이미지 해상도는 GPU (12) 가 전체 픽셀 해상도로 렌더링된 부분의 이미지 해상도보다 낮을 수도 있다.
픽셀 해상도 및 이미지 해상도는 혼동되지 않아야 한다. 픽셀 해상도는 업샘플링 이전에 이미지 표면의 일부에 대해 렌더링된 픽셀들의 수를 지칭한다. 더 높은 픽셀 해상도를 갖는 이미지 콘텐츠는 더 낮은 픽셀 해상도 이미지 콘텐츠의 픽셀들에 대해 독립적으로 생성된 픽셀 값들보다 높은 픽셀 해상도 이미지 콘텐츠의 픽셀들에 대해 더 독립적으로 생성된 픽셀 값들이 있다는 것을 의미한다. 예를 들어, 픽셀 셰이더는 픽셀당 단위로 실행되어 그 부분에 대한 각각의 픽셀을 렌더링할 수도 있다. 업샘플링은 픽셀 셰이더가 픽셀 값들을 생성한 후에 발생할 수도 있다. 업샘플링에 있어서, 업샘플링된 픽셀의 픽셀 값들은 또 다른 픽셀의 픽셀 값들에 기초하여 생성된다.
결과의 업샘플링된 이미지 콘텐츠는 연관된 이미지 해상도를 갖는다. 이미지 해상도는 최종 이미지 콘텐츠가 얼마나 선명하게 또는 희미하게 보이는지를 표시한다. 업샘플링에 있어서, 픽셀들에 대한 픽셀 값들은 독립적으로 생성되지 않고, 오히려 이웃한 픽셀들의 최종 픽셀 값들은 업샘플링된 이미지 콘텐츠의 일부인 픽셀의 픽셀 값들을 생성하기 위해 복사, 보간 또는 평균화하는데 사용된다. 예를 들어, 4 의 팩터로 업샘플링하는 한 가지 방법은 픽셀에 대한 픽셀 값들을 3 번 복사하고 업샘플링된 이미지 콘텐츠의 현재 픽셀에 대해 우측, 하단 및 하단-우측에 있는 픽셀들의 픽셀 값들을 생성하는 것이다.
따라서, 업샘플링은 주어진 영역에서의 픽셀들의 수를 증가시킬 수도 있지만, 독립적으로 생성된 새로운 이미지 콘텐츠가 부가되지 않기 때문에 이미지가 선명하거나 명확하게 보이지 않을 수도 있다. 이에 따라, 이러한 업샘플링된 부분에서의 이미지 콘텐츠는 업샘플링으로 인해 희미하게 보일 수도 있고, 이로써 그 업샘플링된 부분의 이미지 해상도가 다른 부분들의 이미지 해상도보다 낮을 수도 있다. 기재된 바와 같이, 부분의 이미지 해상도는 이미지 부분이 홀딩하는 상세의 측정이다. GPU (12) 가 (예를 들어, 업샘플링을 통해) 부가 픽셀들을 추가하지만 상세가 증가하지 않으면, 이미지 해상도는 떨어진다.
이미지 해상도는 업샘플링의 양에 대해 역으로 상관될 수도 있다. GPU (12) 가 수행하는 업샘플링이 더 많을수록 이미지 해상도는 더 낮아질 것이다. 예를 들어, GPU (12) 가 16x 로 업샘플링한 부분의 이미지 콘텐츠의 이미지 해상도는 GPU (12) 가 2x 로 업샘플링했거나 업샘플링을 필요로 하지 않았던 부분의 이미지 콘텐츠의 이미지 해상도보다 낮다.
GPU (12) 가 상이한 이미지 해상도에서 이미지 콘텐츠를 생성할 수도 있는 다양한 이유들이 있을 수도 있다. 일 예로서, 더 낮은 픽셀 해상도의 이미지 콘텐츠를 렌더링하는 것은 일반적으로 더 높은 픽셀 해상도의 이미지 콘텐츠를 렌더링하는 것보다 적은 전력을 필요로 하는데, 이는 더 낮은 픽셀 해상도 이미지 콘텐츠에서 프로세싱할 픽셀들이 더 적기 때문이다. 예를 들어, GPU (12) 는 픽셀 셰이더가 실행될 때마다 전력을 소비한다. 더 낮은 픽셀 해상도 이미지 콘텐츠에 대해, 픽셀 셰이더의 실행은 더 적은데, 이는 더 높은 픽셀 해상도 이미지 콘텐츠에 대해서보다 더 적은 픽셀들이 있기 때문이다. 업샘플링은 독립적인 픽셀 값들을 생성하는 것보다 적은 전력을 필요로 하는 경향이 있다 (예를 들어, 동작들이 더 적기 때문). 독립적인 픽셀 값들을 생성하는 것은 업샘플링의 일부로서 이웃하는 픽셀들을 평균화하거나 복사하는 것과 비교하여 시간-및 전력-인텐시브인 픽셀 셰이더들의 인스턴스들의 실행을 필요로 할 수도 있다. 따라서, 전체 픽셀 해상도에 비해 낮은 픽셀 해상도에서 이미지 콘텐츠를 생성한 다음 업샘플링하여 전체 이미지 해상도에 비해 낮은 이미지 해상도에서 이미지 콘텐츠를 생성하는 것은 전체 이미지 해상도에서 이미지 콘텐츠를 생성하는 것보다 적은 전력을 소비한다.
다른 예로서, 상이한 이미지 해상도에서 이미지 콘텐츠를 생성하는 것은 뷰어의 주의를 소정 부분들에 포커싱하는데 사용될 수 있다. 더 높은 이미지 해상도의 이미지 콘텐츠는 더 낮은 이미지 해상도의 이미지 콘텐츠보다 선명하게 보이고, 뷰어는 더 높은 이미지 해상도 부분 또는 부분들에 자동으로 포커싱하는 경향이 있다. GPU (12) 로 하여금 상이한 픽셀 해상도에서 이미지 콘텐츠를 렌더링하게 하고, 그 후 업샘플링하여 상이한 이미지 해상도에서 이미지 콘텐츠를 생성함으로써, 콘텐츠 제공자는 뷰어가 다른 영역들보다 더 많은 관심이 있을 수도 있는 특정 영역들에 포커싱되는 것을 보장함으로써, 우수한 뷰잉 경험을 유발할 수 있다.
따라서, 일부 경우들에서, GPU (12) 는 뷰어가 포커싱해야 하는 부분들에 대해 고해상도로 이미지 콘텐츠를 생성하는 동안 프로세싱 또는 몇몇 픽셀들로 인한 전력 소비를 감소시키기 위해 포비티드 렌더링을 수행할 수도 있다. 포비티드 렌더링에 대한 부가적인 이유들이 있을 수도 있으며, 예시의 기법들은 이러한 포비티드 렌더링에 대한 특정 이유들에 제한되는 것으로 고려되지 않아야 한다.
예시의 기법들은 GPU (12) 가 그래픽스 렌더링을 위해 2-패스 프로세싱 스킴을 수행하는 예들에서와 같이, 포비티드 렌더링을 수행하는 방법들을 기술한다. 제 1 패스는 비닝 패스로 지칭되며, 여기에서는 GPU (12) 가 어느 프리미티브들이 어느 빈 (또한 타일이라고도 함) 에 속하는지 및 어느 프리미티브들이 가시적인지 (예를 들어, 가시성 정보를 생성하는지) 를 결정한다. 렌더링 패스로서 지칭되는 제 2 패스에서, GPU (12) 는 어느 프리미티브가 어느 타일에 속하는지 및 프리미티브들의 가시성에 기초하여 각각의 타일 (예를 들어, 빈) 을 순차적으로 렌더링한다.
이러한 듀얼 패스 그래픽스 프로세싱 아키텍처들 (때때로 스트림아웃 기반 비닝 아키텍처들로서 지칭됨) 은 다양한 이유들로 유용할 수도 있다. 일 예로서, 도메인 셰이더들, 테셀레이션 및/또는 지오메트리 셰이더들와 같은 부가 프로세싱 단계들이 GPU (12) 에 추가될 수 있고, 시간-분리된 지오메트리 및 래스터화 프로세싱으로 인한 비닝 및 렌더링의 효율적인 오버랩이 있다 (예를 들어, GPU (120) 는 다음 표면 상에서 비닝을 수행하면서 하나의 이미지 표면을 렌더링할 수도 있다).
이 개시에서 설명된 예시의 기법들에서, GPU (12) 는 비닝 패스를 수행할 수도 있고, 그 후 렌더링 패스 동안, GPU (12) 는 그 타일에서의 이미지 콘텐츠의 이미지 해상도에 기초하여 타일들의 각각에 대해 이미지 콘텐츠를 렌더링할 수도 있다. 예를 들어, CPU (6) 는 GPU (12) 가 렌더링할 이미지 표면의 상이한 부분들에 대한 이미지 해상도를 정의할 수도 있다. 타일을 렌더링하는데 있어서, GPU (12) 는 CPU (6) 에 의해 정의된 바와 같이 상이한 부분들에 대한 이미지 해상도에 기초하여 그 타일에 대한 이미지 콘텐츠의 이미지 해상도를 결정할 수도 있다. GPU (12) 는 그 타일에 대한 이미지 콘텐츠의 이미지 해상도에 기초하여 그 타일에 속하는 이미지 콘텐츠를 렌더링할 수도 있다.
예를 들어, 각각의 타일의 타일 크기는 NxN 일 수도 있다. 타일에서의 이미지 콘텐츠의 이미지 해상도가 전체 해상도에 대해 1/4 해상도이면, GPU (12) 는 NxN 타일에서 N/2xN/2 의 픽셀 해상도를 갖는 이미지 콘텐츠를 렌더링할 수도 있다 (예를 들어, 이미지 콘텐츠를 크기 N/2xN/2 픽셀 수로 렌더링함). 따라서, 타일에서의 픽셀들의 수와 비교하여 GPU (12) 가 렌더링하는 이미지 콘텐츠의 픽셀 수의 1/4 이 될 것이다. GPU (12) 는 각각의 타일에 대해 이러한 단계들을 반복할 수도 있다 (예를 들어, 그 타일에서의 이미지 콘텐츠의 이미지 해상도에 기초하여 그 타일에서의 이미지 콘텐츠를 렌더링함).
GPU (12) 는 각각의 타일에서의 이미지 콘텐츠를 타일 크기로 업샘플링하고 결과의 업샘플링된 이미지 콘텐츠를 시스템 메모리 (10) 에 출력할 수도 있다. 예를 들어, GPU (12) 는 타일에 대한 렌더링된 이미지 콘텐츠를 저장을 위해 로컬 메모리 (14) 에 출력할 수도 있고, 유사하게 각각의 타일에 대한 이미지 콘텐츠를 로컬 메모리 (14) 에 저장할 수도 있다. 이 예에서, 상이한 픽셀 해상도 때문에, 타일에 대한 이미지 콘텐츠의 크기는 타일의 크기와 상이할 수도 있고, 상이한 타일들에 대한 이미지 콘텐츠의 크기는 상이할 수도 있다. 로컬 메모리 (14) 로부터 시스템 메모리 (10) 로 이미지 콘텐츠를 기입하는 동안, GPU (12) 는 업샘플링된 이미지 콘텐츠가 타일의 크기가 되도록 타일들에 대한 이미지 콘텐츠를 업샘플링할 수도 있다.
업샘플링을 수행하기 위해, GPU (12) 는 하나 이상의 픽셀들의 픽셀 값을 업샘플링된 이미지 콘텐츠의 픽셀들로 복사, 보간 또는 평균화할 수도 있다. 예를 들어, 이미지 콘텐츠가 N/2xN/2 이면, 업샘플링하기 위해, GPU (12) 는 픽셀의 픽셀 값을 3 개의 이웃하는 픽셀들 (예를 들어, 우측, 하단 및 우측-하단 픽셀들) 에 복사하며, 이는 본질적으로 하나의 픽셀을 4 개의 픽셀들로 변환한다. GPU (12) 는 업샘플링 후에, 약간의 부가 필터링을 수행할 수도 있지만, 그러한 필터링은 선택적이다.
일부 예들에서, GPU (12) 는 이미지 콘텐츠를 시스템 메모리 (10) 에 기입하는 부분으로서 보다는 포스트-프로세싱 동작들의 부분으로서 업샘플을 수행할 수도 있다. 예를 들어, GPU (12) 가 하나 이상의 타일들의 이미지 콘텐츠를 생성한 후, 포스트-프로세싱의 부분으로서, GPU (12) 는 포스트-프로세싱 동작들 (예를 들어, 블러링, 흑백으로의 변환, 타임워핑 등) 을 적용할 수도 있으며, 포스트-프로세싱 동작들의 부분으로서, GPU (12) 는 하나 이상의 타일들의 이미지 콘텐츠를 업샘플링할 수도 있다. 다른 예로서, GPU (12) 는 각각의 타일에 대한 이미지 콘텐츠를 생성할 수도 있고, 프레임의 각각의 타일에 대한 이미지 콘텐츠를 생성한 후, GPU (12) 는 포스트-프로세싱 동작들의 부분으로서 업샘플링할 수도 있다. 일부 예들에서, GPU (12) 는 업샘플링없이 이미지 콘텐츠를 저장할 수도 있고, 디스플레이 프로세서 (16) 는 디스플레이 (18) 로의 기입의 부분으로서 업샘플링할 수도 있다.
GPU (12) 는 이미지 표면의 타일들의 세트가 이미지 표면의 다른 이미지 콘텐츠에 대한 이미지 해상도 미만 (예를 들어, 전체 해상도 미만) 인 이미지 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정할 수도 있다. GPU (12) 는 타일들의 각각의 크기보다 작은 크기로 그리고 타일들의 세트에서의 이미지 콘텐츠의 이미지 해상도에 기초하여 타일들에 세트에 대해 이미지 콘텐츠를 렌더링할 수도 있다. 예를 들어, GPU (12) 는 제 1 타일에 대한 이미지 해상도가 전체 해상도의 1/16 이라고 결정하고, N/4xN/4 (예를 들어, N/4xN/4 의 크기) 의 픽셀 해상도를 갖는 제 1 타일에 대한 이미지 콘텐츠를 렌더링할 수도 있으며, 여기서 NxN 은 타일의 크기이므로, N/4xN/4 은 NxN 보다 작다. GPU (12) 는 타일들의 세트에서의 이미지 콘텐츠를 업샘플링하여 타일들 각각의 크기와 동일한 크기를 갖는 업샘플링된 이미지 콘텐츠를 생성하고, 일 예로서 업샘플링된 이미지 콘텐츠를 시스템 메모리 (10) 에 출력할 수도 있다.
GPU (12) 가 이미지 표면의 상이한 부분들의 이미지 해상도를 결정하는 다양한 방식들이 있을 수도 있다. 일 예로서, CPU (6) 는 각각의 부분에 대해 픽셀 해상도를 정의할 수도 있는데, 이는 부분들이 업샘플링될 때 결과의 이미지 해상도가 그러한 부분들에 대한 이미지 해상도가 될 것이기 때문이다. 이 예에서, 픽셀 해상도 및 이미지 해상도는 동일할 수도 있다 (예를 들어, 타일에 대해 N/2xN/2 의 픽셀 해상도를 갖는 것은 이미지 해상도를 1/4 이미지 해상도가 되도록 정의하는 것과 실질적으로 동일하다). 다른 예로서, CPU (6) 는 이미지 표면의 부분들에 대한 이미지 해상도를 정의할 수도 있다. CPU (6) 는 형상 (예를 들어, 직사각형, 삼각형, 타원형 또는 다른 다각형) 및 그 좌표를 정의할 수도 있고, 절대적인 용어들 (예를 들어, 업샘플링 이전에 그 부분에 대해 렌더링되어야 하는 픽셀들의 수) 또는 상대적인 용어들 (예를 들어, 전체 이미지 해상도의 일부 팩터) 로 그 부분에 대한 이미지 해상도를 정의할 수도 있다. 일 예로서, CPU (6) 는 해상도의 대역 (예를 들어, 포비에이션의 상이한 레벨을 갖는 대역) 을 정의할 수도 있다. 이미지 표면의 중심에 대해, 이미지 표면의 상이한 부분들에 대해 상이한 해상도 (예를 들어, 포비에이션의 양) 을 정의하는 방식으로서, CPU (6) 는 원 주위의 원형 대역 (예를 들어, 링) 에 대해 포비에이션을 갖지 않는 원을 정의할 수도 있고, CPU (6) 는 1/4 해상도를 정의할 수도 있는 등이다.
CPU (6) 는 특정 이미지 해상도를 갖는 부분의 형상 및 위치에 관한 정보를 출력할 수도 있다. GPU (12) 는 이미지 표면의 상이한 부분들의 형상 및 위치의 정보 및 이미지 표면에서의 타일의 위치에 기초하여 타일에서 이미지 콘텐츠에 대한 이미지 해상도를 결정할 수도 있다.
일부 경우들에서, CPU (6) 가 이미지 부분의 크기 및 형상과 그 부분에 대한 특정 이미지 해상도를 정의하는 대신, GPU (12) 가 이미지 부분의 크기 및 형상과 그의 이미지 해상도를 정의하도록 구성될 수도 있다. 예를 들어, GPU (12) 는 제 1 이미지 해상도를 갖는 이미지 표면의 중심에서 반경 (R) 을 갖는 원, 제 2 이미지 해상도를 갖는 원 주의의 폭 (W0) 을 갖는 링, 제 3 이미지 해상도를 갖는 폭 (W0) 을 갖는 링 주위의 링 폭 (W1) 등을 정의하도록 구성될 수도 있다. 이미지 해상도를 정의하기 위한 다른 방식들이 가능하며 예시의 기법들은 이러한 예들에 제한되는 것으로 고려되지 않아야 한다.
특정 이미지 해상도를 갖는 이미지 부분의 크기 및/또는 형상은 타일의 크기 및/또는 형상과 동일하지 않을 수도 있다. 예를 들어, CPU (6) 가 이미지 부분을 타일 내에 부분적으로 맞춰지는 타원으로서 정의한다고 가정한다. 이 예에서, CPU (6) 는 타일 내의 타원 이미지 부분을 타일 내의 나머지 이미지 부분에 대한 제 2 해상도보다 작은 제 1 해상도를 갖는 것으로 정의할 수도 있다.
하나 이상의 예들에서, GPU (12) 는 타일에서의 이미지 콘텐츠가 전체에 걸쳐 동일한 이미지 해상도를 갖도록 (예를 들어, 타일에서의 모든 이미지 콘텐츠가 동일한 이미지 해상도를 갖도록) 이미지 콘텐츠를 렌더링할 수도 있다. CPU (6) 가 동일한 타일에서의 이미지 콘텐츠에 대해 2 개의 상이한 해상도 (예를 들어, 제 1 해상도 및 제 2 해상도) 를 정의하였을 수도 있지만, GPU (12) 는 그 타일에서의 이미지 콘텐츠의 픽셀 해상도가 균일하도록 이미지 콘텐츠를 렌더링할 수도 있다. 따라서, 이 예에서, GPU (12) 는 타일을 제 1 해상도, 제 2 해상도 또는 타일에 대해 균일한 일부 다른 해상도로 렌더링할지를 결정할 수도 있다.
특정 이미지 해상도를 갖는 이미지 부분이 전체 타일을 포괄하지 않는 경우, GPU (12) 는 그 타일의 이미지 콘텐츠를 렌더링하는 해상도를 결정하기 위해 다양한 팩터들을 활용할 수도 있다. 일 예로서, GPU (12) 는 대부분 또는 복수의 타일을 포함하는 이미지 콘텐츠의 부분을 결정하고, 그 부분에 대한 이미지 해상도를 결정하며, 타일의 이미지 콘텐츠를 픽셀 해상도로 렌더링하여 이미지 콘텐츠가 그 이미지 콘텐츠의 이미지 해상도가 결정된 이미지 해상도와 동일하게 업샘플링된다. 다른 예로서, GPU (12) 는 최고 해상도를 갖는 타일에서의 이미지 콘텐츠의 부분을 결정하고, 그 부분에 대한 이미지 해상도를 결정하며, 타일의 이미지 콘텐츠를 픽셀 해상도로 렌더링하여 이미지 콘텐츠가 업샘플링될 때 그 이미지 콘텐츠의 이미지 해상도가 결정된 이미지 해상도와 동일하다. 다른 예로서, GPU (12) 는 타일 내의 상이한 이미지 부분들의 상이한 이미지 해상도들의 평균 또는 가중화된 평균 (예를 들어, 더 큰 부분들이 더 많이 가중화됨) 을 결정하여 평균 이미지 해상도를 결정하고, 타일의 이미지 콘텐츠를 픽셀 해상도로 렌더링하여 이미지 콘텐츠가 업샘플링될 때 그 이미지 콘텐츠의 이미지 해상도가 결정된 평균 이미지 해상도와 동일하다. GPU (12) 가 타일에 대한 이미지 해상도를 결정하는 다른 방법들이 있을 수도 있으며, 기법들은 위의 예들에 제한되는 것으로 고려되지 않아야 한다.
위의 예들 중 하나 이상에서, 소정의 이미지 부분에 대한 이미지 해상도는 CPU (6) 에 의해 정의된 이미지 해상도와 상이할 수도 있다. 예를 들어, 위의 예에서는, 타일에 대해, 제 2 이미지 해상도를 갖는 이미지 콘텐츠 (예를 들어, 타일의 나머지 부분들) 보다 작은 제 1 이미지 해상도를 갖는 이미지 콘텐츠 (예를 들어, 이미지 콘텐츠의 타원) 가 있었다. GPU (12) 또는 CPU (6) 가 타일에 대한 이미지 콘텐츠가 제 2 이미지 해상도와 동일한 이미지 해상도를 가져야한다고 결정하면, CPU (6) 가 이미지 콘텐츠의 타원을 제 1 이미지 해상도를 갖는 것으로 정의하였더라도, 이미지 콘텐츠의 타원은 제 2 이미지 해상도와 동일할 수도 있다. 반대로, GPU (12) 또는 CPU (6) 가 타일에 대한 이미지 콘텐츠가 제 1 이미지 해상도와 동일한 이미지 해상도를 가져야한다고 결정하면, CPU (6) 가 이미지 콘텐츠의 타원을 배제하는 타일의 다른 부분들을 제 2 이미지 해상도를 갖는 것으로 정의하였더라도, 이미지 콘텐츠의 타원은 제 1 이미지 해상도와 동일할 수도 있다.
특정 이미지 해상도를 갖는 이미지 콘텐츠를 생성하기 위해, GPU (12) 는 먼저 더 낮은 픽셀 해상도에서 이미지 콘텐츠를 렌더링한 다음 이미지 콘텐츠를 업샘플링할 수도 있다 (또는 디스플레이 프로세서 (16) 가 업샘플링을 수행할 수도 있다). 더 낮은 픽셀 해상도에서 이미지 콘텐츠를 렌더링하는 하나의 방법은 이미지 콘텐츠를 타일 크기보다 작은 크기로 렌더링하는 것이다. GPU (12) 가 이미지 콘텐츠를 타일 크기보다 더 작은 크기로 렌더링하는 하나의 예시의 방법은 GPU (12) 가 더 작은 크기로 렌더링할 뷰포트를 정의하는 것이다. 예를 들어, GPU (12) 가 N/2xN/2 크기로 렌더링하는 것이면 (여기서 NxN 은 타일의 크기이다), GPU (12) 는 뷰포트를 (x, y) 에서 ((x+N / 2), (y+N/2)) 로 정의할 수도 있고, 여기서 x 는 타일의 상단-좌측 코너에 대한 x 좌표이고 y 는 타일의 상단-좌측 코너에 대한 y 좌표이다. 일부 예들에서, GPU (12) 보다는 CPU (6) 가 뷰포트를 정의할 수도 있다. 다른 예로서, CPU (6) 상에서 실행하는 애플리케이션은 어떠한 크기 변화없이 뷰포트를 정의 (예를 들어, 뷰포트를 타일의 크기로 정의) 할 수도 있고, CPU (6) 또는 GPU (12) 의 제어기 상에서 실행하는 그래픽스 드라이버는 그 후 뷰포트를 더 작은 크기로 리사이징하기 위해 뷰포트를 정의하는 커맨드를 수정할 수도 있다. GPU (12) 로 하여금 이미지 콘텐츠를 타일 크기보다 작은 크기로 렌더링하게 하는 다른 가능한 기법들이 가능하며, 이 기법들은 위의 예들에 제한되는 것으로 고려되지 않아야 한다.
따라서, 예시의 기법들은 GPU (12) 가 이미지 표면의 상이한 부분이 상이한 이미지 해상도에 있도록 이미지 콘텐츠를 포비티드 렌더링하는 방법을 제공한다. 예를 들어, 타일에 스냅되도록 (예를 들어, 타일의 동일한 크기이도록) 이미지 콘텐츠를 렌더링하기보다는, GPU (12) 는 타일의 이미지 콘텐츠를 타일보다 작은 크기로 렌더링할 수 있으며, 여기서 GPU (12) 거 렌더링하는 크기는 그 타일에서의 이미지 콘텐츠의 이미지 해상도 및 타일의 크기에 기초한다. 타일의 크기가 NxN 이고, 이미지 해상도가 전체 해상도의 절반이면, GPU (12) 는 그 타일에 대한 이미지 콘텐츠를 (NxN)(1/2)(즉, N/2xN 또는 N×N/2) 로 렌더링할 수도 있다. 이 예에서, 픽셀 해상도는 NxN/2 또는 N/2xN 이다. 다시, 픽셀 해상도는 주어진 영역에서 렌더링되는 픽셀들의 수를 정의하며 이미지 해상도는 이미지 콘텐츠에서의 상세의 양을 정의한다. GPU (12) 는 결과의 업샘플링된 이미지 콘텐츠가 타일의 것과 동일한 크기가 되도록 더 작은 크기로 렌더링된 이미지 콘텐츠를 업샘플링할 수도 있다. GPU (12) 는 타일들 각각에 대해 이러한 동작들을 반복할 수도 있다.
일부 예들에서, 업샘플링은 임의의 새로운 부가 이미지 콘텐츠를 이미지 표면에 추가하지 않고, 오히려 이웃하는 픽셀들의 픽셀 값들에 기초하여 픽셀 값들을 복사, 보간 또는 평균화함으로써 수행된다. 필요한 업샘플링의 양은 부분이 얼마나 희미하게 또는 선명하게 보이는지와 직접 상관될 수도 있다. 예를 들어, 16x 업샘플링되는 이미지 콘텐츠의 부분은 4x 업샘플링되는 이미지 콘텐츠의 부분보다 더 희미하게 보일 것이다. 타일의 이미지 콘텐츠를 타일의 크기보다 작은 크기로 렌더링한 다음, 타일의 크기로 업샘플링함으로써, 이미지 표면의 상이한 부분에서 상이한 이미지 해상도를 갖는 이미지 콘텐츠를 유발한다.
도 2 는 도 1 의 컴퓨팅 디바이스의 GPU (12) 및 메모리 (10) 를 더 상세히 도시하는 블록 다이어그램이다. 도 2 에 나타낸 바와 같이, CPU (6) 는 GPU (12) 및 메모리 (10) 에 통신가능하게 커플링되고, GPU (12) 는 CPU (6) 및 메모리 (10) 에 통신가능하게 커플링된다. GPU (12) 는, 일부 예들에서, CPU (6) 와 마더보드에 통합될 수도 있다. 추가적인 예들에서, GPU (12) 는 CPU (6) 를 포함하는 마더보드의 포트에 설치되는 그래픽스 카드 상에 구현될 수도 있다. 추가 예들에서, GPU (12) 는 CPU (6) 와 상호동작하도록 구성되는 주변 디바이스 내에 통합될 수도 있다. 부가 예들에서, GPU (12) 는 시스템 온 칩 (SoC) 을 형성하는 CPU (6) 와 동일한 마이크로칩 상에 위치될 수도 있다. CPU (6) 는 애플리케이션 (22), 그래픽스 API (30), GPU 드라이버 (32), 및 오퍼레이팅 시스템 (34) 을 실행하도록 구성된다.
GPU (12) 는 제어기 (36), 셰이더 코어 (38), 및 하나 이상의 고정-기능 유닛들 (42), 및 업샘플 회로 (42) 를 포함한다. 용이함을 위해, 로컬 메모리 (14) 는 또한 GPU (12) 의 일부인 것으로 도시되어 있지만, 또한 외부에 있을 수도 있다. 별도의 컴포넌트들로 도시되어 있지만, 일부 예들에서, 업샘플 회로 (42) 는 고정-기능 유닛 (40) 의 일부일 수도 있다. 업샘플 회로 (42) 는 타일에 대해 로컬 메모리 (14) 에 저장된 이미지 콘텐츠를 업샘플링하고 업샘플링된 이미지 콘텐츠를 메모리 (10) 에 출력할 수도 있다.
또한, 일부 예들에서, 업샘플 회로 (42) 는 디스플레이 프로세서 (16) 의 일부일 수도 있다. 설명의 용이함을 위해, 업샘플 회로 (42) 는 GPU (12) 의 일부로서 도시된다. 업샘플 회로 (42) 가 디스플레이 프로세서 (16) 의 일부인 예들에서, 업샘플 회로 (42) 는 하기에 기재된 방식으로 동작할 수도 있다.
소프트웨어 애플리케이션 (22) 은 그래픽 콘텐츠를 디스플레이되게 하는 하나 이상의 명령들 또는 비-그래픽스 태스크 (예를 들어, 범용 컴퓨팅 태스크) 를 GPU (12) 상에서 수행되게 하는 하나 이상의 명령들 중 적어도 일부를 포함할 수도 있다. 소프트웨어 애플리케이션 (22) 은 그래픽스 API (30) 에 명령들을 발행할 수도 있다. 그래픽스 API (30) 는 소프트웨어 애플리케이션 (22) 으로부터 수신된 명령들을 GPU 드라이버 (32) 에 의해 소비가능한 포맷으로 트랜슬레이트하는 런타임 서비스일 수도 있다. 일부 예들에서, 그래픽스 API (30) 및 GPU 드라이버 (32) 는 동일한 소프트웨어 서비스의 일부일 수도 있다.
GPU 드라이버 (32) 는 그래픽스 API (30) 를 통해 소프트웨어 애플리케이션 (22) 으로부터 명령들을 수신하고, GPU (12) 의 동작을 제어하여 명령들을 서비스한다. 예를 들어, GPU 드라이버 (32) 는 하나 이상의 커맨드 스트림들을 공식화하고, 커맨드 스트림들을 메모리 (10) 에 배치하고, 커맨드 스트림들을 실행할 것을 GPU (12) 에 명령할 수도 있다. GPU 드라이버 (32) 는 커맨드 스트림들을 메모리 (10) 에 배치하고 오퍼레이팅 시스템 (34) 을 통해 (예를 들어, 하나 이상의 시스템 호출들을 통해) GPU (12) 와 통신할 수도 있다.
제어기 (36) 는 커맨드 스트림들에 저장된 커맨드들을 취출하고, 셰이더 코어 (38) 및 하나 이상의 고정-기능 유닛들 (40) 상에서의 실행을 위해 커맨드들을 디스패치하도록 구성된다. 제어기 (36) 는 하나 이상의 고정-기능 유닛들 (40) 또는 셰이더 코어 (38) 및 하나 이상의 고정-기능 유닛들 (40) 의 서브세트 상에서의 실행을 위해 커맨드 스트림으로부터 커맨드들을 디스패치할 수도 있다. 제어기 (36) 는 GPU (12) 의 하드웨어일 수도 있고, GPU (12) 상에서 실행되는 소프트웨어 또는 펌웨어이거나, 또는 양자의 조합일 수도 있다.
셰이더 코어 (38) 는 프로그램가능 회로부 (예를 들어, 소프트웨어가 실행되는 프로세싱 코어들) 를 포함한다. 하나 이상의 고정-기능 유닛들 (40) 은 최소의 기능적 유연성으로 제한된 동작들을 수행하도록 구성된 고정 기능 회로부를 포함한다. 셰이더 코어 (38) 및 하나 이상의 고정-기능 유닛들 (40) 은 그래픽스 프로세싱을 수행하도록 구성된 그래픽스 파이프라인을 함께 형성한다.
셰이더 코어 (38) 는 CPU (6) 로부터 GPU (12) 로 다운로드되는 하나 이상의 셰이더 프로그램들을 실행하도록 구성될 수도 있다. 셰이더 프로그램은, 일부 예들에서, 하이-레벨 셰이딩 언어 (예를 들어, OpenGL 셰이딩 언어 (GLSL), 하이 레벨 셰이딩 언어 (HLSL), Cg (C for Graphics) 셰이딩 언어 등) 로 기입된 프로그램의 컴파일링된 버전일 수도 있다. 일부 예들에서, 셰이더 코어 (38) 는 병렬로 (예를 들어, SIMD 파이프라인) 동작하도록 구성되는 복수의 프로세싱 유닛들을 포함할 수도 있다. 셰이더 코어 (38) 는 셰이더 프로그램 명령들을 저장하는 프로그램 메모리 및 프로그램 메모리에서의 현재 명령이 실행되고 있는지 또는 다음 명령이 페치되어야 하는지를 표시하는 실행 상태 레지스터 (예를 들어, 프로그램 카운터 레지스터) 를 가질 수도 있다. 셰이더 코어 (38) 상에서 실행되는 셰이더 프로그램들의 예들은, 예를 들어, 정점 셰이더들, 픽셀 셰이더들 (또한 프래그먼트 셰이더들로 지칭됨), 지오메트리 셰이더들, 헐 (hull) 셰이더들, 도메인 셰이더들, 컴퓨트 셰이더들, 및/또는 통합된 셰이더들을 포함한다.
고정-기능 유닛들 (40) 은 소정의 기능들을 수행하기 위해 하드-와이어되는 하드웨어를 포함할 수도 있다. 고정 기능 하드웨어가, 예를 들어, 하나 이상의 제어 신호들을 통해, 상이한 기능들을 수행하도록 구성가능할 수도 있지만, 고정 기능 하드웨어는 통상적으로는 사용자-컴파일링된 프로그램들을 수신 가능한 프로그램 메모리를 포함하지 않는다. 일부 예들에서, 하나 이상의 고정-기능 유닛들 (40) 은, 예를 들어, 래스터 동작들 (예를 들어, 심도 테스팅, 시저 (scissors) 테스팅, 알파 블렌딩 등) 을 수행하는 프로세싱 유닛들을 포함할 수도 있다.
CPU (6) 의 GPU 드라이버 (32) 는 커맨드 스트림들을 메모리 (10) 에 기입하도록 구성될 수도 있고, GPU (12) 의 제어기 (36) 는 메모리 (10) 로부터 커맨드 스트림들의 하나 이상의 커맨드들을 판독하도록 구성될 수도 있다. 일부 예들에서, 커맨드 스트림들 중 하나 또는 양자 모두는 메모리 (10) 에 링 버퍼로서 저장될 수도 있다. 링 버퍼는 CPU (6) 및 GPU (12) 가 링 버퍼로의 데이터의 기입 및 링 버퍼로부터의 데이터의 판독과 연관된 동기화된 상태 변수들을 유지하는 순환 어드레싱 스킴을 가진 버퍼일 수도 있다. 예를 들어, 제 1 커맨드 스트림이 링 버퍼이면, CPU (6) 및 GPU (12) 의 각각은 링 버퍼에서 기입될 다음 어드레스를 표시하는 기입 포인터, 및 링 버퍼에서 판독될 다음 어드레스를 표시하는 판독 포인터를 저장할 수도 있다.
CPU (6) 가 새로운 커맨드를 링 버퍼에 기입할 때, CPU (6) 는 CPU (6) 내의 기입 포인터를 업데이트하고 GPU (12) 내의 기입 포인터를 업데이트할 것을 GPU (12) 에 명령한다. 유사하게, GPU (12) 가 링 버퍼로부터 새로운 커맨드를 판독할 때, GPU (12) 는 GPU (12) 내의 판독 포인터를 업데이트하고 CPU (6) 내의 판독 포인터를 업데이트할 것을 CPU (6) 에 명령할 수도 있다. 다른 동기화 메커니즘들이 가능하다. 판독 및/또는 기입 포인터들이 링 버퍼를 위해 할당된 어드레스들의 범위에서의 가장 높은 어드레스에 도달할 때, 판독 및/또는 기입 포인터들은 순환 어드레싱 스킴을 구현하기 위해 가장 낮은 어드레스로 랩 어라운드할 수도 있다.
이제 예시의 GPU 드라이버 (32) 및 예시의 GPU 제어기 (36) 의 예시의 동작이 도 2 에 대하여 설명될 것이다. GPU 드라이버 (32) 는 GPU (12) 에 의해 수행될 범용 컴퓨팅 동작들 및/또는 그래픽스 동작들을 특정하는 하나 이상의 명령들을 소프트웨어 애플리케이션 (22) 으로부터 수신한다. GPU 드라이버 (32) 는 GPU 제어기 (36) 에 의해 액세스가능한 메모리 (10) 에 출력 커맨드 스트림을 배치한다. GPU 드라이버 (32) 는 소프트웨어 애플리케이션 (22) 에 대응하는 커맨드 스트림이 프로세싱에 이용가능하다는 것을 GPU 제어기 (36) 에 통지한다. 예를 들어, GPU 드라이버 (32) 는 커맨드 스트림이 실행할 준비가 되었음을 표시하는 하나 이상의 값들을 GPU 레지스터 (예를 들어, GPU (12) 에 의해 폴링된 GPU 하드웨어 레지스터 및/또는 GPU (12) 에 의해 폴링된 GPU 메모리-매핑된 레지스터) 에 기입할 수도 있다.
커맨드 스트림이 실행할 준비가 되었다는 통지 시에, GPU (12) 의 제어기 (36) 는 커맨드 스트림을 실행하는 것을 시작하기 위해 리소스들이 현재 GPU (12) 상에서 이용가능한지를 결정할 수도 있다. 리소스들이 이용가능하면, 제어기 (36) 는 커맨드 스트림에서 커맨드들을 디스패치하기 시작한다.
그래픽스 프로세싱의 일부로서, CPU (6) 는 소정의 그래픽스 프로세싱 태스크들을 GPU (12) 로 오프로드할 수도 있다. 예를 들어, 애플리케이션 (22) 은 그래픽 오브젝트를 형성하도록 상호접속하는 프리미티브들의 복수의 정점들의 속성들에 대한 속성 데이터를 생성할 수도 있다. 애플리케이션 (22) 은 속성 데이터를 메모리 (10) 의 정점 버퍼에 저장할 수도 있다. GPU 드라이버 (32) 는 디스플레이를 위해 그래픽스 데이터를 생성하기 위한 프로세싱을 위해 정점들의 속성들에 대한 속성 데이터를 취출하도록 제어기 (36) 에 명령할 수도 있다.
이 개시에서 설명된 예들에서, 애플리케이션 (22) 은 GPU 드라이버 (32) 가 GPU (12) 에 송신할 이미지 해상도 정보를 생성한다. 이미지 해상도 정보는 GPU (12) 가 생성할 이미지 표면의 상이한 부분들에 대한 이미지 해상도를 정의한다.
예로서, 애플리케이션 (22) 은 이미지 해상도들의 대역들을 정의할 수도 있다. 특정 대역의 이미지 콘텐츠에 대하여, GPU (12) 는 이미지 콘텐츠가 속하는 대역에 기초하여 이미지 콘텐츠를 렌더링할 수도 있다. 예를 들어, GPU (12) 는 프리미티브의 정점들이 속하는 대역을 결정할 수도 있고, 프리미티브의 정점들이 속하는 대역에 대한 이미지 해상도에 기초하여 프리미티브를 렌더링할 수도 있다. 높은 관심의 부분들에 대해, 애플리케이션 (22) 은 상대적으로 높은 이미지 해상도를 정의할 수도 있고, 낮은 관심의 부분들에 대해, 애플리케이션 (22) 이 상대적으로 낮은 이미지 해상도를 정의할 수도 있다.
다른 예로서, 애플리케이션 (22) 은 정점 버퍼에 저장된 속성 데이터의 일부로서 정점들의 각각에 대한 이미지 해상도를 정의할 수도 있다. 이러한 예에서, 더 높은 관심 영역을 갖는 부분들 (예를 들어, 뷰어가 뷰잉 중이어야 하는 부분들) 에 위치되는 프리미티브들의 정점들에 대해, 애플리케이션 (22) 은 그러한 영역들을 상대적으로 높은 이미지 해상도를 갖는 것으로서 정의하고, 더 낮은 관심의 영역들을 갖는 다른 부분들을 상대적으로 낮은 이미지 해상도를 갖는 것으로서 정의할 수도 있다.
이미지 해상도의 정의는 전체 이미지 해상도에 대한 비율일 수도 있다. 예를 들어, 이미지 해상도의 정의는 1/4 해상도, 1/16 해상도 등일 수도 있다. 비율 (예를 들어, 1/4, 1/16 등) 로서의 이미지 해상도의 정의는 픽셀 해상도를 비율로 정의하는 것과 동의어일 수도 있다.
예를 들어, 전체 픽셀 해상도는 디스플레이 (18) 상의 픽셀들의 수를 지칭한다. 디스플레이 (18) 가 2048 픽셀 폭 및 1536 픽셀 폭이고, GPU (12) 가 2048 픽셀 바이 1536 픽셀을 갖는 이미지 표면을 렌더링하면, 이미지 표면은 전체 픽셀 해상도에 있다. 그러나, GPU (12) 가 128 픽셀 바이 96 픽셀을 갖는 이미지 표면을 렌더링하면, GPU (12) 는 이미지 표면을 1/256 픽셀 해상도 (예를 들어, 2048/16x1536/16) 로 렌더링하였다. 그 후 GPU (12) 가 1/256 픽셀 해상도를 갖는 이미지 표면을 256x 팩터로 업샘플링하면, 결과의 업샘플링된 이미지는 2048x1536 픽셀들을 포함할 것이지만, 이미지 해상도는 1/256 전체 이미지 해상도일 것이다. 비교로서, 업샘플링되는 1/256 픽셀 해상도를 갖는 이미지 표면은 전체 픽셀 해상도를 갖는 이미지 표면보다 희미하게 보일 것이다. 이는 업샘플링이 독립적인 새로운 픽셀 값들을 생성하는 대신 이미 존재하는 픽셀 값들에 기초하여 픽셀들에 대한 픽셀 값들을 생성하기 때문에 업샘플링된 이미지 콘텐츠의 상세가 더 적기 때문이다.
이미지 해상도 및 픽셀 해상도에 대한 위의 설명은 전체 이미지 표면에 관하여 기재되었지만, 동일한 개념이 이미지 표면의 부분에 적용된다. 예를 들어, 이미지 콘텐츠가 NxN 크기의 타일로 렌더링되고, 애플리케이션 (22) 으로부터의 이미지 해상도 정보가 NxN 크기의 타일에서 이미지 콘텐츠에 대한 이미지 해상도가 1/4 해상도인 것을 표시하면, 이미지 콘텐츠를 N/2xN/2 크기로 렌더링하고 그 후 4 의 팩터로 업샘플링하는 것은 1/4 이미지 해상도를 갖는 그 타일에 대한 이미지 콘텐츠를 유발한다.
애플리케이션 (22) 이 정점 단위로 이미지 해상도를 정의하는 예들에서, 애플리케이션 (22) 은 각각의 프리미티브에 대한 이미지 해상도를 그 프리미티브의 정점들에 대한 부가 속성 데이터로서 정의할 수도 있다. 이미지 표면에 복수의 프리미티브들이 있기 때문에, 상이한 이미지 해상도를 갖는 복수의 이미지 부분들이 있을 것이다. 예를 들어, 애플리케이션 (22) 은 전체 이미지 해상도에 있어야 하는 프리미티브들의 그룹을 포함하여 제 1 그룹의 프리미티브들은 제 1 이미지 해상도에 있어야 하고, 제 2 그룹의 프리미티브들은 제 2 이미지 해상도에 있어야 하는 것 등을 정의할 수도 있다.
상이한 이미지 해상도를 갖는 프리미티브 그룹의 각각은 개개의 형상들 (예를 들어, 타원들) 을 형성할 수도 있다. 따라서, 일부 예들에서 애플리케이션 (22) 은 이미지 표면의 상이한 부분에 대해 상이한 이미지 해상도를 정의할 수도 있으며, 여기서 각각의 부분은 특정 다각형 형상 (예를 들어, 타원형, 직사각형 등) 이다. 애플리케이션 (22) 이 (예를 들어, 이미지 해상도의 대역을 포함하는) 상이한 이미지 해상도를 갖는 이미지 부분들을 정의하는 다양한 다른 방식들이 있을 수도 있으며, 이미지 해상도 정보에 대한 정점들의 정점 속성들의 사용이 하나의 예이다.
상술한 바와 같이, GPU (12) 는 비닝 패스 및 렌더링 패스의 2 패스로 이미지 콘텐츠를 생성하도록 구성될 수도 있다. 비닝 패스에서, GPU 드라이버 (32) 및/또는 제어기 (36) 는 타일 (빈으로서 또한 지칭됨) 의 크기를 정의할 수도 있으며, 여기서 각각의 타일은 크기가 NxN (예를 들어, NxN 픽셀 수) 이다. 타일들이 정사각형이거나 모두 동일한 크기일 필요는 없다. 설명을 용이하게 하기 위해, 다음은 동일한 크기를 갖는 정사각형 타일에 대하여 설명된다.
그 후, 제어기 (36) 는 셰이더 코어 (38) 및 고정-기능 유닛들 (40) 로 하여금 어느 프리미티브들이 어느 타일에 속하고 어느 정점들이 가시적인지를 결정하기 위해 개개의 동작들을 수행하게 할 수도 있다. 렌더링 패스에서, 제어기 (36) 는 셰이더 코어 (38) 및 고정-기능 유닛들 (40) 로 하여금 타일 바이 타일 단위로 이미지 콘텐츠를 렌더링하기 위해 타일당 단위로 개개의 동작들을 수행하게 할 수도 있다. GPU (12) 는 결과의 이미지 콘텐츠를 취출 및 디스플레이하기 위해 메모리 (10) 에 저장한다.
그래픽스 프로세싱의 일부는 셰이더 코어 (38) 상에서 정점 셰이더를 실행하는 GPU (12) 에 의해 일반적으로 수행되는 정점 프로세싱을 포함한다. 예를 들어, 정점 셰이더는 좌표 변환, 조명, 셰이딩 및 각각의 정점의 속성들의 속성 데이터에 대한 다른 그러한 프로세스들을 수행할 수도 있다. 애플리케이션 (22) 은 정점 셰이더와 결합될 수도 있고, 애플리케이션 (22) 은 셰이더 코어 (38) 상의 실행을 위해 정점 셰이더에 대한 오브젝트 코드를 취출하도록 제어기 (36) 에 명령하는 커맨드를 GPU 드라이버 (32) 를 통해 발행할 수도 있다.
GPU (12) 는 비닝 패스의 일부로서 정점 셰이더를 실행할 수도 있다. 정점 셰이더는 애플리케이션 (22) 에 의해 정의된 바와 같이 프리미티브들에 대한 정점 좌표들을 수신하고, 뷰잉 영역의 일부인 프리미티브들에 대한 정점 좌표들을 생성할 수도 있다. 고정-기능 유닛 (40) 의 일부일 수도 있는 비닝 회로는 프리미티브들의 각각이 어느 타일에 속하는지를 결정할 수도 있다. 예를 들어, 비닝 회로는 디스플레이 (18) 의 크기 (예를 들어, 디스플레이 (18) 의 수평으로의 픽셀들의 수 바이 디스플레이 (18) 의 수직으로의 픽셀들의 수) 를 표시하는 정보를 수신할 수도 있다. 디스플레이 (18) 의 크기에 기초하여, 비닝 회로는 정점 셰이더에 의해 제공된 좌표들을 디스플레이 (18) 상의 좌표들로 변환할 수도 있다. 디스플레이 (18) 의 크기는 로컬 메모리 (14) 또는 메모리 (10) 에 저장될 수도 있다.
또한, 비닝 회로는 이미지 표면을 복수의 타일들로 분할할 수도 있다. 이미지 표면은 디스플레이 (18) 의 크기일 수도 있다. GPU 드라이버 (32) 는 비닝 회로가 이미지 표면을 분할할 타일들의 수를 정의할 수도 있다. 타일들의 수 및 디스플레이 (18) 의 크기에 기초하여, 비닝 회로는 이미지 표면에서의 각각의 타일의 위치 및 각각의 타일의 크기를 결정할 수있다. 예로서, 디스플레이 (18) 의 크기가 100 픽셀 바이 100 픽셀이고, GPU 드라이버 (32) 가 이미지 표면이 100 타일로 분할될 것을 정의하면, 비닝 회로는 연속적으로 배열된 100, 10 픽셀 바이 10 픽셀 타일들이 있다고 결정할 수도 있다.
각각의 타일의 크기, 이미지 표면에서의 각각의 타일의 위치 및 디스플레이 (18) 상의 정점들의 좌표에 기초하여, 비닝 회로는 어느 정점들이 어느 타일에 속하는지를 결정할 수도 있다. 예를 들어, 100, 10 픽셀 바이 10 픽셀 타일들을 유지하면서, 비닝 회로가 정점에 대한 x 및 y 좌표가 각각 25 및 35 라고 결정하면, 비닝 회로는 이 정점이 타일 (2, 3)(즉, 우측 두 번째 및 하단 세 번째 타일) 에 위치한다고 결정할 수도 있다. 이 예에서, 25/10 은 타일이 우측으로부터 두 번째 타일에 위치되는 것을 표시하고, 35/10 은 타일이 상단으로부터 세 번째 타일에 위치되는 것을 표시한다.
일부 예들에서, 정점 셰이더에 의해 출력된 2 개의 정점은 동일한 x, y 좌표에, 그러나 상이한 z 좌표에 위치될 수도 있다. z 좌표는 심도를 표시한다. 심도 테스트 회로는 어느 정점들이 어느 타일에 속하는지의 좌표 정보를 비닝 회로로부터 수신할 수도 있다. 동일한 x, y 좌표를 갖는 정점들에 대해, 심도 테스트 회로는 개개의 z 좌표들에 기초하여 어느 정점이 어느 정점에 의해 폐색되는지를 결정할 수도 있다. 정점 또는 프리미티브가 폐색되는 경우, 그 정점 또는 프리미티브는 추가 프로세싱으로부터 폐기될 수도 있다. 예를 들어, 심도 테스트 회로는 메모리 (10) 에 폐색되는 정점들 또는 프리미티브들에 대한 속성 데이터를 출력하지 않을 수도 있다. 비닝 회로 및 심도 테스트 회로의 동작 순서는 일 예로서 제공되며, 동작 순서는 역전될 수도 있다. 심도 테스트 회로는 먼저 정점들 또는 프리미티브들이 폐색되었는지 여부를 결정하고 그 정점들을 추가 프로세싱으로부터 제거할 수도 있고, 비닝 회로는 그 후 정점들이 어느 타일에 속하는지를 결정할 수도 있다.
어느 예 (예를 들어, 비닝 후 심도 테스트 또는 심도 테스트 후 비닝) 에서든, 결과는 프리미티브들이 어느 타일에 속하는지를 표시하는 정보일 수도 있다. 또한, 나머지 정점들 (예를 들어, 폐기되지 않은 것들) 은 최종 이미지 표면에 기여하는 정점들일 수도 있다. 이러한 동작들은 비닝 패스를 마칠 수도 있다. 따라서, 비닝 패스의 끝에서 어느 정점들이 어느 타일들에 속하는지 (예를 들어, 이미지 표면에서의 콘텐츠에 기여하는 어느 정점들이 어느 타일들에 속하는지) 의 가시성 정보가 있다.
GPU (12) 는 어느 정점들이 어느 타일에 속하는지의 정보를 아마도 부가 속성 데이터로서 메모리 (10) 에 저장할 수도 있다. 예를 들어, 각각의 타일은 디지털 값의 포지션과 연관될 수도 있다 (예를 들어, 첫 번째 타일은 디지털 값의 마지막 비트와 연관되고, 두 번째 타일은 디지털 값의 마지막 비트에 대해 두 번째와 연관되는 등). 각각의 정점에 대해, 비닝 회로는 그 정점이 속하는 타일을 표시하는 디지털 값을 결정할 수도 있다. 정점의 디지털 값에서 특정 타일과 연관된 비트에 대한 디지털 1 은 그 개개의 정점이 그 타일에 속하는 것을 의미한다. 예를 들어, 9 개의 타일들을 가정하면, 이는 첫 번째 타일에 속하는 각각의 정점에 대해, 비닝 회로는 다음의 디지털 값들을 그 정점에 대한 부가 속성 데이터로서 저장할 수도 있는 것을 의미한다: 000000001. 이 예에서, 첫 번째 타일은 디지털 값의 마지막 비트와 연관되고, 이에 따라 그 비트는 디지털 (예를 들어, 이진) 1 이고 나머지는 첫 번째 타일에 속하는 정점들에 대해 디지털 0 이다. 정점이 세 번째 타일에 속했다면, 비닝 회로는 다음의 디지털 값들을 그 정점에 대한 부가 속성 데이터로서 저장할 수도 있다: 000000100 (예를 들어, 마지막 디지털 비트로부터 세 번째는 세 번째 타일과 연관되기 때문에 마지막 디지털 비트로부터 세 번째는 디지털 1 이다).
다음으로 렌더링 패스에 대해, GPU (12) 는 타일들의 각각에서 정점들에 의해 형성된 프리미티브들을 렌더링할 수도 있다. GPU (12) 는 타일 단위로 이러한 렌더링을 수행할 수도 있다. 예를 들어, GPU (12) 는 제 1 타일, 그 후 제 2 타일 등의 이미지 콘텐츠를 렌더링할 수도 있다. 제 1 타일의 이미지 콘텐츠를 기입하는 결과에서, GPU (12) 는 로컬 메모리 (14) 에 이미지 콘텐츠를 저장할 수도 있고, 렌더링할 타일이 더 이상 없을 때까지 이러한 동작들을 반복할 수도 있다. 보다 상세하게 설명되는 바와 같이, 업샘플 회로 (42) 는 메모리 (10) 에 이미지 콘텐츠를 출력하는 일부로서 타일들의 하나 이상에서 이미지 콘텐츠를 업샘플링한다. 일부 다른 예들에서, GPU (12) 는 모든 타일들의 렌더링 후 보다는, 각각의 타일의 렌더링 후에 이미지 콘텐츠를 업샘플링하고 메모리 (10) 에 출력할 수도 있다.
이미지 콘텐츠를 렌더링하기 위해, GPU (12) 는 타일들의 각각에서 픽셀들의 각각에 대해 픽셀 값들 (예를 들어, 색상 및 불투명도) 를 결정한다. GPU (12) 가 타일들의 각각에서 픽셀들을 렌더링하는 하나의 방법은 이미지 콘텐츠가 렌더링될 타일 내의 영역을 정의하는 것에 의해서이다. GPU (12) 가 타일들의 각각에서 이미지 콘텐츠를 타일의 크기로 렌더링하면, GPU (12) 는 이미지 콘텐츠를 전체 픽셀 해상도로 렌더링할 수도 있다.
그러나, 본 개시에서 설명된 기법들에 따르면, 타일의 이미지 콘텐츠를 타일의 크기로 렌더링하기 보다, GPU (12) 는 이미지 콘텐츠를 타일보다 작은 크기로 렌더링할 수도 있다. GPU (12) 가 타일의 이미지 콘텐츠를 렌더링하는 크기는 타일 내의 정점들의 이미지 해상도에 기초할 수도 있다.
상술한 바와 같이, 애플리케이션 (22) 은 해상도 대역들을 정의할 수도 있다. 정점 셰이더의 동작들의 종료에서, GPU (12) 는 타일에서의 정점들이 어느 대역에 속하는지를 결정할 수도 있다. 정점들이 속하는 해상도 대역들은 그 타일에서의 이미지 콘텐츠에 대한 이미지 해상도를 정의할 수도 있다.
일부 예들에서, 애플리케이션 (22) 은 정점들에 대한 이미지 해상도를 정의할 수도 있다. 정점 셰이더에 의해 수행된 동작들 동안, 정점 셰이더는 정점들에 할당된 정점들의 이미지 해상도의 정의를 유지할 수도 있다. 그 후 렌더링 동안, 그 정점들에 의해 정의된 프리미티브에 속하는 모든 픽셀들에 대해, GPU (12) 는 정의된 이미지 해상도에 기초하여 타일의 크기에 비례하는 크기로 이들 프리미티브들을 렌더링할 수도 있다.
예를 들어, 제 1 타일 내의 대부분 또는 복수의 정점들이 1/4 이미지 해상도를 갖는 대역에 속하거나 1/4 해상도를 갖는 것으로 정의되고, 타일의 크기가 NxN 이면, GPU (12) 는 제 1 타일의 이미지 콘텐츠를 타일의 1/4 크기 (예를 들어, N/2xN/2) 로 렌더링할 수도 있다. 이 예에서, GPU (12) 가 제 1 타일의 이미지 콘텐츠를 렌더링하는 크기는 타일의 크기에 비례 (예를 들어, NxN 에 비례) 하고 정의된 이미지 해상도 (예를 들어, 1/4 해상도) 에 기초하는 N/2xN/2 이다. 이 예에서, GPU (12) 는 타일의 크기를 이미지 해상도의 비로 승산할 수도 있다 (예를 들어, 1/4 로 승산된 NxN 은 N/2xN/2 이다).
GPU (12) 가 제 1 타일의 이미지 콘텐츠를 N/2xN/2 로 렌더링할 수도 있는 하나의 예시의 방법은 정의된 뷰포트에 기초한다. 예를 들어, 이미지 콘텐츠를 렌더링하는 일부로서, GPU (12) 는 GPU (12) 가 이미지 콘텐츠를 렌더링할 뷰포트를 정의하는 커맨드를 수신한다. 전체 픽셀/이미지 해상도에 대해, 뷰포트 커맨드 (예를 들어, OpenGL 의 glViewport 커맨드) 는 GPU (12) 가 이미지 콘텐츠를 타일의 크기 (예를 들어, NxN) 로서 렌더링하는 뷰포트를 정의할 수도 있다. 그러나, 이미지 해상도에 기초하는 타일의 크기보다 작은 크기에 대해, 뷰포트 커맨드는 뷰포트를 N/2xN/2 로서 정의할 수도 있다.
일부 예들에서, 애플리케이션 (22) 은 다양한 프리미티브들이 어느 타일로 렌더링될지를 결정하도록 구성되지 않을 수도 있기 때문에, 애플리케이션 (22) 은 그 타일보다 작은 크기로 그 타일에 대한 뷰포트를 정의하는 뷰포트 커맨드를 발행하도록 구성되지 않을 수도 있다. 이에 따라, 애플리케이션 (22) 은 GPU (12) 에게 이미지 콘텐츠를 더 작은 크기로 렌더링하도록 명령하지 않으면서 뷰포트 커맨드를 발행할 수도 있다.
GPU 드라이버 (32) 는 애플리케이션 (22) 에 의해 발행된 뷰포트 커맨드를 캡처하고 뷰포트 커맨드를 수정하여 타일의 크기 및 정의된 이미지 해상도에 비례하는 더 작은 크기로 뷰포트를 정의할 수도 있다. 예를 들어, 상술한 바와 같이, GPU 드라이버 (32) 는 GPU (12) 가 실행하는 GPU (12) 에 애플리케이션 (22) 이 발행하는 커맨드들을 출력하는 임무를 가질 수도 있다. 애플리케이션 (22) 은 뷰포트 커맨드를 정의할 수도 있고 GPU 드라이버 (32) 는 뷰포트 커맨드를 수신하고 뷰포트 커맨드를 수정하여 GPU (12) 가 이미지 콘텐츠를 렌더링할 실제 뷰포트로 설정할 수도 있다 (예를 들어, 뷰포트를 NxN에서 N/2xN/2 로 수정).
타일에 대해 정의된 뷰포트에 기초하여, GPU (12) 는 그 타일의 이미지 콘텐츠를 그 타일에 대한 뷰포트에 의해 정의된 영역으로 렌더링할 수도 있다. 예를 들어, GPU (12) 는 프리미티브들을 래스터화하고 정의된 뷰포트 크기에 기초하여 프리미티브들 내에 픽셀들을 정의할 수도 있다. 프리미티브 내의 각각의 픽셀에 대해, GPU (12) 는 개개의 픽셀들에 대한 픽셀 값들을 결정하는 픽셀 셰이더를 실행할 수도 있다. 픽셀 셰이더는 뷰포트 내의 픽셀들에 대한 결과의 픽셀 값들을 로컬 메모리 (14) 에 출력할 수도 있다.
GPU (12) 는 타일들 각각에 대해 이러한 동작들을 반복할 수도 있다. 따라서, 로컬 메모리 (14) 는 각각의 타일에 대한 이미지 콘텐츠를 저장할 수도 있다. 그러나, 임의의 타일에 대한 이미지 콘텐츠의 크기가 반드시 타일과 동일한 크기일 필요는 없고, 타일의 크기보다 작을 수도 있다. 예를 들어, 제 1 타일에 대한 이미지 해상도가 1/4 이면 (예를 들어, 애플리케이션 (22) 이 1/4 이미지 해상도로서 제 1 타일에서 발생하는 이미지 해상도 대역을 정의할 때), 타일에 대한 이미지 콘텐츠의 크기는 제 1 타일의 크기의 1/4 일 수도 있다. 제 2 타일에 대한 이미지 해상도가 1/16 이면, 타일에 대한 이미지 콘텐츠의 크기는 제 2 타일 크기의 1/16 일 수도 있는 등이다. 이것은 렌더링 패스를 마칠 수도 있다.
일부 타일들에 대해, GPU (12) 가 이미지 콘텐츠를 그러한 타일들의 크기로 렌더링한 것이 가능할 수도 있다. 애플리케이션 (22) 은 전체 이미지 해상도를 갖도록 일부 정점들을 정의하였을 수도 있는데, 이는 그러한 정점들이 뷰어가 포커싱해야하는 프리미티브들에 대한 것일 수도 있기 때문이다. 따라서, GPU (12) 는 일부 타일들에서의 이미지 콘텐츠가 전체 픽셀 해상도를 가져야하기 때문에 그러한 타일들을 전체 해상도 (예를 들어, 타일의 크기와 동일한 크기) 로 렌더링할 수 있고, 일부 타일들에서의 이미지 콘텐츠가 전체 이미지 해상도 미만 (예를 들어, 1/2, 1/4, 1/8, 1/16 이미지 해상도 등) 이어야 하기 때문에 그러한 타일들을 전체 해상도 미만으로 (예를 들어, 타일의 크기보다 작은 크기로) 렌더링할 수도 있다.
업샘플 회로 (42) 는 타일들의 각각으로부터의 개개의 이미지 콘텐츠를 메모리 (10) 에 출력하도록 구성될 수도 있다. 그러나, 각각의 타일에 대한 이미지 콘텐츠를 출력하는 일부로서, 업샘플 회로 (42) 는 하나 이상의 타일들에 대한 이미지 콘텐츠를 업샘플링할 수도 있다. 예를 들어, GPU (12) 가 제 1 타일에 대한 이미지 콘텐츠를 1/4 픽셀 해상도로 렌더링한 경우, 업샘플 회로 (42) 는 로컬 메모리 (14) 로부터 렌더링된 이미지 콘텐츠에서의 제 1 픽셀에 대한 픽셀 값들을 판독하고, 제 1 픽셀에 대한 픽셀 값들을 4 번 저장하여 이미지 표면 상에 4 개의 픽셀들에 대한 픽셀 값들을 표현할 수도 있다. 그 후 업샘플 회로 (42) 는 로컬 메모리 (14) 로부터 렌더링된 이미지 콘텐츠에서의 제 2 픽셀에 대한 픽셀 값들을 판독하고, 제 2 픽셀에 대한 픽셀 값들을 4 번 저장하여 이미지 표면 상에 다음 4 개의 픽셀들에 대한 픽셀 값들 등을 표현할 수도 있다.
이러한 방식으로, 업샘플링 회로 (42) 는 업샘플링된 이미지 콘텐츠를 생성하기 위해 타일에서의 이미지 콘텐츠를 업샘플링할 수도 있다. 업샘플 회로 (42) 는 타일에 대해 렌더링된 이미지 콘텐츠의 크기 및 타일의 크기에 기초하여 이미지 콘텐츠를 업샘플링할 수도 있다. 업샘플 회로 (42) 는 업샘플링된 이미지 콘텐츠를 저장을 위해 메모리 (10) 에 출력할 수도 있고, 디스플레이 프로세서 (16) 가 취출하고 디스플레이 (18) 상에 디스플레이할 수도 있다.
위의 예에서, 업샘플 회로 (42) 는 이미지 콘텐츠를 메모리 (10) 에 출력하는 것의 일부로서 업샘플링한다. 그러나, 일부 예들에서, 업샘플 회로 (42) 는 타일의 이미지 콘텐츠를 업샘플링하고, 업샘플링된 이미지 콘텐츠를 로컬 메모리 (14) 에 저장한 다음, 업샘플링된 이미지 콘텐츠를 메모리 (10) 에 출력할 수도 있다. 또한, 일부 예들에서, 업샘플링 회로 (42) 는 업샘플링 및 메모리 (10) 로의 출력 전에 모든 타일들에 대한 이미지 콘텐츠가 렌더링될 때까지 대기하지 않을 수도 있다. 이러한 예들에서, GPU (12) 가 제 1 타일의 이미지 콘텐츠를 렌더링한 후에, 업샘플 회로 (42) 는 업샘플링하고 GPU (12) 가 제 2 타일에 대한 이미지 콘텐츠를 렌더링하는 것과 병렬로 또는 GPU 가 제 2 타일에 대한 이미지 콘텐츠를 렌더링하기 전에 제 1 타일에 대한 업샘플링된 이미지 콘텐츠를 출력할 수도 있다.
도 3 은 도 1 의 컴퓨팅 디바이스의 GPU 및 메모리를 더욱 더 상세히 도시하는 블록 다이어그램이다. 그래픽스 동작들을 수행하기 위해, GPU (12) 는 그래픽스 프로세싱 파이프라인을 구현할 수도 있다. 그래픽스 프로세싱 파이프라인은 GPU (12) 상에서 실행하는 소프트웨어 또는 펌웨어에 의해 정의된 바와 같은 기능들을 수행하는 것, 및 매우 특정한 기능들을 수행하도록 구성된 고정 하드웨어인 고정-기능 유닛들에 의한 기능들을 수행하는 것을 포함한다. GPU (12) 상에서 실행하는 소프트웨어 또는 펌웨어는 셰이더들로서 지칭될 수도 있으며, 셰이더들은 GPU (12) 의 하나 이상의 셰이더 코어들 상에서 실행할 수도 있다. 사용자가 원하는 태스크들을 임의의 생각할 수 있는 방식으로 수행하도록 셰이더를 설계할 수 있기 때문에, 셰이더는 사용자들에게 기능적 유연성을 제공한다. 하지만, 고정된 기능 유닛들은, 고정된 기능 유닛들이 태스크들을 수행하는 방식을 위해 하드와이어링된다. 따라서, 고정된 기능 유닛들은 많은 기능적인 유연성을 제공하지 못할 수도 있다.
이 예에서, GPU (12) 는 제어기 (36), 입력 어셈블러 회로 (44), 비닝 패스 회로부 (48) 및 렌더링 패스 회로부 (58) 중 하나 이상을 포함할 수도 있다. 비닝 패스 회로부 (48) 는 정점 셰이더 (50) 가 GPU (12) 의 셰이더 코어 (38)(도 2) 상에서 실행하는 것을 표시하기 위해 파선으로 도시되는 정점 셰이더 (50) 를 포함한다. 예를 들어, 비닝 패스 회로부 (48) 는 정점 셰이더 (50) 가 실행되는 셰이더 코어 (38) 를 포함한다. 비닝 패스 회로부 (48)는 또한 비닝 회로 (52) 및 심도 테스트 회로 (54) 를 포함한다. 렌더링 패스 회로부 (58) 는 픽셀 셰이더 (64) 가 셰이더 코어 (38) 상에서 실행하는 것을 표시하기 위해 파선으로 도시되는 픽셀 셰이더 (64) 및 래스터라이저 회로 (60) 를 포함한다. 도시된 예에서, 로컬 메모리 (14) 는 GPU (12) 내부에 도시되어 있지만 GPU (12) 외부에 있을 수도 있다. GPU (12) 는 또한 업샘플 회로 (42) 를 포함하고, 이는 타일들의 각각으로부터 렌더링된 이미지 콘텐츠를 업샘플링하고 출력한다.
셰이더 코어 (38) 는 그 순서에 있어서 정점 셰이더 스테이지에 후속하고 테셀레이션 (tessellation) 을 위해 사용되는 헐 (hull) 셰이더 및 도메인 셰이더와 같은 다른 유형의 셰이더들을 또한 실행할 수도 있다. 테셀레이션 회로부는 또한 테셀레이션을 수행하기 위해 하나 이상의 고정-기능 유닛들 (40) 에 포함될 수도 있다. 셰이더 코어 (38) 는 또한 셰이더 코어 (38) 가 도메인 셰이더를 실행하는 경우에는 도메인 셰이더의 출력을 수신하는 지오메트리 셰이더를 실행할 수도 있고, 또는 도메인 셰이더가 실행되지 않는 경우에는 정점 셰이더의 출력을 실행할 수도 있다. 래스터라이저 회로 (60) 는 정점 셰이더 (50) 또는 지오메트리 셰이더 (이용가능할 때) 또는 도메인 셰이더 (이용가능할 때) 로부터 생성된 그래픽스 데이터를 수신할 수도 있다.
그래픽스 파이프라인의 다른 구성들이 가능하며, 본 개시에서 설명된 기법들은 도 3 에 도시된 특정 예에 제한되는 것으로 고려되지 않아야 한다. 예를 들어, GPU (12) 는 도시된 것들보다 많은 스테이지들을 포함할 수도 있으며, 일부 예들에서, GPU (12) 가 반드시 도시된 스테이지들 모두를 포함하지 않을 수도 있다. 또한, 스테이지들의 특정 순서화는 예시의 목적으로 제공되며 제한적인 것으로 고려되지 않아야 한다.
도 3 은 또한 그래픽스 데이터가 GPU (12) 의 그래픽스 파이프 라인을 통해 생성되고 있을 때 중간 그래픽스 데이터를 저장하는데 사용된 메모리 (10) 의 다양한 버퍼들을 도시한다. 도시된 바와 같이, 메모리 (10) 는 정점 버퍼 (46), 스트림아웃 버퍼 (56), 픽셀 버퍼 (62) 및 프레임 버퍼 (66) 를 포함한다. 이들 버퍼들은 동일한 더 큰 버퍼의 일부이거나 별도의 버퍼들일 수도 있다.
애플리케이션 (22) 은 (예를 들어, GPU 드라이버 (32) 를 통해) CPU (6) 로 하여금 정점들의 정점 데이터 (예를 들어, 속성 데이터) 를 정점 버퍼 (46) 로 출력하게 할 수도 있다. 일부 예들에서, 정점들에 대한 속성 데이터는 정점들에 의해 형성된 프리미티브들의 상대적인 이미지 해상도를 표시하는 이미지 해상도 정보를 포함할 수도 있다. 예를 들어, 뷰어가 포커싱해야 하는 이미지 부분들을 위한 것인 프리미티브들에 대해, 애플리케이션 (22) 은 전체 해상도를 포함한 상대적으로 높은 레벨의 이미지 해상도를 정의할 수도 있다. 뷰어가 포커싱하지 않아야 하는 이미지 부분들을 위한 것인 프리미티브들에 대해, 애플리케이션 (22) 은 더 낮은 레벨의 이미지 해상도 (예를 들어, 1/4 해상도, 1/8 해상도 등) 를 정의할 수도 있다. 일부 예들에서, 애플리케이션 (22) 은 점점 더 적은 이미지 해상도를 갖는 이미지 부분들을 점진적으로 정의할 수도 있다. 예를 들어, 전체 해상도를 갖는 이미지 부분들에 바로 인접한 이미지 부분들에 대해, 애플리케이션 (22) 은 1/2 해상도를 정의할 수도 있고, 바로 인접한 이미지 부분들 다음의 이미지 부분들에 대해, 애플리케이션 (22) 은 1/4 해상도를 정의할 수도 있는 등이다.
해상도의 대역과 같은 이미지 해상도를 정의하는 다른 방법이 있을 수도 있다. 또한, 애플리케이션 (22) 이 이미지 해상도가 정의되는 유일한 방법일 필요는 없다. 애플리케이션 (22) 에 부가하여 또는 그 대신에, 몇몇 다른 컴포넌트 (예를 들어, GPU 드라이버 (32) 또는 제어기 (36)) 가 이미지 해상도를 정의할 수도 있다.
입력 어셈블러 회로 (44) 는 CPU (6) 에 의해 정의된 바와 같이 시스템 메모리 (10) 로부터 정점들의 정점 포인트들을 판독하고, 제어 포인트들을 어셈블링하여 정점들을 형성할 수도 있다. 예를 들어, 입력 어셈블러 회로 (44) 는 좌표, 색상 값 및 다른 그러한 정보를 판독할 수도 있다. 좌표, 색상 값 및 다른 그러한 정보는 일반적으로 정점들의 속성들로 지칭될 수도 있다. 정점들의 속성들에 기초하여, 입력 어셈블러 회로 (44) 는 프리미티브들의 일반적인 레이아웃을 결정할 수도 있다. 입력 어셈블러 회로 (44) 는 고정-기능 유닛일 수도 있다.
정점 셰이더 (50) 는 정점들의 속성들에 대한 속성 데이터를 수신할 수도 있다. 정점 셰이더 (50) 는 정점당 동작들, 예컨대 변환, 스키닝, 모핑 (morphing) 및 정점당 조명을 수행할 수도 있다. 예를 들어, 애플리케이션 (22) 은 소위 "로컬 좌표들” 에서 상이한 오브젝트들을 형성하는 프리미티브들의 정점들에 대한 좌표들을 정의할 수도 있다. 로컬 좌표들은 3 차원 좌표들 (x, y, z) 이며 로컬 공간에서 (예를 들어, 오브젝트의 중심이 일 예로서 좌표 (0, 0, 0) 에 있는 오브젝트 자체에 대해) 좌표들을 정의한다. 정점 셰이더 (50) 는 로컬 좌표들을 모델 행렬을 통해 세계 공간으로 변환하며, 여기서 세계 공간은 이미지 표면에 의해 둘러싸인 공간에서의 모든 오브젝트들을 포함한다. 때로는 변환 행렬이라고도 칭하는 모델 행렬은 오브젝트가 더 큰 세계 공간에 속하는 장소로 오브젝트를 트랜슬레이트, 스케일, 및/또는 회전한다. 모델 행렬은 애플리케이션 (22) 의 개발자에 의해 정의될 수도 있다.
정점 셰이더 (50) 는 정점들의 세계 좌표들을 오브젝트들이 뷰의 뷰어 포인트로 배향되도록 장면을 회전하는 뷰 행렬로 승산할 수도 있다. 뷰의 뷰어 포인트에 기초하여, 일부 오브젝트들은 뷰의 하나의 포인트에서 다른 것들의 전방에 보일 수도 있고, 뷰의 다른 포인트에서 반전할 수도 있으며, 뷰 행렬이 뷰의 뷰 포인트에 기초하여 오브젝트들을 정확하게 배향한다. 일 예로서, 제 1 오브젝트는 뷰어가 뷰의 제 1 포인트로부터 오브젝트들을 뷰잉하는 경우 제 2 오브젝트의 w전방에 있는 것으로 보이지만, 뷰의 반대 포인트로부터, 제 2 오브젝트는 제 1 오브젝트의 전방에 보이게 된다. 뷰 행렬은 애플리케이션 (22) 의 개발자에 의해 정의될 수도 있다.
정점 셰이더 (50) 는 뷰 공간 좌표들을 프로젝션 행렬을 통해 클립-공간에 클립할 수도 있다. 프로젝션 행렬은 정점 셰이더가 정규화된 디바이스 좌표 (NDC) 들의 범위 (예를 들어, -1.0 내지 1.0) 로 변환하는 좌표들의 범위를 특정한다. 정점 셰이더 (50) 는 이 범위 밖의 모든 좌표들을 클립하는데, 이는 그러한 프리미티브들이 가시적이지 않기 때문이다. 프리미티브의 일부만이 범위 내에 있으면, 정점 셰이더 (50) 는 범위 밖의 프리미티브의 부분을 클립하고, 범위 내부에 맞는 프리미티브들을 생성할 수도 있다.
수학적으로, 정점 셰이더 (50) 는 다음 동작을 수행하여 클립 좌표들을 생성할 수도 있다:
Figure pct00001
식 중
Figure pct00002
Figure pct00003
은 프로젝션, 뷰, 및 모델 행렬들을 각각 지칭하고,
Figure pct00004
는 로컬 좌표들을 지칭한다.
비닝 회로 (52) 는 정점 셰이더 (50) 로부터의 출력 (예를 들어, 클립 좌표들에서의 정점들) 을 수신하고 정점이 어느 타일 (예를 들어, 빈) 에 속하는지를 결정한다. 예를 들어, 정점 셰이더 (50) 의 출력은 뷰어 관점 (perspective) 에서 x 및 y 좌표 쌍일 수도 있고, 심도 값 (예를 들어, z 좌표) 일 수도 있다. 비닝 회로 (52) 는 패스 회로부 (58) 를 렌더링함으로써 렌더링에 필요한 임의의 부가 그래픽스 데이터를 생성할 뿐만 아니라, 정점이 어느 타일에 속하는지를 결정하기 위해 x 및 y 좌표를 활용할 수도 있다. 비닝 회로 (52) 는 하나 이상의 고정-기능 유닛들 (40) 의 고정-기능 유닛일 수도 있다.
일 예로서, 비닝 회로 (52) 는 전체 픽셀 해상도 이미지 표면에 대해 각각의 정점이 어느 타일에 속하는지를 결정할 수도 있다. GPU 드라이버 (32) 는 뷰포트를 정의할 수도 있고, 여기서 뷰포트의 크기는 디스플레이 (18) 의 크기이다 (예를 들어, 1920 픽셀 바이 1080 픽셀). GPU 드라이버 (32) 는 제조 동안 디스플레이 (18) 의 크기로 미리 프로그램될 수도 있고, 또는 오퍼레이팅 시스템 (34) 이 디스플레이 (18) 의 크기를 GPU 드라이버 (32) 에 제공할 수도 있다. GPU 드라이버 (32) 는 또한 타일들의 수를 표시하는 정보를 제공할 수도 있고, 또는 타일들의 수가 미리설정되고 로컬 메모리 (14) 또는 GPU (12) 의 레지스터들에 저장될 수도 있다. 어느 경우이든, 비닝 회로 (52) 는 뷰포트의 크기 및 타일들의 수를 수신하고, 뷰포트의 어느 픽셀들이 어느 타일들에 속하는지를 결정할 수도 있다. 일부 예들에서, 비닝 회로 (52) 는 각각의 타일의 크기 및 타일들의 수를 표시하는 정보를 수신할 수도 있다. 이러한 예들에서, 비닝 회로 (52) 가 반드시 뷰포트를 수신할 필요는 없다.
정점 셰이더 (50) 는 -1.0 내지 1.0 사이의 범위로 정규화된 뷰어의 관점에서 픽셀들에 대한 x 및 y 좌표를 제공할 수도 있다. 비닝 회로 (52) 는 x 및 y 좌표들과 타일들의 크기 및 수를 활용하여 정점들의 각각이 어느 타일에 속하는지를 결정할 수도 있다. 일 예로서, 각각이 10x10 픽셀들의 크기를 갖는 10x10 타일들이 있다고 가정한다. 이 예에서, 정점이 각각 0.6 및 -0.4 의 NDC x 및 y 좌표를 각각 갖는 경우, 비닝 회로 (52) 는 NDC 에서 각각의 0.1 스텝이 이 예에서 5 픽셀이기 때문에 이 정점의 위치는 (80, 20) 에 있다고 결정할 수도 있다. 각각의 타일이 10 픽셀 바이 10 픽셀이기 때문에, 80 및 20 의 x 및 y 좌표들을 각각 갖는 정점은 좌측으로부터 8 번째 타일에 있고 상단으로부터 2 번째 타일에 있게 된다. 비닝 회로 (52) 는 정점들 각각이 어느 타일들에 속하는지를 식별하기 위해 그러한 동작들을 반복할 수도 있다.
상술한 바와 같이, 비닝 회로 (52) 가 정점이 어느 타일에 속하는지를 식별할 수도 있는 하나의 예시적인 방식은 디지털 값의 각각의 비트가 타일에 대응하는 디지털 값에 기초한다. 특정 타일에 속하는 정점들에 대해, 비닝 회로 (52) 는 그 타일에 대응하는 비트를 정점들에 대한 디지털 값들에서의 디지털 1 로 설정하고, 다른 모든 것들을 디지털 0 으로 유지할 수도 있다. 정점이 어느 타일에 속하는지를 식별하는 다른 방식들이 있을 수도 있다.
심도 테스트 회로 (54) 는 정점 셰이더 (50) 에 의해 프로세싱된 정점들의 z-좌표들을 비교하여 정점이 가시적인지 가시적이지 않은지를 결정할 수도 있다. 심도 테스트 회로 (54) 는 스트림아웃 버퍼 (56) 에 가시적인 정점들의 프로세싱된 속성들을 출력할 수도 있다. 예를 들어, 하나의 정점이 다른 정점의 전방에 있으면, 심도 테스트 회로 (54) 는 뒤쪽 정점이 가시적이지 않다고 결정할 수도 있고 정점에 대한 속성 데이터 중 임의의 것을 스트림아웃 버퍼 (56) 에 출력하지 않을 수도 있다. 이러한 방식으로, 비닝 패스 회로부 (48) 는 각각의 정점이 어느 타일에 속하는지를 표시하는 정보를 포함하는 정보의 가시성 스트림을 생성할 수도 있다.
비닝 패스 회로부 (48) 의 동작 순서가 반드시 설정될 필요는 없다. 예를 들어, 심도 테스트 회로 (54) 는 먼저, 비닝 회로 (52) 가 정점이 어느 타일에 속하는지를 결정하기 전에 정점이 폐색되는지 여부를 결정할 수도 있다. 또한, 상술한 바와 같이, 일부 예들에서, 애플리케이션 (22) 은 정점들에 대한 이미지 해상도를 정의하였을 수도 있다. 따라서, 속성 데이터가 스트림아웃 버퍼 (56) 에 저장되는 가시적인 정점들에 대해, 스트림아웃 버퍼 (56) 는 또한 이들 정점들에 대한 이미지 해상도 정보를 저장할 수도 있다.
예를 들어, 애플리케이션 (22) 이 대역에서 이미지 해상도를 정의한 경우, 비닝 회로 (52) 는 선택적으로 정점 및 해상도 대역의 x 및 y 좌표를 비교함으로써 정점이 어느 해상도 대역에 속하는지를 결정할 수도 있다. 비닝 회로 (52) 는 속성 데이터로서 정점에 대한 이미지 해상도 정보를 스트림아웃 버퍼 (56) 에 저장할 수도 있다. 그러나, 정점이 어느 해상도 대역에 속하는지를 결정하는 비닝 회로 (52) 가 필요한 것은 아니고, 다른 컴포넌트가 정점이 어느 해상도 대역에 속하는지를 결정할 수도 있다.
래스터라이저 회로 (60) 는 스트림아웃 버퍼 (56) 로부터 프리미티브들의 정점들에 대한 속성 데이터를 수신하고, 프리미티브들을 디스플레이를 위해 픽셀들로 변환한다. 예를 들어, 프리미티브들은 프리미티브들의 상호접속을 표시하는 벡터들로서 정의될 수도 있고, 이미지가 디스플레이될 디스플레이 (18) 와 독립적인 좌표 공간에서 정의될 수도 있다. 래스터라이저 회로 (60) 는 이들 벡터들을 디스플레이 좌표들로 변환하고, 폐색되는 프리미티브들 내의 포인트들을 제거하는 것과 같은 임의의 부가 기능들을 수행한다. 래스터라이저 회로 (60) 는 하나 이상의 고정-기능 유닛들 (40) 의 고정-기능 유닛일 수도 있고 값들을 픽셀 버퍼 (62) 에 출력한다.
이 개시에서 설명된 예들에서, 벡터들을 디스플레이 좌표들로 변환하는데 있어서, 래스터라이저 회로 (60) 는 이미지 해상도를 처리할 수도 있다. 일 예로서, 애플리케이션 (22) 은 래스터라이저 회로 (60) 가 디스플레이 좌표들을 결정하는 영역을 정의하는 뷰포트 커맨드를 출력할 수도 있다. 이미지 해상도가 처리되지 않은 예들에서, 뷰포트 커맨드는 래스터라이저 회로 (60) 가 디스플레이 좌표들을 타일 크기 (예를 들어, NxN) 이도록 결정할 크기를 정의할 수도 있다. 예를 들어, 제 1 타일에 대해, 뷰포트 커맨드는 크기를 (0, 0, N, N)(예를 들어, 0, 0 에서 시작하여 N, N 으로 끝남) 으로서 정의하게 되고, 제 2 타일에 대해, 뷰포트 커맨드는 크기를 (N, 0, N+N, N) 등으로 정의하게 된다.
그러나, 본 개시에서 설명된 예들에서, 뷰포트의 크기를 타일의 크기이도록 정의하기 보다, 뷰포트의 크기가 타일의 크기보다 작고 이미지 해상도에 기초할 수도 있다. 예를 들어, GPU 드라이버 (32) 는 애플리케이션 (22) 에 의해 정의된 뷰포트 커맨드를 수정할 수도 있다.
상술한 디지털 값으로서 스트림아웃 버퍼 (56) 에서 이용가능한 정보인 제 1 타일에 속하는 모든 정점들에 대해, GPU 드라이버 (32) 는 정점들이 어느 해상도 대역들에 속하는지 그리고 복수의 또는 대부분의 이미지 해상도들이 존재하는지 여부를 결정할 수도 있다. 일 예로서, 제 1 타일에 5 개의 정점들이 있다고 가정한다. 각각의 정점에 대해, GPU 드라이버 (32) 는 애플리케이션 (22) 에 의해 정의된 뷰포트 해상도를 결정할 수도 있다. GPU 드라이버 (32) 는 대부분 또는 가장 가능성있는 이미지 해상도인 특정 이미지 해상도가 존재하는지를 결정할 수도 있다. 대부분 또는 가장 가능성있는 이미지 해상도에 기초하여, GPU 드라이버 (32) 는 제 1 타일에 대한 이미지 해상도를 결정할 수도 있다. 일부 예들에서, 대부분 또는 가장 가능성있는 이미지 해상도를 사용하기 보다, GPU 드라이버 (32) 는 이미지 해상도의 평균 또는 가중화된 평균을 결정하여 제 1 타일에 대한 이미지 해상도를 결정할 수도 있다.
또한, 속성 데이터가 정점에 대한 이미지 해상도를 정의하는 예들에서, GPU 드라이버 (32) 는 속성 데이터를 판독하여 타일에 대한 이미지 해상도를 결정할 수도 있다. 예를 들어, 상기와 유사하게, GPU 드라이버 (32) 는 대부분 또는 가장 가능성있는 이미지 해상도가 있는지를 결정하고 전체 타일에 대해 그 이미지 해상도 또는 제 1 타일에 대한 이미지 해상도로서의 일부 평균 또는 가중화된 평균을 할당할 수도 있다.
GPU 드라이버 (32) 는 결정된 이미지 해상도 및 제 1 타일의 크기에 기초하여 (예를 들어, 애플리케이션 (22) 에 의해 정의된 바와 같은 뷰포트를 수정함으로써) 뷰포트를 정의할 수도 있다. 예를 들어, 결정된 해상도가 1/4 해상도이면, GPU 드라이버 (32) 는 뷰포트의 크기를 N/2xN/2 로서 결정할 수도 있다. 이 예에서, GPU 드라이버 (32) 는 제 1 타일에서의 이미지 콘텐츠의 해상도와 전체 해상도 (예를 들어, 1/4 해상도) 사이의 비를 결정하였고 그 비를 제 1 타일의 크기로 승산하여 뷰포트의 크기를 결정하였다 (예를 들어, NxN 으로 승산된 1/4 은 N/2xN/2 이다).
상기 예에서, GPU 드라이버 (32) 는 제 1 타일의 이미지 콘텐츠에 대한 해상도를 결정하였다. 그러나, 제 1 타일에 있는 정점들의 일부에 대한 이미지 해상도는 GPU 드라이버 (32) 에 의해 결정된 이미지 해상도와 상이할 수도 있다. 예를 들어, 제 1 타일에서의 프리미티브의 정점들이 (예를 들어, 프리미티브가 속한 해상도 대역에 기초하여) 1/4 의 이미지 해상도로 정의되지만, 대부분의 이미지 해상도에 기초하는 경우, GPU 드라이버 (32) 는 제 1 타일의 이미지 해상도는 전체 해상도라고 결정할 수도 있다. 이 경우, 1/4 해상도에 대해 정의되더라도, 프리미티브에서의 픽셀들에 대한 최종 렌더링된 해상도는 전체 해상도일 수도 있다. 대부분의 해상도에 기초하여, GPU 드라이버 (32) 가 제 1 타일에 대한 이미지 해상도가 1/8 해상도라고 결정하였으면, 1/4 해상도에 대해 정의되었더라도, 프리미티브에 대한 최종 렌더링된 해상도는 1/8 해상도일 수도 있다.
상기 예가 GPU 드라이버 (32) 와 관련하여 기재되었지만, 제어기 (36) 는 유사한 동작들을 수행할 수도 있고 또는 GPU 드라이버 (32) 및 제어기 (36) 가 이들 동작들을 함께 수행할 수도 있다. 예를 들어, 제어기 (36) 는 타일에 대해 결정된 이미지 해상도에 기초하여 뷰포트를 정의하고 뷰포트 커맨드를 수정할 수도 있다.
따라서, GPU 드라이버 (32) 또는 제어기 (36) 는 이미지 표면의 제 1 타일이 제 1 해상도 (예를 들어, 제 1 이미지 해상도) 를 갖는 이미지 콘텐츠를 포함할 것인지를 결정할 수도 있다. 제 1 해상도는 이미지 표면의 다른 타일들에 대한 제 2 해상도 미만이다. 예를 들어, 제 1 해상도는 1/8 해상도일 수도 있고, 다른 타일들의 이미지 콘텐츠는 전체 해상도 또는 1/4 해상도에 있을 수도 있다. GPU 드라이버 (32) 또는 제어기 (36) 는 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도 및 제 1 타일의 크기에 기초하여 제 1 타일에 대한 뷰포트를 정의할 수도 있다.
픽셀 셰이더 (64) 는 래스터라이저 회로 (60) 에 의해 출력된 픽셀 버퍼 (62) 로부터 픽셀을 수신하고 디스플레이될 픽셀들의 각각에 색상 값들을 할당하기 위한 포스트 프로세싱을 수행한다. 예를 들어, 픽셀 셰이더 (64) 는 시스템 메모리 (10) 에 저장된 상수 값들, 시스템 메모리 (10) 에 저장된 텍스처 데이터 및 임의의 다른 데이터를 수신하여 색상 값들과 같은 픽셀 마다의 출력들을 생성할 수도 있다. 픽셀 셰이더 (64) 는 또한 픽셀들의 불투명함을 표시하는 불투명도 값들을 출력할 수도 있다. 픽셀 셰이더 (64) 는 결과의 픽셀 값들을 로컬 메모리 (14) 에 출력할 수도 있다. 이러한 방식으로, 렌더링 패스 회로부 (58) 는 제 1 타일에 대한 이미지 콘텐츠를 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도에 기초하여 그리고 상기 제 1 타일의 크기보다 작은 크기로 렌더링할 수도 있다. 예를 들어, 래스터라이저 회로 (60) 는 GPU 드라이버 (32) 및/또는 제어기 (36) 에 의해 정의된 바와 같은 뷰포트의 크기에 기초하여 디스플레이 좌표들을 결정할 수도 있고, 픽셀 셰이더 (64) 는 뷰포트에서의 픽셀들의 각각에 대한 픽셀 마다의 값들을 결정할 수도 있다.
도시되지는 않았지만, 일부 예들에서, 픽셀 셰이더 (64) 는 임의의 최종 픽셀 프로세싱을 위해 출력 병합 회로로 출력할 수도 있다. 예를 들어, 출력 병합 회로는 픽셀들 중 임의의 것이 디스플레이되는 것으로부터 제거되어야 하는지 여부를 추가로 결정하기 위해 심도 정보를 활용할 수도 있다. 출력 병합 회로는 또한 블렌딩 동작들을 수행하여 최종 픽셀 값들을 생성할 수도 있다. 이러한 예들에서, 출력 병합 회로는 최종 픽셀 값들을 로컬 메모리 (14) 에 출력할 수도 있다.
렌더링 패스 회로부 (58) 는 각각의 타일에 대해 이러한 동작들을 반복하고, 각각의 타일에 대한 이미지 콘텐츠를 생성할 수도 있다. 일부 예들에서, 렌더링 패스가 타일들 모두에서 이미지 콘텐츠의 렌더링을 지칭하는, 단일 렌더링 패스만이 필요할 수도 있다. 예를 들어, 애플리케이션 (22) 은 GPU (12) 가 상이한 이미지 해상도로 이미지 콘텐츠를 렌더링하게 하는 다수의 렌더링 커맨드들을 발행하기 보다, GPU (12) 가 상이한 이미지 해상도에서 타일들의 각각에 대한 이미지 콘텐츠를 렌더링하게 하는 단 하나의 렌더링 명령만을 발행할 필요가 있을 수도 있다.
업샘플 회로 (42) 는 로컬 메모리 (14) 에 저장된 이미지 콘텐츠를 추출하고, 결정된 이미지 해상도에 기초하여 이미지 콘텐츠를 업샘플링할 수도 있다. 예를 들어, GPU 드라이버 (32) 또는 제어기 (36) 는 타일들 각각에 대한 이미지 해상도를 업샘플 회로 (42) 에 표시할 수도 있다. 업샘플 회로 (42) 는 이미지 해상도 정보를 활용하여 이미지 콘텐츠를 얼마나 많이 업샘플링할지를 결정할 수도 있다. 예를 들어, 제 1 타일에 대한 이미지 해상도가 1/4 이면, 업샘플 회로 (42) 는 이미지 콘텐츠를 4 의 팩터로 업샘플링할 수도 있다. 제 2 타일에 대한 이미지 해상도가 전체 해상도이면, 업샘플 회로 (42) 는 업샘플링없이 패스 스루로서 기능할 수도 있다.
업샘플 회로 (42) 가 이미지 콘텐츠를 업샘플링할 수도 있는 다양한 방법들이 존재하며, 그 기법들은 업샘플링하는 임의의 특정 방식으로 제한되지 않는다. 일 예로서, 업샘플 회로 (42) 는 동일한 픽셀 값을 여러 번 (예를 들어, 4 의 팩터로 업샘플하기 위해 4 번) 복사할 수도 있다. 다른 예로서, 업샘플 회로 (42) 는 부가 픽셀들에 대한 픽셀 값들을 생성하기 위해 복수의 픽셀들에 걸쳐 픽셀 값들을 보간할 수도 있다.
일부 예들에서, 업샘플 회로 (42) 는 이미지 콘텐츠에 대한 픽셀 값들을 프레임 버퍼 (66) 에 출력하는 일부로서 이미지 콘텐츠를 업샘플링할 수도 있다. 예를 들어, 이미지 콘텐츠의 출력 동안, 업샘플 회로 (42) 는 픽셀 값들을 업샘플링하여 그 픽셀에 대한 픽셀 값들을 기입하는 일부로서 픽셀들에 대해 더 많은 픽셀 값들을 생성할 수도 있다. 일부 예들에서, 업샘플 회로 (42) 는 먼저 제 1 타일에서의 이미지 콘텐츠 모두를 업샘플링하고 업샘플링된 이미지 콘텐츠를 로컬 메모리 (14) 에 저장할 수도 있다. 업샘플 회로 (42) 또는 가능하게는 일부 다른 컴포넌트는, 업샘플링된 이미지 콘텐츠를 프레임 버퍼 (66) 로 출력할 수도 있다.
도 4 는 포비에이션 렌더링의 일 예를 도시하는 뷰 합성의 일 예를 도시한 회화적 (pictorial) 다이어그램이다. 도 4 에 도시된 예에서, GPU 드라이버 (32) 또는 제어기 (36) 는 이미지 표면을 각각 크기 NxN 의 9 개의 타일들 (68A-68I) 로 분할할 수도 있다. 타일들 (68A-68C) 의 렌더링 동안, GPU 드라이버 (32) 또는 제어기 (36) 는 타일들 (68A-68C) 에서의 이미지 콘텐츠에 대한 이미지 해상도가 1/16 해상도에 있다고 결정하였을 수도 있다. 따라서, 렌더링 패스 회로부 (58)는 도 4 에 도시된 바와 같이, 크기 N/4xN/4 의 뷰포트로 타일들 (68A-68C) 의 이미지 콘텐츠를 렌더링할 수도 있다. 예를 들어, 타일들 (68A-68C) 의 이미지 콘텐츠는 타일들 (68A-68C) 의 크기의 1/16 이다.
타일들 (68D, 68F 및 68G-68I) 의 렌더링 동안, GPU 드라이버 (32) 또는 제어기 (36) 는 타일들 (68D, 68F 및 68G-68I) 에서의 이미지 콘텐츠에 대한 이미지 해상도가 1/4 해상도에 있다고 결정하였을 수도 있다. 따라서, 렌더링 패스 회로부 (58) 는 도 4 에 도시된 바와 같이, 크기 N/2xN/2 의 뷰포트로 타일들 (68D, 68F, 및 68G-68I) 의 이미지 콘텐츠를 렌더링할 수도 있다. 예를 들어, 타일들 (68D, 68F, 및 68G-68I) 의 이미지 콘텐츠는 타일들 (68D, 68F 및 68G-68I) 의 크기의 1/4 이다. 타일 (68E) 의 렌더링 동안, GPU 드라이버 (32) 또는 제어기 (36) 는 타일 (68E) 에서의 이미지 콘텐츠에 대한 이미지 해상도가 전체 해상도에 있다고 결정하였을 수도 있다. 따라서, 렌더링 패스 회로부 (58) 는 도 4 에 도시된 바와 같이, 크기 NxN 의 뷰포트로 타일 (68E) 의 이미지 콘텐츠를 렌더링할 수도 있다. 예를 들어, 타일 (68E) 의 이미지 콘텐츠는 타일 (68E) 의 크기와 동일하다.
렌더링 패스 회로부 (58) 는 타일들 (68A-68I) 에 대한 이미지 콘텐츠를 로컬 메모리 (14) 에 저장할 수도 있다. 업샘플 회로 (42) 는 이미지 콘텐츠를 취출하고 각각 타일들의 이미지 콘텐츠를 업샘플링할 수도 있다. 예를 들어, 타일들 (68A-68C) 에서의 이미지 콘텐츠에 대해, 업샘플 회로 (42) 는 16 의 팩터로 이미지 콘텐츠를 업샘플링할 수도 있다. 타일들 (68D, 68F, 및 68G-68I) 에서의 이미지 콘텐츠에 대해, 업샘플 회로 (42) 는 이미지 콘텐츠를 4 의 팩터로 업샘플링할 수도 있다. 타일 (68E) 에서의 이미지 콘텐츠에 대해, 업샘플 회로 (42) 는 이미지 콘텐츠를 업샘플링하지 않을 수도 있다.
도 4 의 우측은 프레임 버퍼 (66) 에 저장되는 최종 이미지를 도시한다. 이 예에서, 이미지 표면은 뷰어가 포커싱되어야 하는, 이미지 표면의 중심에서 더 높은 해상도로 비교적 명확하게 보인다. 뷰어가 반드시 포커스할 필요가 없거나 이미지 콘텐츠에 큰 차이가 없는, 이미지 표면의 다른 부분들에 대해, GPU (12) 는 픽셀 셰이더 (64) 의 인스턴스들을 더 적게 실행해야하고, 일반적으로는 더 적은 픽셀들이 프로세싱하게 하며, 이는 적은 전력 사용량으로 더 빠른 렌더링을 야기한다.
도 5 는 포비에이션 렌더링의 일 예의 방법을 도시하는 플로우차트이다. 도 5 에 도시된 예에서, 비닝 패스 동안, 및 렌더링 패스 이전에, 비닝 패스 회로부 (48) 가 어느 정점들이 어느 타일들에 속하는지를 나타내는 정보를 포함하는 전체 해상도 표면에 대한 가시성 스트림을 생성할 수도 있다 (70). 예를 들어, 상술한 바와 같이, 정점 셰이더 (50) 는 비닝 회로 (52) 가 수신하는 정점들에 대한 클립 좌표들을 생성할 수도 있다. GPU 드라이버 (32) 또는 제어기 (36) 는 이미지 표면에 대한 타일들의 수 및 크기를 결정한다. 비닝 회로 (52) 는 클립 좌표를 수신하고 x 및 y 좌표에 기초하며, 타일들의 수 및 크기는 프리미티브들에 대한 정점들이 어느 타일에 속하는지를 결정한다. 또한, 심도 테스트 회로 (54) 는 정점 또는 프리미티브가 가시적인지 여부를 결정하고 스트림아웃 버퍼 (56) 에 가시적인 정점들을 출력할 수도 있다.
GPU 드라이버 (32) 또는 제어기 (36) 는 렌더링할 타일들이 더 많이 있는지 여부를 결정할 수도 있다 (72). 렌더링할 타일들이 더 많은 경우 (72 의 예), GPU 드라이버 (32) 또는 제어기 (36) 는 이미지 표면의 제 1 타일의 해상도가 제 1 해상도인 것을 결정할 수도 있다 (74). 이 예에서, 제 1 타일의 제 1 해상도는 다른 타일들의 이미지 해상도보다 낮을 수도 있다. 일 예로서, 제 1 타일은 타일 (68A) 일 수도 있다. 이 예에서, 타일 (68A) 에 대한 이미지 해상도는 1/16 이며, 타일 (68D) 에 대한 이미지 해상도는 1/4 이다.
제 1 타일에 대한 이미지 해상도를 결정하기 위해, GPU 드라이버 (32) 또는 제어기 (36)는 이미지 표면의 상이한 부분에 대한 해상도를 결정할 수도 있다. 예를 들어, 애플리케이션 (22) 은 해상도 대역들을 정의할 수도 있고, GPU 드라이버 (32) 또는 제어기 (36) 는 애플리케이션 (22) 이 정의한 해상도 대역에 기초하여 이미지 표면의 상이한 부분들에 대한 해상도를 결정할 수도 있다 (예를 들어, 이미지 표면에서의 타일들에 대한 x 및 y 좌표들을 해상도 대역들에 대한 좌표들과 비교하고 이미지 표면의 상이한 부분들에 대해 어떤 해상도가 있는지를 결정함으로써).
제 1 타일에 속하는 정점들에 대해, GPU 드라이버 (32) 또는 제어기 (36) 는 애플리케이션 (22) 에 의해 정의된 해상도 대역들에서의 정점들의 위치에 기초하여 이들 정점들에 대한 이미지 해상도들을 결정할 수도 있다. GPU 드라이버 (32) 또는 제어기 (36) 는 제 1 타일이 놓이는 대부분 (예를 들어, 제 1 이미지 해상도 대역 또는 제 2 이미지 해상도 대역) 에 기초하여 제 1 타일에 대한 해상도를 결정할 수도 있다. GPU 드라이버 (32) 또는 제어기 (36) 는 제 1 타일이 놓이는 해상도 대역에 기초하여 제 1 타일의 해상도를 결정할 수도 있다.
렌더링 패스 회로부 (58) 는 제 1 타일에 대한 이미지 콘텐츠를 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도에 기초하여 그리고 제 1 타일의 크기보다 작은 크기로 렌더링할 수도 있다. 예를 들어, GPU 드라이버 (32) 또는 제어기 (36) 는 뷰포트의 크기가 타일의 크기보다 작은 타일에 대한 뷰포트를 결정할 수도 있다 (76). 뷰포트의 크기를 결정하기 위해, GPU 드라이버 (32) 또는 제어기 (36) 는 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도 및 제 1 타일의 크기에 기초하여 제 1 타일에 대한 뷰포트를 정의할 수도 있다. 예를 들어, GPU 드라이버 (32) 또는 제어기 (36) 는 제 1 타일에서의 이미지 콘텐츠의 제 1 해상도와 전체 해상도 사이의 비를 제 1 타일의 크기로 승산하여 뷰포트의 크기를 결정할 수도 있다.
렌더링 패스 회로부 (58) 는 뷰포트의 결정된 크기에 기초하여 제 1 타일의 이미지 콘텐츠를 로컬 메모리 (14) 에 렌더링할 수도 있다 (78). 예를 들어, 렌더링 패스 회로부 (58) 는 제 1 타일에 대한 이미지 콘텐츠를 생성할 수도 있지만, 이미지 콘텐츠의 크기는 타일의 크기가 아닌 뷰포트의 크기일 수도 있다. 로컬 메모리 (14) 는 제 1 타일에 대한 이미지 콘텐츠를 저장할 수도 있다.
GPU 드라이버 (32) 또는 제어기 (36) 는 렌더링할 타일들이 더 많이 있는지 여부를 결정할 수도 있다 (72). 렌더링할 타일이 더 많으면 (72 의 예), GPU (12) 는 이러한 동작들을 상이한 타이에 대해 반복할 수도 있다. 예를 들어, GPU 드라이버 (32) 또는 제어기 (36) 는 이미지 표면의 제 2 타일이 제 2 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정할 수도 있고, 렌더링 패스 회로부 (58) 는 제 2 타일에 대한 이미지 콘텐츠를 제 2 타일의 크기보다 작은 크기로 제 2 타일에서의 이미지 콘텐츠의 제 2 해상도에 기초하여 렌더링할 수도 있다.
그러나, 렌더링할 타일이 더 이상 없는 경우 (72 의 아니오), 업샘플 회로 (42) 는 이미지 콘텐츠를 업샘플링하고 프레임 버퍼 (66) 에 출력할 수도 있다 (80). 업샘플 회로 (42) 는 이미지 해상도에 기초하여 업샘플링 할 수도 있다 (예를 들어, 타일에 대한 이미지 콘텐츠에 대해 1/4 해상도이면, 이미지 콘텐츠를 4 로 업샘플링함). 일부 예들에서, 업샘플 회로 (42) 는 출력의 일부로서 업샘플링할 수도 있다. 일부 예들에서, 업샘플 회로 (42) 는 먼저 제 1 타일의 이미지 콘텐츠 모두를 업샘플링하고, 그 이미지 콘텐츠를 저장한 다음 이미지 콘텐츠를 프레임 버퍼 (66) 에 출력할 수도 있다.
다음은 그래픽스 드라이버 (32) 또는 제어기 (36) 가 타일에 대한 이미지 해상도를 어떻게 결정하는지를 표시하는 의사 코드이다:
Figure pct00005
위의 예시의 기법들은 포비에이션 렌더링에 다양한 이점들을 제공할 수도 있다. 일부 다른 기법들에서, (애플리케이션 (22) 과 같은) 애플리케이션은 상이한 해상도로 렌더링하기를 원하는 각각의 영역에 대해 별도의 프레임 버퍼를 생성할 수도 있다. 애플리케이션은 각각의 프레임 버퍼들에 대해 상이한 프로젝션 행렬들을 결정하고, 이들 프레임 버퍼들 각각에 대해 커맨드 버퍼들을 생성할 수도 있다. 애플리케이션은 GPU 드라이버 (32) 가 상이한 프레임 버퍼들을 단일 프레임 버퍼에 블리트 (blit)(예를 들어, 하나로 결합) 하도록 명령할 수도 있다. 그 후, GPU (12) 는 프레임 버퍼들 각각의 비닝을 수행하고 이들 프레임 버퍼들의 타일들에 대한 프리미티브들 모두를 렌더링할 수도 있다. GPU (12) 는 더 작은 프레임 버퍼들의 각각의 타일을 메모리 (10) 에 출력할 수도 있고, 그 후 GPU (12) 는 메모리 (10) 로부터 각각의 더 작은 프레임 버퍼로부터 데이터를 다시 판독하고 (또는 디스플레이 프로세서 (16) 가 각각의 더 작은 프레임 버퍼로부터 데이터를 다시 판독하고) 더 큰 프레임 버퍼 상의 그들의 영역으로 블리트한다.
그러나, 상기 기법들에서, 애플리케이션 (22) 은 다른 기법들에서 필요했던 것처럼 각각의 프레임 버퍼에 대해서보다는 커맨드들을 단지 한번만 필요로 할 수도 있으며, 이는 CPU (6) 에 대한 3x 작업부하를 절약할 수 있다. 또한, GPU (12) 는 단 한번만 비닝을 수행하고 상이한 프로젝션 행렬에 의존하지 않아야 하며, 이는 다수의 상이한 프레임 버퍼들이 필요한 일부 다른 기법들과 비교하여 정점 및 프리미티브 프로세싱 작업부하에 관하여 3x 절약할 수 있다 (예를 들어, 다수의 상이한 이미지들이 렌더링되고, 시스템 메모리 메모리 (10) 로부터 다시 판독된 다음, 함께 결합된다). 또한, 상기 기법들에서, GPU (12) 는 상이한 이미지들을 시스템 메모리 (10) 에 기입한 다음 결합을 위해 이들을 다시 판독할 필요가 없으며, 이는 전력 및 메모리 대역폭을 절약할 수 있다.
상기는 포비티드 렌더링을 수행하는 하나의 예를 설명한다. 하지만, 본 개시에 설명된 기술들은 그렇게 한정되지 않는다.
또 다른 예시의 포비에이션 기법으로서, CPU (6) 및 GPU (12) 는 상술한 것들과 같은 유사한 기법들을 사용하여 어느 프리미티브들이 어느 타일에 속하는지를 결정할 수도 있다 (예를 들어, 상기와 유사하게 비닝 패스를 수행함). 비닝 패스를 수행한 후에, GPU (12) 는 전체 표면의 이미지 콘텐츠를 애플리케이션 (22) 의해 정의된 해상도의 최소 해상도로 저장할 수도 있다. GPU (12) 는 전체 이미지를 중간 해상도로 업샘플링할 수도 있다 (예를 들어, 1/16 해상도에서 1/4 해상도로 감). 이 경우 전체 이미지 표면에 대한 픽셀 해상도는 1/4 픽셀 해상도이지만 이미지 해상도는 1/16 이다.
1/4 이미지 해상도로 렌더링되어야 하는 이미지 표면의 부분들에 대해, CPU (6) 는 시저 (scissor) 영역을 정의할 수도 있고, GPU (12) 는 시저 영역 내의 부분만을 1/4 픽셀 해상도로 렌더링할 수도 있다. GPU (12) 는 결과의 전체 이미지 표면을 업샘플링할 수도 있다.
이 경우, 1/16 이미지 해상도를 갖는 일부 부분들과, 1/4 이미지 해상도를 갖는 다른 부분들이 있을 것이지만, 전체 이미지는 전체 픽셀 해상도에 있을 것이다. CPU (6) 는 전체 이미지 해상도가 될 임의의 부분들이 있는지를 결정하고, 이들 영역들을 시저링할 수도 있다. GPU (12) 는 전체 픽셀 해상도에서 시저 영역의 이미지 콘텐츠를 렌더링할 수도 있다. 따라서, 마지막에는 1/16 이미지 해상도를 갖는 일부 부분들, 1/4 이미지 해상도를 갖는 다른 부분들, 및 전체 이미지 해상도의 다른 부분들이 있을 것이다. 이러한 방식으로, GPU (12) 는 포비에이션 렌더링의 다른 예시적인 방법을 제공할 수도 있다.
본 개시에서 설명된 기법들은, 적어도 부분적으로, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합에서 구현될 수도 있다. 예를 들어, 설명된 기법들의 다양한 양태들은 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서들 (DSP들), 주문형 집적 회로들 (ASIC들), 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 또는 임의의 다른 균등한 집적된 또는 별개의 로직 회로부 뿐 아니라 그러한 컴포넌트들의 임의의 조합들을 포함한 하나 이상의 프로세서들 내에서 구현될 수도 있다. 용어 "프로세서" 또는 "프로세싱 회로부" 는 일반적으로, 전술한 로직 회로부의 임의의 로직 회로부를 단독으로 또는 다른 로직 회로부와 결합하여 지칭하거나, 또는 프로세싱을 수행하는 별개의 하드웨어와 같은 임의의 다른 균등한 회로부를 지칭할 수도 있다.
그러한 하드웨어, 소프트웨어, 및 펌웨어는, 본 개시에서 설명된 다양한 동작들 및 기능들을 지원하기 위해 동일한 디바이스 내에서 또는 별도의 디바이스들 내에서 구현될 수도 있다. 부가적으로, 설명된 유닛들, 모듈들 또는 컴포넌트들 중 임의의 것은, 별개지만 상호운용가능한 로직 디바이스들로서 별도로 또는 함께 구현될 수도 있다. 상이한 특징부들의 모듈들 또는 유닛들로서의 서술은 상이한 기능적 양태들을 하이라이트하도록 의도되며, 반드시 그러한 모듈들 또는 유닛들이 별도의 하드웨어 또는 소프트웨어 컴포넌트들에 의해 실현되어야 함을 의미하지는 않는다. 대신, 하나 이상의 모듈들 또는 유닛들과 연관된 기능은 별도의 하드웨어, 펌웨어, 및/또는 소프트웨어 컴포넌트들에 의해 수행되거나, 또는 공통의 또는 별도의 하드웨어 또는 소프트웨어 컴포넌트들 내에서 통합될 수도 있다.
본 개시에서 설명된 교시들은 또한, 명령들을 저장하는 컴퓨터 판독가능 저장 매체와 같은 컴퓨터 판독가능 매체에서 저장되거나 구현되거나 인코딩될 수도 있다. 컴퓨터 판독가능 매체에서 구현되거나 인코딩된 명령들은 하나 이상의 프로세서들로 하여금 예를 들어 명령들이 하나 이상의 프로세서들에 의해 실행될 경우 본 명세서에서 설명된 기법들을 수행하게 할 수도 있다. 컴퓨터 판독가능 저장 매체들은 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 프로그래밍가능 판독 전용 메모리 (PROM), 소거가능한 프로그래밍가능 판독 전용 메모리 (EPROM), 전기적으로 소거가능한 프로그래밍가능 판독 전용 메모리 (EEPROM), 플래시 메모리, 하드 디스크, CD-ROM, 플로피 디스크, 카세트, 자기 매체들, 광학 매체들, 또는 유형인 다른 컴퓨터 판독가능 저장 매체들을 포함할 수도 있다.
다양한 양태들 및 예들이 설명되었다. 하지만, 다음의 청구항들의 범위로부터 일탈함없이 본 개시의 구조 또는 기법들에 대해 수정들이 행해질 수 있다.

Claims (24)

  1. 포비에이션 (foveation) 렌더링의 방법으로서,
    이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 단계로서, 상기 제 1 해상도는 상기 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하는 단계;
    상기 제 1 타일의 크기보다 작은 크기로 그리고 상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도에 기초하여 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하는 단계;
    업샘플링된 이미지 콘텐츠를 생성하기 위해 상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하는 단계; 및
    상기 업샘플링된 이미지 콘텐츠를 출력하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  2. 제 1 항에 있어서,
    상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도 및 상기 제 1 타일의 크기에 기초하여 상기 제 1 타일에 대한 뷰포트를 정의하는 단계를 더 포함하고,
    상기 제 1 타일의 크기보다 작은 크기로 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하는 단계는, 상기 제 1 타일에 대해 정의된 상기 뷰포트에 기초하여 상기 이미지 콘텐츠를 렌더링하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  3. 제 2 항에 있어서,
    상기 뷰포트를 정의하는 단계는,
    상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도와 상기 이미지 콘텐츠의 전체 해상도 사이의 비를 상기 제 1 타일의 크기로 승산하여 상기 뷰포트의 크기를 결정하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  4. 제 1 항에 있어서,
    상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하는 단계; 및
    비닝 패스 (binning pass) 동안, 그리고 상기 렌더링 이전에, 상기 이미지 표면의 프리미티브들의 어느 정점들이 상기 제 1 타일에 속하는지를 결정하는 단계를 더 포함하고,
    상기 이미지 표면의 상기 제 1 타일이 상기 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 단계는, 상기 이미지 표면의 어느 정점들이 상기 제 1 타일에 속하는지의 결정 및 상기 이미지 표면의 상이한 부분들에 대한 해상도들의 결정에 기초하여 상기 이미지 표면의 상기 제 1 타일이 상기 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  5. 제 4 항에 있어서,
    상기 이미지 표면의 부분들에 대한 해상도들을 표시하는 정보를 수신하는 단계를 더 포함하고,
    상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하는 단계는, 수신된 상기 정보에 기초하여 상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  6. 제 1 항에 있어서,
    상기 이미지 콘텐츠를 업샘플링하는 단계는, 상기 업샘플링된 이미지 콘텐츠를 출력하는 단계의 일부로서 업샘플링하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  7. 제 1 항에 있어서,
    상기 업샘플링된 이미지 콘텐츠는 제 1 업샘플링된 이미지 콘텐츠를 포함하고, 상기 방법은,
    상기 이미지 표면의 제 2 타일이 상기 제 2 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 단계;
    상기 제 2 타일의 크기보다 작은 크기로 그리고 상기 제 2 타일에서의 상기 이미지 콘텐츠의 상기 제 2 해상도에 기초하여 상기 제 2 타일에 대한 상기 이미지 콘텐츠를 렌더링하는 단계;
    제 2 업샘플링된 이미지 콘텐츠를 생성하기 위해 상기 제 2 타일에서의 상기 이미지 콘텐츠를 업샘플링하는 단계; 및
    상기 제 2 업샘플링된 이미지 콘텐츠를 출력하는 단계를 더 포함하는, 포비에이션 렌더링의 방법.
  8. 제 7 항에 있어서,
    상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하는 단계 및 상기 제 1 업샘플링된 이미지 콘텐츠를 출력하는 단계는, 상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하는 단계 및 상기 제 2 타일에 대한 상기 이미지 콘텐츠를 렌더링한 후에 상기 제 1 업샘플링된 이미지 콘텐츠를 출력하는 단계를 포함하는, 포비에이션 렌더링의 방법.
  9. 제 1 항에 있어서,
    상기 업샘플링된 이미지 콘텐츠를 디스플레이하는 단계를 더 포함하는, 포비에이션 렌더링의 방법.
  10. 포비에이션 렌더링을 위한 디바이스로서,
    시스템 메모리; 및
    프로그램가능 또는 고정-기능 회로부 중 적어도 하나를 포함하는 그래픽스 프로세싱 유닛 (GPU) 을 포함하고,
    상기 GPU 는,
    이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 것으로서, 상기 제 1 해상도는 상기 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하고;
    상기 제 1 타일의 크기보다 작은 크기로 그리고 상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도에 기초하여 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하고;
    업샘플링된 이미지 콘텐츠를 생성하기 위해 상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하며; 그리고
    상기 시스템 메모리에서의 저장을 위해 상기 업샘플링된 이미지 콘텐츠를 출력하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  11. 제 10 항에 있어서,
    상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도 및 상기 제 1 타일의 크기에 기초하여 상기 제 1 타일에 대한 뷰포트를 정의하도록 구성된 프로세서를 더 포함하고,
    상기 제 1 타일의 크기보다 작은 크기로 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하기 위해, 상기 GPU 는 상기 제 1 타일에 대해 정의된 상기 뷰포트에 기초하여 상기 이미지 콘텐츠를 렌더링하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  12. 제 11 항에 있어서,
    상기 뷰포트를 정의하기 위해, 상기 프로세서는 상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도와 상기 이미지 콘텐츠의 전체 해상도 사이의 비를 상기 제 1 타일의 크기로 승산하여 상기 뷰포트의 크기를 결정하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  13. 제 10 항에 있어서,
    상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하도록 구성된 프로세서를 더 포함하고,
    상기 GPU 는 비닝 패스 동안, 그리고 상기 렌더링 이전에, 상기 이미지 표면의 프리미티브들의 어느 정점들이 상기 제 1 타일에 속하는지를 결정하도록 구성되고,
    상기 이미지 표면의 상기 제 1 타일이 상기 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하기 위해, 상기 GPU 는 상기 이미지 표면의 어느 정점들이 상기 제 1 타일에 속하는지의 결정 및 상기 이미지 표면의 상이한 부분들에 대한 해상도들의 결정에 기초하여 상기 이미지 표면의 상기 제 1 타일이 상기 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  14. 제 13 항에 있어서,
    상기 GPU 는 상기 이미지 표면의 부분들에 대한 해상도들을 표시하는 정보를 수신하도록 구성되고,
    상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하기 위해, 상기 GPU 는 수신된 상기 정보에 기초하여 상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  15. 제 10 항에 있어서,
    업샘플링하기 위해, 상기 GPU 는 상기 업샘플링된 이미지 콘텐츠를 출력하는 것의 일부로서 상기 이미지 콘텐츠를 업샘플링하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  16. 제 10 항에 있어서,
    상기 업샘플링된 이미지 콘텐츠는 제 1 업샘플링된 이미지 콘텐츠를 포함하고, 상기 GPU 는,
    상기 이미지 표면의 제 2 타일이 상기 제 2 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하고;
    상기 제 2 타일의 크기보다 작은 크기로 그리고 상기 제 2 타일에서의 상기 이미지 콘텐츠의 상기 제 2 해상도에 기초하여 상기 제 2 타일에 대한 상기 이미지 콘텐츠를 렌더링하고;
    제 2 업샘플링된 이미지 콘텐츠를 생성하기 위해 상기 제 2 타일에서의 상기 이미지 콘텐츠를 업샘플링하며; 그리고
    상기 제 2 업샘플링된 이미지 콘텐츠를 출력하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  17. 제 16 항에 있어서,
    상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하고 상기 제 1 업샘플링된 이미지 콘텐츠를 출력하기 위해, 상기 GPU 는, 상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하고 상기 제 2 타일에 대한 상기 이미지 콘텐츠를 렌더링한 후에 상기 제 1 업샘플링된 이미지 콘텐츠를 출력하도록 구성되는, 포비에이션 렌더링을 위한 디바이스.
  18. 제 10 항에 있어서,
    상기 업샘플링된 이미지 콘텐츠를 디스플레이에 출력하도록 구성된 디스플레이 프로세서를 더 포함하는, 포비에이션 렌더링을 위한 디바이스.
  19. 포비에이션 렌더링을 위한 디바이스로서,
    이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 수단으로서, 상기 제 1 해상도는 상기 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하는 수단;
    상기 제 1 타일의 크기보다 작은 크기로 그리고 상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도에 기초하여 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하는 수단;
    업샘플링된 이미지 콘텐츠를 생성하기 위해 상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하는 수단; 및
    상기 업샘플링된 이미지 콘텐츠를 출력하는 수단을 포함하는, 포비에이션 렌더링을 위한 디바이스.
  20. 제 19 항에 있어서,
    상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도 및 상기 제 1 타일의 크기에 기초하여 상기 제 1 타일에 대한 뷰포트를 정의하는 수단을 더 포함하고,
    상기 제 1 타일의 크기보다 작은 크기로 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하는 수단은, 상기 제 1 타일에 대해 정의된 상기 뷰포트에 기초하여 상기 이미지 콘텐츠를 렌더링하는 수단을 포함하는, 포비에이션 렌더링을 위한 디바이스.
  21. 제 19 항에 있어서,
    상기 이미지 표면의 상이한 부분들에 대한 해상도들을 결정하는 수단; 및
    비닝 패스 동안, 그리고 상기 렌더링 이전에, 상기 이미지 표면의 프리미티브들의 어느 정점들이 상기 제 1 타일에 속하는지를 결정하는 수단을 더 포함하고,
    상기 이미지 표면의 상기 제 1 타일이 상기 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 수단은, 상기 이미지 표면의 어느 정점들이 상기 제 1 타일에 속하는지의 결정 및 상기 이미지 표면의 상이한 부분들에 대한 해상도들의 결정에 기초하여 상기 이미지 표면의 상기 제 1 타일이 상기 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하는 수단을 포함하는, 포비에이션 렌더링을 위한 디바이스.
  22. 제 19 항에 있어서,
    상기 출력하는 수단은 상기 업샘플링하는 수단을 포함하는, 포비에이션 렌더링을 위한 디바이스.
  23. 명령들을 저장하는 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 실행될 때, 포비에이션 렌더링을 위한 디바이스의 하나 이상의 프로세서들로 하여금,
    이미지 표면의 제 1 타일이 제 1 해상도를 갖는 이미지 콘텐츠를 포함할 것임을 결정하게 하는 것으로서, 상기 제 1 해상도는 상기 이미지 표면의 다른 타일들에 대한 제 2 해상도보다 작은, 상기 이미지 콘텐츠를 포함할 것임을 결정하게 하고;
    상기 제 1 타일의 크기보다 작은 크기로 그리고 상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도에 기초하여 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하게 하고;
    업샘플링된 이미지 콘텐츠를 생성하기 위해 상기 제 1 타일에서의 상기 이미지 콘텐츠를 업샘플링하게 하며; 그리고
    상기 업샘플링된 이미지 콘텐츠를 출력하게 하는, 컴퓨터 판독가능 저장 매체.
  24. 제 23 항에 있어서,
    상기 하나 이상의 프로세서들로 하여금,
    상기 제 1 타일에서의 상기 이미지 콘텐츠의 상기 제 1 해상도 및 상기 제 1 타일의 크기에 기초하여 상기 제 1 타일에 대한 뷰포트를 정의하게 하는 명령들을 더 포함하고,
    상기 하나 이상의 프로세서들로 하여금 상기 제 1 타일의 크기보다 작은 크기로 상기 제 1 타일에 대한 상기 이미지 콘텐츠를 렌더링하게 하는 상기 명령들은, 상기 하나 이상의 프로세서들로 하여금 상기 제 1 타일에 대해 정의된 상기 뷰포트에 기초하여 상기 이미지 콘텐츠를 렌더링하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
KR1020197017666A 2016-12-23 2017-10-23 타일식 아키텍처들에서의 포비티드 렌더링 KR102475212B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/390,333 US11222397B2 (en) 2016-12-23 2016-12-23 Foveated rendering in tiled architectures
US15/390,333 2016-12-23
PCT/US2017/057915 WO2018118203A1 (en) 2016-12-23 2017-10-23 Foveated rendering in tiled architectures

Publications (2)

Publication Number Publication Date
KR20190100194A true KR20190100194A (ko) 2019-08-28
KR102475212B1 KR102475212B1 (ko) 2022-12-06

Family

ID=60268488

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197017666A KR102475212B1 (ko) 2016-12-23 2017-10-23 타일식 아키텍처들에서의 포비티드 렌더링

Country Status (7)

Country Link
US (1) US11222397B2 (ko)
EP (1) EP3559914B1 (ko)
KR (1) KR102475212B1 (ko)
CN (1) CN110036413B (ko)
AU (1) AU2017382489A1 (ko)
BR (1) BR112019012641B1 (ko)
WO (1) WO2018118203A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10535114B2 (en) * 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
GB2553744B (en) 2016-04-29 2018-09-05 Advanced Risc Mach Ltd Graphics processing systems
GB2572625B (en) 2018-04-05 2020-06-17 Imagination Tech Ltd Ordering in tessellation operations
GB2573543B (en) * 2018-05-09 2021-10-27 Advanced Risc Mach Ltd Graphics Processing
US10937126B2 (en) * 2018-05-17 2021-03-02 Intel Corporation Tile-based multiple resolution rendering of images
EP3598391B1 (en) * 2018-07-16 2023-09-06 Huawei Technologies Co., Ltd. Variable resolution rendering
US10796478B2 (en) 2018-09-26 2020-10-06 Qualcomm Incorporated Dynamic rendering for foveated rendering
JP7210748B2 (ja) * 2018-12-27 2023-01-23 ホアウェイ・テクノロジーズ・カンパニー・リミテッド ビデオエンコーダ、ビデオデコーダ、および対応する方法
MX2021007926A (es) * 2018-12-28 2021-10-22 Huawei Tech Co Ltd Un codificador de video, un decodificador de video y metodos correspondientes.
CN112015929A (zh) 2019-05-30 2020-12-01 阿里巴巴集团控股有限公司 栅格数据访问方法、装置、电子设备及计算机存储介质
KR20230144093A (ko) * 2019-07-28 2023-10-13 구글 엘엘씨 포비에이티드 메시들로 몰입형 비디오 콘텐츠를 렌더링하기 위한 방법들, 시스템들, 및 매체들
US11049216B1 (en) * 2020-01-21 2021-06-29 Arm Limited Graphics processing systems
US11030783B1 (en) 2020-01-21 2021-06-08 Arm Limited Hidden surface removal in graphics processing systems
US11600002B2 (en) * 2020-06-03 2023-03-07 Qualcomm Incorporated Bin filtering
US11893654B2 (en) * 2021-07-12 2024-02-06 Qualcomm Incorporated Optimization of depth and shadow pass rendering in tile based architectures
CN116263982B (zh) * 2022-04-20 2023-10-20 象帝先计算技术(重庆)有限公司 图形处理器、系统、方法、电子装置及设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100226593A1 (en) * 2009-03-04 2010-09-09 Microsoft Corporation Scalable mutable tiled multi-resolution texture atlases
US20110173570A1 (en) * 2010-01-13 2011-07-14 Microsoft Corporation Data feeds with peripherally presented interesting content
US20160284119A1 (en) * 2015-03-24 2016-09-29 Prasoonkumar Surti Hardware Based Free Lists for Multi-Rate Shader
US20160379606A1 (en) * 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Holographic near-eye display
US20180089799A1 (en) * 2016-09-23 2018-03-29 Apple Inc. Methods and systems for spatially localized image editing

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5682441A (en) 1995-11-08 1997-10-28 Storm Technology, Inc. Method and format for storing and selectively retrieving image data
US6643666B1 (en) * 1998-02-26 2003-11-04 James J. Kernz Apparatus and method for accessing a coin image compilation
US6366899B1 (en) * 1998-02-26 2002-04-02 James J. Kernz Apparatus and method for accessing a coin image compilation
US7075535B2 (en) * 2003-03-05 2006-07-11 Sand Codex System and method for exact rendering in a zooming user interface
WO2006012678A1 (en) 2004-08-03 2006-02-09 Silverbrook Research Pty Ltd Walk-up printing
US20060075034A1 (en) 2004-09-24 2006-04-06 Harri Lakkala Method and apparatus for creating and storing personal information relating to earth shaking events
US9384619B2 (en) 2006-07-31 2016-07-05 Ricoh Co., Ltd. Searching media content for objects specified using identifiers
US7933632B2 (en) * 2005-09-16 2011-04-26 Microsoft Corporation Tile space user interface for mobile devices
US8619083B2 (en) 2009-01-06 2013-12-31 Microsoft Corporation Multi-layer image composition with intermediate blending resolutions
US20100229115A1 (en) 2009-03-05 2010-09-09 Microsoft Corporation Zoomable user interface data generation
US20110087737A1 (en) 2009-10-14 2011-04-14 Cbs Interactive, Inc. Systems and methods for living user reviews
BR112012009893B1 (pt) 2009-10-26 2021-02-02 Sony Computer Entertainment Inc. dispositivos e métodos de geração de arquivo de imagem e de processamento de imagem, mídia de gravação não transitória legível por computador, e, estrutura de dados de um arquivo de imagem
US8957920B2 (en) * 2010-06-25 2015-02-17 Microsoft Corporation Alternative semantics for zoom operations in a zoomable scene
US8549425B2 (en) * 2010-12-02 2013-10-01 Sony Corporation Visual treatment for a user interface in a content integration framework
US9690099B2 (en) 2010-12-17 2017-06-27 Microsoft Technology Licensing, Llc Optimized focal area for augmented reality displays
EP2721816A4 (en) 2011-06-16 2015-03-18 Freescale Semiconductor Inc METHOD AND DEVICE FOR ENCODING AND DECODING AN IMAGE
US20130016128A1 (en) * 2011-07-13 2013-01-17 Apple Inc. Tiled Zoom of Multiple Digital Image Portions
JP5792607B2 (ja) * 2011-12-09 2015-10-14 株式会社ソニー・コンピュータエンタテインメント 画像処理装置および画像処理方法
US10242481B2 (en) * 2012-03-15 2019-03-26 Qualcomm Incorporated Visibility-based state updates in graphical processing units
CN102750725B (zh) * 2012-06-05 2016-04-06 南京安讯网络服务有限公司 基于图形处理器加速的地形渲染方法
US9727991B2 (en) * 2013-03-01 2017-08-08 Microsoft Technology Licensing, Llc Foveated image rendering
US20140267616A1 (en) 2013-03-15 2014-09-18 Scott A. Krig Variable resolution depth representation
US9928610B2 (en) 2014-06-27 2018-03-27 Samsung Electronics Co., Ltd. Motion based adaptive rendering
KR102327144B1 (ko) * 2014-11-26 2021-11-16 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
US20160212423A1 (en) 2015-01-16 2016-07-21 Microsoft Technology Licensing, Llc Filtering to mitigate artifacts when changing chroma sampling rates
CN104679509B (zh) * 2015-02-06 2019-11-15 腾讯科技(深圳)有限公司 一种渲染图形的方法和装置
US10037620B2 (en) * 2015-05-29 2018-07-31 Nvidia Corporation Piecewise linear irregular rasterization
EP4016250A1 (en) 2015-07-17 2022-06-22 Magic Leap, Inc. Virtual/augmented reality system having dynamic region resolution
US9807416B2 (en) 2015-09-21 2017-10-31 Google Inc. Low-latency two-pass video coding
KR102454893B1 (ko) * 2015-09-30 2022-10-14 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치의 동작 방법
US10726619B2 (en) * 2015-10-29 2020-07-28 Sony Interactive Entertainment Inc. Foveated geometry tessellation
US11010956B2 (en) * 2015-12-09 2021-05-18 Imagination Technologies Limited Foveated rendering
US10643296B2 (en) * 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
US10157448B2 (en) * 2016-02-12 2018-12-18 Qualcomm Incorporated Foveated video rendering
CN105676470B (zh) * 2016-03-24 2018-04-10 清华大学 一种三维场景的视觉上的空间分辨率增强方法及系统
US10169846B2 (en) * 2016-03-31 2019-01-01 Sony Interactive Entertainment Inc. Selective peripheral vision filtering in a foveated rendering system
US10401952B2 (en) * 2016-03-31 2019-09-03 Sony Interactive Entertainment Inc. Reducing rendering computation and power consumption by detecting saccades and blinks
US10192528B2 (en) * 2016-03-31 2019-01-29 Sony Interactive Entertainment Inc. Real-time user adaptive foveated rendering
US10255714B2 (en) * 2016-08-24 2019-04-09 Disney Enterprises, Inc. System and method of gaze predictive rendering of a focal area of an animation
US10379611B2 (en) * 2016-09-16 2019-08-13 Intel Corporation Virtual reality/augmented reality apparatus and method
US20180082464A1 (en) * 2016-09-16 2018-03-22 Tomas G. Akenine-Moller Apparatus and method for an efficient 3d graphics pipeline
US10262387B2 (en) * 2016-11-14 2019-04-16 Google Llc Early sub-pixel rendering
US20180137602A1 (en) * 2016-11-14 2018-05-17 Google Inc. Low resolution rgb rendering for efficient transmission
US10453271B2 (en) * 2016-12-07 2019-10-22 Microsoft Technology Licensing, Llc Automated thumbnail object generation based on thumbnail anchor points
US10298840B2 (en) 2017-01-31 2019-05-21 Microsoft Technology Licensing, Llc Foveated camera for video augmented reality and head mounted display
US10565964B2 (en) 2017-04-24 2020-02-18 Intel Corporation Display bandwidth reduction with multiple resolutions
WO2018226676A1 (en) 2017-06-05 2018-12-13 Google Llc Smoothly varying foveated rendering
US10504272B2 (en) 2017-06-13 2019-12-10 Intel Corporation Apparatus and method for optimizing time/space warp for virtual reality using dynamic tiling and dirty tile marking
US10580151B2 (en) 2017-12-05 2020-03-03 Qualcomm Incorporated Tile-based low-resolution depth storage

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100226593A1 (en) * 2009-03-04 2010-09-09 Microsoft Corporation Scalable mutable tiled multi-resolution texture atlases
US20110173570A1 (en) * 2010-01-13 2011-07-14 Microsoft Corporation Data feeds with peripherally presented interesting content
US20160284119A1 (en) * 2015-03-24 2016-09-29 Prasoonkumar Surti Hardware Based Free Lists for Multi-Rate Shader
US20160379606A1 (en) * 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Holographic near-eye display
US20180089799A1 (en) * 2016-09-23 2018-03-29 Apple Inc. Methods and systems for spatially localized image editing

Also Published As

Publication number Publication date
EP3559914C0 (en) 2023-10-18
EP3559914B1 (en) 2023-10-18
AU2017382489A1 (en) 2019-05-23
BR112019012641A2 (pt) 2019-11-19
BR112019012641A8 (pt) 2023-04-04
CN110036413B (zh) 2023-06-02
US11222397B2 (en) 2022-01-11
EP3559914A1 (en) 2019-10-30
WO2018118203A1 (en) 2018-06-28
US20180182066A1 (en) 2018-06-28
KR102475212B1 (ko) 2022-12-06
CN110036413A (zh) 2019-07-19
BR112019012641B1 (pt) 2024-02-15

Similar Documents

Publication Publication Date Title
KR102475212B1 (ko) 타일식 아키텍처들에서의 포비티드 렌더링
US10885607B2 (en) Storage for foveated rendering
EP3180773B1 (en) Bandwidth reduction using texture lookup by adaptive shading
CN106296565B (zh) 图形管线方法和设备
CN109564694B (zh) 用于基于入库的图形处理的顶点着色器
US20160171644A1 (en) Processing unaligned block transfer operations
US9280956B2 (en) Graphics memory load mask for graphics processing
US20190035049A1 (en) Dithered variable rate shading
US10078883B2 (en) Writing graphics data from local memory to system memory
US9852536B2 (en) High order filtering in a graphics processing unit
US10580151B2 (en) Tile-based low-resolution depth storage
KR20170132758A (ko) 하이브리드 2d/3d 그래픽 렌더링
CN106575428B (zh) 图形处理单元中的高阶滤波

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant