KR102646818B1 - 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제 - Google Patents

그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제 Download PDF

Info

Publication number
KR102646818B1
KR102646818B1 KR1020207015825A KR20207015825A KR102646818B1 KR 102646818 B1 KR102646818 B1 KR 102646818B1 KR 1020207015825 A KR1020207015825 A KR 1020207015825A KR 20207015825 A KR20207015825 A KR 20207015825A KR 102646818 B1 KR102646818 B1 KR 102646818B1
Authority
KR
South Korea
Prior art keywords
bits
indices
chunk
compressed
index
Prior art date
Application number
KR1020207015825A
Other languages
English (en)
Other versions
KR20200067222A (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 KR20200067222A publication Critical patent/KR20200067222A/ko
Application granted granted Critical
Publication of KR102646818B1 publication Critical patent/KR102646818B1/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
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • 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
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/08Bandwidth reduction

Abstract

컴퓨트 유닛(111-114)은 그래픽스 프리미티브의 버텍스들의 인덱스들을 나타내는 비트들의 청크(310)에 액세스한다. 상기 컴퓨트 유닛은 상기 청크가 모노토닉인지 또는 오디너리인지를 나타내도록 제1 비트(420)의 값들을 셋팅하고, 상기 청크에서의 인덱스들의 값들에 기초하여 결정되는 오프셋을 정의하도록 제2 비트들(425)을 셋팅하며, 상기 제2 비트들에 의해 정의된 상기 오프셋에 기초하여 상기 청크에서의 상기 인덱스들의 값들을 결정하는 제3 비트들(430)의 세트들을 셋팅한다. 상기 컴퓨트 유닛은 상기 제1 비트, 상기 제2 비트들, 및 상기 제3 비트들의 세트들로 표현되는 압축된 청크(315)를 메모리(115)에 기록한다. 상기 압축된 청크는 상기 인덱스들의 값들에 기초하여 결정되는 오프셋들 및 상기 인덱스들의 특성들을 나타내는 비트 필드들을 포함하는 메타데이터(605)에 기초하여 압축 해제되고, 압축 해제된 상기 인덱스들은 인덱스 버퍼(206)에 기록된다.

Description

그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제
그래픽스 프로세서들은 장면의 모델에 기초하여 이미지들은 렌더링하기 위해 프로그래밍 가능한 셰이더들 및 고정 기능 하드웨어 블록들의 시퀀스를 포함하는 그래픽스 파이프라인을 사용하여 디스플레이할 이미지들을 생성한다. 예를 들어, 프레임에 보이는 객체의 3-D 모델은 사용자에게 디스플레이할 픽셀들의 값들을 생성하도록 그래픽스 파이프라인에서 처리되는 프리미티브들 이를테면 삼각형들, 다른 다각형들 또는 패치들의 세트로 표현된다. 각 프리미티브는 프리미티브의 버텍스들에서의, 적-녹-청(RGB, red-green-blue) 색들과 같은 값들로 표현된다. 예를 들어, 삼각형은 삼각형의 세 개의 버텍스에서의 값들의 세트로 표현된다. 그래픽스 파이프라인은 버텍스들을 식별하는 인덱스들을 사용하여 삼각형들의 버텍스들에 액세스한다. 버텍스의 인덱스는 통상적으로 16 비트 또는 32 비트를 포함하는 이진수로 표현된다. 삼각형들의 세트에 대한 인덱스들은 청크당 16개의 인덱스와 같이 미리 결정된 수의 인덱스를 포함하는 "청크들(chunks)"로 처리된다. 청크들은 그래픽스 파이프라인에 의해 사용되기 전 인덱스 버퍼에 저장된다.
청크는 오디너리 청크(ordinary chunk) 또는 모노토닉 청크(monotonic chunk) 중 어느 하나이다. 오디너리 청크는 청크에서의 각 삼각형에 대한 세 개의 버텍스를 순차적으로 나열한다. 모노토닉 청크는 인접한 삼각형들이 두 개의 버텍스를 공유한다는 사실을 이용한다. 예를 들어, 삼각형들의 트리-스트립 메쉬는 서로 인접한 높은 비율의 삼각형을 포함한다. 모노토닉 청크는 인접한 삼각형들에 의해 공유되지 않는 버텍스의 인덱스만 더함으로써 연속적인 인접한 삼각형들을 나타낸다. 그에 따라 모노토닉 청크는 두 개의 연속적인 삼각형에 의해 공유되는 버텍스들의 인덱스들을 반복하지 않는다. 예를 들어, 첫 번째 삼각형의 버텍스들이 인덱스들 8, 9, 10을 갖고 두 번째 삼각형의 버텍스들이 인덱스들 9, 10, 11을 가질 경우, 모노토닉 청크에서의 첫 번째와 두 번째 삼각형들의 표현은 인덱스들 8, 9, 10 및 11을 나열할 것이다. 그에 반해, 오디너리 청크는 첫 번째와 두 번째 삼각형들을 8, 9, 10, 9, 10, 11로 표현할 것이다. 연속적으로 디스패치된 삼각형들이 항상 인접한 것은 아니고 그에 따라 모노토닉 청크들은 다음 인덱스가 모노토닉 청크에서의 이전 삼각형과 버텍스들을 공유하지 않는 삼각형의 버텍스를 식별함을 나타내기 위한 재시작 인덱스를 포함한다.
본 개시는 첨부 도면들을 참조함으로써 해당 기술분야의 통상의 기술자들에게 보다 양호하게 이해될 수 있고, 그것의 수많은 특징 및 장점이 명백해질 수 있다. 상이한 도면들에서의 동일한 참조 부호들의 사용은 유사하거나 동일한 항목들을 나타낸다.
도 1은 몇몇 실시 예에 따른 디스플레이에 출력할 시각적 이미지들을 생성하기 위한 그래픽스 처리 유닛(GPU)을 포함하는 처리 시스템의 블록도이다.
도 2는 몇몇 실시 예에 따른 고차 지오메트리 프리미티브들을 처리하여 3-차원(3-D) 장면들의 래스터화된 이미지들을 생성할 수 있는 그래픽스 파이프라인을 도시한다.
도 3은 몇몇 실시 예에 따른 처리 시스템의 일 부분을 도시하는 블록도이다.
도 4는 몇몇 실시 예에 따른 모노토닉 청크들에서의 인덱스들을 압축하는 방법을 도시하는 도해이다.
도 5는 몇몇 실시 예에 따른 오니더리 청크들에서의 인덱스들을 압축하는 방법을 도시하는 도해이다.
도 6은 몇몇 실시 예에 따른 압축된 청크들에 대한 메타데이터를 생성하는 방법을 도시하는 도해이다.
도 7은 몇몇 실시 예에 따른 인덱스들의 동시 압축 해제를 지원하는 모노토닉청크들에서의 인덱스들을 압축하는 방법을 도시하는 도해이다.
도 8은 몇몇 실시 예에 따른 압축된 청크들에 대한 메타데이터 및 압축된 인덱스들을 생성하는 방법을 도시하는 도해이다.
인덱스들의 세트들(여기서 "청크들"이라고도 함)은 인덱스 버퍼들에의 저장을 위해 청크가 모노토닉인지 오디너리인지를 나타내기 위한 제1 비트 및 청크에서의 인덱스들의 값들에 기초하여 결정되는 오프셋을 정의하기 위한 제2 비트들을 사용함으로써 압축된다. 압축된 청크는 또한 제2 비트들에 의해 정의된 오프셋에 기초하여 청크에서의 각 인덱스의 값들을 결정하는 제3 비트들의 세트들을 포함한다. 그 다음 압축된 청크들은 메모리에 저장되고 메모리에 저장된 압축된 청크들의 시작 어드레스들을 나타내는 메타데이터가 생성된다. 압축된 청크들은 메타데이터에 기초하여 메모리(또는 관련 캐시)로부터 페칭된다. 예를 들어, 압축 해제 유닛은 메타데이터에 저장된 시작 어드레스들을 사용하여 압축된 청크와 오버랩되는 캐시의 라인들을 결정하고 그 다음 오버랩되는 캐시 라인들을 페칭한다. 청크에서의 인덱스들의 값들은 제1 비트, 제2 비트들 및 제3 비트들의 세트들에 기초하여 결정된다.
모노토닉 청크들은 제1 비트를 청크가 모노토닉 청크임을 나타내는 값으로 셋팅하고 제2 비트들은 재시작 인덱스가 아닌 모노토닉 청크에서의 제1 인덱스의 값과 동일한 오프셋 값으로 셋팅하여 압축된다. 제3 비트들의 제1 세트는 모노토닉 청크에서의 재시작 인덱스들의 수를 나타내는 값으로 셋팅되고 제3 비트들의 하나 이상의 추가 세트는 모노토닉 청크 내 재시작 인덱스들의 위치들을 나타내는 값들로 셋팅된다. 오디너리 청크들은 제1 비트를 청크가 오디너리 청크임을 나타내는 값으로 셋팅하고 제2 비트들을 오디너리 청크에서의 인덱스들의 최소 인덱스 값과 동일한 오프셋 값으로 셋팅하여 압축된다. 제3 비트들의 제1 세트는 인덱스들의 값들과 최소 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내는 값으로 셋팅된다. 제3 비트들의 제2 세트는 대응하는 인덱스들이 고유함을 나타내고 오프셋에 상대적인 고유한 인덱스의 값을 나타내기 위해 사용된다. 제3 비트들의 제3 세트는 대응하는 고유한인덱스들의 반복 값들임을 나타내고 오디너리 청크에서의 고유한 인덱스의 상대 위치를 나타내기 위해 사용된다.
몇몇 실시 예에서, 압축된 청크들의 인덱스들은 이러한 정보를 압축된 청크에 저장하는 대신 메타데이터에 헤더 비트들의 세트를 저장함으로써 동시에 또는 병렬적으로 압축 해제된다. 모노토닉 청크들의 경우, 제1 비트 및 제2 비트들은 메타데이터에 저장된 헤더 비트들의 세트에 포함된다. 헤더 비트들은 또한 재시작 인덱스들의 위치들을 나타내는 비트 필드를 포함한다. 오디너리 청크들의 경우, 제1 비트 및 제2 비트들은 메타데이터에 저장된 헤더 비트들의 세트에 포함된다. 헤더 비트들은 또한 압축된 청크에서의 고유한 인덱스들의 위치들을 나타내는 비트들의 값들을 갖는 비트 필드를 포함한다. 오디너리 청크에 대한 메타데이터는 인덱스들의 값들과 최소 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내는 제3 비트들의 제1 세트를 더 포함한다. 압축된 청크에서의 인덱스들을 압축 해제하기 위해 사용되는 레인들은 메타데이터에 저장된 비트 필드들에 기초하여 선택적으로 활성화됨으로써, 청크에서의 압축 해제된 인덱스들의 순서를 유지한다.
도 1은 몇몇 실시 예에 따른 디스플레이(110)에 출력할 시각적 이미지들을 생성하기 위한 그래픽스 처리 유닛(GPU)(105)을 포함하는 처리 시스템(100)의 블록도이다. GPU(105)는 복수의 컴퓨팅 유닛(111, 112, 113, 114)을 포함하는 멀티 스레딩된 프로세서이며, 여기서 "컴퓨트 유닛들(111-114)"로 총칭된다. 컴퓨트 유닛들(111-114)은 명령들을 동시에 또는 병렬적으로 실행하도록 구성된다. 컴퓨트 유닛들(111-114)의 몇몇 실시 예는 비디오 렌더링에 필요한 기본 수학 연산들과 같은 비교적 작은 연산 세트를 구현하도록 구성된다. 도 1에는 명확성을 위해 네 개의 컴퓨트 유닛(111-114)이 도시되지만, GPU(105)의 몇몇 실시 예는 수십 또는 수백 또는 수천 개의 컴퓨트 유닛을 포함한다. 컴퓨트 유닛들(111-114)의 몇몇 실시 예는 예를 들어 다수의 데이터 세트에 관한 단일 프로그램의 다수의 인스턴스(또는 웨이브)를 예를 들어 단일 명령, 다중 데이터(SIMD) 웨이브로서 동시에 실행한다. 예를 들어, 컴퓨트 유닛들(111-114)은 데이터의 어레이들 또는 스트림들에 관해 동일한 시퀀스의 동작들을 수행하도록 구성된다.
프로세싱 시스템(100)은 메모리(115)를 포함한다. 메모리(115)의 몇몇 실시 예는 동적 랜덤 액세스 메모리(DRAM)로서 구현된다. 그러나, 다른 실시 예들에서, 메모리(115)는 정적 랜덤 액세스 메모리(SRAM), 비휘발성 RAM 등을 포함하는 다른 유형들의 메모리를 사용하여 구현된다. 도시된 실시 예에서, GPU(105)는 버스(120)를 통해 메모리(115)와 통신한다. 그러나, GPU(105)의 몇몇 실시 예는 직접 연결을 통해 또는 다른 버스들, 브리지들, 스위치들, 라우터들 등을 통해 메모리(115)와 통신한다. GPU(105)는 메모리(115)에 저장된 명령들을 실행하고 GPU(105)는 실행된 명령들의 결과들과 같은 정보를 메모리(115)에 저장한다. 예를 들어, 메모리(115)는 GPU(105)에서의 컴퓨트 유닛들(111-114)에 의해 실행될 프로그램 코드로부터의 명령들의 사본(125)을 저장한다.
처리 시스템(100)은 명령들을 실행하기 위한 중앙 처리 유닛(CPU)(130)을 포함한다. CPU(130)의 몇몇 실시 예는 순차적 직렬 처리에 최적화된 다수의 프로세서 코어(131, 132, 133, 134)(여기서 "프로세서 코어들(131-134)"로 총칭됨)를 포함한다. 프로세서 코어들(131-134)은 비교적 큰 명령 세트들(예를 들어, 컴퓨트 유닛들(111-114)에 의해 구현되는 작은 명령 세트들에 상대적으로) 및 CPU(130)가 처리 시스템(100)에서 실행되는 애플리케이션들에 의해 필요한 계산들의 전체 레퍼토리를 수행할 수 있게 하는 큰 피처 세트를 구현한다. CPU(130)의 몇몇 실시 예는 프로세서 코어들(131-134)을 사용하여 다수의 파이프라인을 구현할 수 있다. CPU(130)는 또한 버스(120)에 연결되어 버스(120)를 통해 GPU(105) 및 메모리(115)와 통신한다. CPU(130)는 메모리(115)에 저장된 프로그램 코드(135)와 같은 명령들을 실행하고 CPU(130)는 실행된 명령들의 결과들과 같은 정보를 메모리(115)에 저장한다. CPU(130)는 또한 GPU(105)에 드로우 콜(draw calls)을 발행함으로써 그래픽스 처리를 개시할 수 있다. 드로우 콜은 GPU(105)에 프레임에 객체를(또는 객체의 일 부분을) 렌더링할 것을 명령하기 위해 CPU(130)에 의해 생성되고 GPU(105)에 송신되는 명령이다. 드로우 콜에 응답하여, GPU(105)는 객체를 렌더링하여 디스플레이(110)에 제공되는 픽셀들의 값들을 생성하며, 이는 픽셀 값들을 사용하여 렌더링된 객체를 나타내는 이미지를 디스플레이한다.
입/출력(I/O) 엔진(140)은 디스플레이(110)와 연관된 입력 또는 출력 동작들, 뿐만 아니라 키보드, 마우스, 프린터, 외부 디스크 등과 같은 처리 시스템(100)의 다른 요소들을 핸들링한다. I/O 엔진(140)은 I/O 엔진(140)이 GPU(105), 메모리(115) 또는 CPU(130)와 통신할 수 있도록 버스(120)에 연결된다. 도시된 실시 예에서, I/O 엔진(140)은 컴팩트 디스크(CD), 디지털 다목적 디스크(DVD), 네트워크 서버 등과 같은 외부 저장 매체(145) 상에 저장된 정보를 판독하도록 구성된다. 외부 저장 매체(145)는 비디오 게임과 같은 애플리케이션을 구현하기 위해 사용되는 프로그램 코드를 나타내는 정보를 저장한다. 외부 저장 매체(145) 상의 프로그램 코드는 GPU(105)에 의해 실행될 명령들의 사본(125) 또는 CPU(130)에 의해 실행될 프로그램 코드(135)를 형성하기 위해 메모리(115)에 기록된다.
멀티 스레딩된 GPU(105)의 컴퓨트 유닛들(111-114)은 GPU(105)에서 웨이브들의 실행을 지원하기 위해 사용되는 자원들을 공유한다. GPU(105)의 몇몇 실시 예는 컴퓨트 유닛들(111-114) 상에서 실행되고 있는 웨이블들에 대한 상태 정보를 저장하는 벡터 범용 레지스터들(VGPR, 명확성을 위해 도 1에 도시되지 않음)의 세트를 구현한다. VGPR들은 컴퓨트 유닛들(111-114) 상에서 동시에 실행되고 있는 웨이브들 사이에 공유된다. 예를 들어, 각 웨이브에는 웨이브에 대한 상태 정보를 저장하기 위해 VGPR들의 서브 세트가 할당된다. 웨이브들은 또한 동시에 실행되는 웨이브들 중에 분할되는 로컬 데이터 공유, 로컬 캐시들에 액세스하기 위해 웨이브들에 의해 공유되는 메모리 대역폭 등을 비롯하여 GPU(105)의 다른 자원들을 공유한다. 멀티 스레딩된 CPU(130)의 프로세서 코어들(131-134) 또한 자원들을 공유한다.
GPU(105)는 다수의 작업 부하를 동시에 또는 병렬적으로 실행하기 위한 다수의 파이프라인을 구현하도록 구성된다. 컴퓨트 유닛들(111-114)의 몇몇 실시 예는 디스플레이(110) 상에 제시할 객체들의 이미지들을 렌더링하기 위한 그래픽스 작업 부하들을 실행하는 그래픽스 파이프라인들을 구현하기 위해 사용된다. 예를 들어, 컴퓨트 유닛들(111-114)은 장면의 3D 모델의 부분들을 나타내는 삼각형들과 같은 프리미티브들에 관해 작동하는 셰이더들의 다수의 인스턴스를 실행함으로써 그래픽스 동작들을 수행한다. 프리미티브들은 버텍스들의 세트로 정의된다. 예를 들어, 삼각형은 삼각형의 세 개의 버텍스에서의 값들의 세트로 표현된다. 컴퓨트 유닛들(111-114)은 버텍스들을 식별하는 인덱스들을 사용하여 삼각형들의 버텍스들에 액세스할 수 있다. 예를 들어, 컴퓨트 유닛들(111-114)은 컴퓨트 유닛들(111-114)이 프리미티브의 버텍스들의 처리를 시작할 준비가 될 때 인덱스 버퍼(명확성을 위해 도 1에 도시되지 않음)로부터 인덱스들을 액세스한다.
삼각형들의 세트에 대한 인덱스들은 여기서 청크당 16개의 인덱스와 같이 미리 결정된 수의 인덱스를 포함하는 "청크(chunk)"로 지칭된다. 청크들은 처리 시스템(100)의 자원들을 절감하기 위해 압축된다. 몇몇 실시 예에서, 압축은 GPU(105) 또는 처리 시스템(100)에서의 다른 처리 유닛들에 의해 오프라인으로 수행되고(예를 들어, 컴퓨트 유닛들(111-114)이 인덱스들에 의해 나타나는 버텍스들의 처리를 시작할 준비가 되기 전에) 압축된 인덱스들은 메모리(115)와 같은 메모리에 저장된다. 메타데이터가 또한 생성되어 메모리(115)에 저장된다. 도시된 실시 예에서, 압축된 인덱스들 및 메타데이터가 메모리(115)의 블록(155)에 저장된다. 그러나, 다른 실시 예들에서, 메타데이터 및 압축된 인덱스들은 다른 위치들에 저장되고 모든 실시 예에서 동일한 위치에 저장될 필요는 없다. GPU(105)는 컴퓨트 유닛들(111-114)이 버텍스들의 처리를 시작할 준비가 될 때 블록(155)으로부터 메타데이터를 검색한다. 몇몇 실시 예에서, 메타데이터는 블록(155)으로부터 압축된 인덱스들을 검색하기 위해 사용되고 압축된 인덱스들은 캐시에 저장된다. GPU(105)는 압축된 인덱스들을 그때그때 압축 해제하고 압축 해제된 인덱스들을 컴퓨트 유닛들(111-114)에 이용 가능하도록 인덱스 버퍼에 저장한다.
도 2는 몇몇 실시 예에 따른 고차 지오메트리 프리미티브들을 처리하여 3-차원(3-D) 장면들의 래스터화된 이미지들을 생성할 수 있는 그래픽스 파이프라인(200)을 도시한다. 그래픽스 파이프라인(200)은 도 1에 도시된 GPU(105)의 몇몇 실시 예에서 구현된다. 예를 들어, 몇몇 실시 예에서 그래픽스 파이프라인(200)은 도 1에 도시된 GPU(105)에서의 컴퓨트 유닛들(111-114)을 사용하여 구현된다. 도 2는 그래픽스 파이프라인(200)은 그래픽스 파이프라인(200)에 포함된 모든 셰이더가 공유된 SIMD 프로세서 코어들 상의 동일한 실행 플랫폼을 갖도록 통합 셰이더 모델을 구현한다. 그에 따라 셰이더들은 여기서 통합 셰이더 풀(201)로 지칭되는 공통 자원들의 세트를 사용하여 구현된다. 통합 셰이더 풀(201)의 몇몇 실시 예는 도 1에 도시된 GPU(105)에 구현된 컴퓨트 유닛들(111-114)을 사용하여 구현된다.
저장 자원들(202)은 그래픽스 파이프라인(200)의 단계들에 의해 공유된다. 저장 자원들(202)은 판독/기록 통신 및 다중 웨이브의 작업 그룹 내 동기화를 위해 사용되는 로컬 데이터 저장소(LDS, local data store)(203)를 포함한다. 저장 자원들(202)은 또한 웨이브들에 의해 수행된 동작들의 중간 결과들과 같이, 웨이브들의 현재 상태를 정의하는 상태 정보를 저장하는 VGPR(204)을 포함한다. 저장 자원(202)들은 그래픽스 파이프라인(200)의 하나 이상의 단계에 의해 빈번하게 사용되는 압축된 청크들, 메타데이터, 버텍스 데이터, 텍스처 데이터 및 다른 데이터와 같은 정보를 캐싱하기 위해 사용되는 캐시 계층 구조(205)를 더 포함한다. 저장 자원(202)들은 그래픽스 파이프라인(200)에서의 개체들에 의한 액세스를 위해 버텍스들의 압축 해제된 인덱스들을 저장하기 위해 사용되는 인덱스 버퍼(206)를 더 포함한다. 몇몇 실시 예에서, 저장 자원들(202)은 또한 다른 레지스터들, 버퍼들, 메모리들 또는 캐시들을 포함한다. 그래픽스 파이프라인(200)의 공유 자원들은 또한 그래픽스 파이프라인(200)의 스테이지들과 저장 자원들(202) 사이의 통신을 지원하기 위해 사용되는 메모리 패브릭의 대역폭을 포함한다. 저장 자원들(202)의 부분들은 도 1에 도시된 GPU(105)의 부분으로서 온-칩 또는 도 1에 도시된 메모리(115)의 몇몇 실시 예를 사용하여 오프-칩으로 구현된다. 도 2에 단일 그래픽스 파이프라인(200)이 도시되지만, 저장 자원들(202)(뿐만 아니라 통합 셰이더 풀(201))의 몇몇 실시 예는 다수의 그래픽스 파이프라인에 의해 공유된다.
그래픽스 파이프라인(200)은 장면의 모델의 부분들을 나타내는 객체들을 정의하기 위해 사용되는 저장 자원들(202)로부터의 정보에 액세스하도록 구성된 입력 조립기(210)를 포함한다. 입력 조립기(210)의 몇몇 실시 예는 인덱스 버퍼(206)로부터 버텍스들의 인덱스들을 검색하고 검색된 인덱스들을 사용하여 그래픽스 파이프라인(200)에서의 다운스트림 개체들에 제공되는 버텍스들을 식별하도록 구성된다.
예를 들어 소프트웨어로 구현되는 버텍스 셰이더(211)는 논리적으로 프리미티브의 단일 버텍스를 입력으로서 수신하고 단일 버텍스를 출력한다. 버텍스 셰이더(211)와 같은 셰이더들의 몇몇 실시 예는 예를 들어, 통합 셰이더 풀(201)을 구현하기 위해 사용되는 컴퓨트 유닛들에 의해 다수의 버텍스가 동시에 처리되도록 단일 명령 다중 데이터(SIMD) 처리를 구현한다.
헐 셰이더(hull shader)(212)는 입력 패치들을 정의하기 위해 사용되는 입력 고차 패치들 또는 제어점들에 관해 작동한다. 헐 셰이더(212)는 테셀레이션 팩터들 및 다른 패치 데이터를 출력한다. 헐 셰이더(212)에 의해 생성되는 프리미티브들이 선택적으로 테셀레이터(213)에 제공된다. 테셀레이터(213)는 헐 셰이더(212)로부터 객체들(이를테면 패치들 등)을 수신하고 예를 들어, 헐 셰이더(212)에 의해 테셀레이터(213)에 제공되는 테셀레이션 팩터들에 기초하여 입력 객체들을 테셀레이트함으로써, 입력 객체에 대응하는 프리미티브들을 식별하는 정보를 생성한다. 테셀레이션은 예를 들어, 테셀레이션 프로세스에 의해 생성되는 프리미티브들의 단위를 특정하는 테셀레이션 팩터에 의해 나타나는 바에 따라, 패치들과 같은 입력 고차 프리미티브들을 세부 사항의 보다 세부적인 레벨들을 나타내는 보다 저차 출력 프리미티브들의 세트로 세분화한다. 그에 따라 장면의 모델은 (메모리 또는 대역폭을 절감하기 위해) 보다 적은 수의 보다 고차 프리미티브로 표현되고 보다 고차 프리미티브를 테셀레이트하여 추가 세부 사항들이 추가된다.
도메인 셰이더(214)는 도메인 위치 및 (선택적으로) 다른 패치 데이터를 입력한다. 도메인 셰이더(214)는 제공된 정보에 관해 작동하고 입력 도메인 위치 및 다른 정보에 기초하여 출력할 단일 버텍스를 생성한다. 지오메트리 셰이더(215)는 입력 프리미티브를 수신하고 입력 프리미티브에 기초하여 지오메트리 셰이더(215)에 의해 생성되는 최대 네 개의 프리미티브를 출력한다. 프리미티브들의 하나의 스트림이 래스터라이저(216)에 제공되고 프리미티브들의 최대 네 개의 스트림이 저장 자원들(202)에서의 버퍼들에 연쇄된다. 래스터라이저(216)는 셰이딩 동작들 및 클리핑, 원근 분할, 오려내기 및 뷰포트 선택 등과 같은 다른 동작들을 수행한다. 픽셀 셰이더(217)는 픽셀 흐름을 입력하고 입력 픽셀 흐름에 응답하여 0 또는 다른 픽셀 흐름을 출력한다. 출력 병합기 블록(218)은 픽셀 셰이더(217)로부터 수신된 픽셀들에 관해 블렌드, 깊이, 스텐실 또는 다른 동작들을 수행한다.
도 3은 몇몇 실시 예에 따른 처리 시스템의 일 부분(300)을 도시하는 블록도이다. 부분(300)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 그래픽스 파이프라인(200)의 몇몇 실시 예에서 구현된다. 부분(300)은 그래픽스 프리미티브들의 버텍스들을 식별하는 인덱스들의 청크(310)를 압축하도록 구성된 압축기(305)를 포함한다. 압축기(305)는 청크(310)로부터 압축된 인덱스들을 나타내는 비트들을 포함하는 압축된 청크(315)를 생성한다. 그 부분은 또한 압축된 인덱스들을 나타내는 비트들을 포함하는 압축된 청크(315)를 압축 해제하도록 구성된 압축 해제기(320)를 포함한다. 압축 해제기(320)는 청크(310)에서의 인덱스들을 나타내는 비트들을 생성한다. 압축기(305) 및 압축 해제기(320)의 몇몇 실시 예는 도 1에 도시된 컴퓨트 유닛들(111-114)과 같은 컴퓨트 유닛들을 사용하여 구현된다. 압축기(305) 및 압축 해제기(320)의 다른 실시 예들은 도 1에 도시된 GPU(105)와 같은 처리 유닛 내 별개의 하드웨어 블록들로서 구현된다.
도 4는 몇몇 실시 예에 따른 모노토닉 청크들에서의 인덱스들을 압축하는 방법(400)을 도시하는 도해이다. 방법(400)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽스 파이프라인(200) 및 도 3에 도시된 처리 시스템의 부분(300)의 몇몇 실시 예에서 구현된다.
방법(400)은 16개의 인덱스(410)를 나타내는 비트들(명확성을 위해 참조 부호로 나타낸 것만)을 포함하는 모노토닉 청크(405)에 관해 작동한다. 여기서 사용될 때, "모노토닉 청크"라는 용어는 인접한 삼각형들에 의해 공유되지 않는 버텍스의 인덱스만 더함으로써 연속적인 인접한 삼각형들을 나타내는 청크를 지칭한다. 그에 따라 모노토닉 청크(405)는 두 개의 연속적인 삼각형에 의해 공유되는 버텍스들의 인덱스들을 반복하지 않는다. 예를 들어, 첫 번째 삼각형의 버텍스들은 인덱스들 8, 9, 10을 갖고 두 번째 삼각형의 버텍스들은 인덱스들 9, 10, 11을 갖는다. 그에 따라 모노토닉 청크(405)는 첫 번째와 두 번째 삼각형들을 인덱스들의 리스트 8, 9, 10 및 11로 나타낸다.
인덱스들(410)은 여기서 재시작 인덱스(R)로 지칭되는 특수 인덱스를 포함한다. 재시작 인덱스는 다음 인덱스(410)가 이전 삼각형과 버텍스를 공유하지 않는 새로운 삼각형의 첫 번째 버텍스의 인덱스임을 나타낸다. 도시된 실시 예에서, 인덱스들 11과 12 사이의 재시작 인덱스는 다음 삼각형이 인덱스들 12, 13 및 14에 의해 식별되는 버텍스들을 포함함을 나타낸다. 재시작 인덱스는 또한 다음 삼각형이 인덱스들 9, 10 또는 11에 의해 식별되는 이전 삼각형의 버텍스를 공유하지 않음을 나타낸다. 청크(405)에서의 특성 수의 비트 또는 인덱스는 설계 선택의 문제이다. 인덱스(410)들은 도 4에서 로마 숫자들(또는 문자 R)로 표기된다. 그러나, 실제로 인덱스들(410)은 대응하는 인덱스(410)의 값을 나타내는 비트들의 세트들로 표현된다. 도시된 실시 예에서 각 인덱스(410)를 나타내기 위해 사용되는 비트들의 수는 16 비트이다. 다른 실시 예들에서 인덱스들(410)을 나타내기 위해서는 비트들의 다른 수, 예를 들어 32 비트가 사용된다. 재시작 인덱스는 인덱스들(410)을 나타내기 위해 사용되는 비트들의 예비된 값으로 표기된다.
도 3에 도시된 압축기(305)와 같은 압축기는 청크(405) 에서의 인덱스들(410)의 값들을 사용하여 압축된 청크(415)를 생성한다. 압축기는 예를 들어, 값을 0으로 셋팅함으로써, 제1 비트(420)의 값을 압축된 청크(415)가 압축된 모노토닉 청크를 나타냄을 나타내는 값으로 셋팅한다. 압축기는 비트들(425)의 값들을 청크(405)에서의 제1 인덱스의 값과 동일한 오프셋을 나타내는 값들로 셋팅한다. 도시된 실시 예에서, 비트들(425)의 값들은 8의 오프셋 값을 나타내기 위해 "… 001000"으로 셋팅된다. 압축기는 또한 모노토닉 청크(405) 내에서 발견되는 다수의 재시작 인덱스를 나타내도록 비트들(430)의 값들을 생성한다. 비트들(430)의 수는 청크(405)에서의 인덱스들(410)의 수에 따른다. 도시된 실시 예에서, 청크(405)에서의 인덱스들(410)의 수가 16과 같다면, 모노토닉의 청크(405)에서 16개의 재시작 인덱스가 잠재적으로 발견될 수 있기 때문에, 5 비트가 요구된다. 예를 들어, 비트들(430)은 모노토닉 청크(405)에 두 개의 재시작 인덱스가 있음을 나타내기 위해 "00010"의 값으로 셋팅된다. 모노토닉 청크(405) 내 재시작 인덱스들의 위치들은 비트들(435, 440)로 나타난다. 인덱스들(410)은 도시된 실시 예에서 0-15로 번호가 매겨진다. 예를 들어, 비트들(435)은 모노토닉 청크(405)의 다섯 번째 인덱스에서 첫 번째 재시작 인덱스가 발견됨을 나타내기 위해 "0100"의 값으로 셋팅된다. 다른 예를 들어, 비트들(440)은 모노토닉 청크(405)의 아홉 번째 인덱스에서 두 번째 재시작 인덱스가 발견됨을 나타내기 위해 "1000"의 값으로 셋팅된다.
압축된 청크(410)는 모노토닉 청크(405)에서의 인덱스들(410)들 재구성하는데 필요한 모든 정보를 포함하면서, 모노토닉 청크(405)보다 적은 비트들을 포함한다. 그에 따라 도 3에 도시된 압축 해제기(320)와 같은 압축 해제기는 압축 해제된 인덱스들(410)을 복원하기 위해 방법(400)을 역전시킴으로써 압축된 청크(410)를 압축 해제할 수 있다. 최상의 시나리오에서, 압축된 청크(410)는 모노토닉 청크(405)에서의 비트들의 수의 4%만을 포함한다. 모든 인덱스(410)가 재시동 인덱스들인 실제로 발생하지 않을 최악의 시나리오에서는, 방법(400)은 17% 압축을 생성한다. 실제 그래픽스 처리 작업 부하들을 테스트하면 압축률은 일반적으로 최악의 시나리오의 17% 압축보다 최상의 시나리오의 4% 압축에 더 가깝다는 것을 나타낸다.
도 5는 몇몇 실시 예에 따른 오니더리 청크들에서의 인덱스들을 압축하는 방법(500)을 도시하는 도해이다. 방법(500)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽스 파이프라인(200) 및 도 3에 도시된 처리 시스템의 부분(300)의 몇몇 실시 예에서 구현된다.
방법(500)은 8개의 인덱스(510)를 나타내는 비트들(명확성을 위해 참조 부호로 나타낸 것만)을 포함하는 오디너리 청크(505)에 관해 작동한다. 여기서 사용될 때, "오디너리 청크"라는 용어는 청크에서의 각 삼각형에 대한 세 개의 버텍스를 순차적으로 나열하는 청크를 지칭한다. 예를 들어, 오디너리 청크(505)는 첫 번째 삼각형의 버텍스들을 식별하는 인덱스들 8, 9 및 10을 나열하고 그 후 두 번째 삼각형의 버텍스들을 식별하는 인덱스들 10, 9 및 11을 나열한다. 오디너리 청크(505)는 반드시 각 삼각형의 버텍스들에 대한 모든 인덱스를 나열하지는 않는다. 예를 들어, 오디너리 청크(505)는 세 번째 삼각형의 두 개의 버텍스를 식별하지만, 세 번째 삼각형의 세 번째 버텍스의 인덱스는 포함하지 않는 인덱스들 18 및 6을 나열한다.
도 3에 도시된 압축기(305)와 같은 압축기는 청크(505) 에서의 인덱스들(510)의 값들을 사용하여 압축된 청크(515)를 생성한다. 압축기는 예를 들어, 값을 1로 셋팅함으로써, 비트(520)의 값을 압축된 청크(515)가 압축된 오디너리 청크를 나타냄을 나타내는 값으로 셋팅한다. 압축기는 비트들(525)을 인덱스들(510)의 최소 값과 동일한 오프셋으로 셋팅한다. 도시된 실시 예에서, 인덱스들(510)의 최소 값은 6과 동일하므로, 오프셋은 "… 00110"으로 셋팅된 비트들(525)로 표현된다. 비트들(530)의 압축기 세트들은 인덱스들(510)의 값들과 오프셋 값 간 차이들을 나타내기 위해 필요한 비트 수를 나타태는 값으로 셋팅된다. 그에 따라 비트들(530)로 표현되는 값은 인덱스들(510)의 최대 값과 최소 값 사이의 차이에 의해 결정된다:
도시된 실시 예에서, 최대 값은 18이고 최소 값은 6이다. 그에 따라 이러한 값들 간 차이는 4 비트로 표현된다. 비트들(530)의 값은 비트 수가 3+1=4임을 나타내기 위해 "0011"로 셋팅된다.
인덱스들(510)의 값들을 나타내기 위해 사용되는 비트들은 인덱스들(510)의 값들이 "고유한지"(이는 현재 인덱스가 청구(505) 내 임의의 이전 인덱스의 값과 동일하지 않은 값을 가짐을 나타낸다) 또는 "반복"인지(이는 현재 인덱스가 청크(505) 내 적어도 하나의 이전 인덱스의 값과 동일한 값을 가짐을 나타낸다)에 기초하여 결정된다. 비트들(535)은 대응하는 인덱스가 고유한 인덱스임을 나타내기 위한 값(예를 들어, 0의 값)으로 셋팅된 1 비트 및 인덱스의 값과 오프셋(525)에 의해 나타나는 최소 값 간 차이를 나타내기 위한 4 비트를 포함한다. 예를 들어, 비트들(535)은 인덱스의 값이 6+2=8이되도록 인덱스의 값이 오프셋(525)과 2만큼 상이함을 나타내기 위해 "0010"의 값으로 셋팅되는 4 비트를 포함한다. 비트들(540)은 대응하는 인덱스가 반복 인덱스임을 나타내기 위한 값(예를 들어, 1의 값)으로 셋팅된 1 비트 및 현재 인덱스에 상대적인 반복 인덱스의 위치를 식별하기 위한 3 비트를 포함한다. 예를 들어, 비트들(540)은 현재 인덱스가 이전 인덱스의 반복이어서 현재 인덱스가 이전 인덱스의 값과 동일한 10의 값을 갖게됨을 나타내기 위해 "000"의 값으로 셋팅된 3 비트를 포함한다.
도 6은 몇몇 실시 예에 따른 압축된 청크들에 대한 메타데이터(605)를 생성하는 방법(600)을 도시하는 도해이다. 방법(600)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽스 파이프라인(200) 및 도 3에 도시된 처리 시스템의 부분(300)의 몇몇 실시 예에서 구현된다.
메타데이터(605)는 일련의 압축되지 않은 청크들(610, 611, 612, 613)(여기서 "청크들(610-613)"로 총칭됨)에서의 정보에 기초하여 생성된다. 청크(610)는 비트들 0 ... 31을 포함하고, 청크(611)는 비트들 32 ... 63을 포함하고, 청크(612)는 비트들 64 ... 95를 포함하며, 청크(612)는 비트들 96 ... 127을 포함한다. 도시된 실시 예에서, 청크들(610-613)은 압축된 청크들(615, 616, 617, 618)(여기서 "압축된 청크들(615-618)"로 총칭됨)를 형성하도록 압축된다. 압축된 청크들(615-618)은 모노토닉 청크들을 압축하기 위한 도 4에 도시된 방법(400) 또는 오디너리 청크들을 압축하기 위한 도 5에 도시된 방법(500)의 몇몇 실시 예에 따라 형성된다. 압축된 청크들(615-618) 각각에서의 비트 수는 압축 방법 및 청크들(610-613) 내 인덱스들의 값들에 따른다. 그에 따라 메타데이터(605)는 압축된 청크들(615-618)의 시작 어드레스들(0, 33, 70, 115)을 나타내는 값들, 뿐만 아니라 압축된 청크들(618)의 종료 어드레스(200)를 나타내는 값을 포함한다. 그에 따라 메타데이터(605)는 예를 들어, 상이한 압축된 청크들(615-618)에 대한 랜덤 액세스를 지원하기 위해, 압축된 청크들(615-618)에서의 비트들을 식별하기 위해 사용된다.
몇몇 실시 예에서, 압축된 청크들(615-618) 중 하나 이상이 캐시로 또는 캐시로부터 페칭된다. 캐시들은 통상적으로 캐시 라인들로 조직되고 데이터는 캐시 라인의 크기와 동일한 비트들의 블록들로 캐시로 또는 캐시로부터 페칭된다. 도시된 실시 예에서, 캐시 라인들은 32 바이트와 동일한 길이를 갖는다. 청크(610-613)에서의 압축되지 않은 인덱스들은 2 바이트로 표현되고 청크들(610-613) 각각은 32개의 인덱스를 포함한다. 그에 따라, 청크들(610-613)은 캐시 라인 경계들(620)(명확성을 위해 참조 부호로 표시된 것만)에 의해 표기된 바와 같이, 두 개의 캐시 라인에 각각 저장된다. 그에 반해, 각각의 압축된 청크들(615-618)에 대응하는 캐시 라인 수는 압축된 청크들(615-618)의 압축된 크기, 뿐만 아니라 압축된 청크들(615-618)의 순서에 따른다.
메타데이터(605)는 압축된 청크들(615-618)에 대해 페칭될 캐시 라인들을 결정하기 위해 사용된다. 예를 들어, 메타데이터(605)는 압축된 청크(615)의 부분들이 제1 및 제2 캐시 라인들에 저장됨을 나타낸다. 그에 따라 압축된 청크(615)를 페칭하기 위해서는 두 개의 캐시 라인이 페칭되어야 한다. 다른 예를 들어, 메타데이터(605)는 압축된 청크(618)의 부분들이 세 개의 상이한 캐시 라인에 저장됨을 나타내고 그에 따라 압축된 청크(618)를 페칭하깅 위해서는 세 개의 캐시 라인이 페칭되어야 한다. 몇몇 실시 예에서, 압축된 청크들(615-618)은 압축된 청크들(615-618)을 페칭하기 위해 페칭되는 캐시 라인 수를 감소시키기 위해 바이트 정렬된다. 압축된 청크들(615-618)을 캐시 라인 경계들(620)과 정렬시키는 것은 여기에 개시된 압축 알고리즘의 성능에 작고 무시할 수 있는 영향을 미친다.
도 7은 몇몇 실시 예에 따른 인덱스들의 동시 압축 해제를 지원하는 모노토닉청크들에서의 인덱스들을 압축하는 방법(700)을 도시하는 도해이다. 방법(700)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽스 파이프라인(200) 및 도 3에 도시된 처리 시스템의 부분(300)의 몇몇 실시 예에서 구현된다. 도시된 실시 예에서, 방법(700)은 여기서 논의된 바와 같이, 삼각형 버텍스들의 인덱스들(710) 및 재시작 인덱스들을 포함하는 모노토닉 청크(705)에 관해 작동한다.
메타데이터(715)는 인덱스들(710)의 값들에 기초하여 생성된다. 메타데이터(715)는 모노토닉 청크(705)가 모노토닉임을 나타내는 값, 예를 들어, 0의 값으로 셋팅된 비트(720)를 포함한다. 비트들(725)의 값들은 청크(705)에서의 제1 인덱스의 값과 동일한 오프셋을 나타내는 값들로 셋팅된다. 도시된 실시 예에서, 비트들(725)의 값들은 8의 오프셋 값을 나타내기 위해 "… 001000"으로 셋팅된다. 메타데이터(715)는 또한 재시작 인덱스들의 위치들을 나타내는 비트 필드(730)를 포함한다. 도시된 실시 예에서, 비트 필드(730)에서의 일부 엔트리는 버텍스들을 나타내는 인덱스들(710)을 나타내기 위한 1의 값을 갖고 비트 필드에서의(730)의 일부 엔트리는 재시작 인덱스들인 인덱스들(710)을 나타내기 위한 0의 값들을 갖는다. 메타데이터(715)는 도 1에 도시된 메모리(115)와 같은 메모리에 저장된다. 그 다음 메타데이터(715)가 검색되어 압축되지 않은 인덱스들(710)을 재구성하기 위해 사용된다.
메타데이터(715)를 사용하는 압축 해제는 비트 카운트 동작을 비트 필드(730)에 적용하여 재시작 인덱스들의 위치들에 대응하는 비활성 레인들의 버텍스들 및 표시들을 식별하는 인덱스들(710)에 대한 프리픽스 합을 나타내는 필드(735)를 생성함으로써 수행된다. 필드(735)에서의 각 엔트리는 대응하는 인덱스(710)의 압축 해제를 동시에 수행하기 위해 사용되는 레인에 대응한다. 예를 들어, 필드(735)에서의 첫 번째 엔트리는 도 2에 도시된 그래픽스 파이프라인(200)과 같은 그래픽스 파이프라인의 첫 번째 레인에 대응하며, 필드(735)에서의 두 번째 엔트리는 그래픽스 파이프라인의 두 번째 라인에 대응하는 등이다. 도시된 실시 예에서, 필드(735)의 엔트리에서의 "X"는 재시작 인덱스들에 대응하는 레인들을 나타낸다.
오프셋(725)의 값은 필드(740)에서의 대응하는 엔트리들을 생성하기 위해 필드(735)의 엔트리들에서의 각각의 프리픽스 합들에 더해진다. 덧셈 동작은 그래픽스 파이프라인의 대응하는 레인에서 수행되어 레인들이 인덱스들의 압축 해제를 동시에 또는 병렬적으로 수행할 수 있게 한다. 예를 들어, 제1 레인은 필드(740)에 8+0=8의 값을 갖는 제1 엔트리를 생성하고, 제2 레인은 필드(740)에 8+1=9의 값을 갖는 제2 엔트리를 생성한다. 필드(740)의 엔트리에서의 "X"는 재시작 인덱스들에 대응하는 레인들을 나타낸다. 몇몇 실시 예에서, 재시작 인덱스들과 연관된 레인들은 비활성화되는 한편 다른 레인들은 인덱스(710)의 압축되지 않은 값들을 생성한다. 그 다음 재시작 인덱스들과 연관된 레인들이 활성화되고 이전에 활성화된 레인들은 비활성화된다. 재시작 인덱스들과 연관된 그래픽스 파이프라인의 레인들은 압축되지 않은 인덱스를 나타내는 값과 동일한 값을 출력하여, 압축되지 않은 청크(705)를 생성한다.
도 6은 몇몇 실시 예에 따른 압축된 청크들에 대한 메타데이터(805) 및 압축된 인덱스들(810, 815)을 생성하는 방법(800)을 도시하는 도해이다. 방법(800)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽스 파이프라인(200) 및 도 3에 도시된 처리 시스템의 부분(300)의 몇몇 실시 예에서 구현된다. 방법(800)은 8개의 인덱스(825)를 나타내는 비트들(명확성을 위해 참조 부호로 나타낸 것만)을 포함하는 오디너리 청크(820)에 관해 작동한다.
메타데이터(805)는 예를 들어, 값을 1로 셋팅함으로써, 압축된 청크가 압축된 오디너리 청크를 나타냄을 나타내는 값으로 셋팅된 비트(830)를 포함한다. 메타데이터는 또한 인덱스들(825)의 최소 값과 동일한 오프셋을 나타내는 값으로 셋팅되는 비트들(835)을 포함한다. 도시된 실시 예에서, 인덱스들(825)의 최소 값은 6과 동일하므로, 오프셋은 "… 00110"으로 셋팅된 비트들(835)로 표현된다. 메타데이터(805)는 또한 인덱스들(825)의 값들과 오프셋 값(835) 간 차이들을 나타내기 위해 필요한 비트 수를 나타태는 값으로 셋팅된 비트들(840)을 포함한다. 그에 따라 비트들(840)로 표현되는 값은 인덱스들(825)의 최대 값과 최소 값 사이의 차이에 의해 결정된다:
도시된 실시 예에서, 최대 값은 18이고 최소 값은 6이다. 그에 따라 이러한 값들 간 차이는 4 비트로 표현된다. 비트들(840)의 값은 비트 수가 3+1=4임을 나타내기 위해 "0011"로 셋팅된다.
메타데이터(805)는 또한 청크(820)에서의 고유한 인덱스들 및 반복 인덱스들의 위치들을 나타내는 비트들의 값들을 포함하는 비트 필드(845)를 포함한다. 예를 들어, 비트 필드(805)의 엔트리들에서의 1의 값들은 고유한 대응하는 인덱스들(825)을 나타내고 비트 필드(805)의 엔트리들에서 0의 값들은 청크(820) 내 이전 인덱스들의 반복들인 대응하는 인덱스들(825)을 나타낸다.
압축된 인덱스들(810, 815)은 메타데이터(805) 및 청크(820)에서의 인덱스들(825)의 값들에 기초하여 생성된다. 압축된 인덱스들(810)은 압축된 인덱스(810)와 대응하는 압축 해제된 인덱스(825) 간 차이를 나타내는 값을 포함한다. 예를 들어, 제1 압축된 인덱스(810)는 제1 압축 해제된 인덱스(825)의 값(8)과 오프셋(835)의 값(6) 간 차이와 동일한2의 값을 갖는다. 압축된 인덱스들(810)은 청크(820)에서의 고유한 인덱스들의 값들을 포함한다. 압축된 인덱스들(815)은 청크(820)에서의 반복 인덱스들과 연관된다. 도시된 실시 예에서, 압축된 인덱스들(815)은 대응하는 반복 인덱스(815)에서 반복되는 고유한 인덱스의 위치들을 나타낸다. 예를 들어, 제1 압축된 인덱스(815)는 청크(820) 내 대응하는 고유한 인덱스의 위치를 나타내기 위해 2의 값을 갖는다. 청크(820)에서의 인덱스들(825)의 위치들은 도시된 실시 예에서 0 ... 7로 번호가 매겨진다.
그에 따라 압축된 청크는 메타데이터(805) 및 압축된 인덱스들(810, 815)로 표현된다. 몇몇 실시 예에서, 압축된 청크는 대응하는 인덱스들을 병렬적으로 압축 해제하는 그래픽스 파이프라인의 다수의 레인을 사용하여 압축 해제된다. 도시된 실시 예에서, 비트 카운트 동작은 비트 필드(845)에 관해 필드(850)에서의 엔트리들에 값들을 할당하도록 수행된다. 필드(850)에서의 각 엔트리는 그래픽스 프로세서에서의 레인에 대응한다. 고유한 인덱스들에 대응하는 엔트리들은 (0, 1, 2, 3, 4, 5)의 값들을 갖고 반복 인덱스들에 대응하는 엔트리들은 "X"의 값으로 셋팅된다. 그에 따라 필드(815)에서의 엔트리들의 값들은 대응하는 압축된 인덱스들(810)에 매핑된다. 그에 따라 그래픽스 프로세서의 대응하는 레인은 오프셋(835)을 압축된 인덱스(810)의 대응하는 값에 더함으로써 고유한 인덱스의 압축 해제된 값을 생성할 수 있다. 레인들은 이러한 동작들을 동시에 또는 병렬적으로 수행할 수 있다. 비트 필드(845)에 기초하여 고유한 엔트리들의 수(855)가 또한 결정된다. 도시된 실시 예에서, 고유한 엔트리들의 수는 6이다.
반복 인덱스들을 압축 해제하기 위해, 비트 필드(845)는 역전되어 역전된 비트 필드(860)를 형성한다. 도시된 실시 예에서, 비트 카운트 동작은 역전된 비트 필드(860)에 관해 필드(865)에서의 엔트리들에 값들을 할당하도록 수행된다. 반복 인덱스들에 대응하는 엔트리들은 (0, 1)의 값들을 갖고 고유한 인덱스들에 대응하는 엔트리들은 "X"의 값으로 셋팅된다. 반복 인덱스들에 대응하는 엔트리들의 값들은 필드(875)에 엔트리들을 형성하기 위해 숫자(855)에 값들을 더하는 가산기(870)에 제공된다. 예를 들어, 필드(865)에서의 값 0은 필드(875)의 대응하는 엔트리에서의 값 6을 형성하기 위해 6의 값만큼 증분된다. 필드(875)에서의 엔트리들은 압축 해제된 인덱스들(825)을 생성하기 위해 사용되는 대응하는 압축 인덱스들(815)을 나타낸다. 고유한 인덱스들은 이미 압축 해제되었고 그에 따라 반복 인덱스들을 압축 해제하는데 이용 가능하다. 예를 들어, 제1 압축된 인덱스는 청크(820)에서의 대응하는 고유한 인덱스의 위치를 나타내는 2의 값을 포함한다. 2의 값으로 표기된 위치의 고유한 인덱스는 압축 해제된 반복 인덱스에 할당되는 10의 값을 갖는다.
몇몇 양태에 따르면, 장치는 그래픽스 파이프라인에 의해 처리될 프리미티브(primitive)의 복수의 버텍스(vertex)의 인덱스들을 나타내는 비트들의 청크에 액세스하도록; 상기 청크가 모노토닉(monotonic)인지 오디너리(ordinary)인지를 나타내도록 제1 비트의 값을 셋팅하도록; 상기 청크에서의 인덱스들의 값들에 기초하여 결정되는 오프셋을 정의하도록 제2 비트들의 값들을 셋팅하도록; 상기 제2 비트들에 의해 정의된 상기 오프셋에 기초하여 상기 청크에서의 상기 인덱스들의 값들을 결정하는 제3 비트들의 세트들의 값들을 셋팅하도록; 그리고 상기 제1 비트, 상기 제2 비트들, 및 상기 제3 비트들의 세트들로 표현되는 압축된 청크를 메모리에 기록하도록 구성된 컴퓨트 유닛을 포함한다. 상기 컴퓨트 유닛은 인덱스 버퍼에 저장된 상기 압축된 청크의 시작 어드레스를 나타내는 메타데이터를 생성하도록; 그리고 상기 메타데이터를 상기 메모리에 기록하도록 구성된다. 몇몇 실시 예에서, 상기 청크는 상기 청크의 상기 비트들에 삼각형들과 같은 인접한 프리미티브들에 의해 공유되지 않는 버텍스의 인덱스를 더함으로써 연속적인 상기 인접한 프리미티브들을 나타내는 모노토닉 청크이고, 상기 컴퓨트 유닛은 상기 청크가 모노토닉임을 나타내도록 제1 값으로 상기 제1 비트의 값을 셋팅하도록 구성된다. 몇몇 실시 예에서, 상기 컴퓨트 유닛은 후속 프리미티브가 재시작 인덱스 이전 인덱스로 표현되는 이전 프리미티브에 인접하지 않음을 나타내는 상기 재시작 인덱스가 아닌 상기 청크에서의 제1 인덱스의 값과 동일한 오프셋 값으로 상기 제2 비트들의 값들을 셋팅하도록 구성된다. 몇몇 실시 예에서, 상기 컴퓨트 유닛은 상기 청크에서의 재시작 인덱스들의 수를 나타내도록 상기 제3 비트들의 제1 세트의 값들을 셋팅하고 상기 청크 내 적어도 하나의 재시작 인덱스의 적어도 하나의 위치를 나타내도록 제3 비트들의 적어도 하나의 추가 세트를 셋팅하도록 더 구성될 수 있다. 상기 컴퓨트 유닛은 또한 상기 청크에서의 재시작 인덱스들의 위치들을 나타내는 비트 필드를 포함하는 메타데이터를 생성하도록 구성되고, 상기 컴퓨트 유닛은 상기 제1 비트, 상기 제2 비트들 및 상기 비트 필드를 포함하는 상기 메타데이터를 상기 메모리에 기록하도록 구성될 수 있다. 다른 실시예들에서, 상기 청크는 상기 프리미티브의 모든 상기 버텍스의 인덱스들을 사용하여 프리미티브들을 나타내는 오디너리 청크이고, 상기 컴퓨트 유닛은 상기 청크가 오디너리임을 나타내도록 제2 값으로 상기 제1 비트의 값을 셋팅하도록 구성된다. 그러한 경우들에서, 상기 컴퓨트 유닛은 상기 청크에서의 상기 인덱스들의 최소 값과 동일한 오프셋 값으로 상기 제2 비트들의 값들을 셋팅하도록 구성된다. 상기 컴퓨트 유닛은 상기 인덱스들의 값들과 상기 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내도록 제3 비트들의 제1 세트의 값들을 셋팅하도록; 상기 인덱스들 중 하나가 고유함을 나타내도록 그리고 고유한 상기 인덱스와 상기 오프셋 값 간 차이를 나타내도록 제3 비트들의 적어도 하나의 제2 세트의 값들을 셋팅하도록; 그리고 상기 인덱스들 중 적어도 하나가 고유한 인덱스의 반복 값임을 나타내도록 그리고 상기 청크에서의 상기 고유한 인덱스의 상대 위치를 나타내도록 제3 비트들의 적어도 하나의 제3 세트의 값들을 셋팅하도록 더 구성될 수 있다. 다른 실시 예에서, 상기 컴퓨트 유닛은 상기 압축된 청크에서의 인덱스들을 압축 해제하기 위해 사용되는 레인들을 나타내는 비트 필드를 포함하는 메타데이터를 생성하도록 구성되고, 상기 컴퓨트 유닛은 상기 제1 비트, 상기 제2 비트들, 상기 인덱스들의 값들과 상기 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내기 위한 제3 비트들의 제1 세트, 및 상기 비트 필드를 포함하는 상기 메타데이터를 상기 메모리에 기록하도록 구성된다.
다른 양태에 따르면, 장치는 그래픽스 파이프라인에 의해 처리되는 프리미티브들의 버텍스들의 인덱스들을 저장하도록 구성된 인덱스 버퍼 및 제1 압축된 청크가 모노토닉인지 오디너리인지를 나타내는 상기 제1 압축된 청크에서의 제1 비트, 상기 제1 압축된 청크에서의 상기 인덱스들의 값들에 기초하여 결정되는 오프셋을 정의하는 상기 제1 압축된 청크에서의 제1 비트들, 및 상기 제2 비트들에 의해 정의된 상기 오프셋에 기초하여 상기 제1 압축된 청크에서의 상기 인덱스들의 값들을 결정하는 상기 제1 압축된 청크에서의 제3 비트들의 세트들에 기초하여 상기 인덱스들을 나타내는 비트들의 상기 제1 압축된 청크에서의 인덱스들을 압축 해제하도록; 그리고 상기 제1 압축된 청크에서의 압축 해제된 상기 인덱스들을 상기 인덱스 버퍼에 기록하도록 구성된 컴퓨트 유닛을 포함한다. 상기 컴퓨트 유닛은 메타데이터로부터 상기 제1 압축된 청크의 제1 시작 어드레스 및 제2 압축된 청크의 제2 시작 어드레스를 포함하는 메타데이터에 기초하여 상기 제1 압축된 청크에 대한 상기 제1 비트, 상기 제2 비트들 및 상기 제3 비트들의 세트들을 식별하도록 구성된다. 상기 컴퓨트 유닛은 상기 제1 비트에 기초하여, 상기 제1 압축된 청크가 상기 제1 압축된 청크의 상기 비트들에 삼각형들과 같은 인접한 프리미티브들에 의해 공유되지 않는 버텍스의 인덱스를 더함으로써 연속적인 상기 인접한 프리미티브들을 나타내는 모노토닉 청크임을 결정하도록 더 구성되고, 상기 제2 비트들의 상기 값들은 후속 프리미티브가 재시작 인덱스 이전 인덱스로 표현되는 이전 프리미티브에 인접하지 않음을 나타내는 상기 재시작 인덱스가 아닌 상기 제1 압축된 청크에서의 제1 인덱스의 값과 동일한 오프셋 값으로 셋팅된다. 일 실시 예에서, 상기 제3 비트들의 제1 세트의 값들은 상기 제1 압축된 청크에서의 재시작 인덱스들의 수를 나타내고 상기 제3 비트들의 적어도 하나의 추가 세트는 상기 제1 압축된 청크 내 적어도 하나의 재시작 인덱스의 적어도 하나의 위치를 나타낸다. 몇몇 실시 예에서, 상기 컴퓨트 유닛은 상기 제1 비트에 기초하여, 상기 제1 압축된 청크가 상기 프리미티브의 모든 상기 버텍스의 인덱스들을 사용하여 프리미티브들을 나타내는 오더너리 청크임을 결정하고, 상기 제2 비트들은 상기 제1 압축된 청크에서의 상기 인덱스들의 최소 값과 동일한 오프셋 값을 나타내며, 제3 비트들의 제1 세트는 상기 인덱스들의 값들과 상기 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내고, 제3 비트들의 적어도 하나의 제2 세트는 상기 인덱스들 중 하나가 고유함을 나타내고 고유한 상기 인덱스와 상기 오프셋 값 간 차이를 나타내며, 제3 비트들의 적어도 하나의 제3 세트는 상기 인덱스들 중 적어도 하나가 고유한 인덱스의 반복 값임을 나타내고 상기 청크에서의 상기 고유한 인덱스의 상대 위치를 나타낸다.
또 다른 양태에 따르면, 장치는 그래픽스 파이프라인에 의해 처리되는 프리미티브들의 버텍스들의 인덱스들을 저장하도록 구성된 인덱스 버퍼; 및 복수의 컴퓨트 유닛을 포함하며, 상기 복수의 컴퓨트 유닛은 동시에: 압축된 청크들에 대한 메타데이터에 액세스하도록 구성되되, 상기 메타데이터는 상기 압축된 청크들이 모노토닉인지 또는 오디너리인지를 나타내기 위한 제1 비트들, 상기 인덱스들의 값들에 기초하여 결정되는 오프셋들을 정의하기 위한 제2 비트들, 및 상기 인덱스들의 특성들을 나타내는 비트 필드들을 포함하고, 상기 메타데이터에 기초하여 상기 압축된 청크를 압축 해제하도록 구성되며; 그리고 압축 해제된 상기 인덱스들을 상기 인덱스 버퍼에 기록하도록 구성된다. 몇몇 실시 예에서, 상기 제1 비트들은 상기 압축된 청크들이 모노토닉 압축된 청크들임을 나타내고, 상기 비트 필드들은 상기 압축된 청크들에서의 재시작 인덱스들의 위치들을 나타낸다. 다른 실시예들에서, 상기 제1 비트들은 상기 압축된 청크들이 오디너리 압축된 청크들임을 나타내고, 상기 비트 필드들은 상기 복수의 컴퓨트 유닛 중 어느 컴퓨트 유닛이 상기 압축된 청크들에서의 인덱스들을 압축 해제하기 위해 사용되는지를 나타내고, 또한 상기 메타데이터는 상기 압축된 청크들에 대한 상기 인덱스들의 값들과 상기 오프셋들 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내는 필드들을 포함한다. 그러한 실시 예들에서, 상기 컴퓨트 유닛은 상기 메타데이터에 저장된 상기 압축된 청크들의 시작 어드레스에 기초하여 상기 압축된 청크들에서의 압축된 인덱스들에 액세스하도록 구성되고, 상기 컴퓨트 유닛은 상기 압축된 인덱스들, 상기 오프셋들 및 상기 비트 필드들에 기초하여 상기 압축된 청크들을 압축 해제하도록 구성된다.
몇몇 실시 예에서, 상술된 장치 및 기술들은 도 1 내지 도 8을 참조하여 상술된 처리 시스템과 같은 하나 이상의 집적 회로 (IC) 소자(집적 회로 패키지 또는 마이크로칩이라고도 함)를 포함하는 시스템에서 구현된다. 이러한 IC 소자들의 설계 및 제작에는 전자 설계 자동화(EDA) 및 컴퓨터 이용 설계(CAD) 소프트웨어 툴들이 사용된다. 이러한 설계 툴들은 통상적으로 하나 이상의 소프트웨어 프로그램으로 나타난다. 하나 이상의 소프트웨어 프로그램은 회로 제작을 위한 제작 시스템을 설계 또는 조정하기 위한 프로세스의 적어도 일 부분을 수행하기 위해 컴퓨터 시스템을 조작하여 하나 이상의 IC 소자의 회로를 나타내는 코드로 작동하는 컴퓨터 시스템에 의해 실행가능한 코드를 포함한다. 이러한 코드는 명령들, 데이터 또는 명령들 및 데이터의 조합을 포함한다. 설계 툴 또는 제작 툴을 나타내는 소프트웨어 명령들은 통상적으로 컴퓨팅 시스템에 액세스 가능한 컴퓨터 판독 가능 저장 매체에 저장된다. 마찬가지로, IC 소자의 설계 또는 제작의 하나 이상의 단계를 나타내는 코드가 동일한 컴퓨터 판독 가능 저장 매체 또는 상이한 컴퓨터 판독 가능 저장 매체에 저장되고 그로부터 액세스된다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령들 및/또는 데이터를 제공하기 위해 사용 동안 컴퓨터 시스템에 의해 액세스 가능한 임의의 비일시적 저장 매체, 또는 비일시적 저장 매체의 조합을 포함한다. 그러한 저장 매체는 광학 매체(예를 들어, 컴팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루-레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 미세 전자 기계 시스템(MEMS)-기반 저장 매체를 포함하나, 이에 제한되지는 않는다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템에 내장될 수 있고(예를 들어, 시스템 RAM 또는 ROM), 컴퓨팅 시스템에 고정적으로 부착될 수 있으며(예를 들어, 자기 하드 드라이브), 컴퓨팅 시스템에 착탈 가능하게 부착될 수 있고(예를 들어, 광학 디스크 또는 범용 시리얼 버스(USB)-기반 플래시 메모리), 또는 유선 또는 무선 네트워크를 통해 컴퓨터 시스템에 연결될 수 있다(예를 들어, 네트워크 액세스가능 저장 매체(NAS)).
몇몇 실시예에서, 상술된 기술들 중 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비일시적 컴퓨터 판독 가능 저장 매체 상에 저장되는 또는 그 외 유형으로 구현되는 실행 가능한 명령들의 하나 이상의 세트를 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서를 조작하여 상술된 기술들의 하나 이상의 양태를 수행하기 위한 명령들 및 특정 데이터를 포함한다. 비일시적 컴퓨터 판독 가능 저장 매체는 예를 들어 자기 또는 광 디스크 저장 장치, 고체 상태 저장 장치들 이를테면 플래시 메모리, 캐시, 랜덤 액세스 메모리(RAM) 또는 다른 비휘발성 메모리 장치 또는 장치들 등을 포함한다. 비일시적 컴퓨터 판독 가능 저장 매체 상에 저장된 실행 가능한 명령들은 하나 이상의 프로세서에 의해 해석되거나 그 외 다르게 실행 가능한 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 다른 명령 포맷일 수 있다.
포괄적 설명으로 상술된 모든 활동 또는 요소가 필수적인 것은 아니고, 구체적 활동 또는 장치의 일 부분이 요구되지 않을 수 있으며, 설명된 활동들 또는 요소들에 더하여 하나 이상의 추가 활동이 수행되거나 요소가 포함될 수 있다는 것에 유의한다. 더 나아가, 활동들이 나열되는 순서가 반드시 그것들이 수행되는 순서는 아니다. 또한, 개념이 구체적 실시 예들을 참조하여 설명되었다. 그러나, 해당 기술분야의 통상의 기술자라면 아래 청구범위에 제시되는 바와 같은 본 개시의 범위에서 벗어나지 않으면서 다양한 변형 및 변경이 이루어질 수 있다는 것을 이해한다. 따라서, 본 명세서 및 도면들은 제한적 의미보다는 예시적 의미로 여겨져야 하고, 모든 그러한 변형이 본 개시의 범위 내에 포함되는 것으로 의도된다.
이점들, 다른 장점들, 문제들에 대한 해법들이 구체적 실시 예들과 관련하여 상술되었다. 그러나, 이점들, 다른 장점들, 문제들에 대한 해법들, 및 임의의 이점, 장점 또는 해법이 발생하거나 보다 두드러지게 할 수 있는 임의의 특징(들)은 임의의 또는 모든 청구항의 핵심적인, 필수적인 또는 본질적인 특징인 것으로 간주되어서는 안 된다. 더욱이, 상술된 특정 실시 예들은 단지 예시적인 것에 불과하며, 개시된 기술 요지는 여기서의 교시 내용의 이점을 갖는 해당 기술분야의 통상의 기술자들에게 명백한 상이하지만 균등한 방식으로 변형 및 실시될 수 있다. 아래 청구범위에서 설명되는 바 이외에, 여기에 도시된 구성 또는 설계의 세부 사항들에 어떠한 제한도 의도되지 않는다. 따라서, 앞서 개시된 특정 실시 예들은 대체 또는 변형될 수 있고 그러한 모든 변화가 개시된 기술 요지의 범위 내에 있는 것을 간주된다는 것이 명백하다. 따라서, 여기서 추구되는 보호 범위는 아래 청구범위에 제시되는 바와 같다.

Claims (20)

  1. 장치로서,
    컴퓨트 유닛을 포함하며,
    상기 컴퓨트 유닛은, 그래픽스 파이프라인에 의해 처리될 프리미티브(primitive)의 복수의 버텍스(vertex)의 인덱스들을 나타내는 비트들을 포함하는 청크에 액세스하도록 구성되고;
    상기 컴퓨트 유닛은, 상기 청크가 모노토닉(monotonic)인지 오디너리(ordinary)인지를 나타내도록 제1 비트의 값을 셋팅하도록 구성되고;
    상기 컴퓨트 유닛은, 상기 청크에서의 인덱스들의 값들에 기초하여 결정되는 오프셋을 정의하도록 제2 비트들의 값들을 셋팅하도록 구성되고;
    상기 컴퓨트 유닛은, 상기 제2 비트들에 의해 정의된 상기 오프셋에 기초하여 상기 청크에서의 상기 인덱스들의 값들을 결정하는 제3 비트들의 세트들의 값들을 셋팅하도록 구성되되, 제3 비트들의 제1 세트는 상기 청크에서의 상기 인덱스들 중 적어도 하나가 상기 청크 내 임의의 이전 인덱스의 값과 동일하지 않은 값을 갖는다는 점에서 고유함을 나타내고, 상기 제3 비트들의 제1 세트는 또한 고유한 상기 인덱스와 상기 오프셋 간 차이를 나타내며; 그리고
    상기 컴퓨트 유닛은, 상기 제1 비트, 상기 제2 비트들, 및 상기 제3 비트들의 세트들로 표현되는 압축된 청크를 메모리에 기록하도록 구성되는, 장치.
  2. 청구항 1에 있어서, 상기 컴퓨트 유닛은:
    인덱스 버퍼에 저장된 상기 압축된 청크의 시작 어드레스를 나타내는 메타데이터를 생성하도록; 그리고
    상기 메타데이터를 상기 메모리에 기록하도록 구성되는, 장치.
  3. 청구항 2에 있어서, 상기 청크는 상기 청크의 상기 비트들에 삼각형들과 같은 인접한 프리미티브들에 의해 공유되지 않는 버텍스의 인덱스를 더함으로써 연속적인 상기 인접한 프리미티브들을 나타내는 모노토닉 청크이고, 상기 컴퓨트 유닛은 상기 청크가 모노토닉임을 나타내도록 제1 값으로 상기 제1 비트의 값을 셋팅하도록 구성되는, 장치.
  4. 청구항 1에 있어서, 상기 컴퓨트 유닛은 후속 프리미티브가 재시작 인덱스 이전 인덱스로 표현되는 이전 프리미티브에 인접하지 않음을 나타내는 상기 재시작 인덱스가 아닌 상기 청크에서의 제1 인덱스의 값과 동일한 오프셋 값으로 상기 제2 비트들의 값들을 셋팅하도록 구성되는, 장치.
  5. 청구항 1에 있어서, 상기 컴퓨트 유닛은 상기 청크에서의 재시작 인덱스들의 수를 나타내도록 상기 제3 비트들의 제1 세트의 값들을 셋팅하고 상기 청크 내 적어도 하나의 재시작 인덱스의 적어도 하나의 위치를 나타내도록 제3 비트들의 적어도 하나의 추가 세트를 셋팅하도록 구성되는, 장치.
  6. 청구항 1 내지 5 중 어느 한 항에 있어서, 상기 컴퓨트 유닛은 상기 청크에서의 재시작 인덱스들의 위치들을 나타내는 비트 필드를 포함하는 메타데이터를 생성하도록 구성되고, 상기 컴퓨트 유닛은 상기 제1 비트, 상기 제2 비트들 및 상기 비트 필드를 포함하는 상기 메타데이터를 상기 메모리에 기록하도록 구성되는, 장치.
  7. 청구항 2에 있어서, 상기 청크는 상기 프리미티브의 모든 상기 버텍스의 인덱스들을 사용하여 프리미티브들을 나타내는 오디너리 청크이고, 상기 컴퓨트 유닛은 상기 청크가 오디너리임을 나타내도록 제2 값으로 상기 제1 비트의 값을 셋팅하도록 구성되는, 장치.
  8. 청구항 7에 있어서, 상기 컴퓨트 유닛은 상기 청크에서의 상기 인덱스들의 최소 값과 동일한 오프셋 값으로 상기 제2 비트들의 값들을 셋팅하도록 구성되는, 장치.
  9. 청구항 8에 있어서, 상기 컴퓨트 유닛은:
    상기 인덱스들의 값들과 상기 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내도록 제3 비트들의 제2 세트의 값들을 셋팅하도록;
    그리고
    상기 인덱스들 중 적어도 하나가 고유한 인덱스의 반복 값임을 나타내도록 그리고 상기 청크에서의 상기 고유한 인덱스의 상대 위치를 나타내도록 제3 비트들의 적어도 하나의 제3 세트의 값들을 셋팅하도록 구성되는, 장치.
  10. 청구항 8에 있어서, 상기 컴퓨트 유닛은 상기 압축된 청크에서의 인덱스들을 압축 해제하기 위해 사용되는 레인들을 나타내는 비트 필드를 포함하는 메타데이터를 생성하도록 구성되고, 상기 컴퓨트 유닛은 상기 제1 비트, 상기 제2 비트들, 상기 인덱스들의 값들과 상기 오프셋 값 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내기 위한 제3 비트들의 제1 세트, 및 상기 비트 필드를 포함하는 상기 메타데이터를 상기 메모리에 기록하도록 구성되는, 장치.
  11. 장치로서,
    상기 장치는,
    그래픽스 파이프라인에 의해 처리되는 프리미티브들의 버텍스들의 인덱스들을 저장하도록 구성된 인덱스 버퍼와; 그리고
    복수의 컴퓨트 유닛을
    포함하며,
    상기 복수의 컴퓨트 유닛은,
    압축된 청크들에 대한 메타데이터에 액세스하는 것과, 여기서,
    상기 메타데이터는 상기 압축된 청크들이 모노토닉인지 또는 오디너리인지를 나타내기 위한 제1 비트들, 상기 인덱스들의 값들에 기초하여 결정되는 오프셋들을 정의하기 위한 제2 비트들, 및 상기 압축된 청크에서의 상기 인덱스들 중 적어도 하나가 상기 청크 내 임의의 이전 인덱스의 값과 동일하지 않은 값을 갖는다는 점에서 고유함을 나타내기 위한 제3 비트들의 제1 세트를 포함하고, 상기 제3 비트들의 제1 세트는 또한 고유한 상기 인덱스와 상기 오프셋 간 차이를 나타내며;
    상기 메타데이터에 기초하여 상기 압축된 청크를 압축 해제하는 것과; 그리고
    압축 해제된 상기 인덱스들을 상기 인덱스 버퍼에 기록하는 것을
    동시에 수행하도록 구성되는, 장치.
  12. 청구항 11에 있어서, 상기 제1 비트들은 상기 압축된 청크들이 모노토닉 압축된 청크들임을 나타내고, 제3 비트들의 제2 세트는 상기 압축된 청크들에서의 재시작 인덱스들의 위치들을 나타내는, 장치.
  13. 청구항 11에 있어서, 상기 제1 비트들은 상기 압축된 청크들이 오디너리 압축된 청크들임을 나타내고, 상기 제3 비트들의 제2 세트는 상기 복수의 컴퓨트 유닛 중 어느 컴퓨트 유닛이 상기 압축된 청크들에서의 인덱스들을 압축 해제하기 위해 사용되는지를 나타내는, 장치.
  14. 청구항 11 내지 13 중 어느 한 항에 있어서, 상기 메타데이터는 상기 압축된 청크들에 대한 상기 인덱스들의 값들과 상기 오프셋들 간 차이들을 나타내기 위해 사용되는 비트 수를 나타내는 필드들을 포함하는, 장치.
  15. 청구항 14에 있어서, 상기 컴퓨트 유닛은 상기 메타데이터에 저장된 상기 압축된 청크들의 시작 어드레스에 기초하여 상기 압축된 청크들에서의 압축된 인덱스들에 액세스하도록 구성되고, 상기 컴퓨트 유닛은 상기 압축된 인덱스들, 상기 오프셋들 및 상기 비트 필드들에 기초하여 상기 압축된 청크들을 압축 해제하도록 구성되는, 장치.
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020207015825A 2017-11-02 2018-09-26 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제 KR102646818B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762580795P 2017-11-02 2017-11-02
US62/580,795 2017-11-02
US15/832,131 US10600142B2 (en) 2017-11-02 2017-12-05 Compression and decompression of indices in a graphics pipeline
US15/832,131 2017-12-05
PCT/US2018/052836 WO2019089160A1 (en) 2017-11-02 2018-09-26 Compression and decompression of indices in a graphics pipeline

Publications (2)

Publication Number Publication Date
KR20200067222A KR20200067222A (ko) 2020-06-11
KR102646818B1 true KR102646818B1 (ko) 2024-03-13

Family

ID=66332245

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207015825A KR102646818B1 (ko) 2017-11-02 2018-09-26 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제

Country Status (6)

Country Link
US (1) US10600142B2 (ko)
EP (1) EP3704665A4 (ko)
JP (1) JP7138169B2 (ko)
KR (1) KR102646818B1 (ko)
CN (1) CN111279384B (ko)
WO (1) WO2019089160A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11073828B2 (en) * 2017-12-08 2021-07-27 Samsung Electronics Co., Ltd. Compression of semantic information for task and motion planning
US11004263B1 (en) 2019-05-22 2021-05-11 Parallels International Gmbh System and method for reading arrays of data by rebuilding an index buffer while preserving order
US11030792B1 (en) * 2019-05-22 2021-06-08 Parallel International GmbH System and method for packing sparse arrays of data while preserving order
GB2593518B (en) * 2020-03-26 2023-01-04 Sony Interactive Entertainment Inc Image coding system and method
US20220414011A1 (en) * 2021-06-23 2022-12-29 Intel Corporation Opportunistic late depth testing to prevent stalling for overlapping cache lines

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140168221A1 (en) 2011-03-09 2014-06-19 Steven Fishwick Compression of a tessellated primitive index list in a tile rendering system
US20160071234A1 (en) 2014-09-04 2016-03-10 Nvidia Corporation Block-based lossless compression of geometric data

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6771264B1 (en) * 1998-08-20 2004-08-03 Apple Computer, Inc. Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor
GB2416100B (en) 2002-03-26 2006-04-12 Imagination Tech Ltd 3D computer graphics rendering system
US7671862B1 (en) * 2004-05-03 2010-03-02 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
WO2007040365A1 (en) * 2005-10-05 2007-04-12 Lg Electronics Inc. Method and apparatus for signal processing and encoding and decoding method, and apparatus therefor
US7752053B2 (en) 2006-01-13 2010-07-06 Lg Electronics Inc. Audio signal processing using pilot based coding
US8493381B1 (en) * 2008-04-14 2013-07-23 Google Inc. Methods and systems for geometry compression
US8760455B2 (en) 2009-10-05 2014-06-24 Nvidia Corporation Restart index that sets a topology
US9058685B2 (en) 2010-03-11 2015-06-16 Broadcom Corporation Method and system for controlling a 3D processor using a control list in memory
GB201103698D0 (en) * 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphics processing
US10535185B2 (en) * 2012-04-04 2020-01-14 Qualcomm Incorporated Patched shading in graphics processing
GB201313292D0 (en) * 2013-07-25 2013-09-11 Bifold Fluidpower Ltd Graphical data representation
US9536278B2 (en) * 2013-11-27 2017-01-03 Intel Corporation Graphics processing of a vertex buffer using a relative index buffer
US9417911B2 (en) * 2014-03-12 2016-08-16 Live Planet Llc Systems and methods for scalable asynchronous computing framework
GB2548120B (en) 2016-03-08 2020-09-16 Advanced Risc Mach Ltd Graphics processing systems

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140168221A1 (en) 2011-03-09 2014-06-19 Steven Fishwick Compression of a tessellated primitive index list in a tile rendering system
US20160071234A1 (en) 2014-09-04 2016-03-10 Nvidia Corporation Block-based lossless compression of geometric data

Also Published As

Publication number Publication date
US20190172173A1 (en) 2019-06-06
EP3704665A4 (en) 2021-08-25
JP2021501938A (ja) 2021-01-21
US10600142B2 (en) 2020-03-24
CN111279384B (zh) 2023-01-13
EP3704665A1 (en) 2020-09-09
WO2019089160A1 (en) 2019-05-09
KR20200067222A (ko) 2020-06-11
JP7138169B2 (ja) 2022-09-15
CN111279384A (zh) 2020-06-12

Similar Documents

Publication Publication Date Title
KR102646818B1 (ko) 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제
US9202303B2 (en) System and method for compositing path color in path rendering
EP3008701B1 (en) Using compute shaders as front end for vertex shaders
KR102258100B1 (ko) 텍스쳐 처리 방법 및 장치
US11694367B2 (en) Compressing texture data on a per-channel basis
JP2020531994A (ja) 圧縮メタデータを用いたテクスチャ常駐チェック
KR20170038525A (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치의 동작 방법
US20220206950A1 (en) Selective generation of miss requests for cache lines
CN114730452A (zh) 减少带宽曲面细分因子
KR20190120166A (ko) 델타 색상 압축의 비디오 적용
US8254701B1 (en) Data compression using a geometry shading unit
US11978234B2 (en) Method and apparatus of data compression
US8295621B1 (en) Data decompression using a geometry shading unit
GB2555633A (en) Updating data stored in a memory
EP4168975A1 (en) Delta triplet index compression
GB2552136A (en) Accessing encoded blocks of data in memory
KR20160068204A (ko) 메시 지오메트리를 위한 데이터 처리 방법 및 이를 기록한 컴퓨터 판독 가능 저장 매체
US20230206380A1 (en) Optimizing partial writes to compressed blocks
US10089783B2 (en) Graphics processing

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