KR20100127834A - 그래픽 렌더링을 위한 멀티-스테이지 테셀레이션 - Google Patents

그래픽 렌더링을 위한 멀티-스테이지 테셀레이션 Download PDF

Info

Publication number
KR20100127834A
KR20100127834A KR1020107023368A KR20107023368A KR20100127834A KR 20100127834 A KR20100127834 A KR 20100127834A KR 1020107023368 A KR1020107023368 A KR 1020107023368A KR 20107023368 A KR20107023368 A KR 20107023368A KR 20100127834 A KR20100127834 A KR 20100127834A
Authority
KR
South Korea
Prior art keywords
curve
line segments
tessellation
vertex
computing unit
Prior art date
Application number
KR1020107023368A
Other languages
English (en)
Other versions
KR101240815B1 (ko
Inventor
?? 웨이
궈팡 자오
닝 비
처후이 우
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20100127834A publication Critical patent/KR20100127834A/ko
Application granted granted Critical
Publication of KR101240815B1 publication Critical patent/KR101240815B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

본 개시물은, 그래픽 렌더링 동안 커브를 테셀레이팅하기 위한 멀티-스테이지 테셀레이션 기술을 설명한다. 특히, 제 1 테셀레이션 스테이지는, 커브의 부분을 각각 나타내는 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅한다. 제 2 테셀레이션 스테이지는, 커브의 형상을 더 정밀하게 나타내는 부가적인 라인 세그먼트들로, 제 1 세트의 라인 세그먼트들의 각각에 의해 표현된 커브의 부분을 추가적으로 테셀레이팅한다. 이러한 방식으로, 제 1 테셀레이션 스테이지 이후 하나만의 라인 세그먼트에 의해 표현되었던 커브의 각각의 부분은 제 2 테셀레이션 스테이지 이후 2개 이상의 라인 세그먼트에 의해 표현된다. 몇몇 예시에서, 3개 이상의 테셀레이션 스테이지들이 커브를 테셀레이팅하기 위해 수행될 수도 있다.

Description

그래픽 렌더링을 위한 멀티-스테이지 테셀레이션{MULTI-STAGE TESSELLATION FOR GRAPHICS RENDERING}
본 발명은 컴퓨팅 디바이스에 관한 것으로, 더 상세하게는, 컴퓨팅 디바이스들에 의한 그래픽 렌더링에 관한 것이다.
컴퓨팅 디바이스들은, 진보된 2차원 (2D) 및 3차원 (3D) 그래픽 애플리케이션들을 점차 요구하고 있다. 예를 들어, 컴퓨팅 디바이스들은, 진보된 그래픽 렌더링을 요구하는 게임, 문자 애니메이션, 그래픽 메뉴 시스템, 및 다른 애플리케이션들을 점차 제공하고 있다. 특히, 3D 그래픽을 갖는 이러한 진보된 그래픽 렌더링은 실질적인 양의 데이터 프로세싱과 관련된다. 진보된 그래픽 렌더링의 품질은, 프로세싱 리소스들의 양, 이용가능한 프로세싱 리소스들의 능력, 이용가능한 전력의 양 등에 의해 제한될 수도 있다.
예를 들어, 높은 렌더링 레이트에서 진보된 그래픽 렌더링을 요구하는, 예를 들어, 매 초당 프레임들로서 요구되는 애플리케이션들은, 이용가능한 컴퓨팅 리소스들 상에 상당한 스트레인 (strain) 을 제공할 수도 있다. 이용가능한 컴퓨팅 리소스들 상의 스트레인은, 컴퓨팅 리소스들 상에 배치된 많은 로드로 인해, 다른 애플리케이션에서의 감소된 성능, 저품질 그래픽 렌더링, 또는 그 양자를 초래할 수도 있다. 개인 휴대 정보 단말기 (PDA), 무선 통신 디바이스, 글로벌 측위 디바이스 등과 같은 이동 컴퓨팅 디바이스들의 콘텍스트에서, 그래픽 렌더링에 요구되는 계산 집중적인 데이터 프로세싱은, 이동 컴퓨팅 디바이스의 이용가능한 전력의 현저한 양을 소비할 수도 있다.
멀티-미디어 프로세서는, 그래픽 프로세싱 유닛 (GPU) 에 커플링된 범용 중앙 프로세싱 유닛 (CPU) 을 포함할 수도 있다. GPU는 디스플레이 상에 컴퓨터화된 그래픽을 디스플레이하기 위해 그래픽 렌더링 동작들을 수행하는 것에 전용된다. GPU들은, 복잡한 그래픽-관련 알고리즘들의 범위를 위해 종래의 범용 CPU들보다 더 효율적인 프로세싱을 제공하는 매우-병렬적인 구조로 구축된다. CPU 상에서 실행하는 그래픽-관련 알고리즘들이 그래픽 프로세싱을 요구할 경우, CPU는 그래픽을 테셀레이팅 (tessellate) 하며, 디스플레이로의 렌더링을 위해 그 테셀레이션 (tessellation) 들을 GPU에 제공한다. GPU의 매우 병렬적인 속성은 GPU가, CPU를 이용하여 디스플레이에 직접 이미지를 드로잉하는 것보다 더 신속하게 디스플레이 상에 복잡한 3차원 이미지들을 생성하게 한다. GPU들은 매우 광범위하게 다양한 애플리케이션들에서 사용될 수도 있으며, 비디오 게임 애플리케이션, 복잡한 그래픽 사용자 인터페이스 애플리케이션, 엔지니어링 또는 예술적인 애플리케이션을 위한 컴퓨터-보조 설계 프로그램, 또는 2D 또는 3D 그래픽을 사용하는 임의의 다른 타입의 소프트웨어 애플리케이션과 같은 그래픽-집중 애플리케이션들에서 매우 일반적이다.
본 발명은, 그래픽 렌더링 동안 커브를 테셀레이팅하기 위한 멀티-스테이지 테셀레이션 기술을 설명한다. 그 커브는, 적어도 2개의 테셀레이션 스테이지들로 테셀레이팅된다. 제 1 테셀레이션 스테이지는, 커브의 부분을 각각 나타내는 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅한다. 제 2 테셀레이션 스테이지는, 커브의 형상을 더 정밀하게 나타내는 부가적인 라인 세그먼트들로 그 제 1 세트의 라인 세그먼트들 각각에 의해 나타낸 커브의 부분을 추가적으로 테셀레이팅한다. 이러한 방식으로, 제 1 테셀레이션 스테이지 이후 하나만의 라인 세그먼트에 의해 표현되었던 커브의 각각의 부분은, 제 2 테셀레이션 스테이지 이후의 2개 이상의 라인 세그먼트에 의해 표현된다. 일 예에서, 제 1 테셀레이션 스테이지는, 예를 들어, 중앙 프로세싱 유닛 (CPU) 에 의해 수행될 수도 있고, 제 2 테셀레이션 스테이지는, 그래픽 프로세싱 유닛 (GPU) 또는 전용 테셀레이션 하드웨어와 같은 테셀레이션 컴포넌트에 의해 수행될 수도 있다. 몇몇 예시에서, 멀티-스테이지 테셀레이션 기술은 3개 이상의 테셀레이션 스테이지들을 포함할 수도 있다.
일 양태에서, 방법은, 제 1 컴퓨팅 유닛을 이용하여 제 1 라인 세그먼트들로 커브를 분할하기 위해 커브를 테셀레이팅하는 단계, 및 제 2 컴퓨팅 유닛을 이용하여 제 2 라인 세그먼트들로 제 1 라인 세그먼트들 중 하나의 제 1 라인 세그먼트에 의해 표현된 커브의 부분을 테셀레이팅하는 단계를 포함한다.
또 다른 양태에서, 디바이스는, 제 1 라인 세그먼트들로 커브를 분할하기 위해 커브를 테셀레이팅하는 제 1 컴퓨팅 유닛, 및 제 1 라인 세그먼트들 중 하나의 제 1 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 제 2 컴퓨팅 유닛을 포함한다.
또 다른 양태에서, 디바이스는, 제 1 라인 세그먼트들로 커브를 분할하기 위해 커브를 테셀레이팅하는 제 1 수단, 및 제 1 라인 세그먼트들 중 하나의 제 1 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 제 2 수단을 포함한다.
본 개시물에서 설명된 기술들은, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되면, 그 소프트웨어는, 마이크로프로세서, 주문형 집적 회로 (ASIC), 필드 프로그래밍가능한 게이트 어레이 (FPGA), 또는 디지털 신호 프로세서 (DSP) 와 같은 하나 이상의 프로세서들, 또는 다른 동등한 집적 또는 이산 로직 회로를 지칭할 수도 있는 프로세서에서 실행될 수도 있다. 그 기술들을 실행하기 위한 명령들을 포함하는 소프트웨어는, 초기에, 컴퓨터-판독가능 매체에 저장되고 로딩되며 프로세서에 의해 실행될 수도 있다. 따라서, 본 개시물은 프로세서로 하여금, 본 개시물에서 설명된 바와 같은 다양한 기술들 중 임의의 기술을 수행하게 하는 명령들을 포함한 컴퓨터-판독가능 매체를 또한 고려한다. 몇몇 경우에서, 컴퓨터-판독가능 매체는, 제조자에 판매되고/되거나 디바이스에서 사용될 수도 있는 컴퓨터 프로그램 제품의 부분을 형성할 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터-판독가능 매체를 포함할 수도 있으며, 몇몇 경우에서, 패키징 재료들을 더 포함할 수도 있다.
하나 이상의 양태들의 세부사항들은 첨부한 도면 및 아래의 설명에서 개시된다. 기술들의 다른 특성들, 목적들, 및 이점들은 그 설명 및 도면, 및 청구항으로부터 명백해질 것이다.
도 1은 멀티-스테이지 테셀레이션을 수행하는 예시적인 컴퓨팅 디바이스를 도시한 블록도이다.
도 2는 멀티-스테이지 테셀레이션을 수행하도록 함께 동작하는 CPU 및 GPU를 도시한 블록도이다.
도 3a 내지 도 3d는 커브의 예시적인 2-스테이지 테셀레이션을 도시한 다이어그램이다.
도 4a 내지 도 4d는 커브의 또 다른 예시적인 멀티-스테이지 테셀레이션을 도시한 다이어그램이다.
도 5는 본 개시물에서 설명된 멀티-스테이지 테셀레이션 기술들에 따라 커브를 테셀레이팅하는 컴퓨팅 디바이스의 예시적인 동작을 도시한 흐름도이다.
도 6은 테셀레이션을 수행하는 버텍스 쉐이더의 예시적인 동작을 도시한 흐름도이다.
도 7은 멀티-스테이지 테셀레이션을 수행하는 또 다른 예시적인 컴퓨팅 디바이스를 도시한 블록도이다.
도 8은 본 개시물에서 설명된 기술들에 따라 테셀레이션을 수행하는 예시적인 테셀레이션 하드웨어 회로를 도시한 개략도이다.
도 9는, 3차 다항식을 각각 계산하는 2개의 병렬 3-스테이지 승산 및 누산 (MAC) 어레이들로서 동작하도록 구성된 테셀레이션 하드웨어 회로를 도시하는 개략도이다.
도 10은, 2차 다항식을 각각 계산하는 3개의 병렬 2-스테이지 MAC 어레이들로서 동작하도록 구성된 테셀레이션 하드웨어 회로를 도시하는 개략도이다.
도 11은 본 개시물에서 설명된 기술들에 따라 테셀레이션을 수행하는 컴퓨팅 디바이스의 예시적인 동작을 도시하는 흐름도이다.
본 개시물은, 그래픽 렌더링 동안 커브를 테셀레이팅하기 위한 기술들을 설명한다. 특히, 본 개시물은, 2개 이상의 테셀레이션 스테이지들 동안 복수의 라인 세그먼트들로 커브를 테셀레이팅하는 멀티-스테이지 테셀레이션 기술을 설명한다. 제 1 테셀레이션 스테이지는, 커브의 부분을 각각 나타내는 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅한다. 몇몇 경우에서, 제 1 테셀레이션 스테이지는, 커브의 형상을 코오스하게 나타내기에 충분한 라인 세그먼트들로 커브를 테셀레이팅한다. 일 예에서, 제 1 테셀레이션 스테이지는, 컴퓨팅 디바이스의 중앙 프로세싱 유닛 (CPU) 또는 그래픽 프로세싱 유닛 (GPU) 과 같은 컴퓨팅 디바이스의 제 1 컴퓨팅 유닛에 의해 수행될 수도 있다.
제 2 테셀레이션 스테이지는, 부가적인 라인 세그먼트들로 커브를 추가적으로 테셀레이팅한다. 특히, 제 2 테셀레이션 스테이지는, 커브의 형상을 더 정밀하게 나타내는 부가적인 라인 세그먼트들로 제 1 세트의 라인 세그먼트들 각각에 의해 표현된 커브의 부분을 테셀레이팅한다. 즉, 제 1 테셀레이션 스테이지 이후 하나만의 라인 세그먼트에 의해 표현되었던 커브의 각각의 부분은, 제 2 테셀레이션 스테이지 이후 2개 이상의 라인 세그먼트에 의해 표현된다. 제 2 테셀레이션 스테이지는, 컴퓨팅 디바이스의 제 2 컴퓨팅 유닛에 의해 수행될 수도 있다. 몇몇 양태에서, 제 2 컴퓨팅 유닛은, 제 2 테셀레이션 스테이지를 포함하는 그래픽 동작들을 수행하는데 전용된 GPU일 수도 있다. 몇몇 예시에서, GPU는, 커브의 다수의 부분들을 병렬로 테셀레이팅하는데 사용될 수도 있는 매우 병렬적인 구조를 가질 수도 있다. 또 다른 양태에서, 제 2 컴퓨팅 유닛은 제 2 테셀레이션 스테이지를 수행하는 전용 테셀레이션 하드웨어 회로일 수도 있다. 후술될 바와 같이, 멀티-스테이지 테셀레이션은 3개 이상의 테셀레이션 스테이지를 포함할 수도 있다.
도 1은, 본 개시물에 설명된 기술들에 따라 멀티-스테이지 테셀레이션을 수행하는 예시적인 컴퓨팅 디바이스 (2) 를 도시한 블록도이다. 컴퓨팅 디바이스 (2) 는, 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 컴퓨터 워크스테이션, 비디오 게임 플랫폼 또는 콘솔, 셀룰러 또는 위성 전화기, 지상선 전화기, 인터넷 전화기, 휴대용 비디오 게임 디바이스 또는 개인 휴대 정보 단말기 (PDA) 와 같은 헨드핼드 디바이스, 개인용 뮤직 플레이어, 비디오 플레이어, 텔레비젼, 서버, 중간 네트워크 디바이스, 메인프레임 컴퓨터 또는 그래픽 정보를 출력하는 또 다른 타입의 디바이스를 포함할 수도 있다.
도 1의 예에 도시된 바와 같이, 컴퓨팅 디바이스 (2) 는, 사용자 입력 인터페이스 (4), CPU (6), 디바이스 메모리 (8), GPU (10), GPU 메모리 (12), 디스플레이 인터페이스 (14) 및 디스플레이 (16) 를 포함한다. 사용자 입력 인터페이스 (4), CPU (6), 디바이스 메모리 (8), GPU (10) 및 디스플레이 인터페이스 (14) 는 버스 (18) 를 사용하여 통신할 수도 있다. 버스 (18) 는, 제 3 생성 버스 (예를 들어, 하이퍼전달 (HyperTransport) 버스 또는 무한 대역 (InfiniBand) 버스), 제 2 생성 버스 (예를 들어, 진보된 그래픽 포트 버스, 주변 컴포넌트 상호접속 (PCI) 익스프레스 버스, 또는 진보된 확장가능한 인터페이스 (AXI) 버스), 또는 또 다른 타입의 버스 또는 디바이스 상호접속과 같은 다양한 버스 구조들 중 임의의 구조일 수도 있다.
CPU (6) 는, 컴퓨팅 디바이스 (2) 의 동작을 제어하는 범용 또는 특수-목적 프로세서를 포함할 수도 있다. 사용자는, CPU (6) 가 하나 이상의 소프트웨어 애플리케이션들을 실행하게 하도록 입력을 컴퓨팅 디바이스 (2) 에 제공할 수도 있다. CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들은, 워드 프로세서 애플리케이션, 확산 시트 애플리케이션, 미디어 플레이어 애플리케이션, 비디오 게임 애플리케이션, 그래픽 사용자 인터페이스 애플리케이션 또는 또 다른 엔드-사용자 프로그램을 포함할 수도 있다. 사용자는, 사용자 입력 인터페이스 (4) 를 통해 컴퓨팅 디바이스 (2) 에 커플링된 키보드, 마우스, 마이크로폰, 터치 패드 또는 또 다른 입력 디바이스와 같은 하나 이상의 입력 디바이스들 (미도시) 을 통해 컴퓨팅 디바이스 (2) 에 입력을 제공할 수도 있다.
디바이스 메모리 (8) 는, 시작 또는 리셋시에 컴퓨팅 디바이스 (2) 를 구성하기 위해 사용될 수도 있는 디바이스 구성 정보를 저장할 수도 있다. 또한, 디바이스 메모리는, CPU (6) 에 의해 현재 동작되고 있고/있거나 즉시 액세스가능한 데이터 및/또는 프로그램 모듈들을 저장할 수도 있다. 또한, 디바이스 메모리 (8) 는, GPU (10) 에 의해 출력된 정보와 같은 컴퓨팅 디바이스 (2) 의 다른 컴포넌트들로부터의 정보를 저장할 수도 있다. 디바이스 메모리 (8) 는, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 판독 전용 메모리 (ROM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자성 데이터 매체 또는 광 저장 매체와 같은 하나 이상의 휘발성 또는 비-휘발성 메모리 또는 저장 디바이스일 수도 있다.
GPU (10) 는, 디스플레이 (16) 상에서 컴퓨터화된 그래픽을 렌더링하기 위해 그래픽 동작들을 수행하는 것에 전용될 수도 있다. 따라서, CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들 중 하나가 그래픽 프로세싱을 요구할 경우, CPU (6) 는 디스플레이 (16) 로의 렌더링을 위해 GPU (10) 에 그래픽 정보를 제공한다. 몇몇 예시에서, GPU (10) 는, CPU (6) 보다 복잡한 그래픽-관련 동작들의 더 효율적인 프로세싱을 제공하는 병렬 구조로 구축될 수도 있다. GPU (10) 의 병렬 속성은 GPU (10) 가, CPU (6) 를 이용하여 디스플레이 (16) 에 직접 이미지들을 드로잉하는 것보다 더 신속하게 디스플레이 (16) 상에 복잡한 2차원 (2D) 또는 3차원 (3D) 이미지들을 생성하게 할 수도 있다. 몇몇 예시에서, GPU (10) 는 컴퓨팅 디바이스 (2) 의 마더보드에 통합될 수도 있다. 다른 예시에서, GPU (10) 는, 컴퓨팅 디바이스 (2) 의 마더보드내의 포트에 인스톨되는 그래픽 카드 상에 존재할 수도 있거나, 컴퓨팅 디바이스 (2) 와 상호작용하도록 구성되는 주변 디바이스 내에 포함될 수도 있다. GPU (10) 는, 하나 이상의 마이크로프로세서들, 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 게이트 어레이 (FPGA), 디지털 신호 프로세서 (DSP), 또는 다른 동등한 집적 또는 이산 로직 회로와 같은 하나 이상의 프로세서일 수도 있다.
GPU (10) 는 GPU 메모리 (12) 에 직접 커플링될 수도 있다. 따라서, GPU (10) 는, 버스 (18) 를 사용하지 않고도 GPU 메모리 (12) 로부터 데이터를 판독할 수도 있고, GPU 메모리 (12) 에 데이터를 기입할 수도 있다. 즉, GPU (10) 는 오프 칩 메모리 대신에 로컬 저장부를 사용하여 로컬적으로 데이터를 프로세싱할 수도 있다. 이것은 GPU (10) 가, 버스 (18) 를 통해 데이터를 판독 및 기입하기 위해 GPU (10) 의 필요성을 제거함으로써 더 효율적인 방식으로 동작하게 하며, 이는 막대한 버스 트래픽을 경험할 수도 있다. 그러나, 몇몇 인스턴스에서, GPU (10) 는 별개의 메모리를 포함하지 않을 수도 있지만, 대신, 버스 (18) 를 통해 디바이스 메모리 (8) 를 이용한다. GPU 메모리 (12) 는, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자성 데이터 매체 또는 광 저장 매체와 같은 하나 이상의 휘발성 또는 비-휘발성 메모리 또는 저장 디바이스일 수도 있다.
CPU (6) 및/또는 GPU (10) 는 디스플레이 (16) 를 통한 프리젠테이션을 위해 디스플레이 인터페이스 (14) 에 이미지 정보를 제공할 수도 있다. 복잡한 2D 및 3D 그래픽의 경우, 이미지 정보는 통상적으로 디스플레이 (16) 에 대해 GPU (10) 에 의하여 생성된다. 디스플레이 (16) 는, 모니터, 텔레비젼, 프로젝션 디바이스, 액정 디스플레이 (LCD), 플라즈마 디스플레이 패널, 광 방출 다이오드 (LED) 어레이, 음극선 튜브 디스플레이, 전자 종이, 표면-전도 전자-방출 디스플레이 (SED), 레이저 텔레비전 디스플레이, 나노크리스탈 디스플레이 또는 또 다른 타입의 디스플레이 유닛을 포함할 수도 있다. 디스플레이 (16) 는, 컴퓨팅 디바이스 (2) 내에 포함될 수도 있다. 예를 들어, 디스플레이 (16) 는, 이동 전화기의 스크린일 수도 있다. 대안적으로, 디스플레이 (16) 는, 유선 또는 무선 통신 링크를 통해 컴퓨터 디바이스 (2) 에 커플링된 단독형 디바이스일 수도 있다. 예를 들어, 디스플레이 (16) 는, 케이블 또는 무선 링크를 통해 개인용 컴퓨터에 접속된 컴퓨터 모니터 또는 플랫 패널 디스플레이일 수도 있다.
CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들 중 하나가 복잡한 2D 또는 3D 그래픽 이미지를 프리젠테이션하기를 원할 경우, CPU (6) 및 GPU (10) 는 디스플레이 (16) 에 그래픽을 렌더링하도록 함께 동작한다. 예를 들어, 비디오 게임 애플리케이션의 경우, 소프트웨어 애플리케이션은, 비디오 게임 경험을 사용자에게 제공하기 위해 일련의 비디오 프레임들을 시퀀스로 프리젠테이션하기를 원할 수도 있다. 소프트웨어 애플리케이션은, 디스플레이될 그래픽 이미지를 형성하는 하나 이상의 커브를 정의하는 커맨드들을 포함한다. 예를 들어, 비디오 게임 애플리케이션의 경우, 비디오 게임 애플리케이션은, 비디오 게임의 장면의 그래픽 이미지의 커브들을 정의하는 커맨드들을 포함할 수도 있다. 예를 들어, 커맨드들은, 배경 내의 문자 및 오브젝트들의 경계들을 정의하는 다수의 커브들을 정의할 수도 있다.
일 예에서, 소프트웨어 애플리케이션은, 2005년 7월 28일자 "OpenVG Specification, Version 1.0" 의 문헌에서 정의되는 바와 같은 OpenVG 에 따라 복수의 경로들, 즉, 커브들을 정의하는 커맨드들을 포함할 수도 있다. OpenVG는, 하나 이상의 세그먼트 커맨드들을 사용하여 2D 또는 3D에서의 그래픽 이미지들의 규격을 허용하는 커맨드들의 세트이다. OpenVG 규격에 따르면, 세그먼트 커맨드들은 직선 세그먼트들, 베지어 (Bezier) 커브 세그먼트들 또는 타원형 아크 세그먼트들을 정의할 수도 있다. OpenVG 의 확장은 다른 타입의 세그먼트들을 특정할 수도 있다. 따라서, 본 개시물의 기술들은, OpenVG 사양에서 현재 정의되는 세그먼트 커맨드들로 제한되지 않는다. 또한, 본 개시물의 기술들이 OpenVG의 콘텍스트에서 설명되었지만, 그 기술들은, OpenGL, Direct3D, 그래픽 디바이스 인터페이스 (GDI), Quartz, QuickDraw 등과 같은 다른 그래픽 생성 표준의 콘텍스트에서 사용될 수도 있다.
디스플레이 (16) 에 커브를 렌더링하기 위해, CPU (6) 및/또는 GPU (10) 는, 본 개시물에서 설명된 멀티-스테이지 테셀레이션 기술들을 사용하여 라인 세그먼트들로 커브를 테셀레이팅한다. 일 양태에서, CPU (6) 는 라인 세그먼트들로 커브를 분할하기 위해 제 1 테셀레이션 스테이지를 수행할 수도 있고, GPU (10) 는 부가적인 라인 세그먼트들로 커브를 추가적으로 분할하기 위해 제 2 테셀레이션 스테이지를 수행할 수도 있다. 이러한 예에서, CPU (6) 는, 제 1 테셀레이션 스테이지 동안 커브의 형상을 코오스하게 나타내는 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅한다. 커브의 라인 세그먼트들의 각각은 커브의 부분을 나타낸다. 제 2 테셀레이션 스테이지 동안, GPU (10) 는, 커브의 형상을 더 정밀하게 나타내는 부가적인 라인 세그먼트들로 라인 세그먼트들의 각각에 의해 표현된 커브의 부분을 테셀레이팅한다. 즉, 제 1 테셀레이션 스테이지 이후 하나만의 라인 세그먼트에 의해 표현되었던 커브의 각각의 부분은, 제 2 테셀레이션 스테이지 이후 2개 이상의 세그먼트에 의해 표현된다. GPU (10) 는, 2개 이상의 라인 세그먼트들에 의해 표현된 커브의 다수의 부분들을 병렬로 테셀레이팅하기 위해 병렬 구조를 이용할 수도 있다. 몇몇 양태에서, 이러한 방식으로, 컴퓨팅 디바이스 (2) 는, 커브의 다수의 부분들에 대해 완전한 병렬로 동시에 동작하도록 GPU (10) 의 가속 능력을 이용할 수도 있으며, 따라서, 개선된 렌더링 성능을 초래한다.
CPU (6) 에 의해 수행된 테셀레이션의 양은, CPU (6) 상의 프로세싱 로드 및/또는 GPU (10) 상의 프로세싱 로드의 함수로서 변할 수도 있다. 상술된 바와 같이, CPU (6) 는 다수의 소프트웨어 애플리케이션들을 동시에 실행할 수도 있으며, 그 각각은 계산 태스크들을 수행하기 위해 CPU (6) 의 프로세싱 리소스들을 사용한다. 그래픽-관련 애플리케이션이 그래픽 프로세싱을 원할 경우, 예를 들어, CPU (6) 의 프로세싱 로드가 임계값 이하일 경우, CPU (6) 가 다른 계산 태스크들로 가볍게 로딩되면, CPU (6) 는 더 많은 라인 세그먼트들로 커브를 테셀레이팅할 수도 있다. 이것은 GPU (10) 에 대한 감소된 테셀레이션 워크로드를 초래할 것일 뿐만 아니라, GPU가 더 적은 부가적인 라인 세그먼트들로 커브의 부분들을 테셀레이팅하게 할 것이다.
그래픽-관련 애플리케이션이 그래픽 프로세싱을 원할 경우, 예를 들어, CPU (6) 의 프로세싱 로드가 임계값보다 클 경우, CPU (6) 가 다른 계산 태스크들로 무겁게 로딩되면, CPU (6) 는 더 적은 수의 라인 세그먼트들로 커브를 테셀레이팅할 수도 있다. 예를 들어, CPU (6) 는, 휴먼 플레이어에 대해 컴퓨터 플레이를 행하는 인공지능과 같은 태스크를 구동시키고, 게임에서의 물리적인 효과를 계산하고, 사운드 효과를 제공하며, 게임 그래픽 등을 디스플레이하도록 CPU (6) 에게 요구하는 게임 애플리케이션이 CPU (6) 상에서 실행하고 있는 경우, CPU (6) 는 무겁게 로딩될 수도 있다. 이것은, CPU (6) 에 대한 감소된 테셀레이션 워크로드를 초래할 것이지만, GPU (10) 가 더 많은 부가적인 라인 세그먼트들로 커브의 부분들을 테셀레이팅해야 하므로 GPU (10) 의 테셀레이션 워크로드를 증가시킬 것이다. 유사하게, 테셀레이션 프로세싱 워크로드는, GPU (10) 의 로드 또는 CPU (6) 및 GPU (10) 상의 로드의 조합에 기초하여 밸런싱될 수도 있다. 이러한 방식으로, 컴퓨팅 디바이스 (2) 는, 이용가능한 프로세싱 리소스들의 함수로서 CPU (6) 와 GPU (10) 사이의 테셀레이션 워크로드를 동적으로 밸런싱할 수도 있다.
또 다른 예에서, 커브의 멀티-스테이지 테셀레이션은 GPU (10) 내에서 발생할 수도 있다. 이러한 예에서, CPU (6) 는, 커브의 임의의 테셀레이션을 수행하지 않는다. 대신, GPU (10) 내의 제 1 컴퓨팅 유닛은 제 1 라인 세그먼트들로 커브를 분할하기 위해 제 1 테셀레이션 스테이지를 수행하고, GPU (10) 내의 제 2 컴퓨팅 유닛은 제 1 라인 세그먼트들에 의해 표현된 커브의 부분을 부가적인 라인 세그먼트들로 추가적으로 분할하기 위해 제 2 테셀레이션 스테이지를 수행한다. 이러한 예에서, 컴퓨팅 디바이스 (2) 는, 양자의 테셀레이션 스테이지들 동안 커브의 다수의 부분들에 대해 완전한 병렬로 동시에 수행하도록 GPU (10) 의 가속 능력을 이용할 수도 있다.
몇몇 예시에서, 커브의 멀티-스테이지 테셀레이션은 3개 이상의 테셀레이션 스테이지들을 포함할 수도 있다. 예를 들어, 제 1 테셀레이션 스테이지는 커브의 부분을 각각 나타내는 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅할 수도 있다. 제 2 테셀레이션 스테이지 동안, 제 1 라인 세그먼트들의 각각에 의해 표현된 커브의 부분은, 제 1 테셀레이션 스테이지 이후 제 1 세트의 라인 세그먼트 중 하나만의 라인 세그먼트에 의해 표현되었던 커브의 각각의 부분이 제 2 테셀레이션 스테이지 이후 2개 이상의 라인 세그먼트에 의해 표현되도록, 라인 세그먼트들의 제 2 세트로 테셀레이팅된다. 제 3 테셀레이션 스테이지 동안, 제 2 라인 세그먼트들의 각각에 의해 표현된 커브의 부분은, 부가적인 라인 세그먼트들로 테셀레이팅된다. 임의의 수의 테셀레이션 스테이지들이 수행될 수도 있다. 테셀레이션 스테이지들은, CPU (6), GPU (10) 및/또는 전용 테셀레이션 하드웨어 (도 1에 도시되지 않음) 에 의해 수행될 수도 있다.
다수의 다른 엘리먼트들이 컴퓨팅 디바이스 (2) 에 또한 포함될 수도 있지만, 설명의 간략화 및 용이함을 위해 도 1에 상세히 도시되지는 않는다. 예를 들어, 컴퓨팅 디바이스 (2) 는, 아래의 도 7에서 상세히 설명되고 도시되는 테셀레이션 하드웨어 (72) 와 같은 전용 테셀레이션 하드웨어를 포함할 수도 있다. 또한, 본 개시물에 설명된 기술들이 다양한 다른 아키텍처들로 구현될 수도 있으므로, 도 1에 도시된 아키텍처는 단지 예시일 뿐이다.
도 2는 도 1의 CPU (6) 및 GPU (10) 를 더 상세히 도시한 블록도이다. CPU (6) 및 GPU (10) 는, 본 개시물에 설명된 멀티-스테이지 테셀레이션을 사용하여 2D 또는 3D 그래픽 이미지의 하나 이상의 커브들을 테셀레이팅하도록 함께 동작한다. CPU (6) 는 CPU (6) 상에서 실행하는 적어도 하나의 소프트웨어 애플리케이션 (20) 을 포함한다. CPU (6) 상에서 실행하는 소프트웨어 애플리케이션 (20) 은, 비디오 게임 애플리케이션, 그래픽 사용자 인터페이스 애플리케이션, 휴대용 매핑 애플리케이션, 스케일러블 벡터 그래픽 (SVG) 애플리케이션, 엔지니어링 또는 예술적인 애플리케이션을 위한 컴퓨터-보조 설계 프로그램, 또는 2D 또는 3D 그래픽을 사용하는 또 다른 타입의 소프트웨어 애플리케이션일 수도 있다.
상술된 바와 같이, 소프트웨어 애플리케이션 (20) 은, 디스플레이될 그래픽 이미지를 형성하는 하나 이상의 커브들을 정의하는 커맨드들을 포함할 수도 있다. 명령들은, 다양한 그래픽 생성 표준들, 즉, OpenVG, OpenGL, Direct3D, 그래픽 디바이스 인터페이스 (GDI), Quartz, QuickDraw 등과 같은 애플리케이션 프로그래밍 인터페이스 (API) 들 중 임의의 하나에 따를 수도 있다. 예를 들어, OpenVG의 경우, 시퀀스 세그먼트 커맨드들에 의해 커브가 정의된다. OpenVG의 각각의 세그먼트 커맨드는, 이동 직선 세그먼트, 2차 또는 3차 베지어 커브 세그먼트 또는 타원형 아크 세그먼트를 특정할 수도 있다. 따라서, 각각의 세그먼트 커맨드는 커브의 부분을 정의할 수도 있다. 소프트웨어 애플리케이션 (20) 은, 임의의 형상의 커브를 생성하기 위해 세그먼트 커맨드들의 시퀀스를 포함할 수도 있다.
디스플레이 (16) 로의 렌더링하도록 커브를 준비하기 위해, CPU (6) 및/또는 GPU (10) 는, 본 개시물에 설명된 멀티-스테이지 테셀레이션 기술들을 사용하여 라인 세그먼트들로 커브를 테셀레이팅한다. 일 양태에서, CPU (6) 는 제 1 테셀레이션 스테이지를 수행하고, GPU (10) 는 제 2 테셀레이션 스테이지를 수행한다. 소프트웨어 애플리케이션 (20) 은, CPU (6) 로 하여금 제 1 테셀레이션 스테이지를 수행하게 하도록 GPU 드라이버 (21) 와 상호작용하는 그래픽 API (26) 를 호출할 수도 있다. 특히, GPU 드라이버 (21) 는, 제 1 테셀레이션 스테이지 동안 커브를 테셀레이팅하기 위해 GPU 드라이버 (21) 내의 테셀레이션 모듈 (22) 을 호출한다. 테셀레이션 모듈 (22) 은, 커브의 각각의 세그먼트 (즉, 커맨드) 를 개별적으로 테셀레이팅할 수도 있다. 즉, 테셀레이션 모듈 (22) 은, 커브의 하나의 세그먼트를 라인 세그먼트들로 분할하기 위해 한번에 하나씩 커브의 그 세그먼트에 대해 동작할 수도 있다. 다른 예시에서, 테셀레이션 모듈 (22) 은 전체 커브를 테셀레이팅할 수도 있다. 따라서, 여기에 사용된 바와 같이, "커브" 라는 용어는 오브젝트의 커브의 세그먼트 또는 커브를 지칭할 수도 있다.
테셀레이션 모듈 (22) 은 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅한다. 각각의 라인 세그먼트들은 커브의 부분을 나타낸다. 몇몇 예시에서, 라인 세그먼트들의 제 1 세트는 커브의 적어도 일반적인 형상을 근사시킬 수도 있다. 그러나, 라인 세그먼트들의 제 1 세트는 커브의 형상의 고해상도 근사화를 제공할 필요는 없다. 예를 들어, 테셀레이션 모듈 (22) 은, 커브의 일반적인 형상을 보존하기 위해 필요한 최소 수의 라인 세그먼트들로 커브를 테셀레이팅할 수도 있다. 즉, 테셀레이션 모듈 (22) 은, 커브의 일반적인 형상을 여전히 보존하면서 가능한 적은 라인 세그먼트들을 생성하기 위해 커브를 테셀레이팅할 수도 있다. 또 다른 예에서, 테셀레이션 모듈 (22) 은, CPU (6) 가 무겁게 로딩될 경우, 예를 들어, CPU (6) 의 프로세싱 로드가 임계값을 초과할 경우 커브의 임의의 테셀레이션을 수행하지 않을 수도 있다. 대신, CPU (6) 는 멀티-스테이지 테셀레이션을 위해 GPU (10) 에 커브 정보를 제공할 수도 있다. 그러나, 이것은 GPU (10) 에 대해 증가된 워크로드를 초래한다. 따라서, CPU (6) 는, CPU (6) 와 GPU (10) 사이에서 테셀레이션 로드를 밸런싱하도록 구성될 수도 있다.
라인 세그먼트들의 제 1 세트를 생성하기 위해, 테셀레이션 모듈 (22) 은 커브 상에 놓이는 하나 이상의 버텍스 포인트들을 계산한다. 예를 들어, 테셀레이션 모듈 (22) 은, 그래픽 생성 규격 (예를 들어, OpenVG) 에서 특정될 수도 있는 특정한 커맨드 세그먼트에 대응하는 수학적 표현을 사용하여 하나 이상의 버텍스 포인트들을 생성할 수도 있다. 예를 들어, OpenVG 를 사용하여 타원형 마크 커브로서 정의된 커브의 경우, 테셀레이션 모듈 (22) 은,
Figure pct00001
Figure pct00002
를 사용하여 버텍스 포인트들을 계산할 수도 있으며, 여기서, (x,y) 는 오브젝트 공간에서의 커브 상의 버텍스 포인트의 위치 좌표이고, a는 타원의 반장축 (semi-major) 이고, b는 타원의 반단축 (semi-minor) 이며, 0≤θ≤2π 이다. 라인 세그먼트들의 제 1 세트의 각각은, 각각의 버텍스 포인트를 그의 이웃한 버텍스 포인트로 연결시키는 직선 세그먼트이다. 몇몇 예시에서, CPU (6) 의 테셀레이션 모듈 (22) 또는 다른 컴포넌트는, 도 7에 관해 상세히 설명될 바와 같이 커브의 확장된 다항식 표현을 계산할 수도 있다.
테셀레이션 모듈 (22) 은, 라인 세그먼트들의 제 1 세트로 커브를 균등하게 분할하기 위해 커브를 테셀레이팅할 수도 있다. 예를 들어, 테셀레이션 모듈 (22) 은 N개의 라인 세그먼트들로 커브를 균등하게 분할할 수도 있으며, 여기서, N은 임의의 정수값과 동일하다. 예를 들어, 상기 타원형 아크 커브의 예시에서, 테셀레이션 모듈 (22) 은, 타원형 아크 커브를 N개의 동일한 라인 세그먼트들로 균등하게 분할하기 위해, 시작 각도 θs로부터 종료 각도 θe까지 θ의 값을 (θs-θe)/N 의 스텝 사이즈로 증분적으로 증가시킬 수도 있다. 예를 들어, 타원형 아크 각도가 θs=0 의 시작 각도 및 θe=2π의 종료 각도를 갖는 완전한 타원이고, N=8 이면, 테셀레이션 모듈 (22) 은, θ0=θs=0, θ1=π/4, θ2=π/2, θ3=3π/4, θ4=π, θ5=5π/4, θ6=3π/2, θ7=7π/4, θ8=θe=2π 에 위치된 버텍스 포인트들을 연결시키는 8개의 라인 세그먼트들을 생성할 수도 있다. 다른 예시에서, 테셀레이션 모듈 (22) 은, 커브의 곡률이 더 큰 커브의 부분들에 대해 더 많은 라인 세그먼트들로, 및 커브의 곡률이 더 작은 커브의 부분들에 대해 더 적은 라인 세그먼트들로 커브를 분할하기 위해 커브를 적응적으로 테셀레이팅할 수도 있다. 이러한 방식으로, 커브의 곡률이 더 큰 경우 테셀레이션이 더 밀집되도록 스텝 사이즈들은 비-선형이다. 또한, 타원형 커브의 예를 참조하면, 테셀레이션 모듈 (22) 은 비율 b/a에 기초하여 θ의 스텝 사이즈들을 생성할 수도 있으므로, 더 많은 라인 세그먼트들이 θ=0 및 θ=π (즉, θ의 스텝 사이즈가 더 작음) 근방에서 생성되고, 더 적은 라인 세그먼트들이 θ=π/2 및 θ=3π/2 근방에서 생성된다 (즉, θ의 스텝 사이즈가 더 큼).
GPU 드라이버 (21) 의 테셀레이션 로드 제어기 (24) 는, CPU (6) 의 로드 및/또는 GPU (10) 의 로드에 기초하여 라인 세그먼트들의 수 N을 계산할 수도 있다. 예를 들어, 테셀레이션 로드 제어기 (24) 는, CPU (6) 의 로드를 모니터링하는 운영 시스템 (미도시) 으로부터 CPU (6) 의 로드에 관한 데이터를 수신할 수도 있다. 따라서, CPU (6) 는 그 자신의 워크 로드를 모니터링할 수도 있다. 또한, 테셀레이션 로드 제어기 (24) 는 GPU (10) 의 로드를 모니터링할 수도 있다. GPU (10) 에 태스크들을 전송하고 GPU (10) 의 진행을 모니터링함으로써 CPU (6) 가 GPU (10) 를 제어하기 때문에, 테셀레이션 로드 제어기 (24) 는 GPU (10) 에 전송된 커맨드들의 수에 기초하여 로드를 결정할 수 있다.
테셀레이션 모듈 (22) 은, 생성된 라인 세그먼트들을 사용하여 드로잉 프리미티브 (primitive) 들의 리스트를 생성할 수도 있다. 예를 들어, 테셀레이션 모듈 (22) 은, 라인 세그먼트들의 버텍스 포인트들을 사용하여 프리미티브들에 대한 버텍스 포인트들의 적어도 일부로서 드로잉 프리미티브의 리스트를 형성할 수도 있다. 테셀레이션 모듈 (22) 은, 포인트들, 라인 스트립들, 라인 루프들, 별개의 라인들, 삼각형 스트립들, 삼각형 팬 (fan) 들, 별개의 삼각형들, 사변형 스트립들, 별개의 사변형들, 또는 다른 타입의 다각형들을 포함하는 다수의 드로잉 프리미티브들 중 임의의 드로잉 프리미티브를 생성할 수도 있다.
CPU (6) 는 드로잉 프리미티브들, 예를 들어, 삼각형들의 리스트를 GPU 드라이버 (21) 를 통해 GPU (10) 에 전달하도록 그래픽 API (26) 를 호출할 수도 있다. 그래픽 API (26) 는, CPU (6) 와 GPU (10) 사이에 인터페이스를 제공하는 소프트웨어 명령들의 세트를 포함할 수도 있다. 특히, GPU 드라이버 (21) 는, GPU (10) 가 디스플레이가능한 그래픽 정보에 대한 드로잉 프리미티브들에 렌더링하게 하는 하나 이상의 커맨드들을 포뮬레이팅 (formulate) 및 이슈할 수도 있다. 그 커맨드들은, 프리미티브의 버텍스 포인트들, 프리미티브의 각각의 버텍스 포인트와 관련된 컬러 정보, 프리미티브의 각각의 버텍스 포인트와 관련된 텍스처 정보, 프리미티브에 대한 스케일링 정보, 프리미티브에 대한 회전 정보 등을 포함할 수도 있다. GPU 드라이버 (21) 는, 프리미티브에 대해 수행할 동작을 특정하는 커맨드를 포뮬레이팅할 수도 있다. 예를 들어, GPU 드라이버 (21) 는, 커브의 테셀레이션 및/또는 렌더링을 수행하도록 GPU (10) 에 나타내는 커맨드를 포뮬레이팅할 수도 있다.
GPU (10) 가 CPU (6) 로부터 커맨드를 수신할 경우, 커맨드 디코더 (28) 는 그 커맨드를 디코딩하며, 그 커맨드에서 특정된 동작을 수행하기 위해 GPU (10) 의 하나 이상의 프로세싱 엘리먼트들을 구성한다. 또한, 커맨드 디코더 (28) 는, GPU 메모리 (12) 에서의 커맨드 내 또는 GPU (10) 내의 하나 이상의 버퍼들 (미도시) 내에 포함된 정보 (예를 들어, 프리미티브 또는 커브 정보) 를 저장할 수도 있다. 커맨드 디코더 (28) 는, 프로세싱 엘리먼트들이 특정한 그래픽 프로세싱 동작들을 수행하게 하는 명령들의 세트를 GPU (10) 의 프로세싱 엘리먼트들의 각각에 로딩할 수도 있다. 도 2에 도시된 예에서, GPU (10) 의 프로세싱 엘리먼트들은, 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32), 래스터라이저 (rasterizer) (34), 및 픽셀 쉐이더 (36) 를 포함한다. 몇몇 예시에서, GPU (10) 는 전용 테셀레이션 하드웨어 (38) 를 더 포함할 수도 있다. 또한, 다른 프로세싱 엘리먼트들이 GPU (10) 에 포함될 수도 있지만, 설명의 간략화 및 용이함을 위해 도 2에는 상세히 도시되지 않는다.
버텍스 쉐이더 (30), 지오메트리 쉐이더 (32), 래스터라이저 (34), 및 픽셀 쉐이더 (36) 는 그래픽 파이프라인으로서 동작한다. 그래픽 파이프라인으로서 동작할 경우, 버텍스 쉐이더 (30) 는, 커맨드 디코더 (28) 또는 GPU 메모리 (12) 로부터 수신된 입력 데이터의 제 1 세트에 대해 하나 이상의 그래픽 동작들의 제 1 세트를 수행하고, 중간 결과들의 제 1 세트를 지오메트리 쉐이더 (32) 에 출력한다. 지오메트리 쉐이더 (32) 는, 버텍스 쉐이더 (30) 로부터 수신된 중간 결과들에 대해 하나 이상의 그래픽 동작들의 제 2 세트를 수행하고, 중간 결과들의 제 2 세트를 래스터라이저 (34) 에 출력한다. 지오메트리 쉐이더 (32) 가 그래픽 동작들의 제 2 세트를 수행하는 동안, 버텍스 쉐이더 (30) 는 커맨드 디코더 (22) 로부터 수신된 초기 입력 데이터의 제 2 세트에 대해 그래픽 동작들의 제 1 세트를 수행한다. 그래픽 프로세싱은, 그래픽 이미지가 디스플레이를 위해 생성될 때까지 유사한 방식으로 계속된다.
또한, GPU (10) 는, CPU (6) 보다 복잡한 그래픽-관련 동작들의 더 효율적인 프로세싱을 제공하는 매우-병렬적인 구조를 가질 수도 있다. 오직 하나의 그래픽 파이프라인이 도 2에 도시되어 있지만, GPU (10) 는 다수의 데이터 프리미티브들에 대해 병렬로 동작하는 복수의 유사한 그래픽 파이프라인들을 포함할 수도 있다. 즉, GPU (10) 는, 수개의 데이터 프리미티브들에 대해 완전한 병렬로 동작할 수도 있는 복수의 버텍스 쉐이더들, 지오메트리 쉐이더들, 래스터라이저들, 및 픽셀 쉐이더들을 포함할 수도 있다. 따라서, 몇몇 예시에서, GPU (10) 의 매우 병렬적인 속성은 GPU (10) 로 하여금, CPU (6) 를 이용하여 디스플레이 (16) 에 직접 그래픽 이미지들을 드로잉하는 것보다 더 신속하게 디스플레이 (16) 상에 복잡한 2D 또는 3D 그래픽 이미지들을 생성하게 할 수도 있다.
버텍스 쉐이더 (30) 는 한번에 단일 버텍스에 대해 동작한다. 버텍스 쉐이더는, 단일 버텍스를 정의하는 하나 이상의 버텍스 속성들의 시퀀스를 수신하도록 구성될 수도 있다. 종래의 버텍스 속성들은, 위치 속성, 노멀 속성, 하나 이상의 컬러 속성들, 하나 이상의 텍스트 속성들, 하나 이상의 광 속성들 등을 포함한다. 또한, 버텍스 쉐이더 (30) 는, 버텍스 쉐이더 (30) 가 사용되고 있는 그래픽 동작들에 의존하여, 하나 이상의 커스텀 버텍스 속성들을 수신하도록 구성될 수도 있다. 몇몇 예시에서, 각각의 버텍스를 정의하는데 사용될 수 있는 버텍스 속성들의 수는 속성들의 특정한 최대 수에 제한될 수도 있다.
버텍스 쉐이더 (30) 는 버텍스에 대해 다수의 그래픽 동작들을 수행할 수도 있다. 예를 들어, 버텍스 쉐이더 (30) 는, 상이한 좌표 시스템으로 입력 버텍스를 변환하도록 구성될 수도 있다. 특히, 버텍스 쉐이더 (30) 는, 입력으로서 수신된 버텍스의 위치 속성을 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 변환한다. 오브젝트 좌료 공간은, 그래픽 이미지가 소프트웨어 애플리케이션 (20) 의 명령들에 의해 정의되는 방법을 나타낸다. 디바이스 좌표 공간은, 그래픽 이미지가 디스플레이, 예를 들어, 디스플레이 (16) 상에 디스플레이될 방법을 나타낸다. 예를 들어, 버텍스 쉐이더 (30) 는, 회전, 평행이동, 스케일링 등과 같은 아핀 (affine) 연산들을 사용하여 버텍스 좌표들을 변환할 수도 있다. 일 예에서, 버텍스 쉐이더 (30) 는,
Figure pct00003
를 사용하여 버텍스 좌표들을 변환할 수도 있으며, 여기서, (X', Y', 1) 은 디바이스 좌표 공간에서의 버텍스 위치이고, (X, Y, 1) 은 오브젝트 좌표 공간에서의 버텍스 위치이고, Scale_x 는 x-축을 따른 스케일링 팩터이고, Scale_y 는 y-축을 따른 스케일링 팩터이고, Rotate_x 는 x-축 주변의 회전이고, Rotate_y 는 y-축 주변의 회전이고, Trans_x 는 x-축을 따른 평행이동이며, Trans_y 는 y-축을 따른 평행이동이다. 이들 변수들은 소프트웨어 애플리케이션 (20) 의 명령들에서 특정되고, 그래픽 API (26) 를 통해 GPU (10) 에 제공되며, 커맨드 디코더 (28) 에 의해 버텍스 쉐이더 (30) 내에서 구성될 수도 있다.
몇몇 예시에서, 버텍스 쉐이더 (30) 는 커브에 대한 변환을 한번 계산할 수도 있다. 즉, 버텍스 쉐이더 (30) 는, 경로를 통한 매 버텍스 포인트에 대한 변환을 계산하는 것 대신에 커브를 정의하는데 사용되는 수학식들의 변환을 계산할 수도 있다. 상기 타원형 아크 곡선의 경우, 버텍스 쉐이더 (30) 는,
Figure pct00004
Figure pct00005
로서의 변환 이후 타원형 아크 곡선의 수학적 표현을 정의하기 위해 커브를 변환할 수도 있으며, 여기서, (x', y') 는 디바이스 좌표 공간에서의 위치 좌표이고, xt는 x-축을 따른 평행이동이고, yt는 y-축을 따른 평행이동이며, Sf는 변환의 스케일 팩터이다. 수학식들 (4) 및 (5) 는, 버텍스 쉐이더 (30) 가 단지 커브를 평행이동 및 스케일링한다고 가정한다 (즉, 커브의 회전은 없다). 몇몇 예시에서, CPU (6) 는 버텍스 쉐이더 (30) 대신 변환을 수행할 수도 있다.
버텍스 쉐이더 (30) 는 입력 버텍스 속성들에 대해 다수의 다른 동작들을 수행할 수도 있다. 버텍스 쉐이더 (30) 는, 버텍스의 컬러 속성들 중 하나 이상, 버텍스의 텍스처 속성들 중 하나 이상, 버텍스의 광 속성들 중 하나 이상 등을 변경시키기 위해 하나 이상의 동작들을 수행할 수도 있다. 버텍스 쉐이더 (30) 는, 모든 버텍스를 동일한 방식으로 변경시키거나 특정한 특성들을 갖는 버텍스들만을 변경시키도록 구성될 수도 있다. 따라서, 버텍스 쉐이더 (30) 는, 하나의 버텍스에 대해 하나의 세트의 동작들을 수행하도록 구성되고, 그 후, 다음의 버텍스에 대해 상이한 세트의 동작들을 수행하도록 재구성될 수도 있다.
지오메트리 쉐이더 (32) 는 개별 버텍스 포인트들 대신 프리미티브들에 대해 동작한다. 지오메트리 쉐이더 (32) 는 버텍스 포인트들의 스트링 (또는 버텍스 포인트들을 정의하는 속성들) 을 수신하고, 프리미티브들을 형성한다. 삼각형 프리미티브의 경우, 지오메트리 쉐이더 (32) 는, 삼각형 프리미티브의 3개의 버텍스 포인트들을 정의하는 버텍스 속성들의 3개의 세트를 입력할 수도 있다. 몇몇 경우, 또한, 지오메트리 쉐이더 (32) 는 인접한 프리미티브들의 버텍스 포인트들에 대한 버텍스 속성들을 입력할 수도 있다. 지오메트리 쉐이더 (32) 는 프리미티브를 폐기할 수도 있거나, 입력 프리미티브의 버텍스 포인트들의 버텍스 속성들을 사용하여 하나 이상의 새로운 프리미티브들을 생성할 수도 있다. 몇몇 경우, GPU (10) 는 지오메트리 쉐이더 (32) 를 포함하지 않을 수도 있다.
래스터라이저 (34) 는, 버텍스 속성들에 기초하여, 지오메트리 쉐이더 (32), 또는 지오메트리 쉐이더 (32) 가 존재하지 않는 경우에는 버텍스 쉐이더에 의해 출력된 프리미티브들을 픽셀들로 변환한다. 래스터라이저 (34) 는 프리미티브들에 대해 클립핑 동작들을 수행할 수도 있으며, 픽셀 쉐이더 (36) 에 대한 프리미티브들을 준비할 수도 있다. 래스터라이저 (34) 는, 스크린 내의 어느 픽셀들이 오브젝트의 지오메트리 내에 존재하고, 따라서 드로잉될 필요가 있는지를 결정할 수도 있다. 또한, 래스터라이저 (34) 는 픽셀 데이터를 생성하기 위해 버텍스 데이터의 보간을 수행한다. 래스터라이저 (34) 의 출력은 픽셀 쉐이더 (36) 에 제공된다. 픽셀 쉐이더 (36) (종종, 단편 (fragment) 쉐이더로서 지칭됨) 는, 디스플레이 (16) 상에 디스플레이될 각각의 픽셀에 대해 그래픽 동작들을 수행한다. 예를 들어, 픽셀 쉐이더 (36) 는, 각각의 픽셀 위치에서 디스플레이할 컬러 값을 생성하기 위해, 픽셀 당 텍스처링 (per-pixel texturing), 포그 (fog) 및 컬러링 동작들을 수행할 수도 있다.
본 개시물의 기술들에 따르면, GPU (10) 는, 부가적인 라인 세그먼트들로 커브를 테셀레이팅하기 위해 적어도 제 2 테셀레이션 스테이지를 수행하도록 구성될 수도 있다. 예를 들어, 쉐이더 (30, 32, 또는 36) 는, 커브의 부분을 더 정확하게 나타내는 부가적인 라인 세그먼트들로, CPU (6) 로부터의 라인 세그먼트들에 의해 표현된 커브의 부분들을 세분하기 위해, 제 2 테셀레이션 스테이지를 수행할 수도 있다. 또 다른 예로서, 전용 테셀레이션 하드웨어 (38) 는, 커브의 부분을 더 정확하게 나타내는 부가적인 라인 세그먼트들로, CPU (6) 로부터의 라인 세그먼트들에 의해 표현된 커브의 부분들을 세분하기 위해, 제 2 테셀레이션 스테이지를 수행할 수도 있다. 어느 경우에서든지, 제 2 테셀레이션 스테이지는, 더 상세한 라인 세그먼트들 (또는 서브-세그먼트들) 의 제 2 세트로 세분되는, CPU (6) 에 의해 생성되는 라인 세그먼트들의 각각에 의해 표현된 커브의 부분을 초래한다. 쉐이더 (30, 32, 또는 36) 또는 테셀레이션 하드웨어 (38) 는 본래의 커브를 부가적인 라인 세그먼트들로 테셀레이팅한다. 즉, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는 CPU (6) 에 의해 생성된 라인 세그먼트들을 부가적인 라인 세그먼트들로 분할하지 않지만, 소프트웨어 애플리케이션 (20) 에 의해 정의된 실제 커브를 분할한다. 이러한 방식으로, 제 1 테셀레이션 스테이지 이후 하나만의 라인 세그먼트에 의해 표현되었던 커브의 각각의 부분은 제 2 테셀레이션 스테이지 이후 2개 이상의 라인 세그먼트에 의해 표현된다. 부가적인 라인 세그먼트들은 커브의 더 양호한 표현, 예를 들어, 커브의 더 높은 해상도 표현을 초래한다.
쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, 변환 동안 수행된 스케일링의 양에 기초하여 제 2 테셀레이션 스테이지를 수행할 수도 있다. 특히, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 이 라인 세그먼트들의 각각에 의해 표현된 커브의 부분을 테셀레이팅하는 부가적인 라인 세그먼트들의 수는 스케일 팩터의 함수이다. 스케일 팩터는, 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로의 버텍스 포인트들의 변환 동안 발생하였던 스케일링의 양의 근사화이다. CPU (6) 는 스케일 팩터를 계산하며, 제 2 테셀레이션 스테이지에 대한 부가적인 라인 세그먼트들의 수를 결정할 시에 사용하기 위해 GPU (10) 의 하나 이상의 컴포넌트들에 그 스케일 팩터를 제공할 수도 있다. CPU (6) 는 임의의 다양한 서로 다른 기술들을 사용하여 스케일 팩터를 계산할 수도 있다. 그 기술들은 스케일 팩터에 대해 상이한 값들을 초래할 수도 있지만, 일반적으로, 모든 결과적인 값들은 변환 동안 수행된 스케일링의 양을 나타낸다. CPU (6) 는 변환 매트릭스를 사용하여 스케일 팩터를 계산할 수도 있다. 예를 들어, CPU (6) 는, Scale_x 및 Scale_y, 즉, 좌표 공간들의 변환 동안 사용된 스케일링 변수들의 승산으로서 스케일 팩터를 계산할 수도 있다. 또 다른 예에서, CPU (6) 는 Scale_x 및 Scale_y 의 최대값으로서 스케일링 팩터를 계산할 수도 있다. 3D의 경우, CPU (6) 는 뷰포트 스케일 팩터 및/또는 변환 매트릭스에 의해 스케일 팩터를 계산할 수도 있다.
쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, 스케일 팩터가 증가함에 따라 더 많은 부가적인 라인 세그먼트들로 라인 세그먼트들에 의해 표현된 커브의 부분을 세분한다. 따라서, 커브의 각각의 부분을 테셀레이팅하기 위한 부가적인 라인 세그먼트들 (또는, 서브-세그먼트들) 의 수 M 은, 스케일 팩터의 함수로서 계산될 수도 있다. 스케일 팩터의 함수로서 커브의 부분을 세분하는 것은 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 가, 커브가 많이 스케일링되는 경우 커브의 더 많은 세부사항을 보존하게 하지만, 커브가 스케일링되지 않거나 가볍게만 스케일링될 경우 커브의 더 적은 세부사항을 허용한다. 이러한 방식으로, 본 개시물에서 설명된 멀티-스테이지 테셀레이션 기술들은, 그래픽 이미지의 해상도 요건에 적응하는 동적 테셀레이션을 허용한다. 고해상도 (예를 들어, 큰 스케일링) 가 필요할 경우 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는 커브를 더 많이 테셀레이팅하고, 고해상도 (예를 들어, 거의 없거나 없는 스케일링) 가 불필요할 경우 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는 커브를 더 적게 테셀레이팅하며, GPU 프로세싱 리소스들이 절약된다. 따라서, 품질을 보장하기 위해 커브를 오버-테셀레이팅하는 것 대신에, 본 개시물의 기술들은 스케일링에 기초하여 필요에 따라 부가적인 라인 세그먼트들을 생성한다. 따라서, 여분의 라인 세그먼트들이 그래픽 파이프라인을 통해 전송되지 않으며, 그에 의해, 컴퓨팅 리소스들을 더 효율적인 방식으로 이용함으로써 파이프라인 성능 및 전력 소비를 개선시킨다.
커브의 각각의 부분을 테셀레이팅할 부가적인 라인 세그먼트들 또는 서브-세그먼트들의 수는, 글로벌 상수로서 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 로 로딩될 수도 있다. 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, CPU (6) 에 의해 제공된 라인 세그먼트들 중 하나에 의해 표현된 커브의 부분들을 M 개의 부가적인 라인 세그먼트들로 테셀레이팅한다. 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 에 의해 생성된 M 개의 부가적인 라인 세그먼트들은 본래의 커브의 추가적인 테셀레이션을 나타낸다. 따라서, CPU (6) 에 의해 생성된 단일 라인 세그먼트로 커브의 부분을 나타내는 것 대신에, 커브의 부분은 M 개의 라인 세그먼트들에 의해 표현된다. 또한, M 개의 서브-세그먼트들은, CPU (6) 에 의해 제공된 라인 세그먼트들의 테셀레이션들이 아닌 본래의 커브의 테셀레이션을 나타낸다. 이러한 방식으로, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, CPU (6) 에 의해 제공된 라인 세그먼트들을 추가적인 근사시키는 것 대신에 커브를 추가적으로 근사시킨다.
상기 수학식들 (1) 및 (2) 에 의해 정의된 타원형 아크 커브에 관해, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는 CPU (6) 로부터의 라인 세그먼트들 중 하나에 의해 표현된 커브의 부분을 부가적인 라인 세그먼트들로 분할할 수도 있다. 예를 들어, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, θ0=0 에 위치된 버텍스로부터 θ1=π/4 에 위치된 버텍스까지의 라인 세그먼트에 대응하는 커브의 부분을 M 개의 부가적인 라인 세그먼트들로 분할할 수도 있다. 예를 들어, M=4 이면, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, θ0=0 에 위치된 버텍스로부터 θ1=π/4 에 위치된 버텍스까지의 커브의 부분을 4개의 부가적인 라인 세그먼트들로 추가적으로 테셀레이팅한다. 특히, 이러한 예에서, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 는, θ00=θ0=0, θ01=π/16, θ02=π/8, θ03=3π/16, θ04=θ1=π/4 에 위치된 버텍스 포인트들을 연결시키는 4개의 부가적인 라인 세그먼트들을 생성할 수도 있다. 4개의 부가적인 라인 세그먼트들의 버텍스 포인트들은, 상기 수학식 (4) 및 (5) 에서 제공된 바와 같이 변환 이후 타원형 커브의 수학적인 표현을 사용하여 계산될 수도 있다.
GPU (10) 는, 완전한 병렬로 CPU (6) 에 의해 유사한 방식으로 생성된 다른 7개의 라인 세그먼트들 (44) 에 의해 표현된 커브의 다른 부분들을 테셀레이팅할 수도 있다. 따라서, GPU (10) 는, 커브의 다수의 부분들에 대해 제 2 테셀레이션 스테이지를 동시에 수행한다. 이러한 방식으로, 컴퓨팅 디바이스 (2) 는, 완전한 병렬로 CPU (6) 에 의해 생성된 라인 세그먼트들 중 다른 라인 세그먼트들에 의해 표현된 커브의 부분들에 대해 제 2 테셀레이션 스테이지를 수행하기 위해 GPU (10) 의 병렬 구조를 이용할 수도 있다. 그렇게 행하는 것은 커브의 테셀레이션의 GPU 가속을 초래하며, 그에 의해, 렌더링 성능을 개선시킨다.
일 예시에서, 지오메트리 쉐이더 (32) 는 커브의 부분들의 제 2 테셀레이션 스테이지를 수행할 수도 있다. 상술된 바와 같이, 지오메트리 쉐이더 (32) 는 개별적인 버텍스 대신에 한번에 다수의 버텍스 포인트들 (예를 들어, 프리미티브들) 에 대해 동작한다. 그로서, 지오메트리 쉐이더 (32) 는 다수의 버텍스 포인트들을 출력할 수도 있으며, 그에 의해, 커브의 부분을 단일 스텝에서 M 개의 부가적인 라인 세그먼트들로 테셀레이팅한다. 몇몇 경우, 지오메트리 쉐이더 (32) 는, 커브의 각각의 상이한 부분이 상이한 수의 부가적인 라인 세그먼트들로 분할되도록 구성될 수도 있으며, 따라서, 커브의 부분의 형상에 기초하여 커브의 부분을 동적으로 테셀레이팅할 수도 있다. 지오메트리 쉐이더 (32) 를 사용한 부가적인 라인 세그먼트들로의 커브의 부분의 테셀레이션은 도 3을 참조하여 더 상세히 설명된다.
또 다른 예시에서, 버텍스 쉐이더 (30) 는 커브의 부분들의 제 2 테셀레이션 스테이지를 수행할 수도 있다. 예를 들어, 이것은, GPU (10) 가 지오메트리 쉐이더 (32) 를 포함하지 않는 경우일 수도 있다. 상술된 바와 같이, 버텍스 쉐이더 (30) 는 한번에 단일의 버텍스에 대해 동작하며, 따라서 통상적으로, 부가적인 버텍스들을 생성하지 못할 수 있다. 그러나, 버텍스 쉐이더 (30) 는, 제 2 테셀레이션 스테이지를 수행하기 위해 하나 이상의 커스텀 버텍스 속성들을 입력하도록 구성될 수도 있다. 특히, 버텍스 쉐이더 (30) 는, 버텍스를 정의하기 위해 입력된 버텍스 속성들이 라인 세그먼트의 단일 버텍스 대신에 라인 세그먼트들을 실제로 정의하도록 구성될 수도 있다. 이러한 방식으로, 버텍스 쉐이더 (30) 는, 단일 버텍스를 실제로 나타내지 않기 때문에 "가상 버텍스" 를 입력하는 것으로 뷰잉될 수도 있다. 예를 들어, 버텍스 쉐이더 (30) 는, 라인 세그먼트의 시작 버텍스 속성 및 종료 버텍스 속성을 포함하는 버텍스 속성들을 입력하도록 구성될 수도 있다. 시작 버텍스 속성은 라인 세그먼트가 시작하는 버텍스를 나타내고, 종료 버텍스 속성은 라인 세그먼트가 종료하는 버텍스를 나타낸다. 버텍스 쉐이더 (30) 는, 커브의 부분을 부가적인 라인 세그먼트들로 테셀레이팅하기 위해 시작 버텍스 속성 및 종료 버텍스 속성에 대해 동작한다. 버텍스 쉐이더 (30) 를 사용한 부가적인 라인 세그먼트들로의 커브의 부분의 테셀레이션의 일 예는, 도 4를 참조하여 더 상세히 설명된다.
또 다른 예시에서, 픽셀 쉐이더 (36) 는 커브의 부분들의 제 2 테셀레이션 스테이지를 수행할 수도 있다. 버텍스 쉐이더 (30) 와 유사하게, 픽셀 쉐이더 (36) 는 한번에 단일의 픽셀에 대해 동작한다. 따라서, 픽셀 쉐이더 (36) 는, 라인 세그먼트의 단일의 픽셀 대신에 라인 세그먼트를 정의하는 하나 이상의 커스텀 픽셀 속성들을 입력하도록 구성된다. 픽셀 쉐이더 (36) 는, 부가적인 라인 세그먼트들을 추가적으로 정의하는 부가적인 픽셀 속성들을 생성한다.
또 다른 예시에서, 테셀레이션 하드웨어 (38) 는 커브의 부분들의 제 2 테셀레이션 스테이지를 수행할 수도 있다. 예를 들어, 테셀레이션 하드웨어 (38) 는, 제 2 테셀레이션 스테이지를 수행하기 위해 하나 이상의 승산 및 누산 (MAC) 동작 유닛들을 포함할 수도 있다. 일 예시에서, 테셀레이션 하드웨어 (38) 는, 더 상세히 후술될 바와 같이 상이한 차수의 다항식들을 계산하도록 구성가능한 MAC 동작 유닛들의 파이프라인화된 어레이로 형성될 수도 있다. 이러한 경우, 테셀레이션 하드웨어 (38) 는, CPU (6) 로부터 버텍스 포인트들을 생성할 커브를 따른 적어도 하나의 위치 및 다항식 계수들을 입력한다. 예를 들어, 버텍스 포인트들을 생성할 커브를 따른 위치들은, 베지어 커브들의 경우에는 t의 값일 수도 있고, 타원형 곡선 커브들의 경우에는 θ의 값일 수도 있다. 테셀레이션 하드웨어 (38) 의 MAC 동작 유닛들은, 특정한 위치들에서 하나 이상의 좌표들 또는 버텍스 포인트들을 생성하기 위해 다항식 계수들에 대해 동작한다. 테셀레이션 하드웨어 (38) 의 동작은, 상세히 후술되는 테셀레이션 하드웨어 회로 (72) 의 동작과 실질적으로 유사하다.
상술된 멀티-스테이지 테셀레이션이 CPU (6) 와 GPU (10) 사이에 분포되지만, 멀티-스테이지 테셀레이션은 GPU (10) 내에서 수행될 수도 있고/있거나, GPU (10) 와 전용 테셀레이션 하드웨어 (예를 들어, 도 7에 도시된 테셀레이션 하드웨어 (72)) 사이에 분포될 수도 있다. 따라서, CPU (6) 는 커브의 임의의 테셀레이션을 수행하지 않는다. 대신, GPU (10) 내의 제 1 컴퓨팅 유닛은, 라인 세그먼트들로 커브를 분할하기 위해 제 1 테셀레이션 스테이지를 수행하고, GPU (10) 내의 제 2 컴퓨팅 유닛은, 부가적인 라인 세그먼트들로 커브를 추가적으로 분할하기 위해 제 2 테셀레이션 스테이지를 수행한다. 예를 들어, 테셀레이션은, 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32), 픽셀 쉐이더 (36), 및 테셀레이션 하드웨어 (38) 의 조합 사이, 또는 이들 컴포넌트들과 전용 테셀레이션 하드웨어 (예를 들어, 테셀레이션 하드웨어 (72) 사이에서 분할될 수도 있다.
멀티-스테이지 테셀레이션 기술이 2개의 스테이지들을 포함하는 것으로 상술되지만, 멀티-스테이지 테셀레이션 기술은 3개 이상의 스테이지들을 포함할 수도 있다. 예를 들어, 멀티-스테이지 테셀레이션은, 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅할 수도 있는 제 1 테셀레이션 스테이지, 라인 세그먼트들의 제 1 세트의 각각에 의해 표현된 커브의 부분을 라인 세그먼트들의 제 2 세트로 테셀레이팅하는 제 2 테셀레이션 스테이지, 및 라인 세그먼트들의 제 2 세트의 각각에 의해 표현된 커브의 부분을 부가적인 라인 세그먼트들로 테셀레이팅하는 제 3 테셀레이션 스테이지를 포함할 수도 있다. 임의의 수의 테셀레이션 스테이지들이 수행될 수도 있다. 테셀레이션 스테이지들은, CPU (6), 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32), 픽셀 쉐이더 (36) 및/또는 테셀레이션 하드웨어 (38, 72 (도 7)) 의 임의의 컴포넌트들 사이에서 분포될 수도 있다.
본 개시물에서 설명된 기술들이 다양한 서로 다른 아키텍처로 구현될 수도 있으므로, 도 2에 도시된 아키텍처는 단지 예시일 뿐이다. 예를 들어, GPU (10) 는, 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32) 및 픽셀 쉐이더 (36) 에 기인된 기능들을 수행할 수도 있는 단일 쉐이더 코어를 이용할 수도 있다. 예를 들어, 단일 쉐이더 코어는, 그래픽 동작이 존재하는 파이프라인의 스테이지에 기초하여 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32), 및 픽셀 쉐이더 (36) 로서 기능하도록 커맨드 디코더 (28) 에 의해 구성될 수도 있다. 또 다른 예로서, 테셀레이션 하드웨어 (38) 는 GPU (10) 내에 위치되지 않을 수도 있지만, 대신, 컴퓨팅 디바이스 (2) (도 1) 의 별개의 컴포넌트일 수도 있고, 도 7에 도시된 바와 같이 버스 (18) 를 통해 GPU (10) 에 커플링될 수도 있다. 또한, 도 1에 도시된 특성은, 하드웨어 및/또는 소프트웨어 컴포넌트들의 임의의 적절한 조합에 의해 실현될 수도 있다.
도 3a 내지 도 3d는 커브 (40) 의 예시적인 2-스테이지 테셀레이션을 도시한 다이어그램이다. 도 3a는 소프트웨어 애플리케이션 (20) (도 2) 에 의해 정의된 바와 같이 커브 (40) 를 도시한다. 커브 (40) 는 4개의 베지어 커브 세그먼트들, 즉, 포인트 A로부터 포인트 B까지의 제 1 베지어 커브 세그먼트 (42A), 포인트 B로부터 포인트 C까지의 제 2 베지어 커브 세그먼트 (42B), 포인트 C로부터 포인트 D까지의 제 3 베지어 커브 세그먼트 (42C), 및 포인트 D로부터 포인트 A까지의 제 4 베지어 커브 세그먼트 (42D) 의 시퀀스로서 정의된다. 디스플레이 (16) 에 커브 (40) 를 렌더링하기 위해, CPU (6) 및/또는 GPU (10) 는, 본 개시물에서 설명된 멀티-스테이지 테셀레이션 기술들을 사용하여 라인 세그먼트들로 커브 (40) 를 테셀레이팅한다. 상술된 바와 같이, 몇몇 양태에서, CPU (6) 의 테셀레이션 모듈 (22) 은 한번에 커브 (40) 의 부분을 테셀레이팅할 수도 있다. 도 3b 내지 도 3d에 도시된 테셀레이션의 예에서, CPU (6) 및/또는 GPU (10) 는 베지어 커브 세그먼트 (42A) 를 테셀레이팅한다. CPU (6) 및/또는 GPU (10) 는 베지어 커브 세그먼트들 (42B 내지 42D) 을 유사한 방식으로 테셀레이팅할 수도 있다.
도 3b는 포인트 A와 포인트 B 사이에서 베지어 커브 세그먼트 (42A) 에 의해 정의된 커브 (40) 의 부분을 도시한다. 베지어 커브 세그먼트 (42A) 는, 파라미터 표현을 사용하여 정의된 다항식 커브로서 소프트웨어 애플리케이션 (20) 에 의해 정의될 수도 있다. 특히, 베지어 커브 세그먼트 (42A) 는 형식 (x(t), y(t)) 의 포인트들의 세트로서 표현될 수도 있으며, 여기서, x(t) 및 y(t) 는 t의 다항식들이고, t는 0으로부터 1까지 계속 변한다. 도 3에 도시된 베지어 커브 세그먼트 (42A) 는,
Figure pct00006
Figure pct00007
에 의해 오브젝트 좌표 공간에서 표현될 수도 있는 3차 베지어 커브 세그먼트이며, 여기서, (xs, ys) 는 베지어 커브 세그먼트 (42A) 의 시작 포인트이고, (xe, ye) 는 베지어 커브 세그먼트 (42A) 의 종료 포인트이며, (xc1, yc1) 및 (xc2, yc2) 는 2개의 내부 제어 포인트들이다.
제 1 컴퓨팅 유닛은 복수의 라인 세그먼트들 (44A 내지 44G) (총괄적으로, "라인 세그먼트들 (44)") 로 베지어 커브 세그먼트 (42A) (즉, 포인트 A와 포인트 B 사이의 커브 (40) 의 부분) 를 테셀레이팅한다. 도 3c는 제 1 컴퓨팅 유닛에 의한 테셀레이션 이후의 베지어 커브 세그먼트 (42A) 를 도시한다. 일 예시에서, 제 1 테셀레이션 스테이지를 수행하는 제 1 컴퓨팅 유닛은 CPU (6) 의 테셀레이션 모듈 (22) 일 수도 있다. 다른 예시에서, 제 1 컴퓨팅 유닛은 쉐이더들 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 중 하나일 수도 있다. 도 3c에 도시된 예에서, 제 1 컴퓨팅 유닛은 베지어 커브 세그먼트 (42A) 를 7개의 라인 세그먼트들 (44) 로 테셀레이팅한다. 특히, 제 1 컴퓨팅 유닛은 상기 수학식 (6) 및 (7) 을 사용하여 베지어 커브 세그먼트 (42A) 를 따라 버텍스 포인트들을 계산한다.
제 1 컴퓨팅 유닛이 테셀레이션 모듈 (22) 일 경우, 테셀레이션 로드 제어기 (24) 는, CPU (6) 의 로드, GPU (10) 의 로드 또는 이들의 조합의 함수로서 특정한 수의 라인 세그먼트들로 커브를 테셀레이팅하도록 테셀레이션 모듈 (22) 을 구성할 수도 있다. 예를 들어, 테셀레이션 로드 제어기 (24) 는, CPU (6) 의 로드가 임계값 이하일 경우 테셀레이션 모듈 (22) 에 의해 생성된 라인 세그먼트들의 수를 증가시킬 수도 있고, CPU (6) 의 로드가 임계값을 초과할 경우 라인 세그먼트들의 수를 감소시킬 수도 있다. 도 3c에 도시된 예에서, 테셀레이션 로드 제어기 (24) 는, 7개의 라인 세그먼트들 (44) 로 베지어 커브 세그먼트 (42A) 를 테셀레이팅하도록 테셀레이션 모듈 (22) 을 구성한다. 테셀레이션 로드 제어기 (24) 는, 상술된 테셀레이션 로드 밸런싱 기술들을 사용하여 더 많은 라인 세그먼트들 또는 더 적은 라인 세그먼트들로 베지어 커브 세그먼트 (42A) 를 테셀레이팅하도록 테셀레이션 모듈 (22) 을 구성할 수도 있다. 도 3c의 예에서, 라인 세그먼트들 (44), 즉, 베지어 커브 세그먼트 (42A) 는 커브의 형상을 코오스하게 나타낸다.
베지어 커브 세그먼트 (42A) 를 라인 세그먼트들 (44) 로 테셀레이팅하기 위해, 제 1 컴퓨팅 유닛은, 버텍스 포인트 A0 와 동일한 시작 포인트 (xs, ys) 와 버텍스 포인트 A7 과 동일한 종료 포인트 (xe, ye) 사이의 하나 이상의 버텍스 포인트들을 계산한다. 그것을 행하기 위해, 제 1 컴퓨팅 유닛은, A0 (즉, A) 와 A7 (즉, B) 사이의 버텍스 포인트들을 계산하기 위해 베지어 커브 세그먼트 (42A) 를 나타내는 수학식들, 즉 수학식들 (6) 및 (7) 을 사용할 수도 있다. 도 3c에 도시된 예에서, 제 1 컴퓨팅 유닛은 버텍스 포인트들 (A1 내지 A6) 을 계산한다. A0 및 A7 은, 각각, 그들이 시작 포인트 (xs, ys) 및 종료 포인트 (xe, ye) 와 동일한 것으로 이미 알려져 있다.
그 후, 제 1 컴퓨팅 유닛은, 생성된 버텍스 포인트들 사이의 복수의 라인 세그먼트들 (44) 로서 베지어 커브 세그먼트 (42A) 를 나타낸다. 특히, 제 1 컴퓨팅 유닛은, (도 3a 및 도 3b의 포인트 A와 동일한) 버텍스 포인트 A0 로부터 버텍스 포인트 A1 까지의 라인 세그먼트 (44A), 버텍스 포인트 A1 으로부터 버텍스 포인트 A2 까지의 라인 세그먼트 (44B), 버텍스 포인트 A2 로부터 버텍스 포인트 A3 까지의 라인 세그먼트 (44C) 등으로서 베지어 커브 세그먼트 (42A) 를 나타낸다.
도 3c에 도시된 예에서, 제 1 컴퓨팅 유닛은 베지어 커브 세그먼트 (44A) 를 라인 세그먼트들 (44) 로 균등하게 분할한다. 즉, 제 1 컴퓨팅 유닛은 일정한 스텝 사이즈만큼 t를 증분적으로 증가시킨다. 그러나, 몇몇 예시에서, 제 1 컴퓨팅 유닛은 커브의 형상에 기초하여, 즉, 각각의 라인 세그먼트에 대해 상이한 스텝 사이즈로 베지어 커브 세그먼트 (44A) 를 테셀레이팅하기 위해 적응성 테셀레이션 기술들을 사용할 수도 있다. 예를 들어, 제 1 컴퓨팅 유닛은, (예를 들어, 이러한 예에서는 버텍스 포인트 A5 와 A7 사이의) 커브의 곡률이 더 클 경우 더 작은 스텝 사이즈로 t를 증분시킬 수도 있고, (예를 들어, 포인트들 A0 와 A5 사이의) 커브의 곡률이 더 작을 경우 더 큰 스텝 사이즈로 t를 증분시킨다.
임의의 추가적인 테셀레이션없이 라인 세그먼트들 (44) 을 렌더링하는 것은, 특히 버텍스 포인트 A5 와 A7 사이에서, 베지어 커브 (42A) 의 몇몇 부분들에 대해 불량한 이미지 품질을 초래할 수도 있다. 특히, 이것은, 커브가 고해상도로 줌인될 경우, 예를 들어, GPU (10) 에 의한 디바이스 좌표 공간으로의 변환 동안 큰 스케일 팩터의 적용시에 참이다. 따라서, 제 2 컴퓨팅 유닛은 베지어 커브 세그먼트 (42A) 를 부가적인 라인 세그먼트들로 테셀레이팅하기 위해 제 2 테셀레이션 스테이지를 수행한다. 예를 들어, 제 2 컴퓨팅 유닛은 쉐이더들 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 중 하나일 수도 있다. 더 상세히 후술될 바와 같이, 제 2 테셀레이션 스테이지는, 라인 세그먼트들 (44) 을 실제로 테셀레이팅하는 것 대신에 라인 세그먼트들 (44) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분들을 테셀레이팅한다. 부가적인 라인 세그먼트들로의 베지어 커브 세그먼트 (42A) 의 테셀레이션은, 예시의 목적을 위해 라인 세그먼트 (44A) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분의 테셀레이션에 대해 설명될 것이다. 그러나, 제 2 컴퓨팅 유닛은 완전한 병렬로 라인 세그먼트들 (44B 내지 44G) 를 유사한 방식으로 테셀레이팅할 수도 있다.
제 2 테셀레이션 스테이지를 수행하기 전에, GPU (10) 또는 CPU (6) 의 버텍스 쉐이더 (30) 는 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 커브를 변환한다. 예를 들어, 버텍스 쉐이더 (30) 또는 CPU (6) 는, 각각의 라인 세그먼트의 각각의 버텍스 포인트를 변환하는 것 대신에, 상기 수학식 (3) 을 사용하여 커브를 정의하는 포인트들을 변환할 수도 있다. 버텍스 쉐이더 (30) 또는 CPU (6) 는 시작 포인트 (xs, ys), 종료 포인트 (xe, ye) 및 내부 제어 포인트들 (xc1, yc1) 및 (xc2, yc2) 를 디바이스 좌표 공간 (x's, y's), (x'e, y'e), (x'c1, y'c1) 및 (x'c2, y'c2) 로 변환할 수도 있다. 이러한 방식으로, 베지어 커브 (42A) 의 부분은 디바이스 좌표 공간으로 변환되며, 다음과 같이 정의될 수 있다.
Figure pct00008
Figure pct00009
변환 이후, 제 2 컴퓨팅 유닛은, 라인 세그먼트 (44A) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분 (즉, A0 으로부터 A1 까지의 베지어 커브 세그먼트 (42A) 의 부분) 를 부가적인 라인 세그먼트들로 테셀레이팅하기 위해 제 2 테셀레이션 스테이지를 수행한다. 라인 세그먼트 (44A) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분은, 버텍스 포인트들 A0 와 A1 사이의 베지어 커브 세그먼트 (42A) 의 부분이다. 도 3d에 도시된 예에서, 제 2 컴퓨팅 유닛은 버텍스 포인트들 A0 와 A1 사이의 베지어 커브 세그먼트 (42A) 의 부분을 4개의 라인 세그먼트들로 테셀레이팅한다. 특히, 제 2 컴퓨팅 유닛은, 버텍스 포인트들 A0 와 A1 사이의 버텍스 포인트들 A01, A02 및 A03 를 생성한다. 제 2 테셀레이션 스테이지는, 단지 단일의 라인 세그먼트 대신 4개의 라인 세그먼트들에 의해 표현될 버텍스 포인트들 A0 와 A1 사이의 베지어 커브 세그먼트 (42A) 의 부분을 초래하며, 따라서, 커브의 부분에 대해 더 상세히 제공한다. 도 3d에 도시된 바와 같이, 제 2 테셀레이션 스테이지 동안 생성된 부가적인 라인 세그먼트들은, 특히 버텍스 포인트들 A5 와 A7 사이의 커브의 더 양호한 표현을 제공한다.
일 양태에서, 제 2 컴퓨팅 유닛이 라인 세그먼트들의 각각에 의해 표현된 커브의 부분을 테셀레이팅하는 부가적인 라인 세그먼트들의 수는 스케일 팩터의 함수일 수도 있다. 제 2 컴퓨팅 유닛은, 스케일 팩터가 증가함에 따라, 라인 세그먼트들 (44) 에 의해 표현된 커브의 부분을 더 많은 부가적인 라인 세그먼트들로 세분한다. 스케일 팩터의 함수로서 커브의 부분을 세분하는 것은, 제 2 컴퓨팅 유닛이 커브가 많이 스케일링될 경우 커브의 더 많은 세부사항을 보존하게 하지만, 커브가 스케일링되지 않거나 가볍게만 스케일링될 경우 커브의 더 적은 세부사항을 허용한다.
기술들은, 수학식들 (1) 및 (2) 에 따라 정의된 타원형 아크 커브들 또는 시작 포인트 (xs, ys), 종료 포인트 (xe, ye) 및 제어 포인트 (xc, yc) 를 포함하는 이차 베지어 커브들과 같이 OpenVG 에서 정의된 다른 커브들과 유사한 방식으로 적용될 수도 있으며, 다음과 같이 오브젝트 좌표 공간에서 정의될 수 있다.
Figure pct00010
Figure pct00011
또한, 기술들은, 임의의 확장을 통해 OpenVG 표준에 부가된 임의의 커브 정의들로 이용될 수도 있다. 유사하게, 기술들은 다른 그래픽 생성 표준들을 사용하여 정의된 커브들을 테셀레이팅하는데 사용될 수도 있다.
도 4a 내지 도 4d는 커브의 멀티-스테이지 테셀레이션의 예를 도시한 다이어그램들이다. 도 4a는 포인트 A와 포인트 B 사이의 베지어 커브 세그먼트 (42A) 를 도시한다. 도 3에 관해 상술된 바와 같이, 베지어 커브 세그먼트 (42A) 는 상기 수학식들 (6) 및 (7) 에 의해 오브젝트 공간에 표현될 수도 있다.
제 1 컴퓨팅 유닛은 베지어 커브 세그먼트 (42A) (즉, 포인트 A와 포인트 B 사이의 커브 (40) 의 부분) 를 복수의 라인 세그먼트들 (44A 내지 44G) (총괄적으로, "라인 세그먼트들 (44)") 로 테셀레이팅한다. 일 예시에서, 제 1 테셀레이션 스테이지를 수행하는 제 1 컴퓨팅 유닛은 CPU (6) 의 테셀레이션 모듈 (22) 일 수도 있다. 다른 예시에서, 제 1 컴퓨팅 유닛은 쉐이더들 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 중 하나일 수도 있다. 도 4b는 제 1 컴퓨팅 유닛에 의한 테셀레이션 이후의 베지어 커브 세그먼트 (42A) 를 도시한다. 도 4b에 도시된 예에서, 제 1 컴퓨팅 유닛은, 이웃한 버텍스 포인트들과 버텍스 포인트들의 각각을 연결시키는 7개의 라인 세그먼트들 (44A 내지 44G) 로 베지어 커브 세그먼트 (42A) 를 테셀레이팅하기 위해 버텍스 포인트들 (A0 내지 A7) 을 계산한다.
도 3a 내지 도 3d에서 상술된 바와 같이, 임의의 추가적인 테셀레이션 없이 라인 세그먼트들 (44) 을 렌더링하는 것은, 특히 버텍스 포인트들 A5 와 A7 사이의 베지어 커브 (42A) 의 적어도 몇몇 부분들에 대해 불량한 이미지 품질을 초래할 수도 있다. 따라서, 제 2 컴퓨팅 디바이스는 베지어 커브 세그먼트 (42A) 를 부가적인 라인 세그먼트들로 테셀레이팅하기 위해 제 2 테셀레이션 스테이지를 수행한다. 예시의 목적을 위해, 베지어 커브 세그먼트 (42A) 의 부가적인 라인 세그먼트들로의 테셀레이션은, 라인 세그먼트 (44A) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분의 테셀레이션에 관해 설명될 것이다. 그러나, 제 2 컴퓨팅 디바이스는, 라인 세그먼트들 (44B 내지 44G) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분을 완전한 병렬로 유사한 방식으로 테셀레이팅할 수도 있다.
제 2 테셀레이션 스테이지를 수행하기 전에, 버텍스 쉐이더 (30) 또는 GPU (10) 또는 CPU (6) 의 몇몇 다른 컴포넌트는, 상기 수학식들 (10) 및 (11) 에 정의된 수학적 표현들을 생성하기 위해 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 베지어 커브 세그먼트 (42A) 를 변환한다. 디바이스 좌표 공간으로의 변환 이후, 제 2 컴퓨팅 유닛은, 라인 세그먼트 (44A) 에 의해 표현된 베지어 커브 세그먼트 (42A) 의 부분 (즉, A0 로부터 A1 까지의 베지어 커브 세그먼트 (42A) 의 부분) 를 부가적인 라인 세그먼트들로 테셀레이팅하기 위해 제 2 테셀레이션 스테이지를 수행한다.
예를 들어, 버텍스 쉐이더 (30) 의 경우, 버텍스 쉐이더 (30) 는 라인 세그먼트의 단일 버텍스 대신에 라인 세그먼트를 실제로 정의하는 버텍스 속성들을 입력하도록 구성될 수도 있다. 예를 들어, 버텍스 쉐이더 (30) 는, 라인 세그먼트가 각각 시작 및 종료하는 버텍스를 나타내는 라인 세그먼트의 시작 버텍스 속성 (예를 들어, A0) 및 종료 버텍스 속성 (예를 들어, A1) 을 포함하는 버텍스 속성들을 입력하도록 구성될 수도 있다. 버텍스 쉐이더 (30) 는, 버텍스 A0 와 A1 사이의 적어도 하나의 부가적인 버텍스를 계산할 수도 있다. 상술된 바와 같이, 각각의 버텍스를 정의하는데 사용될 수 있는 버텍스 속성들의 수는, 속성들의 특정한 최대 수에 제한될 수도 있다. 따라서, 버텍스 쉐이더 (30) 는, 단일 패스 (pass) 에서 부가적인 버텍스 포인트들의 제한된 수를 단지 계산할 수 있을 수도 있다. 도 4c는 제 2 테셀레이션 스테이지 이후의 베지어 커브 세그먼트 (42A) 를 도시한다. 도 4c에 도시된 예에서, 버텍스 쉐이더 (30) 는 새로운 버텍스 포인트 A01 를 나타내는 하나의 부가적인 버텍스 속성을 단지 계산할 수 있을 수도 있다. 따라서, 버텍스 쉐이더 (30) 는, 라인 세그먼트들의 하나의 부가적인 세트로 베지어 커브 (42A) 의 부분을 단지 테셀레이팅할 수도 있다. 그러나, 다른 예시에서, 버텍스 쉐이더 (30) 는 패스 당 2개 이상의 부가적인 버텍스 속성을 계산할 수도 있다.
몇몇 경우에서, 이용가능한 버텍스 속성들의 최대 수는 베지어 커브 세그먼트 (42A) 의 부분을 완전히 테셀레이팅하는데 충분할 수도 있다. 그러나, 이용가능한 버텍스 속성들의 최대 수가 불충분하면, 버텍스 쉐이더 (30) 는 귀납적으로, 즉, 제 3 테셀레이션 스테이지를 수행함으로써 더 많은 부가적인 라인 세그먼트들을 계산할 수도 있다. 즉, 버텍스 쉐이더 (30) 는 2개 이상의 테셀레이션 스테이지, 즉, 제 2 테셀레이션 스테이지에 후속하여 제 3 테셀레이션 스테이지를 귀납적으로 수행할 수도 있다. 예를 들어, 제 2 테셀레이션 스테이지 이후, 버텍스 쉐이더 (30) 는, 제 2 테셀레이션 스테이지 동안 생성된 라인 세그먼트를 나타내는 시작 버텍스 속성 A0 및 종료 버텍스 속성 A01 을 포함하는 버텍스 속성들의 새로운 세트를 입력할 수도 있다. 버텍스 쉐이더 (30) 는, 제 3 테셀레이션 스테이지 동안 버텍스 A0 와 A01 사이의 적어도 하나의 부가적인 버텍스를 계산한다. 도 4d는 버텍스 쉐이더 (30) 에 의한 제 3 테셀레이션 스테이지 이후의 베지어 커브 세그먼트 (42A) 를 도시한다. 도 4d에 도시된 예에서, 버텍스 쉐이더 (30) 는, 현재, 하나의 라인 세그먼트 대신에 4개의 라인 세그먼트로 A0 와 A1 사이의 베지어 커브 (42A) 의 부분을 테셀레이팅한다. 이러한 방식으로, 버텍스 쉐이더 (30) 는, 특히, 버텍스 포인트 A5 와 A7 사이의 커브 (42A) 의 더 양호한 표현을 제공하는 부가적인 라인 세그먼트들로 커브의 부분을 귀납적으로 테셀레이팅할 수도 있다. 상술된 예에서 버텍스 쉐이더 (30) 가 제 2 및 제 3 테셀레이션 스테이지들을 수행하지만, GPU (10) 의 다른 컴퓨팅 유닛들이 제 2 및 제 3 테셀레이션 스테이지들을 수행할 수도 있다. 예를 들어, 제 2 및 제 3 테셀레이션 스테이지들은, 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32), 픽셀 쉐이더 (36) 및 테셀레이션 하드웨어 (38) 의 임의의 조합에 의해 수행될 수도 있다.
도 5는, 본 개시물에서 설명된 멀티-스테이지 테셀레이션 기술들에 따라 커브를 테셀레이팅하는 컴퓨팅 디바이스의 예시적인 동작을 도시한 흐름도이다. 컴퓨팅 디바이스 (2) 의 제 1 컴퓨팅 유닛은 제 1 라인 세그먼트들로 커브를 테셀레이팅한다 (50). 라인 세그먼트들의 제 1 세트를 생성하기 위해, 제 1 컴퓨팅 디바이스는 커브 상에 놓이는 하나 이상의 버텍스 포인트들을 계산한다. 예를 들어, 제 1 컴퓨팅 유닛은 커브의 수학적 표현, 예를 들어, 커브의 다항식 표현을 사용하여 하나 이상의 버텍스 포인트들을 생성할 수도 있다. 제 1 라인 세그먼트들은 이웃한 버텍스 포인트들에 버텍스 포인트들의 각각을 연결시킨다. 라인 세그먼트들의 각각은 커브의 부분을 나타낸다. 일 예에서, 제 1 컴퓨팅 유닛은 CPU (6) 의 테셀레이션 모듈 (22) 일 수도 있다. 이러한 경우, 테셀레이션 로드 제어기 (24) 는, CPU (6) 상의 프로세싱 로드 및/또는 GPU (10) 상의 프로세싱 로드에 기초하여 테셀레이션 모듈 (22) 에 의해 수행된 테셀레이션의 양을 제어할 수도 있다. 또 다른 예에서, 제 1 컴퓨팅 유닛은 GPU (10) 의 컴포넌트들 중 하나, 예를 들어, 쉐이더 (30, 32 또는 36) 또는 테셀레이션 하드웨어 (38) 중 하나일 수도 있다.
제 1 컴퓨팅 유닛은 라인 세그먼트들을 제 2 컴퓨팅 유닛에 제공한다 (52). 예를 들어, 제 1 컴퓨팅 유닛이 테셀레이션 모듈 (22) 일 경우, 테셀레이션 모듈 (22) 은, 라인 세그먼트들의 버텍스 포인트들을 사용하여 드로잉 프리미티브들의 리스트를 생성할 수도 있고, 그래픽 API (26) 및 GPU 드라이버 (21) 를 통해 GPU (10) 에 드로잉 프리미티브들을 제공할 수도 있다. 테셀레이션 모듈 (22) 은, 포인트들, 라인 스트립들, 라인 루프들, 별개의 라인들, 삼각형 스트립들, 삼각형 팬들, 별개의 삼각형들, 사변형 스트립들, 별개의 사변형들, 또는 다른 타입의 다각형들을 포함하는 다수의 드로잉 프리미티브들 중 임의의 드로잉 프리미티브를 생성할 수도 있다.
제 1 또는 제 2 컴퓨팅 유닛은, 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 커브를 변환한다 (54). 예를 들어, GPU (10) 의 버텍스 쉐이더 (30) 는 상기 수학식 (3) 을 사용하여 디바이스 좌표 공간으로 커브를 변환할 수도 있다. 변환은 커브 당 일회 계산될 수도 있다. 즉, 변환은, 경로를 통한 모든 버텍스 포인트에 대해 변환을 계산하는 것 대신에 커브를 정의하는데 사용되는 포인트들의 각각에서 계산될 수도 있다. 제 1 또는 제 2 컴퓨팅 유닛은, 변환에서 수행되는 스케일링의 양을 나타내는 스케일 팩터를 계산한다 (56). 스케일 팩터는, 변환에서 사용된 스케일링 변수들, 예를 들어, 수학식 (3) 의 Scale_x 및 Scale_y 에 기초하여 계산될 수도 있다.
제 2 컴퓨팅 유닛은 부가적인 라인 세그먼트들로 커브의 부분들을 테셀레이팅하기 위해 제 2 테셀레이션 스테이지를 수행한다 (58). 예를 들어, 제 2 컴퓨팅 유닛은, GPU (10) 의 컴포넌트들 중 하나일 수도 있다. 따라서, GPU (10) 는 제 1 컴퓨팅 유닛에 의해 계산된 각각의 라인 세그먼트의 버텍스 포인트들의 각각 사이의 부가적인 버텍스 포인트들을 계산한다. 부가적인 버텍스 포인트들은, 예를 들어, 변환 이후 디바이스 좌표 공간에서 커브의 수학적인 표현을 사용하여 계산될 수도 있다. 따라서, GPU (10) 는, 제 1 컴퓨팅 유닛에 의해 생성된 단일 라인 세그먼트 대신에, 복수의 라인 세그먼트들로 제 1 컴퓨팅 유닛에 의해 생성된 라인 세그먼트들에 의해 표현되는 커브의 부분들의 각각을 나타낸다. 이러한 방식으로, GPU (10) 에 의해 수행된 제 2 테셀레이션 스테이지는, 커브를 더 정확하게 표현하기 위해 커브의 부가적인 라인 세그먼트들을 생성한다. 몇몇 예시에서, 커브의 부분들에 대해 생성된 부가적인 라인 세그먼트들의 수는, 스케일 팩터가 증가함에 따라 더 많은 부가적인 라인 세그먼트들이 더 많은 세부사항을 보존하기 위해 계산되도록 하는 스케일 팩터의 함수일 수도 있다.
GPU (10) 는 하나 이상의 쉐이더들 (예를 들어, 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32) 또는 픽셀 쉐이더 (36) 를 사용하여 제 2 테셀레이션 스테이지를 수행할 수도 있다. GPU (10) 의 쉐이더들은 커브의 2개 이상의 부분을 병렬로 테셀레이팅할 수도 있다. 따라서, GPU (10) 는 커브의 다수의 부분들에 대해 제 2 테셀레이션 스테이지를 동시에 수행한다. 그렇게 하는 것은 커브의 테셀레이션의 GPU 가속을 초래하며, 그에 의해, 렌더링 성능을 개선시킨다. 다른 예시에서, GPU (10) 내의 테셀레이션 하드웨어 (38) 는 제 2 테셀레이션 스테이지를 수행할 수도 있다. 다른 예시에서, GPU (10) 에 외부인 테셀레이션 하드웨어, 예를 들어, 도 7의 테셀레이션 하드웨어 (72) 는 제 2 테셀레이션 스테이지를 수행할 수도 있다. 제 2 테셀레이션 스테이지를 수행한 이후, GPU (10) 는 테셀레이팅된 라인 세그먼트들을 사용하여 디스플레이에 커브를 렌더링한다 (59). 도 5의 흐름도가 2-스테이지 테셀레이션을 설명하였지만, 그 기술들은 3개 이상의 테셀레이션 스테이지들을 포함하도록 확장될 수도 있다.
도 6은, 테셀레이션을 수행하는 도 2의 버텍스 쉐이더 (30) 와 같은 쉐이더의 예시적인 동작을 도시한 흐름도이다. 커브를 부가적인 라인 세그먼트들로 테셀레이팅하기 위해 유사한 기술들이 픽셀 쉐이더 (36) 에 의해 이용될 수도 있다. 버텍스 쉐이더 (30) 는 라인 세그먼트를 정의하는 복수의 버텍스 속성들을 입력한다 (60). 예를 들어, 버텍스 쉐이더 (30) 는, 라인 세그먼트가 시작하는 버텍스 포인트의 위치 좌표를 나타내는 시작 버텍스 속성 (예를 들어, A0) 및 버텍스를 나타내는 라인 세그먼트가 종료하는 버텍스 포인트의 위치 좌표를 나타내는 종료 버텍스 속성 (예를 들어, A1) 을 포함하는 버텍스 속성들을 입력할 수도 있다. 이러한 방식으로, 버텍스 쉐이더 (30) 에 의해 입력된 버텍스 속성들은 단일 버텍스 포인트 대신에 라인 세그먼트를 나타낸다.
버텍스 쉐이더 (30) 는, 부가적인 라인 세그먼트로 커브를 테셀레이팅하기 위해 버텍스 A0 와 A1 사이의 부가적인 버텍스 포인트의 좌표들을 계산한다 (62). 버텍스 쉐이더 (30) 는 또 다른 버텍스 속성으로서 부가적인 버텍스 포인트를 계산할 수도 있다. 버텍스 쉐이더 (30) 는, 예를 들어, 변환 이후 디바이스 좌표 공간에서 커브의 수학적인 표현을 사용하여 버텍스 포인트 A0 와 A1 사이의 부가적인 버텍스 포인트의 좌표들을 계산할 수도 있다. 버텍스 쉐이더 (30) 는, 버텍스 쉐이더 (30) 가 원하는 수의 부가적인 라인 세그먼트들 M 으로 커브의 부분을 테셀레이팅하는지를 판정한다 (64).
제 1 패스 동안 버텍스 쉐이더 (30) 에 의해 생성된 원하는 수의 라인 세그먼트들이 M 미만이면, 버텍스 쉐이더 (30) 는, 버텍스 속성들의 최대 수에 도달하는지를 판정한다 (66). 상술된 바와 같이, 버텍스 속성들의 수는 버텍스 속성들의 특정한 최대 수에 제한될 수도 있다. 따라서, 버텍스 쉐이더 (30) 는, 단일 패스에서 제한된 수의 부가적인 버텍스 포인트들을 단지 계산할 수 있을 수도 있다.
버텍스 속성들의 최대 수에 도달하지 않으면, 버텍스 쉐이더 (30) 는 부가적인 버텍스 포인트의 또 다른 좌표를 계산한다 (62). 그러나, 버텍스 속성들의 최대 수에 도달하면, 버텍스 쉐이더 (30) 는 계산된 버텍스 속성들을 출력한다 (68). 버텍스 쉐이더 (30) 는, 제 1 패스 동안 생성된 부가적인 라인 세그먼트들 중 하나를 나타내는 버텍스 속성들의 새로운 세트를 입력할 수도 있다 (60). 즉, 이용가능한 버텍스 속성들의 최대 수가 커브의 부분을 완전히 테셀레이팅하는데 충분한 부가적인 버텍스 포인트들을 생성하는데 충분하지 않았다. 따라서, 버텍스 쉐이더 (30) 는 귀납적으로, 즉, 2개 이상의 테셀레이션 스테이지를 수행함으로써 더 많은 부가적인 라인 세그먼트들을 계산할 수도 있다.
제 1 패스 동안 생성된 원하는 수의 라인 세그먼트들이 M 이상이면, 버텍스 쉐이더 (30) 는 계산된 버텍스 속성들을 출력한다 (68). 즉, 이용가능한 버텍스 속성들의 최대 수는, 커브의 부분을 완전히 테셀레이팅하는데 충분한 부가적인 버텍스 포인트들을 생성하는데 충분하였다. 그 후, 버텍스 쉐이더 (30) 는, CPU (6) 에 의해 생성된 또 다른 라인 세그먼트를 나타내는 복수의 버텍스 속성들을 입력한다 (60).
도 7은, 본 개시물에서 설명된 기술들에 따라 테셀레이션을 수행하는 또 다른 예시적인 컴퓨팅 디바이스 (70) 를 도시한 블록도이다. 도 7의 컴퓨팅 디바이스 (70) 는, 도 7의 컴퓨팅 디바이스 (70) 가 GPU (10) 를 포함하지 않는다는 점을 제외하고는, 도 1의 컴퓨팅 디바이스 (2) 와 실질적으로 유사하다. 대신, 컴퓨팅 디바이스 (70) 는 더 상세히 후술될 바와 같이 제 2 테셀레이션 스테이지를 수행하는 전용 테셀레이션 하드웨어 회로 (72) 를 포함한다. 그래픽 렌더링 기능들은 GPU (10) 대신 CPU (6) 에 의해 수행될 수도 있다.
커브를 디스플레이 (16) 에 렌더링하기 위해, CPU (6) 는, 더 상세히 후술될 바와 같이 커브의 부분들을 각각 나타내는 라인 세그먼트들의 제 1 세트로 커브를 분할하기 위해 제 1 테셀레이션 스테이지를 수행한다. 특히 CPU (6) 는 라인 세그먼트들을 정의하는 커브를 따른 버텍스 포인트들을 계산한다. CPU (6) 는 커브의 타입과 관련된 수학식들, 예를 들어, 타원형 아크 커브의 경우에는 수학식들 (1) 및 (2), 3차 베지어 커브의 경우에는 수학식들 (6) 및 (7), 또는 2차 베지어 커브의 경우에는 수학식들 (10) 및 (11) 을 사용하여 버텍스 포인트들을 계산할 수도 있다. 제 1 테셀레이션 스테이지 동안 CPU (6) 에 의해 수행된 테셀레이션의 양은, CPU (6) 상의 프로세싱 로드의 함수로서 변할 수도 있다. CPU (6) 는 도 2에 도시된 CPU (6) 의 모든 특성들을 포함할 수도 있다.
제 2 테셀레이션 스테이지 동안, 테셀레이션 하드웨어 회로 (72) 는, 커브의 형상을 더 정밀하게 나타내는 부가적인 라인 세그먼트들로 라인 세그먼트들의 각각에 의해 표현된 커브의 부분을 테셀레이팅한다. 예를 들어, 테셀레이션 하드웨어 (72) 는, 제 2 테셀레이션 스테이지를 수행하기 위해 하나 이상의 승산 및 누산 (MAC) 동작을 포함할 수도 있다. 일 예시에서, 테셀레이션 하드웨어 회로 (72) 는, 더 상세히 후술될 바와 같이 상이한 차수의 다항식들을 계산하도록 구성가능한 MAC 동작 유닛들의 파이프라인화된 어레이로 형성될 수도 있다. 이러한 경우, 테셀레이션 하드웨어 회로 (72) 는, CPU (6) 로부터 버텍스 포인트들을 생성할 커브를 따른 적어도 하나의 위치 및 다항식 계수들을 입력한다. 예를 들어, 버텍스 포인트들을 생성할 커브를 따른 위치들은, 베지어 커브들의 경우에서는 t의 값 또는 타원형 아크 커브들의 경우에서는 θ의 값일 수도 있다. 테셀레이션 하드웨어 회로 (72) 의 MAC 동작 유닛들은, 특정한 위치들에서 버텍스 포인트들의 하나 이상의 좌표들을 생성하기 위해 다항식 계수들에 대해 동작한다.
CPU (6) 는, 테셀레이션 하드웨어 회로 (72) 로 로딩할 다항식 계수들을 결정하기 위해 커브의 확장된 다항식 표현을 계산할 수도 있다. 즉, CPU (6) 는,
Figure pct00012
와 같은 확장된 다항식 p(x) 로서 커브를 나타낼 수도 있으며, 여기서, ki는 다항식의 i차항의 다항식 계수이고, x는 변수이고, i=0,1, ..., n-1 이며, n은 다항식의 차수이다. CPU (6) 는 다항식 확장을 사용하여 커브의 확장된 다항식 표현을 계산할 수도 있다. 예를 들어, CPU (6) 는,
Figure pct00013
Figure pct00014
와 같은 2차 베지어 커브의 확장된 다항식 표현을 계산하기 위해 수학식들 (10) 및 (11) 에 대해 다항식 확장을 수행할 수도 있으며, 여기서, P2x, P1x, P0x, P2y, P1y, 및 P0y 는, P2x=(xs-2*xc+xe), P1x=2*(xc-xs), P0x=xs, P2y=(ys-2*yc+ye), P1y=2*(yc-ys) 및 P0y=ys 로서 정의된 다항식 계수들이다. 다른 예시에서, CPU (6) 는, 다수의 다항식 근사 알고리즘들 중 임의의 근사 알고리즘을 사용하여 다항식 표현을 계산할 수도 있다. 수학식들 (1) 및 (2) 를 사용하여 정의된 타원형 아크 커브의 경우에서, CPU (6) 는, 테일러 확장, 최소 제곱 근사화 또는 또 다른 근사화 기술을 사용하여 다항식 표현을 계산할 수도 있다. 예를 들어, CPU (6) 는, 다항식 S22+S1*θ+S0 로 sin(θ) 를 및 다항식 C22+C1*θ+C0 로 cos(θ) 를 근사함으로써 타원형 아크 커브에 대한 확장된 다항식 표현을 계산할 수도 있으며, 여기서, S2, S1, S0, C2, C1 및 C0 는 특정한 근사화 기술을 사용하여 계산된 다항식 계수들이다.
또한, CPU (6) 는 상기 수학식 (3) 에 따라 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 커브를 변환시킬 수도 있다. CPU (6) 는, 커브의 다항식 표현을 계산하기 전에 또는 커브의 다항식 표현을 계산한 이후, 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 커브를 변환시킬 수도 있다. 상술된 바와 같이, CPU (6) 는 커브 당 일회 변환을 계산할 수도 있다. 즉, CPU (6) 는 커브를 따른 모든 버텍스 포인트에 대한 변환을 계산하는 것 대신에 커브를 정의하는데 사용되는 포인트들의 각각에서 변환을 계산할 수도 있다. 예를 들어, 2차 베지어 커브의 경우, CPU (6) 는, 라인 세그먼트들의 제 1 세트의 계산된 버텍스 포인트들의 각각에 대한 변환을 계산하는 것 대신에 시작 포인트 (xs, ys), 종료 포인트 (xe, ye) 및 제어 포인트 (xc, yc) 의 변환을 계산할 수도 있다. 다른 예시에서, 컴퓨팅 디바이스 (70) 의 테셀레이션 하드웨어 회로 (72) 또는 몇몇 다른 컴포넌트는 변환을 수행할 수도 있다.
변환 동안, CPU (6) 는 변환 동안 수행된 스케일링의 양을 근사하는 스케일 팩터를 결정할 수도 있다. 몇몇 예시에서, 제 2 테셀레이션 스테이지 동안 발생하는 테셀레이션의 정도는 스케일 팩터의 함수일 수도 있다. 예를 들어, CPU (6) 는, 스케일 팩터에 기초하여 커브의 각각의 부분을 테셀레이팅하기 위해 부가적인 라인 세그먼트들의 수를 계산할 수도 있다. CPU (6) 가 커브의 각각의 부분을 테셀레이팅하기 위한 부가적인 라인 세그먼트들의 수를 계산한 이후, CPU (6) 는 새로운 버텍스 포인트를 생성할 커브의 부분에 따른 위치들을 결정한다. 예를 들어, 4개의 부가적인 라인 세그먼트들로 분할될 θ0=0 으로부터 θ1=π/4 까지의 타원형 커브의 부분에 대해, CPU (6) 는, θ0=0 으로부터 θ1=π/4 까지의 커브의 부분을 4개의 부가적인 라인 세그먼트들로 균등하게 분할하기 위해 위치들 θ01=π/16, θ02=π/8, θ03=3π/16 에서 새로운 버텍스들이 계산될 필요가 있다고 결정할 수도 있다.
CPU (6) 는, 버텍스 포인트들의 좌표들을 생성할 커브 상의 하나 이상의 위치들 및 커브의 확장된 다항식 표현에 대한 다항식 계수들을 테셀레이션 하드웨어 회로 (72) 에 제공한다. 상술된 타원형 아크 커브에서, 새로운 버텍스 포인트들의 좌표들을 생성할 커브 상의 위치들은, θ01, θ02 θ03 의 값들 또는 그들 값들의 10진법 근사이다. CPU (6) 는, 계산된 다항식 계수들 및 위치들을 테셀레이션 하드웨어 회로 (72) 로 직접 로딩하고, 테셀레이션 하드웨어 회로 (72) 로의 포인터를 프로그래밍할 수도 있으며, 이러한 경우, 테셀레이션 하드웨어 회로 (72) 는 다항식 계수들 및 위치들을 로딩한다. 어느 경우든지, 다항식 계수들 및 위치들은, 테셀레이팅될 커브의 타입에 기초하여 테셀레이션 하드웨어 회로 (72) 로 동적으로 로딩된다.
더 상세히 설명될 바와 같이, 테셀레이션 하드웨어 회로 (72) 는, CPU (6) 에 의해 특정된 다항식 계수들 및 위치들을 사용하여, 특정된 위치들에서 버텍스 포인트들의 좌표들을 계산한다. 이러한 방식으로, 컴퓨팅 디바이스 (70) 는, CPU (6) 로부터 테셀레이션 하드웨어 회로 (72) 까지 테셀레이션 워크로드의 부분을 오프로드하기 위해 테셀레이션 하드웨어 회로 (72) 를 이용할 수도 있다. 몇몇 예시에서, 테셀레이션 하드웨어 회로 (72) 는, 예를 들어, CPU (6) 가 높은 프로세싱 로드를 경험하고 있을 경우 모든 테셀레이션을 수행할 수도 있다. 테셀레이션 하드웨어 회로 (72) 는, 디스플레이 (16) 상으로의 커브의 프리젠테이션을 위해 부가적인 그래픽 렌더링 동작을 수행할 수도 있는 CPU (6) 로 버텍스 포인트들의 좌표들을 출력할 수도 있다. 대안적으로, CPU (6) 또는 테셀레이션 하드웨어 회로 (72) 는 장래의 프로세싱을 위해 디바이스 메모리 (8) 에 새로운 버텍스 포인트들을 저장할 수도 있다. 도 2에 도시된 바와 같이 테셀레이션 하드웨어 회로 (72) 가 GPU (10) 내에 존재하는 예시에서, 테셀레이션 하드웨어 회로 (72) 는, GPU (10) 의 버텍스 쉐이더 (30), 지오메트리 쉐이더 (32) 또는 픽셀 쉐이더 (36) 와 같은 다른 컴포넌트들로 버텍스 포인트들의 좌표들을 출력할 수도 있다.
또한, 다수의 다른 엘리먼트들이 컴퓨팅 디바이스 (70) 에 포함될 수도 있지만, 설명의 간략화 및 용이함을 위해 도 7에는 상세히 도시되지는 않는다. 예를 들어, 컴퓨팅 디바이스 (70) 는, 버스 (18) 를 통해 다른 컴포넌트들에 커플링된 도 1의 GPU (10) 와 같은 GPU 를 포함할 수도 있다. 또한, 본 개시물에서 설명된 기술들이 다양한 다른 아키텍처들로 구현될 수도 있으므로, 도 7에 도시된 아키텍처는 단지 예시일 뿐이다.
도 8은, 본 개시물에서 설명된 기술들에 따라 테셀레이션을 수행하는 예시적인 테셀레이션 하드웨어 회로 (72) 를 도시한 개략도이다. 테셀레이션 하드웨어 회로 (72) 는, (도 8에서 "REG" 로 라벨링된) 복수의 레지스터들 (82), (도 8에서 "MUX" 로 라벨링된) 복수의 멀티플렉서들 (84), 복수의 승산 연산 유닛들 (86) 및 복수의 누산 연산 유닛들 (88) 을 포함한다. 누산 연산 유닛 (88) 에 선행하는 승산 연산 유닛 (86) 은, 점선 (89) 에 의해 도시된 MAC 연산 유닛을 구성한다. 테셀레이션 하드웨어 회로 (72) 는 파이프라인으로 배열되는 구성가능한 MAC 어레이를 포함한다. 따라서, 각각의 MAC 연산 유닛의 출력은, 생성된 버텍스 좌표인 최종 MAC 연산 유닛의 출력을 제외하고, 후속 MAC 연산 유닛으로의 입력이다.
MUX들 (84) 은 구성가능능력을 테셀레이션 하드웨어 회로 (72) 에 제공한다. 특히, MUX들 (84) 은 2개의 입력들 중 하나를 출력하도록 구성될 수도 있다. MUX들 (84) 의 각각에 대한 직선에 의해 표현된 입력은 MUX들 (84) 가 통과할 입력에 대응한다. 즉, 직선으로 도시된 입력들의 각각의 값은, MUX들 (84) 의 각각이 각각 출력할 값이다. MUX들 (84) 의 각각에 대한 점선으로서 표현된 입력은, MUX들 (84) 가 통과하지 않는 입력에 대응한다. 따라서, 도 9 및 도 10에 관해 더 상세히 설명될 바와 같이, 테셀레이션 하드웨어 (72) 는 MUX들 (84) 에 의해 통과되지 못할 MUX 입력들을 변경시킴으로써 구성될 수도 있다.
도 8에 도시된 테셀레이션 하드웨어 회로 (72) 는, 최대 6차 다항식을 계산하도록 구성될 수도 있는 6-스테이지 구성가능 MAC 어레이이다. 테셀레이션 하드웨어 회로 (72) 는, 더 작은 차수의 다항식들을 계산하는 다수의 더 짧은 파이프라인들로 구성될 수도 있다. 예를 들어, 도 8에 도시된 6-스테이지 구성가능 MAC 어레이는, 3차 다항식을 각각 계산하는 2개의 병렬 3-스테이지 MAC 어레이들 (도 9), 2차 다항식을 각각 계산하는 3개의 병렬 2-스테이지 MAC 어레이들 (도 10) 등으로서 동작하도록 구성될 수도 있다. 이러한 방식으로, 테셀레이션 하드웨어 회로 (72) 는 테셀레이션 프로세스 동안 하드웨어 가속을 제공하도록 구성될 수도 있으며, 따라서, 개선된 렌더링 성능을 초래한다. 6-스테이지 구성가능 MAC 어레이로서 도시되지만, 테셀레이션 하드웨어 회로 (72) 는 더 많은 또는 더 적은 구성가능 파이프라인화된 MAC 스테이지들을 포함할 수도 있다.
테셀레이션 하드웨어 회로 (72) 는, 테셀레이팅될 커브의 타입에 기초하여 런 타임에서 동적으로 재구성될 수도 있다. 예를 들어, 2차 다항식들로서 표현되는 2차 베지어 커브 또는 타원형 아크 커브를 테셀레이팅할 경우, CPU (6) 는, 3개의 병렬 2-스테이지 MAC 어레이들로서 동작하도록 테셀레이션 하드웨어 회로 (72) 를 구성할 수도 있다. 3차 다항식으로서 표현된 3차 베지어 커브를 테셀레이팅할 경우, CPU (6) 는 2개의 병렬 3-스테이지 MAC 어레이들로서 동작하도록 테셀레이션 하드웨어 회로 (72) 를 구성할 수도 있다.
테셀레이션 하드웨어 회로 (72) 는, 버텍스 포인트들을 계산할 시에 사용을 위해 다항식 계수들 P0 내지 P6 를 CPU (6) 로부터 수신한다. 다항식 계수들은, 버텍스 포인트의 x-좌표를 계산하기 위한 다항식 계수들 또는 버텍스 포인트의 y-좌표를 계산하기 위한 다항식 계수들일 수도 있다. 테셀레이션 하드웨어 회로 (72) 가 2개 이상의 멀티-스테이지 MAC 어레이로서 동작하는 예시에서, 다항식 계수들은 버텍스 포인트의 x-좌표 및 y-좌표를 계산하기 위한 다항식 계수들일 수도 있다. 상술된 바와 같이, CPU (6) 는 다항식 계수들 P0 내지 P6 을 계산하고, 계산된 다항식 계수들 P0 내지 P6 을 테셀레이션 하드웨어 회로 (72) 에 제공한다. CPU (6) 는, 테셀레이션 하드웨어 회로 (72) 로 계산된 다항식 계수들 P0 내지 P6 을 직접 로딩할 수도 있거나, 테셀레이션 하드웨어 회로 (72) 로의 포인터를 프로그래밍할 수도 있으며, 이러한 경우, 테셀레이션 하드웨어 회로 (72) 는 다항식 계수들 P0 내지 P6 을 로딩한다. 어느 경우에서든, 다항식 계수들 P0 내지 P6 은, 테셀레이팅될 커브의 타입에 기초하여 동적으로 로딩된다.
또한, CPU (6) 는, 버텍스 포인트가 생성될 커브를 따른 위치에 대응하는 입력 (I) 을 테셀레이션 하드웨어 회로 (72) 에 제공한다. OpenVG를 사용하여 정의된 타원형 아크 커브의 경우에서, 입력은 θ의 특정값일 수도 있다. OpenVG를 사용하여 정의된 베지어 커브의 경우에서, 입력은 t의 특정값일 수도 있다. 테셀레이션 하드웨어 회로 (72) 는, 출력 (O) 을 계산하기 위해 다항식 계수들 P0 내지 P6 를 사용하여 입력에 대해 다양한 승산 및 누산 연산들을 수행한다. 출력은, 입력에 의해 식별된 커브를 따른 위치에서의 버텍스 포인트의 좌표 (예를 들어, x-좌표 또는 y-좌표) 를 나타낸다. 테셀레이션 하드웨어 회로 (72) 는 다음과 같은 형태의 6차 다항식을 출력한다.
Figure pct00015
테셀레이션 하드웨어 회로는, 테셀레이션 하드웨어 회로 (72) 가 생성될 라인 세그먼트들의 원하는 수의 버텍스 포인트들을 계산할 때까지, 커브를 따른 입력 위치들 및 다항식 계수들을 계속 수신한다. 예를 들어, 4개의 부가적인 라인 세그먼트들로 분할될 θ0=0 으로부터 θ1=π/4 까지의 타원형 커브의 부분에 대해, CPU (6) 는, θ0=0 으로부터 θ1=π/4 까지의 커브의 부분을 4개의 부가적인 라인 세그먼트들로 동등하게 분할하기 위해 버텍스 포인트들을 생성하도록, 입력들 θ01=π/16, θ02=π/8, θ03=3π/16 을 테셀레이션 하드웨어 회로 (72) 에 제공할 수도 있다.
도 9는, 3차 다항식을 계산하는 2개의 병렬 3-스테이지 MAC 어레이들로서 동작하도록 구성되는 테셀레이션 하드웨어 회로 (72) 를 도시한 개략도이다. 특히, 첫번째 3개의 MAC 연산 유닛들은 다음과 같은 형태의 제 1 의 3차 다항식을 출력하는 제 1 의 3-스테이지 MAC 어레이로서 동작한다.
Figure pct00016
최종 3개의 MAC 연산 유닛들은 다음과 같은 형태의 제 2 의 3차 다항식을 출력하는 제 2 의 3-스테이지 MAC 어레이로서 동작한다.
Figure pct00017
테셀레이션 하드웨어 회로 (72) 는, 입력들 I0 및 I1 및 다항식 계수들 P0, P0', P1, P2, P3, P4, P5 및 P6 를 사용하여 2개의 좌표들을 계산한다. 일 예시에서, 테셀레이션 하드웨어 회로 (72) 는 위치 I에서의 버텍스 포인트를 정의하는 2개의 좌표들을 계산할 수도 있다. 즉, 테셀레이션 하드웨어 회로 (72) 는, 위치 I에서의 버텍스 포인트를 정의하는 x-좌표 및 y-좌표 (즉, (x,y)) 를 계산할 수도 있다. 이러한 경우, 입력들 I0 및 I1 은 동일하며, 다항식 계수들 P0, P1, P2 및 P3는 x-좌표를 계산하기 위한 다항식의 다항식 계수들에 대응하고, 다항식 계수들 P0', P4, P5 및 P6는 y-좌표를 계산하기 위한 다항식의 다항식 계수들에 대응한다.
다른 예시에서, 테셀레이션 하드웨어 회로 (72) 는 상이한 버텍스 포인트들에 대응하는 2개의 좌표들을 계산할 수도 있다. 예를 들어, 테셀레이션 하드웨어 회로 (72) 는, 커브를 따른 상이한 위치들 I0 및 I1 에서 2개의 버텍스 포인트들의 x-좌표를 나타내는 2개의 x-좌표를 계산할 수도 있다. 이러한 경우, 입력들 I0 및 I1 은 동일하지 않으며, 다항식 계수들 P0, P1, P2 및 P3 및 다항식 계수들 P0', P4, P5 및 P6 양자는 x-좌표를 계산하기 위한 다항식의 다항식 계수들에 대응한다. 버텍스 포인트들에 대한 x-좌표를 계산한 이후, 테셀레이션 하드웨어 (72) 는, 버텍스 포인트들의 y-좌표들과 관련된 계수들을 입력하고, 커브를 따른 다양한 위치들 I의 버텍스 포인트들에 대해 y-좌표를 계산한다. 어느 경우에서든지, 테셀레이션 하드웨어 회로 (72) 는, 단일 패스에서 버텍스 포인트들에 대한 2개의 좌표 값들을 출력함으로써 테셀레이션 프로세스 동안 하드웨어 가속을 제공한다.
도 10은, 2차 다항식을 각각 계산하는 3개의 병렬 2-스테이지 MAC 어레이들로서 동작하도록 구성되는 테셀레이션 하드웨어 회로 (72) 를 도시한 개략도이다. 특히, MAC 연산 유닛들의 제 1 쌍은 다음과 같은 형태의 제 1 의 2차 다항식을 출력하는 제 1 의 2-스테이지 MAC 어레이로서 동작한다.
Figure pct00018
MAC 연산 유닛들의 제 2 쌍은 다음과 같은 형태의 제 2 의 2차 다항식을 출력하는 제 2 의 2-스테이지 MAC 어레이로서 동작한다.
Figure pct00019
MAC 연산 유닛들의 최종 쌍은 다음과 같은 형태의 제 3 의 2차 다항식을 출력하는 제 2 의 3-스테이지 MAC 어레이로서 동작한다.
Figure pct00020
테셀레이션 하드웨어 회로 (72) 는, 입력들 I0, I1 및 I2, 및 다항식 계수들 P0, P0', P0'', P1, P2, P3, P4, P5 및 P6 를 사용하여 3개의 좌표들을 계산한다. 상술된 바와 같이, 테셀레이션 하드웨어 회로 (72) 는 상이한 버텍스 포인트들에 대응하는 3개의 좌표들을 계산할 수도 있다. 예를 들어, 테셀레이션 하드웨어 회로 (72) 는, 커브를 따른 상이한 위치들 I0, I1 및 I2 에서의 3개의 버텍스 포인트들의 x-좌표를 나타내는 3개의 x-좌표들을 계산할 수도 있다. 이러한 경우, I0, I1 및 I2 는 동일하지 않으며, 다항식 계수들 P0, P1, P2, 다항식 계수들 P0', P3 및 P4, 및 다항식 계수들 P0'', P5, 및 P6 각각은 x-좌표를 계산하기 위한 2차 다항식의 다항식 계수들에 대응한다. 버텍스 포인트들에 대해 x-좌표들을 계산한 이후, 테셀레이션 하드웨어 (72) 는 버텍스 포인트들의 y-좌표들과 관련된 계수들을 입력하고, 커브를 따른 I0, I1 및 I2 에서의 버텍스 포인트들에 대한 y-좌표들을 계산한다.
대안적으로, 테셀레이션 하드웨어 회로 (72) 는, 커브를 따른 버텍스 포인트들의 x-좌표들 및 y-좌표들 양자의 조합을 계산할 수도 있다. 즉, 테셀레이션 하드웨어 회로 (72) 는, 커브를 따른 다양한 위치들 I 에서 2개의 x-좌표들 및 하나의 y-좌표, 또는 2개의 y-좌표들 및 하나의 x-좌표를 계산할 수도 있다. 이러한 경우, 입력들 I0 및 I1 은 동일하며, 다항식 계수들 P0, P1 및 P2는 x-좌표를 계산하기 위한 다항식의 다항식 계수들에 대응하고, 다항식 계수들 P0', P3 및 P4는 y-좌표를 계산하기 위한 다항식의 다항식 계수들에 대응한다. 한편, I2 는 I0 및 I1 과는 상이하며, 다항식 계수들 P0'', P5 및 P6는 x-좌표 또는 y-좌표에 대한 다항식 계수들일 수도 있다. 어느 경우에서든지, 테셀레이션 하드웨어 회로 (72) 는, 단일 패스에서 버텍스 포인트들에 대한 3개의 좌표값들을 출력함으로써 테셀레이션 프로세스 동안 하드웨어 가속을 제공한다.
도 11은, 본 개시물에서 설명된 기술들에 따라 테셀레이션을 수행하는 컴퓨팅 디바이스의 예시적인 동작을 도시한 흐름도이다. 소프트웨어 애플리케이션 (20) 은, 라인 세그먼트들의 제 1 세트로 커브를 테셀레이팅하도록 CPU (6) 의 테셀레이션 모듈 (22) 을 호출한다 (90). 라인 세그먼트들의 제 1 세트를 생성하기 위해, 테셀레이션 모듈 (22) 은 커브 상에 놓이는 하나 이상의 버텍스 포인트들을 계산한다. 예를 들어, 테셀레이션 모듈 (22) 은, 커브의 수학적인 표현을 사용하여 하나 이상의 버텍스 포인트들을 생성할 수도 있다. 라인 세그먼트들은, 이웃한 버텍스 포인트들에 버텍스 포인트들의 각각을 연결시킨다. 라인 세그먼트들의 각각은 커브의 부분을 나타낸다.
CPU (6) 는 커브의 확장된 다항식 표현을 계산한다 (92). 예를 들어, CPU (6) 는, 다항식 S22+S1*θ+S0 로 sin(θ) 를 및 다항식 C22+C1*θ+C0 로 cos(θ) 를 근사함으로써 수학식들 (1) 및 (2) 에 따라 정의된 타원형 아크 커브의 확장된 다항식 표현을 계산할 수도 있다. 확장된 다항식 표현들은,
Figure pct00021
Figure pct00022
와 같이 제공되며, 여기서, P2x, P1x, P0x, P2y, P1y 및 P0y 는, P2x=-a*C2, P1x=-a*C1, P0x=-a*C0, P2y=b*C2, P1y=b*C1, 및 P0y=b*C0 로서 정의된 다항식 계수들이다.
또한, CPU (6) 는 오브젝트 좌표 공간으로부터 디바이스 좌표 공간으로 커브를 변환할 수도 있다 (94). CPU (6) 는, 커브의 다항식 표현을 계산하기 이전 또는 커브의 다항식 표현을 계산한 이후에 디바이스 좌표 공간으로 변환할 수도 있다. 상술된 바와 같이, CPU (6) 는 커브 당 일회 변환을 계산할 수도 있다. 즉, CPU (6) 는, 커브를 따른 모든 버텍스 포인트에 대한 변환을 계산하는 것 대신 커브를 정의하는데 사용되는 포인트들의 각각에서 변환을 계산할 수도 있다. 예를 들어, 2차 베지어 커브의 경우, CPU (6) 는, 라인 세그먼트들의 제 1 세트의 계산된 버텍스 포인트들의 각각에 대한 변환을 계산하는 것 대신에 시작 포인트 (xs, ys), 종료 포인트 (xe, ye) 및 제어 포인트 (xc, yc) 의 변환을 계산할 수도 있다. 다른 예시에서, 컴퓨팅 디바이스 (70) 의 테셀레이션 하드웨어 회로 (72) 또는 몇몇 다른 컴포넌트는 변환을 수행할 수도 있다.
변환 동안, CPU (6) 는 변환 동안 수행된 스케일링의 양을 근사하는 스케일 팩터를 결정할 수도 있다 (96). CPU (6) 는 스케일 팩터에 기초하여 제 2 테셀레이션 스테이지에 대한 부가적인 라인 세그먼트들의 수를 결정한다 (98). 특히, CPU (6) 는, 스케일 팩터가 증가함에 따라, 제 2 테셀레이션 스테이지가 라인 세그먼트들에 의해 표현된 커브의 부분을 더 많은 부가적인 라인 세그먼트들로 세분한다고 결정할 수도 있다. CPU (6) 가 커브의 각각의 부분을 테셀레이팅하기 위한 부가적인 라인 세그먼트들의 수를 계산한 이후, CPU (6) 는 새로운 버텍스 포인트를 생성할 커브의 부분에 따른 위치들을 결정한다 (100). 예를 들어, 4개의 부가적인 라인 세그먼트들로 분할될 θ0=0 으로부터 θ1=π/4 까지의 타원형 커브의 부분에 대해, CPU (6) 는, θ0=0 으로부터 θ1=π/4 까지의 커브의 부분을 4개의 부가적인 라인 세그먼트들로 균등하게 분할하기 위해 위치들 θ01=π/16, θ02=π/8, θ03=3π/16 에서 새로운 버텍스들이 계산될 필요가 있다고 결정할 수도 있다.
CPU (6) 는 커브를 테셀레이팅하도록 테셀레이션 하드웨어 회로 (72) 를 구성한다 (102). 예를 들어, CPU (6) 는, 커브의 확장된 다항식 표현에 대한 다항식 계수들을 테셀레이션 하드웨어 회로 (72) 에 제공할 수도 있다. CPU (6) 는, 테셀레이션 하드웨어 회로 (72) 에 계산된 다항식 계수들을 직접 로딩할 수도 있거나 포인트를 프로그래밍할 수도 있으며, 이러한 경우, 테셀레이션 하드웨어 회로 (72) 는 다항식 계수들 및 위치들을 로딩한다. 어느 경우에서든지, 다항식 계수들은, 테셀레이팅될 커브의 타입, 예를 들어, 타원형 아크 커브, 2차 베지어 커브, 3차 베지어 커브 등에 기초하여 테셀레이션 하드웨어 회로 (72) 에 동적으로 로딩된다.
CPU (6) 는, 하나 이상의 버텍스 포인트들의 좌표들을 생성할 커브를 따른 위치들을 식별하는 하나 이상의 입력들을 테셀레이션 하드웨어 회로 (72) 에 제공한다 (104). 상술된 바와 같이, 테셀레이션 하드웨어 회로 (72) 는, 버텍스 포인트의 좌표를 각각 계산하는 2개의 병렬 3-스테이지 MAC 어레이들 (도 9) 로서 동작하도록 구성될 수도 있거나, 버텍스 포인트의 좌표를 각각 계산하는 3개의 병렬 2-스테이지 MAC 어레이들 (도 10) 로서 동작하도록 구성될 수도 있다. 테셀레이션 하드웨어 회로는, 2개 이상의 버텍스 포인트의 x-좌표, 2개 이상의 버텍스 포인트의 y-좌표, 동일한 버텍스 포인트의 x-좌표들 및 y-좌표, 또는 이들의 조합을 계산하도록 구성될 수도 있다.
CPU (6) 는 테셀레이션 하드웨어 (72) 에 의해 계산된 하나 이상의 좌표들을 수신한다 (106). CPU (6) 는 버텍스 포인트들에 대해 계산할 더 많은 좌표들이 존재하는지를 판정한다 (108). 버텍스 포인트들에 대해 계산할 더 많은 좌표들이 존재할 경우, CPU (6) 는 테셀레이션 하드웨어 회로를 구성하고 (102), 부가적인 좌표들을 계산하기 위해 입력을 제공하도록 계속된다. 계산할 더 많은 좌표들이 존재하지 않을 경우, CPU (6) 는 테셀레이팅된 라인 세그먼트들을 사용하여 디스플레이할 커브를 렌더링한다.
여기에 설명된 기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 모듈들 또는 컴포넌트들로서 설명된 임의의 피쳐들은, 통합된 로직 디바이스에 함께 또는 상호동작가능한 로직 디바이스들이지만 별개의 로직 디바이스들로서 별개로 구현될 수도 있다. 몇몇 경우에서, 다양한 피쳐들은 집적 회로 칩 또는 칩셋과 같은 집적 회로 디바이스로서 구현될 수도 있다. 소프트웨어로 구현되면, 기술들은, 실행될 경우 상술된 방법들 중 하나 이상을 수행하는 명령들을 포함한 컴퓨터-판독가능 매체에 의해 적어도 부분적으로 실현될 수도 있다. 컴퓨터-판독가능 매체는, 패키징 재료를 포함할 수도 있는 컴퓨터 프로그램 제품의 일부를 형성할 수도 있다. 컴퓨터-판독가능 매체는, 동기식 동적 랜덤 액세스 메모리 (SDRAM) 와 같은 랜덤 액세스 메모리 (RAM), 판독-전용 메모리 (ROM), 비-휘발성 랜덤 액세스 메모리 (NVRAM), 전기적으로 소거가능한 프로그래밍가능 판독-전용 메모리 (EEPROM), 플래시 메모리, 자성 또는 광 데이터 저장 매체 등을 포함할 수도 있다. 부가적으로 또는 대안적으로, 기술들은, 명령들 또는 데이터 구조들의 형태로 코드를 운반 또는 전달하고, 컴퓨터에 의해 액세스, 판독 및/또는 실행될 수 있는 컴퓨터-판독가능 통신 매체에 의해 적어도 부분적으로 실현될 수도 있다.
하나 이상의 DSP들, 범용 마이크로프로세서들, ASIC들, 필드 프로그래밍가능 로직 어레이들, FPGA들, 다른 동등한 집적 또는 이산 로직 회로와 같은 하나 이상의 프로세서들에 의해 코드가 실행될 수도 있다. 따라서, 여기에 사용된 바와 같이, "프로세서" 라는 용어는 전술한 구조, 또는 여기에 설명된 기술들의 구현에 적합한 임의의 다른 구조 중 임의의 것을 지칭할 수도 있다. 또한, 몇몇 양태들에서, 여기에 설명된 기능은, 그래픽 이미지들을 테셀레이팅하도록 구성된 전용 소프트웨어 애플리케이션들 또는 하드웨어 모듈들 내에 제공될 수도 있다. 따라서, 본 개시물은, 본 개시물에서 설명된 기술들 중 하나 이상을 구현하기 위한 회로를 포함하는 임의의 다양한 집적 회로 디바이스들을 또한 고려한다. 그러한 회로는, 단일의 집적 회로 칩 또는 다수의 상호동작가능한 집적 회로 칩들로 제공될 수도 있다.
다양한 양태들이 설명되었다. 이들 및 다른 양태들은 다음의 청구항들의 범위내에 있다.

Claims (42)

  1. 제 1 컴퓨팅 유닛을 사용하여 커브를 제 1 라인 세그먼트들로 분할하기 위해 상기 커브를 테셀레이팅 (tessellate) 하는 단계; 및
    제 2 컴퓨팅 유닛을 사용하여, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    제 1 좌표 공간으로부터 제 2 좌표 공간으로 상기 커브를 변환하는 단계를 더 포함하며,
    상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 단계는, 상기 커브를 변환하는 단계에서 사용되는 스케일 팩터에 기초하여, 상기 제 2 컴퓨팅 유닛을 사용하여 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 상기 제 2 라인 세그먼트들로 테셀레이팅하는 단계를 포함하는, 방법.
  3. 제 2 항에 있어서,
    상기 스케일 팩터에 기초하여 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 단계는, 상기 스케일 팩터가 증가할 경우, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 더 큰 수의 제 2 라인 세그먼트들로 테셀레이팅하는 단계를 포함하는, 방법.
  4. 제 1 항에 있어서,
    상기 제 1 컴퓨팅 유닛의 로드에 적어도 기초하여, 상기 제 1 컴퓨팅 유닛에 의해 수행된 상기 커브의 테셀레이션의 양을 동적으로 밸런싱하는 단계를 더 포함하는, 방법.
  5. 제 4 항에 있어서,
    상기 제 1 컴퓨팅 유닛의 로드에 기초하여 상기 제 1 컴퓨팅 유닛에 의해 수행된 상기 커브의 테셀레이션의 양을 동적으로 밸런싱하는 단계는, 상기 제 1 컴퓨팅 유닛의 로드가 임계값을 초과할 경우, 상기 커브를 더 적은 제 1 라인 세그먼트들로 분할하기 위해 상기 커브를 테셀레이팅하는 단계를 포함하는, 방법.
  6. 제 1 항에 있어서,
    상기 제 1 컴퓨팅 유닛은 중앙 프로세싱 유닛 (CPU) 을 포함하고, 상기 제 2 컴퓨팅 유닛은 그래픽 프로세싱 유닛 (GPU) 을 포함하며,
    상기 GPU를 이용하여 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 테셀레이팅하는 단계는, 상기 제 1 라인 세그먼트들 중 첫번째 라인 세그먼트에 의해 표현된 커브의 첫번째 부분을 테셀레이팅하는 단계를 포함하고,
    상기 방법은,
    상기 제 1 라인 세그먼트들 중 두번째 라인 세그먼트에 의해 표현된 커브의 두번째 부분을 병렬로 테셀레이팅하는 단계를 더 포함하는, 방법.
  7. 제 6 항에 있어서,
    상기 제 1 라인 세그먼트들 중 첫번째 라인 세그먼트 및 두번째 라인 세그먼트에 의해 표현된 커브의 첫번째 부분 및 두번째 부분의 각각을 테셀레이팅하는 단계는, 상기 GPU의 쉐이더 (shader) 유닛을 사용하여 각각의 제 1 라인 세그먼트에 의해 표현된 커브의 각각의 부분을 테셀레이팅하는 단계를 포함하는, 방법.
  8. 제 7 항에 있어서,
    상기 쉐이더 유닛은 버텍스 쉐이더를 포함하며,
    상기 방법은,
    상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트의 버텍스 포인트들을 특정하는 적어도 2개의 버텍스 속성들을 포함하는 복수의 버텍스 속성들을 상기 버텍스 쉐이더를 이용하여 수신하는 단계; 및
    상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분 상에 놓여있는 부가적인 포인트들을 나타내는 부가적인 버텍스 속성들을 생성하여, 상기 커브의 부분을 상기 제 2 라인 세그먼트들로 테셀레이팅하는 단계를 더 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 제 2 컴퓨팅 유닛은 전용 테셀레이션 하드웨어를 포함하며,
    상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 테셀레이팅하는 단계는,
    적어도 하나의 입력을 수신하는 단계; 및
    상기 적어도 하나의 입력에 기초하여, 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 대응하는 적어도 하나의 버텍스 포인트의 적어도 하나의 좌표를 생성하는 단계를 포함하는, 방법.
  10. 제 9 항에 있어서,
    상기 전용 테셀레이션 하드웨어는, 복수의 승산 및 누산 연산 유닛들의 파이프라인을 포함하며,
    상기 적어도 하나의 버텍스 포인트의 적어도 하나의 좌표를 생성하는 단계는, 상기 적어도 하나의 입력에 기초하여 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 대응하는 버텍스 포인트의 적어도 하나의 좌표를 생성하기 위해, 상기 커브의 다항식 표현을 구현하는 단계를 포함하는, 방법.
  11. 제 10 항에 있어서,
    상기 전용 테셀레이션 하드웨어가 버텍스 포인트의 좌표를 각각 생성하는 2개 이상의 병렬 파이프라인들로서 동작하도록, 상기 복수의 승산 및 누산 연산 유닛들의 파이프라인을 구성하는 단계를 더 포함하는, 방법.
  12. 제 1 항에 있어서,
    상기 제 1 컴퓨팅 유닛은 그래픽 프로세싱 유닛 (GPU) 의 제 1 컴포넌트이고, 상기 제 2 컴퓨팅 유닛은 상기 GPU의 제 2 컴포넌트인, 방법.
  13. 제 1 항에 있어서,
    상기 커브를 디스플레이에 프리젠테이션하기 위해 상기 제 2 라인 세그먼트들을 렌더링하는 단계를 더 포함하는, 방법.
  14. 제 1 항에 있어서,
    상기 제 1 컴퓨팅 유닛, 상기 제 2 컴퓨팅 유닛 및 제 3 컴퓨팅 유닛을 이용하여, 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 3 라인 세그먼트들로 테셀레이팅하는 단계를 더 포함하는, 방법.
  15. 제 1 라인 세그먼트들로 커브를 분할하기 위해 상기 커브를 테셀레이팅하는 제 1 컴퓨팅 유닛; 및
    상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 제 2 컴퓨팅 유닛을 포함하는, 디바이스.
  16. 제 15 항에 있어서,
    상기 제 1 컴퓨팅 유닛 및 상기 제 2 컴퓨팅 유닛 중 하나는, 제 1 좌표 공간으로부터 제 2 좌표 공간으로 상기 커브를 변환하며,
    상기 제 2 컴퓨팅 유닛은, 상기 커브를 변환할 시에 사용되는 스케일 팩터에 기초하여, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 상기 제 2 라인 세그먼트들로 테셀레이팅하는, 디바이스.
  17. 제 16 항에 있어서,
    상기 제 2 컴퓨팅 유닛은, 상기 스케일 팩터가 증가할 경우, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 더 큰 수의 제 2 라인 세그먼트들로 테셀레이팅하는, 디바이스.
  18. 제 15 항에 있어서,
    상기 제 1 컴퓨팅 유닛은, 상기 제 1 컴퓨팅 유닛의 로드에 적어도 기초하여 상기 제1 컴퓨팅 유닛에 의해 수행된 상기 커브의 테셀레이션의 양을 동적으로 밸런싱하는, 디바이스.
  19. 제 18 항에 있어서,
    상기 제 1 컴퓨팅 유닛은, 상기 제 1 컴퓨팅 유닛의 로드가 임계값을 초과할 경우, 상기 커브를 더 적은 수의 제 1 라인 세그먼트들로 분할하기 위해 상기 커브를 테셀레이팅하는, 디바이스.
  20. 제 15 항에 있어서,
    상기 제 1 컴퓨팅 유닛은 중앙 프로세싱 유닛 (CPU) 을 포함하고, 상기 제 2 컴퓨팅 유닛은 그래픽 프로세싱 유닛 (GPU) 을 포함하며,
    상기 GPU는, 상기 제 1 라인 세그먼트들 중 첫번째 라인 세그먼트에 의해 표현된 커브의 첫번째 부분을 테셀레이팅하고, 상기 제 1 라인 세그먼트들 중 두번째 라인 세그먼트에 의해 표현된 커브의 두번째 부분을 병렬로 테셀레이팅하는, 디바이스.
  21. 제 20 항에 있어서,
    상기 GPU는 상기 GPU의 쉐이더 유닛을 이용하여 상기 커브의 상기 첫번째 부분 및 상기 두번째 부분의 각각을 테셀레이팅하는, 디바이스.
  22. 제 21 항에 있어서,
    상기 쉐이더 유닛은, 상기 제 1 라인 세그먼트 중 하나의 라인 세그먼트의 버텍스 포인트들을 특정하는 적어도 2개의 버텍스 속성들을 포함하는 복수의 버텍스 속성들을 수신하고 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분 상에 놓여있는 부가적인 버텍스 포인트들을 나타내는 부가적인 버텍스 속성들을 생성하는 버텍스 쉐이더를 포함하는, 디바이스.
  23. 제 15 항에 있어서,
    상기 제 2 컴퓨팅 유닛은, 적어도 하나의 입력을 수신하고 상기 적어도 하나의 입력에 기초하여 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 대응하는 적어도 하나의 버텍스 포인트의 적어도 하나의 좌표를 생성하는 전용 테셀레이션 하드웨어를 포함하는, 디바이스.
  24. 제 23 항에 있어서,
    상기 전용 테셀레이션 하드웨어는, 상기 적어도 하나의 입력에 기초하여 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 대응하는 적어도 하나의 버텍스 포인트의 적어도 하나의 좌표를 생성하기 위해, 상기 커브의 다항식 표현을 구현하는, 파이프라인 구성으로 배열된 복수의 승산 및 누산 연산 유닛들을 포함하는, 디바이스.
  25. 제 24 항에 있어서,
    상기 복수의 승산 및 누산 연산 유닛들의 파이프라인은, 상기 전용 테셀레이션 하드웨어가 상기 적어도 하나의 버텍스 포인트의 좌표를 각각 생성하는 2개 이상의 병렬 파이프라인들로서 동작하도록 구성되는, 디바이스.
  26. 제 15 항에 있어서,
    상기 제 1 컴퓨팅 유닛은 그래픽 프로세싱 유닛 (GPU) 의 제 1 컴포넌트이고, 상기 제 2 컴퓨팅 유닛은 상기 GPU의 제 2 컴포넌트인, 디바이스.
  27. 제 15 항에 있어서,
    디스플레이를 더 포함하며,
    상기 제 1 컴퓨팅 유닛 및 상기 제 2 컴퓨팅 유닛 중 하나는 상기 디스플레이로 상기 커브를 프리젠테이션하기 위해 상기 제 2 라인 세그먼트들을 렌더링하는, 디바이스.
  28. 제 15 항에 있어서,
    상기 제 1 컴퓨팅 유닛, 상기 제 2 컴퓨팅 유닛, 및 제 3 컴퓨팅 유닛 중 하나는, 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 3 라인 세그먼트들로 테셀레이팅하는, 디바이스.
  29. 커브를 제 1 라인 세그먼트들로 분할하기 위해 상기 커브를 테셀레이팅하는 제 1 수단; 및
    상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 2 라인 세그먼트들로 테셀레이팅하는 제 2 수단을 포함하는, 디바이스.
  30. 제 29 항에 있어서,
    제 1 좌표 공간으로부터 제 2 좌표 공간으로 상기 커브를 변환하는 수단을 더 포함하며,
    상기 제 2 테셀레이팅 수단은, 상기 커브를 변환할 시에 사용되는 스케일 팩터에 기초하여, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 상기 제 2 라인 세그먼트들로 테셀레이팅하는, 디바이스.
  31. 제 30 항에 있어서,
    상기 제 2 테셀레이팅 수단은, 상기 스케일 팩터가 증가할 경우, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 더 큰 수의 제 2 라인 세그먼트들로 테셀레이팅하는, 디바이스.
  32. 제 29 항에 있어서,
    상기 제 1 테셀레이팅 수단의 로드에 적어도 기초하여, 상기 제 1 테셀레이팅 수단에 의해 수행된 상기 커브의 테셀레이션의 양을 동적으로 밸런싱하는 수단을 더 포함하는, 디바이스.
  33. 제 23 항에 있어서,
    상기 제 1 테셀레이팅 수단은, 상기 제 1 테셀레이팅 수단의 로드가 임계값을 초과할 경우, 상기 커브를 더 적은 수의 제 1 라인 세그먼트들로 분할하기 위해 상기 커브를 테셀레이팅하는, 디바이스.
  34. 제 29 항에 있어서,
    상기 제 2 테셀레이팅 수단은 상기 제 1 라인 세그먼트들 중 첫번째 라인 세그먼트에 의해 표현된 커브의 첫번째 부분을 테셀레이팅하고, 상기 제 1 라인 세그먼트들 중 두번째 라인 세그먼트에 의해 표현된 커브의 두번째 부분을 병렬로 테셀레이팅하는, 디바이스.
  35. 제 29 항에 있어서,
    상기 제 2 테셀레이팅 수단은, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트의 버텍스 포인트들을 특정하는 적어도 2개의 버텍스 속성들을 포함하는 복수의 버텍스 속성들을 수신하며, 상기 제 1 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분 상에 놓여있는 부가적인 포인트들을 나타내는 부가적인 버텍스 속성들을 생성하여, 상기 커브의 부분을 상기 제 2 라인 세그먼트들로 테셀레이팅하는, 디바이스.
  36. 제 29 항에 있어서,
    상기 제 2 테셀레이팅 수단은, 적어도 하나의 입력에 기초하여 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 대응하는 적어도 하나의 버텍스 포인트의 적어도 하나의 좌표를 생성하는 수단을 포함하는 전용 테셀레이션 하드웨어를 포함하는, 디바이스.
  37. 제 36 항에 있어서,
    상기 생성하는 수단은, 상기 적어도 하나의 입력에 기초하여 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 대응하는 적어도 하나의 버텍스 포인트의 적어도 하나의 좌표를 생성하기 위해, 상기 커브의 다항식 표현을 구현하는 복수의 승산 및 누산 연산 유닛들의 파이프라인을 포함하는, 디바이스.
  38. 제 37 항에 있어서,
    상기 전용 테셀레이션 하드웨어가 버텍스 포인트의 좌표를 각각 생성하는 2개 이상의 병렬 파이프라인들로서 동작하도록 상기 복수의 승산 및 누산 연산 유닛들의 파이프라인을 구성하는 수단을 더 포함하는, 디바이스.
  39. 제 29 항에 있어서,
    상기 제 1 테셀레이팅 수단은 그래픽 프로세싱 유닛 (GPU) 의 제 1 컴포넌트이고, 상기 제 2 테셀레이팅 수단은 상기 GPU의 제 2 컴포넌트인, 디바이스.
  40. 제 29 항에 있어서,
    상기 커브를 디스플레이로 프리젠테이션하기 위해 상기 제 2 라인 세그먼트들을 렌더링하는 수단을 더 포함하는, 디바이스.
  41. 제 29 항에 있어서,
    상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 3 라인 세그먼트들로 테셀레이팅하는 제 3 수단을 더 포함하는, 디바이스.
  42. 제 29 항에 있어서,
    상기 제 1 테셀레이팅 수단 및 상기 제 2 테셀레이팅 수단 중 하나는, 상기 제 2 라인 세그먼트들 중 하나의 라인 세그먼트에 의해 표현된 커브의 부분을 제 3 라인 세그먼트들로 테셀레이팅하는, 디바이스.
KR1020107023368A 2008-03-20 2009-03-19 그래픽 렌더링을 위한 멀티-스테이지 테셀레이션 KR101240815B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/052,628 2008-03-20
US12/052,628 US8643644B2 (en) 2008-03-20 2008-03-20 Multi-stage tessellation for graphics rendering
PCT/US2009/037730 WO2009117619A1 (en) 2008-03-20 2009-03-19 Multi-stage tessellation for graphics rendering

Publications (2)

Publication Number Publication Date
KR20100127834A true KR20100127834A (ko) 2010-12-06
KR101240815B1 KR101240815B1 (ko) 2013-03-11

Family

ID=40875114

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107023368A KR101240815B1 (ko) 2008-03-20 2009-03-19 그래픽 렌더링을 위한 멀티-스테이지 테셀레이션

Country Status (8)

Country Link
US (1) US8643644B2 (ko)
EP (1) EP2269172A1 (ko)
JP (1) JP5335888B2 (ko)
KR (1) KR101240815B1 (ko)
CN (1) CN101978393B (ko)
CA (1) CA2717278A1 (ko)
TW (1) TW201001329A (ko)
WO (1) WO2009117619A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140045789A (ko) * 2012-10-09 2014-04-17 엘에스산전 주식회사 Hmi 장치 및 hmi 장치의 데이터 출력 방법
KR20180056932A (ko) * 2016-11-21 2018-05-30 삼성전자주식회사 커브 렌더링을 수행하는 방법 및 장치.

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009145889A1 (en) * 2008-05-29 2009-12-03 Advanced Micro Devices, Inc. System, method, and computer program product for a tessellation engine using a geometry shader
US20100079454A1 (en) * 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
US20100079469A1 (en) * 2008-09-30 2010-04-01 Lake Adam T Rendering tremmed nurbs on programmable graphics architectures
GB0818278D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing systems
GB0818277D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing system
GB0818279D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing systems
GB0913170D0 (en) 2009-07-28 2009-09-02 Advanced Risc Mach Ltd Graphics processing systems
US8884957B2 (en) * 2009-09-09 2014-11-11 Advanced Micro Devices, Inc. Tessellation engine and applications thereof
US20110212761A1 (en) * 2010-02-26 2011-09-01 Igt Gaming machine processor
CN102142150B (zh) * 2011-03-17 2012-10-17 长沙景嘉微电子有限公司 基于分块渲染的gpu中锯齿线段的生成
KR101766383B1 (ko) * 2011-07-26 2017-08-09 한국전자통신연구원 지면 고도 데이터 다운 사이징 방법 및 이를 위한 장치
US20130107289A1 (en) * 2011-10-28 2013-05-02 Microsoft Corporation Rasterization of printing data
US8810572B2 (en) * 2011-10-31 2014-08-19 Qualcomm Incorporated Tessellation cache for object rendering
US10089774B2 (en) 2011-11-16 2018-10-02 Qualcomm Incorporated Tessellation in tile-based rendering
US10535185B2 (en) 2012-04-04 2020-01-14 Qualcomm Incorporated Patched shading in graphics processing
US9330495B2 (en) * 2012-08-09 2016-05-03 Qualcomm Incorporated Extending DX11 GPU for programmable vector graphics
US9619853B2 (en) * 2012-08-09 2017-04-11 Qualcomm Incorporated GPU-accelerated path rendering
US9275498B2 (en) * 2012-08-09 2016-03-01 Qualcomm Incorporated GPU-accelerated path rendering
US9082204B2 (en) 2012-08-30 2015-07-14 Qualcomm Incorporated Storage structures for stitching primitives in graphics processing
US9142060B2 (en) 2012-08-30 2015-09-22 Qualcomm Incorporated Computation reduced tessellation
US9076260B2 (en) 2012-08-30 2015-07-07 Qualcomm Incorporated Stitching for primitives in graphics processing
TWI498849B (zh) * 2012-11-05 2015-09-01 Nvidia Corp 圖形驅動程式層級解耦顯像以及顯示的方法
JP6153366B2 (ja) 2013-03-29 2017-06-28 株式会社バンダイナムコエンターテインメント 画像生成システム及びプログラム
JP6166364B2 (ja) * 2013-04-26 2017-07-19 パナソニック株式会社 情報入力表示装置および情報入力表示方法
US9401034B2 (en) 2013-04-30 2016-07-26 Microsoft Technology Licensing, Llc Tessellation of two-dimensional curves using a graphics pipeline
CN104156185A (zh) * 2013-05-13 2014-11-19 中国移动通信集团公司 三维字体显示方法及装置
KR102104057B1 (ko) 2013-07-09 2020-04-23 삼성전자 주식회사 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들
KR102109130B1 (ko) 2013-08-12 2020-05-08 삼성전자주식회사 그래픽스 프로세싱 유닛, 이의 동작 방법, 및 이를 포함하는 장치들
US9639982B2 (en) 2013-10-18 2017-05-02 Goodle Inc. On-demand transformation aware shape tessellation
KR102066533B1 (ko) 2013-11-19 2020-01-16 삼성전자 주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
KR102219294B1 (ko) 2014-02-13 2021-02-23 삼성전자 주식회사 커브 렌더링 방법 및 장치
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9836816B2 (en) 2014-04-05 2017-12-05 Sony Interactive Entertainment America Llc Varying effective resolution by screen location in graphics processing by approximating projection of vertices onto curved viewport
JP6392370B2 (ja) 2014-04-05 2018-09-19 ソニー インタラクティブ エンタテインメント アメリカ リミテッド ライアビリテイ カンパニー 様々なレンダリング及びラスタライゼーション・パラメータ下でビューポートを変化させるための、オブジェクトの効率的再レンダリング方法
US9495790B2 (en) 2014-04-05 2016-11-15 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping to non-orthonormal grid
US9710957B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Graphics processing enhancement by tracking object and/or primitive identifiers
US10068311B2 (en) 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9652882B2 (en) 2014-04-05 2017-05-16 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
DE102014007914A1 (de) 2014-05-27 2015-12-03 Elektrobit Automotive Gmbh Graphisches Darstellen von Straßen und Routen unter Benutzung von Hardware-Tesselierung
EP2985735B1 (en) 2014-08-11 2019-12-04 Samsung Electronics Co., Ltd Method and apparatus for performing tile-based path rendering
US9665975B2 (en) * 2014-08-22 2017-05-30 Qualcomm Incorporated Shader program execution techniques for use in graphics processing
CN104574309B (zh) * 2014-12-30 2018-03-16 北京像素软件科技股份有限公司 移动游戏应用中的三角形网格细分的方法及装置
KR102443697B1 (ko) 2015-09-11 2022-09-15 삼성전자주식회사 경로 스트로크를 수행하는 방법 및 장치
US11431480B2 (en) * 2019-07-11 2022-08-30 EMC IP Holding Company LLC Smart compressor based on adaptive CPU/QAT scheduling method
US11010939B2 (en) * 2019-09-12 2021-05-18 Adobe Inc. Rendering of cubic Bezier curves in a graphics processing unit (GPU)
CN112949023A (zh) * 2021-01-15 2021-06-11 桂林电子科技大学 一种基于弦长二分法的二次Bezier曲线插值方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2207840B (en) 1987-08-07 1991-09-25 Philips Electronic Associated Method of and apparatus for modifying data stored in a random access memory
US5261029A (en) * 1992-08-14 1993-11-09 Sun Microsystems, Inc. Method and apparatus for the dynamic tessellation of curved surfaces
US5473742A (en) 1994-02-22 1995-12-05 Paragraph International Method and apparatus for representing image data using polynomial approximation method and iterative transformation-reparametrization technique
US6111588A (en) 1996-12-05 2000-08-29 Adobe Systems Incorporated Creating and modifying curves on a computer display
JPH1115986A (ja) 1997-06-25 1999-01-22 Fuji Xerox Co Ltd 画像形成装置
JPH1166328A (ja) 1997-08-19 1999-03-09 Murata Mach Ltd 曲線描画装置
US6304677B1 (en) 1998-04-07 2001-10-16 Adobe Systems Incorporated Smoothing and fitting point sequences
US6204860B1 (en) * 1998-07-02 2001-03-20 Silicon Graphics, Inc. Method and apparatus for geometric model deformation using wires
US6597356B1 (en) 2000-08-31 2003-07-22 Nvidia Corporation Integrated tessellator in a graphics processing unit
CN1238819C (zh) 2000-12-05 2006-01-25 松下电器产业株式会社 三维字符生成设备及三维图形数据生成设备
JP4028979B2 (ja) 2000-12-05 2008-01-09 松下電器産業株式会社 3次元図形データ生成装置
US7318238B2 (en) 2002-01-14 2008-01-08 Microsoft Corporation Security settings for markup language elements
GB2388507B (en) 2002-05-10 2005-11-09 Imagination Tech Ltd An interface and method of interfacing between a parametric modelling unit and a polygon based rendering system.
US7385612B1 (en) * 2002-05-30 2008-06-10 Adobe Systems Incorporated Distortion of raster and vector artwork
JP4464657B2 (ja) * 2002-11-12 2010-05-19 パナソニック株式会社 曲面画像処理装置及び曲面画像処理方法
US7800631B2 (en) 2003-03-18 2010-09-21 Qualcomm Incorporated Triangle rendering using direct evaluation
US6811264B2 (en) * 2003-03-21 2004-11-02 Mitsubishi Electric Research Laboratories, Inc. Geometrically aware projector
US7042452B1 (en) * 2003-10-02 2006-05-09 Sun Microsystems, Inc. Triangle coverage estimation and edge-correct tessellation
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7564459B2 (en) * 2005-10-31 2009-07-21 Microsoft Corporation Resolution-independent curve rendering using programmable graphics hardware
JP4643485B2 (ja) * 2006-03-30 2011-03-02 株式会社東芝 描画装置、方法およびプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140045789A (ko) * 2012-10-09 2014-04-17 엘에스산전 주식회사 Hmi 장치 및 hmi 장치의 데이터 출력 방법
KR20180056932A (ko) * 2016-11-21 2018-05-30 삼성전자주식회사 커브 렌더링을 수행하는 방법 및 장치.

Also Published As

Publication number Publication date
CN101978393B (zh) 2016-12-07
EP2269172A1 (en) 2011-01-05
CA2717278A1 (en) 2009-09-24
US20090237401A1 (en) 2009-09-24
WO2009117619A1 (en) 2009-09-24
JP2011515765A (ja) 2011-05-19
KR101240815B1 (ko) 2013-03-11
JP5335888B2 (ja) 2013-11-06
CN101978393A (zh) 2011-02-16
TW201001329A (en) 2010-01-01
US8643644B2 (en) 2014-02-04

Similar Documents

Publication Publication Date Title
KR101240815B1 (ko) 그래픽 렌더링을 위한 멀티-스테이지 테셀레이션
KR101337758B1 (ko) 3차원 그래픽 하드웨어를 이용한 2차원 그래픽 렌더링 동안의 버텍스 포인트 제거
US9177351B2 (en) Multi-primitive graphics rendering pipeline
US8421794B2 (en) Processor with adaptive multi-shader
US9619853B2 (en) GPU-accelerated path rendering
US20170046812A1 (en) Consistent vertex snapping for variable resolution rendering
CN107003964B (zh) 处理未对准块传送操作
US10121276B2 (en) Infinite resolution textures
US10140750B2 (en) Method, display adapter and computer program product for improved graphics performance by using a replaceable culling program
US9659399B2 (en) System, method, and computer program product for passing attribute structures between shader stages in a graphics pipeline
WO2014025517A1 (en) Gpu-accelerated path rendering
US20210082165A1 (en) Rendering of cubic bezier curves in a graphics processing unit (gpu)
US11978234B2 (en) Method and apparatus of data compression
US20150084952A1 (en) System, method, and computer program product for rendering a screen-aligned rectangle primitive
CN115836317A (zh) 增量三元组索引压缩
US11869123B2 (en) Anti-aliasing two-dimensional vector graphics using a compressed vertex buffer
US11417058B2 (en) Anti-aliasing two-dimensional vector graphics using a multi-vertex buffer
US20210398349A1 (en) Fine grained replay control in binning hardware

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151230

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161229

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171228

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190107

Year of fee payment: 7