KR101091374B1 - 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템 - Google Patents

테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR101091374B1
KR101091374B1 KR1020090089198A KR20090089198A KR101091374B1 KR 101091374 B1 KR101091374 B1 KR 101091374B1 KR 1020090089198 A KR1020090089198 A KR 1020090089198A KR 20090089198 A KR20090089198 A KR 20090089198A KR 101091374 B1 KR101091374 B1 KR 101091374B1
Authority
KR
South Korea
Prior art keywords
tessellation
processing units
memory
processing
data
Prior art date
Application number
KR1020090089198A
Other languages
English (en)
Other versions
KR20100036183A (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 KR20100036183A publication Critical patent/KR20100036183A/ko
Application granted granted Critical
Publication of KR101091374B1 publication Critical patent/KR101091374B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

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

Abstract

그래픽 프로세서를 통해 단일 패스로 테셀레이션을 수행하기 위한 시스템 및 방법은 그래픽 프로세서 내 처리 자원들을 상이한 테셀레이션 연산을 수행하는 세트들로 분리한다. 버텍스 데이터 및 테셀레이션 파라미터는 메모리에 저장되는 대신 하나의 처리 자원으로부터 다른 자원으로 직접 라우트된다. 그러므로, 표면 패치 디스크립션은 그래픽 프로세서에 제공되며 중간 데이터를 메모리에 저장하지 않고 그래픽 프로세서를 통해 중단없는 단일 패스로 테셀레이션이 완료된다.
그래픽 프로세서, 단일 패스, 테셀레이션, 패치 디스크립션, 테셀레이션 제어 쉐이더, 테셀레이션 평가 쉐이더

Description

테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템{METHOD AND SYSTEM FOR PERFORMING TESSELLATION IN A SINGLE PASS}
본 발명은 일반적으로 3차원 표면 패치(surface patches)의 테셀레이션(tessellation)에 관한 것으로, 특히, 그래픽 처리 파이프라인(graphics processing pipeline)을 통해 단일 패스(single pass)로 테셀레이션을 수행하는 것에 관한 것이다.
테셀레이션 하드웨어용 프로그래밍 모델은 3차원 표면 패치의 테셀레이션을 수행하기 위해 실행되는 새로운 쉐이더 프로그램을 내놓기 위해 개발되었다. 통상의 하드웨어 아키텍쳐는 2회 패스(two pass) 접근법을 이용하여 테셀레이션을 수행한다. 그래픽 처리 파이프라인을 통한 첫번째 패스 동안, 버텍스 쉐이더(vertex shader) 및 테셀레이션 제어 쉐이더(tessellation control shader)(또는 제어 헐 쉐이더(control hull shader)) 프로그램이 실행되며 버텍스 데이터 및 테셀레이션 파라미터는 메모리에 저장된다. 첫번째 패스가 완료된 후, 그래픽 처리 파이프라인이 재구성된다. 그래픽 처리 파이프라인을 통한 두번째 패스 동안, 버텍스 데이터 및 테셀레이션 파라미터가 메모리로부터 판독되고 테셀레이션 평가 쉐이더(tessellation evaluation shader)(또는 도메인 쉐이더(domain shader) 및 지오 메트리 쉐이더(geometry shader) 프로그램이 실행되어 테셀레이션 연산을 완료한다. 전형적으로, 소프트웨어 어플리케이션 프로그램 또는 장치 드라이버는 첫번째 패스와 두번째 패스를 시작시킨다.
따라서, 본 기술 분야에서 테셀레이션 쉐이더 프로그램을 실행하기 위한 개선된 시스템 및 방법이 필요하다.
그래픽 프로세서를 통해 단일 패스로 테셀레이션을 수행하기 위한 시스템 및 방법은 그래픽 프로세서 내 처리 자원들을 상이한 테셀레이션 연산을 수행하는 세트들로 분리한다. 버텍스 데이터 및 테셀레이션 파라미터는 메모리에 저장되는 대신 하나의 처리 자원으로부터 다른 자원으로 직접 라우트된다. 그러므로, 표면 패치 디스크립션은 그래픽 프로세서에 제공되며, 중간 데이터를 메모리에 저장하지 않고 그래픽 프로세서를 통한 중단없는 단일 패스로 테셀레이션이 완료된다.
그래픽 프로세서를 통해 단일 패스로 테셀레이션을 수행하기 위한 본 발명의 방법의 여러가지 실시예는 상기 그래픽 프로세서 내에서 상기 그래픽 프로세서의 제1 세트의 처리 유닛을 구성하고 및 제2 세트의 처리 유닛을 구성하는 것을 포함한다. 상기 제1 세트의 처리 유닛은 테셀레이션 제어 쉐이더를 실행하여 표면 패치를 처리하도록 구성되어, 디테일의 테셀레이션 레벨을 계산하고 다수의 버텍스를 포함하는 그래픽 프리미티브를 생성한다. 상기 제2 세트의 처리 유닛은 테셀레이 션 평가 쉐이더를 실행하도록 구성되어 상기 다수의 버텍스 중 하나를 각각 처리한다. 그 다음 상기 테셀레이션 제어 쉐이더 및 상기 테셀레이션 평가 쉐이더는 상기 제1 세트의 처리 유닛 및 상기 제2 세트의 처리 유닛을 통해 상기 표면 패치를 단일 패스로 테셀레이션하도록 실행되어 처리된 버텍스들을 생성한다.
본 발명의 다양한 실시예들은 테셀레이션을 그래픽 프로세서를 통해 단일 패스로 수행하기 위한 시스템을 포함한다. 상기 그래픽 프로세서는 제1 세트의 처리 유닛, 제2 세트의 처리 유닛 및 크로스바 인터커넥트를 포함한다. 상기 제1 세트의 처리 유닛은 테셀레이션 제어 쉐이더를 실행하여 표면 패치를 처리하고 다수의 버텍스를 포함하는 그래픽 프리미티브를 생성하도록 구성된다. 상기 제2 세트의 처리 유닛은 테셀레이션 평가 쉐이더를 실행하여 상기 다수의 버텍스 중 하나를 각각 처리하도록 구성된다. 상기 크로스바 인터커넥트는 상기 제1 세트의 처리 유닛 및 상기 제2 세트의 처리 유닛에 연결되어 상기 제1 세트의 처리 유닛에 의해 출력된 상기 다수의 버텍스를 상기 제2 세트의 처리 유닛의 입력으로 라우트하도록 구성된다.
전술한 본 발명의 특징이 상세히 이해될 수 있도록, 앞에서 간략하게 요약한 본 발명은 첨부 도면에 예시된 몇몇 실시예들을 참조하여 더욱 상세히 설명될 수 있다. 그러나, 첨부 도면은 단지 본 발명의 전형적인 실시예를 예시하며 그러므로 본 발명은 동일하게 효과적인 다른 실시예를 수용할 수 있기 때문에 본 발명의 범주를 한정하는 것으로 간주되지 않음을 알아야 한다.
다음의 설명에서, 본 발명의 더욱 확실한 이해를 도모하기 위하여 많은 특정한 세부사항이 설명된다. 그러나, 본 기술 분야에서 숙련자라면 본 발명이 하나 이상의 이러한 특정 세부사항 없이도 실시될 수 있음을 인식할 것이다. 다른 예에서, 공지의 특징들은 본 발명을 불명확하게 하지 않도록 설명되지 않을 것이다.
시스템 개요
도 1은 본 발명의 하나 이상의 양태를 구현하기 위하여 구성된 컴퓨터 시스템(100)을 예시하는 블록도이다. 컴퓨터 시스템(100)은 중앙 처리 장치(CPU)(102), 및 버스 경로를 경유하여 메모리 브리지(105)를 통해 통신하는 시스템 메모리(104)를 포함한다. 메모리 브리지(105)는 도 1에 도시된 바와 같이 CPU(102) 내에 통합될 수 있다. 대안으로, 메모리 브리지(105)는 통상의 장치, 예컨대, 버스를 경유하여 CPU(102)에 연결된 노스브리지 칩일 수 있다. 메모리 브리지(105)는 통신 경로(106)(예컨대, 하이퍼트랜스포트 링크(HyperTransport link))를 경유하여 I/O (입/출력) 브리지(107)에 연결된다. 예컨대, 사우스브리지 칩일 수 있는 I/O 브리지(107)는 하나 이상의 사용자 입력 장치(108)(예컨대, 키보드, 마우스)로부터 사용자 입력을 수신하며, 그 입력을 경로(106) 및 메모리 브리지(105)를 경유하여 CPU(102)에 전달한다. 병렬 처리 서브시스템(112)은 버스 또는 다른 통신 경로(113)(예컨대, PCI 익스프레스(PCI Express), 가속 그래픽 포트(Accelerated Graphics Port), 또는 하이퍼트랜스포트 링크)를 경유하여 메모리 브리지(105)에 연결되며, 일 실시예에서, 병렬 처리 서브시스템(112)은 디스플레이 장치(110)(예컨대, 통상의 CRT 또는 LCD 기반 모니터)에 픽셀을 전달하는 그래픽 서브시스템이다. 시스템 디스크(114)도 I/O 브리지(107)에 연결된다. 스위치(116)는 I/O 브리지(107)와 네트워크 어댑터(118) 및 각종 애드인 카드(add-in cards)(120 및 121)와 같은 다른 컴포넌트와의 연결을 제공한다. USB 또는 다른 포트 연결부, CD 드라이브, DVD 드라이브, 필름 기록 장치 등을 포함하는 다른 컴포넌트(명시적으로 도시되지 않음)도 I/O 브리지(107)에 연결될 수 있다. 도 1의 각종 컴포넌트들을 상호연결하는 통신 경로는 PCI(Peripheral Component Interconnect), PCI Express(PCI-E), AGP(Accerlerated Graphics Port), 하이퍼트랜스포트, 어떤 다른 버스 또는 점대점 통신 프로토콜(들)과 같은 모든 적합한 프로토콜들을 이용하여 구현될 수 있으며, 상이한 장치들간의 연결은 본 기술 분야에서 공지된 바와 같이 상이한 프로토콜을 이용할 수 있다.
일 실시예에서, 병렬 처리 서브시스템(112)은, 예를 들어, 비디오 출력 회로를 포함하는 그래픽 및 비디오 처리에 최적화된 회로를 포함하며, 그래픽 처리 유닛(GPU)을 구성한다. 다른 실시예에서, 병렬 처리 서브시스템(112)은 범용 처리에 최적화된 회로를 포함하며, 본 명세서에서 더욱 상세히 기술되는 계산용 기반 아키텍처를 보유한다. 또 다른 실시예에서, 병렬 처리 서브시스템(112)은 메모리 브리지(105), CPU(102), 및 I/O 브리지(107)와 같은 하나 이상의 다른 시스템 요소와 함께 통합되어 시스템 온 칩(SoC)을 구성할 수 있다.
본 명세서에 도시된 시스템은 예시적이며 변경과 변형이 가능함이 인식될 것이다. 브리지의 개수와 배열을 포함하는 연결 토폴로지(connection topology)는 희망하는 대로 변형될 수 있다. 예를 들어, 몇몇 실시예에서, 시스템 메모리(104) 는 브리지를 통하기보다는 직접 CPU(102)에 연결되며, 다른 장치는 메모리 브리지(105) 및 CPU(102)를 경유하여 시스템 메모리(104)와 통신한다. 다른 대안의 토폴로지에서, 병렬 처리 서브시스템(112)은 메모리 브리지(105)에 연결되기보다는 I/O 브리지(107)에 연결되거나 직접 CPU(102)에 연결된다. 또 다른 실시예에서, CPU(102), I/O 브리지(107), 병렬 처리 서브시스템(112) 및 메모리 브리지(105) 중 하나 이상이 하나 이상의 칩으로 통합된다. 본 명세서에 도시된 특정한 컴포넌트는 선택적이며, 예를 들어, 애드인 카드 또는 주변 장치는 몇 개라도 지원될 수 있다. 몇몇 실시예에서, 스위치(116)가 제거되고, 네트워크 어댑터(118) 및 애드인 카드(120, 121)가 직접 I/O 브리지(107)에 연결된다.
도 2는 본 발명의 일 실시예에 따른 병렬 처리 서브시스템(112)을 예시한다. 도시된 바와 같이, 병렬 처리 서브시스템(112)은 하나 이상의 병렬 처리 유닛(parallel processing units: PPUs)(202)을 포함하며, 그 각각은 로컬 병렬 처리(parallel processing: PP) 메모리(204)에 연결된다. 일반적으로, 병렬 처리 서브시스템은 다수(U)의 PPU를 포함하며, 여기서 U≥1 이다. (여기서, 여러개의 같은 객체들은 그 객체를 식별하는 참조 번호와 필요로 하는 개수를 식별하는 괄호 숫자로 표시된다.) PPU(202) 및 병렬 처리 메모리(204)는 프로그램가능 프로세서, 주문형 반도체(application specific integrated circuits: ASICs), 또는 메모리 장치와 같은 하나 이상의 집적 회로 소자를 이용하여 구현될 수 있거나 기술적으로 실행가능한 다른 어떤 형태로도 구현될 수 있다.
다시 도 1을 참조하면, 몇몇 실시예에서, 병렬 처리 서브시스템(112)에서 일 부 또는 모든 PPU(202)는 CPU(102) 및/또는 시스템 메모리(104)에 의해 공급된 그래픽 데이터로부터 픽셀 데이터를 발생하고, (예컨대, 통상의 프레임 버퍼를 포함하는 그래픽 메모리로서 사용될 수 있는) 로컬 병렬 처리 메모리(204)와 상호작용하여 픽셀 데이터를 저장 및 갱신하고, 픽셀 데이터를 디스플레이 장치(110)에 전달하는 등과 관련된 각종 작업을 수행하도록 구성될 수 있는 렌더링 파이프라인을 갖는 그래픽 프로세서이다. 몇몇 실시예에서, 병렬 처리 서브시스템(112)은 그래픽 프로세서로서 동작하는 하나 이상의 PPU(202) 및 범용 컴퓨테이션용으로 사용된 하나 이상의 PPU(202)를 포함할 수 있다. PPU는 동일하거나 상이할 수 있으며, 각 PPU는 자체적으로 전용의 병렬 처리 메모리 장치(들)를 가질 수 있고 또는 전용의 병렬 처리 메모리 장치(들)를 갖지 않을 수 있다. 하나 이상의 PPU(202)는 데이터를 디스플레이 장치(110)로 출력할 수 있고 또는 각각의 PPU(202)는 데이터를 하나 이상의 디스플레이 장치(110)에 출력할 수 있다.
동작 시, CPU(102)는 다른 시스템 컴포넌트의 동작을 제어하고 조정하는 컴퓨터 시스템(100)의 마스터 프로세서이다. 특히, CPU(012)는 PPU(202)의 동작을 제어하는 명령을 발행한다. 몇몇 실시예에서, CPU(102)는 시스템 메모리(104), 병렬 처리 메모리(204), 또는 CPU(102)와 PPU(202)의 양측에 액세스할 수 있는 또 다른 저장 장소에 위치할 수 있는 커맨드 버퍼(도 1 또는 도 2에서 명시적으로 도시되지 않음)에 각 PPU(202)에 필요한 커맨드 스트림을 기록한다. PPU(202)는 그 커맨드 스트림을 커맨드 버퍼로부터 판독한 다음 CPU(102)의 동작과 비동기적으로 커맨드를 실행한다. CPU(102)는 또한 PPU(202)가 커맨드 버퍼 내 커맨드들에 응답하 여 판독할 수 있는 데이터 버퍼를 생성할 수 있다. 각각의 커맨드 및 데이터 버퍼는 다수의 PPU(202)에 의해 판독될 수 있다.
다시 도 2를 참조하면, 각 PPU(202)는 메모리 브리지(105)에 연결된(또는 대안의 실시예에서는 직접 CPU(102)에 연결된) 통신 경로(113)를 통하여 컴퓨터 시스템(100)의 나머지들과 통신하는 I/O (입/출력) 유닛(205)을 포함한다. PPU(202)와 컴퓨터 시스템(100)의 나머지들과의 연결은 또한 변경될 수 있다. 몇몇 실시예에서, 병렬 처리 서브시스템(112)은 컴퓨터 시스템(100)의 확장 슬롯에 삽입될 수 있는 애드인 카드로서 구현된다. 다른 실시예에서, PPU(202)는 메모리 브리지(105) 또는 I/O 브리지(107)와 같은 버스 브리지와 함께 단일 칩 상에 통합될 수 있다. 또 다른 실시예에서, 일부 또는 모든 PPU(202)는 CPU(102)와 함께 단일 칩 상에서 통합될 수 있다.
일 실시예에서, 통신 경로(113)는 본 기술 분야에서 공지된 바와 같이 각 PPU(202)에 전용 통로(lane)가 할당된 PCI-E 링크이다. 다른 통신 경로 또한 사용될 수 있다. I/O 유닛(205)은 통신 경로(113)를 통해 전송하기 위한 패킷(또는 다른 신호)을 발생하고 또한 통신 경로(113)로부터 모든 인입 패킷(또는 다른 신호)를 수신하고, 이 인입 패킷을 PPU(202)의 적절한 컴포넌트로 보내준다. 예를 들어, 처리 작업과 관련한 커맨드는 호스트 인터페이스(206)에 보내질 수 있고, 반면 메모리 동작(예컨대, 병렬 처리 메모리(204)로부터 판독 또는 병렬 처리 메모리에 기록하는 동작)과 관련한 커맨드는 메모리 크로스바 유닛(210)으로 보내질 수 있다. 호스트 인터페이스(206)는 각 커맨드 버퍼를 판독하고 커맨드 버퍼에 의해 특 정된 작업을 프론트 엔드(frone end)(212)에 출력한다.
각각의 PPU(202)는 고도의 병렬 처리 아키텍쳐로 구현하는 것이 유익하다. 상세하게 도시된 바와 같이, PPU(202(0))는 처리 클러스터 어레이(230)를 포함하며, 처리 클러스터 어레이는 다수개(C)의 범용 처리 클러스터(general processing clusters: GPCs)(208)를 포함하며, 여기서 C≥ 이다. 각각의 GPC(208)는 동시에 다수(예컨대, 수백 또는 수천)의 스레드들(threads)을 동시에 실행시킬 수 있으며, 여기서 각 스레드는 프로그램의 한 예이다. 다양한 응용예에서, 상이한 형태의 프로그램을 처리 또는 상이한 형태의 컴퓨테이션을 수행하기 위해 상이한 GPC(208)가 할당될 수 있다. 예를 들어, 그래픽 어플리케이션에서, 제1 세트의 GPC(208)는 테셀레이션 연산을 수행하고 패치들의 프리미티브 토폴로지를 생성하도록 할당되며, 제2 세트의 GPC(208)는 테셀레이션 쉐이딩을 수행하여 프리미티브 토폴로지의 패치 파라미터들을 평가하고 버텍스 위치 및 다른 버텍스의 속성(per-vertex attributes)을 결정하도록 할당될 수 있다. GPC(208)는 프로그램 또는 컴퓨테이션의 각 유형마다 발생하는 작업부하(workload)에 따라 가변적으로 할당될 수 있다. 대안으로, 모든 GPC(208)는 타임-슬라이스 스킴을 이용하여 상이한 처리 작업 사이에서 스위치하는 처리 작업을 실행하도록 할당될 수 있다.
GPC(208)는 작업 배분 유닛(200)을 통해 실행될 처리 작업을 수신하며, 작업 배분 유닛은 처리 작업을 규정하는 커맨드를 프론트 엔드 유닛(212)으로부터 수신한다. 처리 작업은 처리될 데이터, 예를 들어, 표면(패치) 데이터, 프리미티브 데이터, 버텍스 데이터 및/또는 픽셀 데이터 뿐만 아니라, 상태 파라미터 및 데이터 가 어떻게 처리되는지 (예컨대 무슨 프로그램이 실행되는지)를 규정하는 커맨드에 대한 포인터를 포함한다. 작업 배분 유닛(200)은 작업에 대응하는 포인터를 페치하도록 구성될 수 있고, 작업 배분 유닛(200)은 포인터를 프론트 엔드(212)로부터 수신할 수 있고, 또는 작업 배분 유닛(200)은 데이터를 직접 수신할 수 있다. 본 발명의 몇몇 실시예들에서, 인덱스들은 어레이 내 데이터의 위치를 명시한다. 프론트 엔드(212)는 커맨드 버퍼에 의해 명시된 처리가 개시되기 전에 GPC(208)가 확실하게 유효한 상태로 구성되게 한다.
PPU(202)가 그래픽 처리용으로 사용될 때, 예를 들어, 각 패치마다의 처리 작업부하는 다수의 GPC(208)에 테셀레이션 처리를 배분할 수 있도록 하기 위해 대략 균일한 크기의 작업으로 분할된다. 작업 배분 유닛(200)은 다수의 GPC(208)에게 처리할 작업을 제공할 수 있는 빈도로 작업을 출력하도록 구성될 수 있다. 본 발명의 몇몇 실시예에서, GPC(208)의 부분은 상이한 형태의 처리를 실행하도록 구성된다. 예를 들어, 제1 부분은 버텍스 쉐이딩과 토폴로지 생성을 수행하도록 구성될 수 있고, 제2 부분은 테셀레이션과 지오메트리 쉐이딩을 수행하도록 구성될 수 있으며, 제3 부분은 스크린 공간에서 픽셀 쉐이딩을 수행하여 렌더링된 이미지를 생성하도록 구성될 수 있다. 상이한 형태의 처리를 효과적으로 실행하기 위해 GPC(208)의 부분들을 할당하는 능력은 상이한 형태의 처리에 의해 생성된 데이터의 팽창과 수축을 수용한다. GPC(208)에 의해 생성된 중간 데이터는 데이터를 하류측 GPC(208)에서 받아들이는 레이트가 데이터를 상류측 GPC(208)에서 생성되는 레이트보다 뒤떨어질 때 그 중간 데이터가 GPC(208) 사이에서 최소한의 지연으로 전송되 게 버퍼될 수 있다.
메모리 인터페이스(214)는 다수(D)의 메모리 파티션 유닛으로 분할될 수 있고, 메모리 파티션 유닛은 각기 병렬 처리 메모리(204)의 일부에 직접 연결되며, 여기서 D≥1 이다. 메모리의 각 부분은 일반적으로 하나 이상의 메모리 장치(예컨대, DRAM(220))로 이루어진다. 본 기술 분야에서 숙련된 자들은 DRAM(220)이 다른 적합한 저장 장치로 대체될 수 있고 일반적으로 통상의 설계로 만들 수 있음을 인식할 것이다. 그러므로 상세한 설명은 생략된다. 프레임 버퍼 또는 텍스처 맵과 같은 렌더 타겟(render targets)은 DRAM(220)에 걸쳐서 저장될 수 있으며, 그럼으로써 파티션 유닛(215)이 각각의 렌더 타겟의 부분들을 병렬로 기록하여 병렬 처리 메모리(204)의 이용가능한 대역폭을 효율적으로 사용하게 해준다.
GPC(208) 중 임의의 GPC는 병렬 처리 메모리(204) 내 파티션 유닛(215) 중 임의의 곳에 기록될 데이터를 처리할 수 있다. 크로스바 유닛(210)은 각각의 GPC(208)의 출력을 임의의 파티션 유닛(215)의 입력으로 또는 추가 처리를 위해 또 다른 GPC(208)에게 라우트하도록 구성된다. GPC(208)는 크로스바 유닛(210)을 통해 메모리 인터페이스(214)와 통신하여 각종 외부 메모리 장치로부터 판독하고 기록한다. 일 실시예에서, 크로스바 유닛(210)은 메모리 인터페이스(214)에 연결되어 I/O 유닛(205)과 통신할 뿐만 아니라, 로컬 병렬 처리 메모리(204)에 연결됨으로써, 상이한 GPC(208) 내 처리 코어가 시스템 메모리(104) 또는 PPU(202)에 대하여 로컬이 아닌 다른 메모리와 통신가능하게 해준다. 크로스바 유닛(210)은 GPC(208)와 파티션 유닛(215) 사이에서 트래픽 스트림을 분리하는 가상 채널을 사 용할 수 있다.
또한, GPC(208)는 다음의 것으로만 국한되지 않지만 선형 및 비선형 데이터 변환, 비디오 및/또는 오디오 데이터의 필터링, 모델링 동작(예컨대, 물리법칙을 적용하여 객체의 위치, 속도 및 다른 속성을 결정하는 것), 및 이미지 렌더링 연산(예컨대, 테셀레이션 쉐이더, 버텍스 쉐이더, 지오메트리 쉐이더, 및/또는 픽셀 쉐이더 프로그램) 등을 포함하는 광범위한 어플리케이션과 관련한 처리 작업들을 실행하도록 프로그램될 수 있다. PPU(202)는 시스템 메모리(104) 및/또는 로컬 병렬 처리 메모리(204)로부터의 데이터를 내부(온-칩) 메모리로 전달하고, 그 데이터를 처리하며, 결과 데이터를 다시 시스템 메모리(104) 및/또는 로컬 병렬 처리 메모리(204)에 기록할 수 있으며, 이 경우 그러한 데이터는 CPU(102) 또는 또 다른 병렬 처리 서브시스템(112)을 포함하는 다른 시스템 컴포넌트들에 의해 액세스될 수 있다.
PPU(202)는 어떤 로컬 메모리도 포함하지 않고 아무리 많은 양의 로컬 병렬 처리 메모리(204)라도 가질 수 있으며, 로컬 메모리와 시스템 메모리를 어떠한 조합으로도 사용할 수 있다. 예를 들어, PPU(202)는 통합 메모리 구조(unified memory architecture: UMA) 실시예에서 그래픽 프로세서일 수 있다. 이 실시예에서, 전용의 그래픽(병렬 처리) 메모리는 거의 또는 전혀 제공되지 않을 것이며, PPU(202)는 오로지 또는 거의 전적으로 시스템 메모리를 사용할 것이다. UMA 실시예에서, PPU(202)는 브리지 칩 또는 프로세서로 통합될 수 있으며 또는 브리지 칩 또는 다른 통신 수단을 통해 PPU(202)를 시스템 메모리에 연결하는 고속 링크(예컨 대, PCI-E)를 갖는 개별 칩으로서 제공될 수 있다.
전술한 바와 같이, 병렬 처리 서브시스템(112)에는 몇 개의 PPU(202)라도 포함될 수 있다. 예를 들어, 다수의 PPU(202)는 단일 애드인 카드에 제공될 수 있고, 또는 다수의 애드인 카드가 통신 경로(113)에 연결될 수 있고, 또는 하나 이상의 PPU(202)가 브리지 칩으로 통합될 수 있다. 다중-PPU 시스템에서 PPU(202)는 서로 동일하거나 서로 상이할 수 있다. 예를 들어, 상이한 PPU(202)는 상이한 개수의 처리 코어, 상이한 양의 로컬 병렬 처리 메모리 등을 가졌을 것이다. 다수의 PPU(202)가 존재하는 경우, 이들 PPU는 병렬로 동작하여 단일 PPU(202)에서 가능한 것보다 더 높은 처리량으로 데이터를 처리할 수 있다. 하나 이상의 PPU(202)를 포함하는 시스템은 데스크탑, 랩탑, 또는 핸드헬드 퍼스널 컴퓨터, 서버, 워크스테이션, 게임 콘솔, 및 임베디드 시스템 등을 포함하는 여러 구성 및 폼 팩터로 구현될 수 있다.
처리 클러스터 어레이의 개요(Processing Cluster Array Overview)
도 3a는 본 발명의 일 실시예에 따른, 도 2의 하나의 PPU(202) 내 GPC(208)의 블록도이다. 각 GPC(208)는 많은 개수의 스레드를 병렬로 실행하도록 구성될 수 있으며, 여기서 "스레드"라는 용어는 특정한 세트의 입력 데이터를 실행하는 특정 프로그램의 예를 지칭한다. 몇몇 실시예에서, 단일 명령어 다중 데이터(single-instruction, multiple-data: SIMD)의 명령 발행 기술은 다수의 독립 명령어 유닛(independent instruction units)을 제공하지 않고도 다수의 스레드의 병렬 실행을 지원하도록 사용된다. 다른 실시예에서, 단일 명령어 다중 스레 드(single-instruction multiple-thread: SIMT) 기술은 각각의 GPC(208) 내 일련의 처리 엔진으로 명령어를 발행하도록 구성된 공통 명령 유닛(common instruction unit)을 이용하여, 대체로 동기화된 많은 개수의 스레드들의 병렬 실행을 지원하는데 사용된다. 전형적으로 모든 처리 엔진이 동일한 명령을 실행하는 SIMD 실행 체제와 달리, SIMT 실행은 소정 스레드 프로그램을 통해 상이한 스레드들로 하여금 갈라지는 실행 경로를 더욱 용이하게 쫓아가게 한다. 본 기술 분야에서 숙련된 자들은 SIMD 처리 체제가 SIMT 처리 체제의 기능적인 부분집합을 나타낸다는 것을 이해할 것이다.
그래픽 어플리케이션에서, GPC(208)는 다음으로 국한되지 않지만 프리미티브 세트업, 래스터화(rasterization), 및 z 컬링(culling)을 포함할 수 있는 스크린 공간 그래픽 처리 기능들을 수행하기 위한 프리미티브 엔진을 포함하도록 구성될 수 있다. 도 3a에 도시된 바와 같이, 세트업 유닛(302)은 그래픽 프리미티브를 처리하기 위한 명령어를 수신하고 버퍼로부터 그래픽 프리미티브 파라미터를 판독한다. 버퍼는 L1 캐시(315), 파티션 유닛(215), 또는 PP 메모리(204)에 저장될 수 있다. 래스터라이저/z컬 유닛(303)은 그래픽 프리미티브 파라미터를 수신하고 래스터라이저/z컬 유닛(303)에 할당된 픽셀들과 교차하는 프리미티브를 래스터화한다. 각각의 픽셀은 단지 하나의 래스터라이저/z컬 유닛(303)에만 할당되며, 그래서 래스터라이저/z컬 유닛(303)에 할당되지 않은 픽셀과 교차하는 그래픽 프리미티브의 부분들은 폐기된다. 래스터라이저/z컬 유닛(303)은 또한 z 컬링을 수행하여 시각적으로 표시되지 않는 그래픽 프리미티브의 부분들을 제거하기도 한다. z preROP 유닛(304)은 z 데이터를 액세스하기 위한 어드레스 변환을 수행하고 각종 z 처리 모드에 기반하여 z 데이터의 순서(ordering)를 유지한다.
GPC(208)의 동작은 (세트업 유닛(302), 래스터라이저/z컬 유닛(303) 및 z preROP 유닛(304)을 경유하여) 작업 배분 유닛(200)으로부터 수신된 처리 작업을 스트리밍 다중프로세서 유닛(SMU)(310)으로 배분하는 파이프라인 매니저(305)를 통해 제어되는 것이 유리하다. 파이프라인 매니저(305)는 또한 SMU(310)에 의해 출력된 처리된 데이터의 목적지를 특정함으로써 작업 배분 크로스바(330)를 제어하도록 구성될 수 있다.
일 실시예에서, 각각의 GPC(208)는 다수(M)(M≥1)의 SMU(310)를 포함하며, 각각의 SMU(310)는 하나 이상의 스레드 그룹을 처리하도록 구성된다. 또한, 각각의 SMU(310)는 파이프라인될 수 있는 동일한 일련의 기능 유닛(예컨대, 산술 논리 유닛 등)을 포함하는 것이 유리하며, 이로써 본 기술 분야에서 공지된 바와 같이 이전의 명령어가 종료되기 전에 새로운 명령어가 발행되게 해준다. 기능 유닛의 어떠한 조합이라도 제공될 수 있다. 일 실시예에서, 기능 유닛은 정수 및 부동 소수점 산술(예컨대, 더하기 및 곱하기), 비교 연산, 부울린 연산(AND, OR, XOR), 비트-시프트, 및 각종 대수 함수(예컨대, 평면 보간(planar interpolation), 삼각(trignometric), 지수(exponential), 및 로그(logarithmic) 함수 등)의 계산을 포함하는 각종 연산을 지원하며, 동일한 기능적 유닛의 하드웨어가 상이한 연산을 수행하도록 강화될 수 있다.
특정 GPC(208)에게 전송된 일련의 명령어들은 앞에서 규정한 바와 같이 스레 드를 구성하며, SMU(310) 내 병렬 처리 엔진들(도시되지 않음) 도처에서 동시에 실행하는 소정 개수의 스레드들의 집합은 본 명세서에서 "스레드 그룹"으로 지칭된다. 본 명세서에서 사용된 바와 같은 "스레드 그룹"은 상이한 입력 데이터에 대해 동일한 프로그램을 동시에 실행하는 스레드 그룹을 지칭하며, 그룹의 각 스레드는 SMU(310) 내 상이한 처리 엔진에 할당된다. 스레드 그룹은 SMU(310) 내 처리 엔진의 개수보다 적은 개수의 스레드를 포함할 수 있으며, 이 경우 몇몇의 처리 엔진은 그 스레드 그룹이 처리되고 있을 때의 사이클 동안 유휴상태로 될 것이다. 스레드 그룹은 또한 SMU(310) 내 처리 엔진의 개수보다 많은 스레드를 포함할 수 있으며, 이 경우 다수의 클럭 사이클에 걸쳐 처리가 수행될 것이다. 각각의 SMU(310)는 G개의 스레드 그룹까지 동시에 지원할 수 있기 때문에, G x M 스레드 그룹까지 어떤 소정 시간에서 GPC(208)에서 실행될 수 있음은 물론이다.
추가적으로, 다수의 관련된 스레드 그룹이 SMU(310) 내에서 같은 시간에 (상이한 실행 국면에서) 활성화될 수 있다. 이러한 스레드 그룹의 집합은 본 명세서에서 "협력 스레드 어레이(cooperative thread array: "CTA")"라고 지칭된다. 특정 CTA의 크기는 m*k 와 같고, 여기서 k는 스레드 그룹에서 동시에 실행하는 스레드들의 개수이며 전형적으로 SMU(310) 내 병렬 처리 엔진들의 개수의 정수배이며, m은 SMU(310) 내에서 동시에 활성화된 스레드 그룹의 개수이다. CTA의 크기는 일반적으로 프로그래머에 의해 그리고 메모리 또는 레지스터와 같이 CTA에서 이용가능한 하드웨어 자원의 양에 의해 결정된다.
각각의 스레드에는 배타적인 로컬 어드레스 공간이 이용가능하며 CTA 내 스 레드들 사이에서 데이터를 전달하기 위해 공유된 CTA의 어드레스 공간(shared per-CTA address space)이 사용된다. 스레드의 로컬 어드레스 공간과 CTA의 어드레스 공간에 저장된 데이터는 L1 캐시(320)에 저장되며 L1 캐시(320) 내 데이터를 소중히 유지하기 위하여 축출법(eviction policy)이 사용될 수 있다. 각각의 SMU(310)는 적재와 저장 동작을 수행하기 위해 사용된 대응하는 L1 캐시(320) 내 공간을 사용한다. 각각의 SMU(310)는 또한 스레드들 사이에서 데이터를 전달하는데 사용될 수 있고 모든 GPC(208) 사이에서 공유되는 파티션 유닛(215) 내 L2 캐시에 액세스할 수 있다. 마지막으로, SMU(310)는 또한 예컨대, 병렬 처리 메모리(204) 및/또는 시스템 메모리(104)를 포함할 수 있는 오프-칩 "전역(global)" 메모리에 액세스할 수 있다. L2 캐시는 전역 메모리에 기록되고 그로부터 판독된 데이터를 저장하는데 사용될 수 있다. PPU(202) 외부의 어떤 메모리라도 전역 메모리로서 사용될 수 있음을 이해해야 한다.
그래픽 어플리케이션에서, GPC(208)는 각각의 SMU(310)가 텍스처 맵핑 연산, 예컨대, 텍스처 샘플 위치 결정, 텍스처 데이터 판독, 및 텍스처 데이터 필터링의 연산을 수행하기 위한 텍스처 유닛(315)에 연결되도록 구성될 수 있다. 텍스처 데이터는 메모리 인터페이스(214)를 통해 판독되고 L2 캐시, 병렬 처리 메모리(204), 또는 필요하다면 시스템 메모리(104)로부터 패치된다. 텍스처 유닛(315)은 텍스처 데이터를 내부 캐시에 저장하도록 구성될 수 있다. 몇몇 실시예에서, 텍스처 유닛(315)은 L1 캐시(320)에 연결되며 텍스처 데이터는 L1 캐시(320)에 저장된다. 각각의 SMU(310)는 처리된 작업을 추가 처리를 위해 또 다른 GPC(208)에 제공하기 위하여 또는 처리된 작업을 크로스바 유닛(210)을 통하여 L2 캐시, 병렬 처리 메모리(204), 또는 시스템 메모리(104)에 저장하기 위하여 상기 처리된 작업을 작업 배분 크로스바(330)로 출력한다. preROP (pre-raster operations)(325)는 SMU(310)로부터 데이터를 수신하고, 데이터를 파티션 유닛(215) 내 ROP 유닛으로 보내며, 그리고 컬러 블렌딩(color blending)을 위한 최적화를 수행하고, 픽셀 컬러 데이터를 구성하며, 어드레스 변환을 수행하도록 구성된다.
본 명세서에서 기술된 핵심 아키텍처는 예시적이며 변경과 변형 가능함이 인식될 것이다. GPC(208)에는 임의 개수의 처리 엔진, 예컨대, SMU(310), 텍스처 유닛(315), 또는 preROP(325)가 포함될 수 있다. 또한, 하나의 GPC(208)만이 도시되어 있지만, PPU(202)는 GPC(208)가 특정 처리 작업을 수신하느냐에 따라 실행 거동이 좌우되지 않도록 서로 유리하게 기능적으로 유사한 몇 개의 GPC(208)라도 포함할 수 있다. 또한, 각각의 GPC(208)는 별개의 특정한 처리 엔진, L1 캐시(320) 등을 이용하여 다른 GPC(208)와 무관하게 동작하는 것이 유리하다.
도 3b는 본 발명의 일 실시예에 따른, 도 2의 하나의 PPU(202) 내 파티션 유닛(215)의 블록도이다. 도시된 바와 같이, 파티션 유닛(215)은 L2 캐시(350), 프레임 버퍼(FB)(355), 및 래스터 연산 유닛(raster operations unit: ROP)(360)을 포함한다. L2 캐시(350)는 기록/판독 캐시로서, 크로스바 유닛(210) 및 ROP(360)로부터 수신된 연산들을 적재 및 저장을 수행하도록 구성된다. 판독 미스(read miss) 및 긴급 라이트백(urgent writeback) 요청은 L2 캐시(350)에 의해 FB(355)로 출력되어 처리된다. 더티 업데이트(dirty updates)가 또한 기회 처 리(opportunistic processing)를 위해 FB(355)에 전달된다. FB(355)는 병렬 처리 메모리(204)와 직접 인터페이스하여, 판독 및 기록 요청을 출력하며, 병렬 처리 메모리(204)로부터 판독된 데이터를 수신한다.
그래픽 어플리케이션에서, ROP(360)는 스텐실(stencil), z 테스트(z test), 및 블렌딩(blending) 등과 같은 래스터 연산을 수행하는 처리 유닛이며, 픽셀 데이터를 처리된 그래픽 데이터로서 출력하여 그래픽 메모리에 저장한다. 본 발명의 몇몇 실시예에서, ROP(360)는 각각의 파티션 유닛(215) 대신 각각의 GPC(208) 내에 포함되며, 픽셀 판독 및 기록은 픽셀 프래그먼트(pixel fragment) 대신 크로스바 유닛(210)을 통해 전송된다.
처리된 그래픽 데이터는 디스플레이 장치(110)에 디스플레이될 수 있고, 또는 CPU(102)에 의해 또는 병렬 처리 서브시스템(112) 내 처리 개체들 중 한 개체에 의한 추가 처리를 위해 라우트된다. 각각의 파티션 유닛(215)은 래스터 연산 처리를 배분하기 위하여 ROP(360)를 포함한다. 몇몇 실시예에서, ROP(360)는 메모리에 기록된 z 또는 컬러 데이터를 압축하고 메모리로부터 판독된 z 또는 컬러 데이터를 복원(decompress)하도록 구성될 수 있다.
본 기술 분야에서 숙련된 자들은 도 1, 2, 3A 및 3B에 기술된 아키텍처가 본 발명의 범주를 어떠한 방식으로도 제한하지 않으며 본 명세서에서 교시된 기술들이 본 발명의 범주를 일탈함이 없이도 하나 이상의 CPU, 하나 이상의 다중-코어 CPU, 하나 이상의 PPU(202), 하나 이상의 GPC(208), 하나 이상의 그래픽 또는 특수 용도 처리 유닛 등을 제한 없이 포함하는 적절하게 구성된 모든 처리 유닛에서 구현될 수 있음을 이해할 것이다.
그래픽 파이프라인 아키텍처
도 4는 본 발명의 일 실시예에 따른, 도 2의 하나 이상의 PPU(202)의 구현을 위해 구성될 수 있는 그래픽 처리 파이프라인(400)의 개념도이다. 예를 들어, SMU(310)들 중 하나의 SMU는 버텍스 처리 유닛(415), 지오메트리 처리 유닛(425), 및 프래그먼트 처리 유닛(fragment processing unit)(460) 중 하나 이상의 기능을 수행하도록 구성될 수 있다. 데이터 어셈블러(410), 프리미티브 어셈블러(420), 래스터라이저(455), 및 래스터 연산 유닛(465)의 기능들은 GPC(208) 및 대응하는 파티션 유닛(215) 내 다른 처리 엔진에 의해서도 수행될 수 있다. 대안으로, 그래픽 처리 파이프라인(400)은 하나 이상의 기능을 위해 전용 처리 유닛을 이용하여 구현될 수 있다.
데이터 어셈블러(410) 처리 유닛은 고차(high-order) 표면, 및 프리미티브 등의 버텍스 데이터를 수집하고, 버텍스 속성을 포함하는 버텍스 데이터를 버텍스 처리 유닛(415)으로 출력한다. 버텍스 처리 유닛(415)은 버텍스 쉐이더 프로그램을 실행하여, 버텍스 쉐이더 프로그램에 의해 명시된 대로 버텍스 데이터를 라이팅닝(lighting)하고 변환하도록 구성된 프로그램가능 실행 유닛이다. 예를 들어, 버텍스 처리 유닛(415)은 버텍스 데이터를 객체 기반 좌표계 표시(객체 공간)로부터 월드 스페이스(world space) 또는 정규화 장치 좌표계(normalized device coordinates: NDC) 공간과 같은 교대 기반 좌표계 체계(alternatively based cordinate system)로 변환하도록 프로그램될 수 있다. 버텍스 처리 유닛(415)은 데이터 어셈블러(410)에 의해 L1 캐시(320), 병렬 처리 메모리(204), 또는 시스템 메모리(104)에 저장된 데이터를 판독하여 버텍스 데이터를 처리할 때 사용할 수 있다.
프리미티브 어셈블러(420)는 버텍스 처리 유닛(415)으로부터 버텍스 속성을 수신하고, 필요하다면 저장된 버텍스 속성을 판독하며, 지오메트리 처리 유닛(425)에 의한 처리를 위해 그래픽 프리미티브를 구축한다. 그래픽 프리미티브는 삼각형, 선분, 및 점 등을 포함한다. 지오메트리 처리 유닛(425)은 지오메트리 쉐이더 프로그램을 실행하도록 구성된 프로그램가능 실행 유닛이며, 지오메트리 쉐이더 프로그램에 의해 명시된 대로 프리미티브 어셈블러(420)로부터 수신된 그래픽 프리미티브를 변환한다. 예를 들어, 지오메트리 처리 유닛(425)은 그래픽 프리미티브를 하나 이상의 새로운 그래픽 프리미티브로 세부분할하고, 새로운 그래픽 프리미티브를 래스터화하는데 사용된 평면 등식 계수와 같은 파라미터를 계산하도록 프로그램될 수 있다.
몇몇 실시예에서, 지오메트리 처리 유닛(425)은 또한 지오메트리 스트림의 요소들을 추가 또는 제거할 수 있다. 지오메트리 처리 유닛(425)은 새로운 그래픽 프리미티브를 규정하는 파라미터들과 버텍스들을 뷰포트 스케일(viewport scale), 컬 및 클립 유닛(450)으로 출력한다. 지오메트리 처리 유닛(425)은 병렬 처리 메모리(204) 또는 시스템 메모리(104)에 저장된 데이터를 판독하여 지오메트리 데이터를 처리할 때 사용할 수 있다. 뷰포트 스케일, 컬 및 클립 유닛(450)은 클리핑, 컬링 및 뷰포트 스케일링을 수행하며 처리된 그래픽 프리미티브를 래스터라이 저(455)로 출력한다.
래스터라이저(455)는 새로운 그래픽 프리미티브를 스캔변환하고 프래그먼트 및 커버리지 데이터를 프래그먼트 처리 유닛(460)으로 출력한다. 부가적으로, 래스터라이저(455)는 z 컬링 및 다른 z-기반 최적화를 수행하도록 구성될 수 있다. 프래그먼트 처리 유닛(460)은 프래그먼트 쉐이더 프로그램을 실행하도록 구성된 프로그램가능 실행 유닛이며, 프래그먼트 쉐이더 프로그램에 의해 명시된 대로 래스터라이저(455)로부터 수신된 프래그먼트를 변환한다. 예를 들어, 프래그먼트 처리 유닛(460)은 원근 보정(perspective correction), 텍스처 맵핑, 쉐이딩, 및 블렌딩 등과 같은 연산을 수행하여 래스터 연산 유닛(465)으로 출력된 쉐이드된 프래그먼트를 생성하도록 프로그램될 수 있다. 프래그먼트 처리 유닛(460)은 병렬 처리 메모리(204) 또는 시스템 메모리(104)에 저장된 데이터를 판독하여 프래그먼트 데이터를 처리할 때 사용할 수 있다. 프래그먼트는 프로그램된 샘플링 레이트에 따라 픽셀, 샘플, 또는 다른 입도(granularity)로 쉐이드될 수 있다.
래스터 연산 유닛(465)은 스텐실, z 테스트, 블렌딩 등과 같은 래스터 연산을 수행하는 처리 유닛이며, 픽셀 데이터를 처리된 그래픽 데이터로서 출력하여 그래픽 메모리에 저장한다. 처리된 그래픽 데이터는 디스플레이 장치(110)에 디스플레이를 위하여 또는 CPU(102) 또는 병렬 처리 서브시스템(112)에 의한 추가적인 처리를 위하여 그래픽 메모리, 예컨대, 병렬 처리 메모리(204), 및/또는 시스템 메모리(104)에 저장될 수 있다. 본 발명의 몇몇 실시예에서, 래스터 연산 유닛(465)은 메모리에 기록된 z 또는 컬러 데이터를 압축하고 메모리로부터 판독된 z 또는 컬러 데이터를 복원하도록 구성된다.
단일 패스 테셀레이션(Single Pass Tessellation)
테셀레이션을 단일 패스로 수행하기 위하여, 제1 부분의 SMU(310)는 테셀레이션 제어 쉐이더 프로그램을 실행하도록 구성되며 제2 부분의 SMU(310)은 테셀레이션 평가 쉐이더 프로그램을 실행하도록 구성된다. 제1 부분의 SMU(310)는 표면 패치 디스크립션(description)을 수신하고, 10개의 제어 포인트로 규정된 삼각입방체 프리미티브와 같은 그래픽 프리미티브 및 디테일 값의 레벨과 같은 테셀레이션 파라미터를 출력한다. 그래픽 프리미티브 및 테셀레이션 파라미터는 PP 메모리(204)에 저장되는 대신 하나의 SMU(310)로부터 L1 캐시(320) 및 작업 배분 크로스바(330)를 통해 다른 SMU로 라우트된다. 그러므로, 중간 데이터를 L2 캐시(350) 또는 PP 메모리(204)에 저장하지 않고도 GPC(208)를 통한 중단없는 단일 패스로 표면 패치 디스크립션의 테셀레이션이 완료된다. 또한, 어플리케이션 프로그램 또는 장치 드라이버(103)는 표면 패치 디스크립션을 제공하며 테셀레이션 처리 동안 GPC(208)의 부분을 재구성하지 않는다.
제1 부분의 SMU(310)의 개수는 제2 부분의 SMU(310)의 개수와 같거나, 크거나 적을 수 있다. 중요한 것으로, 제1 및 제2 부분의 SMU(310)의 개수는 처리 작업부하와 일치하도록 맞추어질 수 있다. 단일의 표면 패치에 의해 생성된 버텍스들의 개수는 디테일의 계산된 테셀레이션 레벨에 따라 달라진다. 그러므로, 결과적으로 테셀레이션 제어 쉐이더 프로그램의 실행이 데이터를 확장시킬 수 있기 때문에 제1 부분의 SMU(310) 내 하나의 SMU(310)는 제2 부분의 SMU(310) 내 다수의 SMU(310)에 필요한 "작업"을 생성할 수 있다.
도 5a는 본 발명의 일 실시예에 따른, 테셀레이션을 단일 패스로 수행하는 방법 단계의 흐름도이다. 단계(510)에서, 장치 드라이버(103)는 테셀레이션 제어 쉐이더 프로그램의 실행을 위하여 제1 세트의 SMU(310)를 구성한다. 테셀레이션 제어 쉐이더 프로그램은 제어 포인트의 베이시스(basis)의 변경, 또는 디테일 파라미터의 테셀레이션 레벨의 계산 등을 수행할 수 있으며, 이 프로그램은 각 표면 패치마다 한번씩 실행된다. 테셀레이션 제어 쉐이더 프로그램이 하나의 패치(제어 포인트들의 세트)를 입력하고 다른 패치(제어 포인트들의 다른 세트)를 출력할 때 패치의 베이시스가 변경되며, 여기서 제어 포인트의 개수는 입력 패치와 출력 패치 마다 다르다. 단계(520)에서, 장치 드라이버(103)는 테셀레이션 평가 쉐이더 프로그램의 실행을 위해 제2 세트의 SMU(310)를 구성한다. 테셀레이션 평가 쉐이더 프로그램은 패치 프리미티브 제어 포인트에 기반한 각 버텍스의 최종 위치 및 속성, 각 버텍스의 파라메트릭(parametric)(u,v) 위치, 변위 맵(displacement maps) 등을 계산할 수 있으며, 이 프로그램은 각 출력 버텍스마다 한번씩 실행된다.
단계(520)에서, 장치 드라이버(103)는 SMU(310)을 제1 세트 및 제2 세트로 구성하며, GPC(208)에 의해 실행되는 테셀레이션 제어 쉐이더 및 테셀레이션 평가 쉐이더 프로그램들을 다운로드하여 표면 데이터를 처리하고 출력 버텍스들을 생성한다. 단계(530)에서, 제1 세트의 SMU(310) 내 SMU(310)는 테셀레이션 제어 쉐이더 프로그램을 실행하여 그래픽 프리미티브, 예컨대, 삼각입방체와 같은 그래픽 프리미티브의 제어 포인트를 생성한다.
단계(540)에서, 제1 세트의 SMU(310)에 의해 출력된 그래픽 프리미티브의 버텍스들은 제2 세트의 SMU(310)의 입력으로 배분된다. 단계(545)에서, 제2 세트의 SMU(310) 내 SMU(310)는 테셀레이션 평가 쉐이더 프로그램을 실행하여 출력 버텍스들을 생성한다. 버텍스들이 상이한 경우, 단계(530, 540 및 545)는 다른 시간에서 일어난다는 것을 주목하자. 그러므로, 제1 세트의 SMU(310)에 의해 그래픽 프리미티브가 출력될 때, 제2 세트의 SMU(310)는 테셀레이션 평가 프로그램의 실행을 시작하여 출력 버텍스들을 생성한다. SMU(310)는 표면 패치를 단일 패스로 처리하도록 구성되기 때문에, 장치 드라이버(103)는 테셀레이션 연산 중에 SMU(310)가 상이한 연산을 수행하도록 재구성할 필요가 없다.
도 5b는 본 발명의 일 실시예에 따른, 테셀레이션을 단일 패스로 수행하도록 구성된 GPC(208)의 블록도이다. 제1 세트(550)는 테셀레이션 제어 쉐이더 프로그램을 실행하도록 구성된 제1 세트의 SMU(310)이다. 제2 세트(560)는 테셀레이션 평가 쉐이더 프로그램을 실행하도록 구성된 제2 세트의 SMU(310)이다. 제1 세트(550), 작업 배분 크로스바(330), 및 제2 세트(560)는 도 5a의 단계(530, 540 및 545)를 실행하도록 구성될 수 있다. 작업 배분 크로스바(330)는 제1 세트(550) 내 각 SMU(310)를 제2 세트(560) 내 각 SMU(310)에 연결하도록 구성된다.
표면 패치를 나타내는 표면 데이터(555)는 도 5b에 도시된 바와 같이 L1 캐시(320)에 저장될 수 있으며, 제1 세트(550)에 의해 판독된다. 파이프라인 매니저(305)는 표면 데이터(555)의 위치를 제1 세트(550)의 각 SMU(310)에 제공하여 표면 패치를 배분하여 처리하도록 구성될 수 있다. 제1 세트(550)에 의해 출력된 그 래픽 프리미티브를 나타내는 테셀레이션 데이터(570)는 L1 캐시(320)에 저장될 수 있다. 파이프라인 매니저(305)는 그래픽 프리미티브 버텍스들을 제2 세트(560)의 SMU(310)의 입력으로 배분하는데 필요한 라우팅 정보를 작업 배분 크로스바(330)에 제공한다. 도 5b에 도시된 실시예와 같은 본 발명의 몇몇 실시예에서, 테셀레이션 데이터(570)는 작업 배분 크로스바(330)를 통해 라우트된다. 본 발명의 다른 실시예에서, 각 그래픽 프리미티브 버텍스들의 위치에 대응하는 인덱스들은 작업 배분 크로스바(330)을 통하여 라우트되어 제1 세트(550)에 의해 출력된 테셀레이션 데이터(570)를 제2 세트(560)의 입력으로 배분한다. 중요한 것으로, 테셀레이션 데이터(570)는 PP 메모리(204)에 저장되기보다는 L1 캐시(320) 또는 L2 캐시(350)에 저장되며, 이로써 테셀레이션 데이터(570)를 판독하고 기록하는데 필요한 클럭 사이클의 수를 줄이게 된다.
제1 세트(550)의 SMU(310)가 테셀레이션 데이터(570)를 기록할 때, 제2 세트(560)의 SMU(310)는 테셀레이션 데이터(570)를 판독하며, 그래서 테셀레이션 데이터(570)로 인해 소모되는 스토리지 양은 L1 캐시(320) 또는 L2 캐시(350) 내에 맞게 줄어든다. 이와 반대로, 통상의 시스템에서, 프로그램을 실행하기 위해 두번의 다른 패스(two different passes)가 사용될 때, 일군의 패치에 대해 테셀레이션 제어 쉐이더 프로그램에 의해 생성된 모든 데이터는, 파이프라인이 구성되어 테셀레이션 평가 쉐이더 프로그램을 실행하고 그 데이터를 판독하기 전에, 오프 칩 메모리, 예컨대, PP 메모리(204)에 저장된다. 부가적으로, 통상의 2회 패스(two passes) 기술이 사용될 때, 한 그룹 내 패치의 개수는 테셀레이션 제어 쉐이더 프 로그램의 실행과 테셀레이션 평가 쉐이더 프로그램의 실행 사이를 스위치하는데 유발되는 파이프라인 재구성 빈도를 줄이기 위해 큰 것이 전형적이다. 첫번째 패스에서 다수의 패치를 처리함으로써 생성된 테셀레이션 데이터는 테셀레이션 데이터(570) 보다 큰 스토리지를 필요로 하므로, 오프 칩 메모리에 저장된다.
도 5a및 도 5b와 관련하여 기술된 바와 같이, 표면 패치 디스크립션의 테셀레이션은 중간 데이터를 PP 메모리(204)에 저장하지 않고 GPC(208)를 통한 중단없는 단일 패스로 완료된다. 부가적으로, 어플리케이션 프로그램 또는 장치 드라이버(103)는 표면 패치 디스크립션을 제공하며 테셀레이션 처리 동안 GPC(208)의 부분을 재구성하지 않는다. 어플리케이션 프로그래머는 PPU(202)를, 표면을 단일 패스로 처리하도록 자동적으로 구성된 단일 테셀레이션 파이프라인으로서 간주하는 것이 유익할 수 있다.
본 발명의 일 실시예는 컴퓨터 시스템과 함께 사용하기 위한 프로그램 제품으로서 구현될 수 있다. 프로그램 제품의 프로그램(들)은 (본 명세서에서 기술된 방법을 포함하는) 실시예들의 기능들을 규정하며 각종 컴퓨터-판독가능 저장 매체에 포함될 수 있다. 예시적인 컴퓨터-판독가능 저장 매체는 이것으로 국한하는 것은 아니지만, (i) 정보가 영구적으로 저장되는 비기록가능 (non writable) 저장 매체 (예컨대, CD-ROM 드라이브에 의해 판독가능한 CD-ROM 디스크, 플래시 메모리, ROM 칩 또는 모든 형태의 솔리드-스테이트 비휘발성 반도체 메모리와 같은 컴퓨터 내 판독 전용 메모리 소자); 및 (ii) 변경가능한 정보가 저장되는 기록가능 저장 매체 (예컨대, 디스켓 드라이브 내 플로피 디스크 또는 하드디스크 드라이브 또는 모든 형태의 솔리드-스테이트 랜덤 액세스 반도체 메모리)를 포함한다.
본 발명은 특정 실시예를 참조하여 전술한 바와 같이 기술되었다. 그러나, 본 기술 분야에서 숙련된 자들은 첨부의 청구의 범위에 기술된 바와 같이 본 발명의 보다 넓은 정신과 범주를 일탈함이 없이 각종 변형과 변경이 이루어질 수 있음을 이해할 것이다. 따라서, 전술한 설명과 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다.
도 1은 본 발명의 하나 이상의 양태를 구현하기 위하여 구성된 컴퓨터 시스템을 예시하는 블록도이다.
도 2는 본 발명의 일 실시예에 따른, 도 1의 컴퓨터 시스템의 병렬 처리 서브시스템의 블록도이다.
도 3a는 본 발명의 일 실시예에 따른, 도 2의 하나의 PPU 내 GPC의 블록도이다.
도 3b는 본 발명의 일 실시예에 따른, 도 2의 PPU들 중 하나의 PPU 내 파티션 유닛의 블록도이다.
도 4는 본 발명의 일 실시예에 따른, 도 2의 하나 이상의 PPU의 구현을 위해 구성될 수 있는 그래픽 처리 파이프라인의 개념도이다.
도 5a는 본 발명의 일 실시예에 따른, 테셀레이션을 단일 패스로 수행하는 방법 단계의 흐름도이다.
도 5b는 본 발명의 일 실시예에 따른, 테셀레이션을 단일 패스로 수행하도록 구성된 GPC의 블록도이다.
<도면의 주요 부분에 대한 부호의 설명>
400: 그래픽 처리 파이프라인
410: 데이터 어셈블러
415: 버텍스 처리 유닛
420: 프리미티브 어셈블러
425: 지오메트리 처리 유닛
450: 뷰포트 스케일, 컬 및 클립 유닛

Claims (10)

  1. 테셀레이션을 그래픽 프로세서를 통해 단일 패스로 수행하기 위한 방법으로서,
    상기 그래픽 프로세서의 제1 세트의 처리 유닛들을, 테셀레이션 제어 쉐이더를 실행하여 표면 패치들을 처리하고 다수의 버텍스를 포함하는 그래픽 프리미티브를 생성하도록 구성하는 단계;
    상기 그래픽 프로세서에서의 제2 세트의 처리 유닛들을, 테셀레이션 평가 쉐이더를 실행하여 상기 다수의 버텍스 중 하나의 버텍스를 각각 처리하도록 구성하는 단계; 및
    상기 테셀레이션 제어 쉐이더 및 상기 테셀레이션 평가 쉐이더를 실행하여 상기 제1 세트의 처리 유닛들 및 상기 제2 세트의 처리 유닛들을 통해 상기 표면 패치들을 단일 패스로 테셀레이션하여 처리된 버텍스들을 생성하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 제1 세트의 처리 유닛들에 의해 출력된 상기 다수의 버텍스를 상기 제2 세트의 처리 유닛들의 입력들로 배분하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서, 상기 배분하는 단계는 각각의 상기 다수의 버텍스를 저장하 는 위치에 대응하는 인덱스들을 상기 제1 세트의 처리 유닛들로부터 상기 제2 세트의 처리 유닛들의 입력들로 라우트하는 단계를 포함하는 방법.
  4. 제1항에 있어서, 상기 테셀레이션 제어 쉐이더는 상기 표면 패치들 중 각각의 하나의 표면 패치에 대해 1회 실행되어 상기 하나의 표면 패치의 디테일 파라미터들의 레벨을 계산하는 방법.
  5. 제1항에 있어서, 상기 테셀레이션 평가 쉐이더는 상기 다수의 버텍스 중 각각의 하나의 버텍스에 대해 1회 실행되어 상기 하나의 버텍스의 최종 위치 및 속성들을 계산하는 방법.
  6. 제1항에 있어서, 상기 처리 유닛들 중 각각의 하나의 처리 유닛은 다른 처리 유닛들과 무관하게 상기 테셀레이션 제어 쉐이더 또는 상기 테셀레이션 평가 쉐이더를 실행하는 방법.
  7. 테셀레이션을 단일 패스로 수행하는 시스템으로서,
    그래픽 프로세서를 포함하며, 상기 그래픽 프로세서는,
    테셀레이션 제어 쉐이더를 실행하여 표면 패치들을 처리하고 다수의 버텍스를 포함하는 그래픽 프리미티브를 생성하도록 구성된 제1 세트의 처리 유닛들;
    테셀레이션 평가 쉐이더를 실행하여 상기 다수의 버텍스 중 하나의 버텍스를 각각 처리하도록 구성된 제2 세트의 처리 유닛들; 및
    상기 제1 세트의 처리 유닛들 및 상기 제2 세트의 처리 유닛들에 연결되고, 상기 제1 세트의 처리 유닛들에 의해 출력된 상기 다수의 버텍스를 상기 제2 세트의 처리 유닛들의 입력들로 제공하도록 구성된 크로스바 인터커넥트
    를 포함하는 시스템.
  8. 제7항에 있어서, 상기 테셀레이션 제어 쉐이더는 상기 표면 패치들 중 각각의 하나의 표면 패치에 대해 1회 실행되어 상기 하나의 표면 패치의 디테일 파라미터들의 레벨을 계산하는 시스템.
  9. 제7항에 있어서, 상기 테셀레이션 평가 쉐이더는 상기 제1 세트의 처리 유닛들에 의해 출력된 상기 다수의 버텍스 중 각각의 하나의 버텍스에 대해 1회 실행되어 상기 하나의 버텍스의 최종 위치 및 속성들을 계산하는 시스템.
  10. 제7항에 있어서, 상기 처리 유닛들은 상기 테셀레이션 제어 쉐이더 및 상기 테셀레이션 평가 쉐이더를 실행하여 상기 표면 패치들을 단일 패스로 테셀레이션하도록 구성된 시스템.
KR1020090089198A 2008-09-29 2009-09-21 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템 KR101091374B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/240,382 US20100079454A1 (en) 2008-09-29 2008-09-29 Single Pass Tessellation
US12/240,382 2008-09-29

Publications (2)

Publication Number Publication Date
KR20100036183A KR20100036183A (ko) 2010-04-07
KR101091374B1 true KR101091374B1 (ko) 2011-12-07

Family

ID=41171988

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090089198A KR101091374B1 (ko) 2008-09-29 2009-09-21 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템

Country Status (7)

Country Link
US (1) US20100079454A1 (ko)
JP (1) JP5303787B2 (ko)
KR (1) KR101091374B1 (ko)
CN (1) CN101714247B (ko)
DE (1) DE102009039231B4 (ko)
GB (1) GB2463763B (ko)
TW (1) TWI417806B (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0818277D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing system
US8131931B1 (en) * 2008-10-22 2012-03-06 Nvidia Corporation Configurable cache occupancy policy
US8868838B1 (en) 2008-11-21 2014-10-21 Nvidia Corporation Multi-class data cache policies
US20100164954A1 (en) * 2008-12-31 2010-07-01 Sathe Rahul P Tessellator Whose Tessellation Time Grows Linearly with the Amount of Tessellation
US9436969B2 (en) * 2009-10-05 2016-09-06 Nvidia Corporation Time slice processing of tessellation and geometry shaders
EP2596470A1 (en) * 2010-07-19 2013-05-29 Advanced Micro Devices, Inc. Data processing using on-chip memory in multiple processing units
US9804995B2 (en) 2011-01-14 2017-10-31 Qualcomm Incorporated Computational resource pipelining in general purpose graphics processing unit
US9047686B2 (en) * 2011-02-10 2015-06-02 Qualcomm Incorporated Data storage address assignment for graphics processing
US9626191B2 (en) 2011-12-22 2017-04-18 Nvidia Corporation Shaped register file reads
US9412197B2 (en) * 2012-04-04 2016-08-09 Qualcomm Incorporated Patched shading in graphics processing
US9747107B2 (en) 2012-11-05 2017-08-29 Nvidia Corporation System and method for compiling or runtime executing a fork-join data parallel program with function calls on a single-instruction-multiple-thread processor
US9947084B2 (en) 2013-03-08 2018-04-17 Nvidia Corporation Multiresolution consistent rasterization
KR102104057B1 (ko) 2013-07-09 2020-04-23 삼성전자 주식회사 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들
KR102066533B1 (ko) * 2013-11-19 2020-01-16 삼성전자 주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
GB2518019B (en) * 2013-12-13 2015-07-22 Aveva Solutions Ltd Image rendering of laser scan data
KR102366808B1 (ko) * 2014-10-22 2022-02-23 삼성전자주식회사 캐시 메모리 시스템 및 그 동작방법
CN104933675B (zh) * 2015-07-02 2017-11-07 浙江大学 一种周期性可控的复杂镶嵌图案生成方法
US20170178384A1 (en) * 2015-12-21 2017-06-22 Jayashree Venkatesh Increasing Thread Payload for 3D Pipeline with Wider SIMD Execution Width
US10430229B2 (en) * 2015-12-21 2019-10-01 Intel Corporation Multiple-patch SIMD dispatch mode for domain shaders
US10068372B2 (en) 2015-12-30 2018-09-04 Advanced Micro Devices, Inc. Method and apparatus for performing high throughput tessellation
US10643296B2 (en) 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
US10643381B2 (en) 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
GB2543866B (en) * 2016-03-07 2017-11-01 Imagination Tech Ltd Task assembly for SIMD processing
CN105957150A (zh) * 2016-05-16 2016-09-21 浙江大学 一种具有连续性和周期性表面图案的三维形体生成方法
US20170358132A1 (en) * 2016-06-12 2017-12-14 Apple Inc. System And Method For Tessellation In An Improved Graphics Pipeline
US10310856B2 (en) 2016-11-09 2019-06-04 Arm Limited Disabling thread execution when executing instructions in a data processing system
US10497084B2 (en) 2017-04-24 2019-12-03 Intel Corporation Efficient sharing and compression expansion of data across processing systems
US10127626B1 (en) * 2017-07-21 2018-11-13 Arm Limited Method and apparatus improving the execution of instructions by execution threads in data processing systems
US11055896B1 (en) * 2020-02-25 2021-07-06 Parallels International Gmbh Hardware-assisted emulation of graphics pipeline
CN113947515A (zh) * 2020-07-17 2022-01-18 芯原微电子(上海)股份有限公司 细分曲线数据处理实现方法、系统、介质及矢量图形处理装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060022977A1 (en) 2003-02-28 2006-02-02 Microsoft Corporation Spiral construction of a geodesic dome

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5982375A (en) * 1997-06-20 1999-11-09 Sun Microsystems, Inc. Floating point processor for a three-dimensional graphics accelerator which includes single-pass stereo capability
JP2000011190A (ja) * 1998-06-25 2000-01-14 Sony Corp 画像処理装置
US6707457B1 (en) * 1999-09-30 2004-03-16 Conexant Systems, Inc. Microprocessor extensions for two-dimensional graphics processing
US6954204B2 (en) * 2002-07-18 2005-10-11 Nvidia Corporation Programmable graphics system and method using flexible, high-precision data formats
US7379496B2 (en) * 2002-09-04 2008-05-27 Microsoft Corporation Multi-resolution video coding and decoding
US7109987B2 (en) * 2004-03-02 2006-09-19 Ati Technologies Inc. Method and apparatus for dual pass adaptive tessellation
US6972769B1 (en) * 2004-09-02 2005-12-06 Nvidia Corporation Vertex texture cache returning hits out of order
US7425952B2 (en) * 2004-11-23 2008-09-16 Metavr, Inc. Three-dimensional visualization architecture
US20060245500A1 (en) * 2004-12-15 2006-11-02 David Yonovitz Tunable wavelet target extraction preprocessor system
JP4255449B2 (ja) * 2005-03-01 2009-04-15 株式会社ソニー・コンピュータエンタテインメント 描画処理装置、テクスチャ処理装置、およびテセレーション方法
US8004531B2 (en) * 2005-10-14 2011-08-23 Via Technologies, Inc. Multiple graphics processor systems and methods
US7583268B2 (en) * 2005-11-10 2009-09-01 Via Technologies, Inc. Graphics pipeline precise interrupt method and apparatus
US7634637B1 (en) * 2005-12-16 2009-12-15 Nvidia Corporation Execution of parallel groups of threads with per-instruction serialization
US7568063B2 (en) * 2006-02-02 2009-07-28 Hewlett-Packard Development Company, L.P. System and method for a distributed crossbar network using a plurality of crossbars
TWI385547B (zh) * 2006-10-27 2013-02-11 Hon Hai Prec Ind Co Ltd 圖形自動替換系統及方法
US8643644B2 (en) * 2008-03-20 2014-02-04 Qualcomm Incorporated Multi-stage tessellation for graphics rendering
US8120608B2 (en) * 2008-04-04 2012-02-21 Via Technologies, Inc. Constant buffering for a computational core of a programmable graphics processing unit

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060022977A1 (en) 2003-02-28 2006-02-02 Microsoft Corporation Spiral construction of a geodesic dome

Also Published As

Publication number Publication date
DE102009039231A1 (de) 2010-04-29
US20100079454A1 (en) 2010-04-01
TWI417806B (zh) 2013-12-01
CN101714247B (zh) 2012-06-20
GB2463763A (en) 2010-03-31
GB0914951D0 (en) 2009-09-30
CN101714247A (zh) 2010-05-26
JP2010086528A (ja) 2010-04-15
TW201019262A (en) 2010-05-16
DE102009039231B4 (de) 2020-06-25
JP5303787B2 (ja) 2013-10-02
KR20100036183A (ko) 2010-04-07
GB2463763B (en) 2011-03-02

Similar Documents

Publication Publication Date Title
KR101091374B1 (ko) 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템
US8917271B2 (en) Redistribution of generated geometric primitives
US9024946B2 (en) Tessellation shader inter-thread coordination
US8817031B2 (en) Distributed stream output in a parallel processing unit
US9286647B2 (en) Pixel shader bypass for low power graphics rendering
US8542247B1 (en) Cull before vertex attribute fetch and vertex lighting
US9830741B2 (en) Setting downstream render state in an upstream shader
US8760455B2 (en) Restart index that sets a topology
US8599202B1 (en) Computing tessellation coordinates using dedicated hardware
US9418616B2 (en) Technique for storing shared vertices
US8624910B2 (en) Register indexed sampler for texture opcodes
US9436969B2 (en) Time slice processing of tessellation and geometry shaders
US9734545B2 (en) Software methods in a GPU
US8605085B1 (en) System and method for perspective corrected tessellation using parameter space warping
US9633458B2 (en) Method and system for reducing a polygon bounding box
US8564616B1 (en) Cull before vertex attribute fetch and vertex lighting
US8947444B1 (en) Distributed vertex attribute fetch
US9013498B1 (en) Determining a working set of texture maps
US9406101B2 (en) Technique for improving the performance of a tessellation pipeline
US9111360B2 (en) Technique for improving the performance of a tessellation pipeline
US9401004B2 (en) State shadowing to support a multi-threaded driver environment
US8704835B1 (en) Distributed clip, cull, viewport transform and perspective correction
US8948167B2 (en) System and method for using domains to identify dependent and independent operations
US8749562B1 (en) Sharing binding groups between shaders
US8319783B1 (en) Index-based zero-bandwidth clears

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: 20141126

Year of fee payment: 4