KR20190051961A - 프리미티브 셰이더 - Google Patents

프리미티브 셰이더 Download PDF

Info

Publication number
KR20190051961A
KR20190051961A KR1020197006547A KR20197006547A KR20190051961A KR 20190051961 A KR20190051961 A KR 20190051961A KR 1020197006547 A KR1020197006547 A KR 1020197006547A KR 20197006547 A KR20197006547 A KR 20197006547A KR 20190051961 A KR20190051961 A KR 20190051961A
Authority
KR
South Korea
Prior art keywords
shader
primitive
screen
primitives
vertex
Prior art date
Application number
KR1020197006547A
Other languages
English (en)
Other versions
KR102486347B1 (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 KR20190051961A publication Critical patent/KR20190051961A/ko
Application granted granted Critical
Publication of KR102486347B1 publication Critical patent/KR102486347B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

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

Abstract

그래픽 처리 파이프라인의 개선이 개시된다. 더 구체적으로 새로운 프리미티브 셰이더 스테이지가 테셀레이션이 활성화된 경우 버텍스 셰이더 스테이지 또는 도메인 셰이더 스테이지, 활성화된 경우 지오메트리 셰이더, 및 고정 기능 프리미티브 어셈블러의 작업을 수행한다. 프리미티브 셰이더 스테이지가 사용자-제공 버텍스 또는 도메인 셰이더 코드, 지오메트리 셰이더 코드, 및 프리미티브 어셈블러의 기능을 수행하는 코드로부터 컴파일된다. 고정 기능 프리미티브 어셈블러에서 프로그램 가능 하드웨어에서 실행되는 프리미티브 셰이더로의 작업의 이동이 많은 이점, 가령, 고정 기능 크로스바의 제거, 범용 컴퓨팅 모드에서 사용될 수 없는 전용 파라미터 및 위치 버퍼의 제거, 및 그 밖의 다른 이점을 제공한다.

Description

프리미티브 셰이더
본 출원은 그 전체가 본 명세서에 제공되는 것처럼 참조로서 포함되는 2016년 09월 22일에 출원된 미국 가특허출원 번호 62/398,211, 2017년 01월 25일에 출원된 미국 특허 출원 번호 15/415,823 및 2017년 02월 07일에 출원된 유럽 출원 번호 EP17155075.9의 이익을 주장한다.
개시된 실시예는 일반적으로 그래픽 처리 파이프라인과 관련되며 구체적으로 프리미티브 셰이더(primitive shader)와 관련된다.
3차원 그래픽 처리 파이프라인이 호스트(가령, 컴퓨팅 시스템의 중앙 처리 장치)로부터 명령어를 수락하고 이들 명령어를 처리하여 디스플레이 디바이스 상에 디스플레이되도록 픽셀을 생성할 수 있다. 그래픽 처리 파이프라인은 개별 작업, 가령, 가령, 버텍스 위치 및 속성 변화, 픽셀 컬러 계산 등을 수행하는 복수의 스테이지를 포함한다. 그래픽 처리 파이프라인은 지속적으로 개발되고 개선된다.
첨부된 도면과 관련한 예시로서 제공된 이하의 기재로부터 더 상세한 이해가 얻어질 수 있다.
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적 디바이스의 블록도이다.
도 2는 추가 상세사항을 도시하는 도 1의 디바이스의 블록도이다.
도 3a-3c는 도 2에 도시된 그래픽 처리 파이프라인의 추가 상세사항을 도시한다.
도 4a는 하나의 예시에 따라, 월드-공간 파이프라인에서 더 유연한 처리 및 월드-공간 파이프라인에서 스크린-공간 파이프라인으로의 더 유연한 전송을 가능하게 하는 수정된 그래픽 처리 파이프라인을 도시한다.
도 4b 및 4c는 테셀레이션이 비활성화된 때(도 4b) 및 테셀레이션이 활성화된 때(도 4c) 프리미티브 셰이더에 대한 실행될 셰이더 프로그램의 예시를 도시한다.
도 4d는 하나의 예시에 따라, 그래픽 처리 파이프라인의 추가 상세사항을 도시한다.
도 5는 하나의 예시에 따라, 프리미티브 셰이더의 기능을 수행하기 위한 방법의 흐름도이다.
본 발명은 그래픽 처리 파이프라인의 개선과 관련된다. 더 구체적으로, 새 프리미티브 셰이더가, 테셀레이션(tessellation)이 활성화되는 경우, 버텍스 셰이더 스테이지 또는 도메인 셰이더 스테이지의 작업을 수행하고, 활성화되는 경우 지오메트리 셰이더의 작업을 수행하고, 고정 기능 프리미티브 어셈블러의 작업을 수행한다. 사용자-제공 버텍스 또는 도메인 셰이더 코드, 지오메트리 셰이더 코드로부터 그리고 프리미티브 어셈블러의 기능을 수행하는 코드로부터 드라이버에 의해 프리미티브 셰이더 스테이지가 컴파일된다. 고정 기능 프리미티브 어셈블러의 작업을 프로그램 가능 하드웨어에서 실행되는 프리미티브 셰이더로 이동하는 것이 많은 이점을 제공하는데, 가령, 고정 기능 크로스바의 제거, 일반 컴퓨팅 모드에서 사용 불가인 전용 파라미터 및 위치 버퍼의 제거, 및 그 밖의 다른 이점을 제공한다.
도 1은 본 발명의 하나 이상의 양태가 구현되는 예시적 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들어 컴퓨터, 게임 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함한다. 디바이스(100)는 프로세서(102), 메모리(104), 저장 디바이스(106), 하나 이상의 입력 디바이스(108) 및 하나 이상의 출력 디바이스(110)를 포함한다. 상기 디바이스(100)는 선택사항으로서 입력 드라이버(112) 및 출력 드라이버(114)를 더 포함한다. 디바이스(100)는 도 1에 도시되지 않은 추가 구성요소를 포함할 수 있다.
프로세서(102)는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU), 동일한 다이 상에 위치하는 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함하며, 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치하거나, 프로세서(102)와 분리되어 위치할 수 있다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 가령, 랜덤 액세스 메모리(RAM), 동적 RAM 또는 캐시를 포함한다.
저장 디바이스(106)는 고정 또는 탈착식 저장장치, 가령, 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광학 디스크, 또는 플래시 드라이브를 포함한다. 입력 디바이스(108)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체정보 스캐너, 또는 네트워크 연결(가령, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 로컬 영역 네트워크 카드)을 포함한다. 출력 디바이스(110)는 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 조명, 안테나, 또는 네트워크 연결(가령, IEEE 802 신호의 송신 및/또는 수신을 위한 무선 로컬 영역 네트워크 카드)을 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스(108)와 통신하고, 프로세서(102)가 입력 디바이스(108)로부터 입력을 수신하도록 허용한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스(110)와 통신하고, 프로세서(102)가 출력 디바이스(110)로 출력을 전송하도록 허용한다. 출력 드라이버(114)는 디스플레이 디바이스(118)에 연결된 가속 처리 디바이스(APD)(116)를 포함한다. APD는 계산 명령어 및 그래픽 렌더링 명령을 프로세서(102)로부터 수락하여, 이들 계산 및 그래픽 렌더링 명령어를 처리하고 픽셀 출력을 디스플레이 디바이스(118)에 제공하여 디스플레이되도록 한다.
APD(116)는 단일-명령-복수-데이터("SIMD") 패러다임에 따라 계산을 수행하도록 구성된 하나 이상의 병렬 처리 장치를 포함한다. 그러나 APD(116)에 의해 수행되는 것으로 기재된 기능은 SIMD 패러다임에 따라 데이터를 처리하지 않는 처리 디바이스에 의해서도 수행될 수 있다.
도 2는 APD(116)에 대한 처리 작업의 실행과 관련된 추가 상세사항을 도시하는, 디바이스(100)의 블록도이다. 프로세서(102)는 시스템 메모리(104)에, 프로세서(102)에 의해 실행될 하나 이상의 제어 로직 모듈을 유지한다. 제어 로직 모듈은 운영 체제(120), 드라이버(122), 및 애플리케이션(126)을 포함하고, 선택사항으로서 도시되지 않은 그 밖의 다른 모듈을 포함할 수 있다. 이들 제어 로직 모듈은 프로세서(102) 및 APD(116)의 동작의 다양한 양태를 제어한다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 통신하고, 프로세서(102) 상에서 실행되는 그 밖의 다른 소프트웨어에 대한 하드웨어에 인터페이스를 제공한다. 드라이버(122)는 예를 들어, 애플리케이션 프로그래밍 인터페이스("API")를 APD(116)의 다양한 기능을 액세스하도록 프로세서(102) 상에서 실행되는 소프트웨어(가령, 애플리케이션(126))로 제공함으로써, APD(116)의 동작을 제어한다. 드라이버(122)는 셰이더 코드를, APD(116)의 구성요소(가령, 이하에서 더 상세히 언급된 SIMD 유닛(138))를 처리함으로써, 실행될 셰이더 프로그램으로 컴파일하는 저스트-인-타임 컴파일러(just-in-time compiler)를 더 포함한다.
APD(116)는 병렬 처리에 적합할 수 있는 선택된 기능, 가령, 그래픽 동작 및 비-그래픽 동작에 대해 명령어 및 프로그램을 실행한다. APD(116)는 그래픽 파이프라인 동작, 가령, 픽셀 동작, 기하학적 계산을 실행하고, 프로세서(102)로부터 수신된 명령어를 기초로 디스플레이 디바이스(118)로 이미지를 렌더링하는 데 사용된다. APD(116)는 또한 그래픽 동작과 직접 관련되지 않는 또는 그래픽 처리 파이프라인의 "정규" 정보 흐름의 일부가 아닌 컴퓨팅 처리 동작, 가령, 비디오, 물리 시뮬레이션, 전산 유체 역학, 또는 그 밖의 다른 작업을, 프로세서(102)로부터 수신된 명령어에 기초하여 실행한다.
APD(116)는 SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청이 있을 때 동작을 수행하도록 구성된 하나 이상의 SIMD 유닛(138)을 포함하는 (본 명세서에서 "프로그램 가능 처리 장치(202)"라고 총체적으로 지칭될 수 있는) 셰이더 엔진(132)을 포함한다. SIMD 패러다임은 복수의 처리 요소가 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고 따라서 동일한 프로그램을 실행하지만 상기 프로그램을 상이한 데이터를 갖고 실행할 수 있는 것이다. 하나의 예시에서, 각각의 SIMD 유닛(138)은 16개의 레인을 포함하며, 각각의 레인은 SIMD 유닛(138) 내 다른 레인과 동시에 동일한 명령을 실행하지만 상기 명령을 상이한 데이터를 갖고 실행할 수 있다. 모든 레인이 특정 한 명령을 실행할 필요는 없는 경우 레인은 예측으로 스위칭 오프될 수 있다. 예측은 또한 분기 제어 흐름으로 프로그램을 실행하는 데 사용될 수 있다. 더 구체적으로, 제어 흐름이 개별 레인에 의해 수행되는 계산을 기반으로 하는 조건부 브랜치 또는 그 밖의 다른 명령을 갖는 프로그램에 대해, 현재 실행 중이 아닌 제어 흐름 경로 및 상이한 제어 흐름 경로의 직렬 실행에 대응하는 레인의 예측에 의해, 무작위 제어 흐름이 따라질 수 있다.
셰이더 엔진(132)에서의 실행의 기본 단위는 작업-아이템이다. 각각의 작업-아이템은 특정 레인에서 병렬로 실행될 셰이더 프로그램의 단일 인스턴스화를 나타낸다. 작업-아이템은 단일 SIMD 유닛(138) 상에서 "웨이브프론트(wavefront)"로서 동시에 실행되는 것이 일반적이다. 복수의 웨이브프론트가 동일한 프로그램을 실행하도록 지정된 작업-아이템의 모음을 포함하는 "작업 그룹" 내에 포함될 것이다. 작업 그룹은 작업 그룹을 구성하는 각각의 웨이브프론트를 실행함으로써 실행된다. 웨이브프론트는 단일 SIMD 유닛(138) 상에서 순차적으로 실행되거나 상이한 SIMD 유닛(138) 상에서 부분적으로 또는 완전히 병렬로 실행된다. 웨이브프론트는 셰이더 프로그램의 병렬 실행의 인스턴스로 여겨질 수 있으며, 각각의 웨이브프론트가 SIMD 패러다임(가령, 하나의 명령 제어 유닛이 복수의 데이터를 갖고 동일한 명령 스트림을 실행하는 것)과 유사하게 단일 SIMD 유닛(138) 상에서 동시에 실행되는 복수의 작업-아이템을 포함한다. 스케줄러(136)가 상이한 셰이더 엔진(132) 및 SIMD 유닛(138) 상에서 다양한 웨이브프론트를 스케줄링하는 것 및 APD(116)에 대한 다양한 작업을 조정하기 위한 그 밖의 다른 동작을 수행하는 것과 관련된 동작을 수행하도록 구성된다.
셰이더 엔진(132)에 의해 제공되는 병렬처리는 그래픽 관련 동작, 가령, 픽셀 값 계산, 버텍스 변환, 테셀레이션, 지오메트리 셰이딩 동작, 및 그 밖의 다른 그래픽 동작에 적합하다. 따라서 프로세서(102)로부터 그래픽 처리 명령어를 수락하는 그래픽 처리 파이프라인(134)은 셰이더 엔진(132)으로 컴퓨팅 작업을 제공하여 병렬로 실행되게 한다.
또한 셰이더 엔진(132)은 그래픽과 관련이 없거나 그래픽 처리 파이프라인(134)의 "정규" 동작의 일부로서 수행되지 않는 컴퓨팅 작업(가령, 그래픽 처리 파이프라인(134)의 동작을 위해 수행되는 처리를 보충하도록 수행되는 커스텀 동작)을 수행하는 데 사용된다. 프로세서(102) 상에서 실행되는 애플리케이션(126) 또는 그 밖의 다른 소프트웨어가 이러한 컴퓨팅 작업을 형성하는 프로그램(종종 드라이버(122)에 의해 컴파일될 수 있는 "컴퓨팅 셰이더 프로그램"이라 지칭됨)을 APD(116)로 전송하여 실행되게 할 수 있다.
도 3a는 도 2에 도시된 그래픽 처리 파이프라인(134)의 추가 상세사항을 보여주는 블록도이다. 그래픽 처리 파이프라인(134)은 각각 특정 기능을 수행하는 스테이지를 포함한다. 스테이지는 그래픽 처리 파이프라인(134)의 기능의 세분을 나타낸다. 각각의 스테이지는 프로그램 가능 처리 장치(202)에서 실행되는 셰이더 프로그램으로서 부분적으로 또는 완전히 또는 프로그램 가능 처리 장치(202)의 외부의 고정-기능(fixed-function) 프로그램 불가능 하드웨어로서 부분적으로 또는 완전히 구현된다.
입력 어셈블러 스테이지(302)가 사용자-채움 버퍼(user-filled buffer)(가령, 프로세서(102)에 의해 실행되는 소프트웨어, 가령, 애플리케이션(126)의 요청 시 채워지는 버퍼)로부터 프리미티브 데이터를 판독하고 데이터를 프리미티브로 어셈블하여, 파이프라인의 나머지에 의해 사용되도록 한다. 본 명세서에서 사용될 때, 용어 "사용자"는 셰이더 코드 및 렌더링될 3차원 객체를 그래픽 처리 파이프라인(400)으로 제공하는 애플리케이션(126) 또는 그 밖의 다른 개체를 지칭한다. 용어 "사용자"는 APD(116)에 의해 수행되는 활동을 구별하도록 사용된다. 입력 어셈블러 스테이지(302)는 사용자-채움 버퍼에 포함된 프리미티브 데이터를 기초로 상이한 유형의 프리미티브를 생성할 수 있다. 입력 어셈블러 스테이지(302)는 파이프라인의 나머지에 의해 사용되도록 어셈블된 프리미티브를 포맷팅한다.
버텍스 셰이더 스테이지(304)는 입력 어셈블러 스테이지(302)에 의해 어셈블된 프리미티브의 버텍스를 처리한다. 버텍스 셰이더 스테이지(304)는 다양한 버텍스 단위 동작(per-vertex operation), 가령, 변환(transformation), 스키닝(skinning), 모핑(morphing), 및 버텍스 단위 라이팅을 수행한다. 변환 동작은 버텍스의 좌표를 변환하기 위한 다양한 동작을 포함한다. 이들 동작은 모델링 변환, 시점 변환, 투영 변환, 원근 분할, 및 뷰포트 변환 중 하나 이상을 포함한다. 본 명세서에서, 이러한 변환은 변환이 수행될 버텍스의 좌표 또는 "위치"를 수정하기 위해 고려된다. 좌표가 아닌 다른 속성을 수정하는 버텍스 셰이더 스테이지(304)의 다른 동작이 비-위치 속성(non-position attribute)을 수정하도록 고려된다. 비-위치 속성은 본 명세서에서 또한 "파라미터"라고 지칭된다.
버텍스 셰이더 스테이지(304)는 부분적으로 또는 전적으로 하나 이상의 셰이더 엔진(132) 상에서 실행될 버텍스 셰이더 프로그램으로 구현된다. 버텍스 셰이더 프로그램은 프로세서(102)에 의해 컴퓨터 프로그램에 의해 미리 써진(pre-write) 프로그램으로서 제공된다. 드라이버(122)는 이러한 컴퓨터 프로그램을 컴파일하여 셰이더 엔진(132) 내에서 실행되기에 적합한 포맷을 갖는 버텍스 셰이더 프로그램을 생성할 수 있다.
헐 셰이더(hull shader) 스테이지(306), 테셀레이터 스테이지(308), 및 도메인 셰이더 스테이지(310)가 함께 동작하여, 프리미티브를 세분함으로써, 단순한 프리미티브를 더 복잡한 프리미티브로 변환하는 테셀레이션을 구현할 수 있다. 헐 셰이더 스테이지(306)는 버텍스 및 그 밖의 다른 정보의 세트에 의해 정의된 입력 프리미티브를 기초로 테셀레이션을 위한 패치를 생성한다. 테셀레이터 스테이지(308)는 패치에 대한 (무게중심 좌표에 의해 특정된 버텍스를 포함하는) 샘플 세트를 생성한다. 도메인 셰이더 스테이지(310)는 (가령, 무게중심 좌표를 월드 공간 좌표로 변환함으로써) 패치에 대한 샘플에 대응하는 버텍스에 대한 버텍스 위치를 계산한다. 헐 셰이더 스테이지(306) 및 도메인 셰이더 스테이지(310)는 프로그램 가능 처리 장치(202) 상에서 실행될 셰이더 프로그램으로서 구현될 수 있다.
지오메트리 셰이더 스테이지(312)가 프리미티브 단위로 동작을 선택적으로 활성화 또는 비활성화하고 수행할 수 있다. 일반적으로 지오메트리 셰이더 프로그램이 지오메트리 셰이더 프로그램의 명령에 의해 특정될 때 전체 프리미티브(가령, 버텍스의 집합)를 입력으로서 수락하고 전체 프리미티브에 대한 동작을 수행한다. 다양한 상이한 유형의 동작이 지오메트리 셰이더 스테이지(312)에 의해 수행될 수 있는데, 가령, 포인트 스프라이트 팽창, 동적 파티클 시스템 동작, 퍼-핀 생성(fur-fin generation), 음영 공간 생성, 단일 패스 큐브맵 렌더링(single pass render-to-cubemap), 프리미티브 단위 물질 스와핑, 및 프리미티브 단위 물질 셋업 같은 동작이 있다. 지오메트리 셰이더 스테이지(312)를 위한 동작이 프로그램 가능 처리 장치(202) 상에서 실행되는 셰이더 프로그램에 의해 수행된다.
래스터화기 스테이지(rasterizer stage)(314)는 업스트림에서 생성된 단순 프리미티브(월드-공간 파이프라인(330)의 끝에서 "트라이앵글"이라고도 지칭됨)를 수락하고 래스터화(rasterize)한다. 래스터화는 특정 프리미티브에 의해 어느 스크린 픽셀(또는 서브픽셀 샘플)이 커버되는지를 결정하는 것으로 구성된다. 래스터화는 고정 기능 하드웨어에 의해 수행되거나 프로그램 가능 처리 장치(202)에서 실행되는 셰이더 프로그램에 의해 수행될 수 있다.
픽셀 셰이더 스테이지(316)는 업스트림에서 생성된 프리미티브 및 래스터화의 결과를 기초로 스크린 픽셀에 대한 출력 값(가령, 컬러 값)을 계산한다. 픽셀 셰이더 스테이지(316)는 질감 메모리(texture memory)로부터 질감을 적용할 수 있다. 픽셀 셰이더 스테이지(316)에 대한 동작이 프로그램 가능 처리 장치(202) 상에서 실행되는 셰이더 프로그램에 의해 수행된다.
출력 병합 스테이지(output merger stage)(318)가 픽셀 셰이더 스테이지(316)로부터의 출력을 수락하고 이들 출력을 병합하여, 디스플레이 디바이스(118)로의 출력을 위해 프레임 버퍼에 써지는 스크린 픽셀에 대한 최종 컬러를 결정하기 위해 z-테스팅 및 알파 블렌딩 같은 동작을 수행할 수 있다.
버텍스 셰이더 스테이지(304), 헐 셰이더 스테이지(306), 테셀레이터 스테이지(308), 도메인 셰이더 스테이지(310), 및 지오메트리 셰이더 스테이지(312)는 스크린-공간 파이프라인(350)에 의해 처리되기 위한 트라이앵글 및 상기 트라이앵글에 대한 다양한 속성을 생성하는 월드-공간 파이프라인(330)의 일부이다. 래스터화기 스테이지(314) 및 픽셀 셰이더 스테이지(316)를 포함하는 스크린-공간 파이프라인(350)은 월드-공간 파이프라인(330)으로부터 수신된 트라이앵글에 의해 어느 스크린 픽셀이 커버되는지를 결정하고, 이들 스크린 픽셀에 어느 컬러가 써져야 하는지를 결정하며, (출력 병합 스테이지(318) 및 도시되지 않은 그 밖의 다른 구성요소를 통해) 디스플레이되도록 스크린으로 컬러를 출력한다.
앞서 기재된 바와 같이, APD(116)는 대용량 병렬 컴퓨팅 디바이스이다. 3차원 객체 렌더링과 연관된 프로세싱을 병렬처리하기 위해 많은 기법이 사용된다. 한 가지 이러한 기법은 복수의 월드-공간 파이프라인(330) 및 복수의 스크린-공간 파이프라인(350)을 포함하며, 이들 각각은 독립적인 작업을 병렬로 처리한다. 이러한 기법이 도 3b 및 도 3c와 관련하여 기재된다.
도 3b는 (디스플레이로 출력되기 위해 (가령, 모니터로 출력되기 위한 픽셀 컬러를 저장하는 프레임 버퍼) 또는 그 밖의 다른 목적으로(가령, 질감으로서) 사용될 수 있는 표면(surface)의 생성을 위해 픽셀 셰이더 스테이지(316)에 의해 생성된 픽셀 컬러가 써질 영역을 나타내는) 스크린 공간(320) 및 상기 스크린 공간(320)을 스크린 공간(320)의 복수의 스크린 서브디비전(subdivision)(324(1))으로 분할한 것을 도시한다. 도 3c는 복수의 월드-공간 파이프라인(330), 복수의 스크린-공간 파이프라인(350), 및 월드-공간 파이프라인(330) 및 스크린-공간 파이프라인(350)의 동작을 병렬 방식으로 촉진시키는 것과 관련된 그 밖의 다른 다양한 구성요소를 도시한다.
잠시 도 3c를 참조하면, 복수의 월드-공간 파이프라인(330)이 도시된다. 입력 어셈블리 스테이지(302)는 상이한 월드-공간 파이프라인(330)에 걸쳐 3차원 요소(가령, 버텍스, 테셀레이션 데이터, 프리미티브 등)를 분산시킨다. 하나의 예를 들면, 입력 어셈블리 스테이지(302)는 제1 버텍스 세트를 제1 월드-공간 파이프라인(330)에 제공하고, 제2 버텍스 세트를 제2 월드-공간 파이프라인(330)에 제공하며, 이러한 방식으로 계속한다. 월드-공간 파이프라인(330)은 버텍스를 처리하고 처리된 버텍스를 월드-공간 파이프라인(330)과 연관된 프리미티브 어셈블러(340)로 전달한다. 각각의 프리미티브 어셈블러(340)는 특정 월드-공간 파이프라인(330)에 할당된다. 월드-공간 파이프라인(330)은 또한 처리된 버텍스 위치를 위치 버퍼(346)로 전달하며, 비-위치 파라미터(가령, 조명 데이터, 질감 좌표 등)를 파라미터 버퍼(348)로 전달한다. 위치 버퍼(346) 및 파라미터 버퍼(348)는 버텍스 위치 및 비-위치 버텍스 파라미터를 각각 저장하기 위해 월드-공간 파이프라인(330)에 의해 사용되기 위해 특화된 메모리 공간이다. 이들 버퍼는 스크린-공간 파이프라인(350)에 의해 사용되도록 각자의 데이터를 저장한다.
프로그램 가능 처리 장치(202) 상에서 실행되는 셰이더 프로그램으로서가 아니라 고정 기능 하드웨어에서 구현되는 프리미티브 어셈블러(340)는 연관된 월드-공간 파이프라인(330)으로부터 버텍스를 프리미티브로 수집하고, 컬링 동작(culling operation)(가령, 은면 컬링, 절두체 컬링, 뷰 컬링)을 수행하며, 특정 프리미티브가 속하는 스크린-공간 서브디비전(subdivision)(324)(도 3b)을 식별하고, 프리미티브 및 프리미티브가 속하는 스크린-공간 서브디비전(324)에 대한 결정을, 스크린-공간 파이프라인(350)으로의 분산을 위해 크로스바(342)로 전달한다.
크로스바(342)는 프리미티브 어셈블러(340)로부터 프리미티브를 수신하고 프리미티브를 프리미티브 어셈블러(340)에 의해 프리미티브에 대해 식별된 스크린 서브디비전(324)과 연관된 하나 이상의 스크린-공간 파이프라인(350)으로 전달한다. 크로스바(342)는 또한 프로그램 가능 처리 장치(202) 상에서 실행되는 셰이더 프로그램과 달리 고정 기능 하드웨어로서 구현된다. 프리미티브 어셈블러(340)에 의해 출력된 프리미티브 기술(primitive description)이 일반적으로 크기 때문에, 그리고 또한 크로스바(342)가 프리미티브를 임의의 월드-공간 파이프라인(330)으로부터 임의의 스크린-공간 파이프라인(350) 중 하나 이상으로 전달할 수 있고, 이는 많은 수의 물리적 전기 연결을 야기할 수 있기 때문에 크로스바(342)의 하드웨어는 복잡하고 많은 다이 영역을 소비한다. 스크린-공간 파이프라인(350)은 크로스바(342)로부터 수신된 프리미티브를 처리하여 앞서 도 3a와 관련하여 기재된 바와 같이 실질적으로 픽셀에 대한 컬러를 출력할 수 있다.
도 3b를 참조하면, 각각의 스크린-공간 파이프라인(350)이 스크린 공간(320) 내 스크린 서브디비전(324)의 특정 세트에 할당된다. 도 3b에서, 각각의 스크린 서브디비전(324)이 특정 스크린 공간 파이프라인(350)의 특정 래스터화기 스테이지(314)와 연관(따라서 각각의 래스터화기 스테이지(314)가 특정 스크린-공간 파이프라인(350) 내에 있기 때문에 특정 스크린-공간 파이프라인(350)과 연관)되는 것으로 지시된다. 예를 들어, 스크린 서브디비전(324(1)), 스크린 서브디비전(324(3)), 스크린 서브디비전(324(5)), 스크린 서브디비전(324(13)), 스크린 서브디비전(324(15)), 및 스크린 서브디비전(324(17))이 모두 래스터화기(1)와 연관되고, 따라서 크로스바(342)가 이들 스크린 서브디비전(324)을 커버하는 트라이앵글을 래스터화기(1)와 연관된 스크린-공간 파이프라인(350)으로 전송한다. 그 밖의 다른 스크린 서브디비전(324)이 상이한 래스터화기(2, 3, 및 4)와 연관되며 이들 스크린 서브디비전(324)을 커버하는 프리미티브가 연관된 래스터화기로 전송된다.
몇 가지 예시적 트라이앵글(322)이 도 3b에 도시되어, 이들 트라이앵글(322)이 트라이앵글(322)이 커버하는 스크린 서브디비전(324)을 기초로 상이한 스크린-공간 파이프라인(350)에 분산되는 방식을 나타낸다. 예시적 트라이앵글(322(1))은 스크린 서브디비전(324(1)), 스크린 서브디비전(324(2)), 스크린 서브디비전(324(7)), 및 스크린 서브디비전(324(8))을 커버한다. 따라서 트라이앵글(322(1))은 모든 4개의 래스터화기(그리고 따라서 모든 4개의 스크린-공간 파이프라인(350))로 전송될 것이다. 트라이앵글(322(2))은 스크린 서브디비전(324(3)) 및 스크린 서브디비전(324(9))을 커버하고 따라서 래스터화기(1) 및 래스터화기(3)로 전송될 것이다. 트라이앵글(322(3))은 스크린 서브디비전(324(14))만 커버하며 따라서 래스터화기(2)로 전송될 것이다. 트라이앵글(322(4))은 모든 4개의 래스터화기에 대한 스크린 서브디비전(324)을 커버하며 따라서 모든 래스터화기로 전송될 것이다. 트라이앵글(322(5))은 스크린 서브디비전(324(15)), 스크린 서브디비전(324(16)), 및 스크린 서브디비전(324(22))을 커버하며 따라서 래스터화기(3)를 제외한 래스터화기(1, 2, 및 4)로 전송될 것이다.
도 3c를 참조하면, 고정 기능 프리미티브 어셈블러(340) 및 크로스바(342) 구현 및 전용 위치 버퍼(346) 및 전용 파라미터 버퍼(348)와 연관된 몇 가지 성능 문제가 있다. 한 가지 예시에서, 이 구성은 크로스바(342)로부터 들어오는 프리미티브를 버퍼링하는 버퍼(345) 내 제한된 공간으로 인한 병목현상을 초래할 수 있다. 더 구체적으로, 프리미티브는 이른바 "API" 순서("application programming interface order")로 렌더링된다. API 순서는 이들 객체가 렌더링되도록 요청한 애플리케이션(126)에 의해 요청된 순서로 객체가 렌더링되도록 명령한다. 이 순서제약은 각각의 스크린-공간 파이프라인(350)이 API 순서로 각자의 동작을 수행함을 의미한다(일부 동작은 순서에서 벗어나 발생할 수 있지만, 객체가 렌더링되도록 요청한 애플리케이션(126)에게 이들이 특정된 순서로 렌더링되었다고 나타나야 한다). 그러나 (도 3b와 관련하여 기재된 스크린-서브디비전(324) 커버 기법을 통해) 복수의 스크린-공간 파이프라인(350)으로 전송되는 트라이앵글이 많이 존재하는 경우 그리고 하나(또는 그 이상)의 스크린-공간 파이프라인(350)이 다른 것들보다 더 "선호"되는 경우 병목현상이 초래될 수 있다. 더 구체적으로, 크로스바(342)가 프리미티브를 스크린-공간 파이프라인(350)으로 전송한 후, 버퍼(345)는 상기 스크린-공간 파이프라인의 래스터화기 스테이지(314)에 의해 처리되도록 프리미티브를 저장한다. 버퍼(345)가 가득 찬 경우, 크로스바(342)는 추가 프리미티브를 상기 버퍼(345)를 포함하는 스크린-공간 파이프라인(350)으로 전송할 수 있다.
하나의 스크린-공간 파이프라인을 위한 버퍼(345)가 가득 차고 다른 버퍼(345)가 가득 차지 않았지만, 이와 무관하게 다른 스크린-공간 파이프라인(350)으로 진행할 수 없는 상황이 발생할 수 있다. 더 구체적으로, 버퍼(345)가 가득 찬 경우, 크로스바(342)가 추가 프리미티브를 상기 버퍼(345)를 갖는 스크린-공간 파이프라인(350)으로 전송할 수 없다. 그러나 크로스바(342)는 순차적으로 가득 찬 버퍼(345)를 갖는 스크린-공간 파이프라인(350)에 할당될 또 다른 프리미티브를 처리할 수 없다. 따라서 상기 프리미티브가 가득 찬 버퍼(345)와 연관된 스크린 서브디비전(324)이 아닌 다른 스크린 서브디비전(324)과 겹치는 경우, 이들 스크린-공간 파이프라인(350)을 위한 버퍼(345)가 가득 차지 않은 경우라도, 상기 가득 찬 버퍼(345)를 갖는 스크린-공간 파이프라인(350)이 아닌 다른 스크린-공간 파이프라인(350)이 사실상 교착 상태가 된다(stall). 일반적으로 이 교착 상태는 월드-공간 파이프라인(330)으로부터 스크린-공간 파이프라인(350)으로의 트라이앵글을 전송하기 위한 목적으로 메모리 요소의 제한된 용량 때문에 발생한다.
도 3c의 아키텍처와 관련된 또 다른 문제가 크로스바(342) 자체가 크고 복잡하고 다이 영역을 많이 소비한다는 것이다. 덧붙여, 크로스바(342)를 4x4 크로스바(342)(4개의 입력 및 4개의 출력)보다 크게 하는 것은 매우 어렵거나 구현 불가능하다, 즉, 월드-공간 파이프라인(330) 및 스크린-공간 파이프라인(350)의 수가 제한적이다. 추가 문제점이 컬링 동작이 프리미티브 어셈블러(340)에서 발생하기 때문에, 버텍스 셰이더에서 발생하는 일부 동작, 가령, 버텍스 비-위치 파라미터 결정 동작이 불필요하다는 것이다. 더 구체적으로, 결국 컬링 때문에 폐기될 셰이딩된 버텍스에 대해 속성이 결정될 수 있다.
적어도 상기 이유로, 월드-공간 파이프라인(330)으로부터 스크린-공간 파이프라인(350)으로 데이터를 전송하기 위한 상이한 기법이 이하에서 기재된다. 도 4a는 월드-공간 파이프라인에서의 더 유연한 처리를 가능하게 하고 월드-공간 파이프라인(430)으로부터 스크린-공간 파이프라인(432)으로의 더 유연한 전송을 가능하게 하는 수정된 그래픽 처리 파이프라인(400)을 도시한다.
그래픽 처리 파이프라인(400)은 월드-공간 파이프라인(430)이 수정된 것을 제외하면, 도 3a에 도시된 그래픽 처리 파이프라인(134)과 유사하고, 도 2의 APD(116)에서 사용된다. 그래픽 처리 파이프라인(400)의 스크린-공간 파이프라인(432)이 도 3a의 그래픽 처리 파이프라인(134)의 스크린-공간 파이프라인(350)과 대략 동일한 기능을 수행한다. 월드-공간 파이프라인(430)은 표면 셰이더(402) 및 프리미티브 셰이더(404)를 포함한다. 표면 셰이더(402)는 테셀레이션이 활성화될 때 활성화된다. 테셀레이션이 활성화될 때, 표면 셰이더(402)는 버텍스 셰이더 스테이지(304) 및 헐 셰이더 스테이지(306)의 기능을 구현한다. 테셀레이션 스테이지(308)는 여전히 고정 기능 하드웨어에서 구현된다. 표면 셰이더(402)는 테셀레이션이 비활성화될 때 비활성화된다. 표면 셰이더(402)는 부분적으로 또는 전적으로 병렬 처리 장치(202) 상에서 실행되는 셰이더 프로그램으로서 구현된다.
테셀레이션이 활성화될 때, 프리미티브 셰이더(404)는, 지오메트리 셰이더 스테이지(312)가 활성화 상태인 경우, 도메인 셰이더 스테이지(310)와 지오메트리 셰이더 스테이지(312)의 기능을 구현한다. 테셀레이션이 비활성화될 때, 프리미티브 셰이더 스테이지(404)는 버텍스 셰이더 스테이지(304)의 기능을 구현한다. 프리미티브 셰이더(404) 및 표면 셰이더(402)는 부분적으로 또는 전적으로 프로그램 가능 처리 장치(202) 상에서 실행되는 셰이더 프로그램으로서 구현된다. 셰이더 프로그램으로서 구현되지 않는 프리미티브 셰이더(404) 및 표면 셰이더(402)의 일부가 고정 기능 하드웨어에서 구현된다.
프리미티브 셰이더(404)는 도 3c의 프리미티브 어셈블러(340)의 특정 기능을 수행한다. 구체적으로, 프리미티브 셰이더(404)는 프리미티브를 어셈블하고, 컬링을 수행하며, 프리미티브와 겹치는 스크린 서브디비전(324)을 결정한다. 이들 동작은, 셰이더 스테이지와 고정 기능 하드웨어의 조합의 경우와 달리, 단일 셰이더 스테이지에서 수행된다. 프리미티브 셰이더(404)는 드라이버(122)에 의해 사용자-제공 코드 또는 드라이버(122) 또는 APD(116)에 의해 이용 가능한 그 밖의 다른 명령으로부터 컴파일된 단일 셰이더 프로그램 유형으로서 처리된다.
도 4b 및 4c는 테셀레이션이 비활성화될 때(도 4b) 및 테셀레이션이 활성화될 때(도 4c), 프리미티브 셰이더(404)에 대해 실행될 셰이더 프로그램의 예시를 도시한다. 테셀레이션 비활성화 프리미티브 셰이더(450) 및 테셀레이션 활성화 프리미티브 셰이더(470)가 사용자-제공 셰이더 코드 및 드라이버(122)에 의해 이용 가능한 (예를 들어, 시스템 메모리(104) 내, 또는 디바이스(100), 가령, APD(116)의 그 밖의 다른 일부 메모리 유닛 내) 그 밖의 다른 셰이더 코드로부터 상기 드라이버(122)에 의해 생성된 셰이더 프로그램을 나타낸다. 더 구체적으로, 드라이버(122)는 애플리케이션(126) 또는 그 밖의 다른 개체로부터 특정 사용자-제공 셰이더 코드를 획득하고, 사용자-제공 셰이더 코드를 컴파일하고, 컴파일된 사용자-제공 셰이더 코드를 그 밖의 다른 컴파일된 코드와 병합하여, 테셀레이션 비활성화 프리미티브 셰이더(450) 또는 테셀레이션 활성화 프리미티브 셰이더(470)를 형성할 수 있다.
지금부터 도 4b를 참조하면, 테셀레이션이 비활성화될 때, 프리미티브 셰이더(404)가, 지오메트리 셰이딩이 활성화된 경우, 버텍스 셰이더 스테이지(304) 및 지오메트리 셰이더 스테이지(312)의 기능을 수행한다. 테셀레이션 비활성화 프리미티브 셰이더(450)가 또한 프리미티브 어셈블러(340)의 동작을 수행하기 위한 또 다른 다양한 세그먼트를 포함한다. 테셀레이션 비활성화 프리미티브 셰이더(450)는 버텍스에 대한 실행 마스크 세그먼트(452), 버텍스 인출 세그먼트(454), 위치 계산 세그먼트(456), 비-지연 파라미터 계산 세그먼트(458)(점선으로 나타낸 바와 같이 선택사항임), 프리미티브에 대한 실행 마스크 세그먼트(460), 지오메트리 셰이더 동작 세그먼트(462), 절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기 세그먼트(464), 압축 및 획득 순서 세그먼트(465), 스크린 공간 파티션 결정 세그먼트(466), 지연 파라미터 계산 세그먼트(468)를 포함한다. 테셀레이션 비활성화 프리미티브 셰이더(450)는 스크린-공간 파이프라인(432)에 의해 사용될 위치 및 파라미터를 내보낸다(export).
버텍스에 대한 실행 마스크 세그먼트(452)는 실행 마스크에서 다음 변경 때까지 웨이브프론트 내 어느 작업-아이템이 셰이더 프로그램을 실행할 것인지(그리고 가령, 예측을 통해 어느 것이 스위칭 오프될 것인지)를 가리키는 실행 마스크를 설정한다. 단일 웨이브프론트가 여러 다른 유형의 작업을 수행하도록 스포닝(spawn)될 수 있도록 실행 마스크가 사용된다. 더 구체적으로, APD(116)에서 스포닝된 각각의 웨이브프론트가 특정 셰이더 프로그램을 실행하도록 스포닝된다. 테셀레이션 비활성화 프리미티브 셰이더(450)가 단일 셰이더 프로그램이기 때문에, APD(116)는 웨이브프론트를 스포닝하여, 셰이더 프로그램을 실행시킬 수 있다. 그러나 이 셰이더 프로그램은 웨이브프론트의 상이한 수의 작업-아이템을 필요로 하는 작업을 수행한다. 버텍스 관련 작업(가령, 버텍스 인출 세그먼트(454) 및 위치 계산 세그먼트(456))을 위해, 각각의 작업-아이템이 단일 버텍스 상에서 작업한다. 프리미티브 관련 작업(가령, 지오메트리 셰이더 동작 세그먼트(462), 절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기 세그먼트(464), 및 스크린 공간 파티션 결정 세그먼트(466))을 위해, 각각의 작업-아이템이 하나의 프리미티브 상에서 작업한다. 일반적으로, 버텍스-관련 동작에 대한 경우보다 더 적은 작업-아이템이 프리미티브-관련 동작에 대해 사용된다. 이러한 이유로, 웨이브프론트가 테셀레이션 비활성화 프리미티브 셰이더(450)를 실행하는 작업의 유형이 변경될 때 실행 마스크가 웨이브프론트의 작업-아이템을 비활성화 또는 활성화하는 데 사용된다.
버텍스에 대한 실행 마스크 세그먼트(452)가 활성 작업-아이템의 개수를 버텍스-관련 동작을 실행하기에 적합한 수로 설정한다. 버텍스 인출 세그먼트(454)가 수신된 인덱스를 기초로 버텍스 데이터를 인출한다. 더 구체적으로, (가령, 입력 어셈블러 스테이지(302) 내) 테셀레이션 비활성화 프리미티브 셰이더(450) 전에, 버텍스 데이터가 버텍스 데이터 자체로서가 아닌 버텍스 데이터에 대한 포인터 - "인덱스" - 로서 핸들링된다. 인덱스는 버텍스 데이터로의 경량의 "포인터"이며, 버텍스 데이터와 연관된 많은 양의 데이터를 핸들링하지 않고, 특정 동작, 가령, 복제 버텍스 검출, 선택된 프리미티브 토폴로지를 기초로 하는 버텍스로부터의 프리미티브의 식별, 및 그 밖의 동작이 발생하도록 한다. 그러나, 적절한 때에, 가령, 버텍스 위치가 변환될 때, 실제 버텍스 데이터가 처리된다. 이 시점에서, 버텍스 데이터가 인덱스를 기초로 획득된다. 버텍스 인출 세그먼트(454)가 이들 동작, 즉, 인덱스를 기초로 메모리로부터 버텍스 데이터를 인출하는 것, 및 테셀레이션 비활성화 프리미티브 셰이더(450)를 실행하는 셰이더 엔진(132)에 의해 처리되도록 버텍스 데이터를 레지스터로 로딩하는 것을 수행한다.
위치 계산 세그먼트(456)가 버텍스 셰이더 스테이지(304)에 대한 사용자-제공 코드로부터 얻어지며, 버텍스 인출 세그먼트(454)에 의해 인출된 버텍스에 대한 사용자-제공 버텍스 셰이더 코드에 의해 특정된 위치 변환(가령, 모델뷰 변환 또는 버텍스 셰이더 스테이지(304)와 연관된 그 밖의 다른 변환을 포함하여, 버텍스 위치를 모델 공간에서 뷰 공간으로 변환)을 수행한다. 위치 계산 세그먼트(456)를 생성하기 위해, 드라이버(122)는 사용자-제공 버텍스 셰이더 코드로부터 위치 변환을 수행하는 것과 연관된 명령을 추출한다. 하나의 예를 들면, 드라이버(122)는 애플리케이션(126)에 의해 제공되는 버텍스 셰이더에 의해 특정된 출력을 기초로 위치 변환을 수행하는 것과 연관된 명령을 식별한다. 더 구체적으로 버텍스 셰이더 코드는 변환된 버텍스 위치와 연관된 출력이 무엇인지를 식별한다. 드라이버(122)는 이들 출력이 위치 계산 세그먼트(456) 내에 포함될 명령으로 달라지도록 하는 명령을 식별한다. 위치 계산 세그먼트(456)가 계산된 위치를 로컬 데이터 저장부(445)로 내보내서, 테셀레이션 비활성화 프리미티브 셰이더(450)의 그 밖의 다른 부분 및 스크린-공간 파이프라인(350)에 의해 사용되도록 한다.
비-지연 파라미터 계산(non-deferred parameter calculation)(458)이 (절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기 세그먼트(464)에 의한) 컬링 및 작은 트라이앵글 폐기 후까지 지연되지 않는 버텍스 비-위치 속성을 위한 계산을 포함한다. 이 계산은 또한 버텍스 셰이더 스테이지(304)를 위한 사용자-제공 코드를 기초로 한다. 컬링 후까지, 드라이버(122)가 버텍스 셰이더 프로그램으로부터 이들을 격리할 수 없고 따라서 이들을 시간상 이동(shift)시킬 수 없기 때문에, 일부 파라미터 계산은 지연될 수 없다. 버텍스 위치가 위치 계산 세그먼트(456)에 대해 변환되는 것처럼, 드라이버(122)는 계산이 지연되지 않을 속성과 연관된 사용자 제공 버텍스 셰이더 코드에 의해 특정된 출력을 검사하고 이들 출력이 따를 명령을 식별함으로써 사용자 제공 버텍스 셰이더 코드로부터 비-위치 속성 계산에 대한 명령을 추출한다.
프리미티브에 대한 실행 마스크 세그먼트(460)는 프리미티브 단위 동작을 수행할 작업-아이템의 수를 기초로 웨이브프론트의 작업-아이템에 대한 실행 마스크를 설정한다. 프리미티브에 대한 실행 마스크 세그먼트(460)는 활성 작업-아이템의 수를 감소 또는 증가시킬 수 있지만, 일반적으로 프리미티브 당 복수의 버텍스가 존재하고 작업 아이템이 버텍스 처리를 위해 버텍스 당 하나씩 할당되며, 프리미티브 처리를 위해 프리미티브 당 하나씩 할당되기 때문에, 활성 작업-아이템의 수는 감소된다. 작업-아이템에 의해 실행되는 버텍스 동작의 결과에 따라 달라지는 프리미티브 처리를 위한 데이터가 SIMD 유닛(138)에 의해 이용 가능한 레지스터를 통해, 또는 로컬 데이터 저장부(445)를 통해, 또는 그 밖의 다른 일부 메커니즘을 통해 프리미티브 동작을 실행하는 웨이브프론트 내 작업-아이템에 의해 이용 가능하다. 로컬 데이터 저장부(445)는 셰이더 엔진(132) 내 SIMD 유닛(138)들 간에 공유되고 셰이더 엔진(132)의 외부의 유닛에 의해서도 액세스 가능한 메모리 유닛이다. 도 3c의 위치 버퍼(346) 및 파라미터 버퍼(348)와 달리, 로컬 데이터 저장부(445)는 각각 버텍스 위치 및 버텍스 속성에 특화되지 않는다.
지오메트리 셰이딩이 활성화된 경우, 테셀레이션 비활성화 프리미티브 셰이더(450)가 지오메트리 셰이더 동작 세그먼트(462)를 포함한다. 프리미티브 단위인 이들 동작은 지오메트리 셰이더 스테이지(312)를 위한 사용자-제공 코드에 의해 특정된 동작이다. 드라이버(122)는 이 사용자-제공 코드를 불러오고, 코드를 컴파일하며, 이를 테셀레이션 비활성화 프리미티브 셰이더(450)로 삽입한다.
절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기 세그먼트(464)가 프리미티브를 위한 절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기를 수행한다. 절두체 컬링은 "뷰 절두체(view frustum)" 또는 카메라에 의해 가시적인 3차원 공간의 영역 밖의 프리미티브를 폐기하는 것을 포함한다. 은면 컬링은 카메라를 바라보는 은면(back face)을 갖는 프리미티브를 폐기하는 것을 포함한다. (가령, 작은 트라이앵글은 어떠한 스크린 픽셀을 덮지 않을 것이기 때문에, 또는 그 밖의 다른 이유로) 작은 트라이앵글 폐기는 보이기에 너무 작은 트라이앵글을 폐기하는 것을 포함한다. 도 3c에서, 고정-기능 프리미티브 어셈블러(340)가 도 4a의 프리미티브 셰이더(404)에 의해 이들 동작을 수행하지만, 이들 동작은 프로그램 가능 처리 장치(202) 상에서 수행된다.
압축 및 획득 순서 세그먼트(465)가 컬링된 데이터를 스크린-공간 파이프라인(432)에 의한 효율적인 처리에 적합한 포맷으로 압축한다. 더 구체적으로, 압축 및 획득 순서 세그먼트(465)가 컬링된(또한 비-컬링된(non-culled) 프리미티브에 의해 사용되지 않는) 프리미티브에 대한 버텍스를 제거하고 나머지 데이터를 밀집된 형태(packed form)로 압축한다. 압축 및 획득 순서 세그먼트(465)가 또한 스케줄러(136)로부터 순서 번호를 획득한다. 순서 번호는 API 순서를 유지하는 것을 보조하고 월드-공간 파이프라인(430)으로부터 수신된 프리미티브를 처리하는 순서에 관해 스크린-공간 파이프라인(432)에 명령하는 것을 돕는다. 스케줄러(136)는 그래픽 처리 파이프라인(400)을 통해 처리되는 작업에 대한 전역적 순서(global order)를 유지하고 작업이 그래픽 처리 파이프라인(400)을 통해 진행됨에 따라 작업에 순서 번호를 할당한다.
스크린 공간 파티션 결정 세그먼트(466)는, 각각의 프리미티브에 대해, 프리미티브가 겹치는 하나 이상의 스크린 서브디비전(324)을 결정한다. 이 세그먼트의 목적은 상이한 스크린-공간 파이프라인(432)에 할당된 스크린의 부분을 기초로 어느 스크린-공간 파이프라인(432)이 어느 프리미티브를 수신할지를 식별하기 위함이다. 도 3c의 예시에서, 이 함수는 고정 기능 프리미티브 어셈블리(340)에서 구현되지만, 도 4a-4d의 병렬 처리 장치(202) 상에서 실행될 명령으로 구현된다. 일부 구현예에서, 스크린 공간 파티션 결정 세그먼트(466)가 주어진 좌표 세트를 기초로, 어느 스크린 서브디비전(324)에 좌표가 속하는지를 식별하기 위한 기능을 갖는 연산코드(opcode)를 포함하며, 따라서 스크린 공간 파티션 결정 세그먼트(466)에 대한 하드웨어 가속을 제공할 수 있다.
지연 파라미터 계산 세그먼트(468)가 프리미티브가 절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기 세그번트(464)에서 컬링된 후, 속성 계산을 수행한다. 이 시점에서 이들 동작을 수행하는 이점은 비-가시적 프리미티브가 폐기되지 않았고 따라서 속성이 최종 장면에 기여하지 않는 프리미티브에 대해 결정되지 않는다는 것이다. 드라이버(122)가 버텍스 셰이더 스테이지(304)에 대해 사용자-제공 코드로부터 지연 파라미터 계산 세그먼트(468)에 대해 명령을 획득한다. 드라이버(122)는 이들 파라미터와 연관된 출력을 식별하고 출력이 따르는 버텍스 셰이더 스테이지(304)에 대한 코드 내 명령을 식별함으로써 이들 파라미터를 결정하기 위한 명령을 추출한다. 절두체 컬링, 은면 컬링, 및 작은 트라이앵글 폐기 세그먼트(464)와 연관된 동작 후까지로 속성 처리를 지연시킴으로써 컬링되며 따라서 최종 장면에 기여하지 않을 프리미티브에 대해 속성 처리가 발생하는 것이 막아진다.
버텍스 셰이더 스테이지(304)에 대한 동작을 수행하는 대신, 테셀레이션 활성화 프리미티브 셰이더(470)가 도메인 셰이더 스테이지(310)에 대한 동작을 수행하는 것을 제외하고, 테셀레이션 활성화 프리미티브 셰이더(470)가 테셀레이션 비활성화 프리미티브 셰이더(450)와 유사한 세그먼트를 포함한다. 따라서 위치 계산 세그먼트(456)에서 위치 계산을 위한 버텍스 셰이더 스테이지(304)에 대한 애플리케이션-제공 코드로부터 얻어진 명령을 포함하는 대신, 테셀레이션 활성화 프리미티브 셰이더(470)는 도메인 셰이더 스테이지(310)의 기능을 수행하기 위한 명령을 포함하는 도메인 평가 세그먼트(476)를 포함하며, 상기 명령은 스테이지와 연관된 애플리케이션-제공 코드로부터 얻어진다.
프리미티브 셰이더(404)에 의해, 도 3c의 예시적 그래픽 처리 파이프라인에서 고정 기능 하드웨어(가령, 프리미티브 어셈블러(340))에서 수행되는 기능 중 다수가 프로그램 가능 처리 장치(202)에 의해 대신 수행된다. 고정-기능에서 프로그램 가능 하드웨어로의 이러한 이동이 특정 이점을 제공하는데, 이는 도 4d와 관련하여 지금부터 기재된다.
도 4d는 일례에 따라 그래픽 처리 파이프라인(400)의 추가 상세사항을 도시한다. 그래픽 처리 파이프라인(400)은 복수의 월드-공간 파이프라인(430) 및 복수의 스크린-공간 파이프라인(432)을 포함한다. 도 4d에서, 월드-공간 파이프라인(432)은 실질적으로 도 4a-4c와 관련하여 앞서 기재된 바와 같이, 버텍스 및 프리미티브를 처리한다. 그 밖에도, 프리미티브 셰이더(404)(특히, 스크린 공간 파티션 결정 세그먼트(466))가 어느 스크린-공간 파이프라인(432)이 프리미티브를 수신하기 위한 것인지를 식별한다. 프리미티브 어셈블러(435)가 연관된 스크린-공간 파이프라인(432)(즉, 프리미티브 어셈블러(435)가 발견되는 스크린-공간 파이프라인(432))에 대해 지정된 데이터를 로컬 데이터 저장부(445)로부터 인출(fetch)하고, 래스터화기 스테이지(314)에 대해 데이터를 트라이앵글로 어셈블하며, 트라이앵글을 래스터화기 스테이지(314)로 전달한다. 프리미티브 어셈블러(435)는 그 밖의 다른 프리미티브 동작, 가령, 프리미티브 셰이더(404)에 의해 수행되지 않은 컬링 등을 수행할 수 있다.
크로스바(342) 이용 대신, 데이터가 로컬 데이터 저장부(445)를 통해 월드-공간 파이프라인에서 스크린-공간 파이프라인(432)으로 전달된다. 더 구체적으로, 프리미티브 셰이더(404)가 스크린-공간 파이프라인(432)에 의해 처리될 프리미티브에 대한 데이터(가령, 버텍스, 어느 버텍스가 프리미티브를 구성하는지에 대한 지시자, 버텍스 속성 등)를 로컬 데이터 저장부(445)로 내보내고, 스크린-공간 파이프라인(432)은 로컬 데이터 저장부(445)로부터 적절한 데이터를 인출한다. 도 3c의 고정 기능 프리미티브 어셈블러(340) 및 크로스바(342)를 이용해, 제한된 전용 버퍼링 메모리(가령, 래스터화기 스테이지(314) 내 버퍼(345))가 특정 상황에서 병목현상을 초래한다. 그러나 프리미티브 셰이더(404)는 데이터를 월드-공간 파이프라인(430)에서 스크린-공간 파이프라인(432)으로 전송하기 위해 훨씬 유연한 로컬 데이터 저장부(445)를 이용할 수 있고 따라서 전용 메모리(가령, 위치 버퍼(346) 및 파라미터 버퍼(348))의 한계에 제한되지 않는다.
덧붙여, 유연한 프리미티브 셰이더(404)에 의해, 월드-공간 파이프라인을 스크린-공간 파이프라인으로부터 "분리(decoupling)"하는 것이 가능하다. 더 구체적으로, 도 3c의 크로스바(342)가 월드-공간 파이프라인(330)과 스크린-공간 파이프라인(350) 간에 하드-와이어링(hard-wire)되어 있고 이의 기능을 고정된 방식으로 달성한다. 따라서 데이터 경로가 월드-공간 파이프라인(330)의 출력에서부터, 크로스바(342)를 통과해, 스크린-공간 파이프라인(350)으로 고정되어 있다. 크로스바(342)를 이용하지 않고 로컬 데이터 저장부(445)를 이용함으로써, 데이터 경로가 더 유연해진다. 월드-공간 파이프라인이 내보내는 데이터(가령, 처리된 버텍스 및 프리미티브)는 월드-공간 파이프라인(430)이 아닌 다른 유닛(가령, 프로세서(102))에 의해 처리될 수 있고 단순히 로컬 데이터 저장부(445)로 공급되거나, 월드-공간 파이프라인(430)이 처리된 버텍스 및 프리미티브를 생성하고 이들 데이터를 로컬 데이터 저장부(445)로 내보내 스크린-공간 파이프라인(432)이 아닌 다른 유닛(가령, 프로세서(102))에 의해 불러와지고 처리되게 할 수 있다.
덧붙여, 크로스바(342)를 이용하지 않는 것의 의미는 현재 크로스바(342)의 복잡도 때문에 허용되는 것보다 더 많은 월드-공간 파이프라인 및 스크린-공간 파이프라인이 가능하다는 것이다. 또한 크로스바(342)의 제거에 의해, 고정 개수의 입력 및 출력을 갖는 어떠한 크로스바도 존재하지 않기 때문에, 유연한 개수의 월드-공간 파이프라인(330)이 고정 개수의 스크린-공간 파이프라인(350)으로 연결될 수 있다.
또한, 로컬 데이터 저장부(445)가 범용 메모리이고 병렬 처리 장치(202)에서 실행되는 컴퓨팅 셰이더(compute shader)(즉, 반드시 그래픽 처리에 관련되지 않는 범용 프로그램)에 의해 사용될 수 있다. 위치 버퍼(346) 및 파라미터 버퍼(348)의 전용 메모리가 상기 컴퓨팅 셰이더에 의해 이용 가능하지 않다. 따라서 크로스바(342) 대신 로컬 데이터 저장부(445)를 이용함으로써, APD(116)로부터 컴퓨팅 셰이더에 의해 이용 가능하지 않을 전용 메모리의 제거가 가능하고, 따라서 그 밖의 다른 목적으로 전용 메모리를 위해 사용될 칩 영역 소비 또는 칩 영역의 사용이 감소된다.
도 5는 예를 들어, 프리미티브 셰이더의 기능을 수행하기 위한 방법(500)의 흐름도이다. 도 1-4d와 관련하여 도시되고 기재된 시스템과 관련하여 기재되었지만, 임의의 기술적으로 구현 가능한 순서로, 방법을 수행하도록 구성된 임의의 시스템이 본 발명의 범위 내에 속함이 이해되어야 한다.
도시된 바와 같이, 방법(500)은 단계(502)에서 시작되며, 여기서, 병렬 처리 장치(202) 상에서 실행되는 프리미티브 셰이더(404)에 대한 셰이더 프로그램이 버텍스 단위 동작(가령, 위치 계산 세그먼트(456) 또는 도메인 평가 세그먼트(476)에 대한 동작)을 수행한다. 이들 버텍스 단위 동작은 테셀레이션이 비활성화된 경우, 버텍스 셰이더 스테이지(304)에 대한 애플리케이션-제공 코드로부터 특정 및 추출된 버텍스 위치 변환을 포함하거나, 도메인 셰이더 스테이지(310)에 대한 애플리케이션-제공 코드에서 특정되고 이로부터 추출된 버텍스 위치 변환을 포함한다. 단계(504)에서, 셰이더 프로그램은 프리미티브 단위 동작(가령, 지오메트리 셰이딩 동작(462))을 수행한다. 이들 프리미티브 단위 동작은 지오메트리 셰이더 스테이지(312)에 대해 애플리케이션-제공 코드에서 특정 및 이로부터 추출된다. 단계(504)는 지오메트리 셰이딩이 활성화되는지 여부를 기초로 하는 선택사항이다.
단계(506)에서, 셰이더 프로그램은 컬링 동작(464)을 수행한다. 컬링 동작은 절두체 컬링, 은면 컬링 및 작은 트라이앵글 폐기 중 하나 이상을 포함한다. 단계(508)에서, 셰이더 프로그램은 단계(502-506)에서 수행되는 작업(466)과 연관된 프리미티브에 의해 겹치는 스크린 서브디비전을 식별한다. 단계(510)에서, 셰이더 프로그램은 버텍스 데이터 및 프리미티브 데이터를 로컬 데이터 저장부(445)로 전송하여 스크린-공간 파이프라인(350)에 의해 사용되도록 한다. 단계(512)에서, 스크린-공간 파이프라인(350)은 버텍스 데이터를 처리를 위해 로컬 데이터 저장부(445)로부터 인출한다.
단계(502 내지 508)는 동일한 셰이더 프로그램에 의해 수행된다. 따라서 스포닝된 각각의 웨이브프론트가 단일 셰이더 프로그램을 실행하도록 스포닝되기 때문에, 개별 웨이브프론트가 단계(502-508)를 실행한다.
3차원 그래픽 렌더링을 수행하기 위한 방법이 제공된다. 방법은 병렬 처리 장치에서 실행되는 프리미티브 셰이더 프로그램에 의해 버텍스의 세트에 대한 버텍스 단위 동작을 수행하는 단계를 포함한다. 상기 방법은 컬링된 프리미티브의 세트를 생성하기 위해 버텍스의 세트와 연관된 프리미티브의 세트에 대한 컬링 동작을 수행하는 단계를 더 포함하며, 컬링 동작은 프리미티브 셰이더에 의해 수행된다. 상기 방법은 컬링된 프리미티브의 세트에 대해, 프리미티브 셰이더에 의해 하나 이상의 스크린 서브디비전을 식별하는 단계를 더 포함한다. 상기 방법은 컬링된 프리미티브의 세트의 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 스크린-공간 파이프라인의 세트로 전송하는 단계를 더 포함한다.
가속 처리 디바이스(APD)가 제공된다. APD는 그래픽 처리 파이프라인 및 복수의 병렬 처리 장치를 포함한다. 그래픽 처리 파이프라인은 복수의 병렬 처리 장치 상에서 프리미티브 셰이더 프로그램을 실행하도록 구성된 프리미티브 셰이더 스테이지를 포함한다. 프리미티브 셰이더 프로그램은 버텍스의 세트에 버텍스 단위 동작을 수행하고, 컬링된 프리미티브의 세트를 생성하기 위해, 버텍스의 세트와 연관된 프리미티브의 세트에 컬링 동작을 수행하며, 프리미티브 셰이더에 의해, 컬링된 프리미티브의 세트에 대한 하나 이상의 스크린 서브디비전을 식별하고, 컬링된 프리미티브의 세트의 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 그래픽 처리 파이프라인의 스크린-공간 파이프라인의 세트로 전송하도록 구성된다.
컴퓨팅 디바이스가 또한 제공된다. 컴퓨팅 디바이스는 중앙 처리 장치 및 가속 처리 디바이스(APD)를 포함한다. APD는 그래픽 처리 파이프라인 및 복수의 병렬 처리 장치를 포함한다. 그래픽 처리 파이프라인은 복수의 병렬 처리 장치 상에서 프리미티브 셰이더 프로그램을 실행하도록 구성된 프리미티브 셰이더 스테이지를 포함한다. 프리미티브 셰이더 프로그램은 중앙 처리 장치로부터 수신된 버텍스의 세트에 버텍스 단위 동작을 수행하며, 컬링된 프리미티브의 세트를 생성하기 위해 버텍스의 세트와 연관된 프리미티브의 세트에 컬링 동작을 수행하고, 프리미티브 셰이더에 의해 컬링된 프리미티브의 세트에 대해 하나 이상의 스크린 서브디비전을 식별하며, 컬링된 프리미티브의 세트의 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 그래픽 처리 파이프라인의 스크린-공간 파이프라인의 세트로 전송하도록 구성된다.
많은 변형예가 본 명세서의 개시를 기초로 가능함이 이해되어야 한다. 특징부 및 요소가 앞서 특정 조합으로 기재되었지만, 각각의 특징부 또는 요소가 그 밖의 다른 특징부 및 요소 없이 단독으로 또는 그 밖의 다른 특징부 및 요소와의 다양한 조합으로 또는 이들 없이 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어로 구현될 수 있다. 적합한 프로세서는 예를 들어 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 주문형 집적 회로(ASIC: Application Specific Integrated Circuit), 현장 프로그램 가능 게이트 어레이(FPGA: Field Programmable Gate Array), 그 밖의 다른 임의의 유형의 집적 회로(IC), 및/또는 상태 머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 기술어(HDL) 명령 및 그 밖의 다른 중개 데이터, 가령, 넷리스트(가령, 컴퓨터 판독형 매체에 저장될 수 있는 명령)의 결과를 이용해 제조 공정을 설정함으로써 제작될 수 있다. 이러한 처리의 결과는 실시예의 양태를 구현하는 프로세서를 제조하기 위한 반도체 제조 공정에서 사용되는 마스크워크일 수 있다.
본 명세서에서 제공되는 방법 또는 흐름도가 범용 컴퓨터 또는 프로세서에 의해 실행되기 위해 비-일시적 컴퓨터 판독형 저장 매체에 포함되는 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비-일시적 컴퓨터 판독형 저장 매체의 예시로는, 리드 온리 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 자성 매체, 가령, 내부 하드 디스크, 및 탈착식 디스크, 자성-광학 매체, 및 광학 매체, 가령, CD-ROM 디스크 및 디지털 다목적 디스크(DVD)가 있다.

Claims (20)

  1. 3차원 그래픽 렌더링을 수행하기 위한 방법으로서, 상기 방법은
    병렬 처리 장치에서 실행되는 프리미티브 셰이더 프로그램에 의해 버텍스의 세트에 버텍스 단위 동작을 수행하는 단계,
    컬링된 프리미티브의 세트를 생성하기 위해, 버텍스의 세트와 연관된 프리미티브의 세트에 컬링 동작을 수행하는 단계 - 상기 컬링 동작은 프리미티브 셰이더에 의해 수행됨 - ,
    프리미티브 셰이더에 의해, 컬링된 프리미티브의 세트에 대해 하나 이상의 스크린 서브디비전을 식별하는 단계, 및
    컬링된 프리미티브의 세트의 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 스크린-공간 파이프라인으로 전송하는 단계
    를 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  2. 제1항에 있어서,
    테셀레이션이 활성화되고 버텍스 단위 동작은 그래픽 처리 파이프라인의 테셀레이션 스테이지에 의해 생성된 무게중심 좌표를 평가하기 위한 도메인 셰이더 동작을 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  3. 제1항에 있어서,
    테셀레이션이 비활성화되고 버텍스 단위 동작은 그래픽 처리 파이프라인의 버텍스 셰이더 스테이지에 대한 버텍스 위치를 변환하기 위한 버텍스 셰이더 동작을 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  4. 제1항에 있어서,
    컬링된 프리미티브의 세트와 연관된 버텍스에 대한 비-위치 속성을 결정하기 위한 동작을 수행하는 단계 - 비-위치 속성을 결정하기 위한 동작은 그래픽 처리 파이프라인의 버텍스 셰이더 스테이지에 대한 버텍스 셰이더 코드로부터 얻어짐 - 를 더 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  5. 제1항에 있어서,
    지오메트리 셰이딩이 활성화되고 방법은 버텍스의 세트와 연관된 프리미티브의 세트에 대해 지오메트리 셰이딩 동작을 수행하는 단계를 더 포함하며, 상기 지오메트리 셰이딩 동작은 그래픽 처리 파이프라인의 지오메트리 셰이더 스테이지에 대한 지오메트리 셰이더 코드로부터 얻어지는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  6. 제1항에 있어서,
    컬링된 프리미티브의 세트를 스크린-공간 파이프라인의 세트로 전송하는 단계는 고정 기능 크로스바 또는 전용 위치 버퍼 및 파라미터 버퍼가 아니라 범용 로컬 데이터 저장 메모리를 통해 수행되는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  7. 제6항에 있어서, 컬링된 프리미티브의 세트를 스크린-공간 파이프라인의 세트로 전송하는 단계는
    컬링된 프리미티브의 세트를 로컬 데이터 저장 메모리로 전송하는 단계, 및
    컬링된 프리미티브의 세트를 로컬 데이터 저장 메모리로부터 스크린-공간 파이프라인의 세트로 전송하는 단계를 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  8. 제1항에 있어서, 하나 이상의 스크린 서브디비전을 식별하는 단계는
    컬링된 프리미티브의 세트의 각각의 프리미티브에 대해, 해당 프리미티브에 의해 커버되는 하나 이상의 스크린 서브디비전을 식별하는 단계를 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  9. 제8항에 있어서, 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 스크린-공간 파이프라인의 세트로 전송하는 단계는
    컬링된 프리미티브의 세트의 각각의 프리미티브에 대해, 해당 프리미티브에 의해 커버되는 스크린 서브디비전과 연관된 하나 이상의 스크린-공간 파이프라인을 식별하는 단계, 및
    프리미티브를 식별된 하나 이상의 스크린-공간 파이프라인으로 전송하는 단계를 포함하는, 3차원 그래픽 렌더링을 수행하기 위한 방법.
  10. 가속 처리 디바이스(APD)로서,
    그래픽 처리 파이프라인, 및
    복수의 병렬 처리 장치를 포함하며,
    상기 그래픽 처리 파이프라인은 복수의 병렬 처리 장치 상에서 프리미티브 셰이더 프로그램을 실행하도록 구성된 프리미티브 셰이더 스테이지를 포함하고, 상기 프리미티브 셰이더 프로그램은
    버텍스의 세트에 버텍스 단위 동작을 수행하며,
    컬링된 프리미티브의 세트를 생성하기 위해, 버텍스의 세트와 연관된 프리미티브의 세트에 컬링 동작을 수행하고,
    프리미티브 셰이더에 의해, 컬링된 프리미티브의 세트에 대한 하나 이상의 스크린 서브디비전을 식별하며,
    컬링된 프리미티브의 세트의 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 그래픽 처리 파이프라인의 스크린-공간 파이프라인의 세트로 전송하도록 구성된, APD.
  11. 제10항에 있어서, 그래픽 처리 파이프라인은 테셀레이션이 활성화된 상태이며 버텍스 단위 동작은
    그래픽 처리 파이프라인의 테셀레이션 스테이지에 의해 생성된 무게중심 좌표를 평가하기 위한 도메인 셰이더 동작을 포함하는, APD.
  12. 제10항에 있어서, 그래픽 처리 파이프라인은 테셀레이션이 비활성화된 상태이며 버텍스 단위 동작은
    그래픽 처리 파이프라인의 버텍스 셰이더 스테이지에 대한 버텍스 위치를 변환하기 위한 버텍스 셰이더 동작을 포함하는, APD.
  13. 제10항에 있어서, 프리미티브 셰이더 프로그램은
    컬링된 프리미티브의 세트와 연관된 버텍스에 대한 비-위치 속성을 결정하기 위한 동작을 수행하도록 더 구성되며, 상기 비-위치 속성을 결정하기 위한 동작은 그래픽 처리 파이프라인의 버텍스 셰이더 스테이지에 대한 버텍스 셰이더 코드로부터 얻어지는, APD.
  14. 제10항에 있어서, 그래픽 처리 파이프라인은 지오메트리 셰이딩이 활성화된 상태이며 프리미티브 셰이더 프로그램은 버텍스의 세트와 연관된 프리미티브의 세트에 대해 지오메트리 셰이딩 동작을 수행하도록 더 구성되며, 지오메트리 셰이딩 동작은 그래픽 처리 파이프라인의 지오메트리 셰이딩 스테이지에 대한 지오메트리 셰이더 코드로부터 얻어지는, APD.
  15. 제10항에 있어서,
    범용 로컬 데이터 저장부
    를 더 포함하며, 프리미티브 셰이더 프로그램은 컬링된 프리미티브의 세트를 고정 기능 크로스바 또는 전용 위치 범퍼 및 파라미터 버퍼가 아니 범용 로컬 데이터 저장부를 통해 스크린-공간 파이프라인의 세트로 전송하도록 구성되는, APD.
  16. 제10항에 있어서, 프리미티브 셰이더 프로그램은
    컬링된 프리미티브의 세트의 각각의 프리미티브에 대해, 해당 프리미티브에 의해 커버되는 하나 이상의 스크린 서브디비전을 식별함으로써, 하나 이상의 스크린 서브디비전을 식별하도록 구성되는, APD.
  17. 제16항에 있어서, 프리미티브 셰이더 프로그램은
    컬링된 프리미티브의 세트의 각각의 프리미티브에 대해, 해당 프리미티브에 의해 커버되는 스크린 서브디비전과 연관된 하나 이상의 스크린-공간 파이프라인을 식별하고,
    프리미티브를 식별된 하나 이상의 스크린-공간 파이프라인으로 전송함으로써, 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 스크린-공간 파이프라인의 세트로 전송하도록 구성되는, APD.
  18. 컴퓨팅 디바이스로서,
    중앙 처리 장치, 및
    가속 처리 디바이스(APD)를 포함하며, 상기 APD는
    그래픽 처리 파이프라인, 및
    복수의 병렬 처리 장치를 포함하며,
    상기 그래픽 처리 파이프라인은 복수의 병렬 처리 장치 상에서 프리미티브 셰이더 프로그램을 실행하도록 구성된 프리미티브 셰이더 스테이지를 포함하고, 상기 프리미티브 셰이더 프로그램은
    중앙 처리 장치로부터 수신된 버텍스의 세트에 버텍스 단위 동작을 수행하며,
    컬링된 프리미티브의 세트를 생성하기 위해, 버텍스의 세트와 연관된 프리미티브의 세트에 컬링 동작을 수행하고,
    프리미티브 셰이더에 의해, 컬링된 프리미티브의 세트에 대한 하나 이상의 스크린 서브디비전을 식별하며,
    컬링된 프리미티브의 세트의 식별된 스크린 서브디비전을 기초로 컬링된 프리미티브의 세트를 그래픽 처리 파이프라인의 스크린-공간 파이프라인의 세트로 전송하도록 구성된, 컴퓨팅 디바이스.
  19. 제18항에 있어서, 그래픽 처리 파이프라인은 테셀레이션이 활성화된 상태이며 버텍스 단위 동작은
    그래픽 처리 파이프라인의 테셀레이션 스테이지에 의해 생성된 무게중심 좌표를 평가하기 위한 도메인 셰이더 동작을 포함하며, 상기 도메인 셰이더 동작은 중앙 처리 장치에 의해 제공된 도메인 셰이더 프로그램으로부터 얻어지는, 컴퓨팅 디바이스.
  20. 제18항에 있어서, 그래픽 처리 파이프라인은 테셀레이션이 비활성화된 상태이고 버텍스 단위 동작은
    그래픽 처리 파이프라인의 버텍스 셰이더 스테이지에 대한 버텍스 위치를 변환하는 버텍스 셰이더 동작을 포함하고, 버텍스 셰이더 동작은 중앙 처리 장치에 의해 제공되는 버텍스 셰이더 프로그램으로부터 얻어지는, 컴퓨팅 디바이스.
KR1020197006547A 2016-09-22 2017-09-06 프리미티브 셰이더 KR102486347B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201662398211P 2016-09-22 2016-09-22
US62/398,211 2016-09-22
US15/415,823 2017-01-25
US15/415,823 US11379941B2 (en) 2016-09-22 2017-01-25 Primitive shader
EP17155075.9A EP3300028B1 (en) 2016-09-22 2017-02-07 Primitive shader
EP17155075.9 2017-02-07
PCT/US2017/050349 WO2018057295A1 (en) 2016-09-22 2017-09-06 Primitive shader

Publications (2)

Publication Number Publication Date
KR20190051961A true KR20190051961A (ko) 2019-05-15
KR102486347B1 KR102486347B1 (ko) 2023-01-09

Family

ID=57995077

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197006547A KR102486347B1 (ko) 2016-09-22 2017-09-06 프리미티브 셰이더

Country Status (6)

Country Link
US (1) US11379941B2 (ko)
EP (1) EP3300028B1 (ko)
JP (1) JP7025415B2 (ko)
KR (1) KR102486347B1 (ko)
CN (1) CN109690629B (ko)
WO (1) WO2018057295A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417734B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US11227430B2 (en) 2019-06-19 2022-01-18 Samsung Electronics Co., Ltd. Optimized pixel shader attribute management
GB2592604B (en) * 2020-03-03 2023-10-18 Sony Interactive Entertainment Inc Image generation system and method
US11481967B2 (en) * 2020-08-31 2022-10-25 Advanced Micro Devices, Inc. Shader core instruction to invoke depth culling
EP4050479A1 (en) * 2021-02-25 2022-08-31 Imagination Technologies Limited Task repacking in a graphic pipeline
GB2610242A (en) * 2021-08-27 2023-03-01 Advanced Risc Mach Ltd Graphics processing
US20230094115A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. Load multiple primitives per thread in a graphics pipeline
US20230377086A1 (en) * 2022-05-18 2023-11-23 Advanced Micro Devices, Inc. Pipeline delay elimination with parallel two level primitive batch binning
CN115100022B (zh) * 2022-08-23 2022-12-06 芯动微电子科技(珠海)有限公司 图形处理方法及系统
CN116843540B (zh) * 2023-08-31 2024-01-23 南京砺算科技有限公司 图形处理器及图形处理设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120025534A (ko) * 2009-05-29 2012-03-15 퀄컴 인코포레이티드 연기형 버텍스 셰이딩을 갖는 그래픽스 프로세싱 유닛
US20130265309A1 (en) * 2012-04-04 2013-10-10 Qualcomm Incorporated Patched shading in graphics processing
US8704836B1 (en) * 2009-10-19 2014-04-22 Nvidia Corporation Distributing primitives to multiple rasterizers
KR20150058666A (ko) * 2013-11-19 2015-05-29 삼성전자주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
KR20150125588A (ko) * 2014-04-30 2015-11-09 지오메릭스 리미티드 그래픽 처리 시스템
KR20160004963A (ko) * 2014-07-03 2016-01-13 에이알엠 리미티드 그래픽 처리
US20160086299A1 (en) * 2014-09-24 2016-03-24 Saurabh Sharma Position-Only Shading Pipeline
KR20160063079A (ko) * 2014-11-26 2016-06-03 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7750914B2 (en) * 2004-08-26 2010-07-06 Intel Corporation Subdividing geometry images in graphics hardware
US7468726B1 (en) * 2005-12-01 2008-12-23 Nvidia Corporation Culling in a vertex processing unit
US7728841B1 (en) * 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US8542247B1 (en) * 2009-07-17 2013-09-24 Nvidia Corporation Cull before vertex attribute fetch and vertex lighting
US8692829B2 (en) * 2009-10-05 2014-04-08 Nvidia Corporation Calculation of plane equations after determination of Z-buffer visibility
US9536341B1 (en) * 2009-10-19 2017-01-03 Nvidia Corporation Distributing primitives to multiple rasterizers
US9177351B2 (en) * 2012-10-09 2015-11-03 Qualcomm Incorporated Multi-primitive graphics rendering pipeline
US9483862B2 (en) * 2013-12-20 2016-11-01 Qualcomm Incorporated GPU-accelerated path rendering
US9978171B2 (en) * 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US9754407B2 (en) * 2014-08-12 2017-09-05 Nvidia Corporation System, method, and computer program product for shading using a dynamic object-space grid

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120025534A (ko) * 2009-05-29 2012-03-15 퀄컴 인코포레이티드 연기형 버텍스 셰이딩을 갖는 그래픽스 프로세싱 유닛
US8704836B1 (en) * 2009-10-19 2014-04-22 Nvidia Corporation Distributing primitives to multiple rasterizers
US20130265309A1 (en) * 2012-04-04 2013-10-10 Qualcomm Incorporated Patched shading in graphics processing
KR20150002742A (ko) * 2012-04-04 2015-01-07 퀄컴 인코포레이티드 그래픽스 프로세싱에서의 패치된 쉐이딩
KR20150058666A (ko) * 2013-11-19 2015-05-29 삼성전자주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
KR20150125588A (ko) * 2014-04-30 2015-11-09 지오메릭스 리미티드 그래픽 처리 시스템
KR20160004963A (ko) * 2014-07-03 2016-01-13 에이알엠 리미티드 그래픽 처리
US20160086299A1 (en) * 2014-09-24 2016-03-24 Saurabh Sharma Position-Only Shading Pipeline
KR20160063079A (ko) * 2014-11-26 2016-06-03 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법

Also Published As

Publication number Publication date
EP3300028A1 (en) 2018-03-28
CN109690629A (zh) 2019-04-26
CN109690629B (zh) 2023-08-08
KR102486347B1 (ko) 2023-01-09
US11379941B2 (en) 2022-07-05
JP2019533240A (ja) 2019-11-14
JP7025415B2 (ja) 2022-02-24
WO2018057295A1 (en) 2018-03-29
US20180082399A1 (en) 2018-03-22
EP3300028B1 (en) 2018-11-07

Similar Documents

Publication Publication Date Title
KR102486347B1 (ko) 프리미티브 셰이더
KR102510524B1 (ko) 조합된 월드-공간 파이프라인 셰이더 스테이지
JP6918919B2 (ja) 自動的にコンパイルされたコンピュートシェーダを用いるプリミティブカリング
US10796483B2 (en) Identifying primitives in input index stream
US20210407182A1 (en) Load instruction for multi sample anti-aliasing
US11900499B2 (en) Iterative indirect command buffers
US20220319091A1 (en) Post-depth visibility collection with two level binning
US20240169641A1 (en) Vertex index routing through culling shader for two level primitive batch binning
JP2024510626A (ja) サブパスインターリーブによる同期フリークロスパスビニング

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