KR102270750B1 - 병렬 마이크로폴리곤 래스터라이저들 - Google Patents

병렬 마이크로폴리곤 래스터라이저들 Download PDF

Info

Publication number
KR102270750B1
KR102270750B1 KR1020197003898A KR20197003898A KR102270750B1 KR 102270750 B1 KR102270750 B1 KR 102270750B1 KR 1020197003898 A KR1020197003898 A KR 1020197003898A KR 20197003898 A KR20197003898 A KR 20197003898A KR 102270750 B1 KR102270750 B1 KR 102270750B1
Authority
KR
South Korea
Prior art keywords
primitive
rasterizer
rasterizers
primitives
bounding box
Prior art date
Application number
KR1020197003898A
Other languages
English (en)
Other versions
KR20190039126A (ko
Inventor
보리스 프로코펜코
티모르 티. 팔타쉐브
블라디미르 비. 키바르딘
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20190039126A publication Critical patent/KR20190039126A/ko
Application granted granted Critical
Publication of KR102270750B1 publication Critical patent/KR102270750B1/ko

Links

Images

Classifications

    • 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/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

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

Abstract

병렬 적응 그래픽 래스터화 시스템(100)은 프리미티브(700, 800)를 제1 래스터라이저(155, 350, 410, 525) 또는 복수의 제2 래스터라이저들(355, 405, 540, 605) 중 하나로 선택적으로 라우팅하는 라우터(520)를 갖는 프리미티브 어셈블러(135, 315, 515)를 포함한다. 제2 래스터라이저들은 상이한 프리미티브들에 대해 동시에 동작하며, 프리미티브의 영역에 기초하여 프리미티브가 선택적으로 라우팅된다. 일부 변형 예에서, 프리미티브의 경계 박스(215, 705, 805)가 프리미티브를 복수의 제2 래스터라이저들 중 하나로 제공하기 전에 미리 결정된 수의 픽셀들로 축소된다. 경계 박스를 축소시키는 것은, 예를 들어, 프리미티브를 나타내는 포인트들의 좌표로부터 경계 박스의 원점을 빼는 것을 포함한다.

Description

병렬 마이크로폴리곤 래스터라이저들
그래픽 처리 시스템들(graphics processing systems)은 처리 시스템에 의해 생성되고 조작될 수 있는 모델들로 표현되는 장면들(scenes)의 이미지들을 생성한다. 장면의 3-D 모델의 오브젝트들(objects)은 일반적으로 제어 포인트들(control points)의 세트로 획정되는 고차 표면들인 패치들의 세트(예를 들어, 베지어 패치들(Bezier patches))로 표현된다. 패치들은 그래픽 파이프라인에 의해 처리되어 스크린에 표시할 이미지들을 생성한다. 3-D 그래픽을 처리하기 위한 기존의 그래픽 파이프라인은 지오메트리 워크로드(geometry workload)를 다루는 부분과 픽셀 워크로드(pixel workload)를 다루는 부분으로 나뉜다. 지오메트리 워크로드를 다루는 부분을 오브젝트 공간(object space)에서의 작동이라고 하며 픽셀 워크로드를 다루는 부분을 이미지 공간에서의 작동이라고 한다. 그래픽 파이프 라인의 지오메트리 부분은 고-차(higher-order) 프리미티브(primitive)(예를 들어 패치)들을 처리하는 지오메트리 프론트-엔드(geometry front-end), 상기 고-차 프리미티브들을 수신하고 상기 입력 고-차 프리미티브들로부터 저-차(higher-order) 프리미티브들을 생성하는 테셀레이터(tessellator), 및 상기 저-차 프리미티브들을 처리하여 이들을 이미지 공간의 픽셀들로 전환하는 래스터라이저(rasterizer)를 포함하는 지오메트리 백-엔드(geometry back-end)를 포함한다. 저-차 프리미티브들은 상호 연결된 꼭지점들로 형성된 사각형들, 삼각형들, 선들, 점들 등과 같은 다각형들(polygons)을 포함한다. 저-차 프리미티브들은 장면에서 다양한 오브젝트들을 나타내는 메시(mesh)를 형성하도록 상호 연결된다.
본 개시는 첨부된 도면들을 참조함으로써 당업자에게 보다 잘 이해될 수 있고, 그 많은 특징들 및 이점들이 명백해질 수 있다. 상이한 도면들에서 동일한 참조 부호를 사용하는 것은 유사하거나 동일한 항목들을 나타낸다.
도 1a는 일부 실시 예들에 따른 제1 예시적인 그래픽 처리 시스템의 블록도이다.
도 1b는 일부 실시 예들에 따른 제2 예시적인 그래픽 처리 시스템의 블록도이다.
도 2는 일부 실시 예들에 따른 오브젝트(object)에 대한 경계 박스(bounding box) 및 깊이 값들을 결정하기 위해 사용되는 경계 체적(bounding volume)의 다이어그램이다.
도 3은 일부 실시 예들에 따른 그래픽 처리 시스템의 일부의 제1 예에 대한 블록도이다.
도 4는 일부 실시 예들에 따른 그래픽 처리 시스템의 일부의 제2 예에 대한 블록도이다.
도 5는 일부 실시 예들에 따른 다수의 테셀레이션 엔진들(tessellation engines)이 구비된 테셀레이터를 포함하는 그래픽 처리 시스템의 일부의 블록도이다.
도 6은 일부 실시 예들에 따른 병렬 래스터라이저(parallel rasterizer)의 블록도이다.
도 7은 일부 실시 예들에 따른 큰 프리미티브 및 대응하는 큰 경계 박스의 예시이다.
도 8은 일부 실시 예들에 따른 작은 프리미티브 및 큰 경계 박스의 예시이다.
도 9는 일부 실시 예들에 따른 프리미티브들의 영역들에 기초하여 큰 또는 작은 래스터라이저들로 프리미티브들을 선택적으로 라우팅하는 방법의 흐름도이다.
도 1a는 일부 실시 예들에 따른 제1 예시적인 그래픽 처리 시스템을 도시한다. 제1 예시적인 그래픽 처리 시스템은 소정의 해상도로 3-차원(3-D) 장면들(scenes)의 래스터화된 이미지들(rasterized images)을 생성하기 위해 고-차 지오메트리 프리미티브들(high-order geometry primitives)을 처리할 수 있는 그래픽 파이프 라인(100)을 포함한다. 그래픽 파이프 라인(100)은 버퍼들을 구현하고 버텍스 데이터(vertex data), 텍스처 데이터(texture data) 등을 저장하는데 사용되는 하나 이상의 메모리들 또는 캐시들과 같은 리소스들(101)에 액세스한다. 입력 어셈블러(input assembler)(102)는 장면의 모델의 부분들을 나타내는 오브젝트들을 획정하는데 사용되는 리소스들(101)로부터 정보를 액세스하도록 구성된다. 소프트웨어로 구현될 수 있는 버텍스 쉐이더(vertex shader)(103)는 프리미티브의 단일 버텍스를 입력으로서 수신하고 단일 버텍스를 출력한다. 그래픽 파이프 라인(100)은 통합된 쉐이더 모델(unified shader model)을 구현하여 그래픽 파이프 라인(100)에 구현된 모든 쉐이더들이 동일한 능력을 갖도록 한다. 따라서, 버텍스 쉐이더(103)를 포함하는 쉐이더들은 본 명세서에서 통합된 쉐이더 풀(unified shader pool)(104)로 지칭되는 공통 리소스 세트를 사용하여 구현된다. 선체 쉐이더(hull shader)(105)는 입력 패치들을 획정하는데 사용되는 입력 패치들 또는 제어 포인트들 상에서 동작한다. 선체 쉐이더(105)는 테셀레이션(tessellation) 인자들 및 다른 패치 데이터를 출력한다.
선체 쉐이더(105)에 의해 생성 된 프리미티브들은 선택적으로 테설레이터(106)에 제공될 수 있다. 테셀레이터(106)는 선체 쉐이더(105)로부터 오브젝티브들(패치들과 같은)을 수신하고 예를 들어, 선체 쉐이더(105)에 의해 테설레이터(106)에 제공된 테셀레이션 인자들에 기초하여 입력 오브젝트들을 테셀레이션(tessellating)함으로써 입력 오브젝트에 대응하는 프리미티브들을 식별하는 정보를 생성한다.
도메인 쉐이더(107)는 도메인 위치 및 (선택적으로) 다른 패치 데이터를 입력한다. 도메인 쉐이더(107)는 제공된 정보에서 작동하고, 입력 도메인 위치 및 다른 정보에 기초하여 출력을 위한 단일 버텍스를 생성한다. 지오메크리 쉐이더(108)는 입력 프리미티브를 수신하고 입력 프리미티브에 기초하여 지오메트리 쉐이더(108)에 의해 생성된 최대 4 개의 프리미티브들을 출력한다. 프리미티브들의 하나의 스트림이 래스터라이저(rasterizer)(109)에 제공되고, 프리미티브들의 최대 4 개의 스트림들이 리소스들(101)의 버퍼에 접합(concatenation)될 수 있다. 래스터라이저(109)는 쉐이딩 연산 및 클리핑(clipping), 투시 분할(perspective dividing), 시저링(scissoring) 및 뷰포트 선택(viewport selection) 등과 같은 다른 연산들을 수행한다.
픽셀 쉐이더(pixel shader)(110)는 단일 픽셀을 입력하여 입력 픽셀에 응답하여 0 또는 1 픽셀을 출력한다. 출력 병합 블록(111)은 픽셀 쉐이더(110)로부터 수신된 픽셀들에 블렌드(blend), 깊이(depth), 스텐실(stencil), 또는 다른 연산들을 수행한다.
그래픽 파이프 라인(100)에서, 테셀레이션은 패치들과 같은 입력 고-차 프리미티브를, 예를 들어 테셀레이션 프로세스에 의해 생성된 프리미티브의 입도(granularity)를 특정하는 테셀레이션 인자(tessellation factors)에 의해 지시되는 바와 같이, 세밀한 디테일 레벨들을 나타내는 저-차 출력 프리미티브들의 집합으로 세분화한다. 따라서 장면의 모델은 더 적은 수의 고-차 프리미티브들로 표현될 수 있으며(메모리 또는 대역폭을 절약하기 위해) 고차원 프리미티브를 테셀레이션하여 추가 세부 사항이 추가될 수 있다. 테셀레이션의 입도는 필요한 수준의 세부 사항을 기준으로 구성될 수 있으며, 이는 일반적으로 고-차 프리미티브들에 의해 표현된 오브젝트의 상대적 위치와 오브젝트를 포함하는 장면의 이미지를 렌더링하는데 사용된 뷰포인트를 나타내는 카메라에 의해 결정된다. 카메라에 더 가까운 오브젝트는 더 높은 수준의 디테일을 필요로 하고 카메라에서 더 먼 오브젝트는 더 낮은 수준의 디테일을 필요로한다. 필요한 디테일 수준에 따라 테셀레이션은 입력 고-차 프리미티브들의 수에 대해 비교하여 그래픽 파이프 라인의 저-차 프리미티브들의 수를 증가시킬 수 있다. 테셀레이터(106)에 의해 생성된 일부 프리미티브들은 이미지 공간 상의 단일 픽셀 영역 또는 렌더링된 이미지를 디스플레이 하는데 사용되는 스크린보다 작거나 같은 영역을 나타내는 마이크로폴리곤(micropolygon)들이다.
그래픽 파이프 라인(100)의 래스터라이저(109)는 테셀레이터(106)에 의해 생성된 프리미티브들에 의해 표현된 벡터 정보를 입력 프리미티브들에 기초하여 래스터라이저(109)에 의해 결정된 값을 갖는 픽셀들로 구성된 래스터 이미지로 전환한다. 일부 경우에, 래스터라이저(109)는 테셀레이터(106)에 의해 생성된 큰 체적의 프리미티브들, 또는 대량 병렬 계산 쉐이더 프로그램(massively parallel compute shader program) 또는 초고속 데이터 채널과 같은 다른 프리미티브들의 소스에 의해 압도(overwhelming) 될 수 있으며, 특히 래스터라이저(109)가 높은 수준의 디테일을 필요로 하는 장면의 일부를 나타내는 프리미티브들 상에서 동작할 때 그러하다. 따라서, 래스터라이저(109)는 이러한 상황 하에서 그래픽 파이프 라인(100)에서 병목 현상(bottleneck)이 된다. 병목 현상으로 인한 픽셀 레이트의 감소는 사용자가 수신한 이미지의 프레임 레이트와 품질을 현저하게 저하시킬 수 있다. 또한, 래스터라이저(109)는 단일 픽셀의 영역보다 큰 영역을 나타내는 프리미티브들에 대해 동작하도록 구성된다. 예를 들어, 래스터라이저(109)는 이미지 공간의 전체 범위에 걸쳐 폴리곤들의 포인트들 또는 정점들을 나타내는 이미지 좌표에 대해 고정 소수점 연산(fixed-point operation)을 수행하기에 충분한 하드웨어를 사용하여 구현될 수 있다. 대조적으로, 마이크로폴리곤들 사이의 차이는 훨씬 작은 범위의 이미지 좌표로 나타낼 수 있다. 따라서, 래스터라이저(109)를 사용하여 마이크로폴리곤을 래스터화하는 것은 그래픽 파이프 라인(100)의 리소스를 비효율적으로 사용하는 것이다.
도 1b 내지 도 9는 프리미티브들의 영역에 따라 프리미티브들을 처리하기 위해 상이한 세트의 래스터라이저들(본 명세서에서는 큰 래스터라이저들 및 작 래스터라이저들이라고 함)을 사용하는 복합 아키텍처를 사용하여 프리미티브들을 선택적으로 래스터화함으로써, 그래픽 파이프 라인의 프리미티브들의 대량 흐름에 의한 래스터라이저에서 생성된 병목 현상이 개선될 수 있음을 개시하고, 그리고 보다 효율적으로 배치된 그래픽 파이프 라인의 리소스를 개시한다. 큰 래스터라이저의 한 예는 이미지 공간의 전체 범위를 포함할 수 있는 경계 박스 내의 폴리곤들에 대한 고정 소수점 연산을 수행하도록 구성된다. 따라서 폴리곤들은 16 내지 24 비트로 표현되는 범위 내의 이미지 공간에서 입력 좌표로 표현된다. 결과적으로, 이 예에서, 큰 래스터라이저는 40 내지 48 비트로 표현되는 범위 내의 중간 결과에 대해 연산할 수 있어야 한다. 작은 래스터라이저들은 더 작은 경계 박스들로 둘러싸인 프리미티브들에 대해서만 작동하며 더 큰 경계 박스로 둘러싸인 프리미티브들에 대해 작동할 수 있는 충분한 처리 기능을 보유하지 않는다. 예를 들어, 작은 래스터라이저들에 제공되는 프리미티브들은 4 개의 픽셀들, 예를 들어, 2 x 2 쿼드 픽셀들에 대응되는 영역에 의해 둘러싸인 폴리곤들로 제한될 수 있다. 따라서, 작은 래스터라이저들에 제공되는 프리미티브들을 나타내기 위해 필요한 입력 좌표의 범위(및 작은 래스터라이저들에 의해 생성된 중간 결과)는 더 작은 수의 비트, 예를 들어 10-20 비트로 표현된다.
일부 실시 예들에서, 경계 박스의 임계 영역에 대한 프리미티브의 영역의 비교는 프리미티브를 큰 래스터라이저 또는 작은 래스터라이저에 선택적으로 제공하는데 사용된다. 임계 영역보다 큰 영역을 나타내는 폴리곤들과 같은 프리미티브들은 큰 래스터라이저를 사용하여 래스터화되고 임계 영역보다 작거나 같은 영역을 나타내는 폴리곤들은 작은 래스터라이저들 중 하나를 사용하여 래스터화된다. 임계 영역은 미리 결정된 수의 픽셀들에 의해 표시될 수 있으며, 이는 작은 래스터라이저의 성능에 대응되는 픽셀들의 수 또는 배열로 설정될 수 있다. 예를 들어 경계 박스의 임계 영역은 픽셀들의 2 x 2 배열로 설정될 수 있다. 어떤 경우에는, 상이한 처리 능력을 갖는 2 종 이상의 래스터라이저들에 프리미티브들을 선택적으로 제공하기 위해 다수의 상이한 임계 영역들이 사용될 수 있다. 임계 영역의 경계 박스 내의 다른 위치들 사이를 구별하는데 필요하지 않은 프리미티브들의 이미지 좌표의 비트는 제공된 정보로부터 작은 래스터라이저로 드롭(drop)된다. 작은 래스터라이저들에서 래스터화 계산을 위해 필요한 비트 수는 작은 래스터라이저들에 제공되는 이미지 좌표로부터 경계 박스의 원점(origin)을 감산함으로써 더 감소될 수 있다. 일부 실시 예들에서, 각각의 작은 래스터라이저들은 래스터화 이전에 폴리곤들의 포인트들 또는 정점들의 특성을 나타내는 값들을 저장하는 대기열(queue)과 관련된다. 대기열의 깊이는 작은 래스터라이저에서 축소 이미지 좌표 범위를 처리하는 데 필요한 대기 시간(latency)을 보완하기 위해 선택된다.
도 1b는 일부 실시 예들에 따른 제2 예의 그래픽 처리 시스템(112)의 블록도이다. 그래픽 처리 시스템(112)은 장면의 모델의 부분들을 나타내는 오브젝트들을 정의하는데 사용되는 정보를 액세스하는 입력 어셈블러(input assembler, IA)(113)를 포함한다. 예를 들어, 입력 어셈블러(113)는 하나 이상의 제어 포인트들에 의해 정의되고 모델의 일부를 나타내기 위해 사용되는 베지어 패치(Bezier patch)들에 액세스할 수 있다. 다른 예로서, 입력 어셈블러(113)는 모델의 부분들을 나타내는 삼각형들과 같은 프리미티브들의 정점들에 액세스할 수 있다. 일부 실시 예들에서, 입력 어셈블러는 그래픽 처리 시스템(112)의 그래픽 파이프 라인에 대한 작업 아이템(work item)들을 생성하고, 버텍스 식별자들, 프리미티브 식별자들, 제어 포인트 식별자들 등과 같은 식별자들을 오브젝트들에 할당할 수 있다. 일부 변형 예들에서, 오브젝트들을 그래픽 처리 시스템(112)의 메모리(114)로부터 액세스될 수 있다. 처리 시스템(112)의 일부 실시 예들은 메모리(114)에 저장된 정보를 캐싱하는데 사용되는 캐시(115)를 포함한다. 어떤 경우에, 캐시(115)는 단일 레벨 캐시 또는 L1 캐시, L2 캐시, L3 캐시 등과 같은 다중 레벨을 포함하는 계층적(hierarchical) 캐시이다.
예시적인 그래픽 처리 시스템(112)은 입력 어셈블러(113)로부터 수신된 정점들에 대한 쉐이딩 연산을 수행하는 로컬(local) 쉐이더(116) 및 입력 어셈블러(113)로부터 수신된 패치들(또는 패치들의 제어 포인트들)에 대해 연산하는 선체 쉐이더(120) 중 하나 또는 모두를 포함한다. 로컬 쉐이더(116) 및 선체 쉐이더(120)는 오브젝트 공간에서 동작한다. 일부 변형 예에서, 선체 쉐이더(120)는, 다른 패치 파라미터들 또는 상수들뿐만 아니라, 패치들의 테셀레이션을 위해 사용되는 테셀레이션 인자들을 생성할 수 있다. 일부 실시 예들에서, 로컬 쉐이더(116) 또는 선체 쉐이더(120)는 프로세서, 프로세서 코어, 계산 유닛 등과 같은 하나 이상의 하드웨어 구성 요소들 상에서 실행되는 소프트웨어로서 구현된다. 예시적인 그래픽 처리 시스템(112)의 일부 실시 예들은 로컬 쉐이더(116) 및 선체 쉐이더(120)와 유사한 기능을 수행하는데 사용되는 다른 쉐이더들 또는 쉐이더들의 상이한 조합을 포함한다.
일부 변형 예에서, 그래픽 처리 시스템(112)은 고-차 프리미티브들을 처리하기 위한 테셀레이터(125)를 더 포함할 수 있다. 존재할 때, 테셀레이터(125)는 선체 쉐이더(120)로부터 오브젝티브(패치들과 같은)를 수신하고, 예를 들어, 선체 쉐이더(120)에 의해 테설레이터(125)에 제공된 테셀레이션 인자들에 기초하여 입력 오브젝트들을 테셀레이션(tessellating)함으로써, 입력 오브젝트에 대응되는 프리미티브들을 식별하는 정보를 생성한다. 프리미티브들은 포인트들, 라인들, 삼각형들, 사변형들 또는 기타 폴리곤들을 포함할 수 있다. 입력 패치를 테셀레이션하는 것은 입력 패치를 나타내는 포인트들, 라인들 또는 삼각형들과 같은 토폴로지 및 도메인 위치를 생성하는 것을 포함할 수 있다. 테셀레이터(125)는 따라서 오브젝트 공간에서 작동한다. 일부 변형 예에서, 테셀레이터(125)는 복수의 프리미티브들을 동시에 또는 병렬로 생성할 수 있는 복수의 테셀레이션 엔진들(도 1에 도시되지 않음)을 구현한다. 예를 들어, 테셀레이션 엔진들은 이하에서 상세히 설명되는 바와 같이, 선체 쉐이더(120)로부터 수신된 테셀레이션 인자들 및 오브젝트들에 기초하여 독립적으로 프리미티브들을 생성할 수 있다. 테설레이터(125)의 일부 실시 예들은 테셀레이션을 수행하도록 구성된 고정 함수 하드웨어(fixed function hardware)로서 구현된다. 그러나, 테셀레이터(125)는 다른 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합으로 구현될 수도 있다.
테셀레이터(125)는 정수 인덱스들을 전환 블록(conversion block)(130)에 제공한다. 테셀레이터(125)에 의해 제공된 정수 인덱스들은 테셀레이터에 의해 생성된 포인트들 또는 정점들의 위치를 나타낸다. 정수 인덱스들은 일반적으로 "그리드(grid)(u, v)" 좌표라고 지칭된다. 전환 블록(130)은 그리드(u, v) 값들을 범위 [0..1] 내의 패치 좌표(u, v)로 전환한다. 패치 좌표(u, v)는 내부 패치 파라미터의 공간에서 포인트 또는 정점의 정확한 위치를 정의한다. 이러한 좌표는 3D 뷰 공간에서 서브디비전(subdivision) 정점 지오메트리 좌표를 계산하는 데 사용될 수 있다. 3-D 뷰 공간에서의 좌표는, 당 업계의 일반적인 사용법에 따라, 이하에서 (x, y, z, w)로 언급된다. 도시된 실시 예에서, 위치 도메인 쉐이더(DS_POS)(131)는 전환 블록(130)으로부터 패치 좌표(u, v)를 수신한다. 위치 도메인 쉐이더(131)는 패치 좌표(u, v)에 함수(예를 들어, 2 차 다항식 또는 3 차 다항식)를 적용하여 정점의 위치를 나타내는 정점 파라미터, 예를 들어 파라미터(x, y, z, w)를 생성한다. 위치 도메인 쉐이더(131)에 의해 생성된 파라미터는 예시적인 그래픽 처리 시스템(112)의 다른 엔티티에 의한 후속 액세스를 위해 캐시(115)에 저장된다.
테셀레이터(125)는 또한 프리미티브들을 나타내는 정점들을 프리미티브 어셈블러(135)에 제공한다. 다수의 테셀레이션 엔진을 포함하는 테셀레이터(125)의 변형은 다수의 프리미티브들을 나타내는 다수의 정점들의 세트들을 프리미티브 어셈블러(135)에 동시에 또는 병렬로 제공할 수 있다. 프리미티브 어셈블러(135)는 제공된 정점들로부터 프리미티브들을 어셈블링하고, 예시적인 그래픽 처리 시스템(112)에 의해 생성된 최종 이미지에 영향을 미치지 않을 프리미티브들을 파이프 라인으로부터 제거하기 위해 하나 이상의 컬링(culling) 프로세스들을 수행한다. 예를 들어, 픽셀의 값에 영향을 미치기에는 너무 작거나 장면의 경계 박스 밖에 있는 픽셀의 값에만 영향을 주는 프리미티브들은 프리미티브 어셈블러(135)에 의해 사소하게 폐기된다. 다른 예로서, 프리미티브 어셈블러(135)는 백페이스 컬링(backface culling) 기술을 사용하여 스크린 상에 생성될 이미지를 생성하는데 사용되는 뷰포인트으로부터 멀어지는 프리미티브들을 컬링할 수 있다. 일부 변형 예에서, 프리미티브 어셈블러(135)는 또한 다른 폐기, 컬링, 시저링 또는 클리핑 기술을 구현할 수 있다.
프리미티브 어셈블러(135)는 프리미티브들의 영역에 기초하여 상이한 영역들의 래스터라이저에 프리미티브들을 선택적으로 라우팅한다. 프리미티브 어셈블러(135)는 프리미티브들의 영역들을 스크린의 픽셀들 수를 나타내는 임계 영역과 비교한다. 예를 들어, 임계 영역은 픽셀들의 2 x 2 배열에 대응할 수 있다. 프리미티브들의 영역은 프리미티브들을 둘러싸는 데 필요한 경계 박스의 최소 영역으로 나타낼 수 있다. 프리미티브의 영역이 임계 영역보다 작거나 같은 경우, 프리미티브 어셈블러(135)는 프리미티브를 복수의 작은 래스터라이저들(명확성을 위해 도 1에는 도시되지 않음) 중 하나에 라우팅하고, 이는 2 x 2 픽셀 경계 박스와 같은 더 작은 경계 박스에 둘러싸인 프리미티브에서 작동하도록 구성된다. 예를 들어, 작은 래스터라이저 제공되는 프리미티브들을 나타내기 위해 필요한 입력 좌표의 범위(및 제2 래스터라이저에 의해 생성된 중간 결과)는 작은 수의 비트로 표현, 예를 들어, 2 x 2 픽셀 경계 박스에 대응하는 임계 영역에 대한 10-20 비트로 표현된다. 복수의 더 작은 래스터라이저는 프리미티브들에 대해 동시에 또는 병렬로 동작한다. 예를 들어, 각각의 작은 래스터라이저는 프리미티브들 내부에 하나 이상의 픽셀을 열거하고(이는 서브디비젼 사변형, SDQ라고 지칭될 수 있다), 픽셀들에 대한 (u, v, z) 값을 보간하고, 출력 프래그먼트(fragment)들의 세트를 래스터화된 픽셀들로 채운다. 프리미티브 어셈블러(135)는 큰 래스터라이저들 및 작은 래스터라이저들을 포함하는 것으로 설명되지만(그리고 단일 임계 영역을 기초로 큰 또는 작은 래스터라이저로 프리미티브들을 라우팅하는 것), 프리미티브 어셈블러(135)의 몇몇 변형은 두 개 이상의 서로 다른 크기의 래스터라이저들을 포함할 수 있다. 이러한 변형 예에서, 프리미티브 어셈블러(135)는 프리미티브의 영역을 다수의 상이한 임계 영역들에 비교함으로써, 상이한 크기의 래스터라이저들에 프리미티브들을 라우팅한다.
스캔 컨버터(scan converter)(140)는 프리미티브 어셈블러(135)에 구현된 복수의 작은 래스터라이저들로부터 마이크로폴리곤들 또는 프래그먼트들을 수신한다. 프래그먼트들은 동시에 또는 병렬로 스캔 컨버터(140)에 제공된다. 스캔 컨버터(140)는 폴리곤들을 나타내는 픽셀들로 폴리곤들을 전환하는 스캔 전환을 수행 할 수 있다. 예를 들어, 스캔 컨버터(140)는 클럭 사이클 당 8 개 이상의 픽셀들의 레이트로 출력 프래그먼트들을 생성하기 위해 수신된 프래그먼트들을 처리할 수 있고, 이는 속성 도메인 쉐이더(attribute domain shader)(DS_ATTR)(145)에 제공된다. 일부 변형 예에서, 속성 도메인 쉐이더(145)는 입력 어셈블러(113)로부터 패치 정보를 수신한다. 속성 도메인 쉐이더(145)는 수신된 프래그먼트들(및 가능하다면, 입력 어셈블러(113)로부터의 정보)을 히용하여, 수신된 프래그먼트들(또는 픽셀)에 대한 법선(normal), 프래그먼트(또는 픽셀)에 대한 색상 값, 프래그먼트(또는 픽셀)의 텍스처 좌표 또는 프래그먼트(또는 픽셀)의 기타 속성을 계산할 수 있다. 속성 쉐이딩된 프래그먼트들(또는 픽셀들)은 픽셀 쉐이더(150)에 제공되고, 이는 조명(lighting), 그러나 맵핑(mapping), 음영 처리(shadowing), 반투명 결정(determining translucency) 등과 같은 입력 프래그먼트들(또는 픽셀들)에 대한 연산을 수행할 수 있다. 따라서, 픽셀 쉐이더(150)는 래스터화된 이미지 공간에서 동작한다. 일부 변형 예에서, 스캔 컨버터(140), 속성 도메인 쉐이더(145), 또는 픽셀 쉐이더(150)는, 여기에서 논의된 바와 같이 작은 래스터라이저들에 의해 이미 연산들이 수행 되었기 때문에, 전술 한 동작들 중 일부 또는 전부를 바이패싱 한다.
프리미티브 어셈블러(135)가 프리미티브의 영역이 임계 영역보다 크다고 결정하면, 프리미티브 어셈블러(135)는 프리미티브를 비교적 큰 래스터라이저(155)로 라우팅하고, 이는 2 x 2 픽셀들 보다 큰 경계 박스에 둘러싸인 프리미티브들에 대한 연산을 수행하기에 충분한 하드웨어를 사용하여 구현된다. 예를 들어, 보다 큰 프리미티브들은 16 내지 24 비트에 의해 표현되는 범위 내의 이미지 공간에서의 입력 좌표에 의해 표현될 수 있다. 결과적으로, 이 예에서, 큰 래스터라이저(155)는 40 내지 48 비트로 표현되는 범위 내의 중간 결과에 대해 연산할 수 있다. 일부 변형 예에서, 프리미티브 어셈블러(135)는 큰 래스터라이저(155)에 구현된 속성 도메인 쉐이더 160)에 클럭 사이클 당 하나의 프리미티브를 제공한다. 속성 도메인 쉐이더(160)는 속성 도메인 쉐이더(145)를 구현하는데 사용된 것과 동일한 하드웨어, 펌웨어, 또는 소프트웨어를 사용하여 선택적으로 구현될 수 있다. 일부 변형 예에서, 속성 도메인 쉐이더(160)는 입력 어셈블러(113)로부터 패치 정보를 수신한다. 속성 도메인 쉐이더(160)는 수신된 프리미티브들(및 가능하다면, 입력 어셈블러(113)로부터의 정보)을 이용하여 법선, 색상 값, 텍스처 좌표 등과 같은 프리미티브들의 속성을 계산할 수 있다. 그런 다음 속성들은 캐시(115)에 저장된다.
스캔 컨버터(165)는 또한 프리미티브 어셈블러(135)로부터 프리미티브들을 수신한다. 일부 변형 예에서, 스캔 컨버터(165)는 스캔 컨버터(140)를 구현하는데 사용되는 것과 동일한 하드웨어, 펌웨어 또는 소프트웨어를 사용하여 구현된다. 본원에서 논의된 바와 같이, 스캔 컨버터(165)는 수신된 프리미티브들을 처리하고 미리 결정된 픽셀 레이트로 픽셀 쉐이더(170)에 제공되는 픽셀들을 생성할 수 있다(선택적으로 픽셀들에 대해 깊이(depth) 테스트를 수행 한 후). 픽셀 쉐이더(170)는 캐시(115)로부터 검색된 프리미티브 속성들을 사용하여 픽셀들을 쉐이딩한다. 픽셀들 또는 래스터화된 프리미티브들을 쉐이딩하는 것은, 대응하는 프리미티브의 정점들에서 정의된 대응되는 값들로부터 픽셀에서의 색상 또는 밝기를 나타내는 값들을 보간하는 것과 같은 연산들을 포함하며, 이는 쉐이더에 의해 구현된 하나 이상의 알고리즘들에 따라 텍스처 또는 다른 데이터와 결합됩니다. 따라서, 픽셀 쉐이더(170)는 래스터화된 이미지 공간에서 동작한다. 일부 변형 예에서, 픽셀 쉐이더(170)는 픽셀 쉐이더(150)를 구현하는데 사용되는 것과 동일한 하드웨어, 펌웨어 또는 소프트웨어를 사용하여 구현된다.
도 2는 일부 실시 예들에 따라 오브젝트(205)에 대한 경계 박스 및 깊이 값을 결정하기 위해 사용되는 예시적인 경계 체적(200)의 다이어그램이다. 예를 들어, 경계 체적(200)은, 도 1에 도시된 입력 어셈블러(113)에 의해 제공되는 패치 또는 도 1에 도시된 프리미티브 어셈블러(135) 또는 큰 래스터라이저(155)에 구현된 작은 래스터라이저를 사용하여 래스터화되는 프리미티브와 같은, 오브젝트(205)에 대한 경계 박스 및 깊이 값을 결정한다. 경계 체적(200)은 X-좌표 및 Y-좌표가 객체(205)의 렌더링된 이미지를 디스플레이하는데 사용되는 스크린의 평면 내에 있도록 배향된 좌표 시스템(210)으로 도시된다. 좌표 시스템(210)의 Z-좌표는 오브젝트(205)의 이미지를 렌더링하는데 사용되는 가상 카메라의 뷰포인트로부터의 거리를 나타내기 위해 배향된다. 일부 실시 예들에서, 좌표 시스템(210)의 원점은 가상 카메라의 위치에 대응한다.
경계 박스(215)(굵은 점선으로 표시)는 오브젝트(205)의 스크린의 X-Y 평면으로의 투영에 의해 뻗어있는 X-좌표의 범위(220) 및 오브젝트(205)의 스크린의 X-Y 평면으로의 투영에 의해 뻗어있는 Y-좌표의 범위(225)에 의해 정의된다. 오브젝트(205)의 깊이 값들은 가상 카메라의 뷰포인트에 가장 가까운 오브젝트(205)의 부분의 Z- 좌표를 나타내는 근접(near)-z 값(230)과, 가상 카메라의 뷰포인트로부터 가장 멀리 있는 오브젝트(205)의 부분의 Z-좌표를 나타내는 먼(far)-z 값(235)을 포함한다. 본 명세서에서 논의된 바와 같이, 경계 박스(215)는 픽셀들의 배열에 의해 표현될 수 있다. 프리미티브의 영역은 경계 박스(215)에 대응되는 임계 영역과 비교되어 프리미티브를 상이한 래스터라이저들로 선택적으로 라우팅할 수 있다.
도 3은 일부 실시 예들에 따른 그래픽 처리 시스템의 부분(300)의 제1 예에 대한 블록도이다. 부분(300)은 도 1에 도시된 테설레이터(125)와 같은 테설레이터(305)를 포함한다. 따라서 테셀레이터(305)의 일부 변형은, 예를 들어, 테셀레이션 인자들에 기초하여 입력 오브젝트들을 테셀레이션함으로써, 입력 오브젝트에 대응하는 프리미티브들을 식별하는 정보를 생성할 수 있다. 프리미티브들을 식별하는 정보는 프리미티브들과 연관된 포인트들 또는 정점들을 정의하는 정보 및 사변형들과 같은 폴리곤들을 특징으로 하는 정보를 포함한다. 포인트들 또는 정점들을 정의하는 정보는 쉐이더(310)에 제공된다. 예를 들어, 테셀레이터(305)는 클록 사이클 당 8 개의 포인트들 또는 정점들을 정의하는 정보를 쉐이더(310)에 제공할 수 있다. 사변형들과 같은 폴리곤들을 특징화하는 정보는 도 1에 도시된 프리미티브 어셈블러(135)에 대응하는 프리미티브 어셈블러(315)에 제공된다. 예를 들어, 테셀레이터(305)는 클럭 사이클 당 8 개의 사변형을 특징화 하는 정보를 프리미티브 어셈블러(315)에 제공할 수 있다.
쉐이더(310)는 포인트 또는 정점의 위치를 나타내는 정점 파라미터, 예를 들어 파라미터(x, y)를 패치 좌표(u, v)로 변환하기 위한 변환 요소(transform element)(311)를 포함한다. 쉐이더(310)의 도메인 쉐이더(312)는 포인트들 또는 정점들을 버퍼(320)에 제공하기 전에 포인트들 또는 교치점들에 대한 쉐이딩 연산을 수행하는데 사용된다. 일부 변형 예에서, 버퍼(320)는 도 1에 도시된 메모리(114)와 같은 메모리 또는 도 1에 도시된 캐시(115)와 같은 캐시에 구현된다. 패치의 에지 상의 정점들은 일부 실시 예에서 패치의 내부에 있는 정점들과 다르게 인덱싱되므로, 상이한 정점들은 메모리 및 버퍼(320)의 상이한 베이스 어드레스를 사용하여 참조된다. 에지 정점들 및 내부 정점들의 어드레스들은 본원에서 "상부(Top)", "하부(Bottom)", "좌(Left)", "우(Right)" 및 "내부(Internals)"로 지칭된다.
프리미티브 어셈블러(315)는 버퍼(320)로부터 포인트들 또는 정점들을 정의하는 정보를 검색할 수 있는 포인트 페치 블록(point fetch block)(325)을 포함한다. 예를 들어, 포인트 페치 블록(325)은, 버퍼(320)가 프리미티브 어셈블러(315)에 구현된 레지스터들의 세트(330)에 요청된 포인트들 또는 정점들을 제공하게 하는 명령 또는 요청뿐만 아니라, 버퍼(320)에 저장된 포인트들 또는 정점들에 대한 어드레스를 제공할 수 있다. 레지스터(330)는 "상부", "하부", "좌", "우"및 "내부"와 같은 상이한 유형의 정점들과 관련된다. 포인트 페치 블록(325)은 제어 신호를 레지스터들(330)로부터 입력으로서 정보를 수신하는 멀티플랙서(335)에 제공한다. 제어 신호의 값은 멀티플랙서(335)에 의해 출력되는 입력(예를 들어, 레지스터들(330) 중 하나의 콘텐츠)을 결정한다.
멀티플랙서(335)로부터의 정보 출력은 테셀레이터(305)에 의해 프리미티브 어셈블러(315)에 제공된 사변형에 대해 백페이스 컬링을 수행하는 컬링 블록들(340)에 제공된다. 컬링 블록들(340)의 일부 실시 예들은 다른 유형의 컬링, 클리핑(clipping), 시저링 등을 수행하도록 또한 구성된다. 컬링 프로세스를 겪은 사변형들은 블록(340)으로부터 경계 박스 축소 블록(345)으로 방출된다. 사변형들의 영역들은 픽셀들의 수와 배열로 표시되는 임계 영역과 비교된다. 예를 들어 사변형들의 영역들은 픽셀들의 2 x 2 배열과 비교될 수 있다. 임계 영역보다 큰 사변형들은 래스터화를 위해 큰 래스터라이저(LR)(350)에 제공된다. 임계 영역보다 작은 사변형들은 임계 영역에 대응되는 치수로 축소된 그들의 경계 박스들을 갖는다. 예를 들어, 픽셀들의 2 x 2 배열보다 작은 사변형들의 경계 박스들은 2 x 2이 치수로 축소될 수 있다. 경계 박스 축소는 사변형의 정점들의 좌표로부터 경계 박스의 원점 값을 빼는 것을 포함할 수 있다.
경계 박스 축소 후에, 임계 영역보다 작은 사변형들은 작은 사변형들을 동시에 또는 병렬로 래스터화할 수 있는 복수의 작은 래스터라이저들(355)에 제공된다. 예를 들어, 프리미티브 어셈블러(315)는 8 개의 사변형들을 병렬로 래스터화하도록 구성된 작은 래스터라이저들(355)를 포함할 수 있다. 큰 래스터라이저(LR)(350)에서 큰 사변형들을 래스터화하고 작은 래스터 라이저(SR)(355)에서 작은 사변형들을 래스터화함으로써 생성된 픽셀들은 픽셀 스트림들을 단일 스트림으로 병합하는 멀티플랙서(360)에 제공된다. 병합된 픽셀 스트림은 도 1에 도시된 스캔 컨버터들(140, 165)의 일부 실시 예들에 대응하는 스캔 컨버터(365)에 제공된다. 큰 래스터라이저(LR)(350) 및 작은 래스터라이저(SR)(355)가 도 3에 도시된 실시 예에서 개별적인 사변형들의 스트림들을 처리하지만, 후술하는 바와 같이 큰 래스터라이저(350)의 일부 변형은 작은 래스터라이저(SR355)와 직렬로 구현된다. 이 경우, 큰 래스터라이저(LR)(350)는 작은 래스터라이저(355)에 의해 생성된 픽셀들에 대한 일부 또는 모든 래스터화 연산들을 바이패스 한다.
도 4는 일부 실시 예들에 따른 그래픽 처리 시스템의 부분(400)의 제2 예에 대한 블록도이다. 부분(400)은 도 3에 도시된 부분(300)의 제1 예에서 대응하는 엔티티들과 유사하거나 동일한 엔티티들을 포함한다. 이들 엔티티들은 동일한 참조 번호로 표시된다. 예를 들어, 부분(400)은 테셀레이터(305), 쉐이더(310), 프리미티브 어셈블러(315), 버퍼(320), 포인트 페치 블록(325), 레지스터들의 세트(330), 멀티플랙서(335), 컬링 블록(340) 및 스캔 컨버터(365)를 포함한다.
부분(400)은 큰 래스터라이저(410)와 직렬로 구현되는 복수의 작은 래스터라이저들(405)을 포함하기 때문에, 부분(400)은 도 3에 도시된 부분(300)과 다르다. 따라서, 부분(400)은 프리미티브의 영역과 임계 영역의 비교에 기초하여 프리미티브들을 작은 래스터라이저들(405) 또는 멀티플랙서(415)로 선택적으로 라우팅하는 경계 박스 축소 블록(401)을 포함한다. 임계 영역보다 큰 사변형들은 멀티플랙서(415)에 직접 제공된다. 임계 영역보다 작은 사변형들은 경계 박스 축소 블록(401)에 의해 임계 영역에 대응하는 치수로 축소된 경계 박스들을 갖는다. 예를 들어, 픽셀들의 2 x 2 배열보다 작은 사변형들의 경계 박스들은 2 x 2 치수로 축소될 수 있다. 경계 박스 축소는 사변형의 정점들의 좌표로부터 경계 박스의 원점 값을 빼는 것을 포함할 수 있다.
경계 박스 축소 후에, 임계 영역보다 작은 사변형들은 작은 사변형들을 동시에 또는 병렬로 래스터화할 수 있는 복수의 작은 래스터라이저들(405)에 제공된다. 예를 들어, 프리미티브 어셈블러(315)는 8 개의 사변형들을 병렬로 래스터화하도록 구성된 작은 래스터라이저들(405)를 포함할 수 있다. 작은 래스터라이저들(405)에서 작은 사변형들을 래스터화함으로써 생성된 픽셀들은 멀티플랙서(360)에 제공되고, 이는 작은 래스터라이저(405)에 의해 생성된 래스터화된 픽셀 스트림들과 큰 사변형들을 단일 스트림으로 병합하고, 이는 그 후 큰 래스터라이저(410)에 제공된다. 스트림의 큰 사변형들은 픽셀들을 생성하기 위해 큰 래스터라이저(410)에 의해 래스터화된다. 큰 래스터라이저(410)는 작은 래스터라이저들(405)가 이미 필요한 래스터화의 일부 또는 전부를 이미 수행했기 때문에 작은 래스터라이저(405)에 의해 생성된 픽셀 스트림들에 대해 일부 또는 모든 동작을 바이패스한다. 큰 래스터라이저(410)는 스캔 컨버터(365)에 제공되는 픽셀 스트림을 출력한다.
도 5는 일부 실시 예들에 따른 다수의 테셀레이션 엔진들(510)을 갖는 테셀레이터(505)를 포함하는 그래픽 처리 시스템의 일부(500)의 블록도이다. 부분(500)은 도 1에 도시된 예시적인 그래픽 처리 시스템(112)의 대응 부분들을 구현하는데 사용될 수 있다. 테셀레이션 엔진들(510) 중 하나만 명료성을 위해 참조 부호로 표시되어있다. 테셀레이터(505)는 입력 어셈블러에 의해 생성된 패치들과 같은 입력 오브젝트들의 스트림을 수신한다. 테셀레이션 엔진들(TE)(510) 각각은 테셀레이션 인자들의 세트에 기초하여 입력 오브젝트를 독립적으로 테셀레이션할 수 있다. 따라서, 테셀레이션 엔진들(510)은 복수의 입력 오브젝트들을 동시에 또는 병렬로 테셀레이션하여 클럭 사이클마다 다수의 프리미티브들을 생성할 수 있다. 테셀레이션 엔진들(510)에 의해 생성된 프리미티브들은 프리미티브 어셈블러(515)에 제공된다.
라우터(520)는 테셀레이션 엔진들(510)에 의해 생성된 프리미티브들을 수신한다. 예를 들어, 라우터(520)는 테셀레이션 엔진들(510)으로부터 클럭 사이클 당 8 개의 사변형들을 수신할 수 있다. 라우터(520)는 사변형들의 영역들을 임계 영역과 비교하고 그 비교에 기초하여 사변형들을 선택적으로 라우팅하도록 구성된다. 임계 영역보다 큰 사변형들은 본 명세서에서 논의된 바와 같이 수신된 사변형들을 래스터화하고 픽셀 스트림을 스캔 변환기(530)에 제공하도록 구성된 큰 래스터라이저(525)로 라우팅된다. 임계 영역보다 작은 사변형들은 사변형의 경계 박스를 임계 영역에 대응하는 치수로 축소 시키도록 구성된 경계 박스 축소 블록(535)으로 라우팅된다. 경계 박스 축소 블록(535)은 래스터화를 위해 복수의 작은 래스터라이저들(540) 중 하나에 축소된 경계 박스를 갖는 사변형들을 제공한다. 작은 래스터 라이저들(540)는 수신된 사변형들을 동시에 또는 병렬로 래스터화할 수 있으며, 이는 프리미티브 어셈블러(515)가 더 큰 체적의 사변형들을 처리하게 한다. 작은 래스터라이저들(540)에 의해 생성된 픽셀 스트림은 스캔 컨버터(530)와 동일하거나 상이할 수 있는 스캔 컨버터(545)에 제공된다. 작은 사변형들을 작은 래스터라이저들(540)로 선택적으로 라우팅하는 것은 프리미티브 어셈블러(515)의 처리량을 증가시키고, 프리미티브 어셈블러(515)가 다수의 테셀레이션 엔진들(510)을 구현하는 그래픽 처리 시스템에서 병목 현상이 될 가능성을 감소시킨다.
도 6은 일부 실시 예들에 따른 병렬 래스터라이저(600)의 블록도이다. 병렬 래스터라이저(600)는 입력 프리미티브들을 래스터화하기 위한 복수의 작은 래스터라이저들(605)을 포함한다. 명료함을 위해, 작은 래스터라이저들(605) 중 단지 하나만이 참조 번호로 표시되어있다. 병렬 래스터라이저(600)는 도 3에 도시된 작은 래스터라이저들(355), 도 4에 도시된 작은 래스터라이저들(405) 및 도 5에 도시된 작은 래스터라이저들(540)의 일부 실시 예들을 구현하는데 사용될 수 있다. 병렬 래스터라이저(600) 내의 8 개의 작은 래스터라이저들(605)은 8 개의 프리미티브들에 대해 동시에, 또는 병렬로 동작하며, 이는 몇몇 변형에서 서브디비션 사변형들로 지칭된다. 예를 들어, 작은 래스터라이저들(605)은 대응하는 개수의 입력 사변형들(Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7)에 대해 동작할 수 있다. 8 개의 작은 래스터라이저들(605)은 단일-픽셀 사변형들로부터 클럭 사이클 당 8 개의 픽셀들을 생성할 수 있다. 그러나, 병렬 래스터라이저(600)의 일부 실시 예가 클럭 사이클 당 더 많거나 적은 수의 입력 프리미티브들을 처리할 수 있도록 작은 래스터라이저들의 수는 더 크거나 작을 수 있다.
크로스바 스위치(crossbar switch)(610)는 입력 사변형들을 대응되는 수의 대기열들(615)에 분배한다(하나의 대기열(615)만이 명확성을 위해 참조 번호로 표시됨). 대기열들(615)의 깊이는 입력 사변형들을 처리하는 데 필요한 대기 시간을 보상하도록 선택된다. 예를 들어, 각 사변형에 대한 경계 박스의 처리는 4 x 4 경계 박스의 경우 최대 4 클럭 사이클을, 8 x 8 경계 박스의 경우 최대 16 클럭 사이클을 소요할 수 있다. 따라서 대기열들(615)은 4 x 4 경계 박스들을 갖는 4 개의 계류중인 사변형들을 유지하기 위해 4 개의 엔트리들의 깊이로 구성될 수 있고, 8 x 8 경계 박스들을 갖는 16 개의 계류중인 사변형들을 유지하기 위해 16 개의 엔트리들의 깊이로 구성될 수 있다.
제어 유닛 (620)은 크로스바 스위치(610) 및 하나 이상의 대기열들(615)에 시그널링을 제공하여 하나 이상의 입력 사변형들이 대응하는 대기열들(615)에 제공되게 할 수 있다. 일부 변형 예에서, 제어 유닛(620)은 클럭 사이클 당 대기열들(615) 각각에 단지 하나의 사변형을 푸시하도록 제한된다. 제어 유닛(620)은 작은 래스터라이저들(605)이 사변형의 래스터화를 완료하고 대기열들(615) 중 대응하는 하나로부터 새로운 사변형을 검색하는데 이용 가능하다는 것을 나타내는 정보와 같은 피드백 정보를 작은 래스터 라이저들(605)로부터 수신한다. 이용 가능한 작은 래스터라이저들(605)은 대응하는 대기열(615)로부터 사변형을 검색한다. 제어 유닛(620)은 크로스바 스위치(610)가 이용 가능한 작은 래스터라이저(605)에 사변형을 제공하는 대기열(615)에 사변형을 제공하게하는데 필요한 시그널링을 생성하기 위해 수신된 피드백 정보를 사용한다.
작은 래스터라이저들(605) 각각은 사변형을 수신하고 사변형에 대한 함수들 세트를 구성하도록 구성된다. 본원에 사용된 용어 "함수"은 사변형의 일부를 한정하는 선형 함수를 지칭한다. 예를 들어, 반 평면 함수(half plane functional)는 사변형의 에지를 나타내는 데 사용될 수 있는 반 평면 또는 라인을 나타내는 표현식이다. 4 개의 함수들이 사변형의 4 개의 외부 에지들을 나타내는 데 사용된다. 하나의 추가 함수는 사변형의 대각선을 나타내기 위해 사용된다. 그 다음, 작은 래스터라이저(605)에 의해 처리되는 사변형에 대한 함수들에 기초하여 커버리지 마스크(coverage mask)가 결정된다. 예를 들어, 작은 래스터라이저(605)는 픽셀들의 2 x 2 세트들에 대한 커버리지 마스크를 구성할 수 있고(쿼드들(625), 명확성을 위해 단지 하나만이 참조 부호로 표시됨), 이는 픽셀의 영역까지의 각 함수의 반 평면을 확장을 요구한다. 작은 래스터라이저(605)는 또한 좌표(u, v, z)의 기울기(gradient)들을 준비하여 텍스쳐 값들과 같은 특성의 보간을 수행한다. 그 다음, 작은 래스터라이저(605)는 커버된 2x2 쿼드들(625)을 열거하고, 커버리지 마스크를 구성하기 위해 2 x 2 쿼드들(625) 내의 함수 값을 사용한다. 또한, 작은 래스터라이저(605)는 좌표(u, v, z)의 값을 평가한다.
작은 래스터라이저들(605) 각각은 각 클럭 사이클 동안 픽셀 캐시(630)에 좌표(u, v, z)의 4 세트의 값들 및 2 x 2 쿼드(625), 4-비트 커버리지 마스크를 출력한다. 작은 래스터라이저(605)에 의해 생성된 값들은 픽셀 캐시(630)에 캐싱된다. 도시된 실시 예에서, 최대 8 개의 2x2 픽셀 쿼드들이 각 클록 사이클에서 픽셀 캐시(630)에 추가된다. 따라서, 픽셀 캐시(630)는 이러한 픽셀 쿼드(pixel quad)들의 흐름을 수용하기 위한 뱅킹 스킴(banking scheme)을 구현할 수 있다. 몇몇 경우에, 픽셀 캐시(630)에 제공되는 하나 이상의 쿼드들(625)은 서로 오버랩되고 보완되다. 픽셀 캐시(630)는 따라서 쿼드들(625)을 분류하고 오버랩하는 쿼드들(625)을 체크하도록 구성될 수 있다. 일부 변형 예에서, 픽셀 캐시(630)는 4 x 2 픽셀 타일들을 사용하여 구현된다. 픽셀 캐시(630)는 또한 상이한 좌표를 갖는 4x2 타일에 겹쳐 쓰기(overwriting), 캐시가 공간 부족인 경우, 전체 4x2 커버리지 마스크 및 출력 인터페이스 상의 유휴 클럭을 제거하는 것과 같은 퇴거 정책(eviction policy)을 구현한다. 픽셀 캐시(630) 내의 4 x 2 픽셀 타일들은 하나 이상의 스캔 컨버터들(635, 640)에 의해 검색되거나 이들로 제공될 수 있으며, 이는 픽셀들의 깊이 값들(z)에 기초하여 픽셀들에 대한 교합(occlusion) 컬링과 같은 연산을 수행할 수 있다.
작은 래스터라이저들(605)의 일부 실시 예들은 다음 의사 코드(pseudocode)에 기술된 래스터라이저 알고리즘과 같은 래스터라이저 알고리즘에 따라 동작하도록 구성된다:
template <int _H, int _V, int >
bool rasterizer (quad &prim, edge_f &edge, int32 *det,
int clock, pixels<_V, _H> &outPix) {
// setup
// v0-----v1
// | / | | x1 x2 x |
// | + / | f<v1,v2>(x,y) = | y1 y2 y |
// | / | | 1 1 1 |
// | / - |
// | / |
// v2-----v3
// the v1->v2 functional is used for both triangles; its sign determines
// triangle affiliation while the walk is done using exterior edges
// vertex of a flipped triangle is moved onto the internal edge
edge_f v1v2 (prim.v [1], prim.v [2]);
edge_f v2v1 (prim.v [2], prim.v [1]);
if (!v1v2.right) {
// rotate to always have A in f<v1,v2>(x,y) positive
// needed?
swap (prim.v [1], prim.v [2]);
swap (prim.v [0], prim.v [3]);
v1v2 = edge_f (prim.v [1], prim.v [2]); // or just negate the functional
}
edge_f edge [6];
edge [4] = v1v2.right ? v1v2 : v2v1;
edge [5] = v1v2.right ? v2v1 : v1v2;
int32 det [2];
det [0] = edge [4].eval (prim.v [0]);
det [1] = edge [5].eval (prim.v [3]);
int32 v0_sign = det [0] > 0; // check for 0 area too
int32 v3_sign = det [1] > 0;
// calculate edge functionals
edge [0] = v0_sign? edge_f (prim.v [2], prim.v [0]) : // v2v0
edge_f (prim.v [2], prim.v [1]); // null triangle
edge [1] = v0_sign? edge_f (prim.v [0], prim.v [1]) : // v0v1
edge_f (prim.v [2], prim.v [1]); // null triangle
edge [2] = v3_sign? edge_f (prim.v [1], prim.v [3]) : // v1v3
edge_f (prim.v [1], prim.v [2]); // null triangle
edge [3] = v3_sign? edge_f (prim.v [3], prim.v [2]) : // v3v2
edge_f (prim.v [1], prim.v [2]); // null triangle
// position the seed on the grid
// find 2x2 tile origin and area in 2x2 tiles
prim.area.x += prim.origin.x + _H - 1;
prim.size.y += prim.origin.x + _H - 1;
prim.origin.x &= POS_FRAC_MASK & POS_ODD_MASK;
prim.origin.y &= POS_FRAC_MASK & POS_ODD_MASK;
prim.size.x -= prim.origin.x;
prim.size.y -= prim.origin.x;
prim.size.x /= _H;
prim.size.y /= _V;
// calculate the seed for all four functionals
int32 seed [5];
for (int i = 0; i < 5; i ++) {
// prepare seeds
seed [i] = edge [i].c;
// correct seeds to evaluate 2x2 tiles
if (i >= 4)
break;
if ( edge [i].quadrant & 1) seed [i] += a * (_H - 1);
if ( edge [i].quadrant & 2) seed [i] += b * (_V - 1);
if (!edge [i].right) seed [i] --; // left edge excluded
}
// setup gradients for both triangles
gradient<24,4> du_0 (prim.v [0], prim.v [1], prim.v [2], POS_PARAM_U,
edge [1], edge [4], edge [0], det [0]);
gradient<24,4> dv_0 (prim.v [0], prim.v [1], prim.v [2], POS_PARAM_V,
edge [1], edge [4], edge [0], det [0]);
gradient<24,4> dz_0 (prim.v [0], prim.v [1], prim.v [2], POS_PARAM_Z,
edge [1], edge [4], edge [0], det [0]);
gradient<24,4> du_1 (prim.v [2], prim.v [1], prim.v [3], POS_PARAM_U,
edge [5], edge [2], edge [3], det [0]);
gradient<24,4> dv_1 (prim.v [2], prim.v [1], prim.v [3], POS_PARAM_V,
edge [5], edge [2], edge [3], det [0]);
gradient<24,4> dz_1 (prim.v [2], prim.v [1], prim.v [3], POS_PARAM_Z,
edge [5], edge [2], edge [3], det [0]);
// calculate the tile coverage mask
uint32 t_cnt = 0; // counter for valid tiles
bool *t_mask = new bool (prim.size.x * prim.size.y);
for (int i = 0; i < prim.size.x; i ++)
for (int j = 0; i < prim.size.y; y ++) {
for (int k = 0; !k || (t_mask [i * prim.size.x + j] && k < 4); k ++)
t_mask [i * prim.size.x + j] = seed [k] +
edge [k].a * j * _H +
edge [k].b * i * _V;
t_cnt += t_mask [i * prim.size.x + j];
}
// end of setup
//
// now per-clock actions
// first of all, get to the correct 2x2 tile
for (int i = 0, cnt = 0; i < prim.size.x; i ++)
for (int j = 0; i < prim.size.y; y ++)
if (t_mask [i * prim.size.x + j]) {
if (clock == cnt ++) {
offset.x = j * _H;
offset.y = i * _V;
i = prim.size.x; // end the outer loop
break;
}
}
// seed the functionals
int32 tile_seed [5];
bool valid = true;
for (int k = 0; k < 5 ; k ++) { // loop through functionals
tile_seed [i] = edge [i].eval (offset);
if (i < 4 && tile_seed < 0)
valid = false;
}
position offset, reverse; // offset is for v0v1v2, reverse is for v1v2v3
// calculate parameters for the tile
offset.u = du_0.eval (offset);
offset.v = dv_0.eval (offset);
offset.z = dz_0.eval (offset);
reverse.u = du_1.eval (offset);
reverse.v = dv_1.eval (offset);
reverse.z = dz_1.eval (offset);
// prepare output
outPix.origin = offset;
outPix.p [0].mask = valid;
outPix.p [0].u = tile_seed [4] > 0 ? offset.u : reverse.u;
outPix.p [0].v = tile_seed [4] > 0 ? offset.v : reverse.v;
outPix.p [0].z = tile_seed [4] > 0 ? offset.z : reverse.z;
for (int i = 0, ix = 0; i < _V; i ++)
for (int j = 0; j < _H; j ++, ix ++) {
if (!ix)
continue; // corner pixel is the seed
outPix.p [ix].mask = true;
for (int k = 1; outPix.p [ix].mask && k < 4; k ++)
outPix.p [ix].mask = tile_seed [k] + edge [k].a * i + edge [k].b * j > 0;
// only evaluate parameters for covered pixels
if (outPix.p [ix].mask) {
bool side = tile_seed [4] + edge [4].a * i + edge [4].b * j > 0;
outPix.p [ix].u = side ? du_0.a * i + du_0.b * i + offset.u :
du_1.a * i + du_1.b * i + reverse.u;
outPix.p [ix].v = side ? dv_0.a * i + dv_0.b * i + offset.v :
dv_1.a * i + dv_1.b * i + reverse.v;
outPix.p [ix].z = side ? dz_0.a * i + dz_0.b * i + offset.z :
dz_1.a * i + dz_1.b * i + reverse.z;
}
}
return clock >= t_cnt - 1;
};
도 7은 일부 실시 예들에 따른 큰 프리미티브(700) 및 대응되는 큰 경계 박스(705)의 도면이다. 프리미티브(700)는 도 1에 도시된 테셀레이터(125)와 같은 테셀레이터에 의해 생성될 수 있고 도 1에 도시된 프리미티브 어셈블러(135)와 같은 프리미티브 어셈블러에 제공될 수 있는 사변형이다. 경계 박스(705)는 프리미티브(700)를 둘러싸는 픽셀들(710)(명료성을 위해 하나만 참조 부호로 지시됨)의 배열에 의해 정의된다. 예를 들어, 경계 박스(705)는 픽셀들(710)의 16 x 16 배열에 의해 정의된다. 프리미티브(700)의 영역은 프리미티브를 큰 래스터라이저 또는 작은 래스터라이저들의 세트로 선택적으로 라우팅하기 위해 도 1에 도시된 프리미티브 어셈블러(135)에 의해 사용되는 임계 영역과 같은 임계 영역을 초과한다. 결과적으로, 프리미티브(700)는 더 큰 경계 박스에 의해 둘러싸인 프리미티브들을 처리하도록 구성된 큰 래스터라이저로 라우팅된다.
도 8은 일부 실시 예들에 따른 작은 프리미티브(800) 및 큰 경계 박스(805)의 도면이다. 프리미티브(800)는 도 1에 도시된 테셀레이터(125)와 같은 테셀레이터에 의해 생성될 수 있고 도 1에 도시된 프리미티브 어셈블러(135)와 같은 프리미티브 어셈블러에 제공될 수 있는 사변형이다. 경계 박스(805)는 프리미티브(800)를 둘러싸는 픽셀들(810)(명확성의 관점에서 하나만 참조 부호로 표시됨)의 배열에 의해 정의된다. 예를 들어, 경계 박스(805)는 픽셀 (810)들의 16 x 16 배열에 의해 정의된다. 프리미티브(800)의 영역은 프리미티브를 큰 래스터라이저 또는 작은 래스터라이저들의 세트로 선택적으로 라우팅하기 위해 도 1에 도시된 프리미티브 어셈블러(135)에 의해 사용되는 임계 영역과 같은 임계 영역보다 작거나 같다. 결과적으로, 경계 박스(805)는 프리미티브(800)에 대한 축소된 경계 박스(815)를 생성하기 위해 축소되고, 이는 그런 다음, 여기에 설명된 것처럼, 작은 경계 박스들로 둘러싸인 프리미티브들을 처리하도록 구성된 작은 래스터라이저들 중 하나로 라우팅된다.
도 9는 일부 실시 예들에 따라 프리미티브들의 영역들을 기초로 큰 또는 작은 래스터라이저들로 프리미티브들을 선택적으로 라우팅하는 방법(900)의 흐름도이다. 방법(900)은 도 1에 도시된 프리미티브 어셈블러(135), 도 3 및 도 4에 도시된 프리미티브 어셈블러(315), 또는 도 5에 도시된 프리미티브 어셈블러(515)의 일부 실시 예들에서 구현된다.
블록(905)에서, 테셀레이터로부터 수신된 사변형(quadrilateral)들과 같은 프리미티브들의 정점(vertex)들의 연결성은 처리될 다음 정점의 위치 원점(position origin)을 결정하기 위해 디코딩된다. 위치 원점은 이전 값, 에지 위치 버퍼의 값 또는 내부 위치 버퍼의 값의 재사용일 수 있다. 일부 변형 예들에서, 연결성의 디코딩은 클럭 레이트(clock rate) 당 8 개의 사변형들로 또는 그 이상으로 수행될 수 있다.
결정 블록(910)에서, 프리미티브 어셈블러는 사변형의 영역이 최대 픽셀 레이트 영역보다 큰지를 결정한다. 최대 픽셀 레이트 영역들의 예시들은 픽셀들의 2 x 2 배열, 픽셀들의 4 x 4 배열, 픽셀들의 8 x 8 배열 등에 의해 결정되는 픽셀 레이트들을 포함한다. 사변형의 영역이 최대 픽셀 레이트 영역보다 크면, 사변형이 래스터화(rasterization)를 위해 큰 래스터라이저로 전송된다(블록 915에서). 일부 변형 예들에서, 사변형은 클럭 당 하나의 삼각형의 레이트에서 큰 래스터라이저로 보내진다. 사변형의 영역이 최대 픽셀 레이트 영역보다 작은 경우, 방법(900)은 블록(920)으로 진행된다.
블록(920)에서, 사변형의 경계 박스가 감소된다. 경계 박스를 감소시키는 것은 경계 박스 내의 픽셀들의 수를 최대 픽셀 레이트 영역을 정의하는 수 및 배열에 대응하는 수 및 배열로 감소시키는 것을 포함한다.
블록(925)에서, 경계 박스의 원점이 사변형의 포인트들을 나타내는 좌표로부터 감산된다. 대각선 함수(diagonal functional)를 설정하여 사변형의 가시성을 평가할 수도 있고 백페이스 컬링(backface culling), 사소한 폐기(trivial discard) 및 뷰포트 시저링을 사변형에 적용할 수 있다. 이러한 프로세스를 겪은 사변형은 도 6에 도시된 대기열(615)과 같은 대기열들의 세트 중 하나로 방출된다. 방법(900)은 블록(930)으로 진행된다.
블록 (930)에서, 대기열들에 저장된 사변형들은 래스터화를 위해 대응되는 작은 래스터라이저로 보내진다. 작은 래스터라이저는 사변형의 에지 함수들(edge functionals)을 정의하고 좌표(u, v, z)의 보간(interpolation)을 위한 매개 변수를 정의한다. 콜스(coarse) 커버리지 마스크가 사변형에 대해 정의되고 반복적인 프로세스가 커버리지 마스크에 대해 수행되어 픽셀들의 2 x 2 쿼드들(quads)을 생성한다. 좌표(u, v, z)의 보간된 값들은 2 x 2 픽셀 쿼드들에 대해 생성된다.
블록(935)에서, 2 x 2 픽셀 쿼드들은 도 6에 도시된 픽셀 캐시(630)와 같은 캐시에 저장된다. 예를 들어, 픽셀 쿼드는 본원에 설명된 바와 같이 4 x 2 픽셀 타일들을 사용하고 대응되는 퇴거 정책을 구현하는 8-인터리브 픽셀 캐시에 저장될 수 있다. 블록(940)에서, 캐시에 저장된 픽셀 쿼드들은 본원에 설명된 바와 같이 스캔 컨버터(converter)로 보내진다.
일부 실시 예에서, 상술한 장치들 및 기술은 도 1 내지 도 8을 참조하여 전술한 그래픽 처리 시스템과 같은 하나 이상의 집적 회로(IC) 디바이스(집적 회로 패키지 또는 마이크로 칩이라고도 함)들을 포함하는 시스템에서 구현된다. 이러한 IC 디바이스들의 설계 및 제조에는 전자 설계 자동화(EDA) 및 컴퓨터 지원 설계(CAD) 소프트웨어 툴을 사용할 수 있다. 이러한 설계 툴들은 일반적으로 하나 이상의 소프트웨어 프로그램들로 표현된다. 하나 이상의 소프트웨어 프로그램은 하나 이상의 IC 장치들의 회로를 나타내는 코드상에서 동작하도록 컴퓨터 시스템을 조작하기 위해 컴퓨터 시스템에 의해 실행 가능한 코드를 포함하여, 회로를 제조하기 위해 제조 시스템을 설계 또는 적응시키기 위한 공정의 적어도 일부를 수행한다. 이 코드에는 명령어, 데이터 또는 명령어와 데이터의 조합이 포함될 수 있다. 설계 툴 또는 제조 툴을 나타내는 소프트웨어 명령어는 전형적으로 컴퓨팅 시스템에 액세스 가능한 컴퓨터 판독 가능 저장 매체에 저장된다. 마찬가지로, IC 디바이스의 설계 또는 제조의 하나 이상의 단계를 나타내는 코드는 동일한 컴퓨터 판독 가능 저장 매체 또는 다른 컴퓨터 판독 가능 저장 매체에 저장되고 액세스될 수 있다.
컴퓨터 판독 가능 저장 매체는 명령 및/또는 데이터를 컴퓨터 시스템에 제공하기 위해 사용 중에 컴퓨터 시스템에 의해 액세스 가능한 임의의 비 일시적 저장 매체 또는 비 일시적인 저장 매체들의 조합을 포함할 수 있다. 이러한 저장 매체는, 이에 국한되지는 않지만, 광학 매체(예를 들어, 콤팩트 디스크(CD), 디지털 다용도 디스크(DVD), 블루-레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비-휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리) 또는 MEMS(microelectromechanical systems)-기반 저장 매체를 포함할 수 있다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템(예를 들어, 시스템 RAM 또는 ROM)에 내장, 컴퓨팅 시스템에 고정적으로 부착(예를 들어, 자기 하드 드라이브), 컴퓨팅 시스템에 제거 가능하게 부착(예를 들어, 광학 디스크 또는 USB-기반 플래시 메모리) 또는 유선 또는 무선 네트워크를 통해 컴퓨터 시스템에 결합될 수 있다(예를 들어, 네트워크 액세스 가능 스토리지(NAS)).
일부 실시 예들에서, 전술한 기술의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비 일시적인 컴퓨터 판독 가능 저장 매체 상에 저장되거나 그렇지 않으면 명백하게 구현된 하나 이상의 세트들의 실행 가능 명령을 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때, 전술한 기술의 하나 이상의 양태를 수행하기 위해 하나 이상의 프로세서를 조작하는 명령 및 특정 데이터를 포함할 수 있다. 일시적이지 않은 컴퓨터 판독 가능 저장 매체는 예를 들어, 자기 또는 광학 디스크 저장 장치, 플래시 메모리와 같은 고체 상태 저장 장치, 캐시, 랜덤 액세스 메모리(RAM) 또는 다른 비 휘발성 메모리 장치 또는 장치 등을 포함할 수 있다. 일시적이지 않은 컴퓨터 판독 가능 저장 매체 상에 저장된 실행 가능한 명령어는 소스 코드, 어셈블리 언어 코드, 오브젝트 코드, 또는 하나 이상의 프로세서에 의해 해석되거나 다른 방식으로 실행 가능한 다른 명령어 포맷일 수 있다.
위에서 설명된 모든 활동이나 요소가 일반적인 설명에서 요구되는 것은 아니며, 특정 활동이나 장치의 일부가 필요하지 않을 수도 있으며, 그리고 설명된 내용 외에도 하나 이상의 추가 활동이 수행되고, 요소들이 추가될 수 있다. 또한, 활동들이 나열되는 순서가 수행되는 순서와 다를 수 있다. 또한, 개념들은 특정 실시 예를 참조하여 기술되었다. 그러나, 당업자는 이하의 청구 범위에 설명된 바와 같이 본 개시의 범위를 벗어나지 않고 다양한 변형 및 변경이 이루어질 수 있음을 이해할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 하며, 이러한 모든 수정은 본 발명의 범위 내에 포함되는 것으로 의도된다.
이점들, 다른 장점들 및 문제들에 대한 해결책이 특정 실시 예들과 관련하여 상술되었다. 그러나 이점, 장점, 문제점에 대한 해결책 및 임의의 이점, 장점 또는 발행하거나 보다 확연하게 되는 해결책을 야기할 수 있는 임의의 특징(들)은 일부 또는 모든 청구 범위의 결정적, 필수적인 특징으로 해석되어서는 안 된다. 또한, 개시된 주제는 본 명세서의 교시의 이점을 갖는 당업자에게 자명한 상이하지만 동등한 방식으로 수정되고 실시될 수 있기 때문에, 상술한 특정 실시 예는 단지 예시적인 것이다. 아래의 청구 범위에 기술된 것 이외에 도시된 구성 또는 설계의 세부 사항에 제한은 없다. 따라서, 상기 개시된 특정 실시 예는 변경되거나 수정될 수 있으며 모든 그러한 변형은 개시된 주제의 범위 내에서 고려되는 것이 명백하다. 따라서, 여기서 요구되는 보호는 이하의 청구 범위에 설명된 바와 같다.

Claims (20)

  1. 방법으로서,
    상기 방법은 프리미티브(primitive)를 제1 래스터라이저(rasterizer) 또는 복수의 제2 래스터라이저들 중 하나의 제2 래스터라이저로 선택적으로 라우팅(routing)하는 것을 포함하고,
    상기 복수의 제2 래스터라이저들은 상이한 프리미티브들에 대해 동시에(concurrently) 동작하고,
    상기 프리미티브는 상기 프리미티브의 영역(area)에 기초하여 선택적으로 라우팅되고,
    상기 프리미티브를 선택적으로 라우팅하는 것은, 상기 프리미티브의 상기 영역이 미리 결정된 수의 픽셀(pixel)들에 기초한 임계 영역(threshold area)보다 큰 것에 응답하여 상기 프리미티브를 상기 제1 래스터라이저로 라우팅하는 것을 포함하고,
    상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저로 선택적으로 라우팅하는 것은, 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저에 제공하기 전에, 상기 프리미티브의 경계 박스(bounding box)를 상기 미리 결정된 수의 픽셀들로 축소시키는 것을 포함하는 것을 특징으로 하는 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 프리미티브를 선택적으로 라우팅하는 것은, 상기 프리미티브의 상기 영역이 상기 임계 영역보다 작은 것에 응답하여 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저로 라우팅하는 것을 포함하는 것을 특징으로 하는 방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저로 선택적으로 라우팅하는 것은 또한, 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저에 제공하기 전에, 상기 프리미티브를 나타내는 포인트(point)들의 좌표들로부터 상기 경계 박스의 원점(origin)을 빼는 것을 포함하는 것을 특징으로 하는 방법.
  6. 제5항에 있어서,
    상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저로 선택적으로 라우팅하는 것은 또한, 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저에 제공하기 전에, 상기 프리미티브의 포인트들 또는 정점들(vertices)의 특성들을 나타내는 값들을 저장하기 위해 상기 프리미티브를 복수의 대기열(queue)들 중 하나의 대기열에 분배하는 크로스바 스위치(crossbar switch)로 상기 프리미티브를 선택적으로 라우팅하는 것을 포함하는 것을 특징으로 하는 방법.
  7. 제6항에 있어서,
    상기 복수의 대기열들의 깊이(depth)들은 상기 프리미티브의 상기 축소된 경계 박스 내에서의 좌표들을 처리하는 데 필요한 대기 시간(latency)들을 보상하도록 구성되는 것을 특징으로 하는 방법.
  8. 제1항에 있어서,
    상기 임계 영역은 픽셀들의 2 x 2 배열에 대응하는 것을 특징으로 하는 방법.
  9. 장치로서, 상기 장치는,
    제1 래스터라이저;
    상이한 프리미티브들에 대해 동시에 동작하는 복수의 제2 래스터라이저들; 그리고
    프리미티브를 상기 프리미티브의 영역에 기초하여 상기 제1 래스터라이저 또는 상기 복수의 제2 래스터라이저들 중 하나의 제2 래스터라이저로 선택적으로 라우팅하기 위한 라우터를 포함하고,
    상기 라우터는, 상기 프리미티브의 상기 영역이 미리 결정된 수의 픽셀들에 대응하는 임계 영역보다 큰 것에 응답하여 상기 프리미티브를 상기 제1 래스터라이저로 라우팅하기 위한 것이고,
    상기 장치는 또한,
    상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저에 제공하기 전에, 상기 프리미티브의 경계 박스를 상기 미리 결정된 수의 픽셀들로 축소시키기 위한 경계 박스 축소 블록(bounding box reduction block)을 포함하는 것을 특징으로 하는 장치.
  10. 삭제
  11. 제9항에 있어서,
    상기 라우터는, 상기 프리미티브의 상기 영역이 상기 임계 영역보다 작은 것에 응답하여 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저로 라우팅하기 위한 것인 것을 특징으로 하는 장치.
  12. 삭제
  13. 제9항에 있어서,
    상기 경계 박스 축소 블록은, 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저에 제공하기 전에, 상기 프리미티브를 나타내는 포인트들의 좌표들로부터 상기 경계 박스의 원점을 빼도록 구성되는 것을 특징으로 하는 장치.
  14. 제13항에 있어서,
    상기 장치는 또한,
    상기 복수의 제2 래스터라이저들과 연관된 복수의 대기열들과,
    여기서 상기 복수의 대기열들 각각은, 상기 프리미티브를 상기 복수의 제2 래스터라이저들 중 대응하는 하나의 제2 래스터라이저에 제공하기 전에, 상기 프리미티브의 포인트들 또는 정점들의 특성들을 나타내는 값들을 저장하도록 구성되며; 그리고
    상기 프리미티브를 상기 복수의 대기열들 중 하나의 대기열에 분배하기 위한 크로스바 스위치를
    포함하는 것을 특징으로 하는 장치.
  15. 제14항에 있어서,
    상기 복수의 대기열들의 깊이들은 상기 프리미티브의 상기 축소된 경계 박스 내에서의 좌표들을 처리하는 데 필요한 대기 시간들을 보상하도록 구성되는 것을 특징으로 하는 장치.
  16. 제9항에 있어서,
    상기 임계 영역은 픽셀들의 2 x 2 배열에 대응하는 것을 특징으로 하는 장치.
  17. 제9항에 있어서,
    상기 장치는 또한, 출력 프리미티브들을 생성하기 위해 입력 프리미티브들에 대해 동시에 테셀레이션(tessellation)을 수행하기 위한 복수의 테셀레이션 엔진(tessellation engine)들을 포함하는 테셀레이터(tessellator)를 포함하고,
    상기 라우터는 상기 출력 프리미티브들을 상기 출력 프리미티브들의 영역들에 기초하여 상기 제1 래스터라이저 또는 상기 복수의 제2 래스터라이저들 중 상기 하나의 제2 래스터라이저로 선택적으로 라우팅하도록 구성되는 것을 특징으로 하는 장치.
  18. 방법으로서, 상기 방법은,
    복수의 제1 래스터라이저들을 이용하여 제1 세트의 프리미티브들을 동시에 래스터화(rasterizing)하는 것과;
    제2 래스터라이저를 이용하여 제2 세트의 프리미티브들을 래스터화하는 것을 포함하고,
    상기 제1 세트의 프리미티브들은 상기 제2 세트의 프리미티브들을 둘러싸는 경계 박스들의 영역들보다 작은 영역들을 갖는 축소된 경계 박스들에 의해 둘러싸이는 것을 특징으로 하는 방법.
  19. 제18항에 있어서,
    상기 방법은 또한,
    상기 축소된 경계 박스들보다 큰 경계 박스들에 의해 둘러싸이는 제3 세트의 프리미티브들을 수신하는 것과,
    여기서 상기 제3 세트는 상기 제1 세트의 프리미티브들 및 상기 제2 세트의 프리미티브들을 포함하며; 그리고
    상기 복수의 제1 래스터라이저들을 이용하여 상기 제1 세트의 프리미티브들을 동시에 래스터화하기 전에, 상기 제1 세트의 프리미티브들의 경계 박스들을 상기 축소된 경계 박스들로 축소시키는 것을 포함하는 것을 특징으로 하는 방법.
  20. 제19항에 있어서,
    상기 제1 세트의 프리미티브들의 경계 박스들을 축소시키는 것은, 상기 프리미티브를 나타내는 포인트들의 좌표들로부터 상기 축소된 경계 박스의 원점을 빼는 것을 포함하는 것을 특징으로 하는 방법.
KR1020197003898A 2016-08-30 2017-08-29 병렬 마이크로폴리곤 래스터라이저들 KR102270750B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/251,914 2016-08-30
US15/251,914 US10062206B2 (en) 2016-08-30 2016-08-30 Parallel micropolygon rasterizers
PCT/US2017/049151 WO2018044909A1 (en) 2016-08-30 2017-08-29 Parallel micropolygon rasterizers

Publications (2)

Publication Number Publication Date
KR20190039126A KR20190039126A (ko) 2019-04-10
KR102270750B1 true KR102270750B1 (ko) 2021-06-29

Family

ID=61240654

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197003898A KR102270750B1 (ko) 2016-08-30 2017-08-29 병렬 마이크로폴리곤 래스터라이저들

Country Status (6)

Country Link
US (1) US10062206B2 (ko)
EP (1) EP3507764A4 (ko)
JP (1) JP2019530069A (ko)
KR (1) KR102270750B1 (ko)
CN (1) CN109716385B (ko)
WO (1) WO2018044909A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2575503B (en) * 2018-07-13 2020-07-01 Imagination Tech Ltd Scalable parallel tessellation
US11995767B2 (en) * 2020-08-17 2024-05-28 Intel Corporation Apparatus and method for compressing ray tracing acceleration structure build data

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130021358A1 (en) * 2011-07-22 2013-01-24 Qualcomm Incorporated Area-based rasterization techniques for a graphics processing system
JP2014096111A (ja) 2012-11-12 2014-05-22 Veldt Inc 3次元データ生成システム
JP2015528598A (ja) 2012-08-09 2015-09-28 クゥアルコム・インコーポレイテッドQualcomm Incorporated Gpuアクセラレーテッドパスレンダリング

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4949280A (en) * 1988-05-10 1990-08-14 Battelle Memorial Institute Parallel processor-based raster graphics system architecture
US5977977A (en) 1995-08-04 1999-11-02 Microsoft Corporation Method and system for multi-pass rendering
US6975318B2 (en) * 2002-06-25 2005-12-13 Intel Corporation Polygon binning process for tile-based rendering
US7551174B2 (en) 2003-12-23 2009-06-23 Via Technologies, Inc. Method and apparatus for triangle rasterization with clipping and wire-frame mode support
US8467089B2 (en) * 2008-11-24 2013-06-18 Xerox Corporation Systems and methods for line width control and pixel retagging
US8587581B2 (en) * 2009-10-15 2013-11-19 Nvidia Corporation Order-preserving distributed rasterizer
US8704836B1 (en) 2009-10-19 2014-04-22 Nvidia Corporation Distributing primitives to multiple rasterizers
US8970584B1 (en) 2011-06-24 2015-03-03 Nvidia Corporation Bounding box-based techniques for improved sample test efficiency in image rendering
US9633458B2 (en) * 2012-01-23 2017-04-25 Nvidia Corporation Method and system for reducing a polygon bounding box
US9218679B2 (en) * 2012-10-08 2015-12-22 Intel Corporation Reduced bitcount polygon rasterization
US9105125B2 (en) * 2012-12-05 2015-08-11 Advanced Micro Devices, Inc. Load balancing for optimal tessellation performance
US9626762B2 (en) 2014-04-15 2017-04-18 Qualcomm Incorporated Stochastic rasterization using enhanced stencil operations on a graphics processing unit (GPU)

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130021358A1 (en) * 2011-07-22 2013-01-24 Qualcomm Incorporated Area-based rasterization techniques for a graphics processing system
JP2015528598A (ja) 2012-08-09 2015-09-28 クゥアルコム・インコーポレイテッドQualcomm Incorporated Gpuアクセラレーテッドパスレンダリング
JP2014096111A (ja) 2012-11-12 2014-05-22 Veldt Inc 3次元データ生成システム

Also Published As

Publication number Publication date
US10062206B2 (en) 2018-08-28
US20180061124A1 (en) 2018-03-01
JP2019530069A (ja) 2019-10-17
KR20190039126A (ko) 2019-04-10
EP3507764A4 (en) 2020-03-11
CN109716385A (zh) 2019-05-03
WO2018044909A1 (en) 2018-03-08
EP3507764A1 (en) 2019-07-10
CN109716385B (zh) 2020-08-25

Similar Documents

Publication Publication Date Title
US9311738B2 (en) Path rendering by covering the path based on a generated stencil buffer
KR101952633B1 (ko) 고 분해능 디스플레이 버퍼들의 효율적인 구성을 위한 방법
US11823324B2 (en) Graphics processing method and system for processing sub-primitives
US10032308B2 (en) Culling objects from a 3-D graphics pipeline using hierarchical Z buffers
US20100289799A1 (en) Method, system, and computer program product for efficient ray tracing of micropolygon geometry
KR20170015884A (ko) 오브젝트 및/또는 프리미티브 식별자들을 추적하는 것에 의한 그래픽스 프로세싱 강화
US9530241B2 (en) Clipping of graphics primitives
TWI708208B (zh) 圖形處理系統
GB2571657A (en) Graphics processing using directional representations of lighting at probe positions within a scene
TWI611373B (zh) 路徑著色的最佳化三角形拓撲
TW201428676A (zh) 在上游著色器內設定下游著色狀態
GB2517032A (en) Rasterisation in graphics processing systems
KR102270750B1 (ko) 병렬 마이크로폴리곤 래스터라이저들
US20190129756A1 (en) Wave creation control with dynamic resource allocation
CN104050619B (zh) 具有共享边缘的模板然后覆盖路径渲染
US11715262B2 (en) Optimizing primitive shaders
ITMI20082342A1 (it) Modulo di renderizzazione per grafica a due dimensioni, preferibilmente basato su primitive di tipo bordo attivo
US10068372B2 (en) Method and apparatus for performing high throughput tessellation

Legal Events

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