KR20210152952A - 그래픽 프로세싱 - Google Patents

그래픽 프로세싱 Download PDF

Info

Publication number
KR20210152952A
KR20210152952A KR1020210072494A KR20210072494A KR20210152952A KR 20210152952 A KR20210152952 A KR 20210152952A KR 1020210072494 A KR1020210072494 A KR 1020210072494A KR 20210072494 A KR20210072494 A KR 20210072494A KR 20210152952 A KR20210152952 A KR 20210152952A
Authority
KR
South Korea
Prior art keywords
shading rate
depth
shading
primitive
render
Prior art date
Application number
KR1020210072494A
Other languages
English (en)
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 KR20210152952A publication Critical patent/KR20210152952A/ko

Links

Images

Classifications

    • 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
    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes

Landscapes

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

Abstract

상이한 셰이딩 레이트들을 사용하여 렌더 출력을 생성하기 위해 프리미티브들을 렌더링할 수 있는 렌더러를 포함하는 그래픽 프로세서를 동작시키는 방법이 개시된다. 프리미티브를 렌더링하기 위한 셰이딩 레이트는 프리미티브에 대한 깊이 값에 기초하여 결정된다. 이는 허용가능한 이미지 품질을 유지하면서 렌더 출력을 렌더링하는 데 요구되는 프로세싱 노력을 감소시킬 수 있다.

Description

그래픽 프로세싱{GRAPHICS PROCESSING}
본 명세서에 설명된 기술은 컴퓨터 그래픽의 프로세싱에 관한 것으로, 특히 그래픽 프로세서를 동작시키는 방법에 관한 것이다.
그래픽 프로세싱은 보통, 먼저 디스플레이될 장면(예컨대, 3-D 모델)을 다수의 유사한 기본 컴포넌트들 또는 "프리미티브(primitive)들"로 분할함으로써 수행되며, 이어서 이러한 프리미티브들은 원하는 그래픽 프로세싱 동작들을 받게 된다. 그래픽 "프리미티브들"은 보통 삼각형들과 같은 단순한 다각형들의 형태이다.
그래픽 프리미티브들은 그래픽 프로세싱(렌더) 출력을 요구하는 애플리케이션(예컨대, 게임)으로부터 수신된 그래픽 드로잉 명령어들(요청들)을 사용하여, 그래픽 프로세싱 시스템에 대한 애플리케이션 프로그램 인터페이스(API)에 의해 생성된다.
각각의 프리미티브는 이 스테이지에서 정점들의 세트에 의해 정의되고 그것으로 표현된다. 프리미티브에 대한 각각의 정점은 정점을 표현하는 데이터의 세트(예컨대, 포지션, 색상, 텍스처 및 다른 속성 데이터)와 그것을 연관시켰다. 이어서, 이러한 "정점 데이터"는, 예를 들어, 그래픽 프로세싱 시스템의 원하는 렌더 출력을 생성하기 위해 정점이 관련되는 프리미티브(들)를 래스터화하고 렌더링할 때 사용된다.
그래픽 프로세싱 시스템에 의해 생성될 주어진 출력, 예를 들어, 디스플레이될 프레임에 대해, 전형적으로 해당 출력에 대해 정의된 정점들의 세트가 있을 것이다. 이어서, 출력을 위해 프로세싱될 프리미티브들은 생성되는 그래픽 프로세싱 출력에 대한 정점들의 세트 내의 주어진 정점들을 포함하는 것으로 나타내어질 것이다. 전형적으로, 전체 출력, 예컨대, 생성될 프레임은 "드로우콜(draw call)"들로 지칭되는, 더 작은 프로세싱 유닛들로 분할될 것이다. 각각의 드로우콜은 그에 대해 정의된 정점들의 각자의 세트 및 그러한 정점들을 사용하는 프리미티브들의 세트를 가질 것이다.
일단 프리미티브들 및 그들의 정점들이 생성되고 정의되면, 이들은 디스플레이를 위한 프레임과 같은 원하는 그래픽 프로세싱 출력(렌더 출력)을 생성하기 위해 그래픽 프로세싱 시스템에 의해 프로세싱될 수 있다.
이는 기본적으로 프로세싱될 렌더 출력 영역과 연관된 샘플링 포인트들의 어레이 중 어느 샘플링 포인트들이 프리미티브에 의해 커버되는지를 결정하는 것, 및 이어서 각각의 샘플링 포인트가 그 샘플링 포인트에서 프리미티브를 표현하기 위해 (예컨대, 그것의 색상 등와 관점에서) 가져야 하는 외관을 결정하는 것을 수반한다. 이들 프로세스는 일반적으로 각각 래스터화 및 렌더링으로 지칭된다.
래스터화 프로세스는 프리미티브에 사용되어야 하는 샘플 포인트들(즉, 출력, 예컨대 디스플레이될 장면에서 프리미티브를 표현하는 데 사용될 샘플 포인트들의 (x, y) 포지션들)을 결정한다. 이는 전형적으로 프리미티브의 정점들의 포지션들을 사용하여 행해진다.
이어서, 렌더링 프로세스는 샘플 포인트들에서 프리미티브를 표현하는(즉, 각각의 샘플 포인트를 "셰이딩하는") 데 필요한, 적색, 녹색 및 청색(RGB) 색상 값들 및 "알파"(투명도) 값과 같은 데이터를 도출한다(샘플링한다). 이는, 예를 들어 텍스처들을 적용하는 것, 샘플 포인트 데이터 값들을 블렌딩하는 것 등을 수반할 수 있다.
(용어 "래스터화"는 때때로 샘플 포지션들로의 프리미티브 변환 및 렌더링 둘 모두를 의미하는 데 사용된다. 그러나, 본 명세서에서 "래스터화"는 프리미티브 데이터를 샘플링 포인트 어드레스들로 변환하는 것만을 지칭하는 데 사용될 것이다.)
이들 프로세스는 전형적으로, 하나 또는 하나 초과의 샘플링 포인트의 세트들을 테스트하고, 이어서 해당(테스트되는) 프리미티브의 내부에 있는(그에 의해 커버되는) 샘플 포인트를 포함하는 것으로 발견된 샘플링 포인트들의 각각의 세트에 대해, "단편" - 이에 대해 그래픽 프로세싱 동작들(예컨대 렌더링)이 수행됨 - 으로 보통 지칭되는 개별 그래픽 엔티티를 생성하는 것에 의해 수행된다. 따라서, 커버된 샘플링 포인트들은, 사실상, 해당 샘플링 포인트들에서 프리미티브를 렌더링하는 데 사용될 단편들로서 프로세싱된다. "단편들"은 렌더링 프로세스(렌더링 파이프라인)를 통과하는 그래픽 엔티티들이다. 생성되고 프로세싱되는 각각의 단편은, 예컨대, 그래픽 프로세싱 시스템이 어떻게 구성되는지에 따라, 단일 샘플링 포인트 또는 복수의 샘플링 포인트들의 세트를 표현할 수 있다.
각각의 단편은 전형적으로 이와 연관된 색상, 깊이 및/또는 투명도 데이터와 같은 "단편 데이터"를 가질 것이며, 이때 주어진 단편에 대한 단편 데이터는 전형적으로 단편이 관련되는 프리미티브(이의 정점들)와 연관된 프리미티브 데이터로부터 도출된다.
따라서, "단편"은 사실상 프리미티브의 주어진 출력 공간 샘플 포인트 또는 포인트들에 보간된 바와 같은 프리미티브 데이터의 세트이다(이를 그것과 연관시켰다). 그것은 또한 해당 샘플 포인트(단편 포지션)에서 프리미티브를 셰이딩하는 데 요구되는 프리미티브-당(per-primitive) 및 다른 상태 데이터를 포함할 수 있다. 각각의 그래픽 단편은 전형적으로 출력(예컨대, 출력 프레임)의 "픽셀"과 동일한 크기 및 위치일 수 있다(픽셀들은 최종 디스플레이에서 특이점들이기 때문에, 그래픽 프로세서가 그에 대해 동작하는(렌더링하는) "단편들"과 디스플레이의 픽셀들 사이에 일대일 맵핑이 있을 수 있기 때문이다). 그러나, 예를 들어 최종 이미지를 디스플레이하기 전에 렌더링된 이미지에 대해 특정 형태들의 포스트-프로세싱이 수행되는 경우, 단편과 디스플레이 픽셀 사이에 일대일 대응이 없는 경우가 있을 수 있다.
또한, 주어진 위치에서, 예컨대 상이한 중첩 프리미티브들로부터의 다수의 단편들이 (예컨대, 투명도 및/또는 블렌딩으로 인해) 서로 영향을 미칠 수 있기 때문에, 최종 픽셀 출력은 그 픽셀 위치에서의 복수의 또는 모든 단편들에 의존할 수 있는 경우가 있을 수 있다.
이에 대응하여, 샘플 포인트들과 디스플레이의 픽셀들 사이에 일대일 대응이 있을 수 있지만, 더 전형적으로는 샘플링 포인트들과 디스플레이 픽셀들 사이에 일대일 대응이 없을 수 있는데, 이는 최종 이미지를 디스플레이하기 위한 출력 픽셀 값들을 생성하기 위해 렌더링된 샘플 값들에 대해 다운샘플링이 수행될 수 있기 때문이다. 유사하게, 주어진 위치에서, 상이한 중첩 프리미티브들로부터의 다수의 샘플 포인트들이 (예컨대, 투명도 및/또는 블렌딩으로 인해) 서로 영향을 미치는 경우, 최종 픽셀 출력은 또한 그 픽셀 위치에서의 복수의 중첩 샘플 값들에 의존할 것이다.
도 1은 호스트 프로세서(CPU)(1), 그래픽 프로세싱 유닛(GPU)(3), 및 호스트 프로세서(1) 및 그래픽 프로세서(3)에 의해 요구되고/되거나 그에 의해 생성된 데이터를 저장하기 위한 메모리(5)를 포함하는 전형적인 컴퓨터 그래픽 프로세싱 시스템을 도시한다.
호스트 프로세서(1) 상에서 실행되고 있는 애플리케이션(2)이 디스플레이될 프레임과 같이 그래픽 프로세서(3)로부터의 그래픽 프로세싱을 요구할 때, 애플리케이션(2)은 호스트 프로세서(1) 상에서 실행되고 있는 그래픽 프로세서(3)를 위해 드라이버(4)에 적절한 커맨드들 및 데이터를 전송할 것이다. 이어서, 드라이버(4)는 그래픽 프로세서(3)로 하여금 애플리케이션(2)에 의해 요구되는 렌더 출력을 생성하게 하기 위해 그래픽 프로세서(3)에 적절한 커맨드들 및 데이터를 전송할 것이다. 드라이버(4)는 메모리(5)에 기록함으로써 그래픽 프로세서(3)에 커맨드들 및 데이터를 전송한다.
드라이버(4)에 의해 제공되는 커맨드들 및 데이터는 그래픽 프로세서(3)에 의해 생성될 렌더 출력에 대한 프리미티브들을 렌더링하기 위한 커맨드들과 함께, 렌더 출력에 대한 프리미티브들에 사용될 정점들을 표현하는 연관된 정점 데이터를 포함할 것이다.
그래픽 프로세서(3)로 전송된 커맨드들은 그래픽 프로세서(3)로 하여금 메모리(5)로부터 정점 데이터를 판독하게 하고, 렌더 출력을 생성하기 위해 판독된 정점 데이터를 프로세싱하게 한다. 그래픽 프로세서(3)는 전형적으로 렌더 출력의 영역(구역)에 각각(잠재적으로) 적용되는 하나 이상의 단편들로 프리미티브를 래스터화하기 위해 프리미티브에 대한 정점 데이터를 사용할 것이다. 이어서, 단편들은 렌더링될 것이다.
완성된 렌더 출력(예를 들어, 프레임)은 메모리(5) 내의 프레임 버퍼에 기록될 수 있으며, 이로부터 그것은 스크린 또는 프린터와 같은 디스플레이 디바이스 상에서의 디스플레이를 위해 제공될 수 있다.
렌더 출력, 예컨대 디스플레이를 위한 프레임을 렌더링할 때, 전형적으로 이미지 품질과 프로세싱 노력 사이에 균형이 존재한다. 예를 들어, "수퍼샘플링" 배열들은 샘플링되는(렌더링되는) 색상들의 수를 증가시킴으로써 이미지 품질을 증가시키려고 시도하지만, 이는 전형적으로 더 큰 프로세싱 노력을 수반한다. 역으로, 샘플링되는(렌더링되는) 색상들의 수를 감소시키는 것은 보통 프로세싱 요건들을 감소시킬 것이지만, 감소된 이미지 품질을 희생할 것이다.
"가변 레이트 셰이딩(variable rate shading)"(VRS)은 이미지 품질과 프로세싱 노력 사이의 이러한 균형이 렌더 출력, 예컨대 디스플레이를 위한 프레임에 걸쳐 변화되게 하는 기술이다. 특히, "가변 레이트 셰이딩"(VRS)은 단일 색상이 샘플링되는(렌더링되는) 렌더 출력, 예컨대 프레임의 영역이, 즉, "셰이딩 레이트"가 렌더 출력 내에서 변하도록 허용한다.
따라서, "가변 레이트 셰이딩"(VRS)에서, 렌더 출력을 렌더링하는 데 상이한 셰이딩 레이트들이 사용되어서, 예를 들어, 출력 내의 일부 위치들에서 단일 샘플링된(렌더링된) 색상이 단일 출력 픽셀에 사용되는 반면, 출력 내의 다른 곳에서는, 동일한 단일 샘플링된(렌더링된) 색상이 복수의 출력 픽셀들의 블록 내의 복수의 출력 픽셀들 각각에 대해 사용됨으로써, 그러한 픽셀들에 대한 프로세싱 노력을 감소시킬 수 있다.
본 출원인은 그래픽 프로세서들 및 그래픽 프로세싱에 대한 개선을 위한 여지가 남아 있다고 믿는다.
본 명세서에 설명된 기술의 다양한 실시예들은 이제 단지 예로서 그리고 첨부 도면들을 참조하여 설명될 것이다.
도 1은 예시적인 그래픽 프로세싱 시스템을 도시한다.
도 2는 상이한 셰이딩 레이트들에 따라 렌더링되는 예시적인 프리미티브를 예시한다.
도 3은 상이한(Z) 깊이들을 가지는 상이한 객체들을 갖는 예시적인 장면을 도시한다.
도 4는 본 명세서에 설명된 기술의 일 실시예에 따라 동작될 수 있는 그래픽 프로세싱 파이프라인을 도시한다.
도 5는 본 명세서에 설명된 기술의 일 실시예에 따른 렌더링 프로세스를 예시하는 흐름도이다.
도면에서 적절한 경우, 유사한 컴포넌트들에 대해 유사한 도면 부호들이 사용된다.
본 명세서에 설명된 기술의 제1 실시예는, 상이한 셰이딩 레이트들을 사용하여 렌더 출력을 생성하기 위해 프리미티브들을 렌더링하도록 동작가능한 렌더러(render)를 포함하는 그래픽 프로세서를 동작시키는 방법을 포함하며; 본 방법은:
프리미티브를 렌더링할 때, 프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 프리미티브를 렌더링하기 위한 셰이딩 레이트를 결정하는 단계; 및
렌더러가 깊이 값에 기초하여 결정된 셰이딩 레이트에 기초한 셰이딩 레이트를 사용하여 프리미티브의 일부 또는 전부를 렌더링하는 단계를 포함한다.
본 명세서에 설명된 기술의 제2 실시예는, 상이한 셰이딩 레이트들을 사용하여 렌더 출력을 생성하기 위해 프리미티브들을 렌더링하도록 동작가능한 렌더러 회로를 포함하는 그래픽 프로세서를 포함하며; 그래픽 프로세서는:
프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 프리미티브를 렌더링하기 위한 셰이딩 레이트를 결정하도록 구성가능한 셰이딩 레이트 결정 회로를 추가로 포함하며;
여기서 렌더러 회로는 셰이딩 레이트 결정 회로에 의한 프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 결정된 셰이딩 레이트에 기초한 셰이딩 레이트를 사용하여 프리미티브의 일부 또는 전부를 렌더링하도록 구성된다.
본 명세서에 설명된 기술은, "가변 레이트 셰이딩"(VRS)의 경우에서와 같이, 렌더 출력이 복수의 상이한 가능한 셰이딩 레이트들 중 하나 이상을 사용하여 렌더링될 수 있는 배열들과 관련된다. 즉, 본 명세서에 설명된 기술은, 단일 색상이 렌더러에 의해 렌더링되는(샘플링되는) 렌더 출력의 영역이 복수의 상이한 가능성들 중 하나일 수 있는 배열들과 관련된다.
예를 들어, 그리고 일 실시예에서, 상대적으로 미세한(fine) 셰이딩 레이트가 사용될 때, 단일 픽셀에만 대응하는 렌더 출력의 영역에 대해 렌더러에 의해 단일 색상이 샘플링될 수 있다. 그러나, 더 거친(coarser) 셰이딩 레이트가 사용될 때, 복수의 픽셀들의 블록에 대응하는 렌더 출력의 영역에 대해 렌더러에 의해 단일 색상이 샘플링될 수 있다.
본 명세서에 설명된 기술에서, (Z) 깊이가 프리미티브를 렌더링하는 데 사용할 셰이딩 레이트를 결정할 때 고려되어, 프리미티브를 렌더링하는 데 사용되는 셰이딩 레이트는 프리미티브에 대한 (Z) 깊이 값에 (적어도 부분적으로) 기초하게 된다. 예를 들어, 그리고 일 실시예에서, 제1 셰이딩 레이트는 제1 (Z) 깊이를 갖는 렌더 출력 내의 제1 프리미티브를 렌더링하는 데 사용되고, 제2 상이한 셰이딩 레이트는 제2 상이한 (Z) 깊이를 갖는 렌더 출력 내의 제2 프리미티브를 렌더링하는 데 사용된다.
본 출원인은 깊이에 따라 렌더 출력에서 프로세싱 노력과 이미지 품질 사이의 균형을 변화시키는 것이 바람직할 수 있음을 인식하였다. 예를 들어, 종종, 더 낮은 렌더링 품질이, 예를 들어, 전체적으로 인지되는 이미지 품질의 면에서, 카메라(또는 렌더 출력의 평면)로부터 더 멀리 떨어진 렌더 출력의 영역들에서 허용가능하여, 카메라(또는 렌더 출력의 평면)에 더 가까운 렌더 출력의 영역들과 비교하여, 그러한 영역들에 대해 더 적은 프로세싱 노력이 소비될 수 있는 경우가 있을 수 있다. 유사하게, 렌더 출력에 적용되는 블러링의 정도가 깊이에 의존하는 "피사계 심도(depth-of-field)" 방법의 경우, 더 낮은 렌더링 품질은, 더 적은 블러링이 있는 영역들과 비교하여, 더 큰 정도의 블러링이 적용되는 렌더 출력의 영역들에서 전체 이미지 품질에 영향을 덜 미칠 수 있다.
본 명세서에 설명된 기술은 (Z) 깊이 값들에 기초하여 셰이딩 레이트들을 결정함으로써 이를 용이하게 한다. 이는 이어서, 예를 들어, 그리고 일 실시예에서, 더 미세한 셰이딩 레이트가 카메라(또는 렌더 출력의 평면)에 더 가까운 프리미티브를 렌더링하는 데 사용될 수 있고, 더 거친 셰이딩 레이트가 카메라(또는 렌더 출력의 평면)로부터 더 멀리 떨어진 프리미티브를 렌더링하는 데 사용될 수 있음을 의미한다. 유사하게, 그리고 일 실시예에서, 더 미세한 셰이딩 레이트는, 더 큰 정도의 "피사계 심도" 블러링을 받게 될 깊이에서의 프리미티브보다, 더 낮은 정도의 "피사계 심도" 블러링을 받게 될 깊이에서의 프리미티브를 렌더링하는 데 사용될 수 있다.
이는 이어서, 허용가능한 이미지 품질을 유지하면서, 렌더 출력, 예컨대 디스플레이를 위한 프레임을 렌더링하는 데 요구되는 전체 프로세싱 노력이 감소될 수 있음을 의미한다.
따라서, 본 명세서에 설명된 기술은 개선된 그래픽 프로세서를 제공한다는 것이 이해될 것이다.
그래픽 프로세서는 렌더 출력을 생성해야 하고, 그리고 일 실시예에서 생성한다. 따라서, 일 실시예에서 렌더러(회로)는 하나 이상의 프리미티브들을 렌더링함으로써 렌더 출력을 생성한다. 렌더 출력을 생성하기 위해 렌더러에 의해 복수의 프리미티브들이 렌더링될 수 있고, 그리고 일 실시예에서 렌더링된다는 것이 이해될 것이다. 이러한 경우, 각각의 프리미티브는 일 실시예에서 본 명세서에 설명된 기술의 방식으로 렌더링된다.
렌더 출력은 임의의 적합한 렌더 출력, 예컨대 디스플레이를 위한 프레임, 또는 렌더-투-텍스처(render-to-texture) 출력 등을 포함할 수 있다. 일 실시예에서, 렌더 출력은 그래픽 프로세서가 생성하는 복수의 출력 프레임들의 시퀀스 내의 출력 프레임이다. 이 경우, 각각의 출력 프레임은 일 실시예에서 본 명세서에 설명된 기술의 방식으로 생성된다.
렌더 출력은 전형적으로 데이터 요소들(샘플링 포인트들)(예컨대, 픽셀들)의 어레이를 포함할 것이며, 그들 각각에 대해 적절한 렌더 출력 데이터(예컨대, 색상 값 데이터의 세트)가 생성된다. 데이터는, 예를 들어 적색, 녹색 및 청색, RGB 값들 및 투명도(알파, a) 값의 세트를 포함할 수 있다.
렌더 출력은 컴퓨터 모니터 또는 프린터와 같은 복수의 픽셀들을 포함하는 디스플레이 또는 출력을 갖는 디스플레이 디바이스 상에서의 디스플레이를 위해 생성될 수 있다. 따라서, 렌더 출력은, 디스플레이 디바이스의 각각의 출력 픽셀에 대해, 하나 이상의 대응하는 데이터 요소들(샘플링 포인트들)의 세트를 포함할 수 있다. 데이터 요소들(샘플링 포인트들)의 각각의 그러한 세트는 단일 데이터 요소(샘플링 포인트)만을 포함할 수 있다. 대안적으로, 데이터 요소들의 각각의 세트는 복수의 데이터 요소들(샘플링 포인트들)을 포함할 수 있다. 이러한 후자의 경우, 각각의 샘플링 포인트는 디스플레이 디바이스의 픽셀(예컨대, 서브-픽셀)의 일부에 사실상 대응할 수 있고, 렌더 출력은 디스플레이 디바이스 상에 최종 이미지를 디스플레이하기 위한 출력 픽셀 값들을 생성하기 위해 적절한 다운샘플링 동작을 받을 수 있다.
렌더 출력은 복수의 가능한 상이한 셰이딩 레이트들 중 하나 이상을 사용하여 렌더러(회로)에 의해 생성되어야 하고, 그리고 일 실시예에서 생성된다. 따라서, 일 실시예에서, 그래픽 프로세서가 지원하고 사용할 수 있는 복수의 가능한 셰이딩 레이트들의 세트가 있다. 따라서, 일 실시예에서 셰이딩 레이트를 결정하는 것은 (셰이딩 레이트 결정 회로가) 복수의 가능한 셰이딩 레이트들의 세트로부터 셰이딩 레이트를 선택하는 것을 포함한다.
이에 대응하여, 단일 세트의 색상 값 데이터(단일 색상)가 렌더러에 의해 샘플링될(렌더링될) 수 있는 복수의 가능한 상이한 크기의 렌더 출력 영역들의 세트가 있어야 하고, 일 실시예에서 그러하다. 따라서, 일 실시예에서 렌더러(회로)가 (그) 프리미티브의 일부 또는 전부를 렌더링하는 것은, 렌더러(회로)가 프리미티브에 대한 색상 값 데이터(색상들)의 하나 이상의 세트들을 샘플링하는 것을 포함하며, 여기서 색상 값 데이터(색상)의 각각의 세트가 샘플링되는 렌더 출력의 영역은 사용된 셰이딩 레이트에 따른 크기를 갖는다.
복수의 가능한 렌더 출력 영역들의 세트 내의 가장 작은 렌더 출력 영역들은 "미세 픽셀"로 지칭될 수 있고, 다른 더 큰 렌더 출력 영역들은 "거친 픽셀들"로 지칭될 수 있다. 각각의 "미세 픽셀"은 출력 디스플레이 디바이스의 픽셀과 동일한 크기 및 위치일 수 있다. 대안적으로, 각각의 "미세 픽셀"은, 예를 들어 다운샘플링이 적용될 경우, 출력 디스플레이 디바이스의 하나 미만의 픽셀에 대응할 수 있다.
일 실시예에서 각각의 가능한 "거친 픽셀"의 영역은 복수의 "미세 픽셀들"의 블록에 대응한다.
상이한 가능한 셰이딩 레이트들은 셰이딩 레이트가 대응하는 미세 픽셀들의 수의 면에서 지칭될 수 있다. 예를 들어, 1x1 셰이딩 레이트는 단일 세트의 색상 값 데이터가 단일 미세 픽셀에 대응하는 렌더 출력의 영역에 대해 샘플링되는 가장 미세한 가능한 셰이딩 모드를 나타낼 수 있는 반면, 2x2 셰이딩 레이트는 단일 세트의 색상 값 데이터가 2x2 미세 픽셀들의 블록에 대응하는 렌더 출력의 영역에 대해 샘플링됨을 나타낼 수 있다.
복수의 가능한 셰이딩 레이트들의 세트는 임의의 적합한 셰이딩 레이트들을 포함할 수 있다. 일 실시예에서, 복수의 가능한 셰이딩 레이트들의 세트는 1x1, 1x2, 2x1, 2x2, 2x4, 4x2 및 4x4 셰이딩 레이트들을 포함한다. 다른 셰이딩 레이트들이 가능할 것이다.
프리미티브의 일부 또는 전부에 대한 깊이 값은 Z 깊이 값, 즉, 프리미티브가 포지션되는 렌더링되고 있는 장면 내로의 거리, 예컨대, 렌더 출력의 평면에 수직인 방향에서, 렌더 출력(예컨대, 생성되고 있는 프레임)의 평면으로부터 프리미티브까지의 거리, 또는 뷰 방향에서, 카메라(시점)로부터 프리미티브까지의 거리를 표현해야 하고, 일 실시예에서 그러하다.
프리미티브의 일부 또는 전부에 대한 (Z) 깊이 값은 프리미티브의 일부 또는 전부의 임의의 적합한 깊이, 예컨대 프리미티브의 일부 또는 전부의 최소, 최대 또는 평균 (Z) 깊이, 또는 예를 들어 렌더 출력의 평면 상으로 투영되는 바와 같은 그의 중심(centre)(예컨대, 도심(centroid))과 같은 특정 위치에서의 프리미티브의 (Z) 깊이를 표현할 수 있다.
프리미티브에 대한 (Z) 깊이 값은 (전체) 프리미티브에 대한 것일(대표할) 수 있거나, 또는 (단지) 프리미티브의 일부에 대한 것일(대표할) 수 있다. 일 실시예에서, (Z) 깊이 값은 (단지) 프리미티브의 영역을 대표한다. 예를 들어, 그리고 일 실시예에서, 프리미티브에 대한 (Z) 깊이 값은 프리미티브로부터 생성된 단편의 (Z) 깊이이다.
따라서, 일 실시예에서, 그래픽 프로세서는 단편들을 생성하기 위해 프리미티브들을 래스터화하도록 구성된 래스터화기(rasteriser)(회로)를 포함하고; 렌더러(회로)는 래스터화기에 의해 생성된 단편들을 렌더링함으로써 프리미티브들을 렌더링하도록 동작가능하고; 래스터화기는 단편을 생성하기 위해 프리미티브를 래스터화하고; 셰이딩 레이트를 결정하는 것은 (셰이딩 레이트 결정 회로가) 단편의 깊이 값에 기초하여 셰이딩 레이트를 결정하는 것에 의해 수행된다. 이어서, 렌더러(회로)는 단편의 깊이 값에 기초하여 결정된 셰이딩 레이트에 기초한 셰이딩 레이트를 사용하여 단편을 렌더링할 수 있다.
하나 이상의, 예를 들어, 복수의 단편들은 (래스터화기에 의해)(동일한) 프리미티브로부터 생성될 수 있다. 이 경우, 프리미티브로부터 생성된 하나 이상의, 또는 각각의, 단편의 깊이 값이 일 실시예에서 고려되며, 단편은 본 명세서에 설명된 기술의 방식으로 그에 따라 프로세싱된다. 따라서, 렌더러(회로)가 (그) 프리미티브 모두를 렌더링하는 것은, 렌더러(회로)가 래스터화기(회로)에 의해 프리미티브로부터 생성된 각각의 단편을 렌더링하는(그에 대한 색상 값을 샘플링하는) 것을 포함할 수 있다는 것이 이해될 것이다. 이에 대응하여, 렌더러가 (그) 프리미티브의 일부를 렌더링하는 것은, 렌더러가 래스터화기에 의해 프리미티브로부터 생성된 단편들 중 하나 이상(그러나 전부는 아님)을 렌더링하는(그에 대한 색상 값을 샘플링하는) 것을 포함할 수 있다.
본 출원인은 렌더 출력의 평면에 평행하지 않은 프리미티브의 Z 깊이가 렌더 출력에서 상이한 샘플링 포인트들(예컨대, 픽셀들)에 따라 달라질 것이 가능하다는 것을 인식하였다. 프리미티브로부터 생성된 하나 이상의 단편들의 (Z) 깊이 값으로서 프리미티브에 대한 깊이 값을 결정함으로써, 임의의 그러한 깊이 변화가 간단한 방식으로 고려될 수 있다. 이는 이어서, 예를 들어 그리고 일 실시예에서, 복수의 상이한 셰이딩 레이트들을 사용하여 렌더링될 단일의(그) 프리미티브를 허용한다. 예를 들어, 제1 깊이를 갖는 프리미티브의 제1 영역은 제1 셰이딩 레이트를 사용하여 (제1 단편으로서) 렌더링될 수 있고, 상이한 제2 깊이를 갖는 (동일한) 프리미티브의 제2 영역은 상이한 제2 셰이딩 레이트를 사용하여 (상이한 제2 단편으로서) 렌더링될 수 있다. 이는 이어서 그 프리미티브를 렌더링하는 데 요구되는 프로세싱 노력의 감소를 가능하게 할 수 있다.
래스터화기(회로)는 렌더 출력의 샘플링 포인트들을 위한 렌더 출력 데이터를 생성하기 위해 렌더링을 위한 그래픽 단편들을 생성할 것이다. 래스터화기에 의해 생성되는 각각의 단편은 렌더 출력의 샘플링 포인트들의 세트를 그것과 연관시켜야 하고, 그리고 일 실시예에서 그러하며, 단편과 연관된 샘플링 포인트들의 세트의 샘플링 포인트들 중 하나 이상에 대한 렌더 출력 데이터를 생성하는 데 사용될 수 있다.
각각의 단편과 연관되는 샘플링 포인트들의 세트들은 필요에 따라 선택될 수 있다. 샘플링 포인트들의 각각의 세트(및 그에 따라 각각의 샘플링 포인트)는 렌더 출력, 예컨대 디스플레이될 프레임 내의 위치(x, y 포지션)를 표현할 것이다. 샘플링 포인트들의 각각의 세트 내의 샘플 포인트들의 패턴 및 (상대) 포지션들(샘플링 패턴)이 또한 필요에 따라 선택될 수 있다.
렌더 출력이 복수의 픽셀들을 포함하는 디스플레이 또는 출력을 갖는 디스플레이 디바이스 상에 디스플레이될 경우, 일 실시예에서 단편이 연관될 수 있는 샘플링 포인트들의 각각의 세트는 출력 디바이스(예컨대, 디스플레이 또는 프린터)의 주어진 픽셀(픽셀 위치)에 대한 샘플링 포인트들의 세트에 대응하거나, 또는 출력 디바이스의 픽셀의 일부(예컨대, 서브-픽셀)에 대한 샘플링 포인트들의 세트에 대응한다. 후자의 배열에서, 일 실시예에서 샘플링 포인트들의 복수의 세트들의 그룹은 디스플레이의 픽셀에 대한 샘플링 포인트들의 전체 세트를 구성한다. 이들 배열에서, 각각의 단편은 디스플레이 디바이스(예컨대, 디스플레이 또는 프린터)의 주어진 픽셀에 대한 단편 데이터를 효과적으로 렌더링할 수 있다.
단편의 (Z) 깊이 값은 임의의 적합한 그리고 바람직한 깊이를 표현할 수 있다. 예를 들어, 단편의 (Z) 깊이 값은 단편의 중심에서의 (Z) 깊이, 예컨대 단편과 연관된 모든 샘플링 포인트들의 중심을 대표할 수 있다. 대안적으로, 단편의 (Z) 깊이 값은 도심 샘플 위치에서의, 예컨대, 단편과 연관된 모든 커버된 샘플링 포인트들의 중심에 가장 가까운 샘플링 포인트의 위치에서의, (Z) 깊이를 대표할 수 있다.
대안적으로, 단편의 (Z) 깊이 값은 단편과 연관된 각각의, 일 실시예에서 커버된, 샘플링 포인트 위치에서의 (Z) 깊이들의 함수로서 결정될 수 있다. 예를 들어, 최소, 평균 또는 최대 (Z) 깊이가 결정될 수 있다.
셰이딩 레이트를 결정하기 위한 목적으로만 (Z) 깊이 값이 사용될 수 있다. 그러나, 일 실시예에서, (Z) 깊이 값은 (또한) 다른 목적으로 사용된다. 예를 들어, 그리고 일 실시예에서, (Z) 깊이 값은, 셰이딩 레이트를 결정하는 데 사용되는 것에 더하여, Z 깊이 테스트를 수행하는 데 사용된다. 따라서, 동일한 (Z) 깊이 값이 재사용될 수 있다. 이는 전체 프로세싱 노력을 감소시킬 수 있다.
따라서, 일 실시예에서, 그래픽 프로세서는 깊이 테스트 회로를 포함하고; 깊이 테스트 회로는 셰이딩 레이트 결정 회로가 셰이딩 레이트를 결정하는 데 사용하는 것과 동일한 깊이 값을 깊이 테스트를 수행하는 데 사용한다. 사용되는 (Z) 깊이 값은 깊이 테스트 회로에 의해 결정될 수 있다.
깊이 테스트를 통과하지 않는 단편들은 폐기(컬링(culling))되어 렌더러에 의해 렌더링되지 않아야 하고, 그리고 일 실시예에서 그러한 반면에, 깊이 테스트를 통과하는 단편들은 프로세싱을 위해 그래픽 프로세싱 파이프라인의 이후 스테이지들로 전달되어야 하고, 그리고 일 실시예에서 그러하다.
일단 깊이 값이 결정되면, 임의의 적합한 그리고 바람직한 방식으로 깊이 값에 기초하여 셰이딩 레이트가 결정될 수 있다.
일 실시예에서, 하나 이상의 가능한 깊이 값들 각각은 각자의 셰이딩 레이트와 연관되고, 이어서 셰이딩 레이트는 일 실시예에서 (셰이딩 레이트 결정 회로가) 깊이 값이 연관되는 셰이딩 레이트를 결정하는 것에 의해 깊이 값에 기초하여 결정된다.
깊이 값들 및 셰이딩 레이트들은 임의의 적합한 그리고 바람직한 방식으로 서로 연관될 수 있다. 일 실시예에서, 렌더 출력이 생성되고 있고 일 실시예에서 호스트 프로세서에 의해 실행되는 애플리케이션은 하나 이상의 깊이 값들 각각에 대한 깊이-기반 셰이딩 레이트를 특정한다.
따라서, 셰이딩 레이트는, 일 실시예에서, 그래픽 프로세서(그의 셰이딩 레이트 결정 회로)가 렌더 출력이 생성되고 있는 애플리케이션에 의해 깊이 값에 대해 특정된 셰이딩 레이트를 결정하는 것에 의해, 깊이 값에 기초하여 결정된다.
애플리케이션에 의해 특정된 깊이-기반 셰이딩 레이트들은 임의의 적합한 그리고 바람직한 방식으로 (호스트 프로세서로부터) 그래픽 프로세서로 전달될 수 있다. 일 실시예에서, 애플리케이션은, 드라이버가 특정된 셰이딩 레이트(들)를 나타내는 커맨드들 및/또는 데이터를 그래픽 프로세서로 전송하는 것에 응답하여, 특정된 셰이딩 레이트(들)를 나타내는 커맨드들 및/또는 데이터를 호스트 프로세서 상에서 실행되는 그래픽 프로세서를 위해 드라이버로 전송한다.
따라서, 일 실시예의 방법은, 그래픽 프로세서가 렌더 출력이 생성되고 있는 애플리케이션에 의해 특정된 셰이딩 레이트(들)를 나타내는 커맨드들 및/또는 데이터를 수신하는 것, 및 (셰이딩 레이트 결정 회로가) 커맨드들 및/또는 데이터에 따라 깊이-기반 셰이딩 레이트를 결정하는 것을 포함한다(그리고 그래픽 프로세서는 그에 대응하여 구성된다). 따라서, 커맨드들 및/또는 데이터는 깊이-기반 셰이딩 레이트가 깊이에 따라 어떻게 달라져야 하는지를 나타내야 하고, 그리고 일 실시예에서 나타낸다.
셰이딩 레이트가 깊이에 따라 달라져야 하는 방식은 임의의 적합한 그리고 바람직한 방식으로 (커맨드들 및/또는 데이터에 의해) 나타내질 수 있다. 예를 들어, 셰이딩 레이트가 깊이에 따라 어떻게 달라져야 하는지 특정하는 기능은 (애플리케이션에 의해) 제공될 수 있다.
일 실시예에서, 하나 이상의 깊이들 또는 깊이 범위들 각각에 대한 셰이딩 레이트를 나타내는 정보가 (애플리케이션에 의해) 제공되고; 깊이-기반 셰이딩 레이트는 (셰이딩 레이트 결정 회로가) 깊이 값에 대응하는 깊이 또는 깊이 범위에 대한 정보에 의해 나타내어진 셰이딩 레이트를 결정하는 것에 의해 결정된다.
이러한 셰이딩 레이트 표시 정보는 임의의 적합한 그리고 바람직한 형태를 취할 수 있지만, 일 실시예에서, 셰이딩 레이트가 깊이에 따라 어떻게 달라져야 하는지 특정하는 어레이의 형태, 예컨대 일 실시예에서 룩업 테이블의 형태이다. 본 출원인은 룩업 테이블이, 깊이에 기초하여 셰이딩 레이트들을 특정하는 특히 효율적이고 편리한 방식임을 발견하였다.
셰이딩 레이트 표시 어레이(룩업 테이블)는 특정 깊이 또는 깊이들의 범위에 대한 셰이딩 레이트를 각각 특정하는 데이터 요소들의 어레이를 포함해야 하고, 그리고 일 실시예에서 그러하다. 이어서, 셰이딩 레이트는 (셰이딩 레이트 결정 회로에 의해) (Z) 깊이 값에 대응하는 어레이(룩업 테이블) 요소에 특정된 셰이딩 레이트로서 결정된다.
셰이딩 레이트 표시 어레이(룩업 테이블)는 어레이에 특정된 각각의 셰이딩 레이트가 적용되는 깊이 또는 깊이들의 범위를 명시적으로 특정할 수 있다. 그러나, 일 실시예에서, 어레이에 특정된 각각의 셰이딩 레이트가 적용되는 깊이 또는 깊이들의 범위는 어레이에 암시적이다(즉, 어레이 자체에 명시적으로 특정되지 않음).
예를 들어, 그리고 일 실시예에서, 셰이딩 레이트 표시 어레이(룩업 테이블) 내의 각각의 요소는 특정한, 일 실시예에서 선택된, 일 실시예에서 미리결정된 깊이 또는 깊이들의 범위에 대한 셰이딩 레이트를 특정한다. 따라서, (그) 셰이딩 레이트 표시 어레이(룩업 테이블)는 일 실시예에서 1차원 어레이이며, 그의 각각의 요소는 미리결정된 깊이 또는 깊이들의 범위에 대해 사용할 셰이딩 레이트를 특정한다. 이어서, 이는 셰이딩 레이트 표시 어레이(룩업 테이블)를 특정하는 데 요구되는 데이터의 양을 감소시킬 수 있고, 셰이딩 레이트 표시 어레이(룩업 테이블)에의 효율적인 액세스를 용이하게 할 수 있다.
셰이딩 레이트 표시 어레이(룩업 테이블)의 요소들에 대응하는 (미리결정된) 깊이들 또는 깊이들의 범위들은 필요에 따라 선택될 수 있다. 일 실시예에서, 최소 깊이와 최대 깊이 사이의 범위는 동일한 깊이 하위-범위들(즉, 각각이 동일한 깊이 범위에 걸쳐 있음)로 분할된다. 이어서, 각각의 동일한 깊이 하위-범위는 셰이딩 레이트 표시 어레이(룩업 테이블) 내의 요소들의 순서화에 기초하여 셰이딩 레이트 표시 어레이(룩업 테이블)의 각자의 요소와 (암시적으로) 연관된다. 예를 들어, 일 실시예에서 셰이딩 레이트 표시 어레이(룩업 테이블)의 첫 번째 요소는 (암시적으로) 가장 얕은(또는 가장 깊은) 깊이 하위-범위에 대응하고, 일 실시예에서 셰이딩 레이트 표시 어레이(룩업 테이블)의 마지막 요소는 (암시적으로) 가장 깊은(또는 가장 얕은) 깊이 하위-범위에 대응하는 등이다. 이러한 경우, 셰이딩 레이트 표시 어레이(룩업 테이블) 내의 요소들의 수는 그에 따라 깊이 하위-범위들의 수와 (정확히) 동일해야 한다.
최소 및 최대 깊이들은 임의의 적합한 깊이들일 수 있다. 일 실시예에서, 최소 및 최대 깊이들은, 프리미티브가 가질 수 있고 렌더 출력에서 렌더링될 수 있는 최소 및 최대 깊이들에 각각 대응한다. 즉, 일 실시예에서 최소 및 최대 깊이들은 사용되는 뷰 절두체(view frustum)의 근거리 및 원거리 평면들의 깊이들에 각각 대응한다.
따라서, 일 실시예에서 (그) 셰이딩 레이트 표시 어레이(룩업 테이블)는 순서화된 요소들의 (1차원) 어레이를 포함한다. 따라서, 각각의 요소는 각자의 요소를 식별할 수 있는 각자의 인덱스 값과 (암시적으로) 연관될 수 있고, 그리고 일 실시예에서 연관된다. 예를 들어, 일 실시예에서 셰이딩 레이트 표시 어레이(룩업 테이블)는 N개의 요소들을 포함하며, 이때 제1 요소는 인덱스 i = 0에 의해 지칭되고, 마지막 요소는 인덱스 i = N-1에 의해 지칭된다. 이어서, 셰이딩 레이트는 (셰이딩 레이트 결정 회로가) (Z) 깊이 값에 대응하는 셰이딩 레이트 표시 어레이(룩업 테이블) 요소에 대한 인덱스 값을 결정하고 이어서 그 인덱스 값에서 셰이딩 레이트 표시 어레이(룩업 테이블)에 특정된 셰이딩 레이트를 검색하는 것에 의해 결정된다.
(그) 셰이딩 레이트 표시 어레이(룩업 테이블) 내로의 인덱스는 임의의 적합한 그리고 바람직한 방식으로 결정될 수 있다. (그) 셰이딩 레이트 표시 어레이(룩업 테이블) 내로의 인덱스는 일 실시예에서 (Z) 깊이 값으로부터 결정된다. 예를 들어, 그리고 일 실시예에서, N개의 엔트리들을 갖는 룩업 테이블 내로의 인덱스 값, i (= 0, 1, …, N-1)는 깊이 값 Z로부터,
Figure pat00001
을 계산하고, 그리고 가장 가까운 정수로 반내림(rounding down)함으로써 결정되며, 여기서, Z minZ max는 각각 최소 및 최대 깊이들이다.
일 실시예에서, 그래픽 프로세서(의 셰이딩 레이트 결정 회로)는 FMA(fused multiply-add) 연산들을 수행하도록 각각 동작가능한 하나 이상의 기능성 유닛들을 포함하고, 인덱스 결정 동작은 이들 "FMA 유닛들"에 의한 실행을 위해 최적화된다. 본 출원인은, 하기에서 더 상세하게 논의되는 바와 같이, 단일 FMA-스케일 동작을 수행하는 FMA 유닛에 의해 특히 효율적인 방식으로 인덱스 결정 동작을 수행하는 것이 가능하다는 것을 인식하였다.
따라서, 일 실시예에서, 그래픽 프로세서(의 셰이딩 레이트 결정 회로)는 FMA(fused multiply-add) 연산들을 수행하도록 동작가능한 하나 이상의 기능성 유닛들을 포함하고; 일 실시예에서 하나 이상의 기능성 유닛들 중 하나는 단일 FMA(fused multiply-add) 연산을 수행함으로써 깊이 값으로부터 인덱스 값을 결정한다. 단일 FMA(fused multiply-add) 연산은 FMA-스케일 연산, 즉, FMA(fused multiply-add) 연산의 결과를 스케일링하는 것을 포함하는 동작일 수 있다.
더욱이, 그리고 이하에서 더욱 상세하게 논의되는 바와 같이, 본 출원인은 이러한 동작에 요구되는 상수들이 FMA 유닛에 의해 또한 결정될 수 있음을 인식하였다. 따라서, 일 실시예에서 하나 이상의 기능성 유닛들 중 하나는 단일 FMA(fused multiply-add) 연산에서 사용하기 위한 하나 이상의 상수들을 결정한다.
셰이딩 레이트가 깊이에 따라 어떻게 달라져야 하는지를 나타내는 정보(예컨대, (그) 셰이딩 레이트 표시 어레이(룩업 테이블)의 형태의)는 그래픽 프로세서(의 셰이딩 레이트 결정 회로)가 외부 메모리, 즉, 그래픽 프로세서와 동일한 칩 상에 있지 않은 메모리로부터 판독하는 것에 의해 액세스될 수 있다. 그러나, 본 출원인은 이것이 레이턴시 및 대역폭 요건들의 증가를 야기할 수 있음을 인식하였다. 따라서, 일 실시예에서, 정보(셰이딩 레이트 표시 어레이(룩업 테이블))는 그래픽 프로세서에, 즉, 그래픽 프로세서와 동일한 물리적 칩 상에 있는 저장소(메모리)에 로컬로 저장된다. 이어서, 그래픽 프로세서(의 셰이딩 레이트 결정 회로)는 셰이딩 레이트를 결정하기 위해 로컬로 저장된 정보에 액세스한다. 이는 이어서, 예를 들어, 레이턴시 및 대역폭 요건들을 감소시킬 수 있다.
셰이딩 레이트는 임의의 적합한 그리고 바람직한 방식으로 깊이에 따라 달라질 수 있다. 일반적으로, 더 거친 셰이딩 레이트는, 이미지 품질의 임의의 결과적인 감소가 사용자에게 덜 명백하고/하거나 더 허용될 것이라는 것이 알려져 있거나 또는 그러할 가능성이 있는 깊이들에 대해 특정될 수 있다. 역으로, 더 미세한 셰이딩 레이트는, 이미지 품질의 임의의 결과적인 감소가 사용자에게 더 명백하고/하거나 덜 허용될 것이라는 것이 알려져 있거나 또는 그러할 가능성이 있는 깊이들에 대해 특정될 수 있다.
예를 들어 그리고 일 실시예에서, 더 미세한 셰이딩 레이트는 더 얕은 깊이들(카메라/렌더 출력의 평면에 더 가까움)에 대해 특정될 수 있고, 더 거친 셰이딩 레이트는 더 깊은 깊이들(카메라/렌더 출력의 평면으로부터 더 멀리 있음)에 대해 특정될 수 있다. 추가적으로 또는 대안적으로, 더 거친 셰이딩 레이트는 더 큰 정도의 왜곡, 예컨대 블러링이 렌더 출력에 적용되는 깊이들에 대해 특정될 수 있고, 더 미세한 셰이딩 레이트는 더 작은 정도의 왜곡, 예컨대 블러링이 렌더 출력에 적용되는 깊이들에 대해 특정될 수 있다.
일단 셰이딩 레이트가 프리미티브(프리미티브로부터 생성된 단편)에 대한 깊이 값에 기초하여 결정되면, 그 셰이딩 레이트는 임의의 다른 인자들에 관계없이 프리미티브(프리미티브로부터 생성된 단편)를 렌더링하기 위해 렌더러(회로)에 의해 사용될 수 있다. 대안적으로, 렌더러(회로)에 의해 사용되는 최종 셰이딩 레이트를 결정할 때 고려되는 하나 이상의 다른 인자들이 있을 수 있다. 따라서, 렌더러(회로)에 의해 사용되는 셰이딩 레이트는 깊이 값에 기초하여, 그리고 일 실시예에서 하나 이상의 다른 인자들에 기초하여 결정될 수 있다.
예를 들어, 그리고 일 실시예에서, 프리미티브를 렌더링하기 위한 셰이딩 레이트는 프리미티브의 일부 또는 전부에 대한 깊이 값 및 다음 중 임의의 하나 이상에 기초하여 결정될 수 있다: 프리미티브가 속하는 드로우콜, 프리미티브가 연관되는 유발 정점(provoking vertex), 및 프리미티브가 속하는 렌더 출력의 영역.
일 실시예에서, 셰이딩 레이트는 고려되어야 하는 각각의 그러한 인자에 대해 결정되고, 렌더러에 의해 실제로 사용되는 셰이딩 레이트는 이어서 각각의 그러한 결정된 셰이딩 레이트에 기초하여 결정된다. 따라서, 렌더러에 의해 사용되는 셰이딩 레이트는 일 실시예에서 깊이 값에 기초하여 결정된 셰이딩 레이트에 기초하여 결정되고, 일 실시예에서는, 다른 인자에 기초하여 각각 결정된 하나 이상의 셰이딩 레이트들에 기초하여 결정된다.
이 경우, 상이한 인자들에 기초하여 결정된 셰이딩 레이트들은 서로 상이할 것이라는 것이 가능하다. 따라서, 상이한 인자들에 기초하여 결정된 셰이딩 레이트들은 일 실시예에서 렌더러에 의해 사용될 단일 셰이딩 레이트로 조합된다.
이러한 조합은 임의의 적합한 방식으로 수행될 수 있다. 일 실시예에서, 셰이딩 레이트는 조합 함수를 사용하여 단일 셰이딩 레이트로 조합된다. 조합 함수는, 예를 들어, 상이한 인자들에 기초하여 결정된 셰이딩 레이트들이 가장 미세한 또는 가장 거친 셰이딩 레이트를 사용함으로써, 또는 평균 셰이딩 레이트를 결정하고 사용함으로써 조합되어야 한다는 것을 특정할 수 있다.
일 실시예에서, 셰이딩 레이트를 결정하는 데 사용되어야 하는 인자들, 및/또는 임의의 상이한 셰이딩 레이트들을 조합하는 데 사용될 조합 함수는 렌더 출력이 생성되고 있는 애플리케이션에 의해 특정된다.
따라서, 프리미티브(프리미티브로부터 생성된 단편)를 렌더링하기 위해 렌더러(회로)에 의해 실제로 사용되는 셰이딩 레이트가 깊이 값에 기초하여(단독으로) 결정된 셰이딩 레이트와 동일하거나 상이할 수 있다는 것이 이해될 것이다.
일단 사용할 셰이딩 레이트가 결정되면, 그 셰이딩 레이트는 프리미티브(프리미티브로부터 생성된 단편)를 렌더링할 때 렌더러(회로)에 의해 사용된다. 이것은, 더 거친 셰이딩 레이트가 결정될 때와 비교하여, 더 미세한 셰이딩 레이트가 결정될 때 더 많은 수의 색상들이 렌더러에 의해 샘플링되는 효과를 가져야 하고, 그리고 일 실시예에서 그러한 효과를 갖는다. 이는 임의의 적합한 그리고 바람직한 방식으로 달성될 수 있다.
예를 들어, 래스터화기(회로)는 셰이딩 레이트에 기초하여 프리미티브들을 단편들로 래스터화하여, 래스터화기에 의해 생성된 단편이 대응하는 렌더 출력의 영역이 셰이딩 레이트에 따라 달라지도록 할 수 있다. 따라서, 일 실시예에서, 래스터화기(회로)는 사용된 셰이딩 레이트에 따라 프리미티브를 래스터화한다. 예를 들어, 래스터화기는 더 거친 셰이딩 레이트가 사용될 때 렌더 출력의 더 큰 영역들에 대응하는 단편들을 생성할 수 있고, 더 미세한 셰이딩 레이트가 사용될 때 렌더 출력의 더 작은 영역들에 대응하는 단편들을 생성할 수 있다. 이어서, 렌더러는 각각의 이렇게-생성된 단편에 대해 단일 세트의 색상 값 데이터(단일 색상)를 샘플링할 수 있다. 이어서, 이는, 더 거친 셰이딩 레이트가 사용될 때와 비교하여 더 미세한 셰이딩 레이트가 사용될 때, 더 많은 수의 단편들이 생성되고, 그렇게 색상들이 샘플링되는 효과를 가질 것이다.
일 실시예에서, 래스터화기(회로)는 "정상" 방식으로 단편들을 생성하도록 동작가능하다. 즉, 일 실시예에서, 래스터화기는 (항상) 사용되는 셰이딩 레이트에 관계없이, 렌더 출력의 동일한 크기의 영역에 각각 대응하는, 예를 들어, 하나의 픽셀 또는 서브-픽셀("미세 픽셀")에 대응하는, 단편들을 생성하도록 동작한다. 이어서, 이러한 방식으로 생성된 단편들은 일 실시예에서 사용된 셰이딩 레이트에 따라 하나 이상의 단편들의 세트들로 "조합되고", 단일 세트의 색상 값 데이터(단일 색상)가 하나 이상의 단편들의 각각의 그러한 세트에 대해 샘플링된다. 예를 들어, 그리고 일 실시예에서, 더 미세한 셰이딩 레이트가 사용될 때와 비교하여 더 거친 셰이딩 레이트가 사용될 때 더 많은 수의 단편들이 단편들의 세트에 포함된다. 이어서, 이는, 더 거친 셰이딩 레이트가 사용될 때와 비교하여 더 미세한 셰이딩 레이트가 사용될 때, 더 많은 수의 색상들이 샘플링되는 효과를 가질 것이다.
이러한 단편들의 "조합"은 임의의 적합한 그리고 바람직한 방식으로 달성될 수 있다.
일 실시예에서, 렌더러(회로)는 (셰이더) 프로그램 명령어들을 실행하는 실행 스레드들에 의해 렌더 출력 데이터를 생성하도록 동작가능한 프로그래밍가능 프로세싱 스테이지(회로)(셰이더)를 포함한다. 일 실시예에서, (셰이더) 프로그램을 실행하는 각각의 실행 스레드에 의해 단일 세트의 색상 값 데이터가 생성된다(단일 색상이 샘플링된다). 이 경우, 단편들은, 사실상, 일 실시예에서 하나 이상의 단편들의 각각의 세트에 대해 프로그래밍가능 프로세싱 스테이지(셰이더)에 (단지) 하나의 실행 스레드를 발행함으로써 "조합"된다. 이어서, 이는, 프로그래밍가능 프로세싱 스테이지(셰이더)가 하나 이상의 단편들의 각각의 세트에 대해 (단지) 한번 (셰이더) 프로그램을 실행하여, "조합된" 단편들의 각각의 세트에 대해 (단지) 단일 세트의 색상 값 데이터가 샘플링되도록 하는 효과를 갖는다.
일 실시예에서, 실행 스레드들은 스레드들의 "그룹들" 또는 "번들들"로 그룹화되는데, 여기서 하나의 그룹의 스레드들은 한 번에 하나의 명령어를 록스텝(lockstep)으로 실행된다. 이는 셰이더 프로그램 실행 효율을 향상시킬 수 있는데, 그 이유는 그룹 내의 모든 스레드들 사이에서 명령어 페치 및 스케줄링 자원들을 공유하는 것이 가능하기 때문이다. 그러한 스레드 그룹들에 사용되는 다른 용어들은 "워프(warp)" 및 "웨이브 프론트(wave front)"를 포함한다. 편의상, 용어 "스레드 그룹"은 본 명세서에서 사용될 것이지만, 이는, 달리 지시되지 않는 한, 모든 등가의 용어들 및 배열들을 포함하도록 의도된다.
이 경우, 일 실시예에서, 단편들의 "조합"은 프로그래밍가능 프로세싱 스테이지(셰이더)에 의해 실행될 스레드 그룹들을 결정할 때 발생한다. 따라서, 일 실시예에서, 렌더러(회로)는 프로그래밍가능 프로세싱 스테이지(회로)(셰이더)에 의한 실행을 위한 실행 스레드들을 포함하는 스레드 그룹들을 생성하도록 동작가능한 스레드 그룹 생성 스테이지(회로)를 포함한다.
이 경우, 일 실시예에서, 프리미티브(회로)를 렌더링하는 렌더러(회로)는 사용된 셰이딩 레이트에 기초하여 프로그래밍가능 프로세싱 스테이지(셰이더)에 의한 실행을 위한 실행 스레드들을 포함하는 스레드 그룹을 생성하는 스레드 그룹 생성 스테이지(회로)(및 스레드 그룹 내의 실행 스레드들을 실행하는 프로그래밍가능 프로세싱 스테이지(회로)(셰이더))를 포함한다.
색상(색상 값 데이터의 세트)이 ((셰이더) 프로그램을 실행하는) 렌더러에 의해 샘플링되면, 색상은 색상이 적용되는 렌더 출력에서 각각의 (예컨대, 커버된) 샘플링 포지션으로 "브로드캐스트" 되어야 하고, 그리고 일 실시예에서 "브로드캐스트"된다. 이는, 더 미세한 셰이딩 레이트가 사용될 때와 비교하여 더 거친 셰이딩 레이트가 사용될 때 렌더 출력에서 더 많은 샘플링 포지션들에 대해 단일 색상이 사용될 것이라는 효과를 가져야 하고, 그리고 일 실시예에서 그러한 효과를 갖는다.
일 실시예에서, 렌더 출력 데이터는 출력 버퍼, 예컨대 타일 버퍼 내의 각각의 대응하는 샘플링 포지션으로 "브로드캐스트"된다. 이는 사용된 셰이딩 레이트에 기초하여 렌더러에 의해 생성된 렌더 출력 데이터를 출력 버퍼에 (직접) 기록하는 것을 포함할 수 있다. 대안적으로, 블렌딩이 요구되는 경우, 그래픽 프로세싱 파이프라인의 블렌더 스테이지는 렌더러에 의해 새롭게 생성된 렌더 출력 데이터를, 사용된 셰이딩 레이트에 기초하여 출력 버퍼에 이미 저장된 렌더 출력 데이터와 적절하게 블렌딩할 수 있다.
그래픽 프로세서는 임의의 적합한 그리고 바람직한 그래픽 프로세싱 파이프라인을 실행할 수 있고, 그 목적을 위해 임의의 적합한 그리고 바람직한 프로세싱 회로들, 프로세싱 로직, 컴포넌트들 및 요소들을 포함할 수 있고 그리고 일 실시예에서 포함한다.
그래픽 프로세서 및 그래픽 프로세싱 파이프라인은 전체 렌더 출력, 예컨대 프레임의 타일들을 생성하도록 동작가능한 타일-기반 그래픽 프로세서 및 프로세싱 파이프라인일 수 있고, 그리고 일 실시예에서 그러하다.
그래픽 프로세서가 실행하는 그래픽 프로세싱 파이프라인은 (그) 렌더 출력(예를 들어, 프레임)을 생성하기 위한 임의의 적합한 그리고 바람직한 프로세싱 스테이지들을 포함할 수 있다. 따라서, 그래픽 프로세싱 파이프라인은, 전술한 스테이지들(예컨대, 래스터화기, 렌더러, 및 깊이 테스터)에 더하여, 그래픽 프로세싱 파이프라인들이 통상적으로 포함하는 다른 프로세싱 스테이지들 중 임의의 하나 또는 하나 이상을, 그리고 일 실시예에서 그 모두를 포함할 수 있으며, 그리고 일 실시예에서 이를 포함한다. 따라서, 예를 들어, 일 실시예에서 그래픽 프로세싱 파이프라인은 또한 정점 셰이딩 스테이지, 프리미티브 셋업 스테이지 등을 포함한다. 파이프라인이 타일-기반 파이프라인인 경우, 일 실시예에서 파이프라인은 또한 타일링 스테이지, 및/또는 타일 버퍼 내의 데이터를(예컨대, 타일 버퍼 내의 데이터가 완료되면) 외부 (메인) 메모리로(예컨대, 프레임 버퍼로) 기록하도록 동작하는 기록 유닛을 포함한다.
그래픽 프로세싱 파이프라인(프로세서)의 하나의(그리고 각각의) 프로세싱 스테이지(회로)는 필요에 따라, 예컨대 고정된 기능 하드웨어 유닛(회로)으로서 또는 프로그래밍가능 프로세싱 회로(원하는 동작을 수행하도록 프로그래밍됨)로서 구현될 수 있다.
통상의 기술자에 의해 이해되는 바와 같이, 본 명세서에 설명된 기술의 그래픽 프로세서는, 예를 들어, 그리고 일 실시예에서, 예컨대, 그래픽 프로세서에 의한 프로세싱을 필요로 하는 애플리케이션들을 실행하는 호스트 프로세서를 포함하는 전체 그래픽 프로세싱 시스템의 일부일 수 있다. 호스트 프로세서는 적절한 커맨드들 및 데이터를 그래픽 프로세서에 전송하여, 그래픽 프로세싱 동작들을 수행하도록, 그리고 호스트 프로세서 상에서 실행되는 애플리케이션들에 의해 요구되는 그래픽 프로세싱 출력을 생성하도록 그것을 제어할 것이다. 이를 용이하게 하기 위하여, 호스트 프로세서는 또한 그래픽 프로세서에 대한 드라이버 및 그래픽 프로세서(그것의 프로그래밍가능 프로세싱 스테이지(셰이더))에 의해 실행될 프로그램들을 컴파일하기 위한 컴파일러 또는 컴파일러들을 실행해야 하고, 그리고 일 실시예에서 실행한다.
그래픽 프로세서는 또한 본 명세서에 설명된 데이터, 및/또는 그래픽 프로세서에 의해 생성된 출력 데이터를 저장하는 하나 이상의 메모리들 및/또는 메모리 디바이스들을 포함, 및/또는 이들과 통신하고/하거나 본 명세서에 설명된 프로세스들을 수행하기 위한 소프트웨어(예컨대 (셰이더) 프로그램)를 저장할 수 있다. 그래픽 프로세서는, 또한, 호스트 마이크로프로세서와 통신할 수 있고/있거나, 그래픽 프로세서에 의해 생성된 데이터에 기초하여 이미지들을 디스플레이하기 위한 디스플레이와 통신할 수 있다.
본 명세서에 설명된 기술은 데이터 프로세서(및 프로세싱 파이프라인)가 생성하는 데 사용될 수 있는 모든 형태의 출력에 사용될 수 있다. 예를 들어, 그래픽 프로세싱의 경우, 그래픽 프로세싱 파이프라인은 디스플레이를 위한 프레임들, 렌더-투-텍스처 출력들 등을 생성할 수 있다. 프로세싱으로부터의 출력 데이터 값들은, 일 실시예에서, 디스플레이를 위한 프레임 버퍼와 같은, 저장 및 사용을 위한 외부의, 예컨대 메인, 메모리로 내보내진다(export).
본 명세서에 설명된 기술은 임의의 적합한 형태 또는 구성의 그래픽 프로세서 및 그래픽 프로세싱 시스템에 적용가능하다. 이는 특히 타일-기반 그래픽 프로세서들 및 그래픽 프로세싱 시스템들에 적용가능하다. 따라서, 일 실시예에서, 그래픽 프로세서는 타일-기반 그래픽 프로세서(및 파이프라인)이다.
일 실시예에서, 본 명세서에 설명된 기술의 다양한 기능들은, 예를 들어 디스플레이 디바이스를 위한, (예컨대, 프레임 버퍼에 기록되는 렌더링된 단편 데이터와 같은) 데이터를 생성 및 출력하는 단일 그래픽 프로세싱 플랫폼 상에서 수행된다.
본 명세서에 설명된 기술은 적합하게 구성된 마이크로-프로세서 기반 시스템과 같은 임의의 적합한 시스템에서 구현될 수 있다. 일 실시예에서, 본 명세서에 설명된 기술은 컴퓨터 및/또는 마이크로-프로세서 기반 시스템에서 구현된다.
일 실시예에서 본 명세서에 설명된 기술은 일 실시예에서, 모바일 폰 또는 태블릿과 같은 휴대용 디바이스에서 구현된다.
본 명세서에 설명된 기술의 다양한 기능들은 임의의 원하는 그리고 적합한 방식으로 수행될 수 있다. 예를 들어, 본 명세서에 설명된 기술의 기능들은 필요에 따라 하드웨어 또는 소프트웨어로 구현될 수 있다. 따라서, 예를 들어, 본 명세서에 설명된 기술의 다양한 기능 요소들, 스테이지들, 및 "수단"은, 적절하게 전용되는 하드웨어 요소들(프로세싱 회로부) 및/또는 원하는 방식으로 동작하도록 프로그래밍될 수 있는 프로그래밍가능 하드웨어 요소들(프로세싱 회로부)과 같은, 다양한 기능들 등을 수행하도록 동작가능한 적합한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능성 유닛들, 회로부, 프로세싱 로직, 마이크로프로세서 배열들 등을 포함할 수 있다.
또한 여기서, 통상의 기술자에 의해 이해되는 바와 같이, 본 명세서에 설명된 기술의 다양한 기능들 등이 주어진 프로세서 상에서 복제되고/되거나 병렬로 수행될 수 있음을 유의해야 한다. 마찬가지로, 다양한 프로세싱 스테이지들은, 원하는 경우, 프로세싱 회로부 등을 공유할 수 있다.
또한, 본 명세서에 설명된 기술의 모든 설명된 실시예들은 본 명세서에 설명된 선택적 특징들 중 임의의 하나 이상 또는 전부를 적절히 포함할 수 있다는 것이 통상의 기술자에 의해 이해될 것이다.
본 명세서에 설명된 기술에 따른 방법들은 적어도 부분적으로 소프트웨어 예컨대 컴퓨터 프로그램들을 이용하여 구현될 수 있다. 따라서, 추가 실시예들로부터 보면, 본 명세서에 설명된 기술은 데이터 프로세서 상에 설치될 때 본 명세서에 설명된 방법들을 수행하도록 특별히 구성된 컴퓨터 소프트웨어, 프로그램 요소가 데이터 프로세서 상에서 실행될 때 본 명세서에 설명된 방법들을 수행하기 위한 컴퓨터 소프트웨어 코드 부분들을 포함하는 컴퓨터 프로그램 요소, 및 프로그램이 데이터 프로세싱 시스템 상에서 실행될 때 본 명세서에 설명된 방법 또는 방법들의 모든 단계들을 수행하도록 구성된 코드를 포함하는 컴퓨터 프로그램을 제공한다는 것을 알 수 있을 것이다. 데이터 프로세싱 시스템은 마이크로프로세서, 프로그래밍가능 FPGA(Field Programmable Gate Array) 등일 수 있다.
본 명세서에 설명된 기술은 또한, 그래픽 프로세서, 렌더러, 또는 데이터 프로세서를 포함하는 다른 시스템을 동작시키기 위해 사용될 때, 상기 데이터 프로세서와 함께, 상기 프로세서, 렌더러, 또는 시스템으로 하여금, 본 명세서에 설명된 기술의 방법들의 단계들을 수행하게 하는 그러한 소프트웨어를 포함하는 컴퓨터 소프트웨어 캐리어로 확장된다. 그러한 컴퓨터 소프트웨어 캐리어는 ROM 칩, CD ROM, RAM, 플래시 메모리, 또는 디스크와 같은 물리적 저장 매체일 수 있거나, 또는 와이어들을 통한 전자 신호, 광학 신호, 또는 예컨대 위성 등에 대한 무선 신호와 같은 신호일 수 있다.
본 명세서에 설명된 기술의 방법들의 모든 단계들이 컴퓨터 소프트웨어에 의해 수행되어야 하는 것은 아니고, 따라서 더 넓은 실시예로부터 본 명세서에 설명된 기술은 컴퓨터 소프트웨어 및 본 명세서에 기재된 방법들의 단계들 중 적어도 하나를 수행하기 위하여 컴퓨터 소프트웨어 캐리어 상에 설치된 그러한 소프트웨어를 제공함이 추가로 이해될 것이다.
본 명세서에 설명된 기술은 그에 따라 컴퓨터 시스템에 사용하기 위한 컴퓨터 프로그램 제품으로서 적합하게 구현될 수 있다. 그러한 구현예는 컴퓨터 판독가능 매체, 예를 들어 디스켓, CD ROM, ROM, RAM, 플래시 메모리, 또는 하드 디스크와 같은 유형적(tangible) 비일시적 매체 상에 고정된 일련의 컴퓨터 판독가능 명령어들을 포함할 수 있다. 그것은, 또한, 광학 또는 아날로그 통신 라인들을 포함하지만 이들로 제한되지 않는 유형적 매체를 통해, 또는 마이크로파, 적외선 또는 다른 송신 기법들을 포함하지만 이들로 제한되지 않는 무선 기법들을 사용하여 무형적으로, 모뎀 또는 다른 인터페이스 디바이스를 경유하여 컴퓨터 시스템으로 송신가능한 일련의 컴퓨터 판독가능 명령어들을 포함할 수 있다. 일련의 컴퓨터 판독가능 명령어들은 이전에 본 명세서에 설명된 기능의 전부 또는 일부를 구현한다.
통상의 기술자는 이러한 컴퓨터 판독가능 명령어들이 많은 컴퓨터 아키텍처 또는 운영 체제들에 사용하기 위한 다수의 프로그래밍 언어들로 기록될 수 있음을 이해할 것이다. 또한, 그러한 명령어들은, 반도체, 자기, 또는 광학을 포함하지만 이로 제한되지 않는, 현재 또는 미래의 임의의 메모리 기술을 이용하여 저장될 수 있거나, 또는 광학, 적외선, 또는 마이크로파를 포함하지만 이로 제한되지 않는, 현재 또는 미래의 임의의 통신 기술을 이용하여 송신될 수 있다. 이러한 컴퓨터 프로그램 제품은, 예를 들어, 시스템 ROM 또는 고정 디스크 상에 컴퓨터 시스템과 함께 사전로딩되거나, 또는 네트워크, 예를 들어, 인터넷 또는 월드 와이드 웹(World Wide Web)을 통해 서버 또는 전자 게시판으로부터 배포되는 첨부 인쇄 또는 전자 문서, 예를 들어, 수축 포장 소프트웨어(shrink wrapped software)를 구비한 분리가능한 매체로서 배포될 수 있다는 것이 고려된다.
이제 본 명세서에 설명된 기술의 실시예가 도면을 참조하여 설명될 것이다.
컴퓨터 그래픽 이미지가 디스플레이될 때, 그것은 보통 먼저 일련의 프리미티브들(다각형들)로서 정의되며, 이 프리미티브들은 이어서 그래픽 렌더링을 위한 그래픽 단편들로 분할(래스터화)된다. 이들 단편은 렌더링 프로세스(렌더링 파이프라인)를 통과하는 프로세싱 엔티티들이다. 정상의 그래픽 렌더링 동작 동안, 렌더러는 전형적으로 단편들이 정확하게 디스플레이될 수 있도록 각각의 단편에 대해 단일 색상(예를 들어, 적색, 녹색 및 청색, RGB 값들 및 투명도(알파, a) 값의 세트)을 샘플링한다. 일단 단편들이 렌더러를 완전히 횡단하면, 그들의 연관된 색상 값들은 메모리에 저장되어, 예컨대 디스플레이 디바이스 상에서의 디스플레이를 위해 출력될 준비가 된다.
각각의 그래픽 단편은 전형적으로 출력 디스플레이 디바이스의 "픽셀"과 동일한 크기 및 위치일 것이다. 대안적으로, 각각의 그래픽 단편은, 예를 들어 다운샘플링이 적용될 경우, 출력 디스플레이 디바이스의 하나 미만의 픽셀에 사실상 대응할 수 있다.
따라서, 렌더링 프로세스는 전형적으로 샘플링 포인트들의 어레이를 포함하는 렌더 출력을 생성할 수 있으며, 이들 각각에 대해 적절한 데이터(예컨대, 색상 값 데이터의 세트)가 생성된다. 각각의 출력 픽셀에 대해, 전형적으로 렌더 출력 내에 하나 이상의 대응하는 샘플링 포인트들의 세트가 있다. 샘플링 포인트들의 각각의 그러한 세트는 하나의 샘플링 포인트만을 포함할 수 있거나, 또는 다운샘플링이 사용되는 경우, 샘플링 포인트들의 각각의 세트는 복수의 샘플링 포인트들을 포함할 수 있다.
위에서 논의된 바와 같이, "가변 레이트 셰이딩"(VRS)은 렌더 출력을 렌더링하는 데 상이한 셰이딩 레이트들이 사용되도록 허용하여, 즉, 렌더 출력에서 복수의 가능한 상이한 크기의 영역들 중 하나에 대해 단일 색상(색상 값 데이터의 세트)이 샘플링될(렌더링될) 수 있게 하는 기법이다. 예를 들어, 단일 색상은 단일 픽셀에만 대응하는 렌더 출력의 영역에 대해 샘플링될 수 있거나, 또는 단일 색상은 복수의 픽셀들의 블록 내의 각각의 픽셀에 대응하는 렌더 출력의 영역에 대해 샘플링될 수 있다.
단일 색상을 샘플링(렌더링)하고 이를 복수의 샘플링 포인트들(예컨대, 픽셀들)에 적용하는 것은 각각의 샘플링 포인트에 대해 개개의 색상을 샘플링하는 것과 비교하여 그러한 샘플링 포인트들에 요구되는 프로세싱 노력을 감소시킬 것이지만, 보통 감소된 이미지 품질을 희생하게 될 것이다.
"가변 레이트 셰이딩"(VRS)에는, 전형적으로, 그래픽 프로세서가 지원하고 사용할 수 있는 복수의 가능한 셰이딩 레이트들의 세트가 존재할 것이다. 즉, 전형적으로, 단일 색상(색상 값 데이터의 세트)이 샘플링될 수 있는 복수의 가능한 상이한 크기의 렌더 출력 영역들의 세트가 존재할 것이다. 이들 렌더 출력 영역들 중 가장 작은 가능한 것은 "미세 픽셀"로 지칭될 수 있고, 다른 더 큰 렌더 출력 영역들은 "거친 픽셀들"로 지칭될 수 있다.
각각의 "미세 픽셀"은 전형적으로 출력 디스플레이 디바이스의 픽셀과 동일한 크기 및 위치일 것이다. 그러나, 각각의 "미세 픽셀"은, 예를 들어 다운샘플링이 적용될 경우, 출력 디스플레이 디바이스의 하나 미만의 픽셀에 사실상 대응하는 것이 또한 가능하다.
각각의 가능한 "거친 픽셀"의 영역은 전형적으로 복수의 "미세 픽셀들"의 블록에 대응한다. 이어서, 상이한 가능한 셰이딩 레이트들은 셰이딩 레이트가 대응하는 미세 픽셀들의 수의 면에서 지칭될 수 있다. 예를 들어, 1x1 셰이딩 레이트는 단일 색상이 단일 미세 픽셀에 대해 샘플링되어야 하는 가장 미세한 가능한 셰이딩 모드를 나타낼 것인 반면, 2x2 셰이딩 레이트는 단일 색상이 2x2 미세 픽셀들의 블록에 대응하는 영역에 대해 샘플링되어야 함을 나타낼 것이다. 그래픽 프로세서는 전형적으로, 예를 들어 1x1, 1x2, 2x1, 2x2, 2x4, 4x2 및 4x4 셰이딩 레이트들을 지원할 수 있다.
도 2는 1x1 및 2x2 셰이딩 레이트들을 사용하여 렌더링되는 예시적인 프리미티브(201)의 비교를 예시한다. 도 2는 미세 픽셀들(202)의 6x6 블록에 대해 렌더링될 예시적인 프리미티브(201)의 위치를 도시한다. 각각의 작은 정사각형은 "가변 레이트 셰이딩"(VRS) 프로세스의 미세 픽셀들 중 하나를 표현한다.
1x1 셰이딩 레이트의 경우, 렌더링 프로세스는 프리미티브가 커버하는 각각의 미세 픽셀에 대해 단일 색상(색상 값 데이터의 세트)을 샘플링(렌더링)한다. 이 경우, 프리미티브(201)는 36개의 예시된 미세 픽셀들 중 23개에서 보이며(이를 커버하며), 따라서 렌더링 프로세스는 총 23개의 색상들(색상 값 데이터의 세트들)을 샘플링할 것이다.
도 2의 각각의 더 큰 정사각형은 2x2 셰이딩 레이트 프로세스에 사용되는 하나의 2x2 거친 픽셀을 표현한다. 각각의 2x2 거친 픽셀은 2x2 미세 픽셀들의 블록을 포함한다. 이 경우, 렌더링 프로세스는 프리미티브가 커버하는 각각의 그러한 거친 픽셀에 대해 단일 색상(색상 값 데이터의 세트)을 샘플링(렌더링)한다. 이 경우, 프리미티브(201)는 9개의 예시된 2x2 거친 픽셀들 중 8개를 커버하며, 따라서 렌더링 프로세스는 8개의 색상들(색상 값들의 세트들)만을 샘플링할 것이다.
따라서, 더 거친 셰이딩 레이트는 더 미세한 셰이딩 레이트와 비교하여 더 낮은 밀도의 렌더링된 색상들과 연관된다는 것이 이해될 것이다. 또한, 더 거친 셰이딩 레이트를 사용하여 프리미티브(201)를 렌더링하는 것은, 더 미세한 셰이딩 레이트를 사용하여 프리미티브(201)를 렌더링하는 것과 비교하여 프로세싱 요건들을 감소시킬 것임을 이해할 것이다. 그러나, 이는 전형적으로 감소된 이미지 품질을 희생하게 될 것이다.
위에서 논의된 바와 같이, 출원인은 렌더 출력에 나타나는 객체들의 깊이에 따라 셰이딩 레이트(즉, 단일 색상이 샘플링되는 렌더 출력의 영역의 크기)를 변화시키는 것이 바람직할 수 있음을 인식하였다.
예를 들어, 종종, 더 낮은 렌더링 품질이, 예를 들어, 전체적으로 인지되는 이미지 품질의 면에서, 카메라(또는 렌더 출력의 평면)로부터 더 멀리 떨어진 렌더 출력의 영역들에서 허용가능하여, 카메라(또는 렌더 출력의 평면)에 더 가까운 렌더 출력의 영역들과 비교하여, 그러한 영역들에 대해 더 적은 프로세싱 노력이 소비될 수 있는 경우가 있을 수 있다. 유사하게, 렌더 출력에 적용되는 블러링의 정도가 깊이에 의존하는 "피사계 심도" 방법의 경우, 더 낮은 렌더링 품질은, 더 적은 블러링이 있는 영역들과 비교하여, 더 큰 정도의 블러링이 적용되는 렌더 출력의 영역들에서 더 허용가능할 수 있다.
예를 들어, 도 3은 뷰(Z) 방향(94)에서 시점(93)으로부터 카메라에 의해 보이는, 2개의 객체들, 즉 피라미드(91) 및 큐브(92)를 포함하는 예시적인 장면(90)을 도시한다. 장면(90)의 이 뷰에서, 큐브(92)는 피라미드(91)보다 얕은 깊이에(즉, 카메라에 더 가까이) 놓여 있다. 따라서, 전형적으로 큐브(92)에 대해서보다 피라미드(91)에 대해 더 낮은 렌더링 품질을 사용하는 것이 더 허용가능할 수 있다.
본 명세서에 설명된 기술에서, (Z) 깊이는 프리미티브 또는 단편을 렌더링하는 데 사용되는 셰이딩 레이트를 결정할 때 고려된다. 예를 들어, 더 미세한 셰이딩 레이트는 카메라(또는 렌더 출력의 평면)에 더 가까운 프리미티브를 렌더링하는 데 사용될 수 있고, 더 거친 셰이딩 레이트는 카메라(또는 렌더 출력의 평면)로부터 더 멀리 떨어진 프리미티브를 렌더링하는 데 사용될 수 있다. 이어서, 이는, 렌더링 품질의 결과적인 감소가 덜 분명하고/하거나 더 허용가능할 수 있는 렌더 출력의 영역들에 대한 프로세싱 노력의 감소를 야기할 수 있다.
따라서, 예를 들어, 상이한 셰이딩 레이트들이, 상이한 깊이들을 갖는 상이한 객체들의 프리미티브들을 렌더링하는 데 사용될 수 있다. 예를 들어, 도 3의 예에서, 큐브(92)의 프리미티브들은 피라미드(91)의 프리미티브들보다 더 미세한 셰이딩 레이트를 사용하여 렌더링될 수 있다. 더욱이, 상이한 셰이딩 레이트들은 상이한 깊이들을 갖는 동일한 객체의 상이한 프리미티브들을 렌더링하는 데 사용될 수 있다. 예를 들어, 도 3의 예에서, 더 미세한 셰이딩 레이트는 더 멀리 있는 큐브(92)의 프리미티브들보다 카메라에 더 가까운 큐브(92)의 프리미티브들을 렌더링하는 데 사용될 수 있다. 더욱이, 상이한 셰이딩 레이트들은 상이한 깊이들을 갖는 동일한 프리미티브의 상이한 영역들을 렌더링하는 데 사용될 수 있다. 예를 들어, 도 3의 예에서, 피라미드(91)의 전방면은 상이한 깊이들을 갖는 다수의 단편들로 래스터화되는 단일 프리미티브일 수 있고, 더 미세한 셰이딩 레이트는 더 멀리 있는 단편(또는 단편들)보다 카메라에 더 가까운 단편(또는 단편들)을 렌더링하는 데 사용될 수 있다.
이는 이어서, 허용가능한 이미지 품질을 유지하면서, 렌더 출력, 예컨대 디스플레이를 위한 프레임을 렌더링하는 데 요구되는 전체 프로세싱 노력이 감소될 수 있음을 의미한다.
도 1은 본 명세서에 설명된 기술의 일 실시예에 따라 동작될 수 있는 그래픽 프로세싱 시스템을 도시한다. 그래픽 프로세싱 시스템은 호스트 프로세서(CPU)(1), 그래픽 프로세싱 유닛(GPU)(3), 및 호스트 프로세서(1) 및 그래픽 프로세서(3)에 의해 요구되고/되거나 그에 의해 생성된 데이터를 저장하기 위한 메모리(5)를 포함한다.
호스트 프로세서(1) 상에서 실행되고 있는 애플리케이션(2)이 디스플레이될 프레임과 같이 그래픽 프로세서(3)로부터의 그래픽 프로세싱을 요구할 때, 애플리케이션(2)은 호스트 프로세서(1) 상에서 실행되고 있는 그래픽 프로세서(3)를 위해 드라이버(4)에 적절한 커맨드들 및 데이터를 전송한다.
본 실시예에서, 이러한 커맨드들 및 데이터는 렌더 출력을 생성할 때 그래픽 프로세서(3)에 의해 사용되어야 하는 셰이딩 레이트들을 나타내는 정보를 포함한다. 본 실시예에서, 프리미티브의 깊이에 따라 셰이딩 레이트를 특정할 뿐만 아니라, 애플리케이션(2)은 또한 프리미티브가 속하는 드로우콜, 및/또는 프리미티브가 연관되는 유발 정점, 및/또는 프리미티브가 나타나는 렌더 출력의 영역에 기초하여 셰이딩 레이트를 특정할 수 있다. 따라서, "깊이-당" 셰이딩 레이트들을 특정할 뿐만 아니라, 애플리케이션(2)은 또한 "드로우콜-당" 셰이딩 레이트들, 및/또는 "프리미티브-당" 셰이딩 레이트들, 및/또는 "스크린 공간-당" 셰이딩 레이트들을 특정할 수 있다.
애플리케이션(2)이 2개 이상의 상이한 기준들에 기초하여 셰이딩 레이트들을 특정하는 경우, 상이한 기준들이 동일한 프리미티브(단편)에 대해 상이한 셰이딩 레이트들을 반환하는 경우가 있을 수 있다. 따라서, 애플리케이션(2)은 또한 상이한 셰이딩 레이트들이 어떻게 조합되어야 하는지를 특정할 수 있다. 이를 위해, 애플리케이션(2)은 상이한 셰이딩 레이트들을 조합하는 데 사용되어야 하는 조합기 함수들의 세트를 특정한다. 예를 들어, 애플리케이션(2)은 가장 미세한 또는 가장 거친 셰이딩 레이트를 사용함으로써, 또는 평균 셰이딩 레이트를 결정함으로써 상이한 셰이딩 레이트들이 조합되어야 함을 특정할 수 있다.
애플리케이션(2)으로부터의 이 커맨드들 및 데이터에 응답하여, 이어서, 드라이버(4)는 그래픽 프로세서(3)로 하여금 애플리케이션(2)에 의해 요구되는 렌더 출력을 생성하게 하기 위해 그래픽 프로세서(3)에 적절한 커맨드들 및 데이터를 전송한다. 드라이버(4)는 메모리(5)에 기록함으로써 그래픽 프로세서(3)에 커맨드들 및 데이터를 전송한다.
드라이버(4)에 의해 제공되는 커맨드들 및 데이터는 그래픽 프로세서(3)에 의해 생성될 렌더 출력에 대한 프리미티브들을 렌더링하기 위한 커맨드들과 함께, 렌더 출력에 대한 프리미티브들에 사용될 정점들을 표현하는 연관된 정점 데이터를 포함할 것이다. 이들은 또한 애플리케이션(2)에 의해 특정된 셰이딩 레이트들을 나타내는 정보를 포함할 것이다.
그래픽 프로세서(3)로 전송된 커맨드들은 그래픽 프로세서(3)로 하여금 메모리(5)로부터 정점 데이터를 판독하게 하고, 그에 따라 렌더 출력을 생성하기 위해 판독된 정점 데이터를 프로세싱하게 한다. 그래픽 프로세서(3)는 전형적으로 렌더 출력의 영역(구역)에 각각(잠재적으로) 적용되는 하나 이상의 단편들로 프리미티브를 래스터화하기 위해 프리미티브에 대한 정점 데이터를 사용할 것이다. 이어서, 단편들이 렌더링될 수 있다.
완성된 렌더 출력(예를 들어, 프레임)은 메모리(5) 내의 프레임 버퍼에 기록될 수 있으며, 이로부터 그것은 스크린 또는 프린터와 같은 디스플레이 디바이스 상에서의 디스플레이를 위해 제공될 수 있다.
도 4는 일 실시예에 따른 그래픽 프로세서(3)에 의해 실행될 수 있는 그래픽 프로세싱 파이프라인(300)을 도시한다. 도 4는 본 실시예의 동작에 관련되는 그래픽 프로세싱 파이프라인(300)의 주요 요소들 및 파이프라인 스테이지들을 도시한다. 통상의 기술자에 의해 이해되는 바와 같이, 도 4에 예시되지 않은 그래픽 프로세싱 파이프라인의 다른 요소들이 있을 수 있다. 또한 여기서 도 4는 단지 개략적이고, 예를 들어, 실제로 도시된 기능성 유닛들 및 파이프라인 스테이지들은 중요한 하드웨어 회로들을 공유할 수 있지만, 그것들은 도 4에서 별개의 스테이지들로 개략적으로 도시되어 있음을 유의해야 한다. 또한, 도 4에 도시된 바와 같이 그래픽 프로세싱 파이프라인의 각각의 스테이지들, 요소들 및 유닛들 등은 필요에 따라 구현될 수 있으며, 그에 따라, 예컨대, 필요한 동작 및 기능들을 수행하기 위한 적절한 회로(들) 및/또는 프로세싱 로직 등을 포함할 것임이 이해될 것이다.
도 4에 도시된 그래픽 프로세싱 파이프라인(300)은 타일-기반 렌더러이고, 따라서, 생성될 출력 프레임과 같은, 렌더 출력 데이터 어레이의 타일들을 생성할 것이다.
렌더 출력 데이터 어레이는 전형적으로 스크린 또는 프린터와 같은 디스플레이 디바이스 상에서의 디스플레이를 위해 의도된 출력 프레임일 수 있지만, 또한, 예를 들어, 나중의 렌더링 패스들에서 사용하도록 의도된 중간 데이터("렌더 투 텍스처" 출력으로도 알려짐) 등을 포함할 수 있다.
타일-기반 렌더링에서는, 전체 렌더 출력, 예컨대 프레임이 즉시 모드 렌더링에서와 같이 한 번에 효과적으로 프로세싱되기보다는, 렌더 출력, 예컨대, 디스플레이될 프레임은 보통 "타일들"로 지칭되는 복수의 더 작은 하위-영역들로 분할된다. 각각의 타일(하위-영역)은 개별적으로(전형적으로 하나씩 차례로) 렌더링되고, 렌더링된 타일들(하위-영역들)은 이어서 재조합되어 완전한 렌더 출력, 예컨대, 디스플레이를 위한 프레임을 제공한다. 그러한 배열들에서, 렌더 출력은 전형적으로 규칙적으로-크기설정되고 형상화된 하위-영역들(타일들)(이는 보통, 예컨대 정사각형들 또는 직사각형들임)로 분할되지만, 이는 필수적인 것은 아니다.
그러한 타일-기반 렌더링의 이점은 주어진 타일에 적용되지 않는 그래픽 프로세싱 커맨드들(프리미티브들)이 그 타일에 대해 프로세싱될 필요가 없고, 따라서 타일이 프로세싱될 때 무시될 수 있다는 것이다. 이는 주어진 렌더 출력에 필요한 그래픽 프로세싱의 전체 양이 감소될 수 있게 한다.
따라서, 타일-기반 렌더링 시스템에서, 예를 들어, 타일에 실제로 적용되지 않는 커맨드들 및 프리미티브들을 불필요하게 프로세싱하는 것을 피하기 위해 주어진 렌더링 타일에 실제로 적용되는 그러한 커맨드들(프리미티브들)을 식별하고 아는 것이 보통 바람직하다.
이를 용이하게 하기 위해, 본 실시예에서, 프로세싱될 프리미티브들의 목록들이 렌더 출력의 상이한 영역들에 대해 준비된다. 이들 "프리미티브 목록들"("타일 목록" 또는 "다각형 목록"으로도 지칭될 수 있음)은 해당 영역에 대해 프로세싱될 프리미티브들을 (예컨대, 프리미티브 표시자를 참조하여) 식별한다. 프리미티브 목록들이 준비될 수 있는 렌더 출력의 영역들은, 예컨대 단일 렌더링 타일들에, 또는 복수의 렌더링 타일들의 세트들에 대응할 수 있다. 일단 렌더 출력 영역들에 대해 프리미티브 목록들이 준비되면, 이어서 각각의 렌더링 타일은, 렌더링 타일을 포함하는 영역(들)에 대해 열거된 프리미티브들을 래스터화 및 렌더링함으로써 프로세싱될 수 있다.
임의의 적합한 그리고 바람직한 정점 셰이딩 동작들은 또한 프리미티브들에 대한 정점 데이터에 대해 수행될 수 있다. 정점 셰이딩 동작들은 각각의 정점에 대한 속성들을 후속 그래픽 프로세싱 동작들에 대해 원하는 형태로 변환하도록 동작할 수 있다. 이는, 예를 들어, 정점 포지션 속성들을 이들이 초기에 정의되는 세계 또는 사용자 공간으로부터, 그래픽 프로세싱 시스템의 출력이 디스플레이되어야 하는 스크린 공간으로 변환하는 것을 포함할 수 있다. 이어서, 프리미티브 목록들 및 프로세싱된 정점 데이터는 메모리(5)에 저장될 수 있다.
도 4는 프리미티브 목록들 및 프로세싱된(정점-셰이딩된) 정점 데이터의 생성 및 저장 이후의 그래픽 프로세싱 파이프라인(300)의 스테이지들을 도시한다. 이러한 스테이지들은, 메모리(5)에 저장된 프리미티브 목록들 및 프로세싱된 정점 데이터를 사용하여 차례로 렌더 출력의 각각의 타일을 생성하도록 동작한다. 이어서, 이러한 방식으로 생성된 타일들은 조합되어 전체 렌더 출력을 생성한다.
도 4에 도시된 바와 같이, 그래픽 프로세싱 파이프라인(300)은 타일을 생성하기 위해 그래픽 프로세싱 파이프라인(300)이 수행해야 하는 렌더링 작업을 스케줄링하는 단편 셰이딩 엔드포인트(fragment shading endpoint)("FSE")(301)를 포함한다.
단편 셰이딩 엔드포인트("FSE")(301)가 타일에 대한 렌더링 작업을 스케줄링하는 것에 응답하여, 프리미티브 목록 판독기(primitive list reader)("PLR")(302)는 타일에 대해 렌더링될 프리미티브들을 식별하기 위해 메모리(5)로부터 그 타일에 대한 적절한 프리미티브 목록(들)을 판독한다.
도 4에 도시된 바와 같이, 프리미티브 목록 판독기("PLR")(302)는 또한 메모리(5)로부터 "드로우콜-당" 셰이딩 레이트, "스크린 공간-당" 셰이딩 레이트, 및 조합기 함수 정보를 판독 입력(read in)한다.
이어서, 자원 할당자(resource allocator)("RA")(303)는 프리미티브 목록 판독기("PLR")(302)가 식별한 프리미티브들을 렌더링하기 위해 GPU(3)의 다양한 요소들을 타일에 대해 렌더링되도록 구성한다. 예를 들어, 자원 할당자("RA")(303)는 렌더링되고 있는 타일에 대한 출력 데이터를 저장하기 위해 타일 버퍼(318)를 적절하게 구성한다.
타일 버퍼(318)는 그래픽 프로세싱 파이프라인 (칩) 상에(그에 로컬로) 위치되는 RAM의 일부로서 제공된다. 타일 버퍼(318)는 버퍼들이 표현하는 각각의 샘플링 포인트에 대해(본질적으로, 프로세싱되고 있는 타일의 각각의 샘플링 포인트에 대해) 각각 적절한 색상 등 또는 Z-값을 저장하는 색상 및 깊이 버퍼들을 저장한다. 이들 버퍼들은 전체 렌더 출력(예를 들어, 디스플레이될 이미지)의 부분(타일)을 표현하는 데이터의 어레이를 저장하며, 이때 버퍼들 내의 샘플 값들의 각자의 세트들은 전체 렌더 출력의 각자의 픽셀들에 대응한다(예컨대, 샘플 값들의 각각의 2x2 세트는 출력 픽셀에 대응할 수 있으며, 여기서 4x 멀티샘플링이 사용되고 있다).
이어서, 정점 로더(vertex loader)("VL")(304)는 메모리(5)로부터 렌더링될 프리미티브들에 대한 적절한 프로세싱된 정점 데이터를 판독하고, 프리미티브들(즉, 그들의 프로세싱된 정점 데이터)을 삼각형 셋업 유닛(triangle set-up unit)("TSU")(305)에 제공한다.
도 4에 도시된 바와 같이, 정점 로더("VL")(304)는 또한 메모리(5)로부터 "프리미티브-당" 셰이딩 레이트 정보를 판독 입력한다.
삼각형 셋업 유닛("TSU")(305)은 렌더링될 프리미티브들을 셋업하기 위해 프리미티브 셋업 동작들을 수행한다. 이는, 프리미티브들에 대한 정점들로부터, 프리미티브 에지들을 표현하는 에지 정보를 결정하는 것을 포함한다. 이어서, 프리미티브들에 대한 에지 정보는 래스터화기(306)로 전달된다.
래스터화기(306)가 렌더링을 위한(즉, 그의 에지 정보를 포함하는) 그래픽 프리미티브를 수신할 때, 그것은 프리미티브를 샘플링 포인트들로 래스터화하고, 프리미티브를 렌더링하기 위한 (적절한 샘플링 포지션들을 표현하는) 적절한 포지션들을 갖는 하나 이상의 그래픽 단편들을 생성한다.
이어서, 래스터화기(306)에 의해 생성된 단편들은 Z 깊이 및 스텐실 테스트 재순서화 버퍼(Z depth and stencil test re-order buffer)("ZSRob")(307)로 전달된다. Z 깊이 및 스텐실 테스트 재순서화 버퍼("ZSRob")(307)는 Z 깊이 및 스텐실 테스트 스테이지(Z depth and stencil test stage)("ZS")(308)에 의한 후속 프로세싱에 적합한 순서로 단편들을 재순서화하도록 동작할 수 있다.
Z 깊이 및 스텐실 테스트 스테이지("ZS")(308)는 그것이 Z 깊이 및 스텐실 테스트 재순서화 버퍼("ZSRob")(307)로부터 수신하는 단편들에 대해 Z 깊이 테스트를 수행하여, 임의의 단편들이 이 스테이지에서 폐기(컬링)될 수 있는지를 확인한다. 이를 위해, 그것은 단편의 Z 깊이 값을 결정하고, 결정된 Z 깊이 값을 Z 깊이 버퍼에 저장된 대응하는 Z 깊이 값과 비교하여, 단편이 이전에 렌더링된 데이터에 의해 가려질 것인지(아닌지) 여부를 결정한다. 단편이 가려질 것이라고 결정되는 경우(예를 들어, 단편의 깊이 값이 깊이 버퍼 내의 대응하는 깊이 값보다 크다고 결정되는 경우), 단편은 Z 깊이 테스트를 통과하지 않고 폐기된다. 동시에, 초기 스텐실 테스트이 또한 수행될 수 있다. Z 깊이 및 스텐실 테스트 스테이지("ZS")(308)를 통과하는 단편들은 이어서 프로세싱을 위해 파이프라인의 나머지로 앞으로 보내진다.
단편의 Z 깊이 값은 단편의 중심에서, 또는 도심 샘플 위치에서 결정될 수 있다. 대안적으로, 깊이는 최소 또는 최대 함수와 같은, 모든 커버된 샘플링 포인트들에서 결정된 Z 깊이의 함수를 사용하여 결정될 수 있다.
이어서, Z 깊이 및 스텐실 테스트 스테이지("ZS")(308)에 의해 제공되는 단편의 Z 깊이에 기초하여 단편을 렌더링하는 데 사용되어야 하는 "깊이-당" 셰이딩 레이트를 결정하도록 동작하는 깊이 셰이딩 레이트 룩업 스테이지(309)가 있다. 이러한 동작은 아래에서 더 상세히 논의될 것이다.
이어서, 셰이딩 레이트 조합기 스테이지(310)는 깊이 셰이딩 레이트 룩업 스테이지(309)에 의해 결정된 "깊이-당" 셰이딩 레이트를, 메모리(5)로부터 판독된 조합기 함수 정보를 사용하여 "드로우콜-당", 및/또는 "프리미티브-당", 및/또는 "스크린 공간-당" 셰이딩 레이트들과 조합할 수 있다. 이 프로세스는 해당 단편에 사용될 전체 조합된 셰이딩 레이트를 생성한다.
이어서, 단편은, 예를 들어 미국 특허 출원 공개 제2019/0088009호(Arm Limited)에 기술된 바와 같이, 순방향 픽셀 소멸 스테이지(forward pixel kill stage)("FPK")(311)에 의한 "순방향 픽셀 소멸" 테스트과 같은 추가의 컬링 동작들을 받을 수 있다.
이어서, 순방향 픽셀 소멸 스테이지("FPK")(311)에서 살아남은 단편들은 워프 패킹 스테이지(312)로 전달된다. 워프 패킹 스테이지(312)는 실행을 위해 실행 스레드들의 적절한 그룹들("워프들")을 실행 엔진(execution engine)("EE")(314)에 발행하기 위해 워프 관리자(warp manager)("WM")(313)와 함께 동작한다.
본 실시예에서, 실행 엔진(314)은 색상(적색, 녹색 및 청색, RGB) 및 투명도(알파, a) 데이터를 포함하는 적절한 렌더 출력 데이터를 생성하기 위해 그것에 발행된 각각의 실행 스레드에 대해 셰이더 프로그램을 실행한다. 셰이더 프로그램은 애플리케이션(2)에 의해 제공되고, 드라이버(4)에 의한 실행을 위해 컴파일될 수 있다.
실행 스레드들의 하나의 그룹("워프") 내의 스레드들은 각각 한 번에 하나의 명령어씩 록스텝으로 셰이더 프로그램을 실행한다. 이러한 방식으로 실행 스레드를 그룹들로 그룹화하는 것은 실행 엔진(314)의 실행 효율을 개선할 수 있는데, 그 이유는 그룹 내의 모든 스레드들 사이에서 명령어 페치 및 스케줄링 자원들을 공유하는 것이 가능하기 때문이다.
본 실시예에서, 워프 패킹 스테이지(312)는 각각 총 16개의 실행 스레드들을 포함하는 스레드 그룹들("워프들")을 생성한다. 스레드들의 다른 그룹화들이 물론 가능할 것이다.
전형적으로, 스레드 그룹("워프") 내의 각각의 스레드는 렌더 출력 내의 하나 이상의 샘플링 포인트들의 고정된 세트에 대응할 것이고, 그에 대한 렌더 출력 데이터를 계산할 것이다. 그러나, 본 실시예에서, 스레드가 대응하는 샘플링 포인트들(예컨대, 픽셀들)의 개수는 사용되는 셰이딩 레이트에 의존한다. 이를 용이하게 하기 위해, 워프 패킹 스테이지(312)는 셰이딩 레이트 조합기 스테이지(310)에 의해 결정된 셰이딩 레이트에 기초하여 스레드 그룹들("워프들")을 생성하도록 동작한다.
예를 들어, 1x1 셰이딩 레이트가 셰이딩 레이트 조합기 스테이지(310)에 의해 나타내어질 때, 워프 패킹 스테이지(312)는 각자의 단일 미세 픽셀에 대응하는 렌더 출력 내의 하나 이상의 샘플링 포인트들에 대한 렌더 출력 데이터를 생성하기 위해 셰이더 프로그램을 각각 실행할 하나 이상의 스레드들을 포함하는 스레드 그룹("워프")을 생성한다. 그러나, 1x2 셰이딩 레이트가 사용될 때, 워프 패킹 스테이지(312)는 각자의 1x2 거친 픽셀에 대응하는 렌더 출력 내의 하나 이상의 샘플링 포인트들에 대한 렌더 출력 데이터를 생성하기 위해 셰이더 프로그램을 각각 실행할 하나 이상의 스레드들을 포함하는 스레드 그룹("워프")을 생성한다. 다른 셰이딩 레이트들은 대응하는 방식으로 취급될 것이다.
따라서, 실행 엔진(314)은 미세한 픽셀들을 표현하는 실행 스레드들을 실행할 수 있고, 더 거친 셰이딩 레이트가 사용되고 있는 경우, 거친 픽셀들을 표현하는 실행 스레드들을 실행할 수 있다.
이어서, 워프 패킹 스테이지(312)에 의해 생성된 스레드 그룹들("워프들")은 워프 관리자(313)로 전달되며, 이는 실행을 위해 실행 엔진("EE")(314)에 적절하게 스레드들을 발행한다. 워프 관리자(313)는 또한 워프 상태 저장소(315)(메모리(5) 내의)에, 실행 엔진(314)에 스레드를 발행한 스레드 그룹들("워프들")과 연관된 셰이딩 레이트들을 나타내는 정보를 저장한다.
실행 엔진("EE")(314)은 이어서, 적절한 셰이딩 동작들을 수행하고 각각의 실행 스레드에 대한 적절한 렌더 출력 데이터를, 즉 색상(적색, 녹색 및 청색, RGB) 및 투명도(알파, a) 데이터를 포함하여 생성하기 위해, 적절하게 스레드 그룹들("워프들") 내의 실행 스레드들을 실행한다.
도 4에 도시된 바와 같이, 파이프라인(300)의 가변 보간 스테이지(varying interpolation stage)("VAR")(316)는 실행 엔진("EE")(314)에 대한 보간 작업들을 수행하는 것을 담당한다. 가변 보간 스테이지("VAR")(316)는, 예를 들어 프리미티브의 정점들로부터 현재 샘플링 포인트 위치로, 정점-당 속성들(예컨대 정점-당 색상들, 텍스처 좌표 등)을 보간한다.
가변 레이트 셰이딩을 수행할 때, 가변 보간 스테이지(316)의 보간은 셰이딩 레이트에 의존할 수 있고, 예를 들어, 여기서 각각의 거친 또는 미세한 픽셀은 그의 기하학적 중심에서 샘플링되어야 한다(이는, 예를 들어, 2x2 거친 픽셀의 기하학적 중심은 1x1 미세 픽셀 또는 2x1 거친 픽셀과 동일하지 않기 때문이다). 따라서, 가변 보간 스테이지("VAR")(316)는 워프 상태 저장소(315)로부터 셰이딩 레이트 정보를 수신할 수 있다. 가변 보간 스테이지("VAR")(316)로부터의 보간 결과들은 예컨대 추가 프로세싱에 사용하기 위해, 실행 엔진("EE")(314)으로 반환될 수 있다.
이어서, 실행 엔진("EE")(314)에 의해 생성된 출력 데이터는 타일 버퍼(318)에 적절하게 기록된다. 블렌딩이 요구되는 경우, 타일 버퍼(318)에 이미 저장된 데이터와의 임의의 필요한 블렌딩 동작들은 블렌더 스테이지("블렌드(BLEND)")(317)에 의해 수행되고, 이어서 블렌딩된 데이터는 타일 버퍼(318)에 기록된다. 대안적으로, 블렌딩이 요구되지 않는 경우, 블렌더 스테이지("블렌드")(317)는 출력 데이터를 타일 버퍼(318)에 직접 기록할 수 있다.
워프 상태 저장소(315)에 저장된 셰이딩 레이트 정보는 블렌더 스테이지(317)에 의한 데이터의 이러한 기록을 제어하기 위해 판독되고 사용된다. 예를 들어, 1x1 셰이딩 레이트의 경우, 단일 세트의 출력 데이터 값들이 (단지) 단일 미세 픽셀에 대응하는 타일 버퍼(318) 내의 하나 이상의 샘플링 포인트들에 기록될 것이다. 더 거친 셰이딩 레이트의 경우, 단일 세트의 출력 데이터 값들은 복수의 미세 픽셀들의 블록에 대응하는 타일 버퍼(318) 내의 하나 이상의 샘플링 포인트들에 기록될 것이다. 예를 들어, 1x2 셰이딩 레이트의 경우, 단일 세트의 출력 데이터 값들은 1x2 미세 픽셀들의 블록에 대응하는 타일 버퍼(318) 내의 하나 이상의 샘플링 포인트들에 기록될 것이다. 다른 셰이딩 레이트들은 대응하는 방식으로 취급될 것이다.
따라서, (블렌딩된) 출력 데이터(값들)는 타일 버퍼(318)에 기록되는데, 타일 버퍼(318)로부터 이들은, 예를 들어, 디스플레이를 위한 프레임 버퍼로 출력될 수 있다. 출력 Z 깊이 값들은 또한 타일 버퍼(318) 내의 Z-버퍼에 적절하게 기록된다.
실행 엔진("EE")(314)은 메시지(들)를 전송함으로써 하나 이상의 슬레이브 유닛들(예를 들어, 가변 보간 스테이지("VAR")(316), 텍스처 유닛, 및 블렌더("블렌드")(317)와 같은)과 통신하기 위해 실행 엔진("EE")(314)에 의해 사용될 수 있는 메시지 블록을 포함할 수 있다. 예를 들어, 실행 엔진("EE")(314)이 셰이더 프로그램에서 가변 보간 명령어를 실행할 때, 실행 엔진("EE")(314)은 가변 보간 스테이지("VAR")(316)로 전송되는 메시지를 생성하도록 메시지 블록에 지시할 수 있다. 가변 레이트 셰이딩을 수행할 때, 메시지 블록은 워프 상태 저장소(315)로부터 셰이딩 레이트를 판독할 것이며, 이는 워프(스레드 그룹)가 스포닝(spawning)될 때 워프 관리자(313)에 의해 준비된다. 이어서, 셰이딩 레이트는 적절한 대로 가변 보간 스테이지("VAR")(316) 및/또는 블렌더(317)에 공급된다.
다운샘플링이 사용되고 있는 경우, 타일 버퍼(318)로부터의 데이터의 출력은, 다운샘플링(멀티샘플 리졸브) 기록 유닛(도시되지 않음)에 입력되고 그리고 그 뒤에 메모리(5) 내의 디스플레이 디바이스의 프레임 버퍼와 같은 외부 메모리 출력 버퍼로 출력(다시 기록)되는 타일 버퍼 데이터를 포함할 수 있다. 디스플레이 디바이스는, 예를 들어, 컴퓨터 모니터 또는 프린터와 같은 픽셀들의 어레이를 포함하는 디스플레이를 포함할 수 있다. 이 경우, 다운샘플링 및 기록 유닛은 출력 버퍼로 출력하기 위한 출력 값들(픽셀들)을 생성하기 위해, 타일 버퍼(318)에 저장된 데이터를 출력 버퍼(디바이스)에 대한 적절한 해상도로 다운샘플링한다(즉, 출력 디바이스의 픽셀들에 대응하는 픽셀 데이터의 어레이가 생성되도록).
일단 렌더 출력의 타일이 프로세싱되고 그의 데이터가 저장을 위해 메인 메모리(5)로(예를 들어, 메인 메모리(5) 내의 프레임 버퍼로) 내보내지면, 이어서, 전체 렌더 출력(예를 들어, 디스플레이될 프레임(이미지))을 생성하기 위해 충분한 타일들이 프로세싱될 때까지, 다음 타일이 프로세싱되는 등이다. 이어서, 프로세스는 다음 렌더 출력(예를 들어, 프레임)에 대해 반복되는 등이다.
물론, 그래픽 프로세싱 파이프라인(300)에 대한 다른 배열들이 가능할 것이다.
본 실시예에서, 애플리케이션(2)이 커맨드들 및 데이터를 드라이버(4)에 제공하는 것의 일부로서, 애플리케이션(2)은 깊이-기반 셰이딩 레이트가 사용되어야 함을 나타내고, 사용되어야 하는 특정 셰이딩 레이트(들)를 나타내는 룩업 테이블의 형태로 정보를 제공한다. 룩업 테이블은, 복수의 Z 깊이 범위들 각각에 대해, 각자의 Z 깊이 범위 내의 Z 깊이를 갖는 단편들에 대해 사용되어야 하는 각자의 셰이딩 레이트를 나타낸다.
이어서, 드라이버(4)는 그래픽 프로세서(3)에 적절한 커맨드들 및 데이터를 전송하며, 이는 룩업 테이블을 나타내는 정보를 메모리(5)에 기록하는 것을 포함한다.
렌더 패스의 시작 시에, 그래픽 프로세서(3)는 이어서 메모리(5)로부터 룩업 테이블 정보를 판독하고, 대응하는 정보를 그래픽 프로세서(3)에 로컬인(즉, 이와 동일한 칩 상에 있는) 저장소, 예컨대 메모리에 저장하도록 동작한다. 렌더 패스 동안, 이어서 그래픽 프로세서(3)는 적절하게 그의 로컬 저장소로부터 룩업 테이블 정보에 액세스한다.
따라서, 그래픽 프로세서(3)는 외부 메모리(5)로부터 룩업 테이블 정보를 한 번만 판독하고, 이어서 깊이 셰이딩 레이트 룩업 스테이지(309)는 렌더 패스 동안 로컬 저장소로부터 그 정보에 여러 번 액세스할 수 있다. 이러한 방식으로 로컬로 룩업 테이블 정보를 저장하고 액세스하는 것은 레이턴시 및 대역폭 요건들을 감소시키고, 외부 메모리(5)로부터의 항상 룩업 테이블 정보에 액세스하는 것과 비교하여, 데이터 판독 오류(miss)를 감소시키거나 회피할 수 있다. 이러한 로컬 저장을 용이하게 하기 위해, 룩업 테이블 내의 엔트리들의 수(즉, 그의 크기)는 4, 8 또는 16과 같은, 2의 작은 거듭제곱으로 제한될 수 있다.
본 실시예에서, 단일 룩업 테이블만이 렌더 패스 당 애플리케이션(2)에 의해 특정된다. 그러나, 다른 실시예들에서, 복수의 룩업 테이블들은 렌더 패스에 대해, 예를 들어 복수의 뷰포트(viewport)들 각각에 대해 하나씩 특정된다. 이 경우, 단편에 대한 "깊이-당" 셰이딩 레이트는 그 단편이 연관되는 뷰포트에 대한 룩업 테이블을 사용하여 결정될 것이다.
본 실시예에서, 룩업 테이블은 Z near 내지 Z far의 범위 내에 속하는 Z 깊이들에 사용되어야 하는 셰이딩 레이트(들)를 특정한다. 최소 및 최대 깊이들, Z nearZ far는 예를 들어, 렌더링되고 있는 뷰 절두체의 근거리 및 원거리 평면들의 깊이들에 각각 대응할 수 있다.
1x1 셰이딩 레이트는, 예컨대 깊이 테이블의 범위 밖의 깊이에 대한 셰이딩 레이트가 요청되는 경우, 또는 "Inf" 또는 "NaN" 결과가 반환되는 경우에 디폴트로 될 수 있다.
범위 Z near 내지 Z far는 동일한 하위-범위들로 분할되고, 셰이딩 레이트는 룩업 테이블에서 각각의 그러한 하위-범위에 대해 특정된다. 깊이 범위를 동일한 하위-범위들로 분할하는 것은 깊이 하위-범위들의 최소치들 및 최대치들이 명시적으로 특정될 필요성을 회피하여, 룩업 테이블을 특정하는 데 요구되는 데이터의 양을 감소시킨다.
더욱이, 이러한 배열은 룩업 테이블에 대한 특히 빠르고 효율적인 액세스를 용이하게 할 수 있다. 특히, 이 경우, N개의 엔트리들을 갖는 룩업 테이블 내로의 인덱스, i (= 0, 1, …, N-1)는 다음을 계산하고:
Figure pat00002
(1)
이어서 가장 가까운 정수로 반내림함으로써 깊이 Z에 대해 결정될 수 있다. 수학식 (1)은 하기 형태로 재배열될 수 있다:
Figure pat00003
(2)
여기서 A = 1/(Z far-Z near) 이고 B = Z near/(Z far-Z near).
본 출원인은 수학식 (2)에 따른 인덱스 결정 동작이 숫자의 부동 소수점 표현으로부터 숫자의 부호 없는 정수 표현으로 변환하기 위한 동작과 본질적으로 동등하고, 따라서 특히 효율적인 방식으로 계산될 수 있음을 인식하였다. 특히, 이 동작은 FMA(fused multiply-add) 유닛에 의해 하드웨어에서 효율적으로 계산될 수 있다.
예를 들어, 하기의 의사 코드들은 인덱스가 본 실시예에 따라 결정되는 방법을 예시한다.
F32 depth; // 거친 픽셀의 깊이
F32 Znear; // 근거리 평면의 깊이
F32 Zfar; // 원거리 평면의 깊이
U32 size; // 깊이 테이블의 크기의 Log2
F32 range = Zfar - Znear; // 깊이 테이블의 깊이 범위
F32 A = recip(range) // 깊이 범위의 역수
F32 B = Znear * A; // 깊이 범위로 나눈 최소 깊이
U32 idx = (depth * A - B) * pow(2,-149+size); // 룩업 테이블 내로의 부호 없는 정수 인덱스
여기서, 거친 픽셀(단편)의 깊이, "깊이"는 Z 깊이 및 스텐실 테스트 스테이지("ZS")(308)에 의해 32 비트 부동 소수점 수로서 제공된다. 뷰 절두체의 근거리 및 원거리 평면들의 깊이들은 적절한 디스크립터로부터의 32 비트 부동 소수점 수들로서 얻어진다. 깊이 테이블의 크기는 2의 거듭제곱의 지수의 면에서 크기를 표현하는 32 비트 부호 없는 정수로서 표현된다.
이어서, 값들 "범위", "A" 및 "B"가 계산된다. 이들 값은 프리미티브 깊이에 의존하지 않기 때문에, 이들은 각각의 뷰포트에 대해 일정하다. 이와 같이, 이들은 렌더 패스의 시작에서 한번 계산되고, 로컬로 저장되고, 하나 이상의 후속 인덱스 결정 동작들 각각에서 사용된다.
특히, 본 실시예에서, 상수들 "범위", "A" 및 "B"는 시작 단계로서 작은 마이크로-코드 시퀀스로서 FMA 유닛에 의해 계산된다. 이는 감산 동작을 수행하는 FMA 유닛에 의해 먼저 계산되는 값 "범위"를 수반한다. 이어서, "A"는, FMA가 뉴턴-라프슨 반복(Newton-Raphson iteration)을 사용하여 이전 결과("범위")의 역수를 결정하는 것에 의해 계산된다. 이어서, "B"는, FMA가 이전 결과("A")를 "Znear"에 대한 값과 곱하는 것에 의해 계산된다.
이어서, 인덱스 "idx"는 이전에 계산된 상수들을 사용하여 단일 FMA-스케일 동작으로서 FMA 유닛에 의해 계산된다. 특히, 항 (depth * A - B)는 FMA(fused multiply-add) 동작으로서 계산되고, 룩업 테이블 크기, 2^size에 의해 스케일링된다. 이어서, 인덱스 "idx"를 32 비트 부호 없는 정수로서 계산하는 것은 가장 가까운 정수로 반내림하는 효과를 갖는다.
여기서, 값 "-149"는 32 비트 부동 소수점 수의 최대 표현가능한 지수 범위뿐만 아니라 23 비트 가수의 범위를 고려하기 위해 부동 소수점으로부터 정수로의 변환에 사용된다. 이어서, 부동 소수점 계산에 의해 생성된 비트-패턴은 원하는 정수 표현이다.
도 5는 실시예에 따른 그래픽 프로세싱 파이프라인(300)을 동작시키는 방법을 도시한다. 도 5에 도시된 바와 같이, 단계(401)에서, 래스터화기(306)에 의해 생성된 단편(래스터화된 프리미티브)은 그래픽 프로세싱 파이프라인(300)의 Z 깊이 및 스텐실 테스트 스테이지("ZS")(308)에 의한 깊이 보간 동작을 받는다. 깊이 보간 동작은 단편에 대한 Z 깊이 값을 결정한다. 이러한 Z 깊이 값은 이어서, 단편에 대해 Z 깊이 테스트를 수행하기 위해 Z 깊이 및 스텐실 테스트 스테이지("ZS")(308)에 의해 사용될 수 있다.
단계(402)에서, (단편이 Z 깊이 테스트를 통과한다고 가정하면) 결정된 깊이 값은 그 깊이에 기초하여 단편이 셰이딩되어야 하는 셰이딩 레이트를 결정하기 위해 깊이 셰이딩 레이트 룩업 스테이지(309)에 의해 사용된다. 이는 결정된 깊이 값에 기초하여 깊이 룩업 테이블에서 이러한 "깊이 셰이딩 레이트"를 검색함으로써 행해진다.
단계(403)에서, 단편의 깊이에 기초하여 결정된 셰이딩 레이트는 다른 셰이딩 레이트 기준들에 기초하여 결정된 다른 셰이딩 레이트들과 셰이딩 레이트 조합기 스테이지(310)에 의해 조합되어, 단편이 그에 따라 셰이딩될 "조합된 셰이딩 레이트"를 생성한다.
단계(404)에서, 이러한 조합된 셰이딩 레이트는 워프 패킹 스테이지(312)에 의해 사용되어 스레드 그룹("워프")을 생성하는 프로세스를 통지하며, 이는 실행 엔진("EE")(314)에 의해 실행될 때 단편에 대한 출력 픽셀 데이터를 생성할 것이다.
예를 들어, 1x1 셰이딩 레이트의 경우, 워프 패킹 유닛(312)은 단편에 대해 단독으로 출력 픽셀 데이터를 생성할 스레드 그룹("워프") 내의 실행 스레드를 포함한다. 그러나, 본 실시예에서, 더 거친 셰이딩 레이트가 사용되고, 그에 따라 워프 패킹 스테이지(312)는 하나 이상의 다른 단편들과 함께 단편에 대한 출력 데이터를 생성할 스레드 그룹("워프") 내의 실행 스레드를 포함한다. 이 경우, 단편은, 사실상, 복수의 "미세 픽셀들"(단편들)을 표현하는 "거친 픽셀"로서 셰이딩될 것이다.
단계(405)에서, 거친 픽셀을 표현하는 실행 스레드는 거친 픽셀에 대한 출력 픽셀 데이터를 생성하기 위해 실행 엔진("EE")(314)에 의해 실행된다.
단계(406)에서, 생성된 픽셀 데이터는 거친 픽셀이 표현하는 각각의 미세 픽셀에 대하여 타일 버퍼(318)에 기록된다. 따라서, 동일한 픽셀 데이터가 복수의 미세 픽셀들에 대해 사용됨으로써, 이들 미세 픽셀에 대한 프로세싱 노력을 감소시킨다.
상기로부터, 본 명세서에 설명된 기술은, 적어도 그의 실시예들에서, 렌더 출력, 예컨대 디스플레이를 위한 프레임을 생성하는 데 요구되는 프로세싱이 감소될 수 있는 배열들을 제공한다는 것이 이해될 것이다. 이는, 적어도 본 명세서에 설명된 기술의 실시예들에서, 깊이에 기초하여 셰이딩 레이트를 결정함으로써 달성된다.
전술한 상세한 설명은 예시 및 설명의 목적으로 제시되었다. 이는 본 명세서에 설명된 기술을 개시된 정확한 형태로 망라하거나 제한하고자 하는 것이 아니다. 상기 교시를 고려하여 많은 수정 및 변형이 가능하다. 설명된 실시예들은 본 명세서에 설명된 기술의 원리들 및 그의 실제 응용들을 가장 잘 설명하기 위해 선택되어, 이에 의해, 통상의 기술자들이 본 명세서에 설명된 기술을, 다양한 실시예들에서 그리고 고려되는 특정 용도에 적합한 바와 같은 다양한 수정들로 가장 잘 활용할 수 있게 했다. 범주는 본 명세서에 첨부된 청구범위에 의해 한정되는 것으로 의도된다.

Claims (20)

  1. 상이한 셰이딩 레이트(shading rate)들을 사용하여 렌더 출력을 생성하기 위해 프리미티브(primitive)들을 렌더링하도록 동작가능한 렌더러(renderer)를 포함하는 그래픽 프로세서를 동작시키는 방법으로서, 상기 방법은:
    프리미티브를 렌더링할 때, 상기 프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 상기 프리미티브를 렌더링하기 위한 셰이딩 레이트를 결정하는 단계; 및
    상기 렌더러가, 상기 깊이 값에 기초하여 결정된 상기 셰이딩 레이트에 기초한 셰이딩 레이트를 사용하여 상기 프리미티브의 일부 또는 전부를 렌더링하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 그래픽 프로세서는 단편들을 생성하기 위해 프리미티브들을 래스터화하도록 구성된 래스터화기(rasteriser)를 포함하고; 상기 렌더러는 상기 래스터화기에 의해 생성된 단편들을 렌더링함으로써 프리미티브들을 렌더링하도록 동작가능하고; 상기 방법은:
    상기 래스터화기가 단편을 생성하기 위해 상기 프리미티브를 래스터화하는 단계를 포함하며;
    상기 셰이딩 레이트를 결정하는 단계는 상기 단편의 깊이 값에 기초하여 상기 셰이딩 레이트를 결정함으로써 수행되는, 방법.
  3. 제1항에 있어서, 깊이 테스트를 수행하기 위해 상기 깊이 값을 사용하는 단계를 포함하는, 방법.
  4. 제1항에 있어서, 상기 방법은:
    복수의 미리결정된 깊이들 또는 깊이 범위들 각각에 대한 셰이딩 레이트를 나타내는 정보를 제공하는 단계를 포함하며;
    상기 셰이딩 레이트를 결정하는 단계는 상기 깊이 값에 대응하는 상기 미리결정된 깊이 또는 깊이 범위에 대한 상기 정보에 의해 나타내어진 셰이딩 레이트를 결정함으로써 수행되는, 방법.
  5. 제4항에 있어서, 상기 그래픽 프로세서는 로컬 저장소를 포함하고, 상기 방법은,
    상기 그래픽 프로세서가 상기 로컬 저장소에 상기 정보를 저장하는 단계를 포함하며;
    상기 셰이딩 레이트를 결정하는 단계는 상기 로컬 저장소에 저장된 상기 정보를 사용하여 수행되는, 방법.
  6. 제4항에 있어서, 상기 정보는 데이터 요소들의 어레이를 포함하며, 각각의 데이터 요소는 각자의 미리결정된 깊이 또는 깊이 범위에 대한 셰이딩 레이트를 나타내고 각자의 인덱스 값과 연관되고;
    상기 셰이딩 레이트를 결정하는 단계는, 상기 깊이 값으로부터 인덱스 값을 결정하고 상기 결정된 인덱스 값과 연관된 상기 데이터 요소로부터 상기 셰이딩 레이트를 검색함으로써 수행되는, 방법.
  7. 제6항에 있어서, 상기 그래픽 프로세서는 FMA(fused multiply-add) 연산들을 수행하도록 동작가능한 하나 이상의 기능성 유닛들을 포함하고;
    상기 깊이 값으로부터 상기 인덱스 값을 결정하는 단계는, 상기 하나 이상의 기능성 유닛들 중 하나가 단일 FMA(fused multiply-add) 연산을 수행하는 것에 의해 수행되는, 방법.
  8. 제7항에 있어서, 상기 하나 이상의 기능성 유닛들 중 하나가 상기 단일 FMA(fused multiply-add) 연산에서 사용하기 위한 하나 이상의 상수들을 결정하는 단계를 포함하는, 방법.
  9. 제1항에 있어서, 상기 렌더러는 실행 스레드들을 실행하도록 동작가능한 프로그래밍가능 프로세싱 스테이지, 및 상기 프로그래밍가능 프로세싱 스테이지에 의한 실행을 위한 실행 스레드들을 포함하는 스레드 그룹들을 생성하도록 동작가능한 스레드 그룹 생성 스테이지를 포함하고; 상기 렌더러가 셰이딩 레이트를 사용하여 상기 프리미티브의 일부 또는 전부를 렌더링하는 단계는:
    상기 스레드 그룹 생성 스테이지가, 사용된 상기 셰이딩 레이트에 기초하여 상기 프로그래밍가능 프로세싱 스테이지에 의한 실행을 위한 실행 스레드들을 포함하는 스레드 그룹을 생성하는 단계; 및
    상기 프로그래밍가능 프로세싱 스테이지가 상기 스레드 그룹 내의 상기 실행 스레드들을 실행하는 단계를 포함하는, 방법.
  10. 제1항에 있어서, 상기 렌더러가 셰이딩 레이트를 사용하여 상기 프리미티브의 일부 또는 전부를 렌더링하는 단계는 상기 렌더러가 출력 렌더링된 데이터를 생성하는 단계를 포함하고; 상기 방법은:
    사용된 상기 셰이딩 레이트에 기초하여 상기 출력 렌더링된 데이터를 저장소에 기록하는 단계를 포함하는, 방법.
  11. 상이한 셰이딩 레이트들을 사용하여 렌더 출력을 생성하기 위해 프리미티브들을 렌더링하도록 동작가능한 렌더러 회로를 포함하는 그래픽 프로세서로서, 상기 그래픽 프로세서는:
    프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 상기 프리미티브를 렌더링하기 위한 셰이딩 레이트를 결정하도록 구성가능한 셰이딩 레이트 결정 회로를 추가로 포함하며;
    상기 렌더러 회로는 상기 셰이딩 레이트 결정 회로에 의한 상기 프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 결정된 셰이딩 레이트에 기초한 셰이딩 레이트를 사용하여 프리미티브의 일부 또는 전부를 렌더링하도록 구성되는, 그래픽 프로세서.
  12. 제11항에 있어서, 상기 그래픽 프로세서는 단편들을 생성하기 위해 프리미티브들을 래스터화하도록 구성된 래스터화기 회로를 포함하며;
    상기 렌더러 회로는 상기 래스터화기 회로에 의해 생성된 단편들을 렌더링함으로써 프리미티브들을 렌더링하도록 동작가능하고;
    상기 셰이딩 레이트 결정 회로는 상기 래스터화기 회로에 의해 프리미티브로부터 생성된 단편의 깊이 값에 기초하여 상기 프리미티브를 렌더링하기 위한 셰이딩 레이트를 결정하도록 구성되는, 그래픽 프로세서.
  13. 제11항에 있어서, 상기 그래픽 프로세서는 깊이 테스트를 수행하기 위해 깊이 값을 사용하도록 구성된 깊이 테스트 회로를 포함하며;
    상기 셰이딩 레이트 결정 회로는 깊이 테스트를 수행하기 위해 상기 깊이 테스트 회로에 의해 사용되는 깊이 값에 기초하여 셰이딩 레이트를 결정하도록 구성되는, 그래픽 프로세서.
  14. 제11항에 있어서, 상기 셰이딩 레이트 결정 회로는 복수의 미리결정된 깊이들 또는 깊이 범위들 각각에 대한 셰이딩 레이트를 나타내는 정보를 사용하여 셰이딩 레이트를 결정하도록 구성되는, 그래픽 프로세서.
  15. 제14항에 있어서, 상기 그래픽 프로세서는 로컬 저장소를 포함하고, 상기 정보는 상기 로컬 저장소에 저장되는, 그래픽 프로세서.
  16. 제14항에 있어서, 상기 정보는 데이터 요소들의 어레이를 포함하며, 각각의 데이터 요소는 각자의 미리결정된 깊이 또는 깊이 범위에 대한 셰이딩 레이트를 나타내고 각자의 인덱스 값과 연관되고;
    상기 셰이딩 레이트 결정 회로는, 상기 깊이 값으로부터 인덱스 값을 결정하고 상기 결정된 인덱스 값과 연관된 상기 데이터 요소로부터 상기 셰이딩 레이트를 검색함으로써 깊이 값에 기초하여 셰이딩 레이트를 결정하도록 구성되는, 그래픽 프로세서.
  17. 제16항에 있어서, 상기 셰이딩 레이트 결정 회로는 FMA(fused multiply-add) 연산들을 수행하도록 동작가능한 하나 이상의 기능성 유닛들을 포함하고;
    상기 셰이딩 레이트 결정 회로는, 상기 하나 이상의 기능성 유닛들 중 하나가 단일 FMA(fused multiply-add) 연산을 수행하는 것에 의해, 상기 깊이 값으로부터 인덱스 값을 결정하도록 구성되는, 그래픽 프로세서.
  18. 제17항에 있어서, 상기 셰이딩 레이트 결정 회로는, 상기 하나 이상의 기능성 유닛들 중 하나가 상기 단일 FMA(fused multiply-add) 연산에서 사용하기 위한 하나 이상의 상수들을 결정하는 것에 의해 인덱스 값을 결정하도록 구성되는, 그래픽 프로세서.
  19. 제11항에 있어서, 상기 렌더러 회로는 실행 스레드들을 실행하도록 동작가능한 프로그래밍가능 프로세싱 회로, 및 상기 프로그래밍가능 프로세싱 회로에 의한 실행을 위한 실행 스레드들을 포함하는 스레드 그룹들을 생성하도록 동작가능한 스레드 그룹 생성 회로를 포함하고;
    상기 렌더러 회로는:
    상기 스레드 그룹 생성 회로가, 사용된 상기 셰이딩 레이트에 기초하여 상기 프로그래밍가능 프로세싱 회로에 의한 실행을 위한 실행 스레드들을 포함하는 스레드 그룹을 생성하는 것; 및
    상기 프로그래밍가능 프로세싱 스테이지가 상기 스레드 그룹 내의 상기 실행 스레드들을 실행하는 것에 의해 셰이딩 레이트를 사용하여 프리미티브의 일부 또는 전부를 렌더링하도록 구성되는, 그래픽 프로세서.
  20. 소프트웨어 코드를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 소프트웨어 코드는 프로세서 상에서 실행될 때, 상이한 셰이딩 레이트들을 사용하여 렌더 출력을 생성하기 위해 프리미티브들을 렌더링하도록 동작가능한 렌더러를 포함하는 그래픽 프로세서를 동작시키는 방법을 수행하며; 상기 방법은:
    프리미티브를 렌더링할 때, 상기 프리미티브의 일부 또는 전부에 대한 깊이 값에 기초하여 상기 프리미티브를 렌더링하기 위한 셰이딩 레이트를 결정하는 단계; 및
    상기 렌더러가, 상기 깊이 값에 기초하여 결정된 상기 셰이딩 레이트에 기초한 셰이딩 레이트를 사용하여 상기 프리미티브의 일부 또는 전부를 렌더링하는 단계를 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020210072494A 2020-06-09 2021-06-04 그래픽 프로세싱 KR20210152952A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/897,160 2020-06-09
US16/897,160 US11250620B2 (en) 2020-06-09 2020-06-09 Graphics processing

Publications (1)

Publication Number Publication Date
KR20210152952A true KR20210152952A (ko) 2021-12-16

Family

ID=76838933

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210072494A KR20210152952A (ko) 2020-06-09 2021-06-04 그래픽 프로세싱

Country Status (4)

Country Link
US (1) US11250620B2 (ko)
KR (1) KR20210152952A (ko)
CN (1) CN113781289A (ko)
GB (1) GB2600203B (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11675785B2 (en) 2020-01-31 2023-06-13 Oracle International Corporation Dynamic asynchronous traversals for distributed graph queries
US11456946B2 (en) * 2020-06-11 2022-09-27 Oracle International Corporation Regular path queries (RPQS) for distributed graphs
EP4116932A1 (en) * 2021-06-30 2023-01-11 Imagination Technologies Limited Graphics processing system and method of rendering
GB2602528B (en) * 2021-06-30 2024-05-22 Imagination Tech Ltd Graphics processing system and method of rendering
WO2023115408A1 (zh) * 2021-12-22 2023-06-29 华为技术有限公司 图像处理装置和方法
CN116704075A (zh) * 2022-10-14 2023-09-05 荣耀终端有限公司 图像处理方法、设备及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9569886B2 (en) * 2013-12-19 2017-02-14 Intel Corporation Variable shading
US10147227B2 (en) * 2017-02-17 2018-12-04 Microsoft Technology Licensing, Llc Variable rate shading
US10338919B2 (en) * 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
GB2566487B (en) 2017-09-15 2020-12-16 Advanced Risc Mach Ltd Forward killing of threads corresponding to graphics fragments obscured by later graphics fragments

Also Published As

Publication number Publication date
CN113781289A (zh) 2021-12-10
GB2600203B (en) 2024-01-17
US20210383600A1 (en) 2021-12-09
GB202107934D0 (en) 2021-07-21
GB2600203A (en) 2022-04-27
US11250620B2 (en) 2022-02-15

Similar Documents

Publication Publication Date Title
KR102455696B1 (ko) 그래픽 처리 시스템
US11250620B2 (en) Graphics processing
US9947131B2 (en) Graphics processing system
US9747718B2 (en) System, method, and computer program product for performing object-space shading
US9754407B2 (en) System, method, and computer program product for shading using a dynamic object-space grid
KR102360519B1 (ko) 그래픽 처리
US10636213B2 (en) Graphics processing systems
US7982734B2 (en) Spatially-varying convolutions for rendering soft shadow effects
US10049486B2 (en) Sparse rasterization
US20230252713A1 (en) Vrs rate feedback
US7970237B2 (en) Spatially-varying convolutions for rendering glossy reflection effects
US11468630B2 (en) Rendering scenes using a combination of raytracing and rasterization
US9530241B2 (en) Clipping of graphics primitives
GB2525223A (en) Graphics processing systems
KR20180037838A (ko) 텍스쳐를 처리하는 방법 및 장치
US10062140B2 (en) Graphics processing systems
CN114902274A (zh) 混合分箱
US11908069B2 (en) Graphics processing
WO2022131949A1 (en) A device for performing a recursive rasterization
Antochi et al. A Flexible Simulator for Exploring Hardware Rasterizers
WO2009018487A1 (en) Spatially varying convolution for rendering effects