KR20190093579A - z-컬링 후 중첩 단편들 식별 또는 제거 - Google Patents

z-컬링 후 중첩 단편들 식별 또는 제거 Download PDF

Info

Publication number
KR20190093579A
KR20190093579A KR1020197016619A KR20197016619A KR20190093579A KR 20190093579 A KR20190093579 A KR 20190093579A KR 1020197016619 A KR1020197016619 A KR 1020197016619A KR 20197016619 A KR20197016619 A KR 20197016619A KR 20190093579 A KR20190093579 A KR 20190093579A
Authority
KR
South Korea
Prior art keywords
fragments
fragment
buffer
primitives
pixel shading
Prior art date
Application number
KR1020197016619A
Other languages
English (en)
Other versions
KR102547879B1 (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 KR20190093579A publication Critical patent/KR20190093579A/ko
Application granted granted Critical
Publication of KR102547879B1 publication Critical patent/KR102547879B1/ko

Links

Images

Classifications

    • 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
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading

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

z-컬링 후에 단편 스트림에 중첩 단편들을 식별 또는 제거하는 기술들이 개시된다. 이 기술은 z-컬링 이후의 단편을 저장하는 선입 선출(first-in-first-out) 버퍼를 유지하는 것을 포함한다. 새로운 단편이 버퍼에서 수신될 때마다 단편의 스크린 위치가 버퍼의 모든 다른 단편에 대하여 체크된다. 만약 단편의 스크린 위치가 버퍼내 단편의 스크린 위치와 매칭되면 버퍼의 단편은 제거 되거나 중복된 것으로 마킹된다. 만약 단편의 스크린 위치가 버퍼 내의 임의의 단편의 스크린 위치와 매칭되지 않으면, 이미 버퍼에 있는 단편에 대하여 어떠한 수정도 수행되지 않는다. 어느 경우이든, 단편이 버퍼에 추가된다. 버퍼의 컨텐츠들은 나중에 픽셀 쉐이딩을 위해 픽셀 쉐이더로 송신된다.

Description

z-컬링 후 중첩 단편들 식별 또는 제거
관련 출원들에 대한 상호 참조
본 출원은 2016년 12 월 9에 출원된 미국 특허 출원 번호 15/374,752 및 2016년 12월 13일에 출원된 유럽 출원 번호 EP16203877.2의 이익을 주장하고, 이들은 본 출원에 전체가 개시된 것 처럼 참조로서 통합된다.
기술 분야
개시된 실시예들은 전반적으로 그래픽스 프로세싱(graphics processing)에 관한 것으로, 보다 상세하게는, z-컬링(z-culling) 이후에 가려진 단편(occluded fragment)들을 제거하는 것에 관한 것이다.
3 차원 그래픽스 렌더링을 위한 하드웨어는 스크린에 그려지는 프리미티브(primitive)을 지정하는 입력을 수용하고, 해당 입력을 삼각형으로 변환하고, 삼각형을 프로세싱하여 스크린에 표시할 색상을 생성한다. 이 프로세스는 픽셀의 색상을 결정하는 프로세스인 픽셀 쉐이딩(pixel shading)을 포함한다. 픽셀 쉐이딩은 전형적으로 픽셀 쉐이더(pixel shader)가 결국 한 색상만 사용되는 경우 특정 픽셀에 대해 하나 초과의 색상을 불필요하게 계산할 때 발생하는 "오버드로(overdraw)"를 적어도 일부 포함한다. 오버드로는 예를 들어 스크린 스페이스에서 두 개의 삼각형이 중첩되는 경우에 발생할 수 있다. 이러한 상황에서, 픽셀 쉐이더는 제 1 삼각형 내의 픽셀에 대한 제 1 색상을 결정한 다음 제 2 삼각형 내의 동일한 픽셀에 대한 제 2 색상을 결정할 수 있다. 단지 하나의 이러한 픽셀만이 사용될 수 있으므로 결정된 색상 값 중 하나가 폐기된다. 오버드로를 줄이는 것은 그래픽스 프로세싱 하드웨어의 성능을 향상시키는 중요한 측면이다.
첨부된 도면과 관련하여 예로서 주어진 이하의 설명으로부터 보다 상세한 이해가 이루어질 수 있다:
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 디바이스의 블록도이다;
도 2는 일례에 따른 가속 프로세싱 디바이스의 블록도이다;
도 3은 도 2에 예시된 그래픽스 프로세싱 파이프 라인의 추가적인 세부 사항을 도시하는 블록도이다;
도 4는 일례에 따른, 도 3 의 빈너(binner) 에 의해 수행되는 동작의 예시이다;
도 5는 일례에 따른, 도 3의 스캔 컨버터 및 도 3의 z-컬 유닛에 의해 수행되는 동작들의 예시이다;
도 6은 일례에 따른 나중에 수신된 단편에 의해 가려진 단편을 폐기하는 방법의 흐름도이다; 및
도 7은 일례에 따른 나중에 수신된 단편에 의해 가려진 단편을 폐기하기 위한 예시적인 동작을 예시한다.
본 개시는 z-컬링(z-culling)이 완료된 후에 단편 스트림에서 중첩하는 단편을 제거 또는 식별하는 기술에 관한 것이다. 이 기술은 z-컬링 이후의 단편을 저장하는 선입 선출(FIFO : first-in-first-out) 버퍼를 유지하는 것을 포함한다. 새로운 단편이 버퍼에서 수신될 때마다 단편의 스크린 위치가 버퍼의 모든 다른 단편에 대하여 체크된다. 단편의 스크린 위치가 버퍼내 단편의 스크린 위치와 매칭되면 버퍼의 단편은 제거 되거나 중첩된 것으로 마킹된다. 단편의 스크린 위치가 버퍼 내의 임의의 단편의 스크린 위치와 매칭되지 않으면, 이미 버퍼에 있는 단편에 대하여 어떠한 수정도 수행되지 않는다. 두 경우 모두, 단편이 버퍼에 추가된다. 버퍼의 컨텐츠들은 나중에 픽셀 쉐이딩(pixel shading)을 위해 픽셀 쉐이더로 송신된다.
도 1은 본 발명의 하나 이상의 양태가 구현되는 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들어, 컴퓨터, 게임 디바이스, 휴대용 디바이스, 셋탑 박스, 텔레비전, 휴대 전화, 또는 태블릿 컴퓨터를 포함한다. 디바이스(100)는 프로세서(102), 메모리(104), 저장 디바이스(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100)는 입력 디바이스들(108) 및 출력 디바이스들(110)을 개별적으로 구동시키는 입력 드라이버들(112) 및 출력 드라이버들(114)를 또한 포함한다. 디바이스(100)는 도 1에 도시되지 않은 추가적인 컴포넌트를 포함할 수 있다는 것이 이해되어야 한다.
프로세서(102)는 중앙 프로세싱 유닛(CPU), 그래픽스 프로세싱 디바이스(GPU), 동일한 다이(die) 상에 위치된 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 : accelerated processing device)(116)를 포함한다. APD(116)는 프로세서(102)로부터 계산 명령 및 그래픽 렌더링 명령을 수용하고, 이들 계산 및 그래픽 렌더링 명령을 프로세싱하고, 디스플레이를 위해 디스플레이 디바이스(118)에 픽셀 출력을 제공하도록 구성된다.
APD(116)는 SIMD(single-instruction-multiple-data) 패러다임에 따라 계산을 수행하도록 구성된 하나 이상의 병렬 프로세싱 유닛을 포함한다. 그러나, APD(116)에 의해 수행되는 것으로 설명된 기능은 SIMD 패러다임에 따라 데이터를 프로세싱하지 않는 디바이스를 프로세싱함으로써 수행될 수도 있다.
도 2는 일례에 따른 가속 프로세싱 디바이스(116)의 블록도이다. 프로세서(102)는 시스템 메모리(104)에 프로세서(102)에 의한 하나 이상의 실행을 위한 제어 로직 모듈을 유지한다. 제어 로직 모듈은 운영 체제(120), 드라이버(122) 및 애플리케이션(126)을 포함한다. 이들 제어 로직 모듈은 프로세서(102) 및 APD(116)의 동작의 다양한 측면을 제어한다. 예를 들어, 운영 체제(120)는 직접 하드웨어와 통신하고, 프로세서(102)상에서 실행되는 다른 소프트웨어를 위해 하드웨어에 인터페이스를 제공한다. 드라이버 (122)는 예를 들어, APD(116)의 다양한 기능에 액세스하기 위해 프로세서(102)상에서 실행되는 소프트웨어(예를 들어, 애플리케이션(126))에 애플리케이션 프로그래밍 인터페이스("API")를 제공함으로써 APD(116)의 동작을 제어한다. 드라이버(122)는 APD(116)의 프로세싱 컴포넌트(예를 들어, 이하에서 추가로 상세히 논의되는 SIMD 유닛(138)과 같은)에 의한 실행을 위한 쉐이더 프로그램을 컴파일(compile)하는 적시(just-in-time) 컴파일러를 또한 포함한다.
APD(116)는 병렬 프로세싱에 적합할 수 있는 그래픽스 동작 및 비-그래픽스 동작과 같은 선택된 기능에 대한 명령 및 프로그램을 실행한다. APD(116)는 프로세서(102)로부터 수신된 명령들에 기반하여 그래픽스 파이프 라인 동작 예컨대, 픽셀 연산, 기하학적 계산, 디스플레이 디바이스(118)로의 이미지 이미지를 렌더링을 수행하기 위해 사용될 수 있다. APD(116)는 그래픽스 동작들에 직접 관련되지 않은 (또는 관련되지 않은) 계산 프로세싱 동작 예컨대, 그래픽스 프로세싱 파이프 라인(134)의 "정상" 정보 흐름의 일부가 아닌, 프로세서(102)로부터 수신되거나 명령들에 기반된 비디오, 물리현상 시뮬레이션, 컴퓨터 유체 역학, 또는 다른 작업에 관련된 동작들을 또한 실행시킨다.
APD(116)는 SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청에 따라 동작을 수행하도록 구성된 하나 이상의 SIMD 유닛(138)을 포함하는 쉐이더 엔진(shader engine)(132) ("프로그램 가능한 프로세싱 유닛(202)"로 본 출원에서 총괄하여 지칭될 수 있다)을 포함한다. SIMD 패러다임은 다수의 프로세싱 엘리먼트가 단일 프로그램 제어 흐름 제어 유닛 및 프로그램 카운터를 공유하고, 따라서, 동일한 프로그램을 실행하지만, 상이한 데이터로 해당 프로그램을 실행할 수 있는 것이다. 일례로, 각각의 SIMD 유닛(138)은 16 레인(lane)을 포함하며, 여기서 각 레인은 SIMD 유닛(138)의 다른 레인과 동일한 시간에 동일한 명령을 실행하지만 상이한 데이터로 해당 명령을 실행할 수 있다. 모든 레인이 주어진 명령을 실행할 필요가 없다면, 레인은 예측(predication)으로 스위치 오프될 수 있다. 또한 예측을 통해 다양한 제어 흐름으로 프로그램을 실행하기 위해 사용될 수 있다. 보다 구체적으로, 제어 흐름이 개별 레인에 의해 수행되는 계산에 기초하는 조건부 분기(branch) 또는 다른 명령을 갖는 프로그램에 대하여, 현재 실행되고 있지 않은 제어 흐름 경로에 대응하는 레인의 예측 및 상이한 제어 흐름 경로의 직렬 실행은 이어질 임의의 제어 흐름을 허용한다.
쉐이더 엔진(132)에서의 실행의 기본 유닛은 작업-항목(work-item)이다. 각 작업 항목은 특정 레인에서 병렬로 실행될 프로그램의 단일 인스턴스화(instantiation)를 나타낸다. 작업 항목은 단일 SIMD 유닛(138) 상의 "웨이브프론트(wavefront)"으로서 동시에 실행될 수 있다. 동일한 프로그램을 실행하도록 지정된 작업 항목의 집합을 포함하는 "작업 그룹"에 다수의 웨이브프론트들이 포함될 수 있다. 작업 그룹은 작업 그룹을 구성하는 각각의 웨이브프론트를 실행함으로써 실행될 수 있다. 웨이브프론트들은 상이한 SIMD 유닛(138)상에서 부분적으로 또는 완전히 병렬로 또는 단일 SIMD 유닛(138) 상에서 순차적으로 실행될 수 있다. 웨이브프론트들은 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 있는 가장 큰 작업 항목들의 집합으로 생각될 수 있다. 따라서, 프로세서(102) 로부터 수신된 명령이 특정 프로그램이 프로그램 동시에 단일 SIMD 유닛(138)상에서 실행될 수 없는 정도로 병렬화될 것이라면, 해당 프로그램은 두 개 이상의 SIMD 유닛(138)이 병렬화되거나 동일한 SIMD 유닛(138) 상에서 직렬화되는 (또는 요구될 때 병렬화하고 직렬화된다) 웨이브프론트로 분할된다. 스케쥴러(136)는 상이한 쉐이더 엔진들(132) 및 SIMD 유닛들(138) 상의 다양한 웨이브프론트들을 스케줄링하는 것과 관련된 동작들을 수행하도록 구성된다. 스케쥴링은 SIMD 유닛들(138)상에서 실행을 위한 웨이브프론트들을 할당하고, 웨이브프론트들이 언제 종료되었는지를 결정하고, 웨이브프론트들이 언제 스톨(stall)되고 다른 웨이브프론트와 스왑 아웃(swap out)되어야 하는지를 결정하고, 다른 스케줄링 태스크(task)을 수행하는 것을 포함한다.
쉐이더 엔진들(132)에 의해 제공되는 병렬처리(parallelism)는 픽셀 값 계산, 버텍스 변환(vertex transformation) 및 다른 그래픽스 동작 같은 그래픽스 관련 동작들에 적합하다. 프로세서(102)로부터 그래픽스 프로세싱 명령을 수용하는 그래픽스 프로세싱 파이프 라인(134)은 따라서 병렬로 실행을 위해 쉐이더 엔진(132)으로 계산 태스크를 제공한다.
쉐이더 엔진(132)은 또한 그래픽스 프로세싱 파이프 라인(134)의 "정상" 동작(예를 들어, 그래픽스 프로세싱 파이프 라인(134)의 동작을 위해 수행되는 프로세싱을 보충하기 위해 수행되는 통상의 동작들)의 일부로서 수행되지 않거나 그래픽스에 관련되지 계산 작업을 수행하는데 사용된다. 프로세서(102)상에서 실행되는 애플리케이션(126) 또는 다른 소프트웨어는 실행을 위해 APD(116)에 이러한 계산 태스크를 정의하는 프로그램 (흔히 "컴퓨팅 쉐이더 프로그램"으로 지칭됨)을 송신한다.
도 3은 도 2에 예시된 그래픽스 프로세싱 파이프 라인(134)의 추가 세부사항들을 보여주는 블록도이다. 그래픽스 프로세싱 파이프 라인(134)은 월드-스페이스 파이프 라인(302), 빈너(304), 스캔 컨버터(306), z-컬 유닛 (308), 지연 픽셀 쉐이딩 유닛(310), 픽셀 쉐이더(312) 및 출력 병합기(output merger)(314)를 포함한다. 출력 병합기(314)는 디스플레이 디바이스(118)의 디스플레이를 위해 데이터를 저장하는 프레임 버퍼(316)로 픽셀 데이터를 출력한다. 프레임 버퍼는 디스플레이 디바이스(118) 상에 데이터를 디스플레이 하는 것 이외에 목적들을 위하여 사용될 수 있다.
월드-스페이스 파이프 라인(302)는 3 차원 월드-스페이스에서 정의된 객체를 스크린 스페이스에서 정의된 삼각형으로 변환하여 버텍스 및 프리미티브 조작을 수행한다. 월드-스페이스 파이프 라인(302)은 사용자-채움 버퍼로부터 프리미티브 데이터를 판독하고(예를 들어, 애플리케이션(126)과 같은 프로세서(102)에 의해 실행되는 소프트웨어의 요청으로 채워진 버퍼) 및 파이프 라인의 나머지에 의한 사용을 위한 프리미티브들로 데이터를 어셈블링한다. 월드-스페이스 파이프 라인(302)은 프로세서(102)로부터 수신된 입력을 스크린 픽셀에 렌더링으로 보다 다루기 쉬운 형태로 변환하는 기능을 수행한다. 보다 구체적으로, 월드-스페이스 파이프 라인(302)는 버텍스 쉐이딩 기능, 테셀레이션(tessellation)이 인에이블(enable)된 경우 선택적 테셀레이션 기능 및 기하 구조 쉐이딩 기능이 인에이블된 경우 선택적 기하학적 쉐이딩 기능을 수행한다.
버텍스 쉐이딩(vertex shading)은 변환, 스키닝(skinning), 모핑(morphing) 및 버텍스 당(per-vertex) 라이팅(lighting)과 같은 다양한 버텍스 당 동작들을 수행하는 것을 포함한다. 변환 동작은 버텍스의 좌표를 변환하는 다양한 동작들을 포함할 수 있다. 이들 동작들은 모델링 변환, 뷰잉 변환, 투영 변환, 원근 분할 및 뷰포트 변환 중 하나 이상을 포함할 수 있다. 여기서, 이러한 변환은 변환이 수행되는 버텍스의 좌표 또는 "위치"를 수정하는 것으로 간주된다. 버텍스 쉐이딩의 다른 동작은 좌표 이외의 속성을 수정할 수 있다. 버텍스 쉐이딩은 하나 이상의 쉐이더 엔진(132) 상에서 실행될 버텍스 쉐이더 프로그램으로서 부분적으로 또는 완전히 구현된다. 일부 예에서, 버텍스 쉐이더 프로그램은 프로세서(102)에 의해 제공되고 컴퓨터 프로그래머에 의해 미리 기록된 프로그램에 기초한다. 드라이버(122)는 쉐이더 엔진(132) 내에서의 실행에 적합한 포맷을 갖는 버텍스 쉐이더 프로그램을 생성하도록 이런 프로그램을 컴파일한다. 다른 예에서, 버텍스 쉐이더 프로그램은 드라이버(122)에 의해 직접 제공되고, APD(116) 자체의 메모리로부터 검색되거나 또는 임의의 다른 기술적으로 실현 가능한 수단을 통해 제공된다.
테셀레이션은 프리미티브를 세분화하여 단순한 프리미티브를 더 복잡한 프리미티브로 변환한다. 테셀레이션은 입력 프리미티브를 기반으로 테셀레이션에 대한 패치(patch)를 생성하고, 패치에 대한 샘플 세트를 생성하고, 패치에 대한 샘플에 해당하는 버텍스에 대한 버텍스 위치를 계산하는 것을 포함한다. 테셀레이션은 프로그램 가능한 프로세싱 유닛(202)상에서 실행되는 쉐이더 프로그램에 의해 부분적으로 또는 전체적으로 수행될 수 있다.
기하학적 쉐이딩은 각 프리미티브 별 베이시스에 의해 버텍스 동작을 수행한다. 포인트 스프라이트 확장, 동적 파티클 시스템 동작, 퍼-핀(fur-fin) 생성, 섀도우 볼륨 생성, 단일 패스 렌더링-큐브 맵, 프리미티브 당 재료 스와핑 및 프리미티브 당 재료 셋업과 같은 동작을 포함하여 기하학 쉐이딩을 통해 다양한 유형의 동작을 수행할 수 있다. 기하학적 쉐이딩에 대한 동작은 프로그램 가능한 프로세싱 유닛(202)상에서 실행되는 쉐이더 프로그램에 의해 수행될 수 있다.
월드-스페이스 파이프 라인(302)은 전체 하드웨어(모든 고정 기능 하드웨어, 모든 프로그램 가능한 하드웨어, 또는 이들의 조합을 포함)로서 또는 하드웨어 프로세서 상에서 실행하는 전체 소프트웨어로서 또는 하드웨어( 고정된 기능 및 프로그램 가능한 하드웨어를 포함하는) 및 소프트웨어의 조합으로서 구현될 수 있다. 월드-스페이스 파이프 라인 (302)은 프레임 버퍼 (316)에 기록되고 디스플레이 디바이스 (118)에 출력될 스크린 픽셀로의 최종 변환을 위해 그래픽스 프로세싱 파이프 라인 (134) 내의 다른 유닛에 의한 프로세싱을 위한 프리미티브 (전형적으로 삼각형)를 출력한다.
옵션인 빈너(binner) (304)는 월드-스페이스 파이프 라인(302)로부터 프리미티브를 수용하고 각 프리미티브를 하나 이상의 "빈"에 할당한다. 빈은 스크린 스페이스의 특정 서브디비전(subdivision)과 관련된 픽셀 데이터의 로직상의 그룹핑이다. 예를 들어, 하나의 빈은 스크린 스페이스의 탑-릿(top-let) 코너에 대한 픽셀 데이터 그룹을 포함할 수 있다(예를 들어, 스크린 스페이스의 상단 64x64 픽셀). 빈너(304)는 특정 트리거 조건이 충족될 때까지 빈들을 채우고 그런 다음 프로세싱을 위해 스캔 컨버터(306)로, 순서대로, 빈들을 송신한다. 비닝(binning)의 목적은 그래픽스 프로세싱 파이프 라인(134)의 나중 유닛이 임의의 주어진 시간에 프로세싱되는 스크린의 부분의 관점에서 "포커싱된(focused)" 방식으로 픽셀을 프로세싱하도록 허용하는 것이다. 이 "포커싱"은 임의의 특정 프로세싱 부분에서 유지되어야 하는 작업 데이터의 양을 줄이는 것을 목표로 하고, 이는 캐시 또는 버퍼를 더 작게 및/또는 보다 효율적으로 사용될 수 있게 한다(예를 들어, 더 높은 히트율(hit rate) 등을 가짐으로써). 예를 들어, 임의의 다른 데이터를 발송하기 전에 스크린의 좌측 상단 코너와 관련된 데이터를 발송함으로써, 좌측 상단 코너와 관련된 데이터를 저장하는 버퍼 및 캐시는 스크린의 좌측 코너에 대한 데이터만 가질 것이다. 이것은 이러한 버퍼 또는 캐시가 더 작고 및/또는 더 높은 히트율을 가질 수 있게 한다. 빈너(304)의 동작의 예가 도 4에 대하여 아래에 제공된다. 빈너 동작에 관한 추가적인 세부 사항은 "Hybrid Render with Deferred Primitive Batch Binning"이라는 제목으로 2013년 3 월 29 일 출원된 미국 특허 출원번호 제 13/853,422 및 "Hybrid Render with Preferred Primitive Batch Binning and Sorting"이라는 제목으로, 2016년 8월 29일에 출원된 미국 특허 출원번호 제 15/250,357 에 제공되고, 이들 모두는 그 전체가 본 명세서에 참고로 통합된다.
스캔 컨버터(306)는 빈너(304)로부터 프리미티브를 수신하고, 이들 프리미티브에 대해 래스터화(rasterization)를 수행한다. 래스터화는 어떤 스크린 픽셀(또는 앤티얼라이싱(anti-aliasing)과 같은 목적으로 여러 색상 값 샘플이 스크린 픽셀 당 생성되는 모드에 대한 서브-픽셀 샘플)이 특정 프리미티브로 커버 되는지를 결정하는 것을 포함한다. "픽셀(pixel)"이라는 용어는 본 출원에서 "서브 픽셀 샘플"로 대체될 수 있다는 것이 이해되어야 한다. 서브 픽셀 샘플은 각 픽셀에 대해 여러 개의 샘플이 생성되는 상황에서 픽셀보다 작은 스크린 스페이스의 부분이다. 예를 들어, 앤티얼라이싱 알고리즘은 에지의 명백한 갑작스러운 변화(abruptness)를 줄이기 위해 픽셀 당 여러 샘플을 사용할 수 있다.
스캔 컨버터(306)는 특정 픽셀에 대한 데이터의 설명이 마감되지 않은 "단편(fragment)"을 생성하고 출력한다. 단편은 그래픽스 프로세싱 파이프 라인(134)의 나머지 부분을 통해 이동되고 단편에 대한 색상 및 가능하게는 다른 값을 식별하도록 프로세싱된다. 단편은 깊이 테스트 또는 다른 이유로 인해 컬링(cull)될 수 있거나, 디스플레이 디바이스(118) 상에 디스플레이하기 위한 색상 값으로서 프레임 버퍼(316)에 생존할 수 있고, 기록될 수 있다. 스캔 컨버터(306)는 다수의 단편을 스캔 컨버터(306)에서 출력되고 스크린 스페이스에 연접하는 2×2 단편들의 그룹인 "쿼드(quad)"로 그룹화할 수 있다. 각 쿼드는 스크린 스페이스에서 쿼드의 위치를 고유하게 정의하는 쿼드 어드레스에 대응할 수 있다. 예를 들어, 쿼드가 2x2 단편들의 그룹인 경우, 쿼드 어드레스는 2로 나누어진 짝수의 x 및 y 스크린 위치를 갖는 쿼드내 단편의 스크린 위치일 수 있다. 일 예시에서, 쿼드는 스크린 위치 [0, 0], [1, 0], [0, 1] 및 [1, 1]을 갖는 4개의 단편을 갖는다. 쿼드 어드레스는 2(0, 0) 로 나눈 짝수번호의 스크린 위치(0,0)을 갖는 단편의 좌표들일 것이다. 스크린 위치 [10, 8], [11,8], [10,9], [11,9]를 갖는 4개의 단편을 갖는 쿼드의 경우, 쿼드 어드레스는 양쪽 짝수 번호의 픽셀 좌표([10, 8])를 갖는 단편의 스크린 위치일 것이고, 양쪽 좌표들은 2([5, 4])로 나누어진다. 각 쿼드는 쿼드의 어느 단편이 프리미티브에 의해 커버되는지, 그렇지 않은지를 나타내는 커버리지 맵(coverage map)을 포함한다. 예를 들어, 래스터화(rasterization)는 프리미티브가 특정 쿼드의 4개 단편 중 3개를 커버하는지를 결정할 수 있다. 해당 쿼드에 대한 커버리지 맵은 3개의 커버된 단편이 커버되고 나머지 하나의 단편은 커버되지 않음을 나타낼 것이다.
z-컬 유닛(308)은 이미-본(already-seen) 단편들과 나중에-보이는(later-seen) 단편들의 깊이 값들에 의해 결정되기 때문에 이미-본 단편들에 의해 가려질 것으로 결정된 단편들을 폐기한다. 축적된 깊이 데이터는 각 프레임마다 재설정된다. 일 예에서, 어떠한 단편도 현재 프레임에 대한 z-컬(308)에 의해 프로세싱되어 있지 않은 특정 스크린 위치에 대해, z-컬 유닛(308)은 5의 깊이를 갖는 제 1 단편, 이어 8의 깊이를 갖는 제 2 단편 및 이어 2의 깊이를 갖는 제 3 단편을 수신한다. z-컬 유닛(308)은 해당 스크린 위치에 대한 어떠한 깊이 데이터도 아직 존재 하지 않기 때문에 제 1 단편을 폐기하지 않는다. 그러나, 제 2 단편에 대한 깊이 값은 해당 단편이 제 1 단편(예를 들어, 깊이 8이은 깊이 5보다 더 높다)보다 더 멀리 있다는 것을 나타내므로, z-컬 유닛(308)은 제 2 단편을 폐기한다. z-컬 유닛 (308)은 깊이 2의 값을 갖는 해당 단편이 깊이 5의 값을 갖는 다른 가장 가까운 단편보다 더 가깝기 때문에, 제 3 단편을 폐기하지 않는다. z-컬 유닛 (308)은 또한 나중에-보인 단편들의 프로세싱을 위해 스크린 위치에 대한 깊이 값을 2로 업데이트한다. 쿼드 프로세싱을 위해, 단편을 폐기하는 것은 쿼드에 대한 커버리지 맵을 수정하는 것을 포함할 수 있으며, 쿼드에 대한 커버리지 맵이 업데이트된 후 어떠한 단편도 가시적이지 않은 경우 전체 쿼드를 폐기하는 단계를 포함할 수 있다.
지연(deferred) 픽셀 쉐이딩 유닛(310)은 보유된 단편들 덮어 쓰기 할 새로운 단편들에 대해 해당 단편들을 테스트하기 위해 z-컬 유닛(308)으로부터 수신된 단편들을 보유하고 있다. 이 테스팅은 픽셀 쉐이더(312)에 의해 프로세싱될 단편들의 수를 줄이기 위해 수행된다. z-컬 유닛 (308)에 관하여 논의된 예시적인 3개의 단편으로 돌아가서, z-컬 유닛 (308)에 의해 프로세싱된 3개의 단편들 중, 제 3 단편만이 결국 가시적일 것인데, 왜냐하면 해당 단편은 카메라에 가장 근접하고, 따라서 다른 두 단편을 가릴 것이다. 그러나, z-컬 유닛(308)은 깊이 5를 갖는 제 1 단편 뿐만 아니라 깊이 2를 갖는 제 3 단편 모두를 통과시킨다. 최종 장면에서 보이지 않는 제 1 단편이 픽셀 쉐이더 (312)에 의해 프로세싱되는 것을 방지하기 위해, 지연 픽셀 쉐이딩 유닛(310)은 z-컬 유닛 (308)에 의해 통과되지만 그럼에도 불구하고 나중에-보이는 단편들에 의해 가려질 단편의 적어도 일부를 제거하기 위해 단편을 추가로 프로세싱한다. 지연 픽셀 쉐이딩 유닛(310)의 동작에 관한 세부 사항은 적어도 도 6 및 도 7 및 관련 개시 내용에 제공된다.
픽셀 쉐이더(312)는 픽셀 쉐이딩을 구현한다. 픽셀 쉐이딩은 월드-스페이스 파이프 라인(302)에서 생성된 프리미티브 및 래스터화 및 z-컬링의 결과에 기초하여 단편에 대한 값(예를 들어, 색상 또는 유사한 것)을 결정하는 것을 포함한다. 픽셀 쉐이딩은 텍스처 메모리로부터의 텍스처 적용, 쉐이딩 알고리즘 적용 및/또는 다른 동작의 적용을 포함할 수 있다. 픽셀 쉐이딩을 위한 동작은 프로그램 가능한 프로세싱 유닛(202)상에서 실행되는 하나 이상의 쉐이더 프로그램에 의해 수행될 수 있다.
출력 병합기(314)는 프레임 버퍼(316)로 출력을 위해 픽셀 쉐이더(312)로부터 수신된 단편들을 프로세싱한다. 프레임 버퍼는 디스플레이 디바이스(118)에 출력하기 위해 또는 다른 목적으로 픽셀 데이터를 저장한다.
월드-스페이스 파이프 라인 (302), 빈너 (304), 스캔 컨버터 (306), z-컬 유닛 (308), 지연 픽셀 쉐이딩 유닛 (310), 픽셀 쉐이더 (312) 및 출력 병합기 (314)의 각각은 전체 하드웨어(모든 고정 기능 하드웨어, 모든 프로그램 가능한 하드웨어, 또는 이들의 조합을 포함)로서 또는 하드웨어 프로세서 상에서 실행하는 전체 소프트웨어로서 또는 하드웨어(고정된 기능 및 프로그램 가능한 하드웨어를 포함하는) 및 소프트웨어의 조합으로서 구현될 수 있다.
도 4는 일례에 따른 도 3 의 빈너(304)에 의해 수행되는 동작의 예시이다. 여러 스크린-스페이스 서브디비전(404)으로 분할된 스크린-스페이스(402)가 예시된다. 스크린-스페이스(402)는 픽셀이 디스플레이 디바이스(118)로 최종 출력을 위해 렌더링될 수 있는 기하하적 영역을 나타낸다. 각각의 스크린-스페이스 서브디비전(404)은 스크린-스페이스(402)의 공간적으로 별개의 부분이다.
도 4는 월드-스페이스 파이프 라인(302)으로부터 수신된 5개의 상이한 프리미티브(406)를 도시한다. 상이한 프리미티브(406)는 상이한 스크린-스페이스 서브디비전(404)을 커버한다. 제 1 프리미티브(406(1))는 스크린-스페이스 서브디비전(404(1)), 스크린-스페이스 서브디비전(404(2)), 스크린-스페이스 서브디비전 (404(4)) 및 스크린-스페이스 서브디비전 (404(5))을 커버한다. 제 2 프리미티브(406(2))는 스크린-스페이스 서브디비전 (404(1)), 스크린-스페이스 서브디비전 (404(2)) 및 스크린-스페이스 서브디비전 (404(3))을 커버한다. 제 3 프리미티브(406(3))는 스크린-스페이스 서브디비전 (404(5))를 커버한다. 제 4 프리미티브(406(4))는 스크린-스페이스 서브디비전 (404(3)), 스크린-스페이스 서브디비전 (404(5)) 및 스크린-스페이스 서브디비전 (404(6))을 커버한다. 제 5 프리미티브(406(5))는 스크린-스페이스 서브디비전 (404(5)), 스크린-스페이스 서브디비전 (404(6)), 스크린-스페이스 서브디비전 (404(7)), 스크린-스페이스 서브디비전 (404(8)) 및 스크린-스페이스 서브디비전 (404(9))를 커버한다.
빈너 (304)는 빈(bin) 1-9(빈1 (408(1)), 빈 2 ((408)(2)) 등,내지 빈 9 (408(9)))을 생성한다. 각각의 빈(408)은 해당 특정 빈과 관련된 스크린-스페이스 서비디비전 (404)을 커버하는 프리미티브(406)를 포함한다. 빈들(408)은 프로세싱을 위해 그래픽스 프로세싱 파이프 라인(134)의 나머지 부분에 순서대로 송신된다. 도시된 특정 순서는 행(row)에 의해 좌우로 남겨지지만, 비록 빈(bin)(408)이 프로세싱을 위해 송신되는 순서는 임의의 기술적으로 실행 가능한 순서일 수 있다.
프리미티브(406)가 관련된 스크린-스페이스 서브디비전(404)의 경계에 의해 "차단(cut off)"된 것으로 도 4에 도시되어 있지만, 전체 프리미티브는 각각의 특정 빈에 포함된다. 그래픽스 프로세싱 파이프 라인(134)의 나머지가 스크린-스페이스 서브디비전 (404) 내 그 외부가 아니라 단편들에 대한 데이터를 프로세싱하는 것을 알 수 있도록 관련된 스크린-스페이스 서브디비전(404)의 경계들에 정렬된 클리핑(clipping) 직사각형은 그래픽스 프로세싱 파이프 라인(134)의 나머지에 각각의 빈(408)으로 송신된다. 인접 픽셀의 데이터를 사용하는 앤티얼라이싱 또는 기타 동작과 같이 이러한 수정이 필요한 다양한 동작들에 대해 클리핑 직사각형의 경계는 수정될 수 있다.
클리핑 직사각형과 함께 빈(408)은 그래픽스 프로세싱 파이프 라인(134)의 나머지 부분에 의해 프로세싱되어 프리미티브를 빈-순서로 픽셀로 렌더링한다. 예를 들어, 306은 제 1 빈(408(1)), 제 2 빈(408(2)), 제 3 빈(408(3)) 등의 프리미티브에 대한 픽셀 커버리지(pixel coverage)를 결정한다. 스캔 컨버터(scan converter)(306)는 제 1 빈(408(1))에 대한 프리미티브, 제 2 빈(408(2))에 대한 프리미티브, 제 3 빈(408(3))에 대한 프리미티브 등을 래스터화한다. 전술한 바와 같이, 래스터화는 특정 프리미티브에 의해 커버되는 스크린 위치를 식별하는 것을 포함한다. 클리핑 직사각형은 식별된 스크린 위치를 특정 빈(408)과 관련된 스크린-스페이스 서브디비전(404) 내에 포함된 것으로만 제한한다. 따라서, 특정 빈(408)에 대한 스캔 컨버터(306)의 출력은, 빈(408)의 각각의 프리미티브(406)에 대하여, 빈(408)에 관련된 스크린-스페이스 서브디비전 (404)에 있고, 해당 프리미티브(406)에 의해 커버되는 단편들을 포함한다. 특정 빈(408)에 대한 픽셀 쉐이더(pixel shader)(312)의 출력은, 각각의 프리미티브(406)에 대하여, 해당 프리미티브(406)를 커버하고, 해당 빈(408)과 관련된 스크린-스페이스 서브디비전(404) 내에 있는 쉐이딩된 단편들을 포함한다.
도 5는 일례에 따른, 도 3 의 스캔 컨버터(306) 및 도 3의 z-컬 유닛(308)에 의해 수행되는 동작의 예시이다. 스캔 컨버터(306)는 월드-스페이스 파이프 라인(302) 및 빈너(304)에 의해 프로세싱된 프리미티브(406)를 수신하여 스캔 변환("래스터화(rasterization)"라고도 함)을 수행한다. 스캔 변환은 어떤 스크린 위치(502)가 프리미티브(406)에 의해 커버되는지를 식별하는 것을 포함한다. 특정 스크린 위치(502)가 특정 프리미티브에 의해 커버되는지의 여부를 결정하는 규칙은 변화할 수 있으며, 어떤 스크린 위치(502)가 프리미티브(406)에 의해 커버되는지를 식별하기 위한 임의의 기술적으로 실행 가능한 방법이 사용될 수 있다. 프리미티브가 픽셀을 커버하는지 여부를 결정하기 위한 하나의 예시적인 기술은 픽셀의 중심점(center point)이 프리미티브의 에지 내에 있는지를 결정하는 것이다. 이 예에서, 픽셀의 중심점이 프리미티브의 에지 내에 있으면, 프리미티브가 해당 픽셀을 커버하는 것으로 간주된다. 이 예에서, 픽셀의 중심점이 프리미티브의 에지 내에 있지 않으면, 프리미티브는 해당 픽셀을 커버하지 않는 것으로 간주된다. 픽셀이 프리미티브에 의해 커버되는지 여부를 결정하는 임의의 다른 기술적으로 실행 가능한 기술이 대안적으로 사용될 수 있다. 일부 상황에서, 그래픽스 프로세싱 파이프 라인(134)은 스크린 픽셀 당 다수의 "샘플"(예를 들어, 색상 값)을 포함하는 이미지를 프레임 버퍼(316)에 생성한다. 멀티-샘플 이미지는 해당 픽셀에 대하여 생성된 다수의 샘플을 기반으로 각 스크린 픽셀에 대해 단일 색상 값을 생성하는 멀티-샘플 앤티얼라이싱과 같은 다양한 태스크에 사용될 수 있다. 이런 상황에서, 스캔 컨버터(306)는 픽셀 내의 각 샘플에 대한 커버리지를 결정하고, 픽셀 내의 각 커버된 샘플에 대한 단편을 출력한다. 또한, 스캔 컨버터(306)는 각 픽셀에 대한 커버리지 마스크(coverage mask) 출력을 생성할 수 있는데, 여기서 커버리지 마스크는 픽셀의 어느 샘플 이 프리미티브에 의해 커버되는지를 표시한다. 스캔 컨버터(306)는 z-컬 유닛(308)에 의한 프로세싱을 위해 프리미티브(406)에 의해 커버되는 단편들(504)을 출력한다. 도 5에서, 여섯 개 스크린(502)은 프리미티브(406)에 커버되는 것으로 간주된다.
6개의 스크린 위치(502)에 대응하는 6개의 단편들(504 (504(1) 내지 504(6)) 가 도 5에 도시된다. 각 단편(504)는 또한 예시된 깊이 값을 가지며, 이는 각 단편(504) 내에 도시된 숫자이다. 각각의 단편(504)에 대한 깊이 값은 도 5에 도시된 예에서 6 이지만, 다른 예들에서, 동일한 프리미티브에 대한 단편은 상이한 깊이 값을 가질 수 있다.
z-컬링을 수행하기 위해, z-컬 유닛(308)는 깊이 버퍼(506)에 깊이 값에 대해 수신된 단편들(504)에 대한 깊이 값을 비교한다. 깊이 버퍼(506)에 대응하는 깊이 값이 고려되는 단편(504)이 z-컬 유닛(308)에 의해 이미 프로세싱된 단편에 의해 가려진다고 표시하는 경우, 해당 단편(504)은 폐기된다. 깊이 버퍼(506)에 대응하는 깊이 값이 고려되는 단편(504)이 z-컬 유닛(308)에 의해 이미 프로세싱된 단편에 의해 가려지지 않는다고 표시하는 경우, 해당 단편(504)은 z-컬 유닛(308)을 통과하고 깊이 버퍼(506)에 깊이 값은 통과된 단편(504)의 깊이 값에 매칭되도록 업데이트된다.
깊이 버퍼(506)의 깊이 값은 프리미티브(406)에 로컬인 스크린 영역(508)에 대하여 도시 되지만, 단순성과 명확성을 위하여 깊이 버퍼(506)의 다른 부분들로부터 생략된다. 그러나, 깊이 버퍼(506)는 스크린의 다른 영역에 대한 깊이 값을 저장한다는 것을 이해해야 한다.
프리미티브(406)에 로컬인 스크린 영역(508)은 좌측에서 우측으로, 위에서 아래로, 순서대로 2, 9, 9, 9, 2, 9, 9, 9, 2, 9, 9, 및 9인 12개의 깊이 값을 도시한다. 프리미티브(406)에 기초하여 생성된 단편들(504)의 위치는 깊이 버퍼(506)에 프리미티브(406)의 위치에 의해 예시된 상이한 깊이 값들에 대응한다. 보다 구체적으로, 단편 (504 (1))은 최상위 깊이 값 2와 중첩하고, 단편 (504 (2))는 중간 깊이 값 2와 중첩하고, 단편 (504(4))는 바닥 깊이 값 2와 중첩하고, 단편 (504 (3))는 좌측-중간 깊이 값 9와 중첩하고, 단편 (504(5))는 좌측-바닥 깊이 값 9과 중첩하고, 단편 (504 (6))은 바닥-중간 깊이 값 9와 중첩한다.
z-컬 유닛 (308)은 단편들(504)의 깊이 값을 깊이 버퍼(506)에 단편(504)에 의해 중첩된 깊이 값과 비교한다. 깊이 버퍼(506)에 깊이 값이 중첩 단편(504)의 깊이 값보다 낮으면 (및 따라서 관련 단편이 중첩 단편(504)보다 카메라에 더 가까우면), 중첩 단편(504)은 z-컬 유닛(308)에 의해 이미 프로세싱된 단편에 의해 가려진다. 해당 상황에서, z-컬 유닛(308)은 중첩 단편을 폐기한다. 도 5에서, 가장 좌측의 단편(504 (단편 504(1), 단편 504(2) 및 단편 504(4))은 6의 깊이 값을 가지며, 깊이 버퍼(506)에서의 중첩 깊이 값은 2와 같다. 따라서, z-컬 유닛(308)은 가장 좌측의 단편(504)을 폐기한다(이 폐기는 "X"로 표시된다). 만약 깊이 버퍼(506)의 깊이 값이 중첩 단편(504)의 깊이 값보다 더 크면, 중첩 단편(504)는 z-컬 유닛(308)에 의해 이미 프로세싱된 임의의 단편(504)에 의해 가려지지 않는다. 이 상황에서, z-컬 유닛(308)은 단편(504)를 폐기하지 않고 대신에 깊이 버퍼(506)에 저장된 깊이 값을 가려지지 않은(not-occluded) 단편(504)의 깊이 값으로 업데이트한다. 도 5에서, 단편(504(3)), 단편(504(5)) 및 단편(504(6))에 대응하는 3개의 깊이 값들이 업데이트된다. 따라서, 깊이 버퍼 업데이트 후에, 2의 3개의 깊이 값, 6의 3개의 깊이 값, 9의 나머지 깊이 값이 있다.
요약하여, z-컬 유닛(308)은 z-컬 유닛(308)에 의해 프로세싱된 단편들(504)의 최저 깊이 값을 저장하는 깊이 버퍼(506)을 유지한다. z-컬 유닛(308)으로부터 출력된 나중 단편들은 z-컬 유닛(308)으로부터의 출력된 선행 단편들에 의해 가려지지 않을 수 있다. 그러나, z-컬 유닛(308)로부터의 출력된 선행 단편들은 z-컬 유닛(308)에 의해 나중에 프로세싱된 단편들에 의해 잠재적으로 가려질 수 있다. 특정 "깊이 모델(depth model)"이 본 출원에서 설명되며, 여기서 더 낮은 깊이 값은 단편이 더 높은 깊이 값보다 카메라에 더 가까운 것을 의미한다. 그러나, 당업자는 본 출원에서 제공된 교시가 이 특정 "깊이 모델"에 한정되지 않고 본 출원에 제공된 교시가 임의의 다른 기술적으로 실행 가능한 깊이 모델에 적용될 수 있음을 이해해야 한다. 일 예시에서, 더 높은 깊이 값은 더 낮은 깊이 값을 갖는 단편보다 단편이 카메라에 더 가깝다는 것을 의미한다. 임의의 다른 기술적으로 실행 가능한 깊이 모델도 또한 가능하다.
이 때문에, 지연 픽셀 쉐이딩 유닛(310)은 선행 단편들을 가리는 나중 단편들을 체크하기 위해 z-컬 유닛(308)으로부터 출력된 단편들을 "보유(hold)"한다. 도 6은 일 실시예에 따라, 나중에 수신된 단편에 의해 가려진 단편을 폐기하기 위한 방법(600)의 흐름도이다. 도 1 내지 도 5와 관련하여 도시되고 기술된 시스템과 관련하여 설명되었지만, 임의의 기술적으로 실행 가능한 순서로 본 방법을 수행하도록 구성된 임의의 시스템이 본 개시의 범위 내에 있다는 것이 이해되어야 한다.
도시된 바와 같이, 방법 (600)은 단계 (602)에서 시작하고, 여기서 스캔 컨버터(306)는 프리미티브에 대응하는 단편의 세트를 획득하기 위해 프리미티브를 래스터화한다. 래스터화는 도 3 및 도 5와 관련하여 설명된 바와 같이 수행될 수 있다. 비닝(binning)이 사용되는 경우, 획득된 단편 세트는 프리미티브에 대응하고 특정 스크린-스페이스 서브디비전(404) 내에 있는 단편이다. 단계 (604)에서, z-컬 유닛(308)은 스캔 컨버터(306)로부터 래스터화된 단편들을 수신하고, 해당 단편들에 대해 z-컬링(z-culling)을 수행한다. z-컬링은 수신된 단편의 깊이 값을 깊이 버퍼에 저장된 깊이 값과 비교하는 것을 포함한다. 깊이 버퍼에서의 대응 값보다 큰 깊이 값을 갖는 단편들은 이전에 프로세싱된 단편에 의해 가려지므로 폐기된다. 깊이 버퍼에서 해당 값보다 작은 깊이 값을 가진 단편은 이전에 프로세싱된 단편에 의해 가려지지 않는다. 해당 상황에서, z-컬 유닛(308)는 깊이 버퍼의 깊이 값을 단편의 깊이 값으로 업데이트하고, 지연 픽셀 쉐이딩 유닛(310)으로 단편을 전달한다.
프로세스 (606)에서, 지연 픽셀 쉐이딩 유닛(310)은 수신된 단편들을 지연 픽셀 쉐이딩 유닛(310)에 의해 이전에 프로세싱된 단편들을 저장하는 선입 선출("FIFO") 버퍼에 저장된 단편들과 비교한다. 보다 구체적으로, 지연 픽셀 쉐이딩 유닛(310)은 인입 단편의 스크린 위치가 FIFO 버퍼에 저장된 단편의 스크린 위치와 매칭하는지 여부를 결정한다. 비닝은 FIFO 버퍼에서 매칭이 발생할 가능성을 향상시키는데 왜냐하면 비닝을 사용하면, 스크린-스페이스의 다른 부분에 대한 단편이 아닌 빈과 관련된 스크린 스페이스의 작은 부분에 대한 단편은 지연 픽셀 쉐이딩 유닛(310)에서 함께 프로세싱된다.
프로세스 (608)에서, FIFO 버퍼의 단편의 스크린 위치에 매칭하는 스크린 위치를 갖는 단편에 대하여, 지연 픽셀 쉐이딩 유닛(310)은 FIFO로 부터 가장 오래된 매칭 단편을 제거한다. 만약 인입 단편과 FIFO 버퍼 내의 단편 사이의 스크린 위치 매칭이 없으면, 지연 픽셀 쉐이딩 유닛(310)은 FIFO 버퍼로부터 임의의 단편을 폐기하지 않는다. 단계 (610)에서, 지연 픽셀 쉐이딩 유닛(310)은 수신된 단편을 FIFO 버퍼에 위치시킨다. 지연 픽셀 쉐이딩 유닛(310)은 단계 (606)에 비교하면 그러한 단편이 이미 FIFO 버퍼에 있는 단편과 매칭하는지 여부에 관계없이 이 단계에서 단편을 FIFO 버퍼에 위치시킨다.
지연 픽셀 쉐이딩 유닛(310)은 플러시 조건(flush condition)이 충족될 때까지 FIFO를 계속 채우고, 해당 시점에서, 지연 픽셀 쉐이딩 유닛(310)은 FIFO에 의해 표시된 순서로 픽셀 쉐이더(312)로 FIFO에 단편들을 송신한다. 플러시는 : 1) FIFO가 가득 채워짐; 2) 빈너(304)는 특정 빈(408)에 대한 모든 프리미티브가 빈너(304)에 의해 송신되었다는 것을 지연 픽셀 쉐이딩 유닛(310)에 지시한다; 3) 빈너(304)는 현재 프레임이 종료되고 다음 프레임이 프로세싱되어야 한다는 것을 지연 픽셀 쉐이딩 유닛(310)에 지시하거나, 또는 4) 디바이스 드라이버(122) 또는 애플리케이션(126)에 의해 설정된 프로그램 가능한 플러시 상태를 포함하는 임의의 이유로 플러시가 수행되어야 함을 나타내는 임의의 다른 이벤트를 포함한다.
상기에서 설명된 방법(600)은 스크린 픽셀당 단일 단편 또는 스크린 픽셀 당 다수의 단편들이 존재하는 상황에서 단편들을 프로세싱할 수 있다. 더구나, 특정 "깊이 모델"이 단계(604)(더 낮은 깊이 값이 더 높은 깊이 값보다 카메라에 더 가까운 단편을 나타내는 것)과 관련하여 설명되었지만, 다른 깊이 모델이 대안적으로 사용될 수 있다.
도 7은 일례에 따른 나중에 수신된 단편에 의해 가려진 단편을 폐기하기 위한 예시적인 동작을 도시한다. 도 7은 제 2 입력 프리미티브(702(2))가 지연 픽셀 쉐이딩 유닛(310)에 입력되기 전에 지연 픽셀 쉐이딩 유닛(310)에 입력된 제 1 입력 프리미티브(702(1))을 예시한다. 제 1 입력 프리미티브(702(1))는 개별 쿼드에 대하여 도시된 대로 x 및 y 스크린 위치 값을 갖는 쿼드 0 내지 9(여기서, 0 내지 9는 각각 "쿼드 식별자(quad identifier)"라고 함)를 포함한다. 제 2 입력 프리미티브(702(2))는 또한 도시된 바와 같이 x 및 y 스크린 위치 값을 갖는 쿼드 10 내지 19를 갖는다(여기서, 10 내지 19는 각각 "쿼드 식별자"라고 함). 보다 구체적으로는, 제 1 입력 프리미티브 (702(1))는 위치 0, 0에서 쿼드 0를, 위치 1, 0에서 쿼드 1을, 위치 2, 0에서 쿼드 2를, 위치 3, 0에서 쿼드 3을, 위치 0, 1에서 쿼드 4를 1, 1에서 쿼드 5를, 2, 1에서 쿼드 6을, 0, 2에서 쿼드 7를, 1,2에서 쿼드 8을 및 0, 2에서 쿼드 9를 갖는다. 제 2 입력 프리미티브 (702(2))는 위치 0, 0에서 쿼드 10을, 위치 1, 0에서 쿼드 11을, 위치 2, 0에서 쿼드 12를, 위치 3, 0에서 쿼드 13을, 위치 1, 1에서 쿼드 14를 위치 2, 1에서 쿼드 15를, 위치 3, 1에서 쿼드 16을, 위치 2, 2에서 쿼드 17를, 위치 3,2에서 쿼드 18을 및 위치 3, 3에서 쿼드 19를 갖는다. 각각의 쿼드에 대한 커버리지가 그래픽적으로 표시된다. 쿼드의 커버된 픽셀은 특정 해칭(hatching)으로 표시되고 커버되지 않은 픽셀에는 어떠한 해칭도 없다. 예를 들어, 쿼드 3에서, 좌측 상단 픽셀, 우측 상단 픽셀 및 좌측 바닥 픽셀에는 커버리지가 있지만 우측 바닥 픽셀에는 커버리지가 없다. 커버리지 마스크와 지연 픽셀 쉐이딩 유닛(310)의 동작 사이의 상호 작용을 예시하기 위해, 개별 단편들 대신에 도 7에 쿼드가 도시된다.
선입 선출("FIFO") 버퍼(706)는 FIFO 버퍼의 상태 (20 박스의 행으로 예시되고, 각 상자는 다른 FIFO 버퍼 엔트리에 대응한다) 그리고 지연 픽셀 쉐이딩 유닛(310)에서 쿼드가 수신될 때 어떻게 FIFO 버퍼가 변화하는지를 예시한다. FIFO 버퍼는 z-컬 유닛(308)로부터 수신된 쿼드에 대한 데이터를 저장하는 FIFO 엔트리를 포함한다. FIFO 버퍼의 목적은 인입 쿼드의 스크린 위치가 FIFO 버퍼에 저장된 더 오래된 쿼드의 스크린 위치에 대해 체크되는 것을 허용하는 것이어서 더 오래된 쿼드 또는 그 일부가 새로운 쿼드에 의해 가려지기 때문에 폐기되어야 하는지 여부를 결정할 수 있다. 전술한 바와 같이, z-컬 유닛(308)은 나중에 프로세싱된 단편이 이전에 프로세싱된 단편에 의해 가려지지 않는 것을 보장한다. 따라서, 이전에 프로세싱된 단편과 동일한 스크린 위치에 있는 나중에 프로세싱된 단편의 경우, 나중에 프로세싱된 단편은 이전 프로세싱 단편을 가리므로 폐기된다.
새로운 쿼드가 수신될 때 마다, 지연 픽셀 쉐이딩 유닛(310)은 FIFO 버퍼에 모드 쿼드의 스크린 위치들에 대한 해당 쿼드의 스크린 위치를 체크한다. 만약 매칭이 발생하지 않으면(FIFO 버퍼에 쿼드의 스크린 위치가 수신된 쿼드의 스크린 위치와 동일하면 매칭이 발생한다), 지연 픽셀 쉐이딩 유닛(310)은 FIFO에 이미 저장된 쿼드에 어떠한 변화도 수행하지 않는다. 매칭이 발생하고, 새로운 쿼드가 커버되고 FIFO에 매칭 쿼드의 커버된 단편과 중첩되는 적어도 하나의 단편을 가지면, 지연 픽셀 쉐이딩 유닛(310)은 FIFO 버퍼를 업데이트하여 적어도 하나의 인입 쿼드의 단편에 의해 중첩된 FIFO 버퍼 에 단편들을 제거한다. 매칭이 일어나는지 여부에 관계없이, 지연 픽셀 쉐이딩 유닛(310)은 일 만큼 쿼드를 다운 (도 7에서 우측으로) 시프트하여, "최신 엔트리"에 대응하는 FIFO 버퍼의 끝에 (도 7의 FIFO 버퍼의 가장 좌측 끝) FIFO 버퍼에 새로운 쿼드를 저장한다.
제 1 FIFO의 버퍼 상태(706(1))는 제 1 입력 프리미티브 (702(1))의 쿼드 0를 수신한 후에 FIFO 상태를 예시한다. 제 2 FIFO 버퍼 상태(706(2))는 제 1 입력 프리미티브(702(1))의 쿼드 1을 수신 한 후 FIFO 버퍼의 상태를 예시한다. 앞으로 건너 뛰어서, 제 3 FIFO 버퍼 상태(706(3))는 FIFO 버퍼 내의 제 1 입력 프리미티브(702(1))의 모든 쿼드를 나타낸다. 모든 제 1 입력 프리미티브(702(1))의 모든 쿼드가 FIFO 버퍼에 입력된 후, 지연 픽셀 쉐이딩 유닛(310)은 제 2 입력 프리미티브(702(2))의 쿼드를 프로세싱한다. 제 2 입력 프리미티브(702(2))의 쿼드가 제 1 입력 프리미티브(702(1))의 쿼드 후에 프로세싱된다는 사실은 스캔 컨버터(306)가 쿼드를 이 순서로 출력한다는 사실에 기인한다. 이 특정 순서화는 스캔 컨버터(306)가 제 1 입력 프리미티브(702(1))를 먼저 프로세싱 한 다음 제 2 입력 프리미티브(702(2))를 프로세싱하고 따라서, 제 2 입력 프리미티브 (702(2))에 대한 쿼드 전에 제 1 입력 프리미티브 (702(1))에 대한 쿼드를 지연 픽셀 쉐이딩 유닛(310)으로 발송한다는 사실의 결과일 수 있다. 래스터화 이후에 하지만 지연 픽셀 쉐이딩 유닛(310)의 동작 이전에 z-컬링이 수행되기 때문에, 나중에 수신된 프리미티브(제 2 입력 프리미티브(702(2))의 각각의 단편은 이전에 수신된 프리미티브의 임의의 단편에 의해 가려지지 않는 것이 보장된다(제 1 입력 프리미티브 702(1)).
제 3 FIFO 버퍼 상태(706(3)) 후, 지연 픽셀 쉐이딩 유닛(310)은 쿼드(10)를 수신하고 FIFO 버퍼에 쿼드들에 대하여 쿼드(10)을 체크한다. 지연 픽셀 쉐이딩 유닛(310)은 쿼드 (0)가 쿼드 (10)과 동일한 스크린 위치를 갖는 지를 결정한다. 이러한 충돌(conflict)은 쿼드 (0) 둘레에 굵은 직사각형을 갖는 제 4 FIFO 버퍼 상태(706(4)) 에 표시된다. 이 상황에서, 지연 픽셀 쉐이딩 유닛 (310)은 쿼드 (0) 인 FIFO 버퍼의 더 오래된 충돌 쿼드를 수정하거나 제거한다. 수정 또는 제거는 보다 오래된 그리고 보다 새로운 충돌 쿼드에서 중첩 커버리지가 있는 정도에 기초한다. 보다 구체적으로, 새로운 쿼드가 이미 FIFO 버퍼에 있는 쿼드와 동일한 스크린 위치를 갖는다면, 지연 픽셀 쉐이딩 유닛(310)은 새로운 쿼드의 커버리지와 오래된 쿼드의 커버리지 사이의 중첩 정도(degree of overlap)를 결정한다. 만약 부분적 중첩이 있으면, 오래된 쿼드가 업데이트되어 새로운 쿼드에 의해 중첩된 오랜돈 쿼드의 부분이 FIFO 버퍼로부터 제거된다. 부분 중첩은 오래된 쿼드가 새로운 쿼드에 의해 커버되는 쿼드의 전부는 아니지만 적어도 일부를 커버한다는 것을 의미한다. 전체 중첩이 있으면, 지연 픽셀 쉐이딩 유닛(310)은 FIFO 버퍼로부터 오래된 쿼드를 제거한다. 전체 중첩은 오래된 쿼드가 새로운 쿼드에 의해 완전히 커버되는 것을 의미한다(즉, 오래된 쿼드에 의해 커버되는 것으로 표시된 쿼드의 모든 부분이 새로운 쿼드에 의해 커버된다). 중첩이 없는 경우, 지연 픽셀 쉐이딩 유닛(310)은 FIFO 버퍼 내의 오래된 쿼드에 어떠한 변화도 수행하지 않는다. 어떠한 중첩도 없다는 것은 오래된 쿼드에 커버되는 것으로 표시된 쿼드의 어떠한 부분도 새로운 쿼드로 커버되지 않음을 의미한다.
쿼드(10)는 쿼드(0)와 동일한 스크린 위치에 있다. 그러나, 쿼드(0)는 스크린 위치의 전체 영역을 커버하지만, 쿼드 (10)은 우측 상단 부분만 커버한다. 이러한 상황에서, 지연 픽셀 쉐이딩 유닛(310)은 쿼드 (0)가 쿼드 (10)에 의해 부분적으로 중첩된다고 결정하고, 따라서, FIFO 버퍼에서 쿼드 (0)을 수정하여 중첩된 부분을 제거한다. 따라서, 상태 (706(5))에서, 쿼드 (0)는 제거된 우측 바닥 부분은 포함하지 않고 좌측 바닥 부분 만을 포함하는 것으로 도시된다.
또한 상태(706(5))에서, 지연 픽셀 쉐이딩 유닛(310)은 쿼드(11)이 FIFO 버퍼내 다른 쿼드 : 쿼드 (1)와 같은 스크린 위치를 갖는지를 결정한다(둘 모두의 쿼드는 스크린 위치(1, 0)를 갖는다). 응답하여, 지연 픽셀 쉐이딩 유닛(310)은 쿼드 (1)의 어느 부분이 쿼드 (11)에 의해 커버되는 지를 결정한다. 쿼드 (11)은 쿼드(1)에 완전히 중첩되기 때문에, 지연 픽셀 쉐이딩 유닛(310)은 FIFO 버퍼로부터 쿼드(1)를 제거한다. 따라서, 상태((706(6))에서, 쿼드(1)는 "빈(emptry)" 쿼드이고 픽셀 쉐이더(312)로 포워딩되지 않아야 하는 것을 나타내는 쿼드 (1)은 어떠한 커버리지도 갖지 않는 것으로 도시된다. 도시된 구현예에서, 빈 쿼드는 빈 쿼드에 의해 점유된 슬롯을 자유(free)롭게 하는 대신에 FIFO 버퍼에 유지되지만, 다른 구현예에서는, 슬롯이 프리드(freed)될 수 있고 비어 있지 않은 쿼드가 프리드 슬롯 쪽으로 시프트될 수 있다. 상태(706(6))에서, 지연 픽셀 쉐이딩 유닛(310)은 쿼드 (12)가 쿼드 (2)와 완전히 중첩되고, 따라서, FIFO 버퍼로부터 쿼드 (2)를 제거한다고 결정한다.
앞으로 점프하여, FIFO의 버퍼 상태(706(7))는 입력 프리미티브 (702(1)) 및 입력 프리미티브(702(2))의 쿼드의 프로세싱 후의 FIFO 버퍼를 예시한다. 나중에 쿼드 (10)에 의해 부분적으로 중첩된 쿼드 (0)는 비중첩 부분만이 남는다. 쿼드들 (1, 2 및 3)은 쿼드들 (11, 12 및 13)에 의해 완전히 중첩되므로 FIFO 버퍼로부터 제거된다. 쿼드 (4)는 도시된 나중 쿼드에 의해 커버되지 않아서 FIFO 버퍼에 남아 있다. 쿼드 (5)는 쿼드 (14)에 의해 부분적으로 중첩되며 따라서, 비중첩 부분만이 FIFO 버퍼에 남는다. 쿼드 (6)은 쿼드 (15)에 의해 완전히 ?첩되므로 FIFO 버퍼로부터 제거된다. 쿼드들 (7, 8 및 9)는 후속 쿼드에 의해 중첩되지 않으므로 FIFO 버퍼에서 수정되지 않는다. 유사하게, 입력 프리미티브(702(2))의 모든 쿼드는 임의의 다른 쿼드에 의해 중첩되지 않으며 따라서, FIFO 버퍼에서 수정되지 않는다.
FIFO 버퍼의 컨텐츠가 프로세싱을 위해 파이프 라인의 나머지 부분으로 송신되고 프레임 버퍼(316)에 출력 프리미티브(704(1)) 및 출력 프리미티브(704(2))를 생성한다 (출력 프리미티브(704(1)) 또는 출력 프리미티브(704(2))에 중첩되는 어떠한 나중 프리미티브도 프로세싱되지 않는다고 가정하여). 출력 프리미티브(704(1))는 도시된 바와 같이 출력 프리미티브(704(2))에 의해 클리핑(clip)된다. 픽셀 쉐이더(312)는 프리미티브의 클리핑된 부분을 프로세싱하지 않는데 왜냐하면, 해당 클리핑된 부분들은 픽셀 쉐이도(312)로 발송되기 전에 FIFO 버퍼로부터 제거되기 때문이다.
상기의 논의는 픽셀 당 하나의 샘플이 존재하는 예제이다. 그러나, 상술한 기술들은 각 픽셀이 다수의 샘플들을 갖는 상황들에 적용될 수 있다.
상기 기술들의 하나의 수정은 해당 단편들을 삭제하는 대신 단편들을 중첩하는 것으로 마킹하는 것을 포함한다. 보다 구체적으로, FIFO 버퍼 내의 인입 쿼드와 쿼드간에 매칭이 발생하고, 지연 픽셀 쉐이딩 유닛(310) 이 두 쿼드 간의 커버리지에 중첩이 있다고 결정하면, 지연 픽셀 쉐이딩 유닛(310)은 양쪽 쿼드들의 중첩 단편(들)을 중첩된 것으로 마킹한다. 이어서, 픽셀 쉐이더(312)는 이 중첩 정보를 사용 하여, 더 오래된 중첩 단편드은 보다 새로운 중첩 단편들 보다 먼저 프로세싱되는 것을 보장한다. 픽셀 쉐이더(312)는 장벽 동작(barrier operation)을 사용하여 픽셀 쉐이더(312)에서의 동작이 보다 오래된 단편이 프로세싱된 후 보다 새로운 중첩 단편을 프로세싱하기 전까지 대기하도록 할 수 있다. 투명도(transparency)가 켜지면 이 "마킹(marking)"모드를 사용할 수 있다. 투명도를 켜면, 다른 단편과 중첩하는 단편은 해당 단편을 단순히 덮어 쓰지 않고 블렌딩 동작(blending operation)에서 해당 단편과 블렌딩될 수 있다. 이러한 상황에서, FIFO 버퍼에서 가장 오래된 매칭 단편을 제거하는 대신에, FIFO 버퍼에서 매칭되는 각각의 단편이 중첩되는 것으로 마킹된다. 투명도가 켜져 있을 때의 또 다른 대안은 FIFO 버퍼를 바이패스(bypass)하는 것이다. 이러한 상황에서, 지연 픽셀 쉐이딩 유닛(310)은 효과적으로 스위치 오프되거나 바이패스 된다. 단편은 FIFO 버퍼에 배치되지 않으며, 인입 단편이 FIFO 버퍼에 저장된 단편과 매칭하는지 확인하기 위한 어떠한 체크도 수행되지 않는다.
FIFO 버퍼가 쿼드들에 대응하는 엔트리를 저장하는 것으로 도 7에 예시되었지만, 엔트리들은 대신 개별 픽셀들에 또는 2×2 보다 더 큰 픽셀들의 그룹에 대응할 수 있다. 개별 픽셀에 대응하는 엔트리들로는, 커버리지는 FIFO 버퍼의 픽셀과 입력 픽셀간에 스크린 위치 매칭이 발생하는지 여부가 체크되지 않는다. 대신, 이러한 매칭이 발생하면, 엔트리가 FIFO로부터 간단히 삭제된다. 2×2 보다 큰 픽셀 그룹에 대응하는 개별 FIFO 버퍼 엔트리로는, 커버리지가 보다 미세한 입자에서 수행된다 것을 제외하고는 상기 설명과 동일한 방식으로 커버리지 체크가 수행된다.
APD(116)는 병렬로 동작하는 다수의 상이한 FIFO 버퍼를 포함할 수 있고, 이들의 각각은 스크린-스페이스의 상이한 부분에 할당된다. 그래픽스 프로세싱 파이프 라인(134)에서 다양한 유닛에 의해 프로세싱되고 출력되는 단편들의 시퀀스는 본 출원에서 "스트림(stream)"으로 지칭될 수 있다.
비닝이 수행된다는 사실은 FIFO 버퍼가 상대적으로 작은 크기로 될 수 있고 및/또는 FIFO 버퍼의 히트율을 향상시키는 것을 허용한다. 보다 구체적으로, FIFO 버퍼는 특정 빈에 대한 모든 단편을 수신 한 후에 비워지기 때문에, FIFO 버퍼는 임의의 특정 시간에 특정 빈에 속하는 단편들만을 저장하는 것으로 고려된다. 따라서, 임의의 스크린 위치에서의 단편이 FIFO 버퍼에 저장될 수 있는 경우 보다 FIFO 버퍼에서 "히트"가 발생할 가능성이 더 크다. 이러한 증가된 히트율은 가려진 단편이 제거되는 속도를 향상시키고, 이는 픽셀 쉐이더(312)에 의해 수행되는 불필요한 작업의 양을 축소시킨다.
픽셀 쉐이더에 의한 프로세싱을 위해 단편들의 스트림에서 중첩 단편들을 식별하기 위한 방법이 제공된다. 방법은 z-컬링된 단편들의 스트림으로부터 제 1 단편을 수신하는 단계를 포함하되, 제 1 단편은 제 1 스크린 위치를 갖는다. 방법은 또한 단편들을 저장하는 지연 픽셀 쉐이딩 버퍼에서, 제 1 스크린 위치와 매칭되는 제 2 스크린 위치를 갖는 제 2 단편을 식별하는 단계를 포함한다. 방법은 또한 식별하는 단계에 응답하여, 매칭에 기초하여 지연 픽셀 쉐이딩 버퍼를 수정하는 단계를 포함한다. 방법은 또한 지연 픽셀 쉐이딩 버퍼의 단편을 쉐이딩(shading)을 위해 픽셀 쉐이더로 송신하는 단계를 포함한다.
가속 프로세싱 디바이스가 또한 제공된다. 가속 프로세싱 디바이스는 z-컬링된 단편들의 스트림을 생성하기 위해 한 세트의 단편들의 단편들을 z-컬링하도록 구성된 z-컬 유닛(z-cull unit)을 포함한다. 가속 프로세싱 디바이스는 또한 픽셀 쉐이더에 제공된 단편들 상에 픽셀 쉐이딩 동작을 수행하도록 구성된 픽셀 쉐이더를 포함한다. 가속 프로세싱 디바이스는 지연 픽셀 쉐이딩 유닛을 더 포함한다. 지연 픽셀 쉐이딩 유닛은 z-컬링된 단편들의 스트림으로부터, 제 1 단편을 수신하도록 구성되며, 제 1 단편은 제 1 스크린 위치를 갖는다. 지연 픽셀 쉐이딩 유닛은 또한 단편을 저장하는 지연 픽셀 쉐이딩 버퍼에서, 제 1 스크린 위치와 매칭되는 제 2 스크린 위치를 갖는 제 2 단편을 식별하도록 구성된다. 지연 픽셀 쉐이딩 유닛은 식별에 응답하여, 매칭에 기초하여 지연 픽셀 쉐이딩 버퍼를 수정하도록 추가로 구성된다. 지연 픽셀 쉐이딩 유닛은 또한 지연 픽셀 쉐이딩 버퍼의 단편을 쉐이딩을 위해 픽셀 쉐이더로 송신하도록 구성된다.
프로세서에 의해 실행될 때, 프로세서가 픽셀 쉐이더에 의한 프로세싱을 위해 단편들의 스트림에서 중첩 단편들을 식별하기 위한 방법을 수행하게 하는 명령들을 저장하는 비-일시적 컴퓨터 판독가능 매체가 제공된다. 방법은 z-컬링된 단편들의 스트림으로부터, 제 1 단편을 수신하는 단계를 포함하되, 제 1 단편은 제 1 스크린 위치를 갖는다. 방법은 또한 단편들을 저장하는 지연 픽셀 쉐이딩 버퍼에서, 제 1 스크린 위치와 매칭되는 제 2 스크린 위치를 갖는 제 2 단편을 식별하는 단계를 포함한다. 방법은 또한 식별하는 단계에 응답하여, 매칭에 기초하여 지연 픽셀 쉐이딩 버퍼를 수정하는 단계를 포함한다. 방법은 또한 지연 픽셀 쉐이딩 버퍼의 단편을 쉐이딩(shading)을 위해 픽셀 쉐이더로 송신하는 단계를 포함한다.
많은 변형이 본 출원의 개시에 기초하여 가능하다는 것이 이해되어야 한다. 특징 및 엘리먼트가 특정 조합으로 상술되었지만, 각각의 특징 또는 엘리먼트는 다른 특징 및 엘리먼트 없이 단독으로 또는 다른 특징 및 엘리먼트와 함께 또는 다양한 조합으로 사용될 수 있다.
범용 컴퓨터, 프로세서 또는 프로세서 코어로 제공된 방법들이 구현될 수 있다. 적절한 프로세서는 예를 들어 범용 프로세서, 특수 목적 프로세서, 종래 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로 프로세서, DSP 코어와 관련된 하나 이상의 마이크로 프로세서, 제어기, 마이크로컨트롤러, ASIC(Application Specific Integrated Circuits), FPGA(Field Programmable Gate Arrays) 회로, 임의의 다른 유형의 집적 회로(IC) 및/또는 상태 기계를 포함한다. 이러한 프로세서는 프로세싱된 하드웨어 설명 언어(HDL) 명령어 및 넷리스트(컴퓨터 판독 가능 매체에 저장될 수 있는 명령어)를 포함하는 다른 중간 데이터의 결과를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 실시예의 양태들을 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에서 사용되는 마스크작업(maskworks)일 수 있다.
본 출원에 제공된 방법들 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의해 실행하기 위한 비 일시적인 컴퓨터 판독 가능한 저장 매체에 내장된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비 일시적 컴퓨터 판독 가능한 저장 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 착탈 가능한 디스크와 같은 자기 매체, 광자기 매체, 및 광학 매체 예컨대, CD-ROM 디스크 및 DVD(digital versatile disk)를 포함한다.

Claims (20)

  1. 픽셀 쉐이더(pixel shader)에 의한 프로세싱을 위해 단편(fragment)들의 스트림에서 중첩되는(overlapping) 단편들을 식별하기 위한 방법으로서,
    z-컬링된(z-culled) 단편들의 스트림으로부터, 제 1 단편을 수신하는 단계로서, 상기 제 1 단편은 제 1 스크린 위치를 갖는, 상기 제 1 단편을 수신하는 단계;
    단편들을 저장하는 지연 픽셀 쉐이딩 버퍼(deferred pixel shading buffer)에서, 상기 제 1 스크린 위치와 매칭되는 제 2 스크린 위치를 갖는 제 2 단편을 식별하는 단계;
    상기 식별에 응답하여, 상기 매칭에 기초하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하는 단계; 및
    상기 지연 픽셀 쉐이딩 버퍼의 단편들을 쉐이딩(shading)을 위해 픽셀 쉐이더로 송신하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    복수의 입력 프리미티브(primitive)를 비닝(binning)하여 복수의 비닝된 입력 프리미티브를 생성하는 단계;
    상기 복수의 비닝된 입력 프리미티브를 래스터화(rasterizing)하여 단편들의 세트를 생성하는 단계; 및
    z-컬링된 단편들의 스트림을 생성하기 위해 상기 단편들의 세트를 z-컬링하는 단계(z-culling)를 더 포함하는, 방법.
  3. 제 2 항에 있어서,
    상기 복수의 입력 프리미티브를 비닝하여 상기 복수의 비닝된 입력 프리미티브를 생성하는 단계는 상기 복수의 입력 프리미티브의 프리미티브를 빈(bin)들에 할당하는 단계를 포함하며, 각각의 빈은 스크린 스페이스(screen space)의 상이한 부분과 관련되고, 및
    상기 복수의 비닝된 입력 프리미티브는 상기 복수의 입력 프리미티브의 프리미티브에 의해 중첩된 스크린 스페이스의 부분에 기초하여 순서화된 상기 복수의 입력 프리미티브의 프리미티브를 포함하는, 방법.
  4. 제 2 항에 있어서, 상기 단편들의 세트를 z-컬링하는 단계는,
    상기 단편들의 세트에 각각의 단편에 대하여, 단편이 가려지는(occluded) 것을 나타내는 깊이 값을 깊이 버퍼가 저장하고 있는지 여부를 결정하는 단계; 및
    만약 상기 단편이 가려진 경우, 상기 단편을 폐기하고, 및
    만약 상기 단편이 가려지지 않은 경우, 상기 깊이 값을 상기 단편의 깊이 값과 동일하게 업데이트하는 단계를 포함하는, 방법.
  5. 제 2 항에 있어서, 상기 복수의 비닝된 입력 프리미티브를 래스터화하여 상기 단편들의 세트를 생성하는 단계는,
    각각의 입력 프리미티브에 대하여, 상기 입력 프리미티브에 의해 커버되는 스크린 위치를 식별하는 단계, 상기 커버된 스크린 위치에 대한 단편들을 생성하는 단계를 포함하고, 생성된 단편이 래스터라이저(rasterizer)에 의해 생성된 단편들의 세트내에 포함되고, z-컬링된 단편들의 스트림(stream)을 생성하기 위해 z-컬링되는, 방법.
  6. 제 1 항에 있어서, 상기 매칭에 기반하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하는 단계는,
    상기 지연 픽셀 쉐이딩 버퍼로부터 상기 제 2 단편을 제거하는 단계를 더 포함하는, 방법.
  7. 제 1 항에 있어서, 상기 매칭에 기반하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하는 단계는,
    상기 제 2 단편 및 상기 제 1 단편을 중첩된 것으로 마킹하는 단계(marking)를 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 지연 픽셀 쉐이딩 버퍼의 단편들을 상기 쉐이딩을 위해 상기 픽셀 쉐이더로 송신하는 단계는 빈에 대한 모든 프리미티브에 대응하는 단편들이 상기 지연 픽셀 쉐이딩 버퍼에서 수신되었다는 것을 검출하는 단계, 프레임에 대한 모든 프리미티브가 상기 지연 픽셀 쉐이딩 버퍼에서 수신되었다는 것을 검출하는 단계 및 상기 지연 픽셀 쉐이딩 버퍼가 가득 찼다는 것을 검출하는 단계 중 하나 이상에 응답하여 수행되는, 방법.
  9. 제 1 항에 있어서,
    상기 지연 픽셀 쉐이딩 버퍼는 스크린 스페이스의 제 1 부분과 관련되고; 및
    상기 방법은 상기 스크린 스페이스의 제 2 부분과 관련된 제 2 지연 픽셀 쉐이딩 버퍼에 대한 수신, 식별, 수정 및 송신을 수행하는 단계를 더 포함하는, 방법.
  10. 가속 프로세싱 디바이스("APD : accelerated processing device")는 :
    z-컬링된 단편들의 스트림을 생성하기 위해 단편들의 세트의 단편들을 z-컬링하도록 구성된 z-컬 유닛(z-cull unit);
    픽셀 쉐이더로서, 상기 픽셀 쉐이더에 제공된 단편들 상에 픽셀 쉐이딩 동작을 수행하도록 구성된, 상기 픽셀 쉐이더; 및
    지연 픽셀 쉐이딩 유닛으로서,
    z-컬링된(z-culled) 단편들의 스트림으로부터, 제 1 단편을 수신하고, 상기 제 1 단편은 제 1 스크린 위치를 갖고,
    단편들을 저장하는 지연 픽셀 쉐이딩 버퍼(deferred pixel shading buffer)에서, 상기 제 1 스크린 위치와 매칭되는 제 2 스크린 위치를 갖는 제 2 단편을 식별하고;
    상기 식별에 응답하여, 상기 매칭에 기초하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하고, 및
    상기 지연 픽셀 쉐이딩 버퍼의 단편들을 쉐이딩(shading)을 위해 상기 픽셀 쉐이더로 송신하도록 구성된, 상기 지연 픽셀 쉐이딩 유닛을 포함하는, 가속 프로세싱 디바이스.
  11. 제 10 항에 있어서,
    복수의 입력 프리미티브(primitive)를 비닝(binning)하여 복수의 비닝된 입력 프리미티브를 생성하도록 구성된 빈너(binner); 및
    상기 복수의 비닝된 입력 프리미티브를 래스터화하여 상기 단편들의 세트를 생성하도록 구성된 스캔 컨버터를 더 포함하는, 가속 프로세싱 디바이스.
  12. 제 11 항에 있어서,
    상기 복수의 입력 프리미티브를 비닝하여 상기 복수의 비닝된 입력 프리미티브를 생성하는 것은 상기 복수의 입력 프리미티브의 프리미티브를 빈(bin)들에 할당하는 것을 포함하며, 각각의 빈은 스크린 스페이스(screen space)의 상이한 부분과 관련되고, 및
    상기 복수의 비닝된 입력 프리미티브는 상기 복수의 입력 프리미티브의 프리미티브에 의해 중첩된 스크린 스페이스의 부분에 기초하여 순서화된 상기 복수의 입력 프리미티브의 프리미티브를 포함하는, 가속 프로세싱 디바이스.
  13. 제 11 항에 있어서, 상기 z-컬 유닛은
    상기 단편들의 세트에 각각의 단편에 대하여, 단편이 가려지는(occluded) 것을 나타내는 깊이 값을 깊이 버퍼가 저장하고 있는지 여부를 결정하고; 및
    만약 상기 단편이 가려진 경우, 상기 단편을 폐기하고, 및
    만약 상기 단편이 가려지지 않은 경우, 상기 깊이 값을 상기 단편의 깊이 값과 동일하게 업데이트하는 것에 의해 상기 단편들의 세트의 단편들을 z-컬링하도록 구성된, 가속 프로세싱 디바이스.
  14. 제 11 항에 있어서, 상기 스캔 컨버터는
    각각의 입력 프리미티브에 대하여, 상기 입력 프리미티브에 의해 커버되는 스크린 위치를 식별하고, 상기 커버된 스크린 위치에 대한 단편들을 생성하는 것에 의해 상기 복수의 비닝된 입력 프리미티브를 래스터화하여 상기 단편들의 세트를 생성하도록 구성되고, 생성된 단편이 래스터라이저(rasterizer)에 의해 생성된 단편들의 세트내에 포함되고, z-컬링된 단편들의 스트림(stream)을 생성하기 위해 z-컬링되는, 가속 프로세싱 디바이스.
  15. 제 10 항에 있어서, 상기 매칭에 기반하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하는 것은,
    상기 지연 픽셀 쉐이딩 버퍼로부터 상기 제 2 단편을 제거하는 것을 포함하는, 가속 프로세싱 디바이스.
  16. 제 10 항에 있어서, 상기 매칭에 기반하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하는 것은,
    상기 제 2 단편 및 상기 제 1 단편을 중첩된 것으로 마킹하는 것을 포함하는, 가속 프로세싱 디바이스.
  17. 제 10 항에 있어서, 빈에 대한 모든 프리미티브에 대응하는 단편들이 상기 지연 픽셀 쉐이딩 버퍼에서 수신되었다는 것을 검출하는 것, 프레임에 대한 모든 프리미티브가 상기 지연 픽셀 쉐이딩 버퍼에서 수신되었다는 것을 검출하는 것 및 상기 지연 픽셀 쉐이딩 버퍼가 가득 찼다는 것을 검출하는 것 중 하나 이상에 응답하여 상기 지연 픽셀 쉐이딩 유닛은 상기 지연 픽셀 쉐이딩 버퍼의 단편들을 상기 쉐이딩을 위해 상기 픽셀 쉐이더로 송신하도록 구성된, 가속 프로세싱 디바이스.
  18. 프로세서에 의해 실행될 때, 상기 프로세서가 픽셀 쉐이더에 의한 프로세싱을 위해 단편들의 스트림에서 중첩 단편들을 식별하기 위한 방법을 수행하게 하는 명령들을 저장하는 비-일시적 컴퓨터 판독가능 매체에 있어서, 상기 방법은:
    z-컬링된(z-culled) 단편들의 스트림으로부터, 제 1 단편을 수신하는 단계로서, 상기 제 1 단편은 제 1 스크린 위치를 갖는, 상기 제 1 단편을 수신하는 단계;
    단편들을 저장하는 지연 픽셀 쉐이딩 버퍼(deferred pixel shading buffer)에서, 상기 제 1 스크린 위치와 매칭되는 제 2 스크린 위치를 갖는 제 2 단편을 식별하는 단계;
    상기 식별에 응답하여, 상기 매칭에 기초하여 상기 지연 픽셀 쉐이딩 버퍼를 수정하는 단계; 및
    상기 지연 픽셀 쉐이딩 버퍼의 단편들을 쉐이딩(shading)을 위해 픽셀 쉐이더로 송신하는 단계를 포함하는, 비-일시적 컴퓨터 판독가능 매체.
  19. 제 18 항에 있어서, 상기 방법은
    복수의 입력 프리미티브(primitive)를 비닝(binning)하여 복수의 비닝된 입력 프리미티브를 생성하는 단계;
    상기 복수의 비닝된 입력 프리미티브를 래스터화(rasterizing)하여 단편들의 세트를 생성하는 단계; 및
    z-컬링된 단편들의 스트림을 생성하기 위해 상기 단편들의 세트를 z-컬링하는 단계(z-culling)를 더 포함하는, 비-일시적 컴퓨터 판독가능 매체.
  20. 제 18 항에 있어서,
    상기 지연 픽셀 쉐이딩 버퍼의 단편들을 상기 쉐이딩을 위해 상기 픽셀 쉐이더로 송신하는 단계는 빈에 대한 모든 프리미티브에 대응하는 단편들이 상기 지연 픽셀 쉐이딩 버퍼에서 수신되었다는 것을 검출하는 단계, 프레임에 대한 모든 프리미티브가 상기 지연 픽셀 쉐이딩 버퍼에서 수신되었다는 것을 검출하는 단계 및 상기 지연 픽셀 쉐이딩 버퍼가 가득 찼다는 것을 검출하는 단계 중 하나 이상에 응답하여 수행되는, 비-일시적 컴퓨터 판독가능 매체.
KR1020197016619A 2016-12-09 2017-11-15 z-컬링 후 중첩 단편들 식별 또는 제거 KR102547879B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/374,752 US10943389B2 (en) 2016-12-09 2016-12-09 Removing or identifying overlapping fragments after z-culling
US15/374,752 2016-12-09
EP16203877.2A EP3333805B1 (en) 2016-12-09 2016-12-13 Removing or identifying overlapping fragments after z-culling
EP16203877.2 2016-12-13
PCT/US2017/061825 WO2018106422A1 (en) 2016-12-09 2017-11-15 Removing or identifying overlapping fragments after z-culling

Publications (2)

Publication Number Publication Date
KR20190093579A true KR20190093579A (ko) 2019-08-09
KR102547879B1 KR102547879B1 (ko) 2023-06-27

Family

ID=57914625

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197016619A KR102547879B1 (ko) 2016-12-09 2017-11-15 z-컬링 후 중첩 단편들 식별 또는 제거

Country Status (6)

Country Link
US (1) US10943389B2 (ko)
EP (1) EP3333805B1 (ko)
JP (1) JP7086073B2 (ko)
KR (1) KR102547879B1 (ko)
CN (1) CN110036414B (ko)
WO (1) WO2018106422A1 (ko)

Families Citing this family (8)

* 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
US10755468B2 (en) * 2016-12-09 2020-08-25 Sony Interactive Entertainment Inc. Image processing apparatus, image processing method, and program to improve speed for calculating a color of pixels in image data
US10692253B2 (en) * 2017-03-31 2020-06-23 Oracle International Corporation Using a nested pixel map for chart rendering optimization
GB2574361B (en) * 2017-12-18 2021-03-24 Advanced Risc Mach Ltd Graphics Processing
US11010954B2 (en) * 2018-12-11 2021-05-18 Samsung Electronics Co., Ltd. Efficient redundant coverage discard mechanism to reduce pixel shader work in a tile-based graphics rendering pipeline
US11481967B2 (en) * 2020-08-31 2022-10-25 Advanced Micro Devices, Inc. Shader core instruction to invoke depth culling
US11954757B2 (en) * 2021-12-28 2024-04-09 Advanced Micro Devices, Inc. Method and apparatus for implementing a rasterizer in GPU operations
US20230298261A1 (en) * 2022-03-21 2023-09-21 Advanced Micro Devices, Inc. Distributed visibility stream generation for coarse grain binning

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100790892B1 (ko) * 2006-10-18 2008-01-02 삼성전자주식회사 투명 객체의 화질 향상을 위한 3차원 그래픽스 데이터렌더링 방법 및 장치
US20140292756A1 (en) * 2013-03-29 2014-10-02 Ati Technologies Ulc Hybrid Render with Deferred Primitive Batch Binning

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100546383B1 (ko) * 2003-09-29 2006-01-26 삼성전자주식회사 눈에 보이지 않는 프래그먼트를 처리하기 위한 3차원그래픽스 렌더링 엔진 및 그 방법
US9218689B1 (en) * 2003-12-31 2015-12-22 Zilabs Inc., Ltd. Multi-sample antialiasing optimization via edge tracking
US8933933B2 (en) * 2006-05-08 2015-01-13 Nvidia Corporation Optimizing a graphics rendering pipeline using early Z-mode
US7804499B1 (en) 2006-08-28 2010-09-28 Nvidia Corporation Variable performance rasterization with constant effort
GB0810311D0 (en) * 2008-06-05 2008-07-09 Advanced Risc Mach Ltd Graphics processing systems
US8692829B2 (en) * 2009-10-05 2014-04-08 Nvidia Corporation Calculation of plane equations after determination of Z-buffer visibility
JP5708196B2 (ja) * 2011-04-21 2015-04-30 セイコーエプソン株式会社 衝突検出システム、ロボットシステム、衝突検出方法及びプログラム
US9153070B2 (en) 2012-12-17 2015-10-06 Arm Limited Hidden surface removal in graphics processing systems
GB2509113B (en) * 2012-12-20 2017-04-26 Imagination Tech Ltd Tessellating patches of surface data in tile based computer graphics rendering
US9142040B2 (en) * 2013-03-15 2015-09-22 Nvidia Corporation System, method, and computer program product for processing graphics data associated with shading
US9355483B2 (en) * 2013-07-19 2016-05-31 Nvidia Corporation Variable fragment shading with surface recasting
US9865074B2 (en) * 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US9978171B2 (en) * 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US10055883B2 (en) * 2015-01-08 2018-08-21 Nvidia Corporation Frustum tests for sub-pixel shadows

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100790892B1 (ko) * 2006-10-18 2008-01-02 삼성전자주식회사 투명 객체의 화질 향상을 위한 3차원 그래픽스 데이터렌더링 방법 및 장치
US20140292756A1 (en) * 2013-03-29 2014-10-02 Ati Technologies Ulc Hybrid Render with Deferred Primitive Batch Binning

Also Published As

Publication number Publication date
JP2019537164A (ja) 2019-12-19
EP3333805A1 (en) 2018-06-13
US20180165872A1 (en) 2018-06-14
WO2018106422A1 (en) 2018-06-14
CN110036414A (zh) 2019-07-19
EP3333805B1 (en) 2019-01-30
KR102547879B1 (ko) 2023-06-27
CN110036414B (zh) 2022-11-22
US10943389B2 (en) 2021-03-09
JP7086073B2 (ja) 2022-06-17

Similar Documents

Publication Publication Date Title
KR102547879B1 (ko) z-컬링 후 중첩 단편들 식별 또는 제거
JP6310151B2 (ja) グラフィックス処理におけるレンダリング対象コマンドの並べ替え
CN109564695B (zh) 用于高效3d图形流水线的装置和方法
JP5624733B2 (ja) グラフィックス処理システム
US8284197B2 (en) Method and apparatus for rendering instance geometry
KR102486347B1 (ko) 프리미티브 셰이더
CN112116519B (zh) 图形处理系统中的粗略深度测试
KR20160004963A (ko) 그래픽 처리
JP2009295166A (ja) グラフィックス処理システム
KR102346119B1 (ko) 입력 인덱스 스트림 내 프리미티브의 식별
KR20190087450A (ko) 순서에 관계 없는 캐시 리턴
US11195326B2 (en) Method and system for depth pre-processing and geometry sorting using binning hardware
JP7121019B2 (ja) アウトオブオーダのピクセルシェーダのエクスポート
KR102479395B1 (ko) 선호된 프리미티브 배치 비닝 및 분류를 갖는 하이브리드 렌더
US20230298261A1 (en) Distributed visibility stream generation for coarse grain binning
US20220319091A1 (en) Post-depth visibility collection with two level binning

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