KR20210066727A - 그래픽 처리 시스템 - Google Patents

그래픽 처리 시스템 Download PDF

Info

Publication number
KR20210066727A
KR20210066727A KR1020200158414A KR20200158414A KR20210066727A KR 20210066727 A KR20210066727 A KR 20210066727A KR 1020200158414 A KR1020200158414 A KR 1020200158414A KR 20200158414 A KR20200158414 A KR 20200158414A KR 20210066727 A KR20210066727 A KR 20210066727A
Authority
KR
South Korea
Prior art keywords
data
primitive
memory
region
primitives
Prior art date
Application number
KR1020200158414A
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 KR20210066727A publication Critical patent/KR20210066727A/ko

Links

Images

Classifications

    • 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
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/51Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

그래픽 처리 시스템에서 그래픽 프리미티브들을 처리할 때, 렌더 출력은, 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들(40)로 분할되고; 렌더링될하 하나 이상의 프리미티브들의 세트들에 대해서, 상기 렌더 출력의 상기 복수의 구역들(40) 중 어느 구역에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지 판정되고; 상기 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역(40)마다, 상기 프리미티브(들)에 대한 지오메트리 데이터는, 상기 구역에 대한 프리미티브(들)를 렌더링하는데 사용되게 되는 상태 데이터의 표시와 함께 각각의 데이터 구조체(42)로 메모리에 저장되어, 렌더링될 상기 프리미티브(들)에 대한 상기 지오메트리 데이터는 상기 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역(40)마다 각각의 상이한 데이터 구조체(42)로 저장된다.

Description

그래픽 처리 시스템{GRAPHICS PROCESSING SYSTEMS}
여기서 설명된 기술은, 컴퓨터 그래픽 처리에 관한 것으로, 특히 출력의 렌더링시에 그래픽 프리미티브들의 처리에 관한 것이다.
통상, 그래픽 처리는, 먼저, 출력될 그래픽 처리(렌더) 출력, 이를테면 표시될 프레임을, 그래픽 처리 연산들이 보다 쉽게 실시되게 하는 다수의 유사한 기본 성분들(소위 "프리미티브들")로 분할함으로써 실시된다. 이 "프리미티브들"은, 보통, 단순한 다각형, 이를테면 삼각형들의 형태로 되어 있다.
이 스테이지에서는, 각 프리미티브가, 일 세트의 버텍스들로 규정되고 표현된다. 프리미티브용 각 버텍스는, 그것과 관련된 버텍스를 표현하는 일 세트의 데이터(이를테면, 위치, 색상, 텍스처 및 그 밖의 속성 데이터)를 갖는다. 그 후, 이 "버텍스 데이터"는, 예컨대, 그래픽 처리 시스템의 원하는 렌더 출력을 발생하기 위해서 버텍스가 관계되는 프리미티브(들)을 래스터화하고 렌더링할 때 사용된다.
주어진 출력, 예를 들면 그래픽 처리 시스템에서 생성하는 표시될 프레임에 대해서, 해당 출력을 위해 규정된 일 세트의 버텍스들이 존재하는 것이 전형적일 것이다. 그리고, 상기 출력을 위해 처리될 프리미티브들은, 그래픽 처리 출력이 생성되기 위한 상기 세트의 버텍스들에서 주어진 버텍스들을 포함하는 것으로서 나타내어질 것이다. 전형적으로, 출력 전체, 예를 들면, 생성될 프레임은, "드로우 콜들(draw calls)"이라고 하는 보다 작은 처리 단위로 분할된다. 각 드로우 콜은, 그것을 위해 규정된 각각의 세트의 버텍스들과, 그 버텍스들을 이용하는 일 세트의 프리미티브들을 갖는다.
일단 프리미티브들과 그들의 버텍스들이 생성되어 규정되었으면, 그들은 그래픽 처리 시스템에 의해 처리되어, 원하는 그래픽 처리 출력(렌더 타겟), 이를테면, 표시용 프레임을 생성할 수 있다. 이것은, 처리될 렌더 출력 영역과 관련된 샘플링 포인트들의 어레이의 어느 샘플링 포인트들이 프리미티브에 의해 커버되는지를 판정하는 것과, 그 후, 각 샘플링 포인트가 (예컨대, 그 색상 등의 면에서) 해당 샘플링 포인트에서 프리미티브를 표현해야 하는 모습을 결정하는 것을 수반하는 것이 기본이다. 이 프로세스들 각각을, 일반적으로 래스터화와 렌더링이라고 한다. (용어 "래스터화"는, 샘플 위치들로의 프리미티브 변환과 렌더링과의 양쪽을 의미하는데 사용되는 경우가 많다. 그렇지만, 여기서 "래스터화"는, 프리미티브 데이터를 샘플링 포인트 어드레스들만으로 변환하는 것을 말하는데 사용될 것이다.)
상기 래스터화 및 렌더링 프로세스들은, 처리중인 상기 프리미티브들의 버텍스들과 관련된 상기 버텍스 속성들을 이용한다. 이러한 연산을 용이하게 하기 위해서, 상기 주어진 그래픽 처리 출력(예를 들면, 드로우 콜)에 대해 규정된 상기 버텍스들의 속성들에 대해, 통상은 초기의 소위 "버텍스 셰이딩" 연산을 실시한 후, 그 프리미티브들을 래스터화 및 렌더링한다. 이 "버텍스 셰이딩" 연산은, 버텍스마다 상기 속성들을, 이후의 그래픽 처리 연산들을 위한 원하는 형태로 변형하도록 연산한다. 이것은, 예를 들면, 상기 그래픽 처리 시스템의 출력이 표시되게 되는 화면 공간에 대해 초기에 규정된 전역 또는 유저 공간으로부터 버텍스 위치 속성들을 변형하는 것을 포함하여도 된다.
이 때문에, 그래픽 처리 파이프라인은, 전형적으로, 상기 버텍스들에 대해 규정된 초기의 버텍스 속성 값들에 관해 버텍스 셰이딩 계산을 실행하여, 그래픽 처리 파이프라인의 이후의 처리 스테이지들에 사용하기 위한 원하는 세트의 출력 버텍스 속성들(즉, 적절하게는 "셰이딩된" 속성들)을 생성하는, 버텍스 셰이딩 스테이지(버텍스 셰이더)를 포함한다.
일단 상기 버텍스 속성들이 셰이딩되었다면, 상기 "셰이딩된" 속성들은, 나머지 그래픽 처리 파이프라인에서의 상기 버텍스들(및 이들과 관련되는 프리미티브들)을 처리할 때 사용된다.
그래픽 처리 파이프라인의 일 형태는, 소위 "타일 기반" 렌더링을 사용한다. 타일 기반 렌더링에서, 2차원 렌더 출력(즉, 렌더링 프로세스의 출력, 이를테면 표시될 출력 프레임)은, 보통 "타일들"이라고 하는 복수의 소형 영역(area) 구역들(regions)로서 렌더링된다. 이러한 배치에 있어서, 상기 렌더링 출력은, 전형적으로, 크기와 형상이 규칙적인 렌더링 타일들로 (영역에 의해) 분할된다(그들은 보통, 예컨대 정사각형들 또는 직사각형들이다). (통상, "타일링" 및 "타일 기반" 렌더링에 사용되는 그 밖의 용어들은, "청킹"(상기 렌더링 타일들을 "청크들"이라고 함) 및 "버킷" 렌더링을 포함한다. 이후, 편의상 "타일" 및 "타일링"을 사용하지만, 이 용어들은, 렌더 출력이 복수의 유사한 영역 구역들로서 렌더링되는 경우에 다른 및 동등한 용어들과 기술들 전부를 포함하는 것으로 한다는 것을 알아야 한다.)
타일 기반 그래픽 처리 파이프라인에서는, 상기 렌더 출력이 생성되기 위한 지오메트리(프리미티브들)를, 렌더 출력 영역의 구역들로 소트하여, 렌더링 타일마다 처리될 필요가 있는 지오메트리(프리미티브들)가 확인되게 한다. 이 소팅은, 주어진 렌더링 타일에 대해 처리될 필요가 있는 프리미티브들을 확인되게(하여, 예를 들면, 실제로 타일에 존재하지 않는 프리미티브들을 불필요하게 렌더링하는 것을 회피)한다. 소팅 프로세스는, 상기 렌더 출력의 구역들을 위해 렌더링될 프리미티브들의 목록들(일반적으로, "프리미티브 목록들"이라고 함)을 생성한다. 렌더 출력 구역들 전부를 위해 프리미티브 목록들을 준비하였다면, 각 렌더링 타일은, 상기 렌더링 타일을 위해 열거된 상기 프리미티브들을 래스터화 및 렌더링하여서 처리된다.
이 때문에, 렌더 출력 구역마다 프리미티브 목록들을 준비하는 프로세스는, 기본적으로, 주어진 렌더 출력 구역에 대해 렌더링되어야 하는 프리미티브들을 판정하는 것을 수반한다. 이 프로세스는, 통상, 당해 렌더 출력 구역과 교차하는(즉, 내부에 (적어도 일부) 보일) 프리미티브들을 (원하는 레벨의 정밀도로) 결정하고 나서, 그래픽 처리 시스템에서 차후 사용하기 위한 그 프리미티브들의 목록을 준비함으로써, 실시된다.
여기서, 프리미티브가 하나보다 많은 렌더 출력 구역에 들어가는 경우, 자주 있는 경우지만, 그것이 범위에 들어가는 구역마다 프리미티브 목록에 포함되는 것을 주목해야 한다. 프리미티브 목록이 준비되는 렌더 출력 구역은, 단일의 렌더링 타일, 또는 복수의 렌더링 타일들의 그룹 등일 수 있다.
실제로, 각 렌더 출력 구역은, 상기 구역에 포함(즉, 교차)되도록 발견되는 임의의 프리미티브가 놓인 빈(bin)(프리미티브 목록)을 갖는다고 생각될 수 있다(그리고, 이렇게 하여 구역별로 상기 프리미티브들을 소트하는 프로세스를 일반적으로 "비닝"이라고 함).
예를 들면 렌더링 타일 크기로 아래(최저 레벨)로 가는, 여러가지의 상이한 구역 크기들(계층의 레벨)을 사용하여, 계층적으로 상기 비닝을 구현하는 것이 알려져 있다. 그렇지만, 상기 비닝은, 원하는 대로, 다소 복잡한 방식으로 수행되어도 된다.
따라서, 타일 기반 처리 시스템에서는, 실제로, 처리될 그래픽 프리미티브들(및/또는 그 밖의 그래픽 엔티티들, 지오메트리 등)을, 렌더 출력이 소팅 목적을 위해 분할되어 있는 구역들로 소트하는 초기의 처리 패스(pass)가 존재할 것이다.
그 후, 상기 타일들은 따로따로 각기 렌더링되고 나서, 그 렌더링된 타일들은 재합성되어 완전한 렌더 출력(예: 표시용 프레임)을 제공한다. 타일에 대한 프리미티브의 렌더링은, 일반적으로, 프리미티브를 래스터화/렌더링 할 때 수행될 상기 연산들을 나타내는 상태 데이터뿐만 아니라 상기 프리미티브를 표현하는 일 세트의 지오메트리 데이터도 사용하여 수행된다.
타일 기반 렌더링 시스템에서, 이와 같이 하여, 상기 프리미티브 목록들은, 즉 어떤 프리미티브들이 해당 구역들/타일들에 대해 렌더링되어야 하는지를 지정함으로써, 상기 렌더 출력에서의 프리미티브들의 공간적 분포를 반영한다. 따라서, 상기 렌더 출력을 위한 지오메트리 데이터 전부는 메모리에 그 렌더 출력을 위한 데이터 구조체로 함께 저장되고, 타일을 렌더링하기 위한 해당하는 프리미티브 데이터는 상기 프리미티브 목록들을 참조하여 이 데이터 구조체로부터 얻어진다. 그 후, 임의의 상태 데이터는, 추가의 데이터 구조체로 저장된다.
출원인이 믿는 것은, 다른 향상된 그래픽 처리 시스템을 제공할 여유가 남아 있다는 것이다.
여기서 기재된 기술의 제1 실시예는, 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법을 포함하고, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고,
상기 방법은,
상기 렌더 출력을, 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할하는 단계; 및
처리되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
상기 렌더 출력의 상기 복수의 구역들 중 어느 구역에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하며;
상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 메모리에 저장하는 단계를 포함하여,
상기 지오메트리 데이터와 렌더링될 상기 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장된다.
여기서 기재된 기술의 제2 실시예는, 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 포함하고, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 그래픽 프로세서는:
처리되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
상기 렌더 출력이 렌더링 목적을 위해 분할되어 있는, 각기 상기 렌더 출력의 각각의 영역을 포함하는 복수의 구역들 중 어느 구역(들)에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하도록 구성되는, 프리미티브 소팅 회로; 및
일 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 상기 프리미티브 소팅 회로에 의해 판정되는 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 상기 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 상기 메모리에 저장하도록 구성되는, 프리미티브 데이터 저장회로를 포함하여,
상기 지오메트리 데이터와 렌더링될 일 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장된다.
여기서 기재된 기술에서, (예컨대, 표시될 프레임의 적어도 일부를 포함할 수도 있는) 상기 렌더 출력은, 각 구역이 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할된다. 그 후, 상기 렌더 출력을 위한 (일 실시예에서, 프리미티브마다 일 세트의 버텍스들로 초기에 규정되고 표현되는) 그래픽 프리미티브들은, 예를 들면 통상의 방식으로, (예컨대, 지오메트리 데이터가, 상기 프리미티브들의 각각에 대해 변형된 또는 "셰이딩된" 버텍스들의 그룹을 포함하여도 되고, 일 실시예에서는 포함하는) 상기 프리미티브들을 상기 그래픽 프로세서에 의해 래스터화/렌더링 하는 데 사용될 수 있는 형태로 관련된 지오메트리 데이터를 판정하기 위해서, 취득 및 처리된다.
상기 (예컨대, 변형된) 지오메트리 데이터가 (예컨대, 상기 그래픽 프로세서의 버텍스 셰이딩 회로로부터) 프리미티브에 대해 취득되어 있으면, 상기 렌더 출력의 어느 구역(들)에 대해 상기 프리미티브가 렌더링되어야 하는지를 판정한다. 이것은, 일 실시예에서, 상기 렌더 출력의 상기 구역들 중 어느 구역이 당해 상기 프리미티브에 의해 적어도 부분적으로 커버되는지를 체크함으로써, 행해진다.
그 후, 상기 프리미티브를 렌더링 하는 데 필요한 지오메트리 데이터는, 당해 프리미티브가 렌더링되게 되는 상기 렌더 출력의 상기 각각의 상이한 구역들의 각각에 대해 별개의 데이터 구조체로 메모리에 저장된다. 즉, 상기 지오메트리 데이터는, 특별한 렌더 출력 구역을 위해 렌더링될 필요가 있는 임의의 프리미티브들을 위한 상기 지오메트리 데이터가 해당 구역을 위한 관련된 데이터 구조체로 저장되어 있는 상태에서 "구역별"로 저장 및 구성된다.
따라서, 상기 렌더 출력의 복수의 상이한 구역들에 대해 프리미티브가 렌더링되어야 한다고 판정될 때, 상기 프리미티브용 상기 지오메트리 데이터는, 상기 프리미티브가 렌더링 되어야 한다고 판정되어 있는 상기 렌더 출력의 상기 구역들의 각각에 대해 각각의 상이한 데이터 구조체로 복제 및 저장된다.
또한, 상기 프리미티브를 래스터화 및/또는 렌더링 하는데 필요할 수도 있는 관련된 상태 (제어) 데이터의 표시는, 상기 각각의 데이터 구조체(들)로 저장된다. 이 상태 데이터는, 예를 들면, 복수의 프리미티브들의 그룹들, 예를 들면 드로우 콜마다 규정되어도( 당해 드로우 콜 등의 상기 그룹에서의 프리미티브들 전부에 의해 공유되고 그 프리미티브들 전부에 사용되어도) 된다. 따라서, 실시예들에 있어서, 프리미티브들의 그룹(예컨대, 드로우 콜)이 처리되게 수신될 때, (상기 그룹내의 상기 프리미티브들의 전부에 대해 공유되어도 되는) 상기 프리미티브들을 래스터화 및/또는 렌더링하기 위한 관련된 상태 데이터가 취득된다.
예를 들면, 프리미티브들의 그룹에 대해 공유되어도 되는 특별한 프리미티브용 상태 데이터의 표시들도, 일 실시예에서, 상기 관련된 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역마다, 필요한 경우, 관련된 상태 데이터의 상기 표시들이 복제되어 있는 상태에서 "구역별"로 저장 및 구성된다.
따라서, 상기 프리미티브를 표현하는 지오메트리 데이터의 형태의 '프리미티브 데이터'와 (상태 데이터가 예를 들면, 드로우 콜내에서 복수의 프리미티브들에 대해 공유되어도 되는) 상기 프리미티브를 래스터화 및/또는 렌더링 하기 위한 관련된 상태 데이터의 표시는, 상기와 같은 "구역별" 데이터 구조체로 저장된다. 여기서 기재된 기술에 의하면, 이와 같이 하여, 상기 렌더 출력은 렌더링을 위한 복수의 소형 영역 구역들로 분할되고, 상기 렌더 출력을 위해 상기 프리미티브들이 렌더링 되게 하는 프리미티브 데이터는 상기 상이한 렌더 출력 구역들과 관련된 각각의 데이터 구조체들로 메모리에 저장된다(그리고, 그 데이터 구조체들은, 상기 프리미티브 데이터가 상이한 렌더 출력 구역들에 대해 별도로 저장되도록 특별한 구역과만 관련된다).
이를테면, 단일의 프리미티브의 처리와 단일의 프리미티브와 관련된 프리미티브 데이터를 저장하는 것을 참조하여 여러가지의 실시예들을 기재하였지만, 이 단계들은 전형적으로, 렌더 출력을 생성할 때 렌더링되게 되는 복수의 프리미티브들에 대해 반복될 것이라는 것을 알 것이다. 상기 프리미티브들의 처리와, 상기 관련된 프리미티브 데이터를 저장하는 것은, 프리미티브마다 개별적으로 수행되어도 되거나, (예컨대, 프리미티브들의 메시/스트립을 포함하여도 되는) 일 세트의 복수의 프리미티브들은 함께 처리되어도 된다. 이에 관하여, 여러가지의 배치들이 가능할 것이다. 따라서, 일반적으로, 상기 처리는, 일 세트의 하나 이상의 프리미티브(들)를 처리하는 것을 포함할 수도 있다.
새로운 프리미티브 또는 일 세트의 복수의 프리미티브들이 처리되게 수신될 때, 일 실시예에서, 그 후, 이것은 상술한 것과 마찬가지로 처리되고, 상기 관련된 프리미티브 데이터는 상기 렌더 출력 구역(들) 중 어느 구역에 대해 상기 프리미티브(또는 상기 세트의 프리미티브들)가 적어도 부분적으로 포함된다고 판정되는지에 근거하여 메모리에서의 적절한 데이터 구조체(들)로 기록된다.
따라서, 복수의 이러한 데이터 구조체들이 생성되므로, 어떠한 시점에서, 상기 렌더 출력의 대응한 복수의 상이한 구역들과 관련되며 이 복수의 상이한 구역들을 위한 각각의 프리미티브 데이터를 갖는, 메모리에서의 복수의 데이터 구조체가 존재할 수도 있다.
상기 배치의 효과는, 프리미티브 데이터가 렌더 출력 구역들의 각각에 대해 별도로 저장될 수 있기(저장되기) 때문에, 그 후, (프리미티브 데이터가 저장되는) 렌더 출력 구역마다 각각의 세트들의 하나 이상의 프리미티브(들)가 상기 관련된 데이터 구조체로부터 판독될 수 있고 그 밖의 렌더 출력 구역들 중 어느 하나와 상관없이 상기 그래픽 프로세서에 의해 한층 더 처리될 수 있다는 것이다. 즉, 데이터가 저장되는 각 렌더 출력 구역은, 상기 렌더 출력 구역에 대한 각각의 데이터 구조체를 사용하여, 그 밖의 구역들과 상관없이 처리될 수 있다.
예를 들면, 특별한 구역에 대한 프리미티브 데이터가 메모리에 적절한 데이터 구조체로 기록되어 있으면, 그 후, 해당 데이터는, 어떠한 그 밖의 프리미티브들(또는 어떠한 그 밖의 구역들)의 처리상에서 반드시 기다려야 할 필요 없이 상기 프리미티브 데이터가 저장되는 해당 구역에 대한 프리미티브들을 렌더링하기 위해서 사용될 수 있다. 이것이 의미하는 것은, 상기 구역을 위해 렌더링되게 되는 상기 프리미티브들의 적어도 일부가, 비록 그 구역에 대해서도 렌더링될 필요가 있을 수도 있는 프리미티브들이 아직 처리되게 되지 않을지라도 '조기에' 렌더링되어도 되는(일부의 실시예들에서는 렌더링되는) 것이다.
이 때문에, 이 해결방법은, 렌더 출력 전체에 대한 지오메트리 데이터의 전부가 상기 프리미티브 목록들을 생성할 때 초기의 처리 패스 동안에 선행하여 처리되어야 하는 것이 전형적인 종래의 타일기반 렌더링 시스템과 대조적이다(왜냐하면, 그것은, 상기 지오메트리 전부가 주어진 타일에 대해 처리될 필요가 있는 지오메트리 전부가 알려질 상기 구역들로 소트되어 있기만 하면 되기 때문이다).
이에 따라, 이러한 타일 기반 렌더링 시스템에서, 상기 렌더 출력을 생성하기 위해 상기 타일들의 프리미티브들의 래스터화 및 렌더링은, 상기 지오메트리 등을 상기 구역들(예컨대, 타일들)로 소트하는 초기의 처리 전부가 완료되어 있고, 그래서, 실제로, 그 프리미티브 목록들로 소트하는 상기 프리미티브들의 초기의 처리가 완료되어 있을 때까지 "연기"된다면 행해질 수 있을 뿐이다.
따라서, 종래의 타일 기반 렌더링 시스템에서, 상기 렌더 출력에서 프리미티브들 전부에 대한 프리미티브 데이터는 전형적으로, 프리미티브들이 해당 타일들에 대해 렌더링될 필요가 있는 프리미티브 데이터 자체와 구분하는 것이 가능하지 않도록 함께 저장되고, 이것은, 상기 프리미티브들의 공간적 분포를 기술하는 부가의 데이터 구조체(즉, 프리미티브 목록들)를 참조하여서 행해질 수 있을 뿐이다.
그에 반해서, 여기서 기재된 기술에서, 상기 프리미티브 데이터는, 대신에, 상술한 것처럼 구역별로 구성되어 저장된다. 따라서, 별도의 데이터 구조체들은, 필요에 따라, 상기 구역들에 대해 저장될 필요가 있는 새로운 프리미티브 데이터가 생성되기 때문에 또한 생성될 때 상기 구역들의 각각에 대해 생성될 수 있고, 이때의 특별한 구역에 대한 데이터 구조체는 해당 구역(만)을 위한 프리미티브 데이터를 갖는다.
이에 대응하게, 프리미티브 데이터 등이 각각의 구역들을 위해 저장되고 각각의 구역들로서 구성되기 때문에, 상기 프리미티브들(예: 일 세트의 프리미티브 목록들)의 공간적 분포를 기술하는 별도의 데이터 구조체에 대해서는 필요하지 않다.
이것은, 이 때문에 동일한 프리미티브에 대한 데이터가 다수의 자리들에 저장되야 할 수도 있다, 프리미티브 데이터의 복사본은 프리미티브가 렌더링되게 될 필요가 있는 렌더 출력의 각각에 대한 각각의 데이터 구조체들로 저장되어야 한다(그리고, 실시예들에서는 저장된다)는 것을 의미한다는 것을 알 것이다. (종래의 타일 기반 해결방법에 있어서, 프리미티브마다 상기 프리미티브 데이터는, 프리미티브의 공간적 분포(지역성)가 프리미티브 목록들에 의해 지정된 것처럼, 한 번 저장되면 좋다.)
그렇지만, 이것은, 특별한 구역에 대해 (그것의 각각의 데이터 구조체로) 저장된 프리미티브 데이터가 사용된 후에 폐기될 수 있다는 것도 의미한다. 프리미티브 데이터가 상기 렌더 출력의 각각의 구역을 위한 별도의 데이터 구조체들로 구성되어 저장되어 있는 상태에서, 그에 따라서, 이렇게 상기 데이터를 저장하는 효과는, 특별한 구역에 대해 (그것의 각각의 데이터 구조체로) 저장되는 임의의 프리미티브 데이터가 반드시, 동일한 지역성을 갖도록(즉, 동일한 렌더 출력 구역과 관련되도록) 또한 동일한 "라이프 사이클"을 갖도록 보장될 수 있다는 것이다.
그러므로, 이것은, 특별한 구역에 대해 각각의 데이터 구조체로 저장된 임의의(및 모든) 프리미티브 데이터가, 동일한, 또는 나머지 중 어느 하나의, 렌더 출력 구역들의 나중의 렌더링에 영향을 미치지 않고 프리미티브 데이터를 사용하고 있으면, 폐기될 수 있는 것이 보증될 수 있다는 것을 의미한다.
이에 따라, 여기서 기재된 기술의 이점은, 상기 데이터 구조체(들) 중 어느 하나 이상에 저장된 상기 프리미티브 데이터가, 예를 들면, 처리하는 주어진 렌더 출력 단위(예, 드로우 콜)의 처리 동안에도, 이후의 프리미티브들이 처리될 때 새로운 데이터를 위한 필요한 대로 메모리 공간을 확보하기 위해서, 사용되고 나서 폐기될 수 있다는 것이다.
그러므로, 여기서 기재된 기술은, 한층 더 후술하듯이, 메모리 공간의 향상된(보다 효율적인) 사용을 위해 감안할 수도 있다. 특히, 지오메트리 데이터를 사용하여 상기 출력을 렌더링하기 위해 시작하기 위해 시작하기 전에 처리하는 전체 렌더 출력 단위에 대한 지오메트리 데이터 전부를 완료하기 위해 처리를 더 이상 대기할 필요가 없으므로, 필요에 따라, 보다 동적으로, 상기 지오메트리 데이터가 사용될 수 있고 관련된 메모리 공간이 재할당될 수 있다.
이를테면, 여기서 기재된 기술에 있어서, 상기 렌더링은 실제로, "부분적으로 연기된" 방식으로 수행되어도 되고, 상기 구역들 중 적어도 일부에 대한 상기 저장된 프리미티브 데이터는 처리되어 임의의 다른 데이터의 처리상에서 대기해야 하지 않고( 임의의 다른 저장된 데이터 및/또는 아직 처리되게 되지 않은 데이터와 상관 없이) (적어도 일부) 그 구역들을 렌더링하는데 사용될 수 있다.
여기서 기재된 기술에 따라 생성된 상기 렌더 출력은, 예를 들면, 표시용 프레임(의 적어도 일부)을 포함하여도 된다. 이를테면, 상기 렌더 출력은, (풀) 프레임이나, 상기 프레임을 위한, 일부의 다른 원하는 렌더링 단위, 예를 들면 드로우 콜을 포함하여도 된다. 그 후, 상기 렌더 출력은, 그 렌더 출력을 위한 하나 이상의 프리미티브(들)를 렌더링함으로써 생성된다. 그래픽 프로세서는, 예를 들면 통상적으로, 상기 프리미티브들을 렌더링할 때 관련된 상태와 지오메트리 데이터를 사용한다.
이를테면, 상기 프리미티브들은, 초기에, 일 세트의 버텍스들로 규정되어 표현되어도 된다. 프리미티브에 대한 각 버텍스는, 그와 관련된 상기 버텍스를 표현하는 일 세트의 데이터(이를테면, 위치, 색상, 텍스처 및 그 밖의 속성 데이터)를 갖는다.
따라서, 주어진 그래픽 처리 출력(예: 드로우 콜)을 위해 원래 규정된 상기 버텍스들의 속성들에 대해, 일 실시예에서는, 원래 규정된 버텍스마다의 속성들을 이후의 그래픽 처리 연산을 위한 원하는 형태로 변형하도록 연산하는 초기의 소위 "버텍스 셰이딩" 연산이 실시된다. 따라서, 상기 관련된 지오메트리 데이터를 생성하는 상기 프리미티브들의 초기의 처리는, 예를 들면, 그래픽 처리 시스템의 출력이 표시되게 되는 스크린 공간에 대해 초기에 규정된 전역 공간 또는 유저 공간으로부터 상기 원래 규정된 버텍스 위치 속성들을 변형하는 것을 포함할 수도 있다.
따라서, 일 실시예에서, 상기 프리미티브들의 초기의 처리는, 변형된 지오메트리 데이터를 생성하는 버텍스 셰이딩 단계를 포함한다. 따라서, 상기 렌더 출력 구역들에 대한 각각의 데이터 구조체(들)로 저장된 지오메트리 데이터는, 상기와 같은 변형된 지오메트리 데이터를 포함하여도 된다. 따라서, 실시예들에서, 상기 지오메트리 데이터는, 그래픽 프로세서(파이프라인)의 버텍스 셰이딩 스테이지로부터 취득된다.
그렇지만, 일반적으로, 그래픽 처리 시스템에서 전형적으로 또는 바람직하게 수행되어도 되는 임의의 다른 지오메트리 관련 처리는, 이 스테이지에서, 상기 프리미티브들을 래스터화 및 렌더링할 때 사용하는 데 적절한 형태로 (예: 변형된) 지오메트리 데이터와 상기 디스플레이에서의 상기 프리미티브들을 규정하는 그 밖의 상기 데이터를 생성하기 위해서, 수행되어도 된다.
프리미티브에 대한 상태 데이터는, 상기 프리미티브들의 처리를 위한 파라미터들, 예컨대, 프리미티브들을 래스터화/렌더링할 때 어느 연산을 수행할지를 지정하는 제어 데이터 등을 포함한다. 그래픽 프리미티브들을 래스터화/렌더링할 때 전형적으로 또는 바람직하게 사용되어도 되는 임의의 적절한 상태(제어) 정보는, 실시예들에서 사용되어도 된다(그리고 그의 표시들이 상술한 방식으로 저장되어도 된다). (여기서 기재된 기술에서는 표시들이 저장되는 상기 상태 데이터는 프리미티브를 래스터화 및/또는 렌더링하는 상태 데이터, 예컨대 처리될 렌더 출력과 관련된 샘플링 포인트들의 어레이의 샘플링 포인트들이 상기 프리미티브에 의해 커버되는 것을 판정하고 나서, 각 샘플링 포인트가 해당 샘플링 포인트에서 그 프리미티브를 표현해야 하는 모습을 판정하기 위해 래스터화 연산 및 렌더링 연산을 나타내는 상태 데이터이다는 것을 알 것이다. 한편, 예컨대, 버텍스 셰이딩이나 그 밖의 지오메트리 처리 연산을 나타내는 임의의 상태 데이터는, "구역별" 데이터 구조체들로 저장될 필요가 없다(왜냐하면, 그 지오메트리 상태 데이터가, 지오메트리 처리를 수행할 때 이미 사용되고 있기 때문이다). 따라서, 지오메트리 상태 데이터는, 원하는 지오메트리 처리가 수행되어 있고 지오메트리 데이터가 적절하게 "구역별" 데이터 구조체들로 소트되어 있은 후 폐기될 수 있다(일 실시예에서는 폐기된다).)
상술한 것처럼, 여기서 기재된 기술에 의하면, 상기 렌더 출력(예컨대, 프레임이나, 프레임 부분)은, 복수의 구역들로 분할된다. 일 실시예에서, 상기 렌더 출력은, 크기가 균일한 복수의, 예를 들면 직사각형(예: 정사각형) 구역들로 분할된다. 그렇지만, 물론 그 밖의 배치들도 가능할 것이다.
상기 구역들은, 원하는 대로 어떠한 크기도 가질 수도 있는 것이 일반적이다. 예를 들면, 일부의 실시예들에서, 각 구역은, 프래그먼트들의 32×32 또는 64×64 어레이에 해당하여도 된다(그래서, 그 구역들은 종래의 타일 기반 그래픽 처리 시스템을 위한 전형적 렌더링 타일 크기들보다 커도 된다는 것을 알 것이다). 그렇지만, 이것이 해당될 필요는 없다.
여기서 기재된 기술의 방식으로 프리미티브를 처리할 때, 프리미티브가 어느 구역들에 대해 렌더링될 필요가 있는지를 판정한다. 이것은, 예컨대, (상기 프리미티브들을 렌더링을 위해 그들의 각각의 구역들에 대해 비닝할 때 보다 많은 종래의 타일 기반 렌더링 해결방법으로 행해질 것처럼 유사한 방식으로) 상기 프리미티브와 상기 렌더 출력의 구역들과의 교차를 판정함으로써 행해져도 된다.
프리미티브가 렌더링되게 될 필요가 있는 구역마다, 데이터 구조체는 생성되어 메모리 공간에 저장되고, 프리미티브 데이터는, 필요한 대로, 각각의 구역(들)에 대한 데이터 구조체에 부가된다. 그러므로, 명백한 라이프 사이클과 그 데이터의 소유권을 갖는 상기 렌더 출력의 구역마다 독립적 데이터 구조체가 존재한다.
구역에 대한 데이터 구조체는, 임의의 적절한 방식으로 프리미티브 데이터를 저장하여도 된다. 이를테면, 그 데이터는, 직접 또는 간접적으로 저장되어도 되고, 원하는 대로, 압축 또는 비압축(가공하지 않은) 형태로 저장되어도 된다.
따라서, 상기 저장된 상태 데이터의 표시는, 상태 데이터 자체(의 일부 또는 전부)이어도 되고, 및/또는, 어디에나, 예를 들면 별도의 데이터 구조체 또는 구조체들로 저장되는 상태 데이터의 일부 또는 전부에 대한 레퍼런스, 예를 들면 포인터의 형태로 포함하여도 된다.
상술한 것처럼, 상기 상태 데이터의 일부 또는 전부는, 예를 들면, 상기 상태 데이터가 드로우 콜별로 규정되는 경우, 복수의 프리미티브간(또는 프리미티브들의 세트)에 "공유"되어도 된다. 따라서, 특별한 프리미티브(또는 프리미티브들의 세트)를 위해 저장되는 상태 데이터의 표시는, 관련된 상태 데이터를 공유하는 복수의 프리미티브들의 그룹(예컨대, 드로우 콜)에 대한 공유 레퍼런스이어도 된다. 그 경우에, "구역별" 데이터 구조체로 프리미티브 데이터를 저장하는 해당 상태 데이터와 관련된 프리미티브마다 상기 상태 데이터에 대한 레퍼런스를 복제하는 것이 필요하지 않다. 예를 들면, "구역별" 데이터 구조체로 프리미티브 데이터가 저장되게 되는 프리미티브에 대한 해당하는 관련된 상태 데이터에 대한 레퍼런스가 이미 상기 구역별 데이터 구조체로 저장되는 경우, 이 레퍼런스를 복제하는 것이 필요하지 않다(따라서, 실시예들에서, 이것은 행해지지 않는다).
일 실시예에서, 상기 프리미티브 데이터는, (새로운) 프리미티브 데이터가 적절한 데이터 구조체로 기록되는 것처럼 또한 기록될 때, 그 프리미티브의 오더링이 (프리미티브 드로우 순서가, 예를 들면, API에서 지정한 것처럼 보존되도록) 상기 데이터 구조체로 유지 관리되도록, 상기 프리미티브들이 처리를 위해 수신되는 순서로 상기 적절한 데이터 구조체(들)로 기록된다. 그러므로, 일 실시예에서 특별한 구역에 대한 데이터 구조체는, 그 구역에 대해 렌더링될 상기 프리미티브(들)의 순차적 목록을 포함한다.
프리미티브에 대한 데이터의 전부가 선행하는 프리미티브에 대한 데이터 후에 저장된 상태에서, 순차로 구역에 대한 프리미티브 데이터 전부를 (데이터 구조체의) 하나의 블록으로 저장하는 것이 가능할 것이지만, 실시예들에 있어서, 상기 지오메트리 데이터는, 상기 상태 데이터(즉, 또는 그의 표시자들)에 대한 상기 데이터 구조체의 상이한 구역에 저장된다.
예를 들면, 일 실시예에서, 상기 지오메트리 데이터는, 예를 들면 각각의 프리미티브마다, 상기 프리미티브들의 상기 (변형된) 버텍스 데이터뿐만 아니라 당해 상기 (또는 각) 프리미티브에 사용될 버텍스들을 확인하는 일 세트의 버텍스 색인들을 포함하여도 된다. 그 경우에, 일 실시예에서, 상기 프리미티브 색인들 및 상태 데이터(표시자들)는 상기 데이터 구조체의 제1 구역(제1 세트의 메모리 위치들/어드레스들)에 저장되고, 상기 버텍스 데이터는 상기 데이터 구조체의 상기 제1 구역과는 별도의 제2 구역(제2 세트의 메모리 위치들/어드레스들)에 저장된다.
이를테면, 상기 제1 구역은, 드로우 콜용 상태 데이터 표시 후, 해당 드로우 콜용 복수의 프리미티브들에 대한 색인들 후, (예컨대, 새로운 드로우 콜에 대한) 새로운 상태 데이터 표시 후, 프리미티브들용 색들의 또 하나의 시퀀스 등이 존재하도록, 그 프리미티브들에 대한 상태 데이터(표시자들)가 사이사이에 들어가게 된 색인들의 목록을 가질 수도 있고, 이때의 상기 제2 구역은 그 프리미티브들에 대한 상기 관련된 버텍스 데이터를 가진다. 상기 지오메트리 데이터가 당해 상기 렌더 출력 구역에 대한 프리미티브들에 사용될 상기 버텍스들을 확인하는 버텍스 색인들의 세트(들)를 포함하는 경우, 일 실시예에서, 당해 상기 렌더 출력 구역에 대한 상기 데이터 구조체로 표시될 상기 버텍스들은, 상기 구역별 데이터 구조체들의 독립성을 보장하기 위해 (전체적으로 상기 렌더 출력을 위한 일 세트의 버텍스들에 대해 색인이 만들어지는 것과는 대조적으로) 당해 상기 렌더 출력의 상기 구역에 대한 일 세트의 버텍스들내에 각각 색인이 만들어진다.
상기 색인들/상태 데이터는, 예를 들면, 제1 이용 가능한 메모리 위치로부터 색인들/상태 데이터의 목록이 감소하도록 위에서부터 기록되어도 된다. 한편, 상기 버텍스 데이터는, 최종 이용 가능한 메모리 위치로부터 증가하여도 된다.
그렇지만, 물론, 그 밖의 배치들도 가능할 것이다.
일 실시예에서, 구역(에 할당되게 되는 것이 이용 가능한)에 할당되는 상기 메모리 공간은, 상기 그래픽 프로세서에서 사용하기 위한 빈 메모리 공간의 적절한 푸울(pool)("힙(heap)")로부터의 메모리 공간을 포함한다.
따라서, 상기 푸울은, 각기 상기 렌더 출력의 구역에 대해 할당되는 것이 이용한 메모리 공간의 다수의 "블록들"을 포함하여도 된다. 따라서, 특별한 구역에 대한 데이터 구조체는, 메모리 공간의 일 세트의 하나 이상의 상기 블록(들)을 포함하여도 된다. 일부의 실시예들에서, 이들은, 메모리 공간의 고정된 크기의 블록들이다. 그렇지만, 이것이 해당될 필요가 없고, 또한 예를 들면, 메모리 블록의 크기가 가변적일 수도 있다고 생각된다.
메모리 공간의 블록이 특별한 구역에 대해 할당되어 있으면, 그 후, 상기 구역에 대한 임의의 프리미티브 데이터는, (적어도 상기 블록이 가득찰 때까지) 그 블록에 부가될 수 있다. 일 실시예에서, 이것은, 상기 색인들/상태 데이터가 (예를 들면, 상기 블록의 상부로부터 하향으로) 상기 블록의 일 단부로부터 기록되어 있고 상기 버텍스 데이터가 (예를 들면, 상기 블록의 단부로부터 상향으로) 상기 블록의 나머지 단부로부터 기록되어 있는 상태에서, 상술한 방식으로 행해진다.
블록이 가득찰 때, 빈 메모리 공간의 상기 푸울로부터 메모리 공간의 또 하나의 블록은 상기 구역에 대해 할당될 수 있고, 제1 블록의 단부부터 새로운 블록까지 가리키는 적절한 포인터는 생성될 수 있는 등 하여, 상기 구역에 대한 상기 프리미티브 데이터를 저장할 수 있다. 따라서, 특별한 구역에 대한 상기 데이터 구조체는, 링크된 세트의 메모리 블록들을 포함하여도 된다.
이 경우에, 렌더 출력 구역에 대한 데이터 구조체를 만드는 각 메모리 블록은, 실제로, 및 일 실시예에서, 상기 렌더 출력 구역에 대한 데이터 구조체 자신의 세트의 프리미티브들을 저장할 것이고, 특별한 상기 프리미티브 데이터에 있어서, 일 실시예에서는, 상기 렌더 출력 구역에 대한 상기 데이터 구조체로 저장되는 전체 세트의 프리미티브들내의 주어진 서브세트의 프리미티브들에 대해서, 지오메트리 데이터와 상기 관련된 상태 데이터에 대한 레퍼런스를 포함할 것이다. 일 실시예에서, 메모리 공간 자체의 각 블록은, 상기 렌더 출력 구역에 대한 상기 데이터 구조체의 나머지 메모리 블록들과 상관없이 처리될 수 있는(또한, 이에 따라 그 자신의 독립적 라이프 사이클을 갖는) "독립적" 세트의 데이터를 포함한다.
따라서, 예를 들면, 상기 지오메트리 데이터가 당해 상기 렌더 출력 구역에 대한 프리미티브들에 사용될 상기 버텍스들을 확인하는 버텍스 색인들의 세트(들)를 포함하는 경우, 일 실시예에서, 당해 상기 렌더 출력 구역에 대한 데이터 구조체로 나타낼 상기 버텍스들은, 각각, 당해 상기 렌더 출력의 상기 구역뿐만 아니라 메모리 공간의 각 블록에 대해서도 일 세트의 버텍스들내에 색인이 만들어진다. 그렇지만, 이것은, 전체적으로 특별한 구역에 대한 상기 데이터 구조체가 그 자신의 독립적 라이프 사이클을 갖는 한은 필요하지 않다.
일 실시예에서, 상기 메모리 공간내의 메모리 공간의 (렌더 출력 구역들을 위한) 프리미티브 데이터에의 할당은, 먼저 구역을 위한 메모리 공간의 블록을 할당하고 나서, 상기 블록이 가득찰 때까지(그 때에, 여전히 상기 메모리 공간 푸울에 공간이 있을 경우, 추가의 블록이 할당되고 나서, 상기 메모리 공간 푸울에 공간이 더 없을 때까지, 계속해서 프리미티브 데이터로 채워진다) 해당 블록내의 공간을 해당 구역내에 속한다고 판정되는(또한, 이 때문에, 그 구역에 대해 렌더링되어야 하는) 개별적 프리미티브들에 할당함으로써, 수행된다.
따라서, 실시예들에서, 상기 메모리 공간 푸울은 복수의 메모리 블록들을 포함하고, 구역에 대한 데이터 구조체를 생성하는 것은: 상기 제1 구역에 대한 제1 메모리 블록을 할당하고 상기 제1 메모리 블록이 가득찰 때까지 상기 구역에 대한 프리미티브 데이터를 상기 제1 메모리 블록에 부가하는 것; 및 상기 제1 메모리 블록이 가득찰 때, 상기 구역에 대한 제2 메모리 블록을 할당하고, 상기 데이터 구조체가 일 세트의 링크된 메모리 블록들을 포함하도록 상기 제1 및 제2 메모리 블록들을 링크시키는 것을, 포함한다. 그 후, 이것은, 일 실시예에서, 상기 제2 메모리 블록이 가득차지면/상기 제2 메모리 블록이 가득차질 때 반복되고, 이때 제3 메모리 블록은 상기 제2 메모리 블록에 할당되고 링크되는 등 한다.
이에 대응하게, 상기 프리미티브 데이터 저장 회로는, 구역에 대한 제1 메모리 블록을 할당하고 상기 제1 메모리 블록이 가득찰 때까지 상기 구역에 대한 프리미티브 데이터를 상기 제1 메모리 블록에 부가하고; 및 상기 제1 메모리 블록이 가득찰 때, 상기 구역에 대한 제2 메모리 블록을 할당하고, 상기 데이터 구조체가 일 세트의 링크된 메모리 블록들을 포함하도록 상기 제1 및 제2 메모리 블록들을 링크시킴으로써, 상기 구역에 대한 데이터 구조체를 생성하도록 구성된다.
상기 메모리 푸울로부터의 각 블록은, 일 실시예에서 동일한 크기이고, 일 실시예에서 항상 캐시 라인들의 정수(예를 들면, 64바이트 캐시 라인들의 정수)이도록 구성된다. 이것은, 각기 새로운 블록의 시작이 캐시라인 정렬될 것이라는 것을 의미한다. 이러한 배치는, 예를 들면, 구역마다 저장되는 상기 프리미티브 데이터에 대한 완전한 캐시 라인들을 사용하는 것을 가능하게 함으로써, 보다 효율적인 메모리 액세스들을 가능하게 할 수도 있다.
따라서, 상기 메모리 공간은, 상기 상이한 구역들에 대해 할당되어 있는 "액티브" 메모리 블록들의 다수의 목록들뿐만 아니라 아직 할당되어 있지 않은 "프리(free)" 메모리 블록들의 목록에 (동적으로) 분할되어도 된다. 블록들이 할당되므로, 그들은, 그 후, 상기 프리 목록으로부터 제거되어 상기 관련된 구역에 대한 상기 액티브 목록에 부가된다. 이에 대응하게, 액티브 블록에서의 상기 데이터가 사용된 후, 그 데이터는 폐기될 수 있고, 그 블록은 재할당을 위해 이용 가능하게 되고, 상기 프리 목록에 역으로 이동될 수 있다.
예를 들면, 출원인들이 인식한 것은, 일부의 경우에 이용 가능한 메모리 공간이, 상기 렌더 출력을 위해 생성될 프리미티브 데이터의 전부를 저장하기에 충분히 클 수도 있지만(그 프리미티브 데이터 전체는 각종 데이터 구조체들로 순서적으로 기록되고 나서, 상기 데이터의 전부가 처리되어 있은 후에만 (예를 들면, 필요에 따라, 래스터화/렌더링을 위해) 상기 그래픽 프로세서의 다음 스테이지에 건네질 수도 있도록 한다), 그 밖의 경우에는, 그 때문에 새로운 데이터가 부가되어 메모리 공간이 다 사용될 때 가득차질 수 있는 상기 상이한 렌더 출력 구역들에 대한 상기 데이터 구조체들을 위해 이용 가능한 특정한, 고정된 양의 메모리만이 존재하여도 된다(그리고, 실시예들에서 이것이 해당되는 것이다).
이용 가능한 메모리 공간이 충분히 크다면, 여기서 기재된 기술은, 완전히 "연기된" 렌더링 프로세스를 수행하는 데 사용되어도 된다.
이것이, 예를 들면, 상기 프리미티브 데이터가 메인(시스템) 메모리(예를 들면, DRAM)의 일부에 저장될 때, 해당되는 것일 수도 있다. 그 경우에, 상기 메모리 공간은, 부가의 스토리지가 필요하기 때문에 또한 필요할 때 시간상 증가할 수도 있다. 따라서, 일부의 실시예들에서, 상기 프리미티브 데이터는, 프리미티브들의 전부가 처리되어 있을 때까지 메모리에 상기와 같은 데이터 구조체들로 계속 기록되어도 된다.
그렇지만, 그 밖의 경우에, 상기 이용 가능한 메모리는, 새로운 데이터가 부가되어 메모리 공간이 다 사용될 때 가득차질 수도 있다. 즉, 일부의 실시예들에서, 프리미티브 데이터에 대해 할당되게 이용 가능한 메모리 공간의 양은, 전체 렌더 출력 처리 단위에 대해 생성될 상기 프리미티브 데이터의 전부를 저장하는 데 요구될(예상될) 메모리의 양보다 적다.
예를 들면, 이것은, 상기 메모리가 SRAM의 전용의 고정된 사용량 부분을 포함하는 경우나, 적절한 로컬 캐시 시스템에서 상기 그래픽 프로세서에 보다 국소적으로 상기 프리미티브 데이터를 저장하는 것이 바람직한 경우이기도 하다.
실제로, 여기서 기재된 기술의 이점은, 프리미티브가 구역에 대해 렌더링되게 된다고 판정될 때 "요구에 따라서" 구역들을 위해 메모리 공간이 할당될 수 있고 일 실시예에서는 할당되기 때문에, 보다 작은 양의 메모리 공간은, 비교하여, 예를 들면 전체 렌더 출력을 위한 프리미티브 데이터가 이 데이터 중에서 어느 하나가 사용될 수 있기 전에 저장되어야 하는 보다 많은 종래의 타일 기반 배치들과 비교하여, 프리미티브 데이터를 저장하기 위해 확보될 수 있다는 것이다.
예를 들면, 현대의 타일 기반 그래픽 처리 시스템들에서, 상기 프리미티브(지오메트리) 데이터는, 점점 더, 너무 커서 상기 그래픽 프로세서에 국소적으로 효과적으로 캐시될 수 없다. 이에 반해서, 여기서 기재된 기술에서, 메모리 공간은 동적으로 할당될 수 있고, 그 후, 데이터 구조체들이 다 사용될 때 재할당될 수 있고, 그들의 관련된 메모리 공간은 새로운 데이터를 위해 비워진다. 이에 따라 상대적으로 보다 작은 양의 메모리 공간을 사용할 수 있어, 그 프리미티브 데이터의 보다 효과적인 로컬 캐싱을 가능하게 하여, 프리미티브 데이터의 스루풋을 유지 관리할 수 있다.
달리 말하면, 여기서 기재된 기술은, 임의의 주어진 시간에 상기 메모리 공간에 저장될 필요가 있는 "진행중(in flight)" 데이터의 양을 감소시키는 데 도움이 될 수도 있다. 이어서, 이것은, 이용 가능한 메모리 공간의 향상된(보다 효율적인) 사용, 및/또는 파워나 성능의 향상을 가능하게 할 수도 있다.
따라서, 여기서 설명된 기술은, 다양한 (크기가) 상이한 메모리 시스템을 사용하여 구현될 수 있는 것이 이롭고, 각 경우에 파워와 성능상 각 종 최적화를 고려할 수도 있다. 이 때문에, 여기서 기재된 기술의 이득은, 그 기술이 다양한 메모리 유형들(예컨대, DRAM, SRAM, 캐시 등)과 함께 사용될 수 있는 크게 확장 가능한 해결방법을 제공한다는 것이다.
따라서, 특별한 구역과 관련된 프리미티브(또는 복수의 프리미티브들의 세트)를 위한 새로운 프리미티브 데이터가 메모리에 기록되게 될 때, 일 실시예에서는, 먼저 메모리 공간(데이터 구조체)이 상기 구역에 대해 이미 할당되어 있는지를 판정한다. 이미 메모리에 구역에 대한 데이터 구조체가 존재하도록, 메모리 공간이 이미 상기 구역에 대해 할당되어 있으면, 그 후, 상기 프리미티브 데이터는, 상기 구역에 대해 상기 할당된 메모리 공간에서의 적절한 데이터 구조체에 부가될 수 있다. 일 실시예에서, 상기 데이터 구조체는, 다수의 메모리 블록들을 포함한다. 그 후, 현재의 메모리 블록이 가득찰 때, 새로운 빈 메모리 블록이 할당되어 상기 데이터 구조체에 링크될 수 있다.
한편, 메모리 공간이 해당 구역에 대해 아직 할당되어 있지 않으면(그리고 데이터 구조체가 아직 존재하지 않으면), 메모리 공간이 상기 구역에 대해 할당될 수 있고, 상기 프리미티브에 대한 지오메트리(그리고 상태(표시자))를 부가할 수 있게 상기 구역에 대한 새로운 데이터 구조체가 생성될 수 있다. 일 실시예에서, 이것은, 당해 상기 구역을 위한 메모리 공간의 빈 블록을 할당함으로써 행해진다.
따라서, 실시예들에서, 상기 프리미티브 데이터를 구역에 대한 각각의 데이터 구조체로 저장하는 상기 단계는: 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재하는지를 (예를 들면, 상기 그래픽 프로세서의 상기 프리미티브 데이터 저장회로에 의해) 판정하는 것과, 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재할 때 상기 프리미티브 데이터를 기존의 데이터 구조체에 부가하는 것을 포함하는 반면에, 상기 구역에 대한 데이터 구조체가 존재하지 않는 경우에는, 상기 방법은 상기 구역에 대한 새로운 데이터 구조체를 생성하는 것을, 포함한다.
이에 대응하게, 상기 프리미티브 데이터 저장회로는, 상기 프리미티브 데이터를 구역에 대한 각각의 데이터 구조체로 저장할 때: 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재하는지를 판정하고, 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재할 때 상기 프리미티브 데이터를 기존의 데이터 구조체에 부가하도록 구성되어도 되는 반면에, 상기 구역에 대한 데이터 구조체가 존재하지 않는 경우에는, 상기 프리미티브 데이터 저장회로는 상기 구역에 대한 새로운 데이터 구조체를 생성하도록 구성된다.
이 경우들 중 어느 하나의 경우에 있어서, 새로운 메모리 블록들은, (기존의 구역 데이터 구조체의 용량을 확장할지 또는 새로운 데이터 구조체를 시작할지) 프리미티브 데이터를 저장하기 위해 주기적으로 할당될 필요가 있을 것이라는 것을 알 것이다. 이 때문에, 상기 이용 가능한 메모리의 푸울은, (예를 들면, 메모리 블록들이 할당되고 '프리(free)' 목록으로부터 '액티브' 목록으로 이동되므로) 데이터 구조체들이 생성 및 저장되므로 순차적으로 다 사용될 것이다.
이것이 사실일 경우, 출원인이 인식한 것은, 상기 이용 가능한 메모리 푸울이 가득차지고 있는 중이라고(또는 거의 가득찼다고) 판정될 때, 메모리에서 상기(기존의) 데이터 구조체들의 적어도 일부를 "플러시(flush)"하는 것이 바람직할 수도 있다는 것이다. 예를 들면, 메모리에 기록될 (새로운 구역에 대한, 또는 데이터 구조체가 이미 메모리에 존재하는 구역에 대한) 새로운 프리미티브 데이터가 존재하지만, 그 메모리 공간이 가득찰 때(또는 거의 가득찰 때), 현재 메모리에 저장되는 상기 데이터의 일부를 사용(및 플러시)하기 위해 시작하는, 예를 들면 프리미티브 데이터의 계속된 스루풋을 고려하는 것이 바람직할 수도 있다.
즉, 메모리가 이용 가능하지 않거나, 역치량 미만의 메모리가 이용 가능하다고 판정될 때, 능동 블록들의 일부는, 상기 그래픽 프로세서에서 사용하기 위해 메모리로부터 플러시될 수 있고(일 실시예에서는 플러시 되고) 나서, 새로운 데이터를 위한 메모리 공간을 확보하도록 폐기될 수 있다. 예를 들면, 예를 들면, 이는, (예를 들면, 소정의) 역치미만의 메모리 공간, 예를 들면, 역치미만의 수의 빈 메모리 블록들이 존재한다고 판정될 때, 행해져도 된다.
여기서 기재된 기술은 이 연산을 가능하게 하는데, 그 이유는, 하나 이상의 구역들에 대해 데이터가 선택적으로(또, 독립적으로) 플러시될 수 있도록 상기 프리미티브 데이터가 구역별로 저장되기 때문이고, 이 데이터가 사용되고 나서, 이후의 어떠한 연산들에도 영향을 미치지 않고 메모리 공간을 확보하게 폐기될 수 있도록 보장된다.
따라서, 일 실시예에서, 새로운 프리미티브 데이터가 메모리에 기록되게 되는 것이지만, 그 메모리가 가득찰(또는 일 실시예에서는 보다 거의 가득찰) 때, 상기 구역(들)의 하나 이상은 렌더링되게 선택되고, 그 후 상기 선택된 구역(들)에 대한 메모리에서의 상기 관련된 데이터 구조체(들)에서 상기 데이터가 처리(사용)되어, 상기 선택된 구역(들)에 대한 메모리에서의 상기 관련된 데이터 구조체(들)는 메모리로부터 플러시(그 저장된 데이터는 폐기)될 수 있다.
따라서, 상기 방법은, 일 실시예에서, 상기 이용 가능한 메모리 공간을 추적하는 단계와, 언제 역치미만의 메모리 공간이 이용 가능한지를 판정하는 단계를 더 포함한다. 역치미만의 메모리 공간이 이용 가능하다고 판정될 때, 상기 방법은, 렌더링될 상기 구역(들)의 하나 이상을 선택하는 단계와, 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로 저장된 데이터를 판독하는 단계와, 새로운 데이터가 상기 메모리 공간에 기록되게 하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 폐기하는 단계를 포함하여도 된다.
특히, 실시예들에서, 새로운 메모리 블록을 (구역에 대한 기존의 새로운 데이터 구조체에, 또는 새로운 데이터 구조체를 작성하려고) 할당하려고 할 때, 일 실시예에서는 역치미만의 메모리 공간이 이용 가능한지를 판정하고, 상기 역치미만의 메모리 공간이 이용 가능할 때: 데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기한다.
이에 대응하게, 프리미티브(또는 복수의 프리미티브들의 세트)에 대한 새로운 프리미티브 데이터가 메모리에 하나 이상의 데이터 구조체(들)로 저장되어야 한다고 판정될 때, 상기 프리미티브 데이터 저장회로는: 메모리에서 역치미만의 공간이 이용 가능한지를 판정하도록 구성되고, 상기 메모리에서 상기 역치미만의 공간이 이용 가능할 때, 판독회로는: 데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하도록 구성된다.
플러시(사용)되는 상기 구역들(블록들)은, 임의의 적절한 기준에 근거하여 선택되어도 된다. 예를 들면, 일 실시예에서는, 상기 데이터 구조가 어느 구역(들)에 대해 가장 큰지(예: 가장 많은 수의 메모리 블록들 및/또는 가장 큰 양의 프리미티브 데이터를 가짐)를 판정하고 나서, 플러시(사용)되게 해당 데이터 구조체를 선택한다. 따라서, 실시예들에서는, 하나 이상의 구역(들)은, 가장 큰 양의 프리미티브 데이터가 상기 구역(들) 중 어느 구역에 대해 (현재) 상기 메모리에 저장되는지에 근거하여 플러시되게 선택된다. 따라서, 상기 판독회로는, 가장 큰 양의 프리미티브 데이터가 상기 구역(들) 중 어느 구역에 대해 (현재) 상기 메모리에 저장되는지에 근거하여 플러시될 구역(들)을 선택하도록 구성되어도 된다. 그렇지만, 상기 판정은, 원하는 대로, 다소 복잡한 방식으로 이루어질 수도 있다.
예를 들면, 상기 판정은, 어느 구역(들)이 이미 적어도 부분적으로 렌더링되어 있는지에 근거하여 이루어질 수도 있다. 예를 들면, 상기 시스템은, 얼마나 많은 프리미티브들이 상이한 구역들에 대해 처리되어 있는지를 추적하고 이를 어느 구역(들)이 플러시될지를 선택할 때 고려하여도 된다.
그렇지만, 물론, 그 밖의 배치들도 가능할 것이다. 예를 들면, 상기 시스템은, 임의의 적절한, 수명, 정책 등에 근거하여 플러시될 구역(들)을 선택하여도 된다.
또한, 예를 들면 시스템 유지관리 목적들을 위해 및/또는 (예를 들면) 프레임의 끝에서, 상기 데이터 구조체들(의 전부)을 메모리로부터 명시적으로 플러시할 수 있는 것이 바람직할 수도 있고, 실시예들에서 이것이 행해질 수도 있다.
상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터의 데이터는, 일 실시예에서, 메모리로부터 판독되고 나서, 상기 구역에 대한 상기 프리미티브(들)를 래스터화/렌더링하는데 사용된다. 예컨대, 상기 데이터는, 판독되고 나서, 상기 그래픽 프로세서의 래스터화 회로에 건네질 수도 있고, 상기 프리미티브들은, 일 실시예에서, (선택사항으로) 임의의 프리미티브 셋업이 수행된 후) 래스터화되고 나서, 필요한 경우, 상기 출력을 위해 렌더링된다.
따라서, 상기 그래픽 프로세서의 판독회로는, 상기 지오메트리 데이터와 상태 데이터가 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로 저장되는 상기 프리미티브들을 렌더링하기 위해 상기 지오메트리 데이터와 상태 데이터의 표시들을 상기 그래픽 프로세서에 건넴으로써, 상기 그래픽 프로세서에서 사용하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하도록 구성되어도 된다.
따라서, 상기 그래픽 프로세서는, 상기 선택된 렌더 출력 구역(들)을, 관련된 데이터 구조체로 저장된 상기 데이터를 사용하여 렌더링하기 위해 시작할 수 있다.
상기 구역(들)은 이때에만 렌더링되어도 되는데, 그 이유는, 데이터가 현재 저장되는( 결국 상기 구역에 대해 렌더링될 필요가 있는 프리미티브들 전부보다 적을 수도 있는) 상기 프리미티브들만이 이때 플러시되기 때문이다는 것을 알 것이다. 그렇지만, 아직 처리되지 않고 있는 해당 구역에 대해 렌더링되게 되는 프리미티브가 추가로 존재할 수도 있다. 그 경우에, 이러한 프리미티브들이 처리될 때, 상기 구역에 대한 새로운 데이터 구조체는, 여기서 기재된 방식으로 생성되고 나서, 그 프리미티브들의 전부가 처리될 때까지, 사용/플러시 등이 될 수 있다.
따라서, 실시예들에서, 상기 방법은, 플러시될 제1 구역을 선택하는 단계와, 상기 제1 구역에 대한 각각의 데이터 구조체로 상기 하나 이상의 프리미티브(들)를 위해 저장된 상기 지오메트리 데이터와 상태 데이터를 사용하여, 상기 제1 구역에 대한 하나 이상의 프리미티브(들)를 렌더링하는 단계와, (상기 데이터 구조체로 상기 데이터가 사용된 후) 상기 제1 구역에 대한 상기 데이터 구조체를 폐기하는 단계를 포함하여도 된다. 이후의 프리미티브가 상기 제1 구역에 대해 렌더링되어야 한다고 판정될 때, 상기 방법은, 상기 제1 구역에 대한 메모리에서의 새로운 데이터 구조체를 생성하는 단계 등을 포함한다.
이에 대응하게, 상기 판독회로는, 플러시될 제1 구역을 선택하고 나서, 상기 제1 구역에 대한 하나 이상의 프리미티브(들)를 상기 프리미티브 데이터가 렌더링하는데 사용될 수 있도록 상기 제1 구역에 대한 각각의 데이터 구조체로 저장된 상기 프리미티브 데이터를 판독하도록 구성되어도 된다. 그 후, 상기 데이터 구조체는, 그 데이터가 사용된 후 폐기될 수 있다. 상기 구역에 대해 이후의 프리미티브가 렌더링되어야 한다고 판정될 때, 상기 프리미티브 데이터 저장회로는, 상기 제1 구역에 대해 메모리에 새로운 데이터 구조체를 생성하도록 구성된다.
물론, 일반적으로, 이것은, 임의의, 또는 복수의 구역들에 대해 수행되어도 된다. 따라서, 임의의 시점에서, 대응한 복수의 구역들에 대해 복수의 데이터 구조체들이 존재할 수도 있고, 이 데이터 구조체들은 플러시될 수도 있고, 새로운 데이터 구조체들은, 필요에 따라, 생성될 수도 있다.
그렇지만, 물론, 그 밖의 배치들도 가능할 것이다. 예를 들면, 상기 플러시된 데이터는 상기 프리미티브(들)를 래스터화 등을 하기 위해 상기 그래픽 프로세서에 의해 직접(즉시) 사용될 필요가 없고, 이 데이터의 적어도 일부는 중간 버퍼 등의 그 밖의 스토리지, 또는 (예: DRAM) 메모리의 상이한 부분이나 유사한 것에 전송되고 일시적으로 유지되어도 된다. 그 경우에, 상기 관련된 메모리 블록들은, 이러한 그 밖의 스토리지에 그 데이터를 이동시킴으로써 확보될 수 있다. 그 후, 상기 플러시된 데이터는, 예를 들면, 적절한 시간에, 상기 그 밖의 스토리지로부터 렌더링될 수 있다.
상술한 것처럼, 여기서 기재된 기술의 이점은, 그 때문에, 프리미티브 데이터가 독립적으로 사용될 수 있도록 구역마다 별도로 프리미티브 데이터가 저장된다는 것이다. 이에 따라, 메모리가 이용 가능하지 않거나, 역미만의 양의 메모리가 이용 가능하다고 판정될 때, 일 실시예에서, (상기 렌더 출력의 대응한 하나 이상의 구역(들)에 대한) 상기 데이터 구조체들의 하나 이상은, 이때에 메모리로부터 판독되고 예를 들면, 래스터화 및 렌더링을 위해 상기 그래픽 프로세서의 다음 스테이지에 건네진다. 이것은, 프리미티브 데이터의 계속된 스루풋과 상기 이용 가능한 메모리 공간의 보다 효율적인 사용을 보장하는데 도움이 된다.
또한, 상기 데이터가 구역별로 저장되기 때문에, 일단 그 데이터가 사용되어 있으면, 그 데이터가 (예컨대, 또 하나의 구역에 대해서, 그 데이터가 나머지 구역에 대한 적절한 데이터 구조체로 별도로 이미 저장되었을 것이므로) 다시 필요해지지 않아서, 이때에 폐기될 수 있도록 보장될 수 있다.
따라서, 상기 메모리 공간은, 새로운 프리미티브 데이터가 생성되므로 또한 새로운 프리미티브 데이터가 생성될 때 시간상 동적으로 재할당될 수 있다. 예를 들면, 다수의 고정된 크기의 블록들로 분할되는 메모리의 고정된 구역이 있을 경우, 이에 따라 이 블록들은, 상기 데이터의 전부가 계속 사용되게 하면서 어떠한 다른 연산들에도 영향을 미치지 않고 프리 목록이 스루풋을 유지 관리하도록 소모되므로 할당, 사용 및 재할당될 수 있다.
이러한 배치는, 이용 가능한 메모리 공간의 양에 근거하여 쉽게 구현(및 스케일링) 될 수 있는 메모리의 보다 효율적인 사용을 제공한다.
또한, 메모리로부터 상기 데이터 구조체들을 선택적으로 플러시하는 이 메카니즘은 그 자신의 권리에 있어서 신규하고 이롭다고 믿는다.
여기서 기재된 기술의 또 하나의 실시예는, 메모리와 이 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법을 포함하고, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 렌더 출력은 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할되고, 상기 지오메트리 데이터와, 프리미티브들을 래스터화 및/또는 렌더링하는데 사용될 관련된 상태 데이터의 표시들은, 상이한 구역들에 대한 메모리에서의 각각의 상이한 데이터 구조체들로 저장되고, 이 방법은:
일 세트의 하나 이상의 프리미티브(들)에 대한 새로운 데이터가 메모리에 저장되게 될 때, 상기 메모리에서의 해당 데이터를 위한 역치미만의 공간이 이용 가능한지를 판정하는 단계와; 상기 메모리에 상기 역치미만의 공간이 이용 가능할 때:
데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하는 단계를 포함한다.
여기서 기재된 기술의 추가의 실시예는, 메모리 시스템과 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 포함하고, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 렌더 출력은 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할되고, 상기 지오메트리 데이터와, 프리미티브들을 래스터화 및/또는 렌더링하는데 사용될 관련된 상태 데이터의 표시들은, 상이한 구역들에 대한 메모리에서의 각각의 상이한 데이터 구조체들로 저장되고, 상기 그래픽 프로세서는:
이용 가능한 메모리 공간을 추적하여 언제 역치미만의 메모리 공간이 이용 가능한지를 판정하도록 구성되는 프리미티브 데이터 저장회로; 및
상기 역치미만의 메모리에서의 공간이 이용 가능하다고 상기 프리미티브 데이터 저장회로에 의해 판정될 때:
데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하도록 구성되는, 판독회로를 구비한다.
여기서 기재된 기술의 아울러 또 하나의 실시예는, 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법을 포함하고, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 방법은,
상기 렌더 출력을, 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할하는 단계; 및
렌더링되게 되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
상기 렌더 출력의 상기 복수의 구역들 중 어느 구역에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하며;
상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 상기 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 메모리에 저장하여, 상기 지오메트리 데이터와 렌더링될 상기 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되는,
단계를 포함하고;
상기 방법은:
일 세트의 하나 이상의 프리미티브(들)에 대한 새로운 데이터가 메모리에 저장되게 될 때, 상기 메모리에서의 해당 데이터를 위한 역치미만의 공간이 이용 가능한지를 판정하는 단계와; 상기 메모리에 상기 역치미만의 공간이 이용 가능할 때:
데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하는 단계를 더 포함한다.
여기서 기재된 기술의 아울러 추가의 실시예는, 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 포함하고, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 그래픽 프로세서는:
처리되게 되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
상기 렌더 출력이 렌더링 목적을 위해 분할되어 있는, 각기 상기 렌더 출력의 각각의 영역을 포함하는 복수의 구역들 중 어느 구역(들)에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하도록 구성되는, 프리미티브 소팅 회로;
일 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 상기 프리미티브 소팅 회로에 의해 판정되는 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 상기 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 상기 메모리에 저장하여, 상기 지오메트리 데이터와 렌더링될 일 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시가, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되고;
이용 가능한 메모리 공간을 추적하여 언제 역치미만의 메모리 공간이 이용 가능한지를 판정하도록, 구성되는 프리미티브 데이터 저장회로; 및
상기 역치미만의 상기 메모리에서의 공간이 이용 가능하다고 상기 프리미티브 데이터 저장회로에 의해 판정될 때:
데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하도록 구성되는, 판독회로를 포함한다.
따라서, 여기서 기재된 기술은, 보다 많은 종래의 타일 기반 해결방법들과 비교하여 각 종 이득을 제공한다는 것을 알 것이다.
일부의 실시예들에서, 처리되게 수신되는 어느 프리미티브나, 상술한 동일한 방식으로, 즉 어느 렌더 출력에 대해 상기 프리미티브가 렌더링되어야 하는지를 판정하고 나서, (프리미티브가 다수의 상이한 구역들에 들어가는 경우, 그 프리미티브에 대한 프리미티브 데이터의 복사본이 구역마다 각각의 데이터 구조체들로 저장되도록) 상기 프리미티브가 렌더링되어야 한다고 판정되어 있는 구역마다 각각의 데이터 구조체들로 상기 프리미티브 데이터를 저장함으로써, 처리된다.
그렇지만, 이렇게 하여 상기 프리미티브들 전부가 전혀 처리되지 않을 수도 있다는 것도 생각된다. 예를 들면, 일부의 경우에, 상기 프리미티브들의 일부가 상이한 방식으로, 예를 들면, 상기 렌더 출력 또는 상기 전체 렌더 출력의 복수의 구역들에 대해 할당되는 별도의 데이터 구조체로, 처리되어 저장되는 것이 바람직한 것일 수도 있다. 따라서, 일부의 실시예들에서, 새로운 프리미티브가 처리되게 수신될 때, 상기 방법은, 상술한 방식으로 먼저 상기 프리미티브가 처리되어야 하는지 체크하는 단계를 더 포함할 수도 있다(그럴 경우, 그렇게 하도록 진행한다). 이에 관해서 각종 옵션들이 가능할 것이다.
여기서 기재된 기술은, 그래픽 프로세서를 사용하여 생성하여도 되는 모든 형태의 출력, 이를테면 표시용 프레임, 렌더 투(to) 텍스처 출력들 등에 사용될 수 있다.
일 실시예에서 상기 그래픽 프로세서는, 그래픽 처리 파이프라인이 보통 구비할 수도 있는 임의의 적절하고 원하는 처리 스테이지들 등을 가질 수 있는 그래픽 처리 파이프라인을 실행한다.
일부의 실시예들에서, 상기 그래픽 프로세서는, 여기서 기재된 데이터, 이를테면 상기 프리미티브(지오메트리 및 상태) 데이터 등의 저장, 및/또는 여기서 기재된 상기 프로세스들을 수행하는 소프트웨어의 저장을 행하는, 하나 이상의 메모리들 및/또는 메모리 디바이스들을 포함하고, 및/또는 상기 하나 이상의 메모리들 및/또는 메모리 디바이스들과 통신하고 있다. 또한, 그래픽 처리 파이프라인은, 호스트 마이크로프로세서와, 및/또는, 상기 그래픽 프로세서에서 생성한 상기 데이터에 근거하여 화상들을 표시하기 위한 디스플레이와, 통신하고 있어도 된다.
일 실시예에서, 여기서 기재된 기술의 각종 기능들은, 예를 들면, 디스플레이 디바이스용 프레임 버퍼에 기록되는 상기 렌더링된 프래그먼트 데이터를 생성 및 출력하는 단일의 그래픽 처리 플랫폼상에서 실시된다.
여기서 기재된 기술은, 임의의 적절한 시스템, 이를테면 적절하게 구성된 마이크로프로세서 기반 시스템에 구현될 수 있다. 일 실시예에서, 여기서 기재된 기술은, 컴퓨터 및/또는 마이크로프로세서 기반 시스템에 구현된다.
여기서 기재된 기술의 각종 기능들은, 임의의 원하는 적절한 방식으로 실시될 수 있다. 예를 들면, 여기서 기재된 기술의 기능들은, 원하는 대로, 하드웨어나 소프트웨어로 구현될 수 있다. 따라서, 예를 들면, 여기서 기재된 기술의 각종 기능적 요소들, 스테이지들 및 파이프라인들은, 원하는 방식으로 작동하도록 프로그래밍될 수 있는 적절하게 구성된 전용 하드웨어 요소들 또는 처리 회로들/회로소자, 및/또는 프로그램 가능한 하드웨어 요소들 또는 처리 회로들/회로소자와 같은 각종 기능들 등을 수행할 수 있는, 적절한 프로세서나 프로세서들, 콘트롤러나 콘트롤러들, 기능 유닛들, 회로들/회로소자, 처리 로직, 마이크로프로세서 배치들 등을 포함할 수도 있다.
또한, 여기서는, 당업자라면 알 수 있듯이, 여기서 기재된 기술의 각종 기능들 등이, 주어진 프로세서상에서 병렬로 복제 및/또는 실시될 수도 있다는 것을 주목해야 한다. 마찬가지로, 각종 처리 스테이지들은, 필요한 경우, 처리회로들/회로소자를 공유할 수도 있다.
따라서, 여기서 기재된 기술은, 그래픽 프로세서까지 확장되고, 여기서 기재된 여기서 기재된 기술의 상기 실시예들 중 어느 하나 이상의 상기 장치나 상기 실시예들 중 어느 하나 이상에 따라 작동된 상기 장치를 구비하는 그래픽 처리 플랫폼까지 확장된다. 다른 경우라면, 상술한 특정 기능을 실시하는데 필요한 임의의 하드웨어에 따라, 상기와 같은 그래픽 프로세서는, 상기 그래픽 프로세서들이 구비하는 통상의 기능 유닛 등의 어느 하나 이상 또는 모두를 구비할 수 있다.
또한, 당업자라면, 여기서 기재된 기술의 상술한 실시예들 모두가, 적절히, 여기서 기재된 선택적 특징들의 어느 하나 이상 또는 모두를 구비할 수 있고, 일 실시예에서는 구비한다는 것도 알 것이다.
여기서 기재된 기술에 따른 방법들은, 소프트웨어, 예를 들면 컴퓨터 프로그램을 적어도 일부 사용하여 구현되어도 된다. 이렇게 하여 안 것은, 추가의 실시예들에서 볼 때, 여기서 기재된 기술은, 데이터 프로세서에 인스톨될 때 여기서 기재된 방법들을 실시하도록 구체적으로 구성된 컴퓨터 소프트웨어와, 프로그램 요소가 데이터 프로세서상에 실행될 때 여기서 기재된 방법들을 행하기 위한 컴퓨터 소프트웨어 코드 부분들을 포함하는 컴퓨터 프로그램 요소와, 상기 프로그램이 데이터 처리 시스템상에 실행될 때 여기서 기재된 방법이나 방법들의 단계 모두를 행하도록 구성된 코드수단을 포함한 컴퓨터 프로그램을 포함한다는 것이다. 상기 데이터 프로세서는, 마이크로프로세서 시스템, 프로그램 가능 FPGA(Field Programmable Gate Array) 등이어도 된다.
또한, 여기서 기재된 기술은, 그래픽 프로세서, 렌더러 또는, 데이터 프로세서를 갖는 마이크로프로세서 시스템을 작동시키는데 사용될 때 상기 데이터 프로세서와 함께 상기 프로세서, 렌더러 또는 시스템이 여기서 기재된 기술의 방법들의 단계들을 실시하게 하는 상기 소프트웨어를 포함하는 컴퓨터 소프트웨어 캐리어까지도 확장된다. 이러한 컴퓨터 소프트웨어 캐리어는, ROM칩, RAM, 플래시 메모리, CD ROM이나 디스크 등의 물리적 기억매체일 수 있거나, 유선상의 전자신호, 광신호 또는 위성 등에 관한 무선신호 등의 신호일 수 있다.
여기서 기재된 기술의 방법들의 모든 단계들을 컴퓨터 소프트웨어로 실시할 필요가 없고 이에 따라서 추가의 넓은 실시예로부터 여기서 기재된 기술은 컴퓨터 소프트웨어와, 여기서 기재된 방법들의 단계들의 적어도 하나를 실시하기 위한 컴퓨터 소프트웨어 캐리어상에 인스톨된 상기 소프트웨어를 포함하는 것도 한층 더 알 것이다.
이에 따라, 여기서 기재된 기술은, 컴퓨터 시스템에 사용하기 위한 컴퓨터 프로그램 제품으로서 적절히 구체화되어도 된다. 이러한 구현은, 유형의 매체, 이를테면 비일시적 컴퓨터 판독 가능한 매체, 예를 들면, 디스켓, CD-ROM, ROM, RAM, 플래시 메모리, 또는 하드디스크에 고정된 일련의 컴퓨터 판독 가능한 명령들을 포함할 수도 있다. 또한, 이러한 구현은, 광학적이거나 아날로그적 통신회선을 포함하지만 이에 한정되지 않거나, 또는, 마이크로웨이브, 적외선 또는 그 밖의 전송 기술들 포함하지만 이에 한정되지 않는 무선 기술을 무형으로 사용하는 유형의 매체 상에서, 모뎀이나 그 밖의 인터페이스 디바이스를 거쳐 컴퓨터 시스템에 전송가능한, 일련의 컴퓨터 판독 가능한 명령들을 포함할 수 있었다. 상기 일련의 컴퓨터 판독 가능한 명령들은, 여기서 이전에 기재된 기능성의 전부 또는 일부를 구체화한다.
당업자는, 많은 컴퓨터 아키텍처들이나 운영체계들에 사용하기 위한 다수의 프로그래밍 언어들로 상기 컴퓨터 판독 가능한 명령을 기록할 수 있다는 것을 알 것이다. 또한, 이러한 명령들은, 반도체, 마그네틱, 또는 광학적 기술을 포함하지만 이에 한정되지 않는 현재 또는 미래의 어떠한 메모리 기술을 사용하여서도 저장될 수도 있거나, 광학적, 적외선 또는 마이크로웨이브를 포함하지만 이에 한정되지 않는 현재 또는 미래의 어떠한 통신기술을 사용하여서도 전송되어도 된다. 이러한 컴퓨터 프로그램 제품은, 인쇄된 문서나 전자 문서가 첨부되는 착탈 가능한 매체, 예를 들면, 컴퓨터 시스템, 예를 들면, 시스템 ROM이나 고정형 디스크 상에 사전 적재된 쉬링크 랩 소프트웨어로서 배포되거나, 네트워크, 예를 들면, 인터넷이나 월드 와이드 웹상에서 서버나 전자 게시판으로부터 배포되어도 된다.
이하, 여러 가지의 실시예들에 대해서, 예시로만, 또한 아래의 첨부도면들을 참조하여 설명하겠다:
도 1, 도 2 및 도 3은, 종래의 타일 기반 그래픽 처리 시스템의 연산을 개략적으로 예시한 것이고;
도 4는 일 실시예에 따라 프리미티브 데이터가 어떻게 구성되는지의 일례를 도시한 것이고;
도 5는 일 실시예에 따라 렌더 출력을 생성할 때 상기 프리미티브 데이터가 어떻게 사용되는지를 개략적으로 도시한 것이고;
도 6은 일 실시예에 따라 생성될 수도 있는 데이터 구조체의 일례를 개략적으로 도시한 것이고;
도 7은 일 실시예에 따라 생성될 수도 있는 데이터 구조체의 또 하나의 일례를 개략적으로 도시한 것이며;
도 8은 일 실시예에 따라 메모리 공간의 할당을 개략적으로 도시한 것이고;
도 9는 그래픽 프로세서가 일 실시예에 따라 실행할 수도 있는 그래픽 처리 파이프라인을 개략적으로 도시한 것이며;
도 10은 일 실시예에 따라 프리미티브 데이터가 어떻게 비닝되는지를 보다 상세히 도시하는 흐름도이고;
도 11a 및 11b는, 각종 실시예들에 따라 어떻게 메모리로부터 기록되게 데이터가 선택되는지를 개략적으로 도시한 것이고;
도 12는 일 실시예에 따라 데이터가 어떻게 사용되는지를 보다 상세히 도시하는 흐름도다.
상기 도면들에서 동일한 요소들에 대해서는 동일한 참조부호를 적절히 사용한다.
여기서 기재된 기술은, 일반적으로, 상기 렌더 출력이 렌더링을 위해 복수의 소형 구역들(영역들)로 분할되는 그래픽 프리미티브들을 처리하는 방법들에 관한 것이다. 본 실시예들에서는, 상기 프리미티브 데이터가 구역별로 저장 및 구성된다. 프리미티브가 처리를 위해 수신될 때, 그에 따라서, 상기 렌더 출력이 분할되어 있는 상기 복수의 구역들 중 어느 구역(들)에 대해서 상기 프리미티브가 렌더링되어야 하는지를 판정하고, 그 후, 상기 프리미티브에 대한 프리미티브 데이터(예컨대, 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 렌더링할 때 수행될 연산들을 나타내는 임의의 상태 데이터)는, 한층 더 후술하듯이, 상기 렌더 출력의 각기 상이한 구역에 대한 각각의 상이한 데이터 구조체들로 저장된다.
그렇지만, 비교를 거쳐, 보다 많은 종래의 타일 기반 렌더링 시스템에 대해서는, 먼저 도 1, 도 2 및 도 3을 참조하여 설명할 것이다. 타일 기반 렌더링 시스템에 있어서, 상기 렌더 출력은 렌더링을 위해 복수의 타일들로 분할된다. 그 후, 상기 타일들은, 별도로 상기 렌더 출력을 생성하기 위해 렌더링된다. 이를 행하기 위해서는, 먼저, 어느 타일들에 대해 프리미티브들이 렌더링되어야 하는지에 따라 상기 프리미티브들을 소트하는 것이 필요하다.
따라서 상기 프리미티브 버텍스들이 얻어지고, 통상의 지오메트리 처리(예컨대, 버텍스 셰이딩)가 포스트 변형 지오메트리 데이터(예컨대, 변형된 버텍스들)를 생성하기 위해서, 상기 프리미티브들의 전부에 대해 수행된다.
어느 타일들에 대해 어느 프리미티브들이 렌더링되어야 하는지를 알 수 있기 위해서는, 처리되게 되는 상기 프리미티브들의 전부에 대해 앞으로 이 처리를 수행하는 것이 요구된다. 이것의 결과는, 도 1에 도시된 것처럼, 상기 지오메트리 처리(10)로부터 생성된 상기 지오메트리 데이터의 전부가 메모리(12)에 제1 데이터 구조체(16)로 저장된다는 것이다. 상기 프리미티브 목록들은 별도의 데이터 구조체(18)로 저장되고, 임의의 픽셀 상태 데이터는 추가의 데이터 구조체(14)로 저장된다.
도 2에 도시된 것처럼, 상기 렌더 출력을 위한 상기 지오메트리 처리의 전부가 완료되었으면, 그 후, 이 데이터는, 메모리로부터 판독되고, 이 데이터에 대해 추가의 그래픽 처리(20)가 실시되어 예를 들면, 프레임버퍼(22)에 기록되어도 되는 상기 렌더 출력을 생성한다. 물론, 그 밖의 배치들도 가능할 것이다.
특히, 상기 그래픽 처리(20)는, 상기 프리미티브 목록들을 사용하여, 어느 프리미티브들이 렌더링되어야 하는지를 판정하고 나서 이 프리미티브들을 적절하게 상기 저장된 지오메트리 데이터(16)와 상기 관련된 픽셀 상태 정보(14)를 사용하여 렌더링함으로써, 수행된다. 상기 렌더링 프로세스는, (프리미티브 데이터가 복수의 상이한 레벨들(타일 크기들)에 대해서 비닝되는 계층적 비닝 프로세스를 예시한다, 하지만 이것이 필요하지는 않고 그 비닝이 일반적으로 원하는 대로 다소 복잡한 방식으로 수행될 수도 있는) 도 3에 개략적으로 도시되어 있다.
상술한 종래의 타일 기반 그래픽 처리 연산에 있어서, 상기 렌더 출력을 위한 상기 지오메트리 처리의 전부는 초기의 처리 패스동안에 한 번의 진행으로 수행된다. 그 후, 이 데이터는 제2 처리 패스에서 사용되고, 그 때 상기 렌더 출력이 그들의 관련된 지오메트리를 사용하여 상기 프리미티브를 래스터화/렌더링함으로써 생성된다.
현대의 그래픽 프로세서들의 경우, 상기 렌더 출력을 위한 상기 프리미티브 데이터는 상기 그래픽 프로세서와 관련된 로컬 스토리지에 효과적으로 캐시될 수 없도록 상대적으로 클 수 있다. 이 때문에, 상기 프리미티브 데이터는, 메인(시스템) 메모리에, 또는 적어도 상기 메모리 계층에서 상대적으로 큰 캐시에 라이트백되는 것이 전형적이다.
본 실시예들은, 메모리의 보다 효율적인 사용을 제공한다. 특히, 본 실시예들에서, 상기 프리미티브들의 공간적 분포를 기술하는 별도의 비닝 데이터 구조체(예컨대, 상기 프리미티브 목록들)와 함께, 상기 렌더 출력을 위한 상기 상태 데이터와 상기 지오메트리 데이터의 전부를 저장하는 대신에, 상기 렌더 출력(예컨대, 프레임버퍼)은 복수의 소형 영역 구역들로 분할되고, 상기 상태 데이터와 지오메트리 데이터는 상기 렌더 출력 구역마다 별도의 데이터 구조체들로 저장된다.
따라서, 도 4에 도시된 것처럼, 상기 렌더 출력(40)의 각 구역(예컨대, 프레임 버퍼 구역)은, 해당 구역(만)에 대한 픽셀 상태 및 지오메트리 데이터를 갖는 메모리에서 각각의 데이터 구조체(42)와 관련된다. 이것이 의미하는 것은, 각 구역이, 도 5에 예시된 것처럼, 그것의 각각의 데이터 구조체(42)로 저장된 상기 데이터를 사용하여, 독립적으로 처리될 수 있다는 것이다.
도 6은 본 실시예들에 따라 렌더 출력 구역에 대한 데이터 구조체(60)의 일례를 도시한 것이다. 상기 데이터 구조체(60)는, 상기 프리미티브가 상기 데이터 구조체(60)와 관련된 상기 렌더 출력 구역에 대해 렌더링되어야 한다고 판정되는 임의의 프리미티브들에 대한 상기 상태 데이터와 지오메트리 데이터의 순차적 목록을 포함한다.
특히, 상기 상태 데이터는, 데이터 구조체의 상부로부터 감소하는 상기 데이터 구조체(60)의 제1 구역(즉, 제1의 이용 가능한 메모리 위치)에서 상기 프리미티브 버텍스 색인 레퍼런스들과 함께 저장된다. 따라서, 상기 제1 프리미티브(또는 프리미티브들의 세트)에 대한 풀(full) 상태 세트(62) 후에 해당 프리미티브에 대한 적절한 버텍스 색인 레퍼런스들(64)이, 저장된다. 그 후, 다음 프리미티브(들)에 대한 상태 세트(63) 후에 적절한 버텍스 색인 레퍼런스들(64)이 부가되는 등 한다. 상기 버텍스 데이터(66) 자체(예를 들면, 변형된 버텍스 위치들 등)는, 상기 데이터 구조체의 하부로부터 증가하는 상기 데이터 구조체(60)의 제2 구역에 저장된다.
본 실시예들에서, 상기 메모리 공간은, 복수의 메모리 "블록들"(또는 "청크들")로 나누어질 수도 있다. 따라서, 구역에 대한 데이터 구조체가 생성될 때, 이에 따라 이용 가능한 메모리 블록들의 푸울로부터의 메모리 블록이 할당될 수 있다. 해당 구역에 대한 새로운 프리미티브 데이터가 처리되므로, 이 메모리 블록은 가득차질 수도 있다. 이 때문에, 도 6에 도시된 데이터 구조체(60)는, 단일의 메모리 블록을 표현할 수도 있다. 그 메모리 블록이 가득차지기 때문에, 도 7에 도시된 것처럼, 제2 메모리 블록은 상기 렌더 출력 구역에 대해 할당될 수 있거나 링크(70)는 다음 메모리 블록을 가리키는 상기 제1 메모리 블록에 포함될 수 있거나 하는 것이다. 따라서, 특별한 구역에 대한 데이터 구조체는, 메모리 블록들의 링크된 목록을 포함할 수도 있다.
본 실시예에 따른 메모리 블록들의 할당은, 도 8에 예시되어 있다. 특히, 상기 메모리 공간(12)은, 각각 초기에 데이터에 대해 할당되는 것이 이용 가능한 메모리 블록들(120)의 푸울을 포함한다. 초기에, 상기 메모리 블록들의 전부는 데이터를 위해 할당되게 '비워'진다. 그렇지만, 상기 메모리 블록들이 구역에 대해 할당되므로, 그 후, 그들은 '액티브' 상태가 되어지고, 상기 구역에 대해 '프리 목록'(122)으로부터 '액티브 목록'(124)으로 이동된다.
상기 메모리 공간은, 고정된 크기(고정된 풋프린트)를 가질 수도 있다. 그렇지만, 그 메모리 공간이 시간상 증가할 수도 있다는 것도 고려한다. 예를 들면, 그 구현에 따라, 보다 많은 스토리지는, 원하는 대로(예를 들면, 완전 연기된 렌더링을 할 수 있게) 언제든지 이용 가능할 수도 있다.
이하, 본 실시예들에 따른 그래픽 처리 시스템의 전반적인 연산에 대해서 도 9를 참조하여 설명하겠다.
도 9는 메모리 시스템과 통신중인 그래픽 프로세서상에서 실행되어도 되는 그래픽 처리 파이프라인의 일례를 도시한 것이다. 상기 메모리 시스템은, 캐시이어도 되거나, SRAM 또는 DRAM의 전용 부분을 포함하여도 된다.
상기 그래픽 처리 파이프라인의 제1 스테이지는, 예를 들면, 그래픽 처리 연산을 요구하는 애플리케이션으로부터 코맨드들을 수신하여 처리하는 코맨드 프로세서(80)를 포함한다. 상기 코맨드들은, 예를 들면, 렌더링될 필요가 있는 상기 프리미티브들을 참조하여 생성되게 되는 렌더 출력을 지정할 수도 있다.
따라서, 다음 스테이지에서, 상기 프리미티브의 버텍스들은, 취득되고 나서, 이에 따라, 예를 들면 통상의 방식으로 상기 버텍스들 및/또는 프리미티브들을 셰이딩함으로써 처리된다.
상기 버텍스 및 프리미티브 셰이더 스테이지(들)(81) 후, 프리미티브 조립 및 선별(82)의 초기의 단계는, 그 프리미티브 데이터에 근거하여 수행되어도 된다.
그 후, 그 프리미티브들은 어느 구역들에 대해 렌더링되게 되는지에 근거하여 소트되고 나서, 그 프리미티브 데이터는 적절하게 각각의 메모리 데이터 구조체들로 기록된다.
본 실시예에 따른 프리미티브 비닝(83)은, 도 10에 보다 상세히 예시되어 있다. 도시된 것처럼, (상기 그래픽 처리 파이프라인을 통과하는) 처리중인 프리미티브마다, 먼저, 상기 프레임 버퍼의 어느 구역(들)에 대해 렌더링되게 되는지를 판정한다.
예를 들면, 이것은, 상기 프리미티브와 상기 프레임 버퍼 구역들을 교차시키고 상기 프리미티브가 적어도 부분적으로 상기 프리미티브에 의해 커버되는 임의의 구역들에 대해 렌더링되어야 한다고 판정함으로써, 행해질 수도 있다(단계 90). 그 후, 프리미티브 데이터는, 프리미티브가 렌더링되게 된다고 판정한 구역마다 각각의 데이터 구조체들로 기록되어야 한다.
이를 행하기 위해서, 프리미티브 데이터를 위한 메모리 공간을 할당하려고 시도한다(단계 91). 메모리가 충분히 이용 가능한 경우, 프리미티브 데이터는 적절하게 압축될 수 있고(단계 92), 해당 프리미티브를 위한 상태 (제어) 데이터는 적절하게 인코딩될 수 있고(단계 93), 그 후, 상기 프리미티브는 (하나가 존재하는 경우) 각각의 구역에 대한 기존의 데이터 구조체로 기록되거나 (이러한 데이터 구조체가 이미 존재하지 않는 경우) 상기 구역에 대해 생성된 새로운 데이터 구조체로 기록될 수 있다(단계 94).
한편, 메모리 공간이 이용 가능하지 않거나, 적어도 역치미만의 메모리 공간이 이용 가능하다고 판정될 때, 현재 저장된 상기 데이터의 일부는 상기 메모리로부터 플러시되게 선택된다.
특히, 하나 이상의 프레임 버퍼 구역들은 플러시되게 선택되고 나서, 빈 리더(reader)(85)는 그 구역들에 대한 데이터를 판독하도록 개시된다(단계 95).
도 11a 및 11b는, 어느 구역들이 플러시되어야 하는지를 선택하기 위한 2개의 가능한 해결방법을 예시한 것이다. 도 11a에 도시된 해결방법에 있어서, 최다수의 메모리 블록드을 갖는 'n'개의 구역들은, 플러시되게 선택되고 나서(단계 100), 대응한 'n'개의 플러시 신호들은 그 구역들과 관련된 메모리 블록들이 메모리로부터 플러시되게 하고 새로운 데이터의 재할당을 위해 확보되게 하도록 생성된다(단계 102).
도 11b에서, (만약에 있다면) 어느 구역들이 현재 처리되거나 이전에 처리되었는지를 상기 렌더 출력(103)(예를 들면, 프레임버퍼 캐시)을 참조하여 한층 더 판정하고, 우선순위는 적어도 부분적으로 렌더링중이거나 렌더링되어 있는 구역들에 주어진다(단계 101).
물론 그 밖의 배치들도 가능할 것이다. 예를 들면, 또 하나의 해결방법은, 예를 들면, 적절한 '프리미티브 카운터'에 의해 추적될 수도 있는 최다수의 프리미티브들의 데이터를 갖는 'n'개의 구역들을 선택할 것이다.
그 데이터가 사용(판독)되어 있다면, 대응한 메모리 블록들은, 새로운 프리미티브 데이터를 위해 할당될 수 있는 메모리 공간을 확보하기 위해서, 재사용을 위해 릴리즈될 수 있다(단계 95).
그 후, 판독되는 데이터는, 적절한 프리미티브 셋 업/래스터화 회로(86)에 건네지고 나서, 적절히, 적절한 블렌딩 및 픽셀 모두 기록 스테이지(88)에 의해 상기 프레임 버퍼에 블렌딩되어 모두 기록되기 전에, 픽셀 셰이더(87)상에 건네진다.
이것은 도 12에 한층 더 상세히 예시되어 있다. 도 12에 도시된 것처럼, 메모리(12)로부터 판독되는 데이터는, 지오메트리 데이터를 추출하고 나서(단계 85-1) 픽셀 상태를 추출하기 위해서(단계 85-2) 처리되고 나서, 그 데이터는 상술한 것처럼 래스터화되고 렌더링된다.
따라서, 상기 구역들은 플러시될 수 있고 그 관련된 데이터는 독립적으로 (예를 들면, 도 5에 도시된 것처럼) 사용될 수 있다.
앞서 말한 상세한 설명은, 예시 및 설명 목적을 위해 제시되어 있다. 개시된 구체적인 형태에 대해 여기서 기재된 기술을 총망라하거나 제한하기 위한 것이 아니다. 상기 사상을 고려하여 많은 수정 및 변동이 가능하다. 상기 기재된 실시예들은, 여기서 기재된 기술과 그것의 실제 애플리케이션들의 원리들을 가장 잘 설명하기 위해서 선택되어서, 당업자가, 고려된 특별한 이용에 적합할 때 각종 실시예들에서 또한 각종 수정들로 여기서 기재된 기술을 가장 잘 활용하는 것을 가능하게 한다. 상기 범위는 여기에 첨부된 청구항들에 의해 명시되기 위한 것이다.

Claims (19)

  1. 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법으로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 방법은:
    상기 렌더 출력을, 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할하는 단계; 및
    처리되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
    상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
    상기 렌더 출력의 상기 복수의 구역들 중 어느 구역에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하며;
    상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 메모리에 저장하는 단계를 포함하여,
    상기 지오메트리 데이터와 렌더링될 상기 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되는, 방법.
  2. 제 1 항에 있어서,
    상기 지오메트리 데이터와 상태 데이터를 구역에 대한 각각의 데이터 구조체로 저장하는 상기 단계는: 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재하는지를 판정하는 것과, 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재할 때 상기 프리미티브 데이터를 기존의 데이터 구조체에 부가하는 것을 포함하는 반면에, 상기 구역에 대한 데이터 구조체가 존재하지 않는 경우에는, 상기 방법은 상기 구역에 대한 새로운 데이터 구조체를 생성하는 것을 포함하는, 방법.
  3. 제 2 항에 있어서,
    일 세트의 하나 이상의 프리미티브(들)에 대한 새로운 지오메트리 데이터와 상태 데이터가 메모리에 하나 이상의 데이터 구조체(들)로 저장되어야 한다고 판정될 때, 상기 메모리에서 역치미만의 공간이 이용 가능한지를 판정하는 단계와, 상기 메모리에 상기 역치미만의 공간이 이용 가능할 때: 데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하는 단계를 포함하는, 방법.
  4. 메모리와 이 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법으로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 렌더 출력은 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할되고, 상기 지오메트리와, 프리미티브들을 렌더링하는데 사용될 상태 데이터의 표시들은, 상이한 구역들에 대한 메모리에서의 각각의 상이한 데이터 구조체들로 저장되고, 상기 방법은:
    일 세트의 하나 이상의 프리미티브(들)에 대한 새로운 데이터가 메모리에 저장되게 될 때, 상기 메모리에서의 해당 데이터를 위한 역치미만의 공간이 이용 가능한지를 판정하는 단계와; 상기 메모리에 상기 역치미만의 공간이 이용 가능할 때:
    데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하는 단계를 포함하는, 방법.
  5. 제 3 항 또는 제 4 항에 있어서,
    상기 구역(들)은, 가장 큰 양의 프리미티브 데이터가 상기 구역(들) 중 어느 구역에 대해 현재 상기 메모리에 저장되는지에 근거하여 플러시되게 선택되는, 방법.
  6. 제 3 항 또는 제 4 항에 있어서,
    상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하는 단계는, 상기 지오메트리 데이터와 상태 데이터의 표시들을, 이러한 데이터가 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로 저장되는 상기 프리미티브들을 렌더링하기 위해 상기 그래픽 프로세서에 건네는 것을 포함하는, 방법.
  7. 제 3 항 또는 제 4 항에 있어서,
    플러시될 제1 구역을 선택하는 단계와, 상기 제1 구역에 대한 각각의 데이터 구조체로 하나 이상의 프리미티브(들)를 위해 저장된 상기 지오메트리 데이터와 관련된 상태 데이터를 사용하여, 상기 제1 구역에 대한 상기 하나 이상의 프리미티브(들)를 렌더링하는 단계와, 상기 제1 구역에 대한 상기 데이터 구조체를 폐기하는 단계를 포함하고, 상기 방법은, 이후의 프리미티브가 상기 제1 구역에 대해 렌더링되어야 한다고 판정될 때, 상기 제1 구역에 대한 메모리에서의 새로운 데이터 구조체를 생성하는 단계를 더 포함하는, 방법.
  8. 제 1 항, 제 2 항, 제 3 항 또는 제 4 항 중 어느 한 항에 있어서,
    상기 메모리는 복수의 메모리 블록들을 포함하고, 구역에 대한 데이터 구조체를 생성하는 것은: 상기 구역에 대한 제1 메모리 블록을 할당하고 상기 제1 메모리 블록이 가득찰 때까지 상기 구역에 대한 프리미티브 데이터를 상기 제1 메모리 블록에 부가하는 것; 및 상기 제1 메모리 블록이 가득찰 때, 상기 구역에 대한 제2 메모리 블록을 할당하고, 상기 데이터 구조체가 일 세트의 링크된 메모리 블록들을 포함하도록 상기 제1 및 제2 메모리 블록들을 링크시키는 것을 포함하는, 방법.
  9. 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법으로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 방법은:
    상기 렌더 출력을, 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할하는 단계; 및
    렌더링되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
    상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
    상기 렌더 출력의 상기 복수의 구역들 중 어느 구역에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하며;
    상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 상기 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 메모리에 저장하여, 상기 지오메트리 데이터와 렌더링될 상기 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되는,
    단계를 포함하고;
    상기 방법은:
    일 세트의 하나 이상의 프리미티브(들)에 대한 새로운 데이터가 메모리에 저장되게 될 때, 상기 메모리에서의 해당 데이터를 위한 역치미만의 공간이 이용 가능한지를 판정하는 단계와; 상기 메모리에 상기 역치미만의 공간이 이용 가능할 때:
    데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하는 단계를 더 포함하는, 방법.
  10. 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템으로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 그래픽 프로세서는:
    처리되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
    상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
    상기 렌더 출력이 렌더링 목적을 위해 분할되어 있는, 각기 상기 렌더 출력의 각각의 영역을 포함하는 복수의 구역들 중 어느 구역(들)에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하도록 구성되는, 프리미티브 소팅 회로; 및
    일 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 상기 프리미티브 소팅 회로에 의해 판정되는 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 상기 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 상기 메모리에 저장하도록 구성되는, 프리미티브 데이터 저장회로를 포함하여,
    상기 지오메트리 데이터와 렌더링될 일 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되는, 그래픽 처리 시스템.
  11. 제 10 항에 있어서,
    상기 프리미티브 데이터 저장회로는, 상기 지오메트리 데이터와 상기 상태 데이터의 표시를 구역에 대한 각각의 데이터 구조체로 저장할 때: 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재하는지를 판정하고, 상기 구역에 대한 데이터 구조체가 이미 상기 메모리에 존재할 때 상기 프리미티브 데이터를 기존의 데이터 구조체에 부가하도록 구성되어도 되는 반면에, 상기 구역에 대한 데이터 구조체가 존재하지 않는 경우에는, 상기 프리미티브 데이터 저장회로는 상기 구역에 대한 새로운 데이터 구조체를 생성하도록 구성되는, 그래픽 처리 시스템.
  12. 제 11 항에 있어서,
    일 세트의 하나 이상의 프리미티브(들)에 대한 새로운 지오메트리 데이터와 상태 데이터가 메모리에 하나 이상의 데이터 구조체(들)로 저장되어야 한다고 판정될 때, 상기 프리미티브 데이터 저장회로는: 상기 메모리에서 역치미만의 공간이 이용 가능한지를 판정하도록 구성되고, 상기 메모리에서 상기 역치미만의 공간이 이용 가능할 때, 판독회로는: 데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하도록 구성되는, 그래픽 처리 시스템.
  13. 메모리 시스템과 그래픽 프로세서로 이루어진 그래픽 처리 시스템으로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 렌더 출력은 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할되고, 상기 지오메트리 데이터와, 프리미티브들을 래스터화 및/또는 렌더링하는데 사용될 상태 데이터의 표시들은, 상이한 구역들에 대한 메모리에서의 각각의 상이한 데이터 구조체들로 저장되고, 상기 그래픽 프로세서는:
    이용 가능한 메모리 공간을 추적하여 언제 역치미만의 메모리 공간이 이용 가능한지를 판정하도록 구성되는 프리미티브 데이터 저장회로; 및
    상기 역치미만의 메모리에서의 공간이 이용 가능하다고 상기 프리미티브 데이터 저장회로에 의해 판정될 때:
    데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하도록 구성되는, 판독회로를 구비하는, 그래픽 처리 시스템.
  14. 제 12 항 또는 제 13 항에 있어서,
    상기 판독회로는, 가장 큰 양의 프리미티브 데이터가 상기 구역(들) 중 어느 구역에 대해 현재 상기 메모리에 저장되는지에 근거하여 플러시될 구역(들)을 선택하도록 구성되는, 그래픽 처리 시스템.
  15. 제 12 항 또는 제 13 항에 있어서,
    상기 판독회로는, 상기 지오메트리 데이터와 상태 데이터가 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로 저장되는 상기 프리미티브들을 렌더링하기 위해 상기 지오메트리 데이터와 상태 데이터의 표시들을 상기 그래픽 프로세서에 건넴으로써, 상기 그래픽 프로세서에서 사용하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하도록 구성되는, 그래픽 처리 시스템.
  16. 제 12 항 또는 제 13 항에 있어서,
    상기 판독회로는, 플러시될 제1 구역을 선택하고, 상기 데이터가 하나 이상의 프리미티브(들)를 렌더링하는데 사용될 수 있도록 상기 제1 구역에 대한 각각의 데이터 구조체로 저장된 관련된 상태 데이터의 표시들과 상기 지오메트리 데이터를 판독하고, 상기 제1 구역에 대한 상기 데이터 구조체를 폐기하도록 구성되고, 상기 제1 구역에 대해 이후의 프리미티브가 렌더링되어야 한다고 판정될 때, 상기 프리미티브 데이터 저장회로는 상기 제1 구역에 대해 메모리에 새로운 데이터 구조체를 생성하도록 구성되는, 그래픽 처리 시스템.
  17. 제 10 항, 제 11 항, 제 12 항 또는 제 13 항 중 어느 한 항에 있어서,
    상기 메모리는 복수의 메모리 블록들을 포함하고, 상기 프리미티브 데이터 저장회로는, 구역에 대한 데이터 구조체를: 상기 구역에 대한 제1 메모리 블록을 할당하고 상기 제1 메모리 블록이 가득찰 때까지 상기 구역에 대한 프리미티브 데이터를 상기 제1 메모리 블록에 부가하고; 상기 제1 메모리 블록이 가득찰 때, 상기 구역에 대한 제2 메모리 블록을 할당하고, 상기 데이터 구조체가 일 세트의 링크된 메모리 블록들을 포함하도록 상기 제1 및 제2 메모리 블록들을 링크시킴으로써, 생성하도록 구성되는, 그래픽 처리 시스템.
  18. 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템으로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 상기 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 그래픽 프로세서는:
    처리되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
    상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
    상기 렌더 출력이 렌더링 목적을 위해 분할되어 있는, 각기 상기 렌더 출력의 각각의 영역을 포함하는 복수의 구역들 중 어느 구역(들)에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하도록 구성되는, 프리미티브 소팅 회로;
    일 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 상기 프리미티브 소팅 회로에 의해 판정되는 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 상기 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 상기 메모리에 저장하여, 상기 지오메트리 데이터와 렌더링될 일 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시가, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되고;
    이용 가능한 메모리 공간을 추적하여 언제 역치미만의 메모리 공간이 이용 가능한지를 판정하도록, 구성되는 프리미티브 데이터 저장회로; 및
    상기 역치미만의 상기 메모리에서의 공간이 이용 가능하다고 상기 프리미티브 데이터 저장회로에 의해 판정될 때:
    데이터 구조체가 메모리로부터 플러시될 메모리에 이미 존재하는 하나 이상의 구역(들)을 선택하고; 상기 그래픽 프로세서에서 사용하기 위한 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)로부터 상기 데이터를 판독하고 나서; 메모리 공간을 확보하기 위해 상기 선택된 구역(들)에 대한 상기 데이터 구조체(들)를 메모리로부터 폐기하도록 구성되는, 판독회로를 포함하는, 그래픽 처리 시스템.
  19. 데이터 프로세서상에서 실행할 때 메모리와 그 메모리와 통신하는 그래픽 프로세서로 이루어진 그래픽 처리 시스템을 사용하여 그래픽 프리미티브들을 처리하는 방법을 수행하는 소프트웨어 코드를 저장하는 비일시적 컴퓨터 판독 가능한 저장매체로서, 상기 그래픽 프로세서는 렌더 출력용 복수의 프리미티브들을 렌더링함으로써 렌더 출력을 생성하도록 구성되고, 상기 프리미티브들은 상기 프리미티브들을 표현하는 지오메트리 데이터와 상기 프리미티브들을 래스터화 및/또는 렌더링할 때 수행될 연산들을 나타내는 상태 데이터를 포함하는 관련된 프리미티브 데이터를 사용하여 상기 그래픽 프로세서에 의해 렌더링되고, 상기 방법은:
    상기 렌더 출력을, 각기 상기 렌더 출력의 각각의 영역을 포함하는 렌더링용 복수의 구역들로 분할하는 단계; 및
    처리되게 수신되는 일 세트의 하나 이상의 프리미티브(들)에 대해서:
    상기 세트의 하나 이상의 프리미티브(들)를 렌더링하는 관련된 지오메트리 데이터를 취득하고;
    상기 렌더 출력의 상기 복수의 구역들 중 어느 구역에 대해 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 하는지를 판정하며;
    상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 구역마다, 상기 세트의 하나 이상의 프리미티브(들)에 대한 지오메트리 데이터를, 상기 구역에 대한 각각의 데이터 구조체로 상기 세트의 하나 이상의 프리미티브(들)를 래스터화 및/또는 렌더링 하는데 사용되게 되는 관련된 상태 데이터의 표시와 함께 메모리에 저장하는 단계를 포함하여,
    상기 지오메트리 데이터와 렌더링될 상기 세트의 하나 이상의 프리미티브(들)에 대한 관련된 상태 데이터의 상기 표시는, 상기 세트의 하나 이상의 프리미티브(들)가 렌더링되어야 한다고 판정되는 상기 렌더 출력의 상이한 구역마다 각각의 상이한 데이터 구조체로 저장되는, 저장매체.
KR1020200158414A 2019-11-27 2020-11-24 그래픽 처리 시스템 KR20210066727A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/697,984 2019-11-27
US16/697,984 US11170555B2 (en) 2019-11-27 2019-11-27 Graphics processing systems

Publications (1)

Publication Number Publication Date
KR20210066727A true KR20210066727A (ko) 2021-06-07

Family

ID=74046773

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200158414A KR20210066727A (ko) 2019-11-27 2020-11-24 그래픽 처리 시스템

Country Status (4)

Country Link
US (1) US11170555B2 (ko)
KR (1) KR20210066727A (ko)
CN (1) CN112862661A (ko)
GB (1) GB2594764B (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356479B (zh) * 2021-12-27 2024-03-08 珠海豹趣科技有限公司 一种页面渲染方法及装置
GB2611376B (en) 2022-03-30 2023-11-01 Imagination Tech Ltd Multi-core draw splitting
GB2611373A (en) * 2022-03-30 2023-04-05 Imagination Tech Ltd Memory management for multicore 3-D graphics rendering
GB2611377B (en) * 2022-03-30 2023-11-01 Imagination Tech Ltd Memory allocation for 3-D graphics rendering
GB2611375A (en) * 2022-03-30 2023-04-05 Imagination Tech Ltd Memory management for multicore 3-D graphics rendering
CN115223516B (zh) * 2022-09-20 2022-12-13 深圳市优奕视界有限公司 图形渲染与lcd驱动一体化芯片及相关方法和设备
WO2024073953A1 (zh) * 2022-10-08 2024-04-11 芯动微电子科技(珠海)有限公司 一种分块渲染模式图形处理方法及系统
CN116149866B (zh) * 2023-04-14 2023-08-04 深圳市明源云科技有限公司 工作空间自适应渲染方法、装置、设备及可读存储介质

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6771264B1 (en) 1998-08-20 2004-08-03 Apple Computer, Inc. Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor
WO2000011603A2 (en) 1998-08-20 2000-03-02 Apple Computer, Inc. Graphics processor with pipeline state storage and retrieval
US6567092B1 (en) 1999-02-10 2003-05-20 Microsoft Corporation Method for interfacing to ultra-high resolution output devices
US20020126127A1 (en) 2001-01-11 2002-09-12 International Business Machines Corporation Lighting processing circuitry for graphics adapter
US6954204B2 (en) 2002-07-18 2005-10-11 Nvidia Corporation Programmable graphics system and method using flexible, high-precision data formats
US7126606B2 (en) 2003-03-27 2006-10-24 Microsoft Corporation Visual and scene graph interfaces
US6943797B2 (en) 2003-06-30 2005-09-13 Sun Microsystems, Inc. Early primitive assembly and screen-space culling for multiple chip graphics system
US7446780B1 (en) 2003-08-29 2008-11-04 Nvidia Corporation Temporal antialiasing in a multisampling graphics pipeline
US7385607B2 (en) 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7978205B1 (en) 2004-05-03 2011-07-12 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7439979B1 (en) 2004-11-10 2008-10-21 Nvidia Corporation Shader with cache memory
US7928988B1 (en) * 2004-11-19 2011-04-19 Nvidia Corporation Method and system for texture block swapping memory management
US8933933B2 (en) 2006-05-08 2015-01-13 Nvidia Corporation Optimizing a graphics rendering pipeline using early Z-mode
US8207975B1 (en) 2006-05-08 2012-06-26 Nvidia Corporation Graphics rendering pipeline that supports early-Z and late-Z virtual machines
US7843463B1 (en) 2007-06-01 2010-11-30 Nvidia Corporation System and method for bump mapping setup
US9536275B1 (en) 2007-07-31 2017-01-03 Nvidia Corporation Using a geometry shader for variable input and output algorithms
GB0723536D0 (en) 2007-11-30 2008-01-09 Imagination Tech Ltd Multi-core geometry processing in a tile based rendering system
US8259111B2 (en) 2008-05-30 2012-09-04 Advanced Micro Devices, Inc. Merged shader for primitive amplification
GB0900700D0 (en) * 2009-01-15 2009-03-04 Advanced Risc Mach Ltd Methods of and apparatus for processing graphics
US8954477B2 (en) * 2011-01-28 2015-02-10 Apple Inc. Data structures for a media-editing application
US10438314B2 (en) * 2012-10-26 2019-10-08 Nvidia Corporation Two-pass cache tile processing for visibility testing in a tile-based architecture
US9830741B2 (en) 2012-11-07 2017-11-28 Nvidia Corporation Setting downstream render state in an upstream shader
JP5989223B2 (ja) 2013-02-21 2016-09-07 三菱電機株式会社 制御装置及びリモコン装置
US9679342B2 (en) 2013-07-12 2017-06-13 Arm Limited Result data stream coding for repeating workloads
CN104427350A (zh) * 2013-08-29 2015-03-18 中兴通讯股份有限公司 关联内容处理方法及系统
WO2015147815A1 (en) 2014-03-26 2015-10-01 Empire Technology Development Llc Atlas generation based on client video configuration
US9659407B2 (en) * 2015-01-26 2017-05-23 MediaTek Singapore, Pte. Lte. Preemptive flushing of spatial selective bins for deferred graphics processing
GB2546720B (en) 2015-11-02 2019-11-13 Advanced Risc Mach Ltd Method of and apparatus for graphics processing
GB2551689B (en) 2016-04-22 2021-05-12 Advanced Risc Mach Ltd Method and Apparatus for processing graphics
GB2555797B (en) 2016-11-09 2020-04-08 Geomerics Ltd Graphics processing to provide shadows on specular lighting
US10417787B2 (en) 2017-02-15 2019-09-17 Microsoft Technology Licensing, Llc Index buffer block compression
GB2561557B (en) 2017-04-13 2020-08-12 Advanced Risc Mach Ltd Graphics processing method and apparatus in which modified edge positions are used in rasterisation
GB2564400B (en) 2017-07-06 2020-11-25 Advanced Risc Mach Ltd Graphics processing
GB2567436B (en) 2017-10-10 2019-10-02 Imagination Tech Ltd Geometry to tiling arbiter for tile-based rendering system
US10997771B2 (en) 2018-08-29 2021-05-04 Intel Corporation Position-based rendering apparatus and method for multi-die/GPU graphics processing
CN111354065A (zh) 2018-12-21 2020-06-30 畅想科技有限公司 用于图形处理系统的基元块生成器

Also Published As

Publication number Publication date
GB2594764A (en) 2021-11-10
US20210158598A1 (en) 2021-05-27
CN112862661A (zh) 2021-05-28
GB2594764B (en) 2023-03-22
GB202018208D0 (en) 2021-01-06
US11170555B2 (en) 2021-11-09

Similar Documents

Publication Publication Date Title
KR20210066727A (ko) 그래픽 처리 시스템
KR102674513B1 (ko) 그래픽 처리
CN103793893B (zh) 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序
CN106504181B (zh) 用于处理子图元的图形处理方法和系统
US11216993B2 (en) Graphics processing systems
CN105321199B (zh) 图形处理流水线及其操作方法与介质
JP5624733B2 (ja) グラフィックス処理システム
JP4076502B2 (ja) ゾーン・レンダリングのための効率的なグラフィックス状態管理
US10255718B2 (en) Graphics processing
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
US10559054B2 (en) Graphics processing systems
KR20140063429A (ko) 그래픽 처리 방법 및 장치
EP3671652A1 (en) Transformed geometry data cache for graphics processing systems
US11210821B2 (en) Graphics processing systems
KR101824665B1 (ko) 안티-앨리어싱된 샘플들의 분할 저장
CN112037116A (zh) 用于图形处理系统的缓存装置
US11210847B2 (en) Graphics processing systems
US11734869B2 (en) Graphics processing
CN115311120A (zh) 图形处理系统
US20240169474A1 (en) Graphics processing
US20240193720A1 (en) Graphics processing systems
US20230401667A1 (en) Graphics processing systems
US20240169464A1 (en) Graphics processing systems
DE102013017641B4 (de) Umordnung von Grundelementen zwischen einer Welt-Raum-Pipeline und einer Bildschirm-Raum-Pipeline mit Pufferbeschränkter Verarbeitung
KR20240072942A (ko) 그래픽 프로세서

Legal Events

Date Code Title Description
A201 Request for examination