KR20150110675A - 테셀레이션을 위한 도메인 좌표들의 출력 순서화 - Google Patents
테셀레이션을 위한 도메인 좌표들의 출력 순서화 Download PDFInfo
- Publication number
- KR20150110675A KR20150110675A KR1020157022451A KR20157022451A KR20150110675A KR 20150110675 A KR20150110675 A KR 20150110675A KR 1020157022451 A KR1020157022451 A KR 1020157022451A KR 20157022451 A KR20157022451 A KR 20157022451A KR 20150110675 A KR20150110675 A KR 20150110675A
- Authority
- KR
- South Korea
- Prior art keywords
- domain
- primitives
- diagonal strip
- coordinates
- tessellation
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
테셀레이션을 위한 시스템들 및 방법들이 개시되어 있다. 테셀레이션을 위하여, 테셀레이션 유닛은 도메인을 복수의 부분들로 분할할 수도 있고, 여기서, 적어도 하나의 부분은 인접 부분이다. 테셀레이션 유닛은 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼에 저장될 가능성을 증가시키기 위하여, 인접 부분 내의 대각 스트립들을 따라 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
Description
이 개시물은 그래픽 프로세싱을 위한 기법들에 관한 것으로, 더욱 구체적으로, 그래픽 프로세싱에 있어서의 테셀레이션 (tessellation) 에 관한 것이다.
그래픽 프로세싱 유닛 (graphics processing unit; GPU) 은 테셀레이션 스테이지를 포함하는 그래픽 프로세싱 파이프라인을 구현할 수도 있다. 테셀레이션 스테이지는 표면을 GPU 상의 복수의 프리미티브 (primitive) 들로 변환하여, 더욱 상세한 표면으로 귀착된다. 예를 들어, GPU 는 높은 해상도의 표면에 대한 정보를 수신하는 것이 아니라, 거친 표면에 대한 정보를 수신할 수 있고, 높은 해상도의 표면을 생성할 수 있다. 높은 해상도의 표면을 정의하기 위하여 필요한 정보의 양은 거친 표면을 정의하기 위하여 필요한 정보의 양보다 훨씬 더 클 수도 있으므로, 거친 표면이 아니라, 높은 해상도의 표면에 대한 정보를 수신하는 것은 대역폭 비효율적일 수도 있다.
일반적으로, 이 개시물에서 설명된 기법들은 테셀레이션 유닛이 테셀레이션 동안에 생성된, 도메인 (domain) 내의 프리미티브 (primitive) 들의 도메인 좌표들을 출력하는 시퀀스 (sequence) 에 대한 것이다. 예를 들어, 테셀레이션 유닛은 도메인을 복수의 부분들로 분할할 수도 있고, 부분들 중의 적어도 하나는 인접 부분일 수도 있다. 테셀레이션 유닛은 대각 스트립 (diagonal strip) 들로 배열된 프리미티브들의 도메인 좌표들을 출력할 수도 있고, 여기서, 대각 스트립들은 인접 부분 내에 존재한다.
하나의 예에서, 개시물은 테셀레이션을 위한 방법을 설명한다. 이 방법은 테셀레이션 유닛으로 도메인을 복수의 부분들로 분할하는 단계를 포함한다. 이 예에서, 부분들 중의 적어도 하나는 인접 부분이다. 이 방법은 또한, 테셀레이션 유닛으로, 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계, 및 테셀레이션 유닛으로, 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계를 포함한다. 이 예에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행하거나 제 1 대각 스트립과 접하는 것 중의 하나이다. 이 방법은 또한, 테셀레이션 유닛으로, 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계를 포함한다. 이 예에서, 제 3 대각 스트립은 적어도 제 1 대각 스트립과 평행하다. 또한, 이 예에서, 제 3 대각 스트립 내의 프리미티브들의 수는 제 1 대각 스트립 및 제 2 대각 스트립 내의 프리미티브들의 수와는 상이하다.
하나의 예에서, 개시물은 테셀레이션 유닛을 포함하는 그래픽 프로세싱 유닛 (GPU) 을 포함하는 디바이스를 설명한다. 테셀레이션 유닛은 도메인을 복수의 부분들로 분할하도록 구성된다. 이 예에서, 부분들 중의 적어도 하나는 인접 부분이다. 테셀레이션 유닛은 또한, 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고, 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하도록 구성된다. 이 예에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행하거나 제 1 대각 스트립과 접하는 것 중의 하나이다. 테셀레이션 유닛은 또한, 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하도록 구성된다. 이 예에서, 제 3 대각 스트립은 적어도 제 1 대각 스트립과 평행하다. 또한, 이 예에서, 제 3 대각 스트립 내의 프리미티브들의 수는 제 1 대각 스트립 및 제 2 대각 스트립 내의 프리미티브들의 수와는 상이하다. 디바이스는 또한, 제 1, 제 2, 및 제 3 대각 스트립들 내의 프리미티브들의 출력된 도메인 좌표들 중의 하나 이상에 대응하는 패치 좌표 (patch coordinate) 들을 저장하도록 구성된 재이용 버퍼를 포함한다.
하나의 예에서, 개시물은 그래픽 프로세싱 유닛 (GPU) 을 포함하는 디바이스를 설명한다. GPU 는 도메인을 복수의 부분들로 분할하는 수단을 포함한다. 이 예에서, 부분들 중의 적어도 하나는 인접 부분이다. GPU 는 또한, 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단, 및 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단을 포함한다. 이 예에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행하거나 제 1 대각 스트립과 접하는 것 중의 하나이다. GPU 는 또한, 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단을 포함한다. 이 예에서, 제 3 대각 스트립은 적어도 제 1 대각 스트립과 평행하다. 또한, 이 예에서, 제 3 대각 스트립 내의 프리미티브들의 수는 제 1 대각 스트립 및 제 2 대각 스트립 내의 프리미티브들의 수와는 상이하다.
하나의 예에서, 개시물은 저장된 명령을 포함하는 컴퓨터 판독가능 저장 매체로서, 상기 명령은, 실행될 경우, 하나 이상의 프로세서들로 하여금 도메인을 복수의 부분들로 분할하게 하는, 상기 컴퓨터 판독가능 저장 매체를 설명한다. 이 예에서, 부분들 중의 적어도 하나는 인접 부분이다. 명령들은 또한, 하나 이상의 프로세서들로 하여금, 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하게 하고, 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하게 한다. 이 예에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행하거나 제 1 대각 스트립과 접하는 것 중의 하나이다. 명령들은 또한, 하나 이상의 프로세서들로 하여금, 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하게 한다. 이 예에서, 제 3 대각 스트립은 적어도 제 1 대각 스트립과 평행하다. 또한, 이 예에서, 제 3 대각 스트립 내의 프리미티브들의 수는 제 1 대각 스트립 및 제 2 대각 스트립 내의 프리미티브들의 수와는 상이하다.
하나 이상의 예들의 세부사항들은 첨부한 도면들 및 이하의 설명에서 기재된다. 다른 특징들, 목적들, 및 장점들은 설명 및 도면들로부터, 그리고 청구항들로부터 명백할 것이다.
도 1 은 이 개시물에서 설명된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 예를 예시하는 개념도이다.
도 2 는 이 개시물에서 설명된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 또 다른 예를 구현할 수도 있는 GPU 의 또 다른 예를 예시하는 개념도이다.
도 3 은 테셀레이션을 위한 버텍스 (vertex) 들의 도메인 좌표들을 출력하는 일 예의 기법을 예시하는 도면이다.
도 4 는 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 5 는 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 6 은 이 개시물에서 설명된 하나 이상의 예들에 따라 GPU 를 더욱 상세하게 예시하는 블록도이다.
도 7 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법을 예시하는 도면이다.
도 8 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 9 는 이 개시물에서 설명된 하나 이상의 예들에 따라 연결성 생성기가 출력하는 도메인의 인접 부분의 예를 예시하는 도면이다.
도 10 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 11 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 12 는 이 개시물에서 설명된 하나 이상의 예들에 따라 연결성 생성기가 출력하는 도메인의 인접 부분의 또 다른 예를 예시하는 도면이다.
도 13 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 14a 및 도 14b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다.
도 15a 및 도 15b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다.
도 16a 및 도 16b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다.
도 17 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 18 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 19 는 이 개시물에서 설명된 하나 이상의 예들에 따라 일 예의 동작을 예시하는 플로우차트이다.
도 20 은 이 개시물에서 설명된 하나 이상의 예들에 따라 일 예의 동작을 예시하는 또 다른 플로우차트이다.
도 21 내지 도 27 은 이 개시물에서 설명된 하나 이상의 예의 기법들을 구현함으로써, 그리고 하나 이상의 다른 기법들을 구현함으로써 달성된 결과들의 비교들을 예시하는 그래프들이다.
도 28 은 도 1 및 도 2 에서 도시된 바와 같이 GPU 를 포함하는 디바이스를 예시하는 블록도이다.
도 2 는 이 개시물에서 설명된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 또 다른 예를 구현할 수도 있는 GPU 의 또 다른 예를 예시하는 개념도이다.
도 3 은 테셀레이션을 위한 버텍스 (vertex) 들의 도메인 좌표들을 출력하는 일 예의 기법을 예시하는 도면이다.
도 4 는 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 5 는 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 6 은 이 개시물에서 설명된 하나 이상의 예들에 따라 GPU 를 더욱 상세하게 예시하는 블록도이다.
도 7 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법을 예시하는 도면이다.
도 8 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 9 는 이 개시물에서 설명된 하나 이상의 예들에 따라 연결성 생성기가 출력하는 도메인의 인접 부분의 예를 예시하는 도면이다.
도 10 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 11 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 12 는 이 개시물에서 설명된 하나 이상의 예들에 따라 연결성 생성기가 출력하는 도메인의 인접 부분의 또 다른 예를 예시하는 도면이다.
도 13 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 14a 및 도 14b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다.
도 15a 및 도 15b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다.
도 16a 및 도 16b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다.
도 17 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 18 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다.
도 19 는 이 개시물에서 설명된 하나 이상의 예들에 따라 일 예의 동작을 예시하는 플로우차트이다.
도 20 은 이 개시물에서 설명된 하나 이상의 예들에 따라 일 예의 동작을 예시하는 또 다른 플로우차트이다.
도 21 내지 도 27 은 이 개시물에서 설명된 하나 이상의 예의 기법들을 구현함으로써, 그리고 하나 이상의 다른 기법들을 구현함으로써 달성된 결과들의 비교들을 예시하는 그래프들이다.
도 28 은 도 1 및 도 2 에서 도시된 바와 같이 GPU 를 포함하는 디바이스를 예시하는 블록도이다.
랩톱 컴퓨터, 태블릿 컴퓨터들, 스마트폰들, 및 디지털 미디어 플레이어들과 같은 최신 이동 디바이스들은 CPU (Central Processing Unit; 중앙 프로세싱 유닛), 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 및 시스템 메모리를 포함한다. 애플리케이션을 실행하는 것의 일부로서 그래픽을 렌더링할 때, CPU 는 명령들 및 그래픽 데이터를 GPU 로 송신한다. 일부의 예들에서, 그래픽 데이터는, 2D 또는 3D 공간에서 포인트를 기술하는 하나 이상의 데이터 구조들을 포함할 수도 있는 버텍스들의 형태일 수도 있다.
CPU 상에서 실행되는 애플리케이션은 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 에 따라 GPU 와 통신할 수도 있다. 예를 들어, 애플리케이션은 2 개의 예들로서, Microsoft® 에 의해 개발된 DirectX® API 또는 크로노스 그룹 (Khronos Group) 에 의해 개발된 OpenGL® API 에 따라 GPU 와 통신할 수도 있다. 예시 및 이해를 위하여, 이 개시물에서 설명된 기법들은 DirectX 및 OpenGL API 들의 상황에서 일반적으로 설명된다. 그러나, 이 개시물의 양태들은 DirectX 및 OpenGL API 들로 제한되도록 간주되지 않아야 하고, 이 개시물에서 설명된 기법들은 다른 API 들에 마찬가지로 확장될 수도 있다.
DirectX 및 OpenGL 은 각각, GPU 에 의해 구현되어야 하는 그래픽 프로세싱 파이프라인들을 정의한다. 이 그래픽 프로세싱 파이프라인들은 고정-기능 (fixed-function) 스테이지들 뿐만 아니라, 프로그래밍가능한 스테이지들의 조합을 포함할 수도 있다. Direct3D 11 API 및 OpenGL 4.x API 와 같은 API 들의 일부의 최신 버전들은 GPU 에 의해 수행되어야 하는 테셀레이션 (tessellation) 프로세스를 포함한다.
테셀레이션 프로세스는 오브젝트 (object) 의 표면의 부분 (패치 (patch) 로서 지칭됨) 을 복수의 더 작은 부분들로 분할하는 것과, 더 작은 부분들을 함께 상호연결하는 것을 지칭한다. 이것은 테셀레이션 이전의 표면과 비교하여, 훨씬 더 상세한 표면으로 귀착된다. 테셀레이션은 CPU 상에서 실행되는 애플리케이션이 약간의 포인트들을 요구할 수도 있는 낮은 해상도를 갖는 표면을 정의하도록 하고, GPU 가 더욱 높은 해상도의 표면을 생성하도록 한다.
이 개시물의 양태들은 테셀레이션 유닛이 고정-기능 유닛일 것을 요구하지 않지만, 테셀레이션을 구현하기 위하여, GPU 는 고정-기능 유닛일 수도 있는 테셀레이션 유닛을 포함할 수도 있다. 테셀레이션 유닛의 예들은 (DirectX 파이프라인에서의) 테셀레이션 스테이지 및 (OpenGL 4.x 파이프라인에서의) 프리미티브 (primitive) 생성기를 포함한다. 테셀레이션 유닛은 도메인 내에서 프리미티브들을 구축하도록 구성될 수도 있다. 이 도메인은 패치와 혼동되지 않아야 한다. 패치는 렌더링되어야 하는 오브젝트의 표면의 부분이다. 도메인은 테셀레이션 유닛이 그 내에서 프리미티브들을 구축하는 템플릿 (template) 으로서 간주될 수도 있고, 패치로부터 분리되어 있다. 테셀레이션 유닛은 도메인 좌표들로 프리미티브들의 버텍스들을 정의할 수도 있다. 도메인 좌표들은, 테셀레이션 유닛에 국부적 (local) 이며 도메인 내의 포인트들을 정의하기 위하여 테셀레이션 유닛에 의해 이용되는 좌표계 (coordinate system) 에 기초하고 있다.
(DirectX 파이프라인에서의) 도메인 셰이더 (domain shader) 또는 (OpenGL 4.x 파이프라인에서의) 테셀레이션 평가 셰이더 (tessellation evaluation shader) 는 테셀레이션 유닛으로부터 도메인 좌표들을 수신할 수도 있고, 도메인 좌표들을 패치 좌표들로 변환한다. 패치 좌표들은 패치 내의 포인트들을 정의하기 위하여 GPU 에 의해 이용된 좌표계에 기초하고 있다. 도메인 셰이더 또는 테셀레이션 평가 셰이더는, 도메인 내의 프리미티브들의 버텍스들의 도메인 좌표들을 패치 내의 포인트들 (예를 들어, 패치 내의 프리미티브들의 버텍스들) 에 맵핑하고, 해상도를 패치에 추가하기 위하여 패치 내의 이 맵핑된 포인트들을 상호연결하는 것 (예를 들어, 해상도를 패치에 추가하기 위하여 패치 내의 프리미티브들을 추가함) 으로서 간주될 수도 있다.
일부의 예들에서, 테셀레이션 유닛은 프리미티브의 각각의 버텍스에 대한 도메인 좌표들을, 변환후 버텍스 캐시 (post-transformation vertex cache; PTVC) 로서 때때로 지칭된 재이용 버퍼에 출력할 수도 있다. 제어기는 재이용 버퍼가 테셀레이션 유닛에 의해 출력된 도메인 좌표들에 대한 패치 좌표들을 저장하는지 여부를 결정할 수도 있다. 제어기가 재이용 버퍼가 테셀레이션 유닛에 의해 출력된 도메인 좌표들에 대한 패치 좌표들을 저장하지 않는 것으로 결정할 경우, 제어기는 도메인 셰이더 또는 테셀레이션 평가 셰이더의 인스턴스 (instance) 로 하여금, 도메인 내의 프리미티브의 버텍스의 도메인 좌표들을 패치에 추가되어야 하는 프리미티브의 버텍스에 대한 패치 좌표들로 변환할 것을 실행하게 할 수도 있다. 다음으로, 제어기는 패치 좌표들을 재이용 버퍼에 저장할 수도 있다. 그러나, 제어기가 재이용 버퍼가 테셀레이션 유닛에 의해 출력된 도메인 좌표들에 대한 패치 좌표들을 이미 저장하는 것으로 결정할 경우, 제어기는 도메인 셰이더 또는 테셀레이션 평가 셰이더의 인스턴스로 하여금 실행하게 하지 않을 수도 있다.
일반적으로, 도메인 셰이더 또는 테셀레이션 평가 셰이더의 실행은 테셀레이션 프로세스를 느리게 할 수도 있는 상당한 프로세싱 시간을 요구할 수도 있다. 이 개시물에서 설명된 기법들은, 재이용 버퍼가 테셀레이션 유닛에 의해 출력된 프리미티브들의 버텍스들의 도메인 좌표들에 대한 패치 좌표들을 이미 저장할 가능성을 증가시키기 위하여, 테셀레이션 유닛이 도메인 내의 프리미티브들의 버텍스들을 출력할 수도 있는 시퀀스에 관한 것이다. 이것은 잠재적으로 도메인 셰이더 또는 테셀레이션 평가 셰이더의 실행의 더 적은 인스턴스들로 귀착될 수도 있고, 이것은 궁극적으로 다른 기법들과 비교하여, 테셀레이션 프로세스의 더욱 신속한 완료에 귀착할 수도 있다.
이 개시물에서 설명된 기법들에서는, 테셀레이션 유닛이 도메인에서의 프리미티브들의 버텍스들을 특별한 시퀀스로 출력할 수도 있다. 더욱 상세하게 설명된 바와 같이, 테셀레이션 유닛은 도메인의 부분 내의 프리미티브들의 버텍스들을 출력할 수도 있다. 예를 들어, 테셀레이션 유닛은 도메인을 복수의 부분들로 분할할 수도 있다. 부분들 중의 적어도 하나는 도메인 내의 인접 영역을 둘러쌀 수도 있고, 인접 부분으로서 지칭될 수도 있다. 더욱 상세하게 설명된 바와 같이, 도메인의 인접 부분은, 도메인 내의 프리미티브들을 배제하는 갭 (gap) 이 부분 내에 없음을 의미할 수도 있다.
더욱 상세하게 설명된 바와 같이, 테셀레이션 유닛은 프리미티브들의 버텍스들을 출력할 수도 있고, 여기서, 프리미티브들은 인접 부분 내의 하나 이상의 대각 스트립들로 배열된다. 예를 들어, 테셀레이션 유닛은 제 1 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있고, 여기서, 제 1 대각 스트립은 인접 부분 내에 존재한다.
제 1 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력한 후, 테셀레이션 유닛은 제 2 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있고, 여기서, 제 2 대각 스트립은 인접 부분 내에 존재한다. 일부의 예들에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행할 수도 있다. 다른 예들에서, 제 2 대각 스트립은 제 1 대각 스트립과 접할 수도 있다.
제 2 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력한 후, 다음으로, 테셀레이션 유닛은 제 3 대각 스트립 등등의 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있다. 제 3 대각 스트립은 제 1 대각 스트립과 평행할 수도 있다. 테셀레이션 유닛이 도메인의 부분들 중의 하나 내의 프리미티브들을 출력하는 것을 완료할 때까지, 테셀레이션 유닛은 대각 스트립들 내의 프리미티브들을 출력할 수도 있다. 테셀레이션 유닛은 도메인에서의 또 다른 부분 내의 프리미티브들을 실질적으로 유사한 방식으로 출력할 수도 있다.
도 1 은 이 개시물에서 설명된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 예를 예시하는 개념도이다. 도 1 은 그래픽 프로세싱 유닛 (GPU; 12), 시스템 메모리 (14), 및 중앙 프로세싱 유닛 (CPU; 16) 을 포함하는 디바이스 (10) 를 예시한다. 디바이스 (10) 의 예들은 이동 무선 디바이스들 (예를 들어, 무선 전화들), 비디오 디스플레이들을 포함하는 비디오 게임용 콘솔들, 이동 화상 회의 유닛들, 랩톱 컴퓨터들, 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 텔레비전 셋톱 박스들 등등을 포함하지만, 이것으로 제한되지 않는다.
CPU (16) 는 다양한 타입들의 애플리케이션들을 실행할 수도 있다. 애플리케이션들의 예들은 웹 브라우저들, 전자-메일 애플리케이션들, 스프레드시트 (spreadsheet) 들, 비디오 게임들, 또는 디스플레이를 위한 시청가능한 오브젝트들을 생성하는 다른 애플리케이션들을 포함한다. 하나 이상의 애플리케이션들의 실행을 위한 명령들은 시스템 메모리 (14) 내에 저장될 수도 있다. CPU (16) 는 추가의 프로세싱을 위하여, 생성된 시청가능한 오브젝트들의 그래픽 데이터를 GPU (12) 로 송신할 수도 있다.
예를 들어, GPU (12) 는 그래픽 데이터를 프로세싱하기 위하여 양호하게 기능하는, 대량 병렬 프로세싱을 허용하는 특화된 하드웨어일 수도 있다. 이러한 방법으로, CPU (16) 는 GPU (12) 에 의해 더욱 양호하게 처리되는 그래픽 프로세싱을 오프로딩 (offload) 한다. CPU (16) 는 특별한 애플리케이션 프로세싱 인터페이스 (application processing interface; API) 에 따라 GPU (12) 와 통신할 수도 있다. 이러한 API 들의 예들은 Microsoft® 에 의한 DirectX® API 및 크로노스 그룹에 의한 OpenGL® 을 포함하지만; 그러나, 이 개시물의 양태들은 DirectX 및 OpenGL API 들로 제한되지 않고, 개발되었거나, 현재 개발되고 있거나, 또는 미래에 개발될 다른 타입들의 API 들에 확장될 수도 있다.
GPU (12) 가 CPU (16) 로부터 그래픽 데이터를 수신하기 위한 방식을 정의하는 것에 추가하여, API 들은 GPU (12) 가 구현하기 위한 특별한 그래픽 프로세싱 파이프라인을 정의할 수도 있다. GPU (12) 는 도 1 에서, Direct3D 11 API 와 같은 DirectX 11.x API 에 의해 정의된 그래픽 프로세싱 파이프라인을 예시한다. 더욱 상세하게 설명된 바와 같이, 도 2 는 OpenGL 4.x API 의 그래픽 프로세싱 파이프라인을 예시한다.
CPU (16) 및 GPU (12) 의 예들은 디지털 신호 프로세서 (digital signal processor; DSP), 범용 마이크로프로세서, 주문형 집적 회로 (application specific integrated circuit; ASIC), 필드 프로그래밍가능한 로직 어레이 (field programmable logic array; FPGA), 또는 다른 등가의 집적 또는 개별 로직 회로부를 포함하지만, 이것으로 제한되지 않는다. 일부의 예들에서, GPU (12) 는 그래픽 프로세싱을 위해 적당한 대량 병렬 프로세싱 능력들을 GPU (12) 에 제공하는 집적 및/또는 개별 로직 회로부를 포함하는 특화된 하드웨어일 수도 있다. 일부의 사례들에서, GPU (12) 는 또한 범용 프로세싱을 포함할 수도 있고, 범용 GPU (GPGPU) 로서 지칭될 수도 있다. 이 개시물에서 설명된 기법들은 또한 GPU (12) 가 GPGPU 인 예들에 적용가능할 수도 있다.
시스템 메모리 (14) 는 하나 이상의 컴퓨터 판독가능 저장 매체들을 포함할 수도 있다. 시스템 메모리 (14) 의 예들은 랜덤 액세스 메모리 (random access memory; RAM), 판독 전용 메모리 (read only memory; ROM), 전기적 소거가능 프로그래밍가능한 판독 전용 메모리 (electrically erasable programmable read-only memory; EEPROM), 플래시 메모리 (flash memory), 또는 명령들 및/또는 데이터 구조들의 형태로 희망하는 프로그램 코드를 반송 또는 저장하기 위하여 이용될 수 있으며 컴퓨터 또는 프로세서에 의해 액세스될 수도 있는 임의의 다른 매체를 포함하지만, 이것으로 제한되지 않는다.
일부의 양태들에서, 시스템 메모리 (14) 는 CPU (16) 및/또는 GPU (12) 로 하여금 이 개시물에서 CPU (16) 및 GPU (12) 에 귀속된 기능들을 수행하게 하는 명령들을 포함할 수도 있다. 따라서, 시스템 메모리 (14) 는 저장된 명령들을 포함하는 컴퓨터 판독가능 저장 매체로서, 상기 명령들은, 실행될 경우, 하나 이상의 프로세서들 (예를 들어, CPU (16) 및 GPU (12)) 로 하여금 다양한 기능들을 수행하게 하는, 상기 컴퓨터 판독가능 저장 매체일 수도 있다.
일부의 예들에서, 시스템 메모리 (14) 는 비-일시적 (non-transitory) 저장 매체일 수도 있다. 용어 "비-일시적" 은 저장 매체가 반송파 또는 전파된 신호에서 구체화되지 않음을 표시할 수도 있다. 그러나, 용어 "비-일시적" 은 시스템 메모리 (14) 가 비-가동성 (non-movable) 또는 그 컨텐츠에 있어서 반드시 정적인 것을 의미하도록 해석되지 않아야 한다. 하나의 예로서, 시스템 메모리 (14) 는 디바이스 (10) 로부터 제거될 수도 있고, 또 다른 디바이스에 옮겨질 수도 있다. 또 다른 예로서, 시스템 메모리 (14) 와 실질적으로 유사한 시스템 메모리는 디바이스 (10) 로 삽입될 수도 있다. 어떤 예들에서, 비-일시적 저장 매체는 (예를 들어, RAM 에서) 시간에 걸쳐 변경될 수 있는 데이터를 저장할 수도 있다.
CPU (16) 상에서의 애플리케이션들의 실행은 CPU (16) 로 하여금, 시청가능한 컨텐츠를 형성하기 위하여 함께 연결되는 복수의 프리미티브들을 생성하게 한다. 프리미티브들의 예들은 포인트들, 라인들, 삼각형들, 정사각형들, 또는 임의의 다른 타입의 다각형을 포함한다. CPU (16) 는 그 각각의 버텍스들에 의해 이 프리미티브들을 정의할 수도 있다. 예를 들어, CPU (16) 는 버텍스들에 대한 좌표들 및 컬러 값들을 정의할 수도 있다. 좌표 값들은 3 차원 (3D) 좌표들 또는 2D 좌표들일 수도 있다.
일부의 경우들에 있어서, CPU (16) 는 또한, 패치로서 지칭된 특수한 타입의 프리미티브를 생성할 수도 있다. 다른 프리미티브 타입들과 유사하게, 패치는 패치의 제어 포인트들로서 지칭된 복수의 버텍스들에 의해 정의될 수도 있다. 다른 프리미티브 타입들과 달리, 패치는 임의의 특별한 형상이 아닐 수도 있다. 예를 들어, CPU (16) 는 패치의 제어 포인트들을 임의의 방식으로 상호연결할 수도 있어서, 상호연결된 제어 포인트들은 임의의 희망하는 형상을 형성한다. 삼각형들과 같은 다른 프리미티브 타입들에 대하여, CPU (16) 는 (예를 들어, 버텍스들의 상호연결이 삼각형으로 귀착되도록) 버텍스들이 상호연결되는 특정 방식을 정의할 수도 있다.
또한, 다른 프리미티브 타입들과 달리, 패치에서의 제어 포인트들의 수는 가변적일 수도 있다. 예를 들어, CPU (16) 상에서 실행되는 애플리케이션은 패치에 대하여 허용되는 제어 포인트들의 최대 수를 정의할 수도 있거나, 제어 포인트들의 최대 수는 사용자-정의될 수도 있다. 일부의 예들에서, 패치에서의 제어 포인트들의 수는 1 내지 32 개의 제어 포인트들일 수도 있지만; 그러나, 이 개시물에서 설명된 기법들은 그렇게 제한되지 않는다.
CPU (16) 는 테셀레이션을 위하여 제어 패치를 사용할 수도 있다. 위에서 설명된 바와 같이, 테셀레이션 프로세스는 CPU (16) 가 시청가능한 오브젝트의 표면의 부분을 낮은 해상도로 정의하고, 표면의 더 높은 해상도 버전 (version) 을 생성하기 위하여 그 부분을 테셀레이팅하는 것을 지칭한다. 예를 들어, CPU (16) 는, 제어 포인트들이 상호연결될 때, 패치가 시청가능한 오브젝트의 표면의 부분을 형성하도록 패치의 제어 포인트들을 정의할 수도 있다. 표면이 패치의 제어 포인트들로부터만 형성되어야 할 경우, 표면은 높은 해상도를 갖는 것으로 보이지 않을 수도 있고 들쭉날쭉하게 보일 수도 있다. 테셀레이션으로, 추가적인 프리미티브들이 패치에 추가되어, 프리미티브들이 상호연결될 때, 이 프리미티브들의 상호연결은 상세함을 패치에 추가하고, 이것은 패치의 해상도를 증가시키고 더 높은 품질의 시청가능한 컨텐츠로 귀착된다.
GPU (12) 는 테셀레이션을 구현하도록 구성될 수도 있다. 이러한 방법으로, CPU (16) 는 CPU (16) 에 의해 수행된 계산들에 대해 절감되는 더 높은 해상도의 패치를 생성하기 위하여 필요한 모든 추가적인 프리미티브들에 대한 버텍스들을 정의할 필요가 없을 수도 있다. 또한, CPU (16) 는 더 적은 버텍스들 (예를 들어, 추가되어야 할 프리미티브들의 버텍스들이 아니라, 제어 포인트들의 버텍스들) 을 송신할 필요가 있을 수도 있고, GPU (12) 는 이에 대응하여, 시스템 메모리 (14) 에 대한 더 적은 액세스들로 인해 대역폭 효율을 촉진시키는 더 적은 버텍스들을 수신할 필요가 있을 수도 있다.
그래픽 연산들을 수행하기 위하여, GPU (12) 는 그래픽 프로세싱 파이프라인을 구현할 수도 있다. 그래픽 프로세싱 파이프라인은 GPU (12) 상에서 실행되는 소프트웨어 또는 펌웨어에 의해 정의된 바와 같은 기능들을 수행하는 것과, 특정 기능들을 수행하도록 결선 (hardwire) 되는 고정-기능 유닛들에 의한 기능들을 수행하는 것을 포함한다. GPU (12) 상에서 실행되는 소프트웨어 또는 펌웨어는 셰이더들로서 지칭될 수도 있고, 셰이더들은 GPU (12) 의 하나 이상의 셰이더 코어들 상에서 실행될 수도 있다. 사용자는 임의의 구상가능한 방식으로 희망하는 태스크 (task) 들을 수행하기 위하여 셰이더들을 설계할 수 있으므로, 셰이더들은 사용자들에게 기능적인 유연성을 제공한다. 그러나, 고정-기능 유닛들은 고정-기능 유닛들이 태스크들을 수행하는 방식을 위하여 결선된다. 따라서, 고정-기능 유닛들은 소프트웨어 또는 펌웨어에 의해 제공된 프로그래밍가능한 기능적 유연성과 같은 많은 기능적 유연성을 제공하지 않을 수도 있다.
위에서 표시된 바와 같이, 도 1 에서 예시된 그래픽 프로세싱 파이프라인은 실질적으로 Direct3D 11 에 의해 정의된 바와 같은 그래픽 프로세싱 파이프라인이다. 이 예에서, GPU (12) 는 입력 조립기 스테이지 (input assembler stage; 18), 버텍스 셰이더 스테이지 (vertex shader stage; 20), 헐 셰이더 스테이지 (hull shader stage; 22), 테셀레이션 스테이지 (24), 도메인 셰이더 스테이지 (26), 지오메트리 셰이더 스테이지 (geometry shader stage; 28), 래스터라이저 스테이지 (rasterizer stage; 30), 픽셀 셰이더 스테이지 (pixel shader stage; 32), 및 출력 병합 스테이지 (output merge stage; 34) 중의 하나 이상을 포함할 수도 있다. GPU (12) 는 예시된 것들보다 더 많은 스테이지들을 포함할 수도 있고, 일부의 예들에서, GPU (12) 는 예시된 스테이지들의 전부를 반드시 포함하지 않을 수도 있다. 또한, 스테이지들의 특정 순서화는 예시를 위해 제공되고, 제한하는 것으로 간주되지 않아야 한다.
이 개시물에서 설명된 기법들에서, CPU (16) 는 패치의 제어 포인트들을 시스템 메모리 (14) 에 출력할 수도 있다. 다음으로, GPU (12) 는 시스템 메모리 (14) 로부터 제어 포인트들을 취출 (retrieve) 할 수도 있다. 이러한 방식으로, CPU (16) 는 제어 포인트들을 GPU (12) 로 송신할 수도 있다. 이 개시물에서 이용된 바와 같이, CPU (16) 가 GPU (12) 로 송신하는 것, 또는 GPU (12) 가 CPU (16) 로부터 수신하는 것은 일반적으로, GPU (12) 가 그로부터 판독하는 시스템 메모리 (14) 에 CPU (16) 가 기록하는 것을 포함할 수도 있다. 대안적으로, CPU (16) 가 GPU (12) 로 직접 송신하는 것과, GPU (12) 가 CPU (16) 로부터 직접 수신하는 것이 가능할 수도 있다.
입력 조립기 스테이지 (18) 는 CPU (16) 에 의해 정의된 바와 같이 시스템 메모리 (14) 로부터 제어 포인트들을 판독할 수도 있고, 패치를 형성하기 위하여 제어 포인트들을 조립할 수도 있다. 예를 들어, 입력 조립기 스테이지 (18) 는 제어 포인트들의 좌표들, 컬러 값들, 및 다른 이러한 정보를 판독할 수도 있다. 좌표들, 컬러 값들, 및 다른 이러한 정보는 제어 포인트들의 속성 (attribute) 들로서 통상적으로 지칭될 수도 있다. 제어 포인트들의 속성들에 기초하여, 입력 조립기 스테이지 (18) 는 패치의 일반적인 레이아웃을 결정할 수도 있다. 이러한 방식으로, 입력 조립기 스테이지 (18) 는 패치를 형성하기 위하여 제어 포인트들을 조립할 수도 있다. 입력 조립기 스테이지 (18) 는 고정-기능 로직 유닛 또는 프로그래밍가능 유닛일 수도 있다.
버텍스 셰이더 스테이지 (20) 는 입력 조립기 스테이지 (18) 로부터의 버텍스들 (예를 들어, 패치의 제어 포인트들) 을 프로세싱할 수도 있다. 예를 들어, 버텍스 셰이더 스테이지 (20) 는 변환들, 스키닝 (skinning), 모핑 (morphing), 및 버텍스당 라이팅 (per-vertex lighting) 과 같은 버텍스당 연산들을 수행할 수도 있다. 버텍스 셰이더 스테이지 (20) 는 셰이더일 수도 있다.
헐 셰이더 스테이지 (22) 는 버텍스 셰이더 스테이지 (20) 에 의해 프로세싱된 바와 같이, 패치의 제어 포인트들을 수신하고, 제어 포인트들을 프로세싱하고, 프로세싱된 패치에 대한 제어 포인트들을 출력한다. 다시 말해서, 헐 셰이더 스테이지 (22) 는 버텍스 셰이더 스테이지 (20) 에 의해 프로세싱된 바와 같이, 입력 패치를 수신하고, 입력 패치를 프로세싱하고, 출력 패치를 출력한다. 헐 셰이더 스테이지 (22) 는 입력 패치를 프로세싱하기 위한 다양한 기능들을 수행할 수도 있다. 예를 들어, 헐 셰이더 스테이지 (22) 는 제어 포인트들의 위치들을 변경하기 위하여 제어 포인트들의 좌표들을 수정할 수도 있거나, 심지어 제어 포인트들을 추가하거나 삭제할 수도 있다.
추가적으로, 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 헐 셰이더 스테이지 (22) 에 의해 생성된 패치 (즉, 출력 패치) 에 추가되어야 하는지를 표시하는 값들을 결정할 수도 있다. 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 결정하기 위하여 다양한 기준들을 사용할 수도 있다. 헐 셰이더 스테이지 (22) 가 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 결정하기 위하여 사용할 수도 있는 2 개의 예의 기준들이 이하에 설명되어 있다. 그러나, 이 개시물의 양태들은 그렇게 제한되지 않고, 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 결정하기 위하여 임의의 기준들을 사용할 수도 있다.
하나의 예로서, 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 추가되어야 하는지를 결정하기 위하여 패치의 심도 (depth) 를 표시하는 정보를 사용할 수도 있다. 예를 들어, 거리에 있어서 더 먼 오브젝트들은 실생활에서 흐리게 보이므로, 시청자의 관점으로부터 더욱 멀리 있는 패치는 높은 해상도를 필요로 하지 않을 수도 있다. 그러나, 거리에 있어서 더 근접한 오브젝트들은 실생활에서 더 선명하게 보이므로, 시청자의 관점으로부터 더 근접해 있는 패치는 더 높은 해상도를 필요로 할 수도 있다. 이 예에서, 헐 셰이더 스테이지 (22) 는, 더욱 멀리 떨어져 있는 패치에 더 적은 프리미티브들이 추가되어야 하고, 서로에 관련하여 더 근접해 있는 패치에 더 많은 프리미티브들이 추가되어야 하는 것으로 결정할 수도 있다.
또 다른 예로서, 헐 셰이더 스테이지 (22) 는 패치의 사이즈에 기초하여 얼마나 많은 프리미티브들이 추가되어야 하는지를 결정할 수도 있다. 더 작은 사이즈로 정해진 패치에 대하여, 헐 셰이더 스테이지 (22) 는 패치가 더 작은 영역을 둘러싸므로 더 적은 프리미티브들이 추가되어야 하는 것으로 결정할 수도 있다. 더 큰 사이즈로 정해진 패치에 대하여, 헐 셰이더 스테이지 (22) 는 패치가 더 큰 영역을 둘러싸므로 더 많은 프리미티브들이 추가되어야 하는 것으로 결정할 수도 있다.
얼마나 많은 프리미티브들이 추가되어야 하는지에 대한 결정에 기초하여, 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 표시하는 값들 및 도메인 타입을 테셀레이션 스테이지 (24) 에 출력할 수도 있다. 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 표시하는 값들은 Direct3D 11 API 에서는, 테스인자 (tessfactor) 들로서 지칭된다.
도메인은 테셀레이션 스테이지 (24) 가 테셀레이션 목적들을 위하여 이용하는 템플릿 형상 (template shape) 으로서 간주될 수도 있다. 도메인 타입의 예들은 라인, 삼각형, 쿼드 (quad) (예를 들어, 4면형 다각형 (four sided polygon), 또는 임의의 다른 타입의 다각형을 포함한다. 패치들이 3 차원 (3D) 표면 또는 2D 표면을 정의하더라도, 도메인은 2 차원 (2D) 형상일 수도 있다. 도메인이 라인일 때, 패치들이 3D 표면, 2D 표면, 또는 1D 표면을 정의하더라도, 도메인은 1 차원 (1D) 형상 (즉, 라인) 일 수도 있다. 예시를 위하여, 이 개시물에서 설명된 기법들은 2D 표면인 도메인에 대하여 설명된다. 예를 들어, 기법들은 삼각형 또는 쿼드인 도메인 형상들과 함께 설명된다.
일부의 예들에서, 헐 셰이더 스테이지 (22) 는 도메인 타입을 명시적으로 표시하지 않을 수도 있다. 오히려, 테셀레이션 스테이지 (24) 는 송신된 테스인자들의 수에 기초하여 도메인 타입을 결정할 수도 있다. 예를 들어, 4 개의 테스인자들의 존재는 도메인 타입이 삼각형 도메인 타입임을 표시할 수도 있고, 6 개의 테스인자들의 존재는 도메인 타입이 쿼드 도메인 타입임을 표시할 수도 있다.
일부의 예들에서, 쿼드 도메인은 2 차원 (2D) 데카르트 좌표 (Cartesian coordinate) 들 (u, v) 에 의해 정의될 수도 있다. 일부의 예들에서, 삼각형 도메인은 무게중심 좌표 (Barycentric coordinate) 들에 의해 정의될 수도 있다. 무게중심 좌표들은 삼각형 내의 임의의 포인트를 식별하기 위하여 3 개의 좌표들을 사용한다. 예를 들어, 삼각형 도메인의 버텍스들은 이하에서 더욱 상세하게 설명된 바와 같이, (u, v, w) 로서 정의될 수도 있다. 삼각형 내의 임의의 포인트의 위치는 버텍스까지의 그 근접성을 표시하는 버텍스 가중화 (vertex weighting) 에 의해 정의된다. 예를 들어, 포인트가 버텍스에 더 근접할수록, 그 버텍스 가중화는 더 높고, 포인트가 버텍스로부터 더욱 멀어질수록, 그 버텍스 가중화는 더 낮다.
일 예로서, 삼각형의 버텍스들이 다음과 같이 무게중심 좌표들 (u, v, w) 로 정의되는 것으로 가정한다: (1, 0, 0), (0, 1, 0), 및 (0, 0, 1). 이 예에서, 중심 포인트는 버텍스들의 각각으로부터 동일하게 떨어져 있으므로, 중심 포인트는 (1/3, 1/3, 1/3) 에 위치되어 있다. 또한, 버텍스 좌표들의 주어진 정의에 의해, 이 예에서는, 삼각형 도메인 내의 임의의 포인트에 대한 u, v, 및 w 좌표들의 합은 1 과 동일해야 한다.
데카르트 및 무게중심 좌표들은 예시만을 위하여 설명되고, 제한하는 것으로 간주되지 않아야 한다. 다른 예들에서는, 무게중심 좌표들 또는 데카르트 좌표들을 갖는 쿼드 도메인과, 데카르트 좌표들 또는 무게중심 좌표들을 갖는 삼각형 도메인을 정의하는 것이 가능할 수도 있다. 일반적으로, 임의의 타입의 도메인은 임의의 좌표계를 이용하여 정의될 수도 있다.
테셀레이션 스테이지 (24) 는 도메인을 복수의 프리미티브들로 테셀레이팅할 수도 있다 (예를 들어, 도메인 내에 복수의 프리미티브들을 구축함). 이 예에서, 테셀레이션 스테이지 (24) 는 헐 셰이더 스테이지 (22) 에 의해 출력된 패치를 프리미티브들로 테셀레이팅하는 것이 아니라, 오히려 도메인을 프리미티브들로 테셀레이팅하는 것이 이해되어야 한다. 일부의 예들에서, 테셀레이션 스테이지 (24) 는 헐 셰이더 스테이지 (22) 에 의해 출력된 패치를 심지어 액세스하지 않을 수도 있다. 이 개시물의 양태들은 그렇게 제한될 필요가 없지만, 테셀레이션 스테이지 (24) 는 고정-기능 유닛일 수도 있다.
테셀레이션 스테이지 (24) 는 도메인을 복수의 프리미티브들로 테셀레이팅하기 위하여 헐 셰이더 스테이지 (22) 에 의해 출력된 테스인자들을 사용할 수도 있다. 예를 들어, 도메인 타입 (예를 들어, 삼각형 또는 쿼드) 을 정의하는 것에 추가하여, 테스인자들은 얼마나 많은 링들이 도메인 내에 포함되어야 하는지를 정의할 수도 있다.
링은 도메인 내에서 일련의 동심 형상들일 수도 있고, 여기서, 동심 형상들은 도메인 형상과 동일한 형상이다. 예를 들어, 도메인 형상이 쿼드일 경우, 쿼드의 외주 (perimeter) 는 외부 링으로서 간주될 수도 있다. 헐 셰이더 스테이지 (22) 는 쿼드 도메인 내에 존재하는 일련의 더 작은 사이즈로 정해진 쿼드들일 수도 있는 내부 링들의 수를 정의할 수도 있다. 유사하게, 도메인 형상이 삼각형일 경우, 삼각형의 외주는 외부 링으로서 간주될 수도 있고, 내부 링들은 삼각형 도메인 내에 존재하는 일련의 더 작은 사이즈로 정해진 삼각형들일 수도 있다.
도메인 내의 링들의 수를 정의하는 것에 추가하여, 테스인자들은 링들을 따라 존재하는 포인트들을 정의한다. 링들을 따라 존재하는 포인트들은 제어 포인트들과 혼동되지 않아야 한다. 제어 포인트들은 패치를 정의한다. 링들을 따라 존재하는 포인트들은 테스인자들에 기초하여 테셀레이션 스테이지 (24) 에 의해 생성된 포인트들이다. 이 포인트들은 패치 내에서가 아니라, 도메인 내에서 생성된다.
또한, 테셀레이션 스테이지 (24) 가 도메인 내에서 복수의 프리미티브들을 구축하기 위하여 함께 연결하는 것은 이 포인트들이다. 예를 들어, 테셀레이션 스테이지 (24) 가 구축할 프리미티브들이 삼각형들인 것으로 가정한다. 이 예에서, 테셀레이션 스테이지 (24) 는 외부 링을 따라 존재하는 하나의 포인트를, 삼각형 프리미티브를 형성하기 위하여 내부 링을 따라 존재하는 2 개의 포인트들과 연결할 수도 있다. 대안적으로, 테셀레이션 스테이지 (24) 는 외부 링을 따라 존재하는 2 개의 포인트들을, 삼각형 프리미티브를 형성하기 위하여 내부 링을 따라 존재하는 하나의 포인트와 연결할 수도 있다. 이러한 방법으로, 도메인 타입, 도메인 내의 링들의 수, 및 외부 및 내부 링들을 따라 포인트들의 수를 정의함으로써, 헐 셰이더 스테이지 (22) 는 테셀레이션 스테이지 (24) 가 도메인 내에서 구축해야 하는 프리미티브들의 수를 정의할 수도 있다.
일부의 예들에서, 링의 에지 (edge) 를 따라 존재할 수 있는 포인트들의 수는 하나의 포인트 내지 65 개의 포인트들일 수도 있다. 예를 들어, 도메인 타입이 삼각형일 경우, 삼각형 도메인의 에지 당 65 개에 이르는 포인트들이 있을 수도 있다. 유사하게, 도메인 타입이 쿼드일 경우, 쿼드의 에지 당 65 개에 이르는 포인트들이 있을 수도 있다. 그러나, 이 개시물에서 설명된 기법들은 최대 65 개의 포인트들을 가지는 에지로 제한되지 않는다.
또한, 링을 따라 존재하는 포인트들의 수는 외부 및 내부 링들에 대해 상이할 수도 있다. 예를 들어, 외부 링의 에지를 따라 존재하는 포인트들의 수는 내부 링의 에지를 따라 존재하는 포인트들의 수보다 더 많거나 더 적을 수도 있다. 또한, 외부 링 및 내부 링의 에지를 따라 존재하는 포인트들의 수는 동일한 수의 포인트들인 것이 가능할 수도 있다.
또한, 동일한 링의 에지를 따르는 포인트들의 수는 상이할 수도 있다. 예를 들어, 삼각형 도메인에 대하여, 에지들 중의 하나를 따라 존재하는 포인트들의 수는 하나의 다른 에지 또는 에지들 양자를 따라 존재하는 포인트들의 수와는 상이할 수도 있다. 유사하게, 쿼드 도메인에 대하여, 에지들 중의 하나를 따라 존재하는 포인트들의 수는 하나, 2 개, 또는 모든 3 개의 다른 나머지 에지들을 따라 존재하는 포인트들의 수와는 상이할 수도 있다. 또한, 링들의 에지들의 각각이 동일한 수의 포인트들을 가지는 것이 가능할 수도 있다.
위에서 설명된 바와 같이, 일부의 예들에서, 테셀레이션 스테이지 (24) 는 패치를 복수의 프리미티브들로 분할하지 않을 수도 있다. 따라서, 일부의 예들에서, 테셀레이션 스테이지 (24) 는 제어 포인트들의 수, 제어 포인트들의 위치들, 또는 패치의 사이즈와 같은 임의의 정보를 수신하지 않을 수도 있다. 패치의 사이즈 및 제어 포인트들의 위치들에 대한 임의의 정보가 없다면, 테셀레이션 스테이지 (24) 는 이용되는 도메인의 사이즈 또는 도메인의 버텍스들에 대한 특정 좌표들을 정의할 수 없을 수도 있다.
이것을 다루기 위하여, 테셀레이션 스테이지 (24) 는 도메인 내에서 상호연결된 포인트들의 위치들을 결정하기 위한 것뿐만 아니라, 도메인의 버텍스들을 정의하기 위하여 정규화된 좌표계에 의존할 수도 있다. 정규화된 좌표들의 하나의 예로서, 테셀레이션 스테이지 (24) 는 u, v 좌표들에서 쿼드 도메인의 버텍스들을 하기로서 정의할 수도 있고: (0, 0), (1, 0), (0, 1), 및 (1, 1), 이것은 단위 정사각형이다. 테셀레이션 스테이지 (24) 는 u, v, w 좌표들에서 삼각형 도메인의 버텍스들을 하기로서 정의할 수도 있고: (0, 0, 1), (0, 1, 0), 및 (1, 0, 0), 이것은 정삼각형이다. 테셀레이션 스테이지 (24) 는 이 정규화된 좌표계에서 복수의 프리미티브들의 상호연결된 버텍스들에 대한 좌표들을 결정할 수도 있다. 다시 말해서, 테셀레이션 스테이지 (24) 는 국부적 정규화된 좌표계를 이용하여 도메인 내의 프리미티브들의 버텍스들의 좌표들을 정의할 수도 있다. 이 개시물에서, 테셀레이션 스테이지 (24) 에 의해 정의된 바와 같은 버텍스들의 좌표들은 도메인 좌표들로서 지칭될 수도 있는데, 이것은 이 좌표들이 도메인에 대한 정규화된 좌표계에 대한 것이기 때문이다.
예시된 그래픽 파이프라인에서, 도메인 셰이더 (26) 는 정규화된 좌표계에서 복수의 프리미티브들의 버텍스들에 대한 도메인 좌표들을 수신할 수도 있다 (예를 들어, 적용가능한 경우, u, v 좌표들 또는 u, v, w 좌표들). 도메인 셰이더 스테이지 (26) 의 기능은 테셀레이션 스테이지 (24) 로부터 수신된 바와 같은 버텍스들의 도메인 좌표들을 패치에 맵핑하는 것일 수도 있다. 예를 들어, 테셀레이션 스테이지 (24) 는 헐 셰이더 스테이지 (22) 에 의해 정의된 바와 같은 패치의 정보를 수신하지 않을 수도 있지만, 도메인 셰이더 스테이지 (26) 는 헐 셰이더 스테이지 (22) 로부터 이러한 정보를 수신할 수도 있다.
도메인 셰이더 스테이지 (26) 는 프리미티브의 버텍스에 대한 도메인 좌표들을, 패치에 추가되어야 하는 프리미티브의 버텍스의 패치 좌표들로 변환할 수도 있다. 패치 좌표들은 GPU (12) 에 의해 이용된 좌표계에 관련하여 정의되며 패치에서 포인트들을 정의하는 좌표들일 수도 있다. 예를 들어, 도메인에서의 프리미티브의 버텍스의 도메인 좌표들은 2D 도메인에서 포인트들을 정의하기 위하여 이용된 정규화된 좌표계에 기초할 수도 있다. 그러나, 패치는 3 차원에서 정의될 수도 있고, 도메인 셰이더 스테이지 (26) 는 패치 상의 포인트를 식별하기 위하여 버텍스의 도메인 좌표들을 변환할 수도 있다.
예를 들어, 도메인 셰이더 스테이지 (26) 는 헐 셰이더 (22) 로부터 패치의 제어 포인트들의 좌표들을 수신할 수도 있다. 헐 셰이더 스테이지 (22) 로부터의 패치의 제어 포인트들의 좌표들로, 도메인 셰이더 스테이지 (26) 는 테셀레이션 스테이지 (24) 에 의해 출력된 바와 같은, 패치 상의 버텍스의 위치를 결정할 수도 있다. 패치 상의 이 식별된 포인트는 패치에 추가되는 프리미티브에 대한 버텍스일 수도 있다.
테셀레이션 스테이지 (24) 는 버텍스에 대한 도메인 좌표들을 재이용 버퍼 (도 1 에서 도시되지 않고, 도 6 에서 더욱 상세하게 도시됨) 에 출력할 수도 있다. 재이용 버퍼는 변환전 버텍스 캐시 (post-transformation vertex cache; PTVC) 로서 지칭될 수도 있다. 제어기 (도 1 에서 도시되지 않고, 도 6 에서 더욱 상세하게 도시됨) 는 재이용 버퍼가 테셀레이션 유닛 (24) 에 의해 출력된 버텍스의 도메인 좌표들에 대응하는 패치 좌표들을 저장하는지 여부를 결정할 수도 있다. 이 개시물에서 이용된 바와 같이, 테셀레이션 유닛 (24) 에 의해 출력된 버텍스의 도메인 좌표들에 대응하는 패치 좌표들은 도메인 좌표들을 변환함으로써 생성되는 패치 좌표들을 지칭한다.
제어기가 재이용 버퍼가 도메인 좌표들에 대응하는 패치 좌표들을 저장하지 않는 것으로 결정할 경우, 제어기는 도메인 셰이더 스테이지 (26) 의 인스턴스화 (instantiation) 를 실행할 수도 있다. 도메인 셰이더 스테이지 (26) 는 테셀레이션 스테이지 (24) 에 의해 출력된 버텍스의 도메인 좌표들을 수신할 수도 있고, 도메인 좌표들을 패치 좌표들로 변환할 수도 있고, 패치 좌표들을 재이용 버퍼에 저장할 수도 있다. 제어기가 재이용 버퍼가 도메인 좌표들에 대응하는 패치 좌표들을 저장하는 것으로 결정할 경우, 제어기는 도메인 셰이더 스테이지 (26) 의 인스턴스화를 실행하지 않을 수도 있다. 어느 경우든, 다음으로, 제어기가 그래픽 파이프라인을 따라 패치 좌표들을 더욱 출력할 수도 있다.
테셀레이션 스테이지 (24) 는 테셀레이션 스테이지 (24) 에 의해 생성된 복수의 프리미티브들의 버텍스들을 출력하고, 도메인 셰이더 스테이지 (26) 는 이 프리미티브들을 패치에 추가하므로, 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 및 도메인 셰이더 스테이지 (26) 의 조합은 함께 추가적인 프리미티브들을 패치에 추가한다. 이것은 패치에 추가되어 CPU (16) 에 의해 정의된 패치와 비교하여, 더 높은 해상도, 더욱 상세한 패치를 생성하는 프리미티브들의 메쉬 (mesh) 로 귀착된다. 이러한 방식으로, 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 및 도메인 셰이더 스테이지 (26) 는 테셀레이션 프로세스를 구현한다.
지오메트리 셰이더 스테이지 (28) 는 도메인 셰이더 스테이지 (26) 에 의해 패치에 추가된 프리미티브들의 버텍스들을 수신하고, 훨씬 더 큰 해상도를 추가하기 위하여 프리미티브들에 대한 추가적인 버텍스들을 추가로 생성할 수도 있다. 래스터라이저 스테이지 (30) 는 지오메트리 셰이더 스테이지 (28) 로부터 프리미티브들을 수신하고, 프리미티브들을 디스플레이를 위한 픽셀들로 변환한다. 예를 들어, 프리미티브들은 프리미티브들의 상호연결을 표시하는 벡터들로서 정의될 수도 있고, 이미지가 디스플레이되어야 하는 디스플레이에 독립적인 좌표 공간에서 정의될 수도 있다. 래스터라이저 스테이지 (30) 는 이 벡터들을 디스플레이 좌표들로 변환하고, 가려지는 프리미티브들 내의 포인트들을 제거하는 것과 같은 임의의 추가적인 기능들을 수행한다.
픽셀 셰이더 스테이지 (32) 는 래스터라이저 스테이지 (30) 에 의해 출력된 바와 같은 픽셀들을 수신하고, 컬러 값들을 디스플레이되어야 하는 픽셀들의 각각에 배정하기 위한 사후 프로세싱을 수행한다. 예를 들어, 픽셀 셰이더 스테이지 (32) 는 시스템 메모리 (14) 에 저장된 일정한 값들, 시스템 메모리 (14) 에 저장된 텍스처 데이터, 및 컬러 값들과 같은 픽셀당 출력들을 생성하기 위한 임의의 다른 데이터를 수신할 수도 있다. 픽셀 셰이더 스테이지 (32) 는 또한, 픽셀들의 불투명함을 표시하는 불투명 값들을 출력할 수도 있다.
출력 병합 스테이지 (34) 는 임의의 최종적인 픽셀 프로세싱을 수행할 수도 있다. 예를 들어, 출력 병합 스테이지 (34) 는 픽셀들 중의 임의의 것이 디스플레이되는 것으로부터 제거되어야 하는지 여부를 추가로 결정하기 위하여 심도 정보를 사용할 수도 있다. 출력 병합 스테이지 (34) 는 또한, 루마 (luma) 및 크로마 (chroma) 값들 또는 적색-녹색-청색 (red-green-blue; RGB) 값들을 포함할 수도 있는 최종적인 픽셀 값들을 생성하기 위하여 블렌딩 동작 (blending operation) 들을 수행할 수도 있다.
출력 병합 스테이지 (34) 는 최종적인 픽셀 값들을, 시스템 메모리 (14) 내에 일반적으로 위치되지만, GPU (12) 내에 위치될 수도 있는 프레임 버퍼에 출력할 수도 있다. 디스플레이 프로세서 (도시되지 않음) 는 프레임 버퍼로부터 픽셀 값들을 취출할 수도 있고, 디스플레이로 하여금 이미지를 디스플레이하게 하기 위하여, 디바이스 (10) 의 디스플레이 (도시되지 않음) 의 픽셀들로 하여금 (예를 들어, 적색, 녹색 및 청색 픽셀 컴포넌트들을 통해) 픽셀 값들에 따른 특정된 강도 레벨 (intensity level) 들에서 조명하게 할 수도 있다.
위에서 설명된 바와 같이, 재이용 버퍼가 도메인 내의 프리미티브의 버텍스의 대응하는 도메인 좌표들에 대한 패치 좌표들을 저장하지 않을 때마다, 제어기는 도메인 셰이더 스테이지 (26) 의 인스턴스화를 실행할 수도 있다. 일반적으로, 도메인 셰이더 스테이지 (26) 의 실행은 프로세싱-집약적이고 시간 소비적일 수도 있고, 도메인 셰이더 스테이지 (26) 가 실행할 것을 필요로 하는 횟수를 제한하는 것이 바람직할 수도 있다. 예를 들어, 도메인에서의 제 1 프리미티브 및 제 2 프리미티브는 2 개의 버텍스들을 공유할 수도 있다. 이 예에서, 테셀레이션 스테이지 (24) 가 제 1 프리미티브의 버텍스들의 도메인 좌표들을 출력한 후, 제어기는 도메인 셰이더 스테이지 (26) 의 3 번의 인스턴스화들을 (즉, 버텍스 당 한 번) 실행할 수도 있고, 결과적인 패치 좌표들을 재이용 버퍼에 저장할 수도 있다. 다음으로, 테셀레이션 스테이지 (24) 가 제 2 프리미티브의 버텍스들에 대한 도메인 좌표들을 출력한 후, 제어기는 도메인 셰이더 스테이지 (26) 의 한 번의 인스턴스화를 실행할 수도 있다. 이 경우, 재이용 버퍼는 제 1 및 제 2 프리미티브 사이에서 공유되는 2 개의 버텍스들에 대한 패치 좌표들을 이미 저장할 수도 있다. 따라서, 제어기는 제 2 프리미티브의 공유되지 않은 버텍스에 대한 도메인 셰이더 스테이지 (26) 의 오직 한 번의 인스턴스화를 실행할 필요가 있을 수도 있다.
그러나, 재이용 버퍼의 제한된 저장 능력들로 인해, 테셀레이션 스테이지 (24) 가 공유된 버텍스에 대한 도메인 좌표들을 두 번째로 출력할 때, 2 개의 프리미티브들 사이에서 공유되는 버텍스에 대한 패치 좌표들이 이제 더 이상 재이용 버퍼에 저장되지 않는 것이 가능할 수도 있다. 예를 들어, 이전의 예에서는, 재이용 버퍼의 제한된 저장 능력들로 인해, 테셀레이션 유닛 (24) 이 제 2 프리미티브의 버텍스들의 도메인 좌표들을 출력할 때에는, 제 1 및 제 2 프리미티브 사이에서 공유되는 버텍스들의 하나 또는 양자의 도메인 좌표들에 대응하는 패치 좌표들이 이제 더 이상 재이용 버퍼에 저장되지 않는 것이 가능할 수도 있다.
이것은 패치 좌표들로 이전에 변환되었던 도메인 좌표들을 변환하기 위한 도메인 셰이더 스테이지 (26) 의 인스턴스화들의 실행으로 귀착될 수도 있다. 예를 들어, 공유된 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼에 저장되는 상기 예에서는, 제어기가 제 2 프리미티브의 공유되지 않은 버텍스의 도메인 좌표들을 패치 좌표들로 변환하기 위하여 도메인 셰이더 스테이지 (26) 의 오직 한 번의 인스턴스화를 실행할 수도 있다. 그러나, 공유된 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼에 저장되지 않는 상기 예에서는, 제어기가 제 2 프리미티브의 3 개의 버텍스들의 도메인 좌표들을 패치 좌표들로 변환하기 위하여 도메인 셰이더 스테이지 (26) 의 3 번의 인스턴스화를 실행할 수도 있다.
재이용 버퍼가 선입선출 (first-in-first-out) 대체 방식을 구현할 수도 있으므로, 이전에 저장된 패치 좌표들은 재이용 버퍼에서 이용가능하지 않을 수도 있다. 예를 들어, 재이용 버퍼가 가득 차 있을 때 (예를 들어, 재이용 버퍼 내의 각각의 슬롯이 패치 좌표를 저장함), 재이용 버퍼는 저장되어야 하는 다음 패치 좌표들을 위한 저장 공간을 비우기 위하여 가장 조기에 저장된 패치 좌표들을 제거 (즉, 없앰) 할 수도 있다. 제거된 패치 좌표들이 또 다른 프리미티브와 공유되는 프리미티브의 버텍스에 대한 도메인 좌표들에 대응할 경우, 테셀레이션 스테이지 (24) 가 다른 프리미티브의 버텍스들을 출력할 때에는, 제어기는 도메인 셰이더 스테이지 (26) 의 또 다른 인스턴스화의 실행으로 하여금 버텍스의 도메인 좌표들을 패치 좌표들로 재변환하게 할 수도 있다.
이 개시물에서 설명된 기법들은 테셀레이션 스테이지 (24) 가 프리미티브들의 버텍스들을 출력하는 시퀀스에 대한 것이다. 일부의 예들에서, 테셀레이션 스테이지 (24) 는 공유된 버텍스들이 재이용 버퍼에 저장된 상태로 유지될 가능성을 증가시키기 위한 그러한 시퀀스로 프리미티브들의 버텍스들을 출력할 수도 있다. 예를 들어, 제 1 프리미티브의 버텍스들을 출력한 후, 테셀레이션 스테이지 (24) 가 이 후속 프리미티브들의 버텍스들을 출력할 때에는, 테셀레이션 스테이지 (24) 가 후속 프리미티브들과 공유되는 제 1 프리미티브의 버텍스들이 재이용 버퍼 내에 있는 그러한 시퀀스로 버텍스들을 출력할 수도 있다.
또한, 프리미티브들의 출력 시퀀스는, 재이용 버퍼가 가득 차 있을 때, 그 도메인 좌표들이 가장 조기에 저장된 패치 좌표들에 대응하는 버텍스를 갖는 다수의 나머지 프리미티브들이 있지 않도록 되어 있을 수도 있다. 예를 들어, 선입선출 대체 방식에서는, 재이용 버퍼가 가득 차 있을 때, 재이용 버퍼는 가장 조기에 저장된 패치 좌표들을 제거할 수도 있다. 이 패치 좌표들은 프리미티브 내의 버텍스의 도메인 좌표들에 대응할 수도 있고, 여기서, 버텍스는 다수의 다른 프리미티브들과 공유되지 않는다. 이러한 방법으로, 재이용 버퍼가 이 패치 좌표들을 제거하지 않더라도, 이하에서 더욱 상세하게 설명된 바와 같이, 도메인 셰이더 스테이지 (26) 의 인스턴스화들의 수에 대한 제한된 영향이 있을 수도 있다.
위에서 설명된 바와 같이, 헐 셰이더 스테이지 (22) 는 도메인 내의 링들의 수와, 링들의 각각의 에지를 따라 존재하는 포인트들의 수를 정의할 수도 있다. 테셀레이션 스테이지 (24) 는 궁극적으로, 헐 셰이더 스테이지 (22) 에 의해 정의된 방식으로 링들을 따라 포인트들을 배치할 수도 있다. 이 포인트들은 도메인에서 테셀레이션 스테이지 (24) 에 의해 생성된 프리미티브들의 버텍스들을 형성한다. 테셀레이션 스테이지 (24) 는 프리미티브들을 형성하고 이 프리미티브들의 버텍스들에 대한 도메인 좌표들을 출력하기 위하여 이 버텍스들을 함께 상호연결할 수도 있다.
이 개시물에서 설명된 기법들에 따르면, 프리미티브들의 버텍스들에 대한 도메인 좌표들을 출력하기 이전에, 테셀레이션 스테이지 (24) 는 도메인을 복수의 부분들로 분할할 수도 있다. 부분들 중의 적어도 하나는 도메인 내의 인접 영역을 둘러쌀 수도 있고, 인접 부분으로서 지칭될 수도 있다. 일반적으로, 부분들의 각각은 인접 부분들인 것이 가능할 수도 있지만; 그러나, 이 개시물의 양태들은 그렇게 제한되지 않는다.
인접 부분은 복수의 에지들에 의해 정의될 수도 있다. 복수의 에지들은 테셀레이션 스테이지 (24) 가 테셀레이팅하는 도메인 내의 외주를 형성하고, 부분은 외주 내의 도메인의 인접 영역일 수도 있다. 이 개시물에서 설명된 기법들에서, 인접 부분은 인접 부분의 외주 내에 속하는 도메인 내의 임의의 프리미티브를 포함할 수도 있다.
예를 들어, 용어 인접은 도메인 내의 프리미티브들을 배제하는 갭이 부분 내에 없음을 의미한다. 예를 들어, 도메인 내의 프리미티브가 부분의 외주 내에 있을 경우, 그 프리미티브는 부분의 일부이다. 인접 부분의 개념을 이해하는 것을 추가로 보조하기 위하여, 인접 부분들은 도메인 내의 프리미티브들을 구축하기 위하여 이용된 링들과 혼동되지 않아야 한다.
일부의 다른 기법들은 프리미티브들을 구축하기 위하여 이용된 링들의 각각 내의 프리미티브들을 출력한다. 이 예들에서, 테셀레이션 스테이지 (24) 이외의 테셀레이션 스테이지는 우선, 외부 링을 따라 프리미티브들을 출력한다. 이 외부 링은 도메인에서 갭을 형성한다. 예를 들어, 도메인 내의 중심 포인트는 링에 의해 둘러싸인 도메인의 영역 내에 속하지만, 이 다른 기법들의 테셀레이션 스테이지는 링 내의 버텍스들의 도메인 좌표들을 출력할 때에 중심 포인트를 배제한다. 다시 말해서, 링 내의 영역은 링의 일부인 것으로부터 배제되므로, 이 링들은 인접 부분들로서 간주되지 않아야 한다.
이 개시물에서 설명된 기법들에 따르면, 테셀레이션 스테이지 (24) 는 프리미티브들의 버텍스들을 출력할 수도 있고, 여기서, 프리미티브들은 인접 부분 내의 하나 이상의 대각 스트립들로 배열된다. 프리미티브들의 대각 스트립은 4 개의 변 (side) 들을 포함하고, 여기서, 4 개의 변들 중의 2 개는 평행하다. 2 개의 평행한 변들은 각각 대각 스트립 내의 프리미티브들의 각각의 적어도 하나의 버텍스를 포함할 수도 있다. 또한, 2 개의 평행한 변들의 각각 상의 버텍스들의 수는 상이할 수도 있다.
예를 들어, 대각 스트립은 3 개의 프리미티브들을 포함하는 것으로 가정한다. 이 예에서, 대각 스트립의 평행한 변들 중의 제 1 변은 3 개의 포인트들을 포함할 수도 있고, 대각 스트립의 평행한 변들 중의 제 2 변은 2 개의 포인트들을 포함할 수도 있다. 제 1 변 상의 3 개의 포인트들을 제 2 변 상의 2 개의 포인트들과 상호연결함으로써, 테셀레이션 유닛은 대각 스트립 내의 3 개의 프리미티브들을 구축할 수도 있다. 이 예에서, 제 1 변 상의 3 개의 포인트들은 3 개의 버텍스들을 형성할 수도 있고, 제 2 변 상의 2 개의 포인트들은 2 개의 버텍스들을 형성할 수도 있다. 대각 스트립 내의 프리미티브들이 버텍스들을 공유하므로, 테셀레이션 스테이지 (24) 는 대각 스트립의 평행한 변들 중의 제 1 변을 따라 존재하는 3 개의 버텍스들과, 대각 스트립의 평행한 변들 중의 제 2 변을 따라 존재하는 2 개의 버텍스들만을 이용하여 3 개의 프리미티브들을 구축할 수도 있다.
일부의 예들에서, 테셀레이션 스테이지 (24) 는 제 1 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있고, 여기서, 제 1 대각 스트립은 인접 부분 내에 존재한다. 제 1 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력한 후, 테셀레이션 스테이지 (24) 는 제 2 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있고, 여기서, 제 2 대각 스트립은 인접 부분 내에 존재한다.
일부의 예들에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행할 수도 있다. 이 예들에서, 제 2 대각 스트립 내의 프리미티브들의 수는 제 1 대각 스트립 내의 프리미티브들의 수와는 상이할 수도 있다. 다른 예들에서, 제 2 대각 스트립은 제 1 대각 스트립과 접할 수도 있다. 이 예들에서, 제 2 대각 스트립 내의 프리미티브들의 수는 제 1 대각 스트립 내의 프리미티브들의 수와 동일할 수도 있다.
제 2 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력한 후, 다음으로, 테셀레이션 스테이지 (24) 는 제 3 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있다. 제 3 대각 스트립은 제 1 대각 스트립과 평행할 수도 있다. 또한, 제 3 대각 스트립 내에 존재하는 프리미티브들의 수는 제 1 및 제 2 대각 스트립들 내에 존재하는 프리미티브들의 수와는 상이할 수도 있다.
테셀레이션 스테이지 (24) 가 도메인의 부분들 중의 하나 내의 프리미티브들을 출력하는 것을 완료할 때까지, 테셀레이션 스테이지 (24) 는 대각 스트립들 내의 프리미티브들을 출력할 수도 있다. 테셀레이션 스테이지 (24) 는 도메인에서의 또 다른 부분 내의 프리미티브들을 실질적으로 유사한 방식으로 출력할 수도 있다.
버텍스들을 위에서 설명된 방식으로 출력함으로써, GPU (12) 는 도메인 셰이더 스테이지 (26) 의 더 적은 인스턴스화들을 실행할 수도 있다. 예를 들어, 재이용 버퍼의 제한된 사이즈로 인해, 재이용 버퍼는 테셀레이션 스테이지 (24) 에 의해 출력된 버텍스들의 전부를 저장할 수 없을 수도 있다. 예를 들어, 위에서 설명된 바와 같이, 재이용 버퍼가 가득 차 있고 도메인 셰이더 스테이지 (26) 가 새롭게 변환된 패치 좌표들을 저장하는 것을 시도하고 있을 때, 재이용 버퍼는 선입선출 대체 방식을 구현할 수도 있다. 이 개시물에서 설명된 기법들은, 도메인 셰이더 스테이지 (26) 가 제 1 프리미티브의 버텍스들을 도메인 좌표들로부터 패치 좌표들로 변환한 후, 제 2 프리미티브와 공유되는 버텍스들에 대한 패치 좌표들이 테셀레이션 스테이지 (24) 가 제 2 대각 스트립 내의, 그리고 유사하게, 제 3 대각 스트립에 대한 프리미티브들의 버텍스들의 도메인 좌표들을 출력하기 전에 재이용 버퍼로부터 없어지지 않을 가능성을 증가시킬 수도 있다.
위에서 설명된 바와 같이, 테셀레이션 스테이지 (24) 는 도메인을 복수의 부분들로 분할할 수도 있다. 테셀레이션 스테이지 (24) 가 도메인을 복수의 부분들로 분할하는 방식은 헐 셰이더 스테이지 (22) 에 의해 출력된 테스인자들 및 재이용 버퍼에서의 저장 슬롯들의 수 (즉, 재이용 버퍼의 저장 능력) 에 기초할 수도 있다. 예를 들어, 쿼드 도메인에 대하여, 헐 셰이더 스테이지 (22) 는 링의 각각의 변이 분할되어야 하는 세그먼트들의 수를 출력할 수도 있다. 링의 각각의 변을 따르는 세그먼트들의 수는 헐 셰이더 스테이지 (22) 에 의해 출력된 테스인자의 하나의 예이다.
쿼드 도메인의 각각의 변이 분할되어야 하는 세그먼트들의 수는 쿼드 도메인의 각각의 변 상의 포인트들의 수를 표시할 수도 있다. 예를 들어, 하나의 변이 4 개의 세그먼트들로 분할되어야 할 경우, 테셀레이션 스테이지 (24) 는 변 상에 6 개의 포인트들 (변의 각각의 단부 상의 하나의 포인트와, 변을 5 개의 세그먼트들로 분할하기 위한 중간의 4 개의 포인트들) 이 있는 것으로 결정할 수도 있다.
쿼드 도메인에 대하여, 헐 셰이더 스테이지 (22) 는 수직 변들이 분할되어야 하는 세그먼트들의 수를 정의하는 수직 변들에 대한 테스인자를 출력할 수도 있다. 이 테스인자는 fy 로서 지칭될 수도 있다. 헐 셰이더 스테이지 (22) 는 또한, 수평 변들이 분할되어야 하는 세그먼트들의 수를 정의하는 수평 변들에 대한 테스인자를 출력할 수도 있다. 이 테스인자는 fx 로서 지칭될 수도 있다.
테셀레이션 스테이지 (24) 는 이 2 개의 테스인자들 중의 어느 것이 값에 있어서 더 작은지 (또는 아마도 동일) (예를 들어, fx ≤ fy 인지 여부, 또는 fy ≤ fx 인지 여부) 를 결정할 수도 있다. 2 개 중의 더 작은 것이 f1 으로서 지칭되는 것으로 가정한다. 또한, 재이용 버퍼에서의 저장 슬롯들의 수는 C 인 것으로 가정한다. 이 예에서, 테셀레이션 스테이지 (24) 는 f1 + 1 이 C - 2 이하인지 여부를 결정할 수도 있다. f1 + 1 이 C - 2 이하일 경우, 테셀레이션 스테이지 (24) 는 쿼드 도메인을 2 개의 부분들로 분할할 수도 있고 (예를 들어, 쿼드 도메인을 듀플렛 (duplet) 들로 분할함), 여기서, 2 개의 부분들 중의 하나 또는 양자는 인접 부분들이다.
이 예에서, 테셀레이션 스테이지 (24) 는 2 개의 부분들의 제 1 인접 부분 내의 제 1 대각 스트립과, 그 다음으로, 제 1 인접 부분 내의 제 2 대각 스트립 내의 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 이 예에서, 제 2 대각 스트립은 제 1 대각 스트립과 접할 수도 있고, 제 1 대각 스트립 및 제 2 대각 스트립에서의 프리미티브들의 수는 동일할 수도 있다. 다음으로, 테셀레이션 스테이지 (24) 는 제 1 인접 부분의 제 3 대각 스트립 내의 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 제 3 대각 스트립은 제 1 대각 스트립과 평행할 수도 있고, 제 3 대각 스트립 내의 프리미티브들의 수는 제 1 및 제 2 대각 스트립들 내의 프리미티브들의 수와는 상이할 수도 있다.
테셀레이션 스테이지 (24) 가 제 1 인접 부분 내의 프리미티브들을 출력하는 것을 종료시킬 때까지, 테셀레이션 스테이지 (24) 는 프리미티브들의 도메인 좌표들을 유사한 방식으로 출력하는 것을 반복할 수도 있다. 다음으로, 테셀레이션 스테이지 (24) 는 제 2 인접 부분을 계속할 수도 있고, 제 2 인접 부분 내의 버텍스들의 도메인 좌표들을 실질적으로 유사한 방식으로 출력할 수도 있다. f1 + 1 이 C - 2 이하인 예에서 프리미티브들의 도메인 좌표들을 출력하는 것은 테셀레이션 스테이지 (24) 의 제 1 동작 모드로서 지칭될 수도 있다.
테셀레이션 스테이지 (24) 가 f1 + 1 이 C - 2 이하가 아닌 것으로 결정할 경우, 테셀레이션 스테이지 (24) 는 f1/2 + 1 이 C - 1 이하인지 여부를 결정할 수도 있다. f1/2 + 1 이 C - 1 이하일 경우, 테셀레이션 스테이지 (24) 는 쿼드 도메인을 4 개의 부분들 (예를 들어, 쿼드러플렛 (quadruplet) 들) 로 분할할 수도 있고, 여기서, 4 개의 부분들 중의 하나 이상은 인접 부분들이다.
이 예에서, 테셀레이션 스테이지 (24) 는 4 개의 부분들의 제 1 인접 부분 내의 제 1 대각 스트립과, 그 다음으로, 제 1 인접 부분 내의 제 2 대각 스트립 내의 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 이 예에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행할 수도 있고, 제 1 대각 스트립 및 제 2 대각 스트립에서의 프리미티브들의 수는 상이할 수도 있다. 다음으로, 테셀레이션 스테이지 (24) 는 제 1 인접 부분의 제 3 대각 스트립 내의 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 제 3 대각 스트립은 제 1 및 제 2 대각 스트립들과 평행할 수도 있고, 제 3 대각 스트립 내의 프리미티브들의 수는 제 1 및 제 2 대각 스트립들 내의 프리미티브들의 수와는 상이할 수도 있다.
테셀레이션 스테이지 (24) 가 제 1 인접 부분 내의 프리미티브들을 출력하는 것을 종료시킬 때까지, 테셀레이션 스테이지 (24) 는 프리미티브들의 도메인 좌표들을 유사한 방식으로 출력하는 것을 반복할 수도 있다. 다음으로, 테셀레이션 스테이지 (24) 는 제 2 인접 부분을 계속할 수도 있고, 제 2 인접 부분과, 그 다음으로, 제 3 및 제 4 부분들 내의 버텍스들의 도메인 좌표들을 실질적으로 유사한 방식으로 출력할 수도 있다. f1/2 + 1 이 C - 1 이하인 예에서 프리미티브들의 도메인 좌표들을 출력하는 것은 테셀레이션 스테이지 (24) 의 제 2 동작 모드로서 지칭될 수도 있다.
테셀레이션 스테이지 (24) 가 f1/2 + 1 이 C - 1 이하가 아닌 것으로 결정할 경우, 테셀레이션 스테이지 (24) 는 쿼드 도메인을 4 개를 초과하는 부분들로 분할할 수도 있다. 이 예에서, 테셀레이션 스테이지 (24) 는 제 3 동작 모드에서 동작할 수도 있다. 예를 들어, 테셀레이션 스테이지 (24) 는 쿼드 도메인을 5 개의 부분들로 분할할 수도 있다. 5 개의 부분들 중의 4 개 상에서, 테셀레이션 스테이지 (24) 는 제 1 동작 모드를 구현할 수도 있다. 제 5 부분 상에서, 테셀레이션 스테이지 (24) 는 제 2 동작 모드를 구현할 수도 있다.
이전의 예들은 테셀레이션 스테이지 (24) 가 f1 + 1 이 C - 2 이하인지 여부, 또는 f1/2 + 1 이 C - 1 이하인지 여부를 결정하는 것으로서 설명하였지만, 이 개시물의 양태들은 그렇게 제한되지 않는다는 것이 이해되어야 한다. 일반적으로, 임의의 컴포넌트는 f1 + 1 이 C - 2 이하인지 여부, 또는 f1/2 +1 이 C - 1 이하인지 여부를 결정할 수도 있다.
예를 들어, GPU (12) 는 헐 셰이더 스테이지 (22) 를 재이용 버퍼에서의 슬롯들의 수 (즉, C 의 값) 로 로딩할 수도 있고, 헐 셰이더 스테이지 (22) 는 상기 결정들을 수행할 수도 있고, 도메인이 분할되어야 하는 방식을 테셀레이션 스테이지 (24) 에 표시할 수도 있다. 또 다른 예로서, GPU (12) 의 제어기는 상기 결정들을 수행할 수도 있고, 도메인이 분할되어야 하는 방식을 테셀레이션 스테이지 (24) 에 표시할 수도 있다.
상기 예들은 쿼드 도메인에 대한 제 1, 제 2, 또는 제 3 동작 모드들을 설명하였다. 테셀레이션 스테이지 (24) 는 또한, 도메인이 삼각형 도메인인 사례들에 대해 제 1, 제 2, 또는 제 3 동작 모드들을 구현할 수도 있다. 삼각형 도메인에 대하여, fx 및 fy 테스인자를 정의하는 것이 아니라, 헐 셰이더 스테이지 (22) 는 ft 로서 지칭된 하나의 테스인자를 정의할 수도 있다.
이 예에서, ft + 1 이 C - 2 이하일 경우, 테셀레이션 스테이지 (24) 는 삼각형 도메인을 2 개의 부분들로 분할함으로써 제 1 동작 모드를 구현할 수도 있다. 이 예에서, 2 개의 부분들 중의 하나는 다른 부분과는 상이하게 사이즈가 정해질 수도 있다. 다음으로, 테셀레이션 스테이지 (24) 는 최대 사이즈로 정해진 도메인에 대하여 위에서 설명된 바와 같이, 제 1, 제 2, 및 제 3 삼각형들에서의 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 더 작은 사이즈로 정해진 도메인에 대하여, 테셀레이션 스테이지 (24) 는 제 2 동작 모드를 구현할 수도 있다.
이 예에서, 삼각형 도메인에 대하여, ft + 1 이 C - 2 이하가 아니고, ft/2 + 1 이 C - 1 이하일 경우, 테셀레이션 스테이지 (24) 는 제 2 동작 모드를 구현한다. 예를 들어, 테셀레이션 스테이지 (24) 는 삼각형 도메인을 3 개의 부분들 (예를 들어, 트리플렛 (triplet) 들) 로 분할할 수도 있고, 3 개의 부분들의 각각의 상에서 제 2 동작 모드를 구현할 수도 있다. 이 예에서, ft/2 + 1 이 C - 1 이하가 아닐 경우, 테셀레이션 스테이지 (24) 는 제 3 동작 모드를 구현한다. 예를 들어, 테셀레이션 스테이지 (24) 는 삼각형 도메인을 3 개를 초과하는 부분들로 분할할 수도 있다. 테셀레이션 스테이지 (24) 는 부분들 중의 일부 상에서 제 2 동작 모드를 구현할 수도 있고, 다른 부분들의 일부 상에서 제 3 동작 모드를 구현할 수도 있다.
도메인이 삼각형 도메인인 예에서, 테셀레이션 스테이지 (24) 는 ft + 1 이 C - 2 이하인지 여부, 또는 ft/2 +1 이 C - 1 이하인지 여부를 결정할 수도 있다. 그러나, 위에서와 같이, 이 개시물에서 설명된 기법들은 그렇게 제한되지 않는다. 일반적으로, 임의의 다른 컴포넌트는 이 결정들을 수행할 수도 있고, 삼각형 도메인이 분할되어야 하는 방식을 테셀레이션 스테이지 (24) 에 표시할 수도 있다.
상기 예의 기법들은 균일한 테셀레이션이 있을 때에 도메인의 전체에 적용가능할 수도 있다. 균일한 테셀레이션에서, 외부 링들에 대한 테스인자들은 내부 링들에 대한 테스인자들과 동일하다. 그러나, 다른 예들에서, 헐 셰이더 스테이지 (22) 는 가장 외부 링 및 내부 링들에 대한 상이한 수들의 테스인자들을 정의할 수도 있다. 예를 들어, 가장 외부 링은 도메인의 외주와 동등할 수도 있고, 헐 셰이더 스테이지 (22) 는 내부 링들에서의 세그먼트들의 수와 비교하여, 가장 외부 링 상에서 상이한 수의 세그먼트들을 정의할 수도 있다.
이 예에서, 테셀레이션 스테이지 (24) 는 내부 링들에 의해 둘러싸인 도메인 상에서 제 1, 제 2, 또는 제 3 동작 모드를 구현할 수도 있다. 예를 들어, 제 1 내부 링 (예를 들어, 가장 외부 링 이후의 링) 은 서브세트 도메인 (subset domain) 으로서 간주될 수도 있고, 테셀레이션 스테이지 (24) 는 서브세트 도메인 상에서 제 1, 제 2, 또는 제 3 동작 모드를 구현할 수도 있다. 가장 외부 링에서의 프리미티브들 (즉, 서브세트 도메인의 일부가 아닌 도메인의 일부) 에 대하여, 테셀레이션 스테이지 (24) 는 그러한 프리미티브들을 임의의 순서로 출력할 수도 있다.
도 2 는 이 개시물에서 설명된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 또 다른 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 또 다른 예를 예시하는 개념도이다. 예를 들어, 도 1 은 Direct3D 11 API 와 같은 DirectX 11.x API 에 따라 실질적으로 공식화된 그래픽 프로세싱을 예시하였다. 도 2 는 OpenGL 4.x API 에 따라 실질적으로 그래픽 프로세싱 파이프라인을 예시한다.
OpenGL 4.x 그래픽 프로세싱 파이프라인은 Direct3D 11 그래픽 프로세싱 파이프라인과 실질적으로 유사한 방식으로 기능할 수도 있다. 따라서, 간결함을 위하여, Direct3D 11 그래픽 프로세싱 파이프라인 및 OpenGL 4.x 그래픽 프로세싱 파이프라인의 양자와 유사한 컴포넌트들을 설명하기 위하여 도 1 에 대하여 참조가 행해진다.
도 2 의 예에서 예시된 바와 같이, GPU (12) 는 입력 조립기 (36), 버텍스 셰이더 (38), 테셀레이션 제어 셰이더 (40), 프리미티브 생성기 (42), 테셀레이션 평가 셰이더 (44), 지오메트리 셰이더 (46), 클리핑 유닛 (clipping unit; 48), 래스터라이저 (50), 프래그먼트 셰이더 (fragment shader; 52), 및 사후-프로세서 (post-processor; 54) 를 포함한다. 도 1 과 유사하게, 도 2 에서 예시된 예에서는, GPU (12) 가 도 2 에서 예시된 것들보다 더 많거나 더 적은 컴포넌트들을 포함할 수도 있다. 또한, 유닛의 특정 순서화는 예시를 위해 제공되고, 제한하는 것으로 간주되지 않아야 한다.
일부의 방법들에서, OpenGL 4.x 그래픽 프로세싱 파이프라인을 갖는 테셀레이션 프로세스는 Direct3D 11 그래픽 프로세싱 파이프라인을 갖는 테셀레이션 프로세스와 실질적으로 유사할 수도 있다. 예를 들어, OpenGL 4.x 테셀레이션 프로세스는 도 1 에 대하여 위에서 설명된 것과 유사한 방식으로, 패치들 및 제어 포인트들에 의존할 수도 있다. 예를 들어, 도 2 의 입력 조립기 (36) 및 버텍스 셰이더 (38) 는 각각 도 1 의 입력 조립기 스테이지 (18) 및 버텍스 셰이더 스테이지 (20) 와 실질적으로 유사하게 기능할 수도 있다.
더 많은 예들로서, 테셀레이션을 위하여, 도 2 의 테셀레이션 제어 셰이더 (40) 는 도 1 의 헐 셰이더 스테이지 (22) 와 실질적으로 유사하게 기능할 수도 있다. 그러나, 테셀레이션 제어 셰이더 (40) 는 Direct3D 11 의 테스인자들과 유사할 수도 있는 테셀레이션 레벨들을 출력한다. 예를 들어, OpenGL 4.x 의 테셀레이션 레벨들은 도메인 타입, 도메인 내의 링들의 수, 및 링 에지 당 포인트들의 수를 정의할 수도 있다.
프리미티브 생성기 (42) 는 테셀레이션 스테이지 (24) 와 실질적으로 유사한 방식으로 기능할 수도 있다. 예를 들어, 프리미티브 생성기 (42) 는 도메인을 복수의 프리미티브들로 분할하기 위하여 테셀레이션 레벨들 및 도메인 타입을 사용할 수도 있다. 또한, 이 개시물에서 설명된 기법들에 따르면, 프리미티브 생성기 (42) 는 프리미티브들의 도메인 좌표들을 위에서 설명된 방식으로 출력할 수도 있다. 예를 들어, 프리미티브 생성기 (42) 는 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있고, 여기서, 프리미티브들은 대각 스트립들로 존재한다.
도 1 의 테셀레이션 스테이지 (24) 와 유사하게, 프리미티브 생성기 (42) 는 도메인을 복수의 부분들로 분할할 수도 있고, 여기서, 적어도 하나의 부분은 인접 부분이다. 다음으로, 프리미티브 생성기 (42) 는 인접 부분 내의 프리미티브들 버텍스들의 도메인 좌표들을 출력할 수도 있다. 예를 들어, 프리미티브 생성기 (42) 는 제 1 대각 스트립, 그 다음으로, 제 2 대각 스트립, 및 제 3 대각 스트립 내에 존재하는 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 또한, 프리미티브 생성기 (42) 는 테셀레이션 스테이지 (24) 에 대하여 위에서 설명된 상이한 예의 동작 모드들을 구현할 수도 있다.
도 2 의 테셀레이션 평가 셰이더 (44) 는 도 1 의 도메인 셰이더 스테이지 (26) 와 실질적으로 유사하게 기능할 수도 있다. 예를 들어, 테셀레이션 평가 셰이더 (44) 는 프리미티브 생성기 (42) 로부터 생성된 프리미티브들의 버텍스들을 수신할 수도 있고, 프리미티브를 테셀레이션 제어 셰이더 (40) 에 의해 출력된 패치에 추가할 수도 있다. 이러한 방법으로, OpenGL 4.x API 의 그래픽 프로세싱 파이프라인은 패치의 해상도를 증가시키기 위하여 패치 상에서 테셀레이션을 수행할 수도 있다.
지오메트리 셰이더 (46) 는 지오메트리 셰이더 스테이지 (28) 와 실질적으로 유사하게 기능할 수도 있다. 도 2 에서, 클리핑 유닛 (48) 및 래스터라이저 (50) 의 조합은 도 1 에서의 래스터라이저 스테이지 (30) 와 실질적으로 유사하게 기능할 수도 있다. 도 2 에서의 프래그먼트 셰이더 (52) 및 사후-프로세서 (54) 는 각각 도 1 에서의 픽셀 셰이더 스테이지 (32) 및 출력 병합 스테이지 (34) 와 실질적으로 유사하게 기능할 수도 있다. 사후-프로세서 (54) 는 최종적인 픽셀 값들을 프레임 버퍼에 출력할 수도 있고, 디스플레이 프로세서는 프레임 버퍼로부터 픽셀 값들을 취출할 수도 있으며, 이미지를 디스플레이하기 위하여 디스플레이로 하여금 픽셀 값들에 따라 조명하게 할 수도 있다.
위에서 설명된 바와 같이, 도 2 의 테셀레이션 제어 셰이더 (40), 프리미티브 생성기 (42), 및 테셀레이션 평가 셰이더 (44) 는 테셀레이션 프로세스를 구현하기 위하여, 각각 도 1 의 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 및 도메인 셰이더 스테이지 (26) 와 실질적으로 유사하게 기능한다. 따라서, Direct3D 11 및 OpenGL 4.x API 들의 양자는 테셀레이션 프로세스를 구현하기 위하여 2 개의 프로그래밍가능한 셰이더 유닛들 및 하나의 고정-기능 유닛에 의존한다.
일반성을 위하여, 이 개시물에서 설명된 기법들은 제 1 테셀레이션 셰이더 유닛, 테셀레이션 유닛, 및 제 2 테셀레이션 셰이더 유닛과 함께 설명될 수도 있다. 제 1 테셀레이션 셰이더 유닛의 예들은 헐 셰이더 스테이지 (22) 및 테셀레이션 제어 셰이더 (40) 를 포함한다. 테셀레이션 유닛의 예들은 테셀레이션 스테이지 (24) 및 프리미티브 생성기 (42) 를 포함한다. 제 2 테셀레이션 셰이더 유닛의 예들은 도메인 셰이더 스테이지 (26) 및 테셀레이션 평가 셰이더 (44) 를 포함한다.
또한, Direct3D 11 은 용어 "테스인자들" 을 이용하고 OpenGL 4.x 는 유사한 용어들로 간주될 수도 있는 용어 "테셀레이션 레벨들" 을 이용한다. 일반성을 위하여, 이 개시물은 용어 "테셀레이션 인자" 를 이용하고, 그 예들은 테스인자들 및 테셀레이션 레벨들을 포함한다. 이러한 방법으로, 제 1 셰이더 유닛은 테셀레이션 인자들을 테셀레이션 유닛으로 출력하는 것으로 간주될 수도 있고, 테셀레이션 유닛은 테셀레이션 인자들에 응답하여 버텍스들을 제 2 셰이더 유닛으로 출력할 수도 있다.
Direct3D 11 및 OpenGL 4.x 는 2 개의 셰이더 유닛들 및 하나의 고정-기능 유닛을 사용하지만, 이 개시물에서 설명된 기법들은 그렇게 제한되지 않는다는 것에 주목해야 한다. 예를 들어, 다른 시스템들에서는, 제 1 및 제 2 셰이더 유닛들이 고정-기능 유닛들이고 테셀레이션 유닛이 셰이더 유닛인 것이 가능할 수도 있다. 또 다른 예로서, 모두 고정-기능 유닛들일 수도 있거나, 모두 셰이더 유닛들일 수도 있거나, 또는 그 임의의 조합일 수도 있다.
그러므로, 일부의 예들에서는, 제 1 유닛이 제 1 셰이더 유닛과 유사한 기능들을 수행하지만, 셰이더 유닛 또는 고정-기능 유닛일 수도 있고, 제 2 유닛이 테셀레이션 유닛과 유사한 기능들을 수행하지만, 셰이더 유닛 또는 고정-기능 유닛일 수도 있고, 제 3 유닛이 제 2 셰이더 유닛과 유사한 기능들을 수행하지만, 셰이더 유닛 또는 고정-기능 유닛일 수도 있는 것으로 간주될 수도 있다. 또한, 제 1 셰이더 유닛, 테셀레이션 유닛, 및 제 2 셰이더 유닛은 도 1 및 도 2 에서 별도의 유닛들로서 예시되지만, 이 개시물의 양태들은 그렇게 제한되지 않는다. 이 유닛들과, 아마도 도 1 및 도 2 에서 예시된 그래픽 프로세싱 파이프라인들의 임의의 유닛은 공통의 유닛으로 함께 조합될 수도 있다. 따라서, 이 유닛들의 기능성은 설명의 용이함을 위하여 별도로 설명되지만, 이 유닛들은 공유된 하드웨어에서 또는 별개의 컴포넌트들로서 구현될 수도 있다.
도 3 은 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법을 예시하는 도면이다. 도 3 에서 예시된 예는 테셀레이션 스테이지 (24) 및 프리미티브 생성기 (42) 가 아닌, 테셀레이션 유닛의 다른 예들에 의해 구현될 수도 있다. 도 3 은 삼각형 도메인인 도메인 (56) 을 예시하고, 포인트들 및 프리미티브 패턴은 도메인 (56) 의 라인들의 중심을 따라 대칭적이다.
예시된 바와 같이, 도메인 (56) 은 복수의 프리미티브들 (예를 들어, 삼각형들) 로 테셀레이팅된다. 일부의 다른 예들에서, 이 개시물의 테셀레이션 유닛과 달리, 테셀레이션 유닛은 프리미티브들의 버텍스들의 도메인 좌표들을 링-대-링 (ring-by-ring) 방식으로 출력하고, 여기서, 이 예에서의 링은 삼각형이다. 예를 들어, 도 3 은 링 (58) 및 링 (60) 을 예시한다. 링 (58) 은 가장 외부 링이고, 도메인 (56) 의 경계와 경계를 이루는 프리미티브들을 포함한다. 링 (60) 에서의 프리미티브가 도메인 (56) 의 경계 상에서 존재하므로, 링 (60) 은 제 1 내부 링이다.
일부의 다른 기법들에서는, 이 다른 기법들의 테셀레이션 유닛이 링 (58) 내에 존재하는 프리미티브들의 전부의 도메인 좌표들을 출력한다. 다음으로, 이 다른 기법들의 테셀레이션 유닛은 링 (60) 내에 존재하는 모든 프리미티브들의 도메인 좌표들을 출력한다. 도 3 에서 도시된 바와 같이, 프리미티브들의 일부는 이해를 보조하기 위하여 번호 부여된다. 예를 들어, 이 다른 기법들의 테셀레이션 유닛은 프리미티브 1, 그 다음으로, 프리미티브 2, 프리미티브 3, 등등에서 프리미티브 42 까지의 도메인 좌표들을 출력하는데, 이것은 이 프리미티브들이 모두 링 (58) 내에 존재하기 때문이다. 다음으로, 이 다른 기법들의 테셀레이션 유닛은 프리미티브 43 으로부터 시작하는 링 (60) 에서의 프리미티브들의 도메인 좌표들을 출력한다.
도 3 에서 예시된 예에서, 프리미티브 1 은 도메인 (56) 의 제 1 프리미티브이므로, 이 다른 기법들의 테셀레이션 유닛이 프리미티브 1 의 도메인 좌표들을 출력한 후, 도메인 셰이더는 프리미티브 1 의 3 개의 도메인 좌표들의 각각을 패치 좌표들로 변환하기 위하여 3 회를 실행하고, 대응하는 패치 좌표들을 재이용 버퍼에 저장한다. 다음으로, 이 다른 기법들의 테셀레이션 유닛이 프리미티브 2 의 도메인 좌표들을 출력한 후, 도메인 셰이더는 프리미티브 2 가 2 개의 버텍스들을 프리미티브 1 과 공유하므로 1 회만 실행할 수도 있고, 이 2 개의 버텍스들에 대한 패치 좌표들은 재이용 버퍼에 저장될 수도 있다. 도메인 셰이더는 프리미티브 2 의 공유되지 않은 버텍스의 도메인 좌표들을 패치 좌표들로 변환하기 위하여 프리미티브 2 의 공유되지 않은 버텍스를 변환할 수도 있고, 대응하는 패치 좌표들을 재이용 버퍼에 저장하였다.
이 다른 기법들의 테셀레이션 유닛이 프리미티브 42 의 도메인 좌표들을 출력할 때까지, 이 다른 기법들의 테셀레이션 유닛은 링 (58) 을 따라 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 도 3 에서 예시된 바와 같이, 프리미티브 42 는 2 개의 버텍스들을 프리미티브 1 과 공유한다. 그러나, 재이용 버퍼의 제한된 사이즈로 인해, 재이용 버퍼는 프리미티브 1 의 도메인 좌표들에 대응하는 패치 좌표들을 제거하였을 수도 있다. 이 경우, 도메인 셰이더는 3 회 실행할 수도 있고, 도메인 좌표들을 프리미티브 1 및 프리미티브 42 에 의해 공유된 버텍스들의 패치 좌표들로 재변환할 수도 있다. 다시 말해서, 도메인 셰이더는 프리미티브 1 의 도메인 좌표들을 패치 좌표들로 이미 변환하였지만, 이 다른 기법들에서는, 도메인 셰이더가 프리미티브 1 의 도메인 좌표들 (즉, 프리미티브 (42) 와 공유된 좌표들) 을 다시 한 번 변환해야 할 수도 있다.
다음으로, 이 다른 기법들에서, 테셀레이션 유닛은 링 (60) 에서의 프리미티브 (43) 의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 예시된 바와 같이, 프리미티브 (43) 는 2 개의 버텍스들을 프리미티브 2 와 공유하고, 프리미티브 2 는 하나의 버텍스를 프리미티브 42 와 공유한다. 이와 같이, 도메인 셰이더는 두 번 실행할 수도 있다. 예를 들어, 프리미티브 43 는 하나의 버텍스를 프리미티브 42 와 공유하므로, 그 버텍스에 대한 패치 좌표들은 재이용 버퍼에서 이용될 수도 있다. 그러나, 프리미티브 2 와 공유되며 프리미티브 42 와 공유되지 않는 프리미티브 43 의 버텍스에 대해서는, 재이용 버퍼의 제한된 사이즈로 인해, 재이용 버퍼는 이 버텍스의 도메인 좌표들에 대응하는 패치 좌표들을 제거할 수도 있다. 이 경우, 도메인 셰이더가 이 버텍스의 도메인 좌표들을 패치 좌표들로 이전에 변환하였더라도, 도메인 셰이더는 이 버텍스의 도메인 좌표들을 패치 좌표들로 변환하는 것을 실행할 필요가 있을 수도 있다.
도 4 는 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 도 4 에서 예시된 예는 테셀레이션 스테이지 (24) 및 프리미티브 생성기 (42) 가 아닌, 테셀레이션 유닛의 다른 예들에 의해 구현될 수도 있다. 도 4 는 쿼드 도메인인 도메인 (62) 을 예시한다. 포인트들 및 프리미티브 패턴은 도메인 (62) 의 라인들의 중심을 따라 대칭적이다.
예시된 바와 같이, 도메인 (62) 은 복수의 프리미티브들 (예를 들어, 삼각형들) 로 테셀레이팅된다. 일부의 다른 예들에서, 이 개시물의 테셀레이션 유닛과 달리, 테셀레이션 유닛은 도메인 (62) 에서의 프리미티브들의 버텍스들의 도메인 좌표들을 링-대-링 방식으로 출력하고, 여기서, 이 예에서의 링은 직사각형이다.
설명의 용이함을 위하여, 도메인 (62) 의 외부 링에서 존재하는 프리미티브들 중의 일부만 예시되어 있다. 예를 들어, 도메인 (62) 의 외부 링은 프리미티브 1 내지 프리미티브 216 을 포함한다. 이 예에서, 이 다른 기법들의 테셀레이션 유닛은 프리미티브 1, 그 다음으로, 프리미티브 2, 등등에서 프리미티브 216 까지의 버텍스들에 대한 도메인 좌표들을 출력한다.
그러나, 이 다른 기법들에서는, 이 다른 기법들의 테셀레이션 유닛이 프리미티브 216 의 도메인 좌표들을 출력할 때까지, 재이용 버퍼가 프리미티브 1 의 도메인 좌표들에 대응하는 패치 좌표들을 제거하였을 수도 있다. 따라서, 프리미티브 216 이 2 개의 버텍스들을 프리미티브 1 과 공유하더라도, 도메인 셰이더는 프리미티브 216 의 도메인 좌표를 대응하는 패치 좌표들로 변환하는 것을 3 회 실행할 필요가 있을 수도 있다.
도 5 는 테셀레이션을 위한 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 도 5 에서 예시된 예는 테셀레이션 스테이지 (24) 및 프리미티브 생성기 (42) 가 아닌, 테셀레이션 유닛의 다른 예들에 의해 구현될 수도 있다. 도 5 는 쿼드 도메인인 도메인 (64) 을 예시하고, 포인트들 및 프리미티브 패턴은 도메인 (64) 의 라인들의 중심을 따라 대칭적이다.
도 5 에서 예시된 예는 일부의 다른 기법들이 도메인 셰이더의 실행들의 수를 감소시키도록 시도하였던 하나의 예의 방식이다. 예를 들어, 도 4 에서, 이 다른 기법들의 테셀레이션 유닛은 하나의 링으로부터의 프리미티브들을 출력한다. 도 5 에서, 이 다른 기법들의 테셀레이션 유닛은 2 개의 링들에서의 프리미티브들의 도메인 좌표들을 동시에 출력한다.
이러한 출력 방식은 도메인 셰이더가 실행할 필요가 있는 횟수를 감소시킬 수도 있다. 예를 들어, 이 다른 기법들의 테셀레이션 유닛이 프리미티브 5 의 도메인 좌표들을 출력할 때, 프리미티브 5 가 프리미티브들 1 및 2 와 공유하는 도메인 좌표들에 대한 패치 좌표들은 재이용 버퍼에서 여전히 이용가능할 수도 있다. 그러나, 심지어 도 5 에서 예시된 방식은 도메인 셰이더의 희망하는 것보다 더 많은 인스턴스들을 실행할 수도 있다. 예를 들어, 이 다른 기법들의 테셀레이션 유닛이 프리미티브 416 의 도메인 좌표들을 출력할 때, 프리미티브 416 과 공유되는 프리미티브 5 의 버텍스들의 도메인 좌표들에 대한 패치 좌표들은 더 이상 재이용 버퍼에 저장되지 않을 수도 있다.
이러한 방법으로, 도 3 및 도 4 에서 예시된 예들에서, 이 다른 기법들의 테셀레이션 유닛은 각각의 링에 대한 프리미티브들의 하나의 스트립을 생성하고, 그래픽 파이프라인에서의 추가의 (예를 들어, 도메인 셰이더 이후의) 유닛들이 동일한 링에서의 프리미티브들 사이에서 재이용 버퍼에서의 버텍스들을 재이용하는 것이 가능할 수도 있다. 그러나, 그래픽 파이프라인에서의 추가의 유닛들이 재이용 버퍼의 제한된 사이즈로 인해 링들에 걸쳐 프리미티브들에 대한 버텍스들을 재이용하는 것이 가능하지 않을 수도 있다. 이것은 도메인 셰이더의 여분의 실행들로 귀착된다.
예를 들어, 재이용 버퍼는 32 개의 캐시 슬롯들을 포함하는 것으로 가정한다. 도 3 및 도 4 에서 예시된 예들에서는, 동일한 버텍스에 대한 2 개의 캐시 미스 (cache miss) 들이 있을 수도 있다. 캐시 미스는 도메인 좌표에 대한 대응하는 패치 좌표들이 재이용 버퍼에 저장되지 않는 사례를 지칭할 수도 있다. 예를 들어, 도 3 및 도 4 에서 예시된 예들에서는, 도메인 셰이더가 도메인 좌표들을 버텍스에 대한 패치 좌표들로 변환한 후, 재이용 버퍼의 제한된 사이즈로 인해, 도메인 셰이더가 이 동일한 버텍스의 도메인 좌표들을 패치 좌표들로 변환하는 것을 적어도 한 번 이상 실행할 필요가 있을 것이라는 것이 가능할 수도 있다.
도 5 에서 예시된 예는 도 3 및 도 4 에서 예시된 기법들에 관련하여, 도메인 셰이더의 실행들의 수를 감소시킬 수도 있다. 그러나, 일부의 예들에서, 링의 에지를 따라 64 개에 이르는 버텍스들이 있을 수도 있다. 이 경우, 심지어 도 5 에서 예시된 예는 동일한 버텍스의 도메인 좌표들을 패치 좌표들로 변환하기 위한 도메인 셰이더의 다수의 실행들로 귀착될 수도 있다.
따라서, 도 3 내지 도 5 와 함께 예시된 기법들은 재이용 버퍼의 효율에 관한 제한들을 설정할 수도 있다. 예를 들어, 하나의 링에서의 버텍스들에 대한 도메인 좌표들에 대응하는 패치 좌표들은 제 2 링에 대한 도메인 좌표들을 출력할 때에 손실된다. 또한, 도 3 에서 알 수 있는 바와 같이, 도메인 (56) 의 외부 경계를 따라 존재하는 프리미티브들 1 내지 14 의 버텍스들은 링 (60) 에서의 프리미티브들 중의 임의의 것 (예를 들어, 링 (60) 에서의 전진하는 프리미티브 (43)) 과 공유되지 않는다. 따라서, 도메인 (56) 의 외부 경계를 따라 존재하는 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 손실될 경우, 재이용 버퍼의 효율에 관한 부정적 영향은 매우 적은 것 내지 전혀 없는 것일 수도 있다. 예를 들어, 링의 하나의 변을 따르는 버텍스들이 손실되고, 링의 다른 변을 따르는 버텍스들은 재이용 버퍼에서 보존될 경우, 재이용 버퍼의 효율에 관한 부정적 영향은 거의 없는 것 내지 전혀 없는 것일 수도 있다.
그러나, 도 3 내지 도 5 의 예들에서, 링의 하나의 변을 따르는 버텍스들의 이러한 보존은 발생하지 않을 수도 있다. 예를 들어, 버텍스들의 도메인 좌표들이 도 3 내지 도 5 의 예들에서 출력되는 순서는 축 정렬된 것으로서 간주될 수도 있다. 이 다른 기법들의 테셀레이션 유닛이 프리미티브들 1 내지 14 의 도메인 좌표들을 출력한 후, 프리미티브들 15 내지 28 의 대부분은 임의의 버텍스들을 프리미티브들 1 내지 14 와 공유하지 않는다 (프리미티브 15 및 16 은 예외임). 그러나, 링 (60) 에서의 전진하는 프리미티브들 (43) 은 제한된 사이즈로 인해 재이용 버퍼에서 손실되는 버텍스들을 프리미티브들 1 내지 14 와 공유한다. 따라서, 프리미티브들 1 내지 14 에 대한 패치 좌표들은 프리미티브들 15 내지 28 에 대한 패치 좌표들보다, 프리미티브들 43 을 출력하고 전진할 때에 이용가능하다는 것을 보장하는 것이 더욱 바람직할 수도 있다.
위에서 설명된 바와 같이, 이 개시물에서 설명된 기법들은 재이용 버퍼의 효율을 최대화하기 위하여 도메인 좌표들의 출력 방식을 제공한다. 예를 들어, 위에서 설명된 바와 같이, 이 개시물에서 설명된 기법들에 따른 테셀레이션 유닛 (예를 들어, 테셀레이션 스테이지 (24) 및 프리미티브 생성기 (42)) 은 도메인을 복수의 부분들로 분할할 수도 있고, 여기서, 부분들 중의 적어도 하나는 인접 부분이다. 도 3 내지 도 5 에서 예시된 링들은 인접 부분들로서 간주되어야 한다.
예를 들어, 이 개시물에서 이용된 바와 같이, 인접 부분은 도메인에서 갭이 전혀 없도록 인접 부분의 영역 내에 (예를 들어, 인접 부분의 에지들의 단부들 내에) 속하는 임의의 프리미티브를 포함한다. 도 3 내지 도 5 에서 예시된 링들은 도메인에서 갭이 있도록 링들에 의해 둘러싸인 영역 내에 속하는 프리미티브들을 배제한다. 예를 들어, 도 3 에서는, 링 (58) 이 도메인 (56) 의 전부를 둘러싸지만, 링 (58) 은 링 (60) 내에 속하는 프리미티브들을 배제한다. 이러한 방법으로, 링 (58) 은 도메인 (56) 을 천공하여, 도메인 (56) 에서 갭을 생성한다. 프리미티브들의 이러한 유사한 배제는 또한 도 4 및 도 5 에서 알 수 있다.
테셀레이션 유닛 (예를 들어, 테셀레이션 스테이지 (24) 또는 프리미티브 생성기 (42)) 은 인접 부분 내의 대각 스트립들을 따라 도메인 좌표들을 출력할 수도 있다. 다시 말해서, 테셀레이션 유닛은 대각 보행 방향으로 도메인 좌표들을 출력한다. 이 개시물에서 이용된 바와 같은 "보행 (walking)" 은 테셀레이션 유닛이 프리미티브들의 도메인 좌표들을 출력하는 단계들을 지칭한다. 대각 보행 방향으로 출력하는 하나의 잠재적인 장점은, 대각 스트립 길이가 하나의 프리미티브의 스트립 길이로부터 시작하여 점차적으로 늘어나는 것이다. 이것은 대각 스트립의 다른 변으로부터 추가되는 버텍스들로 귀착될 수도 있는 반면, 재이용 버퍼는 대각 스트립의 내부 변으로부터의 버텍스들을 선입선출 방식으로 대체한다.
도 6 은 이 개시물에서 설명된 하나 이상의 예들에 따라 GPU 를 더욱 상세하게 예시하는 블록도이다. 예를 들어, 도 6 은 GPU (12) 의 예를 더욱 상세하게 예시한다. 예시된 바와 같이, GPU (12) 는 테셀레이션 유닛 (66), 제어기 (74), 도메인 셰이더 (76), 및 재이용 버퍼 (78) 를 포함한다. 테셀레이션 유닛 (66) 은 도 1 의 테셀레이션 스테이지 (24) 또는 도 2 의 프리미티브 생성기 (42) 의 하나의 예이다. 재이용 버퍼 (78) 는 위에서 설명된 재이용 버퍼의 예이다.
도메인 셰이더 (76) 가 GPU (12) 의 하나 이상의 셰이더 코어들과 같이, GPU (12) 상에서 실행됨을 표시하기 위하여, 도메인 셰이더 (76) 는 점선들로 예시되고, 여기서, 셰이더 코어는 도메인 셰이더 (76) 와 같은 셰이더들의 실행을 위한 GPU (12) 의 전용 하드웨어이다. 다시 말해서, 이 예에서, 도메인 셰이더 (76) 는 하드웨어 블록이 아니라, 하드웨어 블록 상에서 실행되는 소프트웨어 유닛이다. 도메인 셰이더 (76) 의 하나의 예는 도메인 셰이더 스테이지 (26) (도 1) 이다. 도메인 셰이더 (76) 의 또 다른 예는 테셀레이션 평가 셰이더 (44) (도 2) 이다.
제어기 (74) 는 GPU (12) 의 전체적인 기능성을 제어하는 GPU (12) 의 제어 유닛일 수도 있다. 예를 들어, 제어기 (74) 는 셰이더 프로그램들을 실행할 것인지 그리고 언제 실행할 것인지를 결정할 수도 있다. 제어기 (74) 는 또한 테셀레이션 유닛 (66) 의 동작 모드를 결정할 수도 있다. 대안적으로, 테셀레이션 유닛 (66) 은 동작 모드를 결정할 수도 있다. 제어기 (74) 는 하드웨어, 하드웨어 상에서 실행되는 소프트웨어, 또는 하드웨어 상에서 실행되는 펌웨어일 수도 있다. 또한, 일부의 예들에서는, 제어기 (74) 가 도메인 셰이더 (76) 를 언제 실행할 것인지를 결정하는 대신에 또는 이와 같이 결정하는 것에 추가하여, 재이용 버퍼 (78) 는 도메인 셰이더 (76) 를 언제 실행할 것인지를 결정하도록 구성되는 캐시 제어기를 포함할 수도 있다. 그러나, 예시를 위하여, 기법들은 제어기 (74) 가 동작 모드를 결정하고 도메인 셰이더 (76) 가 언제 실행되어야 하는지를 결정하는 상황에서 설명된다.
제어기 (74) 또는 테셀레이션 유닛 (66) 의 어느 하나는 테셀레이션 유닛 (66) 의 동작 모드를 결정할 수도 있으므로, 이 개시물에서 설명된 기법들은 프로세싱 유닛이 테셀레이션 유닛 (66) 의 동작 모드를 결정하도록 구성되는 것으로서 간주될 수도 있다. 일부의 예들에서, 프로세싱 유닛은 제어기 (74) 일 수도 있다. 일부의 예들에서, 프로세싱 유닛은 테셀레이션 유닛 (66) 일 수도 있다. 일부의 예들에서, 프로세싱 유닛은 제어기 (74) 및 테셀레이션 유닛 (66) 의 조합일 수도 있다. 예시의 용이함을 위하여, 위에서 설명된 바와 같이, 동작 모드를 결정하기 위한 기법들은 프로세싱 유닛이 제어기 (74) 인 예들과 함께 설명된다. 그러나, 프로세싱 유닛은 대안적으로 또는 제어기 (74) 와 함께, 테셀레이션 유닛 (66) 일 수도 있다.
예시된 바와 같이, 테셀레이션 유닛 (66) 은 설정 유닛 (68), 포인트 생성기들 (70), 및 연결성 생성기 (72) 를 포함한다. 설정 유닛 (68), 포인트 생성기들 (70), 및 연결성 생성기 (72) 는 테셀레이션 유닛 (86) 의 고정-기능 하드웨어 유닛들일 수도 있다. 설정 유닛 (68), 포인트 생성기들 (70), 및 연결성 생성기 (72) 는 설명의 용이함을 위하여 별도의 컴포넌트들로서 예시되어 있다. 설정 유닛 (68), 포인트 생성기들 (70), 및 연결성 생성기 (72) 는 단일 유닛, 별도의 유닛들, 또는 그 조합으로서 형성될 수도 있다.
설정 유닛 (68) 은 도 1 의 헐 셰이더 스테이지 (22) 또는 도 2 의 테셀레이션 제어 셰이더 (40) 와 같은 제 1 셰이더 유닛으로부터 테셀레이션 인자들을 입력으로서 수신할 수도 있고, 테셀레이션 인자들로부터 도메인 타입을 결정할 수도 있다. 예를 들어, 4 개의 테셀레이션 인자들이 있을 경우, 설정 유닛 (68) 은 도메인 타입이 삼각형인 것으로 결정할 수도 있고, 6 개의 테셀레이션 인자들이 있을 경우에는, 설정 유닛 (68) 이 도메인 타입이 쿼드인 것으로 결정할 수도 있다. 설정 유닛 (68) 은 반올림 (rounding) 문제들, 올림 (ceiling) 및 버림 (floor) 함수들을 정정하는 것, 반 테셀레이션 인자들을 결정하는 것, 및 테셀레이션 인자들을 감소시키고 조합하는 것과 같은 다른 설정 기능들을 수행할 수도 있다. 일반적으로, 설정 유닛 (68) 은 테셀레이션 유닛 (66) 의 다른 컴포넌트들이 각각의 기능들을 수행할 수 있는 것을 보장하기 위하여 테셀레이션 인자들을 프로세싱할 수도 있다.
포인트 생성기들 (70) 은 테셀레이션 인자들로부터, 얼마나 많은 포인트들이 도메인의 각각의 링의 각각의 에지를 따라 존재하는지와, 포인트들의 위치들 (예를 들어, 포인트들의 u, v 좌표들 또는 u, v, w 좌표들) 을 결정할 수도 있다. 연결성 생성기 (72) 는 도메인에서 복수의 프리미티브들을 형성하기 위하여 포인트들을 연결 (즉, 봉합 (stitch)) 할 수도 있다.
일부의 예들에서, 연결성 생성기 (72) 는 이 개시물에서 설명된 기법들을 구현하도록 구성될 수도 있다. 예를 들어, 도 3 내지 도 5 에서 예시된 바와 같이 프리미티브들의 도메인 좌표들을 출력하는 것이 아니라, 연결성 생성기 (72) 는 도메인을 복수의 부분들로 분할하며 프리미티브들의 도메인 좌표들을 부분들 내의 대각 스트립들로 출력하도록 구성될 수도 있다. 일부의 예들에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인 좌표들을 출력하기 위하여 함께 기능할 수도 있다.
예를 들어, 포인트 생성기들 (70) 은 제 1 대각 스트립 내에 존재하는 프리미티브들의 버텍스들의 좌표들을 결정할 수도 있고, 여기서, 제 1 대각 스트립은 인접 부분 내에 존재한다. 다음으로, 포인트 생성기 (70) 는 (예를 들어, 도 6 에서 예시되지 않았으며 재이용 버퍼 (78) 로부터 별도인 소규모 버퍼 (shallow buffer) 를 통해) 결정된 좌표들을 연결성 생성기 (72) 에 출력할 수도 있다. 연결성 생성기 (72) 는 프리미티브들을 조립할 수도 있고, 제 1 대각 스트립 내에 존재하는 프리미티브들의 버텍스들의 도메인 좌표들을 출력할 수도 있고, 여기서, 제 1 대각 스트립은 인접 부분 내에 존재한다. 포인트 생성기들 (70) 은 또한, 인접 부분 내에 존재하는 제 2 대각 스트립 내에 존재하는 프리미티브들의 버텍스들의 좌표들을 결정할 수도 있고, (예를 들어, 소규모 버퍼를 통해) 결정된 좌표들을 연결성 생성기 (72) 에 출력할 수도 있다. 제 1 대각 스트립 내에 존재하는 버텍스들의 도메인 좌표들을 출력한 후, 연결성 생성기 (72) 는 제 2 대각 스트립 내에 존재하는 버텍스들의 도메인 좌표들을 출력할 수도 있고, 여기서, 제 2 대각 스트립은 인접 부분 내에 존재한다.
하나의 동작 모드에서, 제 2 대각 스트립은 제 1 대각 스트립과 평행할 수도 있고, 연결성 생성기 (72) 는 평행한 제 2 대각 스트립 내에 존재하는 버텍스들의 도메인 좌표들을 출력할 수도 있다. 이 예에서, 평행한 제 2 대각 스트립은 제 1 대각 스트립과는 상이한 수의 프리미티브들을 포함할 수도 있다.
또 다른 동작 모드에서, 제 2 대각 스트립은 제 1 대각 스트립과 접할 수도 있다. 이 개시물에서 이용된 바와 같은 접하는 것은, 제 2 대각 스트립에서의 오직 하나의 프리미티브가 2 개의 버텍스들을 제 1 대각 스트립에서의 오직 하나의 프리미티브와 공유하는 것을 의미한다. 이러한 방법으로, 제 2 대각 스트립은 오직 하나의 프리미티브에서 제 1 대각 스트립에 연결되고, 이에 따라, 제 1 대각 스트립과 접하는 것으로서 간주될 수도 있다. 이 예에서, 평행한 제 2 대각 스트립은 제 1 대각 스트립과 동일한 수의 프리미티브들을 포함할 수도 있다.
또한, 포인트 생성기들 (70) 은 제 3 대각 스트립 내에 존재하는 프리미티브들의 버텍스들의 좌표들을 결정할 수도 있고, (예를 들어, 소규모 버퍼를 통해) 결정된 좌표들을 연결성 생성기 (72) 에 출력할 수도 있다. 제 2 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력한 후, 다음으로, 연결성 생성기 (72) 는 인접 부분 내에 있는 제 3 대각 스트립 내에 존재하는 프리미티브들의 버텍스들을 출력할 수도 있다. 어느 하나의 동작 모드에서, 제 3 대각 스트립은 제 1 대각 스트립과 평행할 수도 있다. 예를 들어, 제 1 및 제 2 대각 스트립들이 서로 평행한 동작 모드에서는, 제 3 대각 스트립이 제 1 및 제 2 대각 스트립의 양자와 평행할 수도 있다. 제 2 대각 스트립이 제 1 대각 스트립과 접하는 동작 모드에서는, 제 3 대각 스트립이 제 1 대각 스트립과 평행할 수도 있지만, 제 2 대각 스트립과 평행하지 않을 수도 있다.
포인트 생성기들 (70) 은 프리미티브들의 좌표들을 결정할 수도 있고, 연결성 생성기 (72) 가 도메인의 인접 부분들 중의 하나 내의 프리미티브들을 출력하는 것을 완료할 때까지, 연결성 생성기 (72) 는 대각 스트립들 내의 프리미티브들을 출력할 수도 있다. 포인트 생성기들 (70) 은 프리미티브들의 좌표들을 결정할 수도 있고, 다음으로, 연결성 생성기 (72) 는 도메인에서의 또 다른 인접 부분 내의 프리미티브들을 실질적으로 유사한 방식으로 출력할 수도 있다.
연결성 생성기 (72) 는 하나의 프리미티브의 도메인 좌표들을 제어기 (74) 에 출력할 수도 있다. 다음으로, 제어기 (74) 는 재이용 버퍼 (78) 가 출력된 도메인 좌표들에 대응하는 패치 좌표들을 저장하는지 여부를 결정할 수도 있다. 예를 들어, 도메인 좌표들은 재이용 버퍼 (78) 로의 인덱스들일 수도 있다. 위에서 설명된 바와 같이, 도메인 좌표들은 데카르트 좌표들 (예를 들어, u, v 좌표들) 또는 무게중심 좌표들 (예를 들어, u, v, w 좌표들) 일 수도 있다. u 좌표, v 좌표, 및 w 좌표는 각각 17-비트들일 수도 있다. 따라서, u, v 좌표들은 34 비트들을 포함할 수도 있는 반면, u, v, w 좌표들은 51 비트들을 포함할 수도 있다.
제어기 (74) 는 이 34 또는 51 비트들을 재이용 버퍼 (78) 내의 XOR 게이트에 출력할 수도 있다. XOR 게이트는 수신된 비트들을 재이용 버퍼 (78) 의 인덱스들을 표시하는 비트들과 비교할 수도 있다. XOR 게이트의 출력이 수신된 비트들이 재이용 버퍼 (78) 에서의 인덱스와 일치함을 표시할 경우, 재이용 버퍼 (78) 는 캐시 히트 (cache hit) 를 제어기 (74) 에 출력할 수도 있다. 캐시 히트는 재이용 버퍼 (78) 가 34 또는 51 비트들을 형성하였던 도메인 좌표들에 대한 패치 좌표들을 저장한다는 것을 의미한다. XOR 게이트의 출력이 수신된 비트들이 재이용 버퍼 (78) 에서의 인덱스와 일치하지 않음을 표시할 경우, 재이용 버퍼 (78) 는 캐시 미스를 제어기 (74) 에 출력할 수도 있다. 캐시 미스는 재이용 버퍼 (78) 가 34 또는 51 비트들을 형성하였던 도메인 좌표들에 대한 패치 좌표들을 저장하지 않는다는 것을 의미한다.
캐시 히트가 발생할 경우, 재이용 버퍼 (78) 가 34 또는 51 비트들을 형성하였던 도메인 좌표들에 대한 패치 좌표들을 이미 저장하고 있으므로, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 하지 않을 수도 있다. 이 경우, 제어기 (74) 는 그래픽 파이프라인의 후속 유닛들로 하여금, 추가의 프로세싱을 위하여 출력된 도메인 좌표들에 대응하는 패치 좌표들을 판독하게 할 수도 있다. 예를 들어, 제어기 (74) 는 지오메트리 셰이더 스테이지 (28; 도 1) 또는 지오메트리 셰이더 (도 2) 로 하여금, 추가의 프로세싱을 위하여 재이용 버퍼 (78) 로부터, 출력된 도메인 좌표들에 대응하는 패치 좌표들을 판독하게 할 수도 있다.
캐시 미스가 발생할 경우, 재이용 버퍼 (78) 가 34 또는 51 비트들을 형성하였던 도메인 좌표들에 대한 패치 좌표들을 저장하고 있지 않으므로, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있다. 이 경우, 제어기 (74) 는 도메인 좌표들을 도메인 셰이더 (76) 에 제공할 수도 있고, 도메인 셰이더 (76) 는 도메인 좌표들을 대응하는 패치 좌표들로 변환할 수도 있다. 도메인 셰이더 (76) 는 패치 좌표들을 재이용 버퍼 (78) 에 출력할 수도 있다. 재이용 버퍼 (78) 는 궁극적으로, 도메인 좌표들을 형성하였던 34 또는 51 비트들과 동일한 인덱스들에서 패치 좌표들을 저장할 수도 있다. 재이용 버퍼 (78) 가 패치 좌표들을 저장한 후, 제어기 (74) 는 그래픽 파이프라인의 후속 유닛들로 하여금, 추가의 프로세싱을 위하여 재이용 버퍼 (78) 로부터 패치 좌표들을 판독하게 할 수도 있다.
제어기 (74) 는 연결성 생성기 (72) 에 의해 출력된 도메인 좌표들의 각각에 대한 이 단계들을 반복할 수도 있다. 예를 들어, 매 캐시 미스에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 매 캐시 미스에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 하지 않을 수도 있다.
위에서 설명된 바와 같이, 이 개시물에서 설명된 기법들은 도메인 셰이더 (76) 의 인스턴스화들의 수를 최소화할 수도 있다. 이 목적을 위하여, 이 개시물에서 설명된 기법들은 발생하는 캐시 미스들의 수를 최소화할 수도 있다. 예를 들어, 프리미티브들의 도메인 좌표들을 인접 부분들 내의 대각 스트립들로 출력하는 것은, 공유된 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 에 남아 있고, 재이용 버퍼 (78) 는 공유되지 않은 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들을 제거 (예를 들어, 없앰) 할 가능성을 증가시킨다.
이 개시물에서 설명된 기법들에서는, 대각 스트립들의 각각이 제 1 변 (예를 들어, 내부 변) 및 제 2 변 (예를 들어, 외부 변) 을 포함할 수도 있다. 제 1, 제 2, 및 제 3 대각 스트립들이 서로 모두 평행한 일 예의 동작 모드에서는, 제 1 대각 스트립의 외부 변이 제 2 대각 스트립의 내부 변과 동일할 수도 있고, 제 2 대각 스트립의 외부 변은 제 3 대각 스트립의 내부 변과 동일할 수도 있다. 이 예에서, 대각 스트립들의 각각에서의 프리미티브들의 수는 상이할 수도 있다.
하나의 예로서, 제 2 대각 스트립에서의 프리미티브들의 수는 제 1 대각 스트립에서의 프리미티브들의 수보다 더 클 수도 있고, 제 3 대각 스트립에서의 프리미티브들의 수는 제 1 및 제 2 대각 스트립에서의 프리미티브들의 수보다 더 클 수도 있다. 이것은 제 1 대각 스트립의 외부 변 상의 버텍스들의 수가 제 1 대각 스트립의 내부 변 상의 버텍스들의 수보다 더 크고, 제 2 대각 스트립의 외부 변 상의 버텍스들의 수가 제 2 대각 스트립의 내부 변 상의 버텍스들의 수보다 더 큰 것으로 귀착되고, 여기서, 제 2 대각 스트립의 내부 변은 제 1 대각 스트립의 외부 변과 동일하다.
대각 스트립들의 외부 변 상의 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 내에 남아 있음을 보장함으로써, 이 개시물에서 설명된 기법들은 재이용 버퍼 (78) 에 저장되는 패치 좌표들의 수를 점진적으로 늘릴 수도 있다. 다음으로, 재이용 버퍼 (78) 가 가득 차게 될 때, 재이용 버퍼 (78) 는 대각 스트립들의 내부 변을 따라 존재하는 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들을 제거할 수도 있다. 대각 스트립의 내부 변에서 더 적은 프리미티브들이 있으므로, 이 프리미티브들은 도메인에서의 다른 프리미티브들과, 만약 존재할 경우, 동수의 버텍스들을 공유하지 않을 수도 있다. 따라서, 이 내부 변 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 로부터 제거될 경우, 도메인 셰이더 (76) 가 실행할 필요가 있는 횟수에 관한 영향은 작을 수도 있다. 이러한 방법으로, 이 동작 모드는 도 3 내지 도 5 에 대하여 위에서 설명된 예들과 비교하여, 도메인 셰이더 (76) 가 실행할 필요가 있는 횟수에 있어서 감소를 허용한다.
제 2 대각 스트립이 제 1 대각 스트립과 접하는 일 예의 동작 모드는 또한, 공유된 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 에 남아 있을 가능성을 증가시킴으로써 도메인 셰이더 (76) 의 실행을 최소화할 수도 있다. 예를 들어, 재이용 버퍼 (78) 의 저장 능력들 (예를 들어, 재이용 버퍼 (78) 에서의 슬롯들의 수) 이 충분하게 크고 및/또는 도메인에서의 버텍스들의 수가 충분하게 작을 경우에는, 연결성 생성기 (72) 가 제 2 대각 스트립에서의 프리미티브들에 대한 도메인 좌표들을 출력한 후, 재이용 버퍼 (78) 는 제 1 대각 스트립에서의 프리미티브들의 도메인 좌표들에 대응하는 패치 좌표들을 여전히 저장할 수도 있다.
다음으로, 연결성 생성기 (72) 가 제 3 대각 스트립에서의 프리미티브들의 도메인 좌표들을 출력할 때, 제어기 (74) 는 도메인 셰이더 (76) 가 도메인 좌표들 중의 많은 것에 대해 실행할 필요가 없다. 예를 들어, 이 동작 모드에서는, 제 3 대각 스트립의 내부 변이 제 1 대각 스트립의 외부 변과 동일할 수도 있다. 대각 스트립의 외부 변을 따라 존재하는 버텍스들에 대한 도메인 좌표들에 대응하는 패치 좌표들은 재이용 버퍼 (78) 에 여전히 저장될 수도 있고, 제어기 (74) 는 도메인 셰이더 (76) 가 적어도 이 버텍스들에 대해 실행할 필요가 없는 것으로 결정할 수도 있다.
이러한 방법으로, 심지어 제 2 대각 스트립이 제 1 대각 스트립과 접하는 동작 모드에서, 이 개시물에서 설명된 기법들은, 대각 스트립들의 외부 변 상에 존재하는 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 에 남아 있고, 대각 스트립들의 내부 변 상에 존재하는 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 로부터 제거되도록, 재이용 버퍼 (78) 에 저장되는 패치 좌표들을 점진적으로 늘릴 수도 있다. 예를 들어, 제 2 대각 스트립이 제 1 대각 스트립과 접하는 동작 모드에서는, 제 3 대각 스트립에서의 프리미티브들의 수가 제 1 대각 스트립에서의 프리미티브들의 수보다 더 클 수도 있다.
따라서, 제 1 대각 스트립의 내부 변 상에 존재하는 버텍스들의 수는 제 1 대각 스트립의 외부 변 상에 존재하는 버텍스들의 수보다 더 작다. 이러한 방식으로, 재이용 버퍼 (78) 가 제 1 대각 스트립의 내부 변을 따라 존재하는 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들을 제거하더라도, 도메인 셰이더 (76) 가 실행할 필요가 있는 횟수에 관해, 만약 존재할 경우, 작은 부정적 영향이 있을 수도 있다. 이러한 방법으로, 이 동작 모드는 또한, 도 3 내지 도 5 에 대하여 위에서 설명된 예들과 비교하여, 도메인 셰이더 (76) 가 실행할 필요가 있는 횟수에 있어서 감소를 허용한다.
위에서 설명된 바와 같이, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 함께 도메인을 복수의 부분들로 분할할 수도 있고, 여기서, 부분들 중의 적어도 하나는 인접 부분이다. 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 함께, 테셀레이션 인자들 및 재이용 버퍼 (78) 의 저장 능력에 기초하여 도메인을 복수의 부분들로 분할할 수도 있다. 다음으로, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는, 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인을 분할하는 방식에 기초하여 위에서 설명된 일 예의 동작 모드들 중의 하나를 구현할 수도 있다.
쿼드 도메인에 대하여, 테셀레이션 유닛 (66) 은 fx 테셀레이션 인자, 및 fy 테셀레이션 인자를 수신할 수도 있다. fx 테셀레이션 인자는 x-방향으로 링 상에 존재하는 버텍스들의 수를 표시할 수도 있고, fy 테셀레이션 인자는 y-방향으로 링 상에 존재하는 버텍스들의 수를 표시할 수도 있다. 예를 들어, 테셀레이션 유닛 (66) 의 포인트 생성기들 (70) 은 링들의 각각 상에 존재하는 포인트들의 수를 결정하기 위하여 fx 테셀레이션 인자 및 fy 테셀레이션 인자를 사용할 수도 있다. 링들은 포인트들 (에를 들어, 버텍스들) 의 위치를 결정하기 위하여 필요하게 되지만, 연결성 생성기 (72) 는 프리미티브들을 링들에 기초한 것이 아니라, 대각 스트립들로 출력한다는 것에 주목해야 한다. 다시 말해서, 일단 포인트 생성기들 (70) 이 버텍스들의 위치를 결정하기 위하여 링들을 사용하면, 연결성 생성기 (72) 는 도 3 내지 도 5 에 대하여 위에서 설명된 링-대-링 방식이 아니라, 대각 스트립들로 프리미티브들의 버텍스들의 도메인 좌표들을 출력한다.
일부의 예들에서, 설정 유닛 (68) 은 fx 및 fy 테셀레이션 인자들을 사전-프로세싱 (preprocess) 할 수도 있다. 예를 들어, 테셀레이션 유닛 (66) 이 정수 파티셔닝 (integer partitioning) 을 적용해야 할 경우, 설정 유닛 (68) 은 fx 및 fy 를 정수 값들로 반올림할 수도 있다. 테셀레이션 유닛 (66) 이 홀수 분수 파티셔닝 (odd fractional partitioning) 을 적용해야 할 경우, 설정 유닛 (68) 은 fx 및 fy 를 홀수 정수로 반올림할 수도 있다. 테셀레이션 유닛 (66) 이 짝수 분수 파티셔닝 (even fractional partitioning) 을 적용해야 할 경우, 설정 유닛 (68) 은 fx 및 fy 를 짝수 정수로 반올림할 수도 있다. 테셀레이션 유닛 (66) 이 2 의 제곱 (pow2) 파티셔닝을 적용해야 할 경우, 설정 유닛 (68) 은 fx 및 fy 를 2n (즉, 2가 정수 (dyadic integer)) 으로 반올림할 수도 있다. 어떤 경우에도, 이 개시물은 fx 및 fy 테셀레이션 인자들이 설정 유닛 (68) 에 의한 사전-프로세싱에 후속하는 인자들인 것으로 지칭한다.
연결성 생성기 (72) 는 fx 및 fy 중의 더 작은 것에 기초하여 쿼드 도메인을 분할할 수도 있다. 예를 들어, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 fx 및 fy 중의 더 작은 것을 결정할 수도 있다. 예를 들어, f1 이 fx 및 fy 중의 더 작은 것과 동일한 것으로 하고, 여기서, f2 는 fx 및 fy 중의 더 큰 것과 동일하다. fx 가 fy 와 동일할 경우, f1 이 fx 또는 fy 의 어느 하나와 동일한 것으로 한다. 다시 말해서, f1 은 f2 보다 더 작거나 f2 와 동일하다 (즉, f1 ≤ f2).
상기 예는 도메인이 쿼드 도메인인 것으로 가정하였다. 삼각형 도메인에 대하여, 테셀레이션 유닛 (66) 은 fx 및 fy 테셀레이션 인자를 수신하지 않을 수도 있다. 오히려, 테셀레이션 유닛 (66) 은 이 개시물이 간략화를 위하여 f1 으로서 지칭하는 하나의 테셀레이션 인자를 수신할 수도 있다.
더욱 상세하게 설명된 바와 같이, 테셀레이션 인자 f1 의 값은 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인을 분할하는 방식을 결정할 수도 있다. 또한, 재이용 버퍼 (78) 에서의 슬롯들의 수는 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인을 분할하는 방식을 결정할 수도 있다. "C" 는 재이용 버퍼 (78) 에서의 슬롯들의 수 (즉, 재이용 버퍼 (78) 의 저장 능력들) 와 동일한 것으로 한다.
일부의 예들에서, 제어기 (74) 는 f1 + 1 이 C - 2 이하인지 여부를 결정할 수도 있다. 테셀레이션 유닛 (66) 이 f1 + 1 이 C - 2 이하인지 여부를 결정하는 것이 가능할 수도 있다는 것이 이해되어야 한다. 예를 들어, 테셀레이션 유닛 (66) 은 C 의 값으로 사전-로딩 (preload) 될 수도 있다. 다시 말해서, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1 + 1 이 C - 2 이하인지 여부를 결정할 수도 있다. 그러나, 설명의 용이함을 위하여, 제어기 (74) 는 f1 + 1 이 C - 2 이하인지 여부를 결정하는 것으로 설명된다.
제어기 (74) 가 f1 + 1 이 C - 2 이하인 것으로 결정할 경우, 제어기 (74) 는 연결성 생성기 (72) 가 제 1 동작 모드에서 동작할 것을 지시할 수도 있다. 이 제 1 동작 모드는 공동 대각 보행 (joint diagonal walk) 으로서 지칭될 수도 있다. 제 1 동작 모드에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인을 2 개의 부분들로 분할할 수도 있고, 하나 이상의 양자의 부분들은 인접 부분들이다. 예를 들어, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 쿼드 도메인을 2 개의 절반들로 분할할 수도 있고, 2 개의 절반들의 각각 상에서 제 1 동작 모드를 구현할 수도 있다. 또 다른 예로서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 삼각형 도메인을 1/3 부분 및 2/3 부분으로 분할할 수도 있다. 이 예에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 2/3 부분 상에서 제 1 동작 모드를 구현할 수도 있고, 1/3 부분 상에서, 이하에서 더욱 상세하게 설명된 제 2 동작 모드를 구현할 수도 있다.
도 7 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법을 예시하는 도면이다. 도 7 은 쿼드 도메인인 도메인 (80) 을 예시한다. 예시된 바와 같이, 이 예에서는, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 이 f1 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있으므로, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인 (80) 을 2 개의 부분들 (81A 및 81B) 로 분할할 수도 있다. 다시 말해서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 제 1 동작 모드를 구현할 수도 있다. 이 경우, 부분들 (81A 및 81B) 은 각각 공동 부분들로서 간주될 수도 있다. 예를 들어, 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인 (80) 을 쿼드러플렛들로 분할해야 하였을 경우, 부분 (81A) 은 쿼드러플렛들 중의 2 개를 포함하는 공동 부분을 포함하고, 부분 (81B) 은 쿼드러플렛들 중의 다른 2 개를 포함하는 공동 부분을 포함한다.
예시를 위하여, 도 7 은 연결성 생성기 (72) 가 부분 (81B) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있는 방식을 예시한다. 연결성 생성기 (72) 는 포인트 생성기들 (70) 에 의해 결정된 도메인 좌표들에 기초하여 도메인 좌표들을 출력하는 것이 이해되어야 한다. 부분 (81B) 내에 속하는 도메인 (80) 의 모든 프리미티브들이 부분 (81B) 의 일부로서 포함되므로, 부분 (81B) 은 인접 부분이다. 예를 들어, 부분 (81B) 은 도메인 (80) 에서 갭을 생성하지 않는다.
도 7 에서 예시된 예에서, 연결성 생성기 (72) 는 도메인 (80) 의 x-축 경계를 따라, 부분 (81B) 의 중심에 위치되며 외부를 향해 연장되는 프리미티브들의 도메인 좌표들을 출력하는 것을 시작할 수도 있다. 이것은 제 1 대각 스트립 (82), 제 2 대각 스트립 (84), 및 제 3 대각 스트립 (86) 에 대하여 더욱 예시된다. 예를 들어, 제 1 대각 스트립 (82) 은 프리미티브들 (88A 내지 88N) 을 포함하고, 제 2 대각 스트립 (84) 은 프리미티브들 (90A 내지 90N) 을 포함하고, 제 3 대각 스트립 (86) 은 프리미티브들 (92A 내지 92M) 을 포함한다.
제 1 동작 모드 (예를 들어, f1 + 1 이 C - 2 이하임) 에서는, 제 2 대각 스트립 (84) 이 제 1 대각 스트립 (82) 과 동일한 수의 프리미티브들을 포함할 수도 있다. 예를 들어, 도 7 에서, 제 1 대각 스트립 (82) 은 "N" 개의 프리미티브들을 포함하고, 제 2 대각 스트립 (84) 은 또한 "N" 개의 프리미티브들을 포함한다. 제 1 동작 모드에서, 제 3 대각 스트립 (86) 은 제 1 대각 스트립 (82) 및 제 2 대각 스트립 (84) 과는 상이한 수의 프리미티브들을 포함한다. 예를 들어, 제 3 대각 스트립 (86) 은 "M" 개의 프리미티브들을 포함한다.
또한, 제 1 동작 모드에서, 제 2 대각 스트립 (84) 은 제 1 대각 스트립 (82) 과 접한다. 예를 들어, 제 2 대각 스트립 (84) 은 2 개의 버텍스들을 제 1 대각 스트립 (82) 의 오직 하나의 프리미티브와 공유하는 오직 하나의 프리미티브를 포함한다. 도 7 에서 예시된 바와 같이, 제 2 대각 스트립 (84) 의 프리미티브 (90A) 는 2 개의 버텍스들을 제 1 대각 스트립 (82) 의 프리미티브 (88N) 와 공유하고, 제 2 대각 스트립 (84) 의 나머지 프리미티브들 중의 어느 것도 2 개의 버텍스들을 제 1 대각 스트립 (82) 의 임의의 나머지 프리미티브들과 공유하지 않는다.
또한, 제 1 동작 모드에서, 제 3 대각 스트립 (86) 은 제 1 대각 스트립 (82) 과 평행하지만, 제 2 대각 스트립 (84) 과는 평행하지 않다. 제 1 대각 스트립 (82), 제 2 대각 스트립 (84), 및 제 3 대각 스트립 (86) 의 각각은 내부 변 및 외부 변을 포함할 수도 있다. 내부 변은 부분 (81B) 의 중심에 더 근접한 제 1 대각 스트립 (82), 제 2 대각 스트립 (84), 및 제 3 대각 스트립 (86) 의 변을 지칭하고, 외부 변은 부분 (81B) 의 중심으로부터 떨어져 있는 제 1 대각 스트립 (82), 제 2 대각 스트립 (84), 및 제 3 대각 스트립 (86) 의 변을 지칭한다.
2 개의 대각 스트립들이 서로 평행한 것은, 2 개의 대각 스트립들이 동일한 축으로부터 시작하고 동일한 방향으로 외부를 향해 연장되는 것을 의미한다. 예를 들어, 제 1 대각 스트립 (82) 및 제 3 대각 스트립 (86) 의 양자는 도메인 (80) 의 x-축을 따라 시작하고, 동일한 방향으로 외부를 향해 연장된다. 제 2 대각 스트립 (84) 은 도메인 (80) 의 x-축을 따라 시작하지만, 제 1 대각 스트립 (82) 및 제 3 대각 스트립 (86) 과 동일한 방향으로 외부를 향해 연장되지 않는다.
일부의 예들에서, 2 개의 대각 스트립들이 서로 평행한 것은, 2 개의 대각 스트립들 중의 하나의 외부 변이 2 개의 대각 스트립들 중의 다른 것의 내부 변과 동일한 것을 의미한다. 예를 들어, 제 1 대각 스트립 (82) 의 외부 변은 제 3 대각 스트립 (86) 의 내부 변과 동일하다. 따라서, 제 3 대각 스트립 (86) 은 제 1 대각 스트립 (82) 과 평행하다. 그러나, 제 2 대각 스트립 (84) 의 내부 변 또는 외부 변의 어느 것도 제 1 대각 스트립 (82) 및 제 3 대각 스트립 (86) 의 내부 변 또는 외부 변과 동일하지 않다. 따라서, 제 3 대각 스트립 (86) 은 제 2 대각 스트립 (84) 과 평행하지 않다.
또한, 2 개의 대각 스트립들이 내부 변 및 외부 변을 공유하지 않더라도, 2 개의 대각 스트립들이 서로 평행한 것으로 간주되는 것이 가능할 수도 있다. 예를 들어, 위에서 설명된 바와 같이, 2 개의 대각 스트립들이 도메인의 동일한 축으로부터 시작하고 동일한 방향으로 외부를 향해 연장될 경우, 2 개의 대각 스트립들은 서로 평행한 것으로서 간주될 수도 있다.
도 7 에서, 연결성 생성기 (72) 는 프리미티브들 (88A 내지 88N) 에 대한 도메인 좌표들 (즉, 제 1 대각 스트립 (82) 에서의 프리미티브들에 대한 도메인 좌표들) 을 출력할 수도 있다. 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 프리미티브들 (88A 내지 88N) 의 이 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들 (즉, 도메인 좌표들에 대응하는 패치 좌표들) 을 재이용 버퍼 (78) 에 저장할 수도 있다. 다음으로, 연결성 생성기 (72) 는 프리미티브들 (90A 내지 90N) 에 대한 도메인 좌표들 (즉, 제 2 대각 스트립 (84) 에서의 프리미티브들에 대한 도메인 좌표들) 을 출력할 수도 있다. 다시, 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 프리미티브들 (90A 내지 90N) 의 이 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들을 재이용 버퍼 (78) 에 저장할 수도 있다. 다음으로, 연결성 생성기는 프리미티브들 (92A 내지 92M) 에 대한 도메인 좌표들 (즉, 제 3 대각 스트립 (86) 에서의 프리미티브들에 대한 도메인 좌표들) 을 출력할 수도 있다. 위에서와 같이, 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 프리미티브들 (92A 내지 92M) 의 이 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들을 재이용 버퍼 (78) 에 저장할 수도 있다.
연결성 생성기 (72) 가 부분 (81B) 에서의 프리미티브들의 전부의 도메인 좌표들을 출력하는 것을 완료할 때까지, 연결성 생성기 (72) 는 도메인 좌표들을 이러한 방식으로 출력하는 것을 계속할 수도 있다. 다음으로, 연결성 생성기 (72) 는 부분 (81A) 에 대하여 이 단계들을 반복할 수도 있다. 도 7 에서 예시된 바와 같이, 부분 (81B) 및 부분 (81A) 은 많은 버텍스들을 공유한다. 일부의 경우들에 있어서, 부분 (81A) 및 부분 (81B) 에 의해 공유되었던 이 버텍스들의 일부에 대한 도메인 좌표들에 대응하는 패치 좌표들은 이제 더 이상 재이용 버퍼 (78) 에서 이용가능하지 않는 것이 가능할 수도 있다. 버텍스들의 일부에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 가 실행하게 할 수도 있다. 그러나, 도메인 셰이더 (76) 가 이 공유된 버텍스들의 도메인 좌표들을 패치 좌표들로 재변환하기 위하여 실행할 필요가 있을 수도 있지만, 이 개시물에서 설명된 기법들은 도 3 내지 도 5 에서 예시된 예들과 비교하여, 도메인 셰이더 (76) 가 실행할 필요가 있는 전체 횟수를 여전히 감소시킬 수도 있다.
일부의 사례들에서는, 도 7 에서 예시된 바와 같이, 대각 스트립의 프리미티브들을 출력한 후에, 그 대각 스트립에 합동인 (conguent) (즉, 접하는) 대각 스트립이 전혀 없을 수도 있다. 이 경우, 연결성 생성기 (72) 는 미러 대향 (mirror opposite) 인 대각 스트립의 프리미티브들을 출력할 수도 있다. 예를 들어, 연결성 생성기 (72) 가 대각 스트립 (94) 내의 프리미티브들의 도메인 좌표들을 출력한 후에는, 대각 스트립 (94) 에 대해 접하는 대각 스트립이 전혀 없을 수도 있다. 이 경우, 연결성 생성기 (72) 는 대각 스트립 (94) 의 미러 대향인 대각 스트립 (96) 으로 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
서로의 미러 대향들인 대각 스트립들은 연장될 경우에 동일한 포인트에서 도메인 내에서 대칭성의 라인을 교차할 대각 스트립들을 지칭한다. 예를 들어, 도 7 에서, 대칭성의 라인은 도메인 (80) 의 중심 하부-단부 (bottom-end) 로부터 상부를 향해, 또는 도메인 (80) 의 중심 상부-단부 (top-end) 로부터 하부를 향해 연장되는 수직 라인으로서 간주될 수도 있다. 이 예에서, 대각 스트립 (94) 및 대각 스트립 (96) 이 더욱 연장될 경우, 대각 스트립 (94) 및 대각 스트립 (96) 은 도메인 (80) 의 대칭성의 라인을 따라 교차할 것이다.
이러한 방식으로, 도 7 에서 예시된 바와 같이, 연결성 생성기 (72) 는 부분 (81B) 의 하부-단부의 중심으로부터 시작하고, 부분 (81B) 의 우측-단부 및 좌측-단부의 양자를 향해, 그리고 부분 (81B) 의 상부-단부를 향해 외부를 향하는 방향으로 연장되는 프리미티브들의 도메인 좌표들을 출력한다. 대안적으로, 연결성 생성기 (72) 는 부분 (81B) 의 상부-단부의 중심으로부터 부분 (81B) 의 우측-단부 및 좌측-단부의 양자를 향해, 그리고 부분 (81B) 의 하부-단부를 향해 외부를 향하도록 시작할 수도 있다. 이 경우, 부분 (81B 및 81A) 에 의해 공유되는 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 로부터 제거될 가능성이 있다. 따라서, 연결성 생성기 (72) 가 부분 (81B) 의 상부-단부가 아니라, 부분 (81B) 의 하부-단부의 중심으로부터 시작하는 것이 더욱 유리할 수도 있다. 어느 하나의 상황에서 (에를 들어, 부분 (81) 의 상부-단부 또는 하부-단부로부터 시작함), 제 1 대각 스트립 (82) 은 x-축으로부터 시작하고, 제 2 대각 스트립 (84) 은 x-축에서 종료되므로, 출력 방식은 x-방향으로의 공동 보행으로서 지칭될 수도 있다.
그러나, 이 개시물에서 설명된 기법들은 그렇게 제한되지 않는다. 일부의 다른 예들에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인 (80) 을, 도 7 에서 예시된 수평 부분들이 아니라 2 개의 수직 부분들로 분할할 수도 있다. 이 경우, 연결성 생성기 (72) 는 좌측-단부의 중심 또는 우측-단부의 중심으로부터 시작할 수도 있고, 2 개의 수직 부분들 중의 수직 부분의 상부-단부 및 하부-단부의 양자를 향해 외부를 향하는 방향으로 연장되는 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 이 예에서, 제 1 대각 스트립은 도메인의 y-축으로부터 시작할 수도 있고, 이 예에서, 제 2 대각 스트립은 도메인의 y-축에서 종료될 수도 있으므로, 이러한 출력 방식은 y-방향으로의 공동 보행으로서 지칭될 수도 있다. 예를 들어, y-방향으로의 공동 보행은 도메인 (80) 이 90 도 회전되었을 경우에 x-방향으로의 공동 보행과 동일한 것으로서 간주될 수도 있다.
프로세싱 유닛 (예를 들어, 제어기 (74) 또는 테셀레이션 유닛 (66)) 이 연결성 생성기 (72) 가 제 1 동작 모드를 구현해야 하는 것으로 결정할 때, 제어기 (74) 는 연결성 생성기 (72) 가 x-방향으로의 공동 보행 또는 y-방향으로의 공동 보행을 구현해야 하는 것인지 여부를 추가로 결정할 수도 있다. 예를 들어, 제어기 (74) 는 테셀레이션 인자들에 기초하여, 연결성 생성기 (72) 가 x-방향으로의 공동 보행 또는 y-방향으로의 공동 보행을 구현해야 하는 것인지 여부를 결정할 수도 있다.
예를 들어, 제 1 동작 모드에서, f1 + 1 은 C - 2 이하이고, f1 은 fx 및 fy 중의 더 작은 것과 동일하게 된다. 제어기 (74) 가 f1 이 fx 와 동일 (즉, fx 가 fy 이하임) 한 것으로 결정할 경우, 제어기 (74) 는 연결성 생성기 (72) 가 인접 부분에서의 프리미티브들의 도메인 좌표들을 출력하기 위하여 x-방향으로의 공동 보행을 구현해야 하는 것으로 결정할 수도 있다. 제어기 (74) 가 f1 이 fy 와 동일 (즉, fy 가 fx 이하임) 한 것으로 결정할 경우, 제어기 (74) 는 연결성 생성기 (72) 가 인접 부분에서의 프리미티브들의 도메인 좌표들을 출력하기 위하여 y-방향으로의 공동 보행을 구현해야 하는 것으로 결정할 수도 있다. 다음으로, 연결성 생성기 (72) 는 제어기 (74) 의 결정에 기초하여, x-방향으로의 공동 보행 또는 y-방향으로의 공동 보행의 어느 하나에서 인접 부분에서의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
도 8 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 도 8 은 삼각형 도메인인 도메인 (98) 을 예시한다. 예시된 바와 같이, 이 예에서는, 프로세싱 유닛 (예를 들어, 제어기 (74) 또는 테셀레이션 유닛 (66)) 이 f1 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있으므로, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인 (98) 을 2 개의 부분들 (100A 및 100B) 로 분할할 수도 있다. 다시 말해서, 도 7 과 유사하게, 연결성 생성기 (72) 는 제 1 동작 모드를 구현할 수도 있다.
삼각형 도메인 (98) 에 대하여, 테셀레이션 유닛 (66) 은 도 7 의 쿼드 도메인 (80) 과 같은 쿼드 도메인에 대한 2 개의 테셀레이션 인자들 (즉, fx 및 fy) 이 아니라, 링의 각각의 변을 따라 존재하는 포인트들의 수를 표시하는 하나의 테셀레이션 인자를 수신할 수도 있다. 일관성을 위하여, 삼각형 도메인 (98) 에 대한 링의 각각의 변을 따라 존재하는 포인트들의 수를 표시하는 테셀레이션 인자는 f1 으로서 지칭된다. 그러나, fx 및 fy 테셀레이션 인자들은 전혀 없으므로, f1 은 간단하게 f 로서 지칭될 수도 있다.
또한, 연결성 생성기 포인트 생성기들 (70 및 72) 이 도메인 (98) 을 2 개의 부분들로 분할하는 제 1 동작 모드에서는, 2 개의 부분들 중의 하나가 도메인 (98) 의 1/3 을 포함할 수도 있고, 2 개의 부분들 중의 다른 하나가 도메인 (98) 의 2/3 를 포함할 수도 있다. 예를 들어, 부분 (100B) 은 도메인 (98) 의 2/3 를 포함하는 인접 부분이고, 부분 (100A) 은 도메인 (98) 의 1/3 을 포함하는 인접 부분이다.
포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인 (98) 을 동일한 절반들로 분할하는 것이 가능할 수도 있다. 그러나, f1 + 1 이 C - 2 이하인 경우에는, 연결성 생성기 (72) 가 도메인 (98) 의 2/3 내의 (즉, 부분 (100B) 내의) 프리미티브들에 대한 도메인 좌표들을 출력하기 위한 재이용 버퍼 (78) 에서의 충분한 저장 슬롯들이 있을 수도 있다. 도메인 (98) 의 2/3 는 도메인 (98) 의 1/2 보다 더 크므로, 연결성 생성기 (72) 가 도메인 (98) 을 1/3 부분 (100A) 및 2/3 부분 (100B) 으로 분할하는 것이 더욱 유리할 수도 있다.
예시를 위하여, 도 8 은 연결성 생성기 (72) 가 부분 (100B) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있는 방식을 예시한다. 위에서 설명된 바와 같이, 연결성 생성기 (72) 는 포인트 생성기들 (70) 이 결정하였던 도메인 좌표들을 출력할 수도 있다. 부분 (100B) 은 2 개의 트리플렛들의 조합이므로 (예를 들어, 도메인 (98) 의 2/3 는 도메인 (98) 의 2 개의 1/3 들의 조합과 동일함), 부분 (100B) 에서의 프리미티브들의 도메인 좌표들을 출력하는 것은 공동 보행으로서 간주될 수도 있다.
도 8 에서 예시된 예에서, 연결성 생성기 (72) 는 부분 (100B) 의 중심에 위치되며 외부를 향해 연장되는 프리미티브들의 도메인 좌표들을 출력하는 것을 시작할 수도 있다. 예를 들어, 도 8 은 제 1 대각 스트립 (102), 제 2 대각 스트립 (104), 및 제 3 대각 스트립 (106) 을 예시한다. 이 예에서, 연결성 생성기 (72) 는 제 1 대각 스트립 (102) 내에 존재하는 프리미티브들의 도메인 좌표들, 그 다음으로, 제 2 대각 스트립 (104) 내에 존재하는 프리미티브들의 도메인 좌표들, 그리고 그 다음으로, 제 3 대각 스트립 (106) 내에 존재하는 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 대각 스트립들의 각각에 대한, 도메인 좌표들의 출력 후에, 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들 (즉, 도메인 좌표들에 대응하는 패치 좌표들) 을 재이용 버퍼 (78) 에 저장할 수도 있다.
도 8 에서 예시된 예에서, 연결성 생성기 (72) 는 제 1 동작 모드를 구현하고 있으므로, 제 2 대각 스트립 (104) 은 제 1 대각 스트립 (102) 에 접하고, 제 2 대각 스트립 (104) 은 제 1 대각 스트립 (102) 과 동일한 수의 프리미티브들을 포함할 수도 있다. 또한, 제 1 동작 모드에서, 제 3 대각 스트립 (106) 은 제 1 대각 스트립 (102) 과 평행할 수도 있고, 제 2 대각 스트립 (104) 과는 대각이 아닐 수도 있다. 예시된 바와 같이, 제 3 대각 스트립 (106) 은 제 1 대각 스트립 (102) 및 제 2 대각 스트립 (104) 과는 상이한 수의 프리미티브들을 포함할 수도 있다.
연결성 생성기 (72) 가 부분 (100B) 에서의 프리미티브들의 전부의 도메인 좌표들을 출력하는 것을 완료할 때까지, 연결성 생성기 (72) 는 도메인 좌표들을 이러한 방식으로 출력하는 것을 계속할 수도 있다. 도 8 은 부분 (100B) 이 도메인 (98) 의 하부 2/3 를 포함하는 것으로서 예시하지만, 이 개시물의 양태들은 그렇게 제한되지 않는 것이 이해되어야 한다. 다른 예들에서, 부분 (100B) 은 도메인 (98) 의 우측 또는 좌측 2/3 를 포함할 수도 있다. 부분 (100A) 에 대하여, 연결성 생성기 (72) 는 이하에서 설명된 제 2 동작 모드에 따라 프리미티브들을 출력할 수도 있다.
도 7 및 도 8 에서 예시된 예들에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 공동 보행을 구현할 수도 있고, 여기서, 공동 보행은 쿼드 도메인에 대한 쿼드러플렛의 2 개의 섹션들과, 삼각형 도메인에 대한 트리플렛의 2 개의 섹션들을 포함한다. 공동 보행에서는, 2 개의 섹션들이 서로에 대해 인접하고, 도메인 전반에 걸쳐 (즉, 도 7 및 도 8 에서의 수직 방향으로) 연장되는 가상적인 중간 라인 상의 버텍스들을 공유한다. 도 7 및 도 8 은 또한, 링들의 각각을 따라 동일한 수의 버텍스들이 있고, 링들의 각각을 따르는 버텍스들의 수는 짝수인 균일한 테셀레이션의 예를 예시한다. 이것은 테셀레이션 유닛 (66) 의 포인트 생성기들 (70) 이 테셀레이션에서 대칭성 패턴을 활용하고, 링을 따라 버텍스들의 절반에 대한 좌표들을 컴퓨팅함으로써, 그리고 (재이용 버퍼 (78) 이외의, 또는 재이용 버퍼 (78) 를 포함하는) 내부 버퍼를 이용하여 링을 따라 버텍스들의 다른 절반의 좌표들을 미러링 (mirroring) 함으로써 계산들을 절감하도록 할 수도 있다.
도 7 과 유사하게, 대각 스트립의 프리미티브들을 출력한 후에, 그 대각 스트립에 합동인 대각 스트립이 전혀 없을 수도 있다. 이 경우, 연결성 생성기 (72) 는 미러 대향인 대각 스트립의 프리미티브들을 출력할 수도 있다. 예를 들어, 연결성 생성기 (72) 가 대각 스트립 (108) 내의 프리미티브들의 도메인 좌표들을 출력한 후에는, 대각 스트립 (108) 에 대해 접하는 대각 스트립이 전혀 없을 수도 있다. 이 경우, 연결성 생성기 (72) 는 대각 스트립 (108) 의 미러 대향인 대각 스트립 (110) 으로 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 예를 들어, 대각 스트립 (108) 및 대각 스트립 (110) 이 연장되어야 할 경우, 대각 스트립 (108) 및 대각 스트립 (110) 은 대칭성의 라인을 따라 동일한 포인트에서 만날 것이다.
도 9 는 이 개시물에서 설명된 하나 이상의 예들에 따라 연결성 생성기가 출력하는 도메인의 인접 부분의 예를 예시하는 도면이다. 예를 들어, 도 9 는 인접 부분 (112) 을 예시한다. 인접 부분 (112) 의 프리미티브들은 프리미티브들 내의 수치 값들에 의해 식별되고, 연결성 생성기 (72) 가 도메인 좌표들을 출력할 수도 있는 순서를 표시한다. 예를 들어, 연결성 생성기 (72) 는 프리미티브 0, 그 다음으로 프리미티브 1, 그 다음으로 프리미티브 2 등등의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 프리미티브들의 버텍스들에서의 수치 값들은 도메인 좌표들을 나타낸다. 예를 들어, 프리미티브 0 에 대한 도메인 좌표들은 (2, 3, 10) 이다. 도메인 좌표들은 (u, v) 좌표들 또는 (u, v, w) 좌표들인 것이 이해되어야 한다. 그러나, 설명의 용이함을 위하여, 도메인 좌표들은 단일의 값을 제공받는다.
도 9 에서 예시된 예에서, fy 는 6 과 동일하고, fx 는 18 과 동일하다. 그러나, 예시의 용이함을 위하여, 인접 부분의 절반만이 예시되어 있다. 예를 들어, 도 9 는 세그먼트가 2 개의 버텍스들 사이의 라인인, y-축을 따라 6 개의 세그먼트들과, x-축을 따라 9 개의 세그먼트들을 예시한다. 완전한 인접 부분은 y-축을 따라 6 개의 세그먼트들 및 x-축을 따라 18 개의 세그먼트들을 포함한다. 예시의 용이함을 위하여, y-축을 따라 6 개의 세그먼트들 및 x-축을 따라 9 개의 세그먼트들을 포함하는 인접 부분의 일부만이 예시되어 있다 (즉, 인접 부분의 절반). 예를 들어, y-축을 따라 6 개의 세그먼트들이 있으므로, fy 는 6 과 동일하고, 여기서, 세그먼트는 2 개의 단부 포인트들을 포함하고, 2 개의 단부 포인트들은 프리미티브들의 버텍스들이다. 도 9 에서, x-축을 따라 실제로 18 개의 세그먼트들이 있으므로, fx 는 18 과 동일하지만, 18 개의 세그먼트들 중의 9 개만이 도 9 에서 예시되어 있다.
또한, 도 9 에서 예시된 예에서, 재이용 버퍼 (78) 에서의 슬롯들의 수는 9 인 것으로 가정한다 (즉, C 는 9 와 동일함). 이 경우, fy 는 fx 보다 더 작으므로, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1 이 fy 와 동일한 것으로 결정할 수도 있다 (즉, f1 은 6 과 동일함). 이 예에서, f1 + 1 은 7 과 동일하고, C - 2 도 7 과 동일하다. 그러므로, 이 예에서, 제어기 (74) 는 f1 + 1 이 C - 2 이하인 것으로 결정할 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 1 동작 모드 (즉, 공동 보행) 를 구현하게 할 수도 있다.
또한, 이 예에서는, fy 가 fx 보다 더 작으므로, 제어기 (74) 는 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 y-방향으로의 공동 보행을 구현하게 할 수도 있다. 예를 들어, 도 9 에서 예시된 바와 같이, 연결성 생성기 (72) 는 인접 부분 (112) 의 좌측-단부로부터 시작할 수도 있고, 인접 부분 (112) 의 우측-단부로 외부를 향해 연장될 수도 있다. 도 9 에서 예시된 예에서, 제 1 대각 스트립은 프리미티브들 2, 3, 및 4 를 포함할 수도 있고, 제 2 대각 스트립은 프리미티브들 5, 6, 및 7 을 포함할 수도 있고, 제 3 대각 스트립은 프리미티브들 8, 9, 10, 11, 및 12 를 포함할 수도 있다. 제 1 대각 스트립은 y-축으로부터 시작하고, 제 2 대각 스트립은 y-축에서, 이에 따라 y-방향으로의 공동 보행을 종료한다.
이 경우, 제 2 대각 스트립은 제 1 대각 스트립과 접하고, 제 3 대각 스트립은 제 1 대각과 평행하고, 제 3 대각과는 평행하지 않다. 또한, 제 1 및 제 2 대각 스트립들에서의 프리미티브들의 수는 동일하고 (즉, 각각에 있어서 3 개의 프리미티브들), 제 3 대각 스트립에서의 프리미티브들의 수는 상이하다 (즉, 3 개의 프리미티브들 대신에 5 개의 프리미티브들).
이하의 표 1 은 인접 부분 (112) 의 처음 42 개의 프리미티브들에 대한 재이용 캐시 (78) 의 거동을 예시한다. 표 1 에서, 제 1 컬럼 (column) 은 프리미티브를 표시하고, 제 2 컬럼은 도메인 좌표들을 표시하고, 제 3 컬럼은 재이용 버퍼 (78) 에 저장된 패치 좌표들을 표시한다. 예시의 용이함을 위하여, 패치 좌표들은 그 대응하는 도메인 좌표들과 동일한 값을 부여받는다. 또한, 표 1 의 제 3 컬럼에서, 진하게 그리고 밑줄로 표시되는 패치 좌표들은 도메인 셰이더 (78) 가 도메인 좌표들을 패치 좌표들로 변환하도록 실행하였던 인스턴스를 표시한다.
표 1 에서, 프리미티브 0 에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 3 번의 인스턴스화들로 하여금 프리미티브 0 의 도메인 좌표들을 패치 좌표들로 변환할 것을 실행하게 할 수도 있다. 프리미티브 1 은 2 개의 버텍스들을 프리미티브 0 과 공유한다 (즉, 도메인 좌표 3 및 10 을 갖는 버텍스). 이 경우, 프리미티브 1 에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 한 번의 인스턴스화가 실행되게 할 수도 있다: 도메인 좌표 4 에 대하여 한 번. 도메인 좌표들 3 및 10 에 대응하는 패치 좌표들이 이미 재이용 버퍼 (78) 에 저장되어 있으므로, 제어기 (74) 는 도메인 좌표들 3 및 10 에 대한 도메인 셰이더의 인스턴스화를 야기시키지 않을 수도 있다.
표 1 에서 예시된 바와 같이, 프리미티브 7 후에는, 재이용 버퍼 (78) 가 가득 찬다. 이 경우, 연결성 생성기 (72) 가 프리미티브 8 의 도메인 좌표들을 출력한 후, 제어기 (74) 는 도메인 셰이더 (76) 의 2 번의 인스턴스화들이 실행되게 할 필요가 있는 것으로 결정할 수도 있다: 프리미티브 8 의 도메인 좌표 0 에 대해 한 번, 그리고 프리미티브 8 의 도메인 좌표 8 에 대해 한 번. 따라서, 재이용 버퍼 (78) 는 패치 좌표들 0 및 8 에 대한 저장 공간을 비우기 위하여, 패치 좌표들 2 및 3 인, 가장 조기에 저장된 패치 좌표들을 제거할 수도 있다.
표 1 은 제 1 동작 모드에 대한 도메인 셰이더 (76) 의 실행을 최소화하기 위하여 재이용 버퍼 (78) 를 효율적으로 사용하기 위한 방식을 표시할 수도 있다. 예를 들어, 모든 공유된 버텍스들은 완전히 사용된다 (예를 들어, 여분의 캐시 미스들이 없음). 예를 들어, 버텍스의 도메인 좌표들에 대응하는 패치 좌표들은, 연결성 생성기 (72) 가 그 버텍스를 공유하는 프리미티브들의 대부분에 대한 도메인 좌표들을 출력할 때까지 재이용 버퍼에서 저장된 상태로 남아 있다. 이것은 도메인 셰이더 (76) 가 실행할 필요가 있는 횟수를 최소화할 수도 있다.
상기 예들은 f1 + 1 이 C - 2 이하인 제 1 동작 모드에 대한 기법들을 설명하였다. 그러나, f1 + 1 이 C - 2 이하인 조건은 모든 경우에 있어서 참 (true) 이 아닐 수도 있다. 예를 들어, 상기 예들과 비교하여 f1 의 더 큰 값들 및/또는 C 의 더 작은 값들에 대하여, f1 + 1 이 C - 2 이하인 조건은 유효하지 않을 수도 있다.
일부의 예들에서, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 이 f1 + 1 이 C - 2 이하가 아닌 것으로 결정할 경우, 제어기 (74) 는 이 예에서, f1/2 + 1 이 C - 1 이하인지 여부를 결정할 수도 있다. 제어기 (74) 가 f1/2 + 1 이 C - 1 이하인 것으로 결정할 경우, 제어기 (74) 는 연결성 생성기 (72) 로 하여금 제 2 동작 모드를 구현하게 할 수도 있다.
제 2 동작 모드에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 쿼드 도메인을 4 개의 부분들 (예를 들어, 쿼드러플렛들) 로 분할할 수도 있고, 여기서, 부분들 중의 적어도 하나는 인접 부분이다. 제 2 동작 모드에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 삼각형 도메인을 3 개의 부분들 (예를 들어, 트리플렛들) 로 분할할 수도 있고, 여기서, 부분들 중의 적어도 하나는 인접 부분이다.
제 1 동작 모드와 유사한 제 2 동작 모드에 대하여, 연결성 생성기 (72) 는 제 1 대각 스트립 내에 존재하는 프리미티브들의 도메인 좌표들, 그 다음으로, 제 2 대각 스트립 내에 존재하는 프리미티브들의 도메인 좌표들, 그리고 그 다음으로, 제 3 대각 스트립 내에 존재하는 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 그러나, 제 2 동작 모드에서, 제 2 대각 스트립은 제 1 대각 스트립 및 제 3 대각 스트립과 평행하다.
예를 들어, 제 2 대각 스트립의 내부 변은 제 1 대각 스트립의 외부 변과 동일할 수도 있다. 또한, 제 2 대각 스트립의 외부 변은 제 3 대각 스트립의 내부 외부 변과 동일할 수도 있다. 이 예에서는, 제 2 대각 스트립이 제 1 및 제 3 대각 스트립들의 양자와 평행하므로, 제 1 대각 스트립의 외부 또는 내부 변의 어느 것도 제 3 대각 스트립의 내부 또는 외부 변과 동일하지 않더라도, 제 1 대각 스트립은 제 3 대각 스트립과 평행하다.
도 10 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 도 10 은 쿼드 도메인인 도메인 (114) 을 예시한다. 예시된 바와 같이, 이 예에서는, 제어기 (74) 가 f1/2 + 1 이 C - 1 이하인 것으로 결정하였을 수도 있으므로 (즉, 연결성 생성기 (72) 는 제 1 동작 모드를 구현해야 함), 연결성 생성기 (72) 는 도메인 (114) 을 4 개의 부분들 (115A 내지 115D) 로 분할할 수도 있다. 도 7 의 예에서, 부분들 (81A 및 81B) 은 공동 부분들인 것으로서 설명되었다. 도 10 의 예에서, 부분들 (115A 내지 115) 은 단일 부분들로서 간주될 수도 있고, 여기서, 2 개의 단일 부분들은 함께 공동 부분을 형성한다.
예시를 위하여, 도 10 은 연결성 생성기 (72) 가 부분 (115C) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있는 방식을 예시한다. 부분 (115C) 은 도메인 (114) 에서 갭을 생성하지 않으므로, 부분 (115C) 은 인접 부분으로서 간주될 수도 있다.
도 10 에서 예시된 예에서, 연결성 생성기 (72) 는 부분 (115C) 의 코너에 위치되며 부분 (115C) 의 대향하는 코너를 향해 외부를 향하도록 연장되는 프리미티브들의 도메인 좌표들을 출력하는 것을 시작할 수도 있다. 예를 들어, 도 10 에서, 연결성 생성기 (72) 는 부분 (115C) 의 하부-우측 코너로부터 시작할 수도 있고, 부분 (115C) 의 상부-좌측 코너를 향해 외부를 향하도록 연장될 수도 있다. 이것은 제 1 대각 스트립 (116), 제 2 대각 스트립 (118), 및 제 3 대각 스트립 (120) 에 대하여 더욱 예시된다. 예시된 바와 같이, 제 2 대각 스트립 (118) 은 제 1 대각 스트립 (116) 보다 상부-우측 코너에 더 근접해 있고, 제 3 대각 스트립 (120) 은 제 2 대각 스트립 (118) 및 제 1 대각 스트립 (116) 의 양자보다 상부-우측 코너에 더 근접해 있다.
제 1 대각 스트립 (116) 은 프리미티브들 (122A 내지 122N) 을 포함하고, 제 2 대각 스트립 (118) 은 프리미티브들 (124A 내지 124M) 을 포함하고, 제 3 대각 스트립 (120) 은 프리미티브들 (126A 내지 126X) 을 포함한다. 제 2 동작 모드에서, 제 2 대각 스트립 (118) 은 제 1 대각 스트립 (116) 과는 상이한 수의 프리미티브들을 포함할 수도 있다. 예를 들어, 제 2 대각 스트립 (118) 은 "M" 개의 프리미티브들을 포함할 수도 있고, 제 1 대각 스트립 (116) 은 "N" 개의 프리미티브들을 포함할 수도 있으며, 여기서, M 및 N 은 상이한 숫자들이다. 또한, 제 3 대각 스트립 (120) 은 제 1 대각 스트립 (116) 및 제 2 대각 스트립 (118) 과는 상이한 수의 프리미티브들을 포함할 수도 있다. 예를 들어, 제 3 대각 스트립 (120) 은 "X" 개의 프리미티브들을 포함하고, 여기서, X 는 M 및 N 과는 상이하다.
제 2 동작 모드에서, 제 1 대각 스트립 (116) 은 제 2 대각 스트립 (118) 과 평행할 수도 있다. 예를 들어, 제 2 대각 스트립 (118) 의 내부 변은 제 1 대각 스트립 (116) 의 외부 변과 동일하다. 또한, 제 2 동작 모드에서, 제 3 대각 스트립 (120) 은 제 2 대각 스트립 (118) 과 평행할 수도 있다. 예를 들어, 제 3 대각 스트립 (120) 의 내부 변은 제 2 대각 스트립 (118) 의 외부 변과 동일하다. 이 경우, 제 2 대각 스트립 (118) 이 제 1 대각 스트립 (116) 및 제 3 대각 스트립 (120) 의 양자와 평행하므로, 제 1 대각 스트립 (116) 및 제 3 대각 스트립 (120) 은 서로 평행한 것으로 간주될 수도 있다.
도 10 에서, 연결성 생성기 (72) 는 프리미티브들 (122A 내지 122N) 에 대한 도메인 좌표들 (즉, 제 1 대각 스트립 (116) 에서의 프리미티브들에 대한 도메인 좌표들) 을 출력할 수도 있다. 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 프리미티브들 (122A 내지 122N) 의 이 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들 (즉, 도메인 좌표들에 대응하는 패치 좌표들) 을 재이용 버퍼 (78) 에 저장할 수도 있다. 다음으로, 연결성 생성기 (72) 는 프리미티브들 (124A 내지 124M) 에 대한 도메인 좌표들 (즉, 제 2 대각 스트립 (118) 에서의 프리미티브들에 대한 도메인 좌표들) 을 출력할 수도 있다. 다시, 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 프리미티브들 (124A 내지 124M) 의 이 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들을 재이용 버퍼 (78) 에 저장할 수도 있다. 다음으로, 연결성 생성기는 프리미티브들 (126A 내지 126X) 에 대한 도메인 좌표들 (즉, 제 3 대각 스트립 (120) 에서의 프리미티브들에 대한 도메인 좌표들) 을 출력할 수도 있다. 위에서와 같이, 재이용 버퍼 (78) 가 그에 대한 대응하는 패치 좌표들을 저장하지 않는 프리미티브들 (126A 내지 126X) 의 이 도메인 좌표들 중의 임의의 것에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 인스턴스화가 실행되게 할 수도 있고, 도메인 셰이더 (76) 는 변환된 좌표들을 재이용 버퍼 (78) 에 저장할 수도 있다.
제 2 동작 모드에서, 연결성 생성기 (72) 는 프리미티브들의 도메인 좌표들을 지그-재그 (zig-zag) 방식으로 출력할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 도메인 (114) 의 x-축으로부터 시작하는 제 1 대각 스트립 (116) 의 도메인 좌표들을 출력하는 것을 시작할 수도 있다. 다음으로, 일부의 예들에서, 연결성 생성기 (72) 는 도메인 (114) 의 x-축으로부터 시작하는 제 2 대각 스트립 (118) 의 도메인 좌표들을 출력할 수도 있다. 제 3 대각 스트립 (120) 에 대하여, 연결성 생성기 (72) 는 도메인 (114) 의 x-축으로부터 다시 한 번 시작할 수도 있다. 이러한 출력은 지그-재그 패턴을 형성할 수도 있다.
연결성 생성기 (72) 가 부분 (115C) 에서의 프리미티브들의 전부의 도메인 좌표들을 출력하는 것을 완료할 때까지, 연결성 생성기 (72) 는 도메인 좌표들을 이러한 방식으로 출력하는 것을 계속할 수도 있다. 다음으로, 연결성 생성기 (72) 는 부분들 (115A, 115B, 및 115D) 에 대하여 이 단계들을 반복할 수도 있다. 도 10 에서 예시된 바와 같이, 부분 (115C) 및 부분들 (115A, 115B, 및 115D) 은 많은 버텍스들을 공유한다. 일부의 경우들에 있어서, 부분들 (115A, 115B, 및 115D) 중의 각각의 하나와 부분 (115C) 에 의해 공유되었던 이 버텍스들의 일부에 대한 도메인 좌표들에 대응하는 패치 좌표들은 이제 더 이상 재이용 버퍼 (78) 에서 이용가능하지 않는 것이 가능할 수도 있다. 버텍스들의 일부에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 가 실행하게 할 수도 있다. 그러나, 도메인 셰이더 (76) 가 이 공유된 버텍스들의 도메인 좌표들을 패치 좌표들로 재변환하기 위하여 실행할 필요가 있을 수도 있지만, 이 개시물에서 설명된 기법들은 도 3 내지 도 5 에서 예시된 예들과 비교하여, 도메인 셰이더 (76) 가 실행할 필요가 있는 전체 횟수를 여전히 감소시킬 수도 있다.
도 10 의 예에서, 연결성 생성기 (72) 는 부분 (115C) 의 하부-우측 코너로부터 시작하였고, 부분 (115C) 의 상부-좌측 코너를 향해 외부를 향하도록 연장되었다. 연결성 생성기 (72) 가 도메인 (114) 의 x-축으로부터 시작하므로, 이러한 출력 방식은 x-방향으로의 단일 보행으로서 지칭될 수도 있다. x-방향으로의 단일 보행의 또 다른 예는, 연결성 생성기 (72) 가 부분 (115C) 의 하부-좌측 코너로부터 시작하고 부분 (115C) 의 상부-우측 코너를 향해 외부를 향하도록 연장되는 경우일 수도 있다.
그러나, 이 개시물의 양태들은 x-방향으로의 단일 보행에 제한되지 않는다. 일부의 다른 예들에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 y-방향으로의 단일 보행을 구현할 수도 있고, 여기서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 부분 (115C) 의 상부-좌측 코너로부터 시작하고 부분 (115C) 의 하부-우측 코너로 외부를 향해 연장되거나, 부분 (115C) 의 상부-우측 코너로부터 시작하고 부분 (115C) 의 하부-좌측 코너로 외부를 향해 연장된다. 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인 (114) 의 y-축으로부터 시작하므로, 이러한 출력 방식들은 y-방향으로의 단일 보행 (single walk) 으로서 지칭될 수도 있다.
프로세싱 유닛 (즉, 이 예에서의 제어기 (74)) 은 연결성 생성기 (72) 가 x-방향으로의 단일 보행 또는 y-방향으로의 단일 보행을 구현해야 하는 것인지 여부를 결정할 수도 있다. 예를 들어, 제 2 동작 모드에서, f1/2 + 1 은 C - 1 이하이다. 제어기 (74) 가 f1 이 fx 와 동일한 것으로 결정할 경우 (즉, fx 가 fy 이하임), 제어기 (74) 는 연결성 생성기 (72) 로 하여금 x-방향으로의 단일 보행에 따라 도메인 좌표들을 출력하게 할 수도 있다. 제어기 (74) 가 f1 이 fy 와 동일한 것으로 결정할 경우 (즉, fy 가 fx 이하임), 제어기 (74) 는 연결성 생성기 (72) 로 하여금 y-방향으로의 단일 보행에 따라 도메인 좌표들을 출력하게 할 수도 있다.
도 11 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 도 11 은 삼각형 도메인인 도메인 (128) 을 예시한다. 예시된 바와 같이, 프로세싱 유닛 (이 예에서의 제어기 (74)) 이 f1/2 + 1 이 C - 1 이하인 것으로 결정하였을 수도 있으므로 (예를 들어, 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 제 2 동작 모드를 구현해야 함), 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인 (128) 을 3 개의 부분들 (130A 내지 130C) 로 분할할 수도 있다. 이 예에서는, 삼각형 도메인에 대하여, 테셀레이션 유닛 (66) 이 링 상에 존재하는 포인트들의 수를 표시하는 하나의 테셀레이션 인자를 수신할 수도 있으므로, f1 은 간단하게 f 로서 지칭될 수도 있다.
예시를 위하여, 도 11 은 연결성 생성기 (72) 가 부분 (130C) 에서의 프리미티브들에 대한 도메인 좌표들을 출력하는 방식을 예시한다. 연결성 생성기 (72) 는 부분들 (130A 및 130B) 내의 프리미티브들의 도메인 좌표들을 유사하게 출력할 수도 있다. 또한, 도 8 에 대하여, 연결성 생성기 (72) 는 부분 (100A) 내의 프리미티브들의 도메인 좌표들을 유사하게 출력할 수도 있다.
도 11 은 부분 (130C) 이 제 1 대각 스트립 (132), 제 2 대각 스트립 (134), 및 제 3 대각 스트립 (136) 을 포함하는 것으로서 예시한다. 이 예에서, 제 1 대각 스트립 (132) 은 제 2 대각 스트립 (134) 과 평행하고, 제 2 대각 스트립 (134) 은 제 3 대각 스트립 (136) 과 평행하다. 따라서, 제 1 대각 스트립 (132) 은 또한 제 3 대각 스트립 (136) 과 평행하다. 또한, 제 1 대각 스트립 (132) 에서의 프리미티브들의 수는 제 2 대각 스트립 (134) 에서의 프리미티브들의 수와는 상이할 수도 있고, 제 3 대각 스트립 (136) 에서의 프리미티브들의 수는 제 1 대각 스트립 (132) 및 제 2 대각 스트립 (134) 에서의 프리미티브들의 수와는 상이할 수도 있다.
이 예에서, 연결성 생성기 (72) 는 제 1 대각 스트립 (132) 에서의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있고, 제어기 (74) 는 그 대응하는 패치 좌표가 재이용 버퍼 (78) 에 저장되지 않은 각각의 도메인 좌표에 대한 도메인 셰이더 (76) 의 인스턴스화들을 실행할 수도 있다. 다음으로, 연결성 생성기 (72) 는 제 2 대각 스트립 (134) 에서의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있고, 제어기 (74) 는 그 대응하는 패치 좌표가 재이용 버퍼 (78) 에 저장되지 않은 각각의 도메인 좌표에 대한 도메인 셰이더 (76) 의 인스턴스화들을 실행할 수도 있다. 다음으로, 연결성 생성기 (72) 는 제 3 대각 스트립 (136) 에서의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있고, 제어기 (74) 는 그 대응하는 패치 좌표가 재이용 버퍼 (78) 에 저장되지 않은 각각의 도메인 좌표에 대한 도메인 셰이더 (76) 의 인스턴스화들을 실행할 수도 있다.
연결성 생성기 (72) 가 부분 (130C) 에서의 최후 프리미티브에 도달할 때까지, 연결성 생성기 (72) 는 도메인 좌표들을 이러한 방식으로 출력하는 것을 계속할 수도 있다. 다음으로, 연결성 생성기 (72) 는 부분들 (130A 및 130B) 에서의 프리미티브들의 도메인 좌표들을 실질적으로 유사한 방식으로 출력할 수도 있다.
도 12 는 이 개시물에서 설명된 하나 이상의 예들에 따라 연결성 생성기가 출력하는 도메인의 인접 부분의 또 다른 예를 예시하는 도면이다. 예를 들어, 도 12 는 인접 부분 (138) 을 예시한다. 도 9 와 유사하게, 인접 부분 (138) 의 프리미티브들은 프리미티브들 내의 수치 값들에 의해 식별되고, 연결성 생성기 (72) 가 도메인 좌표들을 출력할 수도 있는 순서를 표시한다. 예를 들어, 연결성 생성기 (72) 는 프리미티브 0, 그 다음으로 프리미티브 1, 그 다음으로 프리미티브 2 등등의 버텍스들의 도메인 좌표들을 출력할 수도 있다. 프리미티브들의 버텍스들에서의 수치 값들은 도메인 좌표들을 나타낸다.
도 12 에서 예시된 예에서, fx 는 10 과 동일하고, fy 는 8 과 동일하다. 도 12 는 인접 부분의 1/4 을 예시한다. 예를 들어, 도 12 는 x-축을 따라 5 개의 세그먼트들 및 y-축을 따라 4 개의 세그먼트들을 예시하고, 여기서, 완전한 인접 부분은 x-축을 따라 10 개의 세그먼트들 및 y-축을 따라 8 개의 세그먼트들을 포함한다. 또한, 도 12 에서 예시된 예에서, 재이용 버퍼 (78) 의 슬롯들의 수는 6 인 것으로 가정한다 (즉, C 는 6 과 동일함). 이 경우, fy 는 fx 보다 더 작으므로, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1 이 fy 와 동일한 것으로 결정할 수도 있다 (즉, fy 는 8 과 동일함). 이 예에서, f1/2 + 1 은 5 와 동일하고, C - 1 도 5 와 동일하다. 그러므로, 이 예에서, 제어기 (74) 는 f1/2 + 1 이 C - 1 이하인 것으로 결정할 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 2 동작 모드 (즉, 단일 보행) 를 구현하게 할 수도 있다.
예를 들어, 연결성 생성기 (72) 는 프리미티브들 1, 2, 및 3 을 포함할 수도 있는, 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 다음으로, 연결성 생성기 (72) 는 프리미티브들 4, 5, 6, 7, 및 8 을 포함할 수도 있는, 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 다음으로, 연결성 생성기 (72) 는 프리미티브들 9, 10, 11, 12, 13, 14, 및 15 를 포함할 수도 있는, 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다. 이 예에서, 제 1, 제 2, 및 제 3 대각 스트립들의 각각은 상이한 수의 프리미티브들 (즉, 각각 3 개, 5 개, 및 7 개의 프리미티브들) 을 포함할 수도 있다.
또한, 이 예에서는, fy 가 fx 보다 더 작으므로, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 y-방향으로의 단일 보행을 구현할 수도 있다. 예를 들어, 제 1 대각 스트립의 프리미티브 1 은 인접 부분 (138) 의 y-축을 따라 위치되고, 프리미티브 4 (즉, 제 2 대각 스트립의 제 1 프리미티브) 는 인접 부분 (138) 의 y-축을 따라 위치되고, 프리미티브 9 (즉, 제 3 대각 스트립의 제 1 프리미티브) 는 인접 부분 (138) 의 y-축을 따라 위치된다.
이하의 표 2 는 인접 부분 (138) 의 40 개의 프리미티브들에 대한 재이용 캐시 (78) 의 거동을 예시한다. 표 2 에서, 제 1 컬럼은 프리미티브를 표시하고, 제 2 컬럼은 도메인 좌표들을 표시하고, 제 3 컬럼은 재이용 버퍼 (78) 에 저장된 패치 좌표들을 표시한다. 예시의 용이함을 위하여, 패치 좌표들은 그 대응하는 도메인 좌표들과 동일한 값을 부여받는다. 또한, 표 2 의 제 3 컬럼에서, 진하게 그리고 밑줄로 표시되는 패치 좌표들은 도메인 셰이더 (78) 가 도메인 좌표들을 패치 좌표들로 변환하도록 실행하였던 인스턴스를 표시한다.
표 2 에서, 프리미티브 0 에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 3 번의 인스턴스화들로 하여금 프리미티브 0 의 도메인 좌표들을 패치 좌표들로 변환할 것을 실행하게 할 수도 있다. 프리미티브 1 은 하나의 버텍스를 프리미티브 0 과 공유한다 (즉, 도메인 좌표 3 을 갖는 버텍스). 이 경우, 프리미티브 1 에 대하여, 제어기 (74) 는 도메인 셰이더 (76) 의 2 번의 인스턴스화가 실행되게 할 수도 있다: 도메인 좌표 2 에 대하여 한 번 그리고 도메인 좌표 8 에 대하여 한 번. 도메인 좌표 3 에 대응하는 패치 좌표들이 이미 재이용 버퍼 (78) 에 저장되어 있으므로, 제어기 (74) 는 도메인 좌표 3 에 대한 도메인 셰이더의 인스턴스화를 야기시키지 않을 수도 있다.
표 2 에서 예시된 바와 같이, 프리미티브 3 후에는, 재이용 버퍼 (78) 가 가득 찬다. 이 경우, 연결성 생성기 (72) 가 프리미티브 4 의 도메인 좌표들을 출력한 후, 제어기 (74) 는 도메인 셰이더 (76) 의 2 번의 인스턴스화들이 실행되게 할 필요가 있는 것으로 결정할 수도 있다: 프리미티브 4 의 도메인 좌표 1 에 대해 한 번, 그리고 프리미티브 4 의 도메인 좌표 7 에 대해 한 번. 따라서, 재이용 버퍼 (78) 는 패치 좌표들 1 및 7 에 대한 저장 공간을 비우기 위하여, 패치 좌표들 3 및 9 인, 가장 조기에 저장된 패치 좌표들을 제거할 수도 있다.
표 2 는 일 예로서, 제 2 동작 모드에 대한 도메인 셰이더 (76) 의 실행을 최소화하기 위하여 재이용 버퍼 (78) 를 효율적으로 사용하기 위한 방법을 표시한다. 예를 들어, 모든 공유된 버텍스들은 완전히 사용된다 (예를 들어, 여분의 캐시 미스들이 없음). 예를 들어, 표 1 에서의 예와 유사하게, 버텍스의 도메인 좌표들에 대응하는 패치 좌표들은, 연결성 생성기 (72) 가 그 버텍스를 공유하는 프리미티브들의 대부분에 대한 도메인 좌표들을 출력할 때까지 재이용 버퍼에서 저장된 상태로 남아 있다. 이것은 도메인 셰이더 (76) 가 실행할 필요가 있는 횟수를 최소화할 수도 있다.
상기 예들은 제 1 동작 모드 및 제 2 동작 모드를 예시하였다. 그러나, 일부의 예들에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 제 3 동작 모드를 구현할 필요가 있을 수도 있다. 예를 들어, f1/2 + 1 ≤ C - 1 은 f1 + 2 ≤ 2*(C - 1) 로서 다시 쓰여질 수 있다. f1 의 사이즈가 너무 크거나, C 의 사이즈가 너무 작을 경우, f1 + 2 가 2*(C - 1) 이하가 아닌 사례들이 있을 수도 있다. 이 경우들에 있어서, f1 +1 은 또한 C - 2 이하가 아닐 수도 있다. 이러한 경우들에 있어서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 쿼드 도메인을 쿼드러플렛들로 분할하거나 삼각형 도메인을 트리플렛들로 분할하고, 공유된 버텍스들의 각각이 재이용되도록 이 쿼드러플렛들 또는 트리플렛들의 각각에서 단일 보행을 구현하는 것이 가능하지 않을 수도 있다.
이러한 경우에 있어서 (즉, f1 + 2 가 2*(C - 1) 보다 더 클 때), 연결성 포인트 생성기들 (70) 및 생성기 (72) 는 제 3 동작 모드를 구현할 수도 있다. 제 3 동작 모드는 제 1 동작 모드 및 제 2 동작 모드의 조합일 수도 있다. 예를 들어, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 이 f1 + 2 가 2*(C - 1) 보다 더 큰 것으로 결정할 때, 프로세싱 유닛의 예로서의 제어기 (74) 는 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 쿼드 도메인을 쿼드러플렛들보다 더 많은 것으로 분할하게 할 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 삼각형 도메인을 트리플렛들보다 더 많은 것으로 분할하게 할 수도 있다. 다음으로, 연결성 생성기 (72) 는 복수의 부분들의 제 1 세트 상에서 제 1 동작 모드 (예를 들어, 단일 보행) 를 구현할 수도 있고, 복수의 부분들의 제 2 세트 상에서 제 2 동작 모드 (예를 들어, 공동 보행) 를 구현할 수도 있다.
도 13 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 도 13 은 쿼드 도메인인 도메인 (140) 을 예시한다. 이 예에서, 제어기 (74) 는 f1 + 2 가 2*(C - 1) 보다 더 큰 것으로 결정하였을 수도 있고, 연결성 생성기 (72) 로 하여금 제 3 동작 모드를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 쿼드 도메인 (140) 을 4 개를 초과하는 부분들로 분할할 수도 있다. 예시된 바와 같이, 연결성 생성기 (72) 는 쿼드 도메인 (140) 을 6 개의 부분들 (142A 내지 142F) 로 분할할 수도 있다. 이 예에서, 제어기 (74) 는 연결성 생성기 (72) 로 하여금 부분들 (142A, 142B, 142E, 및 142F) 의 각각의 하나 상에서 단일 보행 (즉, 제 1 동작 모드) 을 구현하게 할 수도 있다. 제어기 (74) 는 연결성 생성기 (72) 로 하여금 부분들 (142C 및 142D) 에 걸쳐 공동 보행 (즉, 제 2 동작 모드) 을 구현하게 할 수도 있다. 다시 말해서, 제어기 (74) 는 부분들 (142C 및 142D) 을 공동 부분으로 조합할 수도 있고, 연결성 생성기 (72) 로 하여금 공동 부분에 걸쳐 공동 보행을 구현하게 할 수도 있다.
예를 들어, 연결성 생성기 (72) 는 제 1, 제 2, 및 제 3 대각 스트립들 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있고, 여기서, 대각 스트립들은 부분 (142A) 내에 있다. 이 예에서, 제 1, 제 2, 및 제 3 대각 스트립들은 서로 평행할 수도 있다. 조합된 부분들 (142C 및 142D) 에 걸친 공동 보행에 대하여, 연결성 생성기는 제 4, 제 5, 및 제 6 대각 스트립들 내의 도메인 좌표들을 출력할 수도 있고, 여기서, 대각 스트립들은 조합된 부분들 (142C 및 142D) 내에 있다. 이 예에서, 제 5 대각 스트립은 제 4 대각 스트립과 접할 수도 있고, 제 6 대각 스트립은 제 4 대각 스트립과 평행할 수도 있다.
일부의 예들에서, 테셀레이션 유닛 (66) 은 짝수 테셀레이션 인자들을 갖는 균일한 테셀레이션을 이용하여 도 7, 도 8, 도 10, 및 도 11 에서 예시된 일 예의 도메인들을 테셀레이팅하였을 수도 있다. 균일한 테셀레이션은 링들을 따라 동일한 수의 포인트들 (즉, 버텍스들) 이 있다는 것을 의미한다. 또한, 도 7 에서 예시된 예에서, 테셀레이션 인자들은 18 과 동일한 fx 및 6 과 동일한 fy 이었고 (이들 양자는 짝수 테셀레이션 인자들임), 도 10 에서 예시된 예에서, 테셀레이션 인자들은 10 과 동일한 fx 및 8 과 동일한 fy 이었다 (이들 양자는 짝수 테셀레이션 인자들임). 짝수 테셀레이션 인자들은 도메인의 에지의 중간 포인트에 걸친 미러링으로 귀착된다.
그러나, 모든 도메인들이 균일한 테셀레이션을 이용하여 또는 짝수 테셀레이션 인자들로 테셀레이팅되지 않았을 수도 있다. 다음은 도메인들이 균일한 테셀레이션을 이용하여 테셀레이팅되지 않는 약간의 예들과, 테셀레이션 인자들이 짝수 수 홀수이며 양자 모두 홀수인 예들을 설명한다.
홀수 테셀레이션 인자들을 갖는 균일한 테셀레이션을 위하여, 연결성 생성기 (72) 가 도메인을 분할하는 방식은 짝수 테셀레이션 인자들을 갖는 예들과는 약간 상이할 수도 있다. 그러나, 연결성 생성기 (72) 가 프리미티브들의 도메인 좌표들을 출력하는 순서는 동일할 수도 있다.
도 14a 및 도 14b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다. 도 14a 는 도메인 (144A) 을 예시하고, 도 14b 는 도메인 (144B) 을 예시한다. 도메인 (144A) 및 도메인 (144B) 은 각각 쿼드 도메인이다. 예시된 바와 같이, 테셀레이션 유닛 (66) 은 하나의 짝수 테셀레이션 인자 및 하나의 홀수 테셀레이션 인자로 도메인 (144A) 및 도메인 (144B) 을 테셀레이팅하였을 수도 있다. 도메인 (144A) 및 도메인 (144B) 의 y-축을 따라 8 개의 세그먼트들이 있으므로, 짝수 테셀레이션 인자는 fy 일 수도 있다. 도메인 (144A) 및 도메인 (144B) 의 x-축을 따라 5 개의 세그먼트가 있으므로, 홀수 테셀레이션 인자는 fx 일 수도 있다. 예시를 위하여, 도 14a 및 도 14b 는 연결성 생성기 (72) 가 인접 부분 (146A) 및 인접 부분 (146B) 내의 프리미티브들에 대한 도메인 좌표들을 출력하는 방식을 각각 예시한다.
도 14a 에서 예시된 예에서, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1/2 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 2 동작 모드 (즉, 단일 보행) 를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 제 1 대각 스트립 (148), 그 다음으로, 제 2 대각 스트립 (150), 및 다음으로 제 3 대각 스트립 (152) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있다. 예시된 바와 같이, 제 1 대각 스트립 (148) 은 제 3 대각 스트립 (152) 과 평행한 제 2 대각 스트립 (150) 과 평행하다. 따라서, 제 1 대각 스트립 (148), 제 2 대각 스트립 (150), 및 제 3 대각 스트립 (152) 은 각각 서로 평행하다. 또한, 제 1 대각 스트립 (148), 제 2 대각 스트립 (150), 및 제 3 대각 스트립 (152) 에서의 프리미티브들의 수는 상이하다.
도 14b 에서 예시된 예에서, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 1 동작 모드 (즉, 공동 보행) 를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 제 1 대각 스트립 (154), 그 다음으로, 제 2 대각 스트립 (156), 및 다음으로 제 3 대각 스트립 (158) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있다. 예시된 바와 같이, 제 2 대각 스트립 (156) 은 제 1 대각 스트립 (154) 과 접한다. 제 3 대각 스트립 (158) 은 제 1 대각 스트립 (154) 과 평행하고, 제 2 대각 스트립 (156) 과 평행하지 않다. 또한, 제 1 대각 스트립 (154) 및 제 2 대각 스트립 (156) 에서의 프리미티브들의 수는 동일하고, 제 3 대각 스트립 (158) 에서의 프리미티브들의 수와는 상이하다.
도 15a 및 도 15b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다. 도 15a 는 도메인 (160A) 을 예시하고, 도 15b 는 도메인 (160B) 을 예시한다. 도메인 (160A) 및 도메인 (160B) 은 각각 쿼드 도메인이다. 예시된 바와 같이, 테셀레이션 유닛 (66) 은 홀수 테셀레이션 인자들 (즉, fx 및 fy 는 모두 홀수임) 로 도메인 (160A) 및 도메인 (160B) 을 테셀레이팅하였을 수도 있다. 예시를 위하여, 도 15a 및 도 15b 는 연결성 생성기 (72) 가 인접 부분 (162A) 및 인접 부분 (162B) 내의 프리미티브들에 대한 도메인 좌표들을 출력하는 방식을 각각 예시한다.
도 15a 에서 예시된 예에서, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1/2 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 2 동작 모드 (즉, 단일 보행) 를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 제 1 대각 스트립 (164), 그 다음으로, 제 2 대각 스트립 (166), 및 다음으로 제 3 대각 스트립 (168) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있다. 도 15b 에서 예시된 예에서, 프로세싱 유닛 (예를 들어, 제어기 (74) 및/또는 테셀레이션 유닛 (66)) 은 f1 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 1 동작 모드 (즉, 공동 보행) 를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 제 1 대각 스트립 (170), 그 다음으로, 제 2 대각 스트립 (172), 및 다음으로 제 3 대각 스트립 (174) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있다.
도 15a 에서 예시된 예에서, 연결성 생성기 (72) 가 인접 부분들에 대한 도메인 좌표들을 출력한 후에는, 그 도메인 좌표들이 아직 출력되지 않은 일부의 나머지 프리미티브들이 있을 수도 있다. 예를 들어, 도 15a 에서는, 도메인 (160A) 의 중심을 형성하는 2 개의 삼각형들이 인접 부분들에 의해 둘러싸이지 않을 수도 있다. 이 예들에서, 연결성 생성기 (72) 는 나머지 프리미티브들 (예를 들어, 도메인 (160A) 의 중심을 형성하는 삼각형들) 의 도메인 좌표들을 출력할 수도 있다.
도 16a 및 도 16b 는 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인들의 인접 부분들에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 일 예의 기법들을 예시하는 도면들이다. 도 16a 는 도메인 (176A) 을 예시하고, 도 16b 는 도메인 (176B) 을 예시한다. 도메인 (176A) 및 도메인 (176B) 은 각각 삼각형 도메인이다. 예시된 바와 같이, 테셀레이션 유닛 (66) 은 홀수 테셀레이션 인자 (즉, f 는 홀수임) 로 도메인 (160A) 및 도메인 (160B) 을 테셀레이팅하였을 수도 있다. 예시를 위하여, 도 16a 및 도 16b 는 연결성 생성기 (72) 가 인접 부분 (178A) 및 인접 부분 (178B) 내의 프리미티브들에 대한 도메인 좌표들을 출력하는 방식을 각각 예시한다.
도 16a 에서 예시된 예에서, (프로세싱 유닛의 하나의 예로서의) 제어기 (74) 는 f1/2 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있고, 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 제 2 동작 모드 (즉, 단일 보행) 를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 제 1 대각 스트립 (180), 그 다음으로, 제 2 대각 스트립 (182), 및 다음으로 제 3 대각 스트립 (184) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있다. 도 16b 에서 예시된 예에서, 제어기 (74) 는 f1 + 1 이 C - 2 이하인 것으로 결정하였을 수도 있고, 연결성 생성기 (72) 로 하여금 제 1 동작 모드 (즉, 공동 보행) 를 구현하게 할 수도 있다. 예를 들어, 연결성 생성기 (72) 는 제 1 대각 스트립 (186), 그 다음으로, 제 2 대각 스트립 (188), 및 다음으로 제 3 대각 스트립 (190) 내의 프리미티브들에 대한 도메인 좌표들을 출력할 수도 있다.
도 15b 와 유사하게, 연결성 생성기 (72) 가 인접 부분들에 대한 도메인 좌표들을 출력한 후에는, 그 도메인 좌표들이 아직 출력되지 않은 도 16a 및 도 16b 에서의 나머지 프리미티브가 있을 수도 있다. 예를 들어, 도 16a 및 도 16b 에서는, 도메인 (176A 및 176B) 의 중심을 각각 형성하는 삼각형이 인접 부분들에 의해 둘러싸이지 않을 수도 있다. 이 예들에서, 연결성 생성기 (72) 는 나머지 프리미티브 (예를 들어, 도메인 (176A 및 176B) 의 중심을 형성하는 삼각형) 의 도메인 좌표들을 출력할 수도 있다.
상기 예들은 연결성 생성기 (72) 가 도메인의 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력하는 방식을 설명하고, 여기서, 테셀레이션 유닛 (66) 은 균일한 테셀레이션과, 짝수 테셀레이션 인자들, 짝수 및 홀수 테셀레이션 인자들, 및 홀수 테셀레이션 인자들로 도메인을 테셀레이팅한다. 다음은 연결성 생성기 (72) 가 비균일한 (non-uniform) 테셀레이팅된 도메인에 대한 프리미티브들의 도메인 좌표들을 출력하는 방식을 설명한다. 비균일한 테셀레이션 도메인에서, 테셀레이션 유닛 (66) 은 비균일한 테셀레이션을 사용하여 도메인의 일부들을 테셀레이팅할 수도 있고, 균일한 테셀레이션을 사용하여 도메인의 다른 일부들을 테셀레이팅할 수도 있다.
예를 들어, 쿼드 도메인에 대하여, 총 6 개의 테셀레이션 인자들이 있을 수도 있다. 6 개의 테셀레이션 인자들 중의 4 개는 쿼드 도메인의 4 개의 변들의 각각을 따라 세그먼트들의 수를 각각 정의할 수도 있다. 이 4 개의 테셀레이션 인자들은 동일하지 않을 수도 있어서, 비균일한 테셀레이션으로 귀착될 수도 있다. 나머지 2 개의 테셀레이션 인자들은 쿼드 도메인 내의 링들의 x-축 및 y-축을 따라 세그먼트들의 수를 정의할 수도 있어서, 쿼드 도메인 내의 균일한 테셀레이션으로 귀착될 수도 있다.
삼각형 도메인에 대하여, 총 4 개의 테셀레이션 인자들이 있을 수도 있다. 4 개의 테셀레이션 인자들 중의 3 개는 삼각형 도메인의 3 개의 변들의 각각을 따라 세그먼트들의 수를 각각 정의할 수도 있다. 이 3 개의 테셀레이션 인자들은 동일하지 않을 수도 있어서, 비균일한 테셀레이션으로 귀착될 수도 있다. 나머지 테셀레이션 인자는 삼각형 도메인 내의 삼각형 링들에 대한 세그먼트들의 수를 정의할 수도 있어서, 삼각형 도메인 내의 균일한 테셀레이션으로 귀착될 수도 있다.
예를 들어, 비균일한 테셀레이션은 외부 링의 하나 이상의 변들 상의 버텍스들의 수가 상이한 사례들을 지칭한다. 비균일한 테셀레이션의 예들에서, 균일한 부분들에 대한 테셀레이션 인자들이 fx 및 fy 일 경우, 테셀레이션 유닛 (66) 의 설정 유닛 (68) 은 Fx 및 Fy 의 값들을 결정할 수도 있고, 여기서, fx 는 Fx - 2.0 과 동일하고, fy 는 Fy - 2.0 과 동일하다.
테셀레이션 유닛 (66) 이 비균일한 테셀레이션 및 균일한 테셀레이션의 양자를 사용하여 도메인을 테셀레이팅하는 예들에서, 제어기 (74) 는 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 도메인의 균일하게 테셀레이팅된 일부 상에서 제 1, 제 2, 또는 제 3 동작 모드를 구현하게 할 수도 있다. 이 개시물에서 설명된 기법들에서, 포인트 생성기들 (70) 및 연결성 생성기 (72) 가 도메인의 비균일한 일부 내의 프리미티브들의 도메인 좌표들을 출력하는 방식은 일반적으로 중요하지 않을 수도 있다.
도 17 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 예를 들어, 도 17 은 삼각형 도메인인 도메인 (192) 을 예시한다. 도 17 에서 예시된 예에서, 테셀레이션 유닛 (66) 은 비균일한 테셀레이션을 이용하여 부분 (194) 을 테셀레이팅하였을 수도 있고, 균일한 테셀레이션을 이용하여 부분들 (196A, 196B, 및 196C) 에 의해 둘러싸인 도메인 (192) 의 영역을 테셀레이팅하였을 수도 있다. 예를 들어, 부분 (194) 에서는, 도메인 (192) 의 3 개의 경계들의 각각을 따라 존재하는 버텍스들의 수는 상이하고, 이에 따라, 비균일한 테셀레이션이다. 도메인 (즉, 부분들 (196A, 196B, 및 196C)) 의 나머지에서는, 경계들의 각각을 따라 존재하는 버텍스들의 수가 동일하고, 이에 따라, 균일한 테셀레이션이다.
이 개시물에서 설명된 기법들에 따르면, 제어기 (74) (프로세싱 유닛의 하나의 예) 는 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 f1 및 C 의 값들에 기초하여 부분들 (196A, 196B, 및 196C) 상에서 제 1, 제 2, 또는 제 3 동작 모드를 구현하게 할 수도 있다. 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 부분 (194) 내의 프리미티브들의 도메인 좌표들을 출력하기 위하여 임의의 현존하는 기법 또는 아직 개발되어야 할 기법을 구현할 수도 있다. 예시된 바와 같이, 부분 (194) 은 도메인 (192) 의 외부 링일 수도 있다.
도 18 은 이 개시물에서 설명된 하나 이상의 예들에 따라 도메인의 인접 부분에서의 프리미티브들의 버텍스들의 도메인 좌표들을 출력하는 또 다른 예의 기법을 예시하는 도면이다. 예를 들어, 도 18 은 쿼드 도메인인 도메인 (198) 을 예시한다. 도 18 에서 예시된 예에서, 테셀레이션 유닛 (66) 은 비균일한 테셀레이션을 이용하여 부분 (200) 을 테셀레이팅하였을 수도 있고, 균일한 테셀레이션을 이용하여 부분들 (202A 내지 202D) 에 의해 둘러싸인 도메인 (198) 의 영역을 테셀레이팅하였을 수도 있다. 예를 들어, 부분 (200) 에서는, 도메인 (198) 의 4 개의 경계들의 적어도 2 개를 따라 존재하는 버텍스들의 수는 상이하고, 이에 따라, 이 경우의 테셀레이션은 비균일한 테셀레이션으로서 지칭될 수도 있다. 도메인 (198) (즉, 부분들 (202A 내지 202D)) 의 나머지에서는, 경계들의 각각을 따라 존재하는 버텍스들의 수가 동일하고, 이에 따라, 균일한 테셀레이션이다.
이 개시물에서 설명된 기법들에 따르면, 프로세싱 유닛 (예를 들어, 제어기 (74)) 은 포인트 생성기들 (70) 및 연결성 생성기 (72) 로 하여금 f1 및 C 의 값들에 기초하여 부분들 (202A 내지 202D) 상에서 제 1, 제 2, 또는 제 3 동작 모드를 구현하게 할 수도 있다. 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 부분 (200) 내의 프리미티브들의 도메인 좌표들을 출력하기 위하여 임의의 현존하는 기법 또는 아직 개발되어야 할 기법을 구현할 수도 있다.
도 19 는 이 개시물에서 설명된 하나 이상의 예들에 따라 일 예의 동작을 예시하는 플로우차트이다. 예시만을 위하여, 도 6 에 대해 참조가 행해진다. 또한, 기법들 중의 다수는 제어기 (74) 에 의해 수행되는 것으로서 설명되어 있다. 그러나, 이러한 설명은 예시의 목적들을 위하여 제공되고, 제한하는 것으로 간주되지 않아야 한다. 다른 예들에서, 테셀레이션 유닛 (66) 은 제어기 (74) 에 대하여 설명된 기능들을 구현하도록 구성될 수도 있고, 일부의 다른 하드웨어 또는 소프트웨어 유닛은 제어기 (74) 의 기법들을 구현하도록 구성될 수도 있다. 따라서, 도 19 에서 예시된 기법들은 프로세싱 유닛에 대하여 설명되고, 그 예들은 제어기 (74) 및/또는 테셀레이션 유닛 (66) 을 포함한다.
테셀레이션 유닛 (66) 은 도메인에 대한 테셀레이션 인자들을 수신하고 프로세싱할 수도 있다 (204). 예를 들어, 설정 유닛 (68) 은 쿼드 도메인에 대한 fx 및 fy 테셀레이션 인자들, 또는 삼각형 도메인에 대한 f 테셀레이션 인자를 수신할 수도 있고, 여기서, 이 테셀레이션 인자들은 도메인의 각각의 링을 따라 세그먼트들의 수를 표시한다. 예를 들어, 포인트 생성기들 (70) 은 이 테셀레이션 인자들에 기초하여 도메인 내의 각각의 링을 파티셔닝할 수도 있고, 각각의 세그먼트의 단부 포인트 (end point) 들은 하나 이상의 프리미티브들에 대한 버텍스일 수도 있다. 추가적으로, 설정 유닛 (68) 은 도메인이 테셀레이팅되어야 하는 방식에 기초하여, fx 및 fy 를 정수로 반올림할 수도 있거나, fx 및 fy 를 홀수 정수로 반올림할 수도 있거나, fx 및 fy 를 짝수 정수로 반올림할 수도 있거나, fx 및 fy 를 2n (즉, 2가 정수) 으로 반올림할 수도 있다.
또한, 수신된 테셀레이션 인자들이 도메인이 균일한 테셀레이션 및 비균일한 테셀레이션을 이용하여 테셀레이팅되어야 함을 표시할 경우, 테셀레이션 유닛 (66) 은 도메인의 균일하게 테셀레이팅된 일부 상에서 도 19 에서 예시된 일 예의 기법들을 구현할 수도 있다. 도메인의 외부 링과 같이, 도메인의 비균일하게 테셀레이팅된 일부에 대하여, 테셀레이션 유닛 (66) 은 임의의 기법을 사용하여 도메인의 비균일하게 테셀레이팅된 일부의 도메인 좌표들을 출력할 수도 있다. 예를 들어, 비균일하게 테셀레이팅된 일부에 대하여, 테셀레이션 유닛 (66) 은 도메인 좌표들을 도 3 내지 도 5 에서 예시된 방식으로 (즉, 비-인접 (non-contiguous) 해 있는 링 방식으로) 출력할 수도 있다.
프로세싱 유닛은 f1 + 1 이 C - 2 이하인지 여부를 결정할 수도 있다 (206). 프로세싱 유닛이 f1 + 1 이 C - 2 이하인 것으로 결정할 경우 (206 의 예), 프로세싱 유닛은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 제 1 동작 모드를 구현하게 할 수도 있다.
예를 들어, 프로세싱 유닛은 도메인이 쿼드 도메인인지 여부를 결정할 수도 있다 (208). 도메인이 쿼드 도메인일 경우 (208 의 예), 프로세싱 유닛은 fx 가 fy 이하인지 여부를 결정할 수도 있다 (212). fx 가 fy 이하일 경우 (212 의 예), 프로세싱 유닛은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 x-방향으로의 공동 보행을 구현하게 할 수도 있다 (214). 예를 들어, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 쿼드 도메인을, 부분들 중의 하나가 인접 부분인 2 개의 부분들로 분할할 수도 있고, x-방향 기법에서의 공동 보행에 따라 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
fx 가 fy 이하가 아닐 경우 (212 의 아니오), 프로세싱 유닛은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 y-방향으로의 공동 보행을 구현하게 할 수도 있다 (216). 예를 들어, 연결성 생성기 (72) 는 쿼드 도메인을, 부분들 중의 하나가 인접 부분인 2 개의 부분들로 분할할 수도 있고, y-방향 기법에서의 공동 보행에 따라 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
도메인이 쿼드 도메인이 아닐 경우 (208 의 아니오), 프로세싱 유닛은 테셀레이션 유닛으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 삼각형 도메인 상에서 공동 보행을 구현하게 할 수도 있다 (210). 예를 들어, 연결성 생성기 (72) 는 삼각형 도메인을 1/3 부분 및 2/3 부분으로 분할할 수도 있고, 여기서, 적어도 2/3 부분은 인접 부분이다. 연결성 생성기 (72) 는 공동 보행 기법에 따라 인접한 2/3 부분 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
프로세싱 유닛이 f1 + 1 이 C - 2 이하가 아닌 것으로 결정하였을 경우 (206 의 아니오), 프로세싱 유닛은 f1/2 + 1 이 C - 1 이하인지 여부를 결정할 수도 있다 (218). 프로세싱 유닛이 f1/2 + 1 이 C - 2 이하인 것으로 결정할 경우 (218 의 예), 프로세싱 유닛 (74) 은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 제 2 동작 모드를 구현하게 할 수도 있다.
프로세싱 유닛은 도메인이 쿼드 도메인인지 여부를 결정할 수도 있다 (220). 도메인이 쿼드 도메인일 경우 (220 의 예), 프로세싱 유닛은 fx 가 fy 이하인지 여부를 결정할 수도 있다 (224). fx 가 fy 이하일 경우 (224 의 예), 프로세싱 유닛은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 x-방향으로의 단일 보행을 구현하게 할 수도 있다 (226). 예를 들어, 연결성 생성기 (72) 는 쿼드 도메인을, 4 개의 부분들 중의 하나가 인접 부분인 4 개의 부분들로 분할할 수도 있고, x-방향 기법에서의 단일 보행에 따라 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
fx 가 fy 이하가 아닐 경우 (224 의 아니오), 프로세싱 유닛은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 y-방향으로의 단일 보행을 구현하게 할 수도 있다 (228). 예를 들어, 연결성 생성기 (72) 는 쿼드 도메인을, 부분들 중의 하나가 인접 부분인 4 개의 부분들로 분할할 수도 있고, y-방향 기법에서의 단일 보행에 따라 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
도메인이 쿼드 도메인이 아닐 경우 (220 의 아니오), 프로세싱 유닛은 테셀레이션 유닛 (66) 으로 하여금 포인트 생성기들 (70) 및 연결성 생성기 (72) 를 통해 삼각형 도메인 상에서 단일 보행을 구현하게 할 수도 있다 (222). 예를 들어, 연결성 생성기 (72) 는 삼각형 도메인을 3 개의 부분들로 분할할 수도 있고, 여기서, 적어도 하나의 부분은 인접 부분이다. 연결성 생성기 (72) 는 단일 보행 기법에 따라 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력할 수도 있다.
프로세싱 유닛이 f1/2 + 1 이 C - 1 보다 작지 않은 것으로 결정하였을 경우 (218 의 아니오), 프로세싱 유닛은 포인트 생성기 (70) 및 연결성 생성기 (72) 로 하여금 제 3 동작 모드를 구현하게 할 수도 있다. 예를 들어, 프로세싱 유닛은 연결성 생성기 (72) 로 하여금 단일 보행 기법 및 공동 보행 기법의 양자를 구현하게 할 수도 있다 (230). 예를 들어, 제 3 동작 모드에서, 연결성 생성기 (72) 는 쿼드 도메인을 4 개를 초과하는 부분들로 분할할 수도 있고, 삼각형 도메인을 3 개를 초과하는 부분들로 분할할 수도 있다. 이 예에서는, 쿼드 도메인에 대하여, 연결성 생성기 (72) 가 부분들 중의 4 개 상에서 단일 보행 기법을 구현할 수도 있고, 다른 부분들 상에서 공동 보행 기법을 구현할 수도 있다. 삼각형 도메인에 대하여, 연결성 생성기 (72) 는 부분들 중의 3 개 상에서 단일 보행 기법을 구현할 수도 있고, 다른 부분들 상에서 공동 보행 기법을 구현할 수도 있다.
도 19 의 예에서, 연결성 생성기 (72) 는 x-방향으로의 단일 보행, y-방향으로의 단일 보행, x-방향으로의 공동 보행, 및 y-방향으로의 공동 보행을 구현할 수도 있다. 일부의 예들에서, x-방향 또는 y-방향으로 보행하는 것은 2 개의 테셀레이션 인자들 중의 더 작은 것에 기초할 수도 있다. 예를 들어, 프로세싱 유닛은 제 1 테셀레이션 인자가 제 2 테셀레이션 인자 이하인 것으로 결정할 수도 있다. 제 1, 제 2, 및 제 3 대각 스트립들 내의 프리미티브들의 도메인 좌표들을 출력할 때, 연결성 생성기 (74) 는 제 1 테셀레이션 인자에 대응하며 외부를 향해 연장되는 도메인의 축으로부터 시작할 수도 있다.
예를 들어, fx 가 fy 보다 더 작을 경우, 연결성 생성기 (74) 는 제 1, 제 2, 및 제 3 대각 스트립들 내의 프리미티브들의 도메인 좌표들을 출력할 때, 도메인의 x-축으로부터 시작하고 외부를 향해 연장된다. fy 가 fx 보다 더 작을 경우, 연결성 생성기 (74) 는 제 1, 제 2, 및 제 3 대각 스트립들 내의 프리미티브들의 도메인 좌표들을 출력할 때, 도메인의 y-축으로부터 시작하고 외부를 향해 연장된다.
일반적으로, 도 19 에서 예시된 예에 따르면, 프로세싱 유닛은 재이용 버퍼 (78) 에서의 저장 슬롯들의 수에 적어도 기초하여, 복수의 상이한 동작 모드들로부터 동작 모드를 선택할 수도 있고, 여기서, 상이한 동작 모드들의 각각은 연결성 생성기 (72) 가 도메인의 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력하는 상이한 방식을 표시한다. 복수의 상이한 동작 모드들의 예들은 제 1, 제 2, 및 제 3 동작 모드들을 포함한다. 프로세싱 유닛은 재이용 버퍼의 저장 능력들에 적어도 기초하여 동작 모드를 선택할 수도 있다. 프로세싱 유닛은 연결성 생성기 (72) 로 하여금, 선택된 동작 모드에 기초하여 도메인의 인접 부분 내의 프리미티브들의 도메인 좌표들을 출력하게 할 수도 있다.
예를 들어, 적어도 하나의 테셀레이션 인자 플러스 (plus) 1 이 재이용 버퍼 (78) 에서의 저장 슬롯들의 수 마이너스 (minus) 2 이하일 경우, 프로세싱 유닛은 연결성 생성기 (72) 로 하여금 제 1 동작 모드에 따라 도메인 좌표들을 출력하게 할 수도 있다. 적어도 하나의 테셀레이션 인자 플러스 1 이 재이용 버퍼 (78) 에서의 저장 슬롯들의 수 마이너스 2 이하가 아니고, 2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 재이용 버퍼 (78) 에서의 저장 슬롯들의 수 마이너스 1 이하일 경우, 프로세싱 유닛은 연결성 생성기 (72) 로 하여금 제 2 동작 모드에 따라 도메인 좌표들을 출력하게 할 수도 있다. 2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 재이용 버퍼 (78) 에서의 저장 슬롯들의 수 마이너스 1 이하가 아닐 경우, 프로세싱 유닛은 연결성 생성기 (72) 로 하여금 제 3 동작 모드에 따라 도메인 좌표들을 출력하게 할 수도 있다. 제 3 동작 모드는 제 1 동작 모드 및 제 2 동작 모드의 조합이므로, 제 3 동작 모드는 단지 제 1 동작 모드 및 단지 제 2 동작 모드와는 상이한 것으로 간주될 수도 있다.
다음의 의사-코드는 이 개시물에 따라 일 예의 기법들을 추가로 예시한다.
1.
If non-uniform tessellation;
process outer ring;
endIf
If quad domain
continue to step 2 for uniform tessellation
else //triangle domain
continue to step 3 for uniform tessellation
endIf
2.
//quad domain
divide domain into quadruplets
If fx + 1 ≤ C - 2, (fx ≤ fy)
process joint walk on x-direction based on even/odd tessellation factors
elseIf fy + 1 ≤ C - 2, (fy ≤ fx)
process joint walk on y-direction based on even/odd factors
elseIf fx/2 + 1 ≤ C - 1, (fx ≤ fy)
process single walk on x-direction
elseIf fy/2 + 1 ≤ C - 1, (fy ≤ fx)
process single walk on y-direction
else
add partitions in each quadruplet
process single walk and joint walk
endIf
exit
3.
//triangle domain
divide domain into triplets
If f + 1 ≤ C - 2
process joint walk on x-direction based on even/odd factors
elseIf f/2 + 1 ≤ C - 1
process single walk
else
add partitions in each triplet
process single walk and joint walk
endIf
exit
도 20 은 이 개시물에서 설명된 하나 이상의 예들에 따라 일 예의 동작을 예시하는 또 다른 플로우차트이다. 예시만을 위하여, 기법들은 도 6 에 대하여 설명된다.
포인트 생성기들 (70) 및 연결성 생성기 (72) 는 도메인을 복수의 부분들로 분할한다 (231). 부분들 중의 적어도 하나는 인접 부분이다. 제 1 동작 모드에서 동작할 경우, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 쿼드 도메인을 2 개의 동일한 부분들로 분할할 수도 있고, 삼각형 도메인을 2 개의 부분들로 분할할 수도 있으며, 여기서, 하나의 부분은 도메인의 1/3 이고, 다른 부분은 도메인의 2/3 이다. 제 2 동작 모드에서 동작할 경우, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 쿼드 도메인을 4 개의 부분들로 분할할 수도 있고, 삼각형 도메인을 3 개의 부분들로 분할할 수도 있다. 제 3 동작 모드에서 동작할 경우, 포인트 생성기들 (70) 및 연결성 생성기 (72) 는 쿼드 도메인을 4 개를 초과하는 부분들로 분할할 수도 있고, 삼각형 도메인을 3 개를 초과하는 부분들로 분할할 수도 있다.
연결성 생성기 (72) 는 인접 부분 내의 제 1 대각 스트립에서의 프리미티브들의 도메인 좌표들을 출력할 수도 있다 (232). 다음으로, 연결성 생성기 (72) 는 인접 부분 내의 제 2 대각 스트립에서의 프리미티브들의 도메인 좌표들을 출력할 수도 있다 (234). 다음으로, 연결성 생성기 (72) 는 인접 부분 내의 제 3 대각 스트립에서의 프리미티브들의 도메인 좌표들을 출력할 수도 있다 (236).
제 2 대각 스트립은 제 1 대각 스트립과 평행하거나 제 1 대각 스트립과 접하는 것 중의 하나일 수도 있다. 제 3 대각 스트립은 제 1 대각 스트립과 평행할 수도 있다. 제 2 대각 스트립이 제 1 대각 스트립과 평행한 예들에서는, 제 3 대각 스트립이 제 2 대각 스트립과 평행할 수도 있다. 제 2 대각 스트립이 제 1 대각 스트립과 접하는 예들에서는, 제 3 대각 스트립이 제 2 대각 스트립과 평행하지 않을 수도 있다.
제 2 대각 스트립이 제 1 대각 스트립과 접하는 예들에서는, 제 1 대각 스트립에서의 프리미티브들의 수가 제 2 대각 스트립에서의 프리미티브들의 수와 동일할 수도 있다. 제 2 대각 스트립이 제 1 대각 스트립과 평행한 예들에서는, 제 1 대각 스트립에서의 프리미티브들의 수가 제 2 대각 스트립에서의 프리미티브들의 수와는 상이할 수도 있다. 어느 경우든, 제 3 대각 스트립에서의 프리미티브들의 수는 제 1 및 제 2 대각 스트립들에서의 프리미티브들의 수와는 상이할 수도 있다.
도 21 내지 도 27 은 이 개시물에서 설명된 하나 이상의 예의 기법들을 구현함으로써, 그리고 하나 이상의 다른 기법들을 구현함으로써 달성된 결과들의 비교들을 예시하는 그래프들이다. 예를 들어, 이 개시물에서 설명된 기법들은, 공유된 버텍스들의 도메인 좌표들에 대응하는 패치 좌표들이 재이용 버퍼 (78) 에 남아 있는 것을 효과적으로 보장함으로써, 그래픽 파이프라인이 일부의 다른 기법들보다 더 신속하게 테셀레이션을 완료하는 것으로 귀착될 수도 있다. 이 개시물에서 설명된 기법들은 일부의 다른 기법들과 비교하여 여분의 미스 레이트를 상당히 감소시킬 수도 있다 (즉, 캐시가 미스하는 레이트를 감소시킴). 캐시가 미스하는 레이트는 제어기 (74) 가 도메인 좌표들로부터 패치 좌표들로 이전에 변환되었던 버텍스들에 대한 도메인 셰이더 (76) 를 실행할 필요가 있는 레이트를 지칭할 수도 있다.
다음의 예들에서는, 재이용 버퍼 (78) 에서의 저장 슬롯들의 수가 32 개의 슬롯들이다. 테셀레이션 인자들은 1.0 으로부터 64.0 까지의 범위이다. 일반적으로, 도 3 및 도 4 에 대하여 위에서 설명된 기법들은 균일한 테셀레이션을 위하여 거의 100 % 미스 레이트로 귀착된다. 도 5 에 대하여 위에서 설명된 기법들은 약 45 % 미스 레이트로 귀착된다. 도 6 내지 도 20 에 대하여 위에서 설명된 기법들은 5% 미스 레이트로 귀착된다. 미스 레이트를 최소화하는 것은 도메인 셰이더 (76) 의 더 적은 인스턴스화들로 귀착되므로 유익할 수도 있다. 도메인 셰이더 (76) 의 실행은 시간 및 프로세싱 집약적일 수도 있고, 그러므로, 도메인 셰이더 (76) 의 최소화된 실행이 유익할 수도 있다.
도 21 은 쿼드 도메인 상에서의 균일한 테셀레이션을 위하여 이 개시물에서 설명된 하나 이상의 기법들에 따라 완전하지 않게 재이용된 버텍스들의 미스 레이트를 예시한다. x-축 및 y-축은 테셀레이션 인자들을 위한 것이고 (예를 들어, fx 및 fy), z-축은 미스 레이트를 표시한다. 이 예에서는, 테셀레이션 인자들이 작을 때에 미스 레이트가 제로 (zero) 이고, 인접 부분의 모든 패치 좌표들은 재이용 버퍼 (78) 내에서 적합할 수 있다. 테셀레이션 인자들의 일부의 작은 값들에 대하여, 미스 레이트는 대략 0.16 (즉, 대략 16 %) 까지 상승할 수도 있다. 그러나, 그 다음으로, 미스 레이트는 실질적으로 하강하고, 2 % 내지 5 % 의 미스 레이트 내에서 머문다. 미스 레이트가 16 % 이더라도, 이 개시물에서 설명된 기법들은 도 22 및 도 23 에서 예시된 것들과 같이, 일부의 다른 기법들보다 훨씬 더 낮은 미스 레이트를 여전히 제공할 수도 있다.
도 22 는 쿼드 도메인 상에서의 균일한 테셀레이션을 위하여 도 4 에 대하여 설명된 하나 이상의 기법들에 따라 완전하지 않게 재이용된 버텍스들의 미스 레이트를 예시한다. x-축 및 y-축은 테셀레이션 인자들을 위한 것이고 (예를 들어, fx 및 fy), z-축은 미스 레이트를 표시한다. 이 예에서는, 테셀레이션 인자들이 작을 때에 미스 레이트가 제로이고, 인접 부분의 모든 패치 좌표들은 재이용 버퍼 (78) 내에서 적합할 수 있다. 그러나, 큰 테셀레이션 인자들 (예를 들어, 64 와 동일한 fx 및 fy) 에 대하여, 도 22 는 미스 레이트가 대략 1 (즉, 대략 100 %) 인 것을 예시한다.
도 23 은 쿼드 도메인 상에서의 균일한 테셀레이션을 위하여 도 5 에 대하여 설명된 하나 이상의 기법들에 따라 완전하지 않게 재이용된 버텍스들의 미스를 예시한다. x-축 및 y-축은 테셀레이션 인자들을 위한 것이고 (예를 들어, fx 및 fy), z-축은 미스 레이트를 표시한다. 이 예에서는, 테셀레이션 인자들이 작을 때에 미스 레이트가 제로이고, 인접 부분의 모든 패치 좌표들은 재이용 버퍼 (78) 내에서 적합할 수 있다. 그러나, 큰 테셀레이션 인자들 (예를 들어, 64 와 동일한 fx 및 fy) 에 대하여, 도 23 은 미스 레이트가 대략 0.45 (즉, 대략 45%) 인 것을 예시한다. 또한, 테셀레이션 인자들 사이에 큰 차이들이 있을 경우 (예를 들어, fx >> fy, 또는 그 반대), 도 23 은 미스 레이트가 대략 0.55 (즉, 대략 55 %) 까지 상승하는 것으로 예시한다.
도 24 내지 도 27 은 쿼드 도메인에 대하여 도 3, 도 4, 및 도 6 내지 도 20 에 대해 위에서 설명된 기법들 사이의 미스 레이트 사이의 비교를 예시한다. 도 24 에서, 양자의 테셀레이션 인자들은 서로 동일하고 (1.0 내지 64.0) 의 범위에 있다. 도 25 에서, 하나의 테셀레이션 인자는 5.0 과 동일하고, 다른 테셀레이션 인자는 (1.0 내지 64.0) 의 범위에 있다. 도 26 에서, 하나의 테셀레이션 인자는 25.0 과 동일하고, 다른 테셀레이션 인자는 (1.0 내지 64.0) 의 범위에 있다. 도 27 에서, 하나의 테셀레이션 인자는 50.0 과 동일하고, 다른 테셀레이션 인자는 (1.0 내지 64.0) 의 범위에 있다.
도 24 의 라인 (238), 도 25 의 라인 (244), 도 26 의 라인 (250), 및 도 27 의 라인 (256) 은, 연결성 생성기 (72) 가 이 개시물에서 설명된 기법들에 따라 프리미티브들의 도메인 좌표들을 출력할 때의 미스 레이트를 예시한다. 이 라인들에 의해 예시된 바와 같이, 미스 레이트는 매우 낮고 0 % 에 근접해 있다. 도 24 의 라인 (242), 도 25 의 라인 (246), 도 26 의 라인 (252), 및 도 27 의 라인 (258) 은, 연결성 생성기 (72) 와 다른 연결성 생성기가 도 5 에 대하여 위에서 설명된 기법들에 따라 프리미티브들의 도메인 좌표들을 출력할 때의 미스 레이트를 예시한다. 이 라인들에 의해 예시된 바와 같이, 미스 레이트는 연결성 생성기 (72) 가 이 개시물에서 설명된 하나 이상의 예의 기법들을 구현할 때의 미스 레이트보다 훨씬 더 크다. 도 24 의 라인 (240), 도 25 의 라인 (248), 도 26 의 라인 (254), 및 도 27 의 라인 (260) 은, 연결성 생성기 (72) 와 다른 연결성 생성기가 도 4 에 대하여 위에서 설명된 기법들에 따라 프리미티브들의 도메인 좌표들을 출력할 때의 미스 레이트를 예시한다. 이 라인들에 의해 예시된 바와 같이, 미스 레이트는 연결성 생성기 (72) 가 이 개시물에서 설명된 하나 이상의 예의 기법들을 구현할 때의 미스 레이트보다 훨씬 더 크고, 또한, 연결성 생성기 (72) 와 다른 연결성 생성기가 도 5 에서 예시된 기법들을 구현할 때보다 더 크다.
도 28 은 도 1 및 도 2 에서 도시된 바와 같이 GPU 를 포함하는 디바이스를 예시하는 블록도이다. 예를 들어, 도 28 은 디바이스 (10) 를 추가로 예시한다. 디바이스 (28) 의 예들은 무선 디바이스들, 소위 스마트폰들과 같은 이동 전화들, 개인 정보 단말 (personal digital assistant; PDA) 들, 비디오 디스플레이들을 포함하는 비디오 게임용 콘솔들, 이동 화상 회의 유닛들, 랩톱 컴퓨터들, 데스크톱 컴퓨터들, 텔레비전 셋톱 박스들, 태블릿 컴퓨팅 디바이스들, 전자책 리더들 등을 포함하지만, 이것으로 제한되지 않는다. 디바이스 (10) 는 그래픽 프로세싱 유닛 (GPU; 12), 시스템 메모리 (14), 프로세서 (16), 디스플레이 (262), 사용자 인터페이스 (264), 및 트랜시버 모듈 (266) 을 포함할 수도 있다. 디바이스 (10) 는 추가적인 모듈들, 또는 명확함을 위하여 도 28 에서 도시되지 않은 유닛들을 포함할 수도 있다. 예를 들어, 디바이스 (10) 가 이동 무선 전화인 예들에서, 디바이스 (10) 는 전화 통신들을 실시하거나, 이와 다르게 음성 입력을 프로세싱하거나 사운드를 방출하기 위하여, 도 28 에서 어느 것도 도시되어 있지 않은 스피커 및 마이크로폰을 포함할 수도 있다. 또한, 디바이스 (10) 에서의 다양한 모듈들 및 유닛들은 디바이스 (10) 의 모든 예에서 필요하지 않을 수도 있다. 예를 들어, 디바이스 (10) 가 데스크톱 컴퓨터인 예들에서, 사용자 인터페이스 (264) 및 디스플레이 (262) 는 디바이스 (10) 에 외부적일 수도 있다. 또 다른 예로서, 디스플레이 (262) 가 이동 디바이스의 터치-감지식 또는 존재-감지식 디스플레이인 예들에서, 디스플레이 (262) 는 사용자 인터페이스 (264) 의 일부일 수도 있다.
도 28 의 GPU (12), 시스템 메모리 (14), 및 프로세서 (16) 는 도 1 및 도 2 의 GPU (12), 시스템 메모리 (14), 및 프로세서 (16) 와 유사할 수도 있다. 사용자 인터페이스 (264) 의 예들은 트랙볼 (trackball), 마우스, 키보드, 및 다른 타입들의 입력 디바이스들을 포함하지만, 이것으로 제한되지 않는다. 사용자 인터페이스 (264) 는 또한 터치 스크린일 수도 있고, 디스플레이 (262) 의 일부로서 편입될 수도 있다. 트랜시버 모듈 (266) 은 디바이스 (10) 및 또 다른 디바이스 또는 네트워크 사이의 무선 또는 유선 통신을 허용하기 위한 회로부를 포함할 수도 있다. 트랜시버 모듈 (266) 은 변조기들, 복조기들, 증폭기들, 및 유선 또는 무선 통신을 위한 다른 이러한 회로부를 포함할 수도 있다. 디스플레이 (262) 는 액정 디스플레이 (liquid crystal display; LCD), 음극선관 (cathode ray tube; CRT) 디스플레이, 플라즈마 디스플레이, 터치-감지식 디스플레이, 존재-감지식 디스플레이, 또는 또 다른 타입의 디스플레이 디바이스를 포함할 수도 있다.
하나 이상의 예들에서는, 설명된 기능들이 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현될 경우, 기능들은 컴퓨터 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 컴퓨터 판독가능 매체들은 컴퓨터 데이터 저장 매체들을 포함할 수도 있다. 데이터 저장 매체들은 이 개시물에서 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수도 있다. 제한이 아닌 예로서, 이러한 컴퓨터 판독가능 매체들은 랜덤 액세스 메모리 (random access memory; RAM), 판독-전용 메모리 (read-only memory; ROM), EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 희망하는 프로그램 코드를 저장하기 위해 이용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 본원에서 이용된 바와 같은 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (compact disc; CD), 레이저 디스크 (laser disc), 광학 디스크 (optical disc), 디지털 다기능 디스크 (digital versatile disc; DVD), 플로피 디스크 (floppy disk) 및 블루레이 디스크 (blu-ray disc) 를 포함하고, 여기서, 디스크 (disk) 들은 통상 데이터를 자기적으로 재생하는 반면, 디스크 (disc) 들은 데이터를 레이저로 광학적으로 재생한다. 상기의 조합들은 컴퓨터 판독가능 매체들의 범위 내에 또한 포함되어야 한다.
코드는 하나 이상의 디지털 신호 프로세서 (digital signal processor; DSP) 들, 범용 마이크로프로세서들, 주문형 집적 회로 (application specific integrated circuit; ASIC) 들, 필드 프로그래밍가능한 로직 어레이 (field programmable logic array; FPGA) 들, 또는 다른 등가의 집적 또는 개별 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 따라서, 본원에서 이용된 바와 같은 용어 "프로세서" 는 상기한 구조, 또는 본원에서 설명된 기법들의 구현을 위해 적당한 임의의 다른 구조 중의 임의의 것을 지칭할 수도 있다. 또한, 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
이 개시물의 기법들은 무선 핸드셋 (wireless handset), 집적 회로 (integrated circuit; IC) 또는 IC 들의 세트 (즉, 칩셋) 를 포함하는 광범위한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위하여 이 개시물에서 설명되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 요구하지는 않는다. 오히려, 위에서 설명된 바와 같이, 다양한 유닛들은 하드웨어 유닛 내에 조합될 수도 있거나, 적당한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서들을 포함하는 상호동작하는 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이러한 그리고 다른 예들은 다음의 청구항들의 범위 내에 있다.
Claims (25)
- 테셀레이션 유닛 (tessellation unit) 으로, 도메인을 복수의 부분들로 분할하는 단계로서, 상기 부분들 중의 적어도 하나는 인접 부분인, 상기 도메인을 분할하는 단계;
상기 테셀레이션 유닛으로, 상기 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브 (primitive) 들의 도메인 좌표들을 출력하는 단계;
상기 테셀레이션 유닛으로, 상기 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계로서, 상기 제 2 대각 스트립은 상기 제 1 대각 스트립과 평행하거나 상기 제 1 대각 스트립과 접하는 것 중의 하나인, 상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계; 및
상기 테셀레이션 유닛으로, 상기 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계로서, 상기 제 3 대각 스트립은 적어도 상기 제 1 대각 스트립과 평행하고, 상기 제 3 대각 스트립 내의 프리미티브들의 수는 상기 제 1 대각 스트립 및 상기 제 2 대각 스트립 내의 프리미티브들의 수와는 상이한, 상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계
를 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
재이용 버퍼 내의 저장 슬롯들의 수에 적어도 부분적으로 기초하여 복수의 상이한 동작 모드들로부터 동작 모드를 선택하는 단계를 더 포함하고,
상기 상이한 동작 모드들의 각각의 모드는 상기 도메인의 상기 인접 부분 내의 상기 도메인 좌표들을 출력하기 위한 상이한 방식을 표시하고, 그리고
상기 도메인을 분할하는 단계는 선택된 상기 동작 모드에 기초하여 상기 도메인을 분할하는 단계를 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
적어도 하나의 테셀레이션 인자 플러스 (plus) 1 이 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 (minus) 2 이하인지 여부를 결정하는 단계를 더 포함하고,
상기 도메인이 쿼드 도메인 (quad domain) 일 때, 상기 적어도 하나의 테셀레이션 인자는 상기 쿼드 도메인의 또 다른 테셀레이션 인자 이하이고,
상기 도메인을 분할하는 단계는, 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 2 이하일 때, 상기 도메인을 2 개의 부분들로 분할하는 단계를 포함하고, 그리고
상기 제 2 대각 스트립 내의 프리미티브들의 상기 도메인 좌표들을 출력하는 단계는, 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 2 이하일 때, 상기 제 1 대각 스트립과 접하는 상기 제 2 대각 스트립 내의 프리미티브들의 상기 도메인 좌표를 출력하는 단계를 포함하는, 테셀레이션을 위한 방법. - 제 3 항에 있어서,
제 4 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계; 및
제 5 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계
를 더 포함하고,
상기 제 5 대각 스트립은 상기 제 4 대각 스트립의 미러 대향 (mirror opposite) 인, 테셀레이션을 위한 방법. - 제 3 항에 있어서,
상기 도메인이 상기 쿼드 도메인일 때, 상기 도메인을 2 개의 부분들로 분할하는 단계는 상기 도메인을 2 개의 절반들로 분할하는 단계를 포함하고,
상기 도메인이 삼각형 도메인일 때, 상기 도메인을 2 개의 부분들로 분할하는 단계는 상기 도메인을 1/3 부분 및 2/3 부분으로 분할하는 단계를 포함하고, 그리고
상기 2/3 부분은 상기 인접 부분을 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하인지 여부를 결정하는 단계를 더 포함하고,
상기 도메인이 쿼드 도메인일 때, 상기 적어도 하나의 테셀레이션 인자는 상기 쿼드 도메인의 또 다른 테셀레이션 인자 이하이고,
상기 도메인을 분할하는 단계는, 상기 도메인이 상기 쿼드 도메인일 때, 그리고 2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하일 때, 상기 도메인을 4 개의 부분들로 분할하는 단계를 포함하고,
상기 도메인을 분할하는 단계는, 상기 도메인이 삼각형 도메인일 때, 그리고 2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하일 때, 상기 도메인을 3 개의 부분들로 분할하는 단계를 포함하고, 그리고
상기 제 2 대각 스트립 내의 프리미티브들의 상기 도메인 좌표들을 출력하는 단계는, 2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하일 때, 상기 제 1 대각 스트립과 평행한 상기 제 2 대각 스트립 내의 프리미티브들의 상기 도메인 좌표들을 출력하는 단계를 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
제 1 테셀레이션 인자가 제 2 테셀레이션 인자 이하인 것으로 결정하는 단계를 더 포함하고,
상기 제 1 대각 스트립 내의 상기 프리미티브들의 도메인 좌표들을 출력하는 단계, 상기 제 2 대각 스트립 내의 상기 프리미티브들의 상기 도메인 좌표들을 출력하는 단계, 및 상기 제 3 대각 스트립 내의 상기 프리미티브들의 상기 도메인 좌표들을 출력하는 단계는, 상기 제 1 테셀레이션 인자에 대응하는 상기 도메인의 축으로부터 시작하며 외부를 향해 연장되도록 출력하는 단계를 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 보다 더 큰지 여부를 결정하는 단계를 더 포함하고,
상기 도메인이 쿼드 도메인일 때, 상기 적어도 하나의 테셀레이션 인자는 상기 쿼드 도메인의 또 다른 테셀레이션 인자 이하이고,
2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 보다 더 클 때:
상기 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계는, 제 1 인접 부분 내에 있는 상기 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계를 포함하고;
상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계는, 상기 제 1 대각 스트립과 평행하며 상기 제 1 인접 부분 내에 있는 상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계를 포함하고,
상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계는, 상기 제 1 인접 부분 내에 있는 상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계를 포함하고,
상기 방법은,
제 2 인접 부분 내에 있는 제 4 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계;
상기 제 2 인접 부분 내에 있는 제 5 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계로서, 상기 제 5 대각 스트립은 상기 제 4 대각 스트립과 접하는, 상기 제 5 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계; 및
상기 제 2 인접 부분 내에 있는 제 6 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계로서, 상기 제 6 대각 스트립은 상기 제 1 대각 스트립과 평행한, 상기 제 6 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 단계
를 더 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
상기 도메인의 제 1 일부는 비균일하게 테셀레이팅되는 것으로 결정하는 단계; 및
상기 도메인의 제 2 일부는 균일하게 테셀레이팅되는 것으로 결정하는 단계
를 더 포함하고,
상기 도메인을 상기 복수의 부분들로 분할하는 단계는, 상기 도메인의 상기 제 2 일부를 상기 복수의 부분들로 분할하는 단계를 포함하는, 테셀레이션을 위한 방법. - 제 9 항에 있어서,
상기 도메인의 상기 제 1 일부는 상기 도메인의 외부 링을 포함하고, 상기 방법은,
상기 도메인의 상기 외부 링 내의 프리미티브들의 도메인 좌표들을 출력하는 단계를 더 포함하는, 테셀레이션을 위한 방법. - 제 1 항에 있어서,
상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 상기 프리미티브들에 대한 상기 도메인 좌표들을 수신하는 단계;
재이용 버퍼가 상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 상기 프리미티브들에 대한 상기 도메인 좌표들에 대응하는 패치 좌표 (patch coordinate) 들을 저장하는지 여부를 결정하는 단계; 및
상기 재이용 버퍼가 상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 상기 프리미티브들에 대한 상기 도메인 좌표들에 대응하는 상기 패치 좌표들을 저장하는지 여부의 상기 결정에 기초하여 셰이더 (shader) 의 한 번 이상의 인스턴스화 (instantiation) 들을 실행하는 단계
를 더 포함하는, 테셀레이션을 위한 방법. - 테셀레이션 유닛을 포함하는 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 으로서, 상기 테셀레이션 유닛은,
도메인을 복수의 부분들로 분할하는 것으로서, 상기 부분들 중의 적어도 하나는 인접 부분인, 상기 도메인을 분할하는 것을 행하고;
상기 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고;
상기 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것으로서, 상기 제 2 대각 스트립은 상기 제 1 대각 스트립과 평행하거나 상기 제 1 대각 스트립과 접하는 것 중의 하나인, 상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것을 행하고; 그리고
상기 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것으로서, 상기 제 3 대각 스트립은 적어도 상기 제 1 대각 스트립과 평행하고, 상기 제 3 대각 스트립 내의 프리미티브들의 수는 상기 제 1 대각 스트립 및 상기 제 2 대각 스트립 내의 프리미티브들의 수와는 상이한, 상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것을 행하도록
구성되는, 상기 그래픽 프로세싱 유닛 (GPU); 및
상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 프리미티브들의 출력된 상기 도메인 좌표들 중의 하나 이상에 대응하는 패치 좌표들을 저장하도록 구성된 재이용 버퍼
를 포함하는, 디바이스. - 제 12 항에 있어서,
상기 재이용 버퍼 내의 저장 슬롯들의 수에 적어도 부분적으로 기초하여 복수의 상이한 동작 모드들로부터 동작 모드를 선택하도록 구성된 프로세싱 유닛을 더 포함하고,
상기 상이한 동작 모드들의 각각의 모드는 상기 도메인의 상기 인접 부분 내의 상기 도메인 좌표들을 출력하기 위한 상이한 방식을 표시하고, 그리고
상기 테셀레이션 유닛은 선택된 상기 동작 모드에 기초하여 상기 도메인을 분할하도록 구성되는, 디바이스. - 제 12 항에 있어서,
적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 2 이하인지 여부를 결정하도록 구성된 프로세싱 유닛을 더 포함하고,
상기 도메인이 쿼드 도메인일 때, 상기 적어도 하나의 테셀레이션 인자는 상기 쿼드 도메인의 또 다른 테셀레이션 인자 이하이고,
상기 테셀레이션 유닛은, 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 2 이하일 때, 상기 도메인을 2 개의 부분들로 분할하도록 구성되고, 그리고
상기 테셀레이션 유닛은, 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 2 이하일 때, 상기 제 1 대각 스트립과 접하는 상기 제 2 대각 스트립 내의 프리미티브들의 상기 도메인 좌표를 출력하도록 구성되는, 디바이스. - 제 14 항에 있어서,
상기 테셀레이션 유닛은,
제 4 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고; 그리고
제 5 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하도록
구성되고, 그리고
상기 제 5 대각 스트립은 상기 제 4 대각 스트립의 미러 대향인, 디바이스. - 제 14 항에 있어서,
상기 도메인이 쿼드 도메인일 때, 상기 테셀레이션 유닛은 상기 도메인을 2 개의 절반들로 분할하도록 구성되고,
상기 도메인이 삼각형 도메인일 때, 상기 테셀레이션 유닛은 상기 도메인을 1/3 부분 및 2/3 부분으로 분할하도록 구성되고, 그리고
상기 2/3 부분은 상기 인접 부분을 포함하는, 디바이스. - 제 12 항에 있어서,
2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하인지 여부를 결정하도록 구성된 프로세싱 유닛을 더 포함하고,
상기 도메인이 쿼드 도메인일 때, 상기 적어도 하나의 테셀레이션 인자는 상기 쿼드 도메인의 또 다른 테셀레이션 인자 이하이고,
상기 테셀레이션 유닛은, 상기 도메인이 상기 쿼드 도메인일 때, 그리고 2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하일 때, 상기 도메인을 4 개의 부분들로 분할하도록 구성되고,
상기 테셀레이션 유닛은, 상기 도메인이 삼각형 도메인일 때, 그리고 2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하일 때, 상기 도메인을 3 개의 부분들로 분할하도록 구성되고, 그리고
상기 테셀레이션 유닛은, 2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 이하일 때, 상기 제 1 대각 스트립과 평행한 상기 제 2 대각 스트립 내의 프리미티브들의 상기 도메인 좌표들을 출력하도록 구성되는, 디바이스. - 제 12 항에 있어서,
제 1 테셀레이션 인자가 제 2 테셀레이션 인자 이하인 것으로 결정하도록 구성된 프로세싱 유닛을 더 포함하고,
상기 테셀레이션 유닛은, 상기 제 1 테셀레이션 인자에 대응하는 상기 도메인의 축으로부터 시작하며 외부를 향해 연장되는, 상기 제 1 대각 스트립 내의 상기 프리미티브들의 도메인 좌표들을 출력하고, 상기 제 2 대각 스트립 내의 상기 프리미티브들의 상기 도메인 좌표들을 출력하고, 그리고 상기 제 3 대각 스트립 내의 상기 프리미티브들의 상기 도메인 좌표들을 출력하도록 구성되는, 디바이스. - 제 12 항에 있어서,
2 에 의해 나누어진 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 보다 더 큰지 여부를 결정하도록 구성된 프로세싱 유닛을 더 포함하고,
상기 도메인이 쿼드 도메인일 때, 상기 적어도 하나의 테셀레이션 인자는 상기 쿼드 도메인의 또 다른 테셀레이션 인자 이하이고,
2 에 의해 나누어진 상기 적어도 하나의 테셀레이션 인자 플러스 1 이 상기 재이용 버퍼에서의 저장 슬롯들의 수 마이너스 1 보다 더 클 때, 상기 테셀레이션 유닛은,
제 1 인접 부분 내에 있는 상기 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고;
상기 제 1 대각 스트립과 평행하며 상기 제 1 인접 부분 내에 있는 상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고;
상기 제 1 인접 부분 내에 있는 상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고;
제 2 인접 부분 내에 있는 제 4 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하고;
상기 제 2 인접 부분 내에 있는 제 5 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것으로서, 상기 제 5 대각 스트립은 상기 제 4 대각 스트립과 접하는, 상기 제 5 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것을 행하고; 그리고
상기 제 2 인접 부분 내에 있는 제 6 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것으로서, 상기 제 6 대각 스트립은 상기 제 1 대각 스트립과 평행한, 상기 제 6 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것을 행하도록
구성되는, 디바이스. - 제 12 항에 있어서,
상기 도메인의 제 1 일부가 비균일하게 테셀레이팅되는 것으로 결정하고, 상기 도메인의 제 2 일부가 균일하게 테셀레이팅되는 것으로 결정하도록 구성된 프로세싱 유닛을 더 포함하고,
상기 테셀레이션 유닛은 상기 도메인의 상기 제 2 일부를 상기 복수의 부분들로 분할하도록 구성되는, 디바이스. - 제 20 항에 있어서,
상기 도메인의 상기 제 1 일부는 상기 도메인의 외부 링을 포함하고, 상기 테셀레이션 유닛은 상기 도메인의 상기 외부 링 내의 프리미티브들의 도메인 좌표들을 출력하도록 구성되는, 디바이스. - 제 12 항에 있어서,
제어기를 더 포함하고,
상기 제어기는,
상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 상기 프리미티브들에 대한 상기 도메인 좌표들을 수신하고;
상기 재이용 버퍼가 상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 상기 프리미티브들에 대한 상기 도메인 좌표들에 대응하는 상기 패치 좌표들을 저장하는지 여부를 결정하고; 그리고
상기 재이용 버퍼가 상기 제 1, 제 2, 및 제 3 대각 스트립들 내의 상기 프리미티브들에 대한 상기 도메인 좌표들에 대응하는 상기 패치 좌표들을 저장하는지 여부의 상기 결정에 기초하여 셰이더의 한 번 이상의 인스턴스화들을 실행하도록
구성되는, 디바이스. - 제 12 항에 있어서,
상기 디바이스는 이동 무선 디바이스, 비디오 디스플레이를 포함하는 비디오 게임용 콘솔, 이동 화상 회의 유닛, 랩톱 컴퓨터, 데스크톱 컴퓨터, 태블릿 컴퓨터, 및 텔레비전 셋톱 박스 중의 하나를 포함하는, 디바이스. - 디바이스로서,
그래픽 프로세싱 유닛 (GPU) 을 포함하고, 상기 GPU 는,
도메인을 복수의 부분들로 분할하는 수단으로서, 상기 부분들 중의 적어도 하나는 인접 부분인, 상기 도메인을 분할하는 수단;
상기 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단;
상기 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단으로서, 상기 제 2 대각 스트립은 상기 제 1 대각 스트립과 평행하거나 상기 제 1 대각 스트립과 접하는 것 중의 하나인, 상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단; 및
상기 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단으로서, 상기 제 3 대각 스트립은 적어도 상기 제 1 대각 스트립과 평행하고, 상기 제 3 대각 스트립 내의 프리미티브들의 수는 상기 제 1 대각 스트립 및 상기 제 2 대각 스트립 내의 프리미티브들의 수와는 상이한, 상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 수단
을 포함하는, 디바이스. - 저장된 명령을 포함하는 컴퓨터 판독가능 저장 매체로서,
상기 명령은, 실행될 경우, 하나 이상의 프로세서들로 하여금,
도메인을 복수의 부분들로 분할하는 것으로서, 상기 부분들 중의 적어도 하나는 인접 부분인, 상기 도메인을 분할하는 것을 행하게 하고;
상기 인접 부분 내에 있는 제 1 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하게 하고;
상기 인접 부분 내에 있는 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것으로서, 상기 제 2 대각 스트립은 상기 제 1 대각 스트립과 평행하거나 상기 제 1 대각 스트립과 접하는 것 중의 하나인, 상기 제 2 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것을 행하게 하고; 그리고
상기 인접 부분 내에 있는 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것으로서, 상기 제 3 대각 스트립은 적어도 상기 제 1 대각 스트립과 평행하고, 상기 제 3 대각 스트립 내의 프리미티브들의 수는 상기 제 1 대각 스트립 및 상기 제 2 대각 스트립 내의 프리미티브들의 수와는 상이한, 상기 제 3 대각 스트립 내의 프리미티브들의 도메인 좌표들을 출력하는 것을 행하게 하는, 컴퓨터 판독가능 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/754,005 | 2013-01-30 | ||
US13/754,005 US9123168B2 (en) | 2013-01-30 | 2013-01-30 | Output ordering of domain coordinates for tessellation |
PCT/US2013/076655 WO2014120359A1 (en) | 2013-01-30 | 2013-12-19 | Output ordering of domain coordinates for tessellation |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20150110675A true KR20150110675A (ko) | 2015-10-02 |
Family
ID=49998671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157022451A KR20150110675A (ko) | 2013-01-30 | 2013-12-19 | 테셀레이션을 위한 도메인 좌표들의 출력 순서화 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9123168B2 (ko) |
EP (1) | EP2951784A1 (ko) |
JP (1) | JP6400601B2 (ko) |
KR (1) | KR20150110675A (ko) |
CN (1) | CN104956402B (ko) |
WO (1) | WO2014120359A1 (ko) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102066533B1 (ko) * | 2013-11-19 | 2020-01-16 | 삼성전자 주식회사 | 도메인 쉐이딩 방법과 이를 수행하는 장치들 |
KR101555426B1 (ko) * | 2014-02-07 | 2015-09-25 | 고려대학교 산학협력단 | 지형 렌더링 방법 및 장치 |
US9842428B2 (en) * | 2014-06-27 | 2017-12-12 | Samsung Electronics Co., Ltd. | Dynamically optimized deferred rendering pipeline |
US20160093102A1 (en) * | 2014-09-25 | 2016-03-31 | Peter L. Doyle | Efficient tessellation cache |
KR20160063081A (ko) * | 2014-11-26 | 2016-06-03 | 삼성전자주식회사 | 선택적 테셀레이션 방법 및 장치 |
GB2533443B (en) | 2015-06-05 | 2018-06-06 | Imagination Tech Ltd | Tessellation method using recursive sub-division of triangles |
GB2539042B (en) | 2015-06-05 | 2019-08-21 | Imagination Tech Ltd | Tessellation method using displacement factors |
GB2552260B (en) | 2015-06-05 | 2019-04-10 | Imagination Tech Ltd | Tessellation method |
GB2542133B (en) | 2015-09-08 | 2020-05-27 | Imagination Tech Ltd | Graphics processing method and system for processing sub-primitives |
US10685473B2 (en) * | 2017-05-31 | 2020-06-16 | Vmware, Inc. | Emulation of geometry shaders and stream output using compute shaders |
US10621782B1 (en) * | 2017-12-06 | 2020-04-14 | Apple Inc. | Sub-patch techniques for graphics tessellation |
GB2570304B (en) * | 2018-01-18 | 2022-06-01 | Imagination Tech Ltd | Topology preservation in a graphics pipeline |
GB2572617B (en) * | 2018-04-05 | 2021-06-16 | Imagination Tech Ltd | Blending hardware |
GB2572625B (en) * | 2018-04-05 | 2020-06-17 | Imagination Tech Ltd | Ordering in tessellation operations |
US11232532B2 (en) * | 2018-05-30 | 2022-01-25 | Sony Interactive Entertainment LLC | Multi-server cloud virtual reality (VR) streaming |
US11481967B2 (en) * | 2020-08-31 | 2022-10-25 | Advanced Micro Devices, Inc. | Shader core instruction to invoke depth culling |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7436405B2 (en) * | 2004-05-14 | 2008-10-14 | Microsoft Corporation | Terrain rendering using nested regular grids |
US8237709B2 (en) * | 2007-09-06 | 2012-08-07 | Qualcomm Incorporated | Method and apparatus for optimizing triangles into triangle strips according to a variety of criteria |
US8120607B1 (en) * | 2008-05-30 | 2012-02-21 | Nvidia Corporation | Boundary transition region stitching for tessellation |
US8188999B2 (en) * | 2008-06-17 | 2012-05-29 | Qualcomm Incorporated | Method and apparatus for organizing object geometry for spatial and memory coherency and optimal rendering |
US20100164954A1 (en) * | 2008-12-31 | 2010-07-01 | Sathe Rahul P | Tessellator Whose Tessellation Time Grows Linearly with the Amount of Tessellation |
US20100214294A1 (en) | 2009-02-20 | 2010-08-26 | Microsoft Corporation | Method for tessellation on graphics hardware |
US20100253683A1 (en) | 2009-04-01 | 2010-10-07 | Munkberg Carl J | Non-uniform tessellation technique |
US8884957B2 (en) | 2009-09-09 | 2014-11-11 | Advanced Micro Devices, Inc. | Tessellation engine and applications thereof |
US8537158B2 (en) | 2009-12-02 | 2013-09-17 | Microsoft Corporation | Parallel triangle tessellation |
GB201007348D0 (en) | 2010-04-30 | 2010-06-16 | Imagination Tech Ltd | Programmable tessellation in a tile based rendering system |
US20110310102A1 (en) | 2010-06-17 | 2011-12-22 | Via Technologies, Inc. | Systems and methods for subdividing and storing vertex data |
-
2013
- 2013-01-30 US US13/754,005 patent/US9123168B2/en not_active Expired - Fee Related
- 2013-12-19 WO PCT/US2013/076655 patent/WO2014120359A1/en active Application Filing
- 2013-12-19 EP EP13822025.6A patent/EP2951784A1/en not_active Ceased
- 2013-12-19 CN CN201380071623.1A patent/CN104956402B/zh not_active Expired - Fee Related
- 2013-12-19 JP JP2015555160A patent/JP6400601B2/ja not_active Expired - Fee Related
- 2013-12-19 KR KR1020157022451A patent/KR20150110675A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
CN104956402A (zh) | 2015-09-30 |
WO2014120359A1 (en) | 2014-08-07 |
US9123168B2 (en) | 2015-09-01 |
CN104956402B (zh) | 2017-09-22 |
JP2016508635A (ja) | 2016-03-22 |
US20140210819A1 (en) | 2014-07-31 |
JP6400601B2 (ja) | 2018-10-03 |
EP2951784A1 (en) | 2015-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20150110675A (ko) | 테셀레이션을 위한 도메인 좌표들의 출력 순서화 | |
US9076260B2 (en) | Stitching for primitives in graphics processing | |
US9142060B2 (en) | Computation reduced tessellation | |
US8482560B2 (en) | Image forming techniques | |
US10089774B2 (en) | Tessellation in tile-based rendering | |
US9305397B2 (en) | Vertex order in a tessellation unit | |
US9082204B2 (en) | Storage structures for stitching primitives in graphics processing | |
US9449419B2 (en) | Post tessellation edge cache | |
CN115984506A (zh) | 建立模型的方法和相关装置 | |
WO2015017193A2 (en) | Graphical rendering with implicit surfaces | |
US10062191B2 (en) | System and method for rendering points without gaps | |
US10580209B2 (en) | Removal of degenerated sub-primitives in tessellation | |
KR20170005035A (ko) | 깊이 오프셋 압축 기법 | |
US20140192051A1 (en) | Offloading Tessellation from a Graphics Processor to a Central Processing Unit | |
US9449420B2 (en) | Reducing the domain shader/tessellator invocations | |
CN116109745A (zh) | 一种基于实例化技术的对象渲染方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |