JP2023530306A - デルタトリプレットインデックス圧縮 - Google Patents
デルタトリプレットインデックス圧縮 Download PDFInfo
- Publication number
- JP2023530306A JP2023530306A JP2022577276A JP2022577276A JP2023530306A JP 2023530306 A JP2023530306 A JP 2023530306A JP 2022577276 A JP2022577276 A JP 2022577276A JP 2022577276 A JP2022577276 A JP 2022577276A JP 2023530306 A JP2023530306 A JP 2023530306A
- Authority
- JP
- Japan
- Prior art keywords
- index
- delta
- value
- compressed
- lookup table
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
- 230000006835 compression Effects 0.000 title description 25
- 238000007906 compression Methods 0.000 title description 25
- 238000000034 method Methods 0.000 claims abstract description 40
- 238000010586 diagram Methods 0.000 abstract description 21
- 238000012545 processing Methods 0.000 description 35
- 239000000872 buffer Substances 0.000 description 16
- 238000009877 rendering Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 10
- 230000009466 transformation Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000000844 transformation Methods 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 230000002123 temporal effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/001—Model-based coding, e.g. wire frame
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6011—Encoder aspects
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Image Generation (AREA)
Abstract
グラフィックスプリミティブと関連付けられたインデックスストリームを圧縮及び圧縮解除するための方法、デバイス及びシステムを提供する。デルタ値グループは、インデックスストリームのインデックスグループに基づいて決定される。デルタ値グループは、ルックアップテーブルのデルタ値と比較される。インデックスグループは、デルタ値グループが、エントリの全てのデルタ値と一致する場合にルックアップテーブルのエントリに基づいて圧縮され、そうでない場合に、可変長符号化に基づいて圧縮される。【選択図】図7
Description
(関連出願の相互参照)
本願は、2020年6月22日に出願された米国仮特許出願第63/042,384号、及び、2021年2月26日に出願された米国特許出願第17/187,625号の利益を主張し、これらは、言及することにより、本明細書に完全に記載されているかのように組み込まれる。
本願は、2020年6月22日に出願された米国仮特許出願第63/042,384号、及び、2021年2月26日に出願された米国特許出願第17/187,625号の利益を主張し、これらは、言及することにより、本明細書に完全に記載されているかのように組み込まれる。
コンピュータグラフィックスでは、オブジェクトは、典型的には、二次元(two-dimensional、2D)ポリゴンのグループとして三次元(three-dimensional、3D)空間で表現され、二次元ポリゴンは、典型的には、この文脈ではプリミティブと呼ばれる。ポリゴンは、典型的には、各々が3つの頂点を有する三角形である。他のタイプのポリゴンプリミティブが使用され得るが、典型的には、三角形が最も一般的である。各頂点は、3D空間における位置を定義する情報を含み、典型的には、例えば、色、法線ベクトル及び/又はテクスチャ情報等の他の情報を含む。
頂点は、2つ以上の三角形(又は他のプリミティブ)の一部とすることができる。例えば、共通の辺を有する2つの三角形は、2つの頂点を共有する。オブジェクトを記述するために様々な共通の辺を共有する複数の三角形は、いくつかの場合において、メッシュ又は三角形メッシュと呼ばれる。頂点を表すのに必要とされる情報の量を低減するために、典型的には、各頂点を、その3D座標、色及び/又は他の情報全体を参照するのではなく、インデックス値によって参照することが有用である。インデックスデータは、プリミティブ接続性を指定するために広く使用されている。
一例では、ストリーム内の第1の三角形は、インデックス0、1及び2によって参照される3つの頂点を含む。第1の三角形に隣接するストリーム内の次の三角形は、インデックス1、2及び3によって参照される3つの頂点を含む。ここで、三角形は、共通の辺を共有し、共通の辺は、インデックス1及び2に対応する頂点によって定義される。これにより、2つの三角形は、4つの一意の頂点のみによって表され、1及び2によってインデックス付けされた頂点は、使い回しされている。インデックスは、常に整数値である。
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
いくつかの実施形態は、グラフィックスプリミティブと関連付けられたインデックスストリームを圧縮するための方法を提供する。デルタ値グループは、インデックスストリームのインデックスグループに基づいて決定される。デルタ値グループは、ルックアップテーブル内のデルタ値と比較される。インデックスグループは、デルタ値グループがエントリ内の全てのデルタ値と一致する場合に、ルックアップテーブル内のエントリに基づいて圧縮され、そうでない場合、インデックスグループは、可変長符号化に基づいて圧縮される。
いくつかの実施形態では、デルタ値グループが、ルックアップテーブル内のエントリ内のデルタ値に一致する少なくとも1つの値を含み、エントリ内の何れのデルタ値にも一致しない少なくとも1つの値を含み、エントリ内の何れのデルタ値にも一致しない少なくとも1つの値がエントリ内のドントケア値(don’t-care value)に対応する場合、インデックスグループは、エントリに基づいて、及び、エントリ内の何れのデルタ値にも一致しない少なくとも1つの値の可変長符号化に基づいて圧縮される。
いくつかの実施形態では、デルタ値グループが、ルックアップテーブル内のエントリ内のデルタ値に一致する少なくとも1つの値を含まない場合、インデックスグループは、ドントケア値のみを含むルックアップテーブル内のエントリに基づいて、及び、デルタ値の各々の可変長符号化に基づいて圧縮される。いくつかの実施形態では、インデックスグループは、トリプレットであり、グラフィックスプリミティブは、三角形である。いくつかの実施形態では、インデックスストリームは、メッシュの頂点をインデックス付けする。
いくつかの実施形態は、グラフィックスプリミティブと関連付けられた、圧縮されたインデックスストリームを圧縮解除するための方法を提供する。圧縮されたインデックスストリームの圧縮されたインデックスグループは、ルックアップテーブルのエントリと比較される。圧縮されたインデックスグループが、圧縮されたインデックスグループの各々に対応するデルタ値を含むルックアップテーブルエントリと一致する場合、圧縮されたインデックスグループは、デルタ値に基づいて圧縮解除され、そうでない場合、圧縮されたインデックスグループは、可変長復号化に基づいて圧縮解除される。
いくつかの実施形態では、圧縮されたインデックスグループが、圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのデルタ値を含み、及び、圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのドントケア値を含むルックアップテーブルエントリに一致する場合、圧縮されたインデックスグループは、少なくとも1つのデルタ値に基づいて、及び、少なくとも1つのドントケア値に対応するデルタ値の可変長復号化に基づいて圧縮解除される。
いくつかの実施形態では、圧縮されたインデックスグループが、ドントケア値のみを含むルックアップテーブルエントリに一致する場合、圧縮されたインデックスグループは、圧縮されたインデックスグループの各々に対応するデルタ値の可変長復号化に基づいて圧縮解除される。いくつかの実施形態では、圧縮されたインデックスグループは、トリプレットであり、グラフィックスプリミティブは、三角形である。いくつかの実施形態では、圧縮されたインデックスストリームは、メッシュの頂点をインデックス付けする。
いくつかの実施形態は、グラフィックスプリミティブと関連付けられたインデックスストリームを圧縮するように構成された圧縮器を提供する。圧縮器は、インデックスストリームのインデックスグループに基づいてデルタ値グループを決定するように構成された回路を含む。また、圧縮器は、デルタ値グループをルックアップテーブル内のデルタ値と比較するように構成された回路を含む。また、圧縮器は、デルタ値グループが、ルックアップテーブル内のエントリ内の全てのデルタ値と一致する場合に、エントリに基づいてインデックスグループを圧縮し、そうでない場合、可変長符号化に基づいてインデックスグループを圧縮するように構成された回路を含む。
いくつかの実施形態では、圧縮器は、デルタ値グループが、ルックアップテーブル内のエントリ内のデルタ値に一致する少なくとも1つの値を含み、エントリ内の何れのデルタ値にも一致しない少なくとも1つの値を含み、エントリ内の何れのデルタ値にも一致しない少なくとも1つの値がエントリ内のドントケア値に対応する場合、エントリに基づいて、及び、エントリ内の何れのデルタ値にも一致しない少なくとも1つの値の可変長符号化に基づいて、インデックスグループを圧縮するように構成された回路を含む。
いくつかの実施形態では、圧縮器は、デルタ値グループが、ルックアップテーブル内のエントリ内のデルタ値に一致する少なくとも1つの値を含まない場合、ドントケア値のみを含むルックアップテーブル内のエントリに基づいて、及びイ、デルタ値の各々の可変長符号化に基づいて、インデックスグループを圧縮するように構成された回路を含む。いくつかの実施形態では、インデックスグループは、トリプレットであり、グラフィックスプリミティブは、三角形である。いくつかの実施形態では、インデックスストリームは、メッシュの頂点をインデックス付けする。
いくつかの実施形態は、グラフィックスプリミティブと関連付けられた圧縮されたインデックスストリームを圧縮解除するように構成された圧縮解除器(decompressor)を提供する。圧縮解除器は、圧縮されたインデックスストリームの圧縮されたインデックスグループをルックアップテーブルのエントリと比較するように構成された回路を含む。また、圧縮解除器は、圧縮されたインデックスグループが、圧縮されたインデックスグループの各々に対応するデルタ値を含むルックアップテーブルエントリに一致する場合、デルタ値に基づいて、圧縮されたインデックスグループを圧縮解除し、そうでない場合、可変長復号化に基づいて、圧縮されたインデックスグループを圧縮解除するように構成された回路を含む。
いくつかの実施形態では、圧縮解除器は、圧縮されたインデックスグループが、圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのデルタ値を含み、圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのドントケア値を含む、ルックアップテーブルエントリに一致する場合、少なくとも1つのデルタ値に基づいて、及び、少なくとも1つのドントケア値に対応するデルタ値の可変長復号化に基づいて、圧縮されたインデックスグループを圧縮解除するように構成された回路を含む。
いくつかの実施形態では、圧縮解除器は、圧縮されたインデックスグループが、ドントケア値のみを含むルックアップテーブルエントリに一致する場合、圧縮されたインデックスグループの各々に対応するデルタ値の可変長復号化に基づいて、圧縮されたインデックスグループを圧縮解除するように構成された回路を含む。いくつかの実施形態では、圧縮されたインデックスグループは、トリプレットであり、グラフィックスプリミティブは、三角形である。いくつかの実施形態では、圧縮されたインデックスストリームは、メッシュの頂点をインデックス付けする。
いくつかの実施形態は、三角形メッシュ内の頂点を表すインデックスストリーム内のインデックスを圧縮するためのシステム、デバイス及び方法を提供する。インデックスストリームが入力され、インデックスストリームからのインデックス値トリプレットに基づいて、デルタ値トリプレットが計算される。デルタ値トリプレットが、共通パターンルックアップテーブル内のパターン識別子(identifier、ID)に対応する場合、インデックス値トリプレットは、パターンIDによって表される。デルタ値トリプレットが、共通パターンルックアップテーブル中の何れのパターンIDにも対応しない場合、インデックス値トリプレットは、デルタ値トリプレットによって表される。
いくつかの実施形態では、デルタ値トリプレットが、共通パターンルックアップテーブル内の何れのパターンIDにも対応しない場合、デルタトリプレットは、符号化され、インデックス値トリプレットは、符号化されたデルタトリプレットによって表される。いくつかの実施形態では、符号化されたデルタ値トリプレットは、可変長符号化を使用して符号化される。
図1は、本開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含むことができる。デバイス100は、プロセッサ102と、メモリ104と、記憶装置106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含むことができる。デバイス100は、図1に示されていない追加の構成要素を含むことができることを理解されたい。
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィック処理ユニット(graphics processing unit、GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置してもよいし、プロセッサ102とは別に位置してもよい。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM、キャッシュ)を含む。
記憶装置106は、固定又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に同じ態様で動作可能であることに留意されたい。出力ドライバ114は、ディスプレイデバイス118に連結された加速処理デバイス(accelerated processing device、「APD」)116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、表示のためにピクセル出力をディスプレイデバイス118に提供する。以下で更に詳細に説明するように、APD116は、単一命令複数データ(single-instruction-multiple-data、「SIMD」)パラダイムに従って計算を行う1つ以上の並列処理ユニットを含む。こうして、様々な機能は、本明細書では、APD116によって又はAPD116と併せて行われるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、追加的又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によってドライブされない同様の能力を有する他のコンピューティングデバイスによって行われ、ディスプレイデバイス118にグラフィック出力を提供する。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムが、本明細書に説明される機能を行い得ることが企図される。代替的に、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
図2は、APD116上の処理タスクの実行に関する追加の詳細を示す、デバイス100のブロック図である。プロセッサ102は、システムメモリ104内で、プロセッサ102による実行のための1つ以上の制御論理モジュールを維持する。制御論理モジュールは、オペレーティングシステム120と、カーネルモードドライバ122と、アプリケーション126と、を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の動作の様々な特徴を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行される他のソフトウェアのためのハードウェアへのインターフェースを提供する。カーネルモードドライバ122は、例えば、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインターフェース(application programming interface、「API」)を提供して、APD116の様々な機能にアクセスすることによって、APD116の操作を制御する。また、カーネルモードドライバ122は、APD116の処理構成要素(以下で更に詳細に説明されるSIMDユニット138等)によって実行するためのプログラムをコンパイルするジャストインタイムコンパイラを含む。
APD116は、並列処理に適し得るグラフィック操作及び非グラフィック操作等の選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づいて、ピクセル動作、幾何学計算及びディスプレイデバイス118への画像のレンダリング等のようなグラフィックスパイプライン動作を実行するために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する動作等のような、グラフィック動作に直接関連しない計算処理動作を実行する。
APD116は、プロセッサ102の要求で、SIMDパラダイムに従って並列の態様で操作を行う1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行することができる。レーンは、全てのレーンが所定の命令を実行する必要がない場合、プレディケーション(予測)でオフに切り替えることができる。また、プレディケーションは、分岐制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き分岐又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンのプレディケーション、及び、異なる制御フローパスの直列実行が任意の制御フローを可能にする。
計算ユニット132内の実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列で実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上の「ウェーブフロント(wavefront)」として同時に実行することができる。1つ以上のウェーブフロントが「ワークグループ」に含まれ、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行することができる。代替例では、ウェーブフロントは、単一のSIMDユニット138上で連続して、又は、異なるSIMDユニット138上で部分的に若しくは完全に並列に実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に実行することができるワークアイテムの最大集合体と考えることができる。したがって、プロセッサ102から受信されたコマンドが、特定のプログラムを単一のSIMDユニット138上で同時に実行させることができない程度にプログラムが並列化されることを示す場合、そのプログラムは、2つ以上のSIMDユニット138上に並列化されるか、又は、同じSIMDユニット138上で直列化される(又は必要に応じて並列化及び直列化の両方が行われる)ウェーブフロントに分けられる。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上の様々なウェーブフロントのスケジューリングに関連する操作を行う。
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィック処理コマンドを受け入れるグラフィックス処理パイプライン134は、並列に実行するために計算タスクを計算ユニット132に提供する。
また、計算ユニット132はまた、グラフィックに関連しない、又は、グラフィックス処理パイプライン134の「通常の」動作の一部(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補足するために行われるカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
図3は、図2に示すグラフィックス処理パイプライン134の追加の詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々が特定の機能を実行する段階(ステージ)を含む。段階は、グラフィックス処理パイプライン134の機能のサブディビジョンを表す。各段階は、プログラマブル処理ユニット202内で実行されるシェーダプログラムとして部分的若しくは完全に、又は、プログラム可能な処理ユニット202の外部の固定機能非プログラム可能ハードウェアとして部分的若しくは完全に実装される。
入力アセンブラ段階302は、ユーザが満たしたバッファ(例えば、アプリケーション126等のプロセッサ102によって実行されるソフトウェアの要求で満たされたバッファ)を読み取り、そのデータを、パイプラインの残りの部分によって使用されるプリミティブに組み立てる(アセンブルする)。入力アセンブラ段階302は、ユーザが満たしたバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラ段階302は、パイプラインの残りの部分によって使用するための組み立てられたプリミティブをフォーマット化する。
頂点シェーダ段階304は、入力アセンブラ段階302によって組み立てられたプリミティブの頂点を処理する。頂点シェーダ段階304は、変換、スキニング、モーフィング及び各々の頂点照明等の様々な頂点ごとの動作を実行する。変換動作は、頂点の座標を変換するための様々な動作を含む。これらの動作は、モデリング変換、ビュー変換、投影変換、斜視分割(perspective division)及びビューポート変換(viewport transformations)のうち1つ以上を含む。本明細書では、そのような変換は、変換が行われる頂点の座標又は「位置」を変更すると考えられる。頂点シェーダ段階304の他の動作は、座標以外の属性を変更する。
頂点シェーダ段階304は、1つ以上の計算ユニット132上で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づいている。ドライバ122は、そのようなコンピュータプログラムをコンパイルして、計算ユニット132内での実行に好適なフォーマットを有する頂点シェーダプログラムを生成する。
ハルシェーダ段階306、モザイク化器(テッセレータ)段階308及びドメインシェーダ段階310は、モザイク化(テッセレーション)を実装するためにともに動作し、モザイク化は、プリミティブを細分することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダ段階306は、入力プリミティブに基づいて、モザイク化のためのパッチを生成する。モザイク化器段階308は、パッチのためのサンプルセットを生成する。ドメインシェーダ段階310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダ段階306及びドメインシェーダ段階310は、プログラマブル処理ユニット202上で実行されるシェーダプログラムとして実装することができる。
ジオメトリシェーダ段階312は、プリミティブ基準で頂点動作を実行する。ポイントスプリント拡張(point sprint expansion)、動的粒子システム操作(dynamic particle system operations)、ファーフィン生成(fur-fin generation)、シャドウボリューム生成(shadow volume generation)、シングルパスレンダリング‐キューブマップ(single pass render-to-cubemap)、プリミティブごとの材料交換(per-primitive material swapping)、及び、プリミティブごとの材料設定(per-primitive material setup)等の動作を含む様々な異なるタイプの動作を、ジオメトリシェーダ段階312によって実行することができる。場合によっては、プログラマブル処理ユニット202上で実行されるシェーダプログラムは、ジオメトリシェーダ段階312の動作を実行する。
ラスタライザ段階314は、単純なプリミティブを受け入れ、ラスタライズし、上流に生成される。ラスタライズは、何れのスクリーンピクセル(又はサブピクセルサンプル)が特定のプリミティブによってカバーされることを決定することからなる。ラスタライズは、固定機能ハードウェアによって行われる。
ピクセルシェーダ段階316は、上流に生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダ段階316は、テクスチャメモリからテクスチャを適用することができる。ピクセルシェーダ段階316の動作は、プログラマブル処理ユニット202上で実行されるシェーダプログラムによって実行される。
出力マージ段階318は、ピクセルシェーダ段階316からの出力を受け入れ、それらの出力をマージし、z試験及びアルファブレンド等の動作を実行して、スクリーンピクセルの最終色を決定する。
テクスチャを定義するテクスチャデータは、テクスチャユニット320によって記憶及び/又はアクセスされる。テクスチャは、グラフィックス処理パイプライン134内の様々な点で使用されるビットマップ画像である。例えば、場合によっては、ピクセルシェーダ段階316は、テクスチャをピクセルに適用して、レンダリングされる頂点の数を増加させることなく、(例えば、より「写実的な」外観を提供するために)見かけのレンダリングの複雑さを改善する。
場合によっては、頂点シェーダ段階304は、テクスチャユニット320からのテクスチャデータを使用して、例えば、改善された美観のために頂点を生成又は変更することによって、複雑さを高めるためにプリミティブを変更する。一例では、頂点シェーダ段階304は、テクスチャユニット320に記憶された高さマップ(height map)を使用して、頂点の変位を変更する。このタイプの技術は、例えば、水をレンダリングするために使用される頂点の位置及び数を変更することによって、ピクセルシェーダ段階316でのみ使用されるテクスチャと比較して、より現実的な外観の水を生成するために使用され得る。場合によっては、ジオメトリシェーダ段階312は、テクスチャユニット320からのテクスチャデータにアクセスする。
インデックスデータは、プリミティブ接続性(primitive connectivity)を指定するためにコンピュータグラフィックスにおいて広く使用されている。例えば、オブジェクトは、典型的には、インデックスストリームとして指定され、開始頂点から始まり、次いで第1のポリゴンの他の頂点に進み、オブジェクトが完全に定義されるまで、共通の頂点を共有する隣接するポリゴンのインデックスに進む。
いくつかの場合には、インデックスストリームを圧縮することが望ましい。例えば、「従来の」デュアルパスレンダリング(例えば、ソフトウェアによって制御される、個別のzパス及びレンダリングパス)では、zパスを生き残ったプリミティブを圧縮インデックスストリームとして記憶することが有利であり得る。いくつかのそのような場合には、圧縮されたインデックスストリームは、元のインデックスバッファの代わりに、レンダリングパスの間にインデックスデータとして使用可能である。この手法が適用可能であり得る例示的な場合は、zパス及びレンダリングパスのジオメトリが同じである場合を含む。
いくつかの場合には、インデックスを処理する際に使用される記憶域及び帯域幅を低減するために、インデックスストリームを圧縮することが望ましい。インデックスバッファは、変更することなく使い回しされることがある。しかしながら、いくつかの場合には、インデックスバッファの数個のバージョンが使用される。ランドスケープレンダリング(landscape rendering)の例では、複数のインデックスバッファが、異なる詳細レベル(levels of detail、LOD)でランドスケープ頂点にアクセスする。別の例では、複数のインデックスバッファが異なる視野角に使用され、特定の角度から見ることができないランドスケープ特徴が、インデックスバッファのうちいくつかから除去される。そのため、いくつかのそのような場合には、いくつかの状況において記憶域空間及び/又はメモリ帯域幅を節約するために複数のインデックスバッファを圧縮することが有利である。
いくつかの場合には、インデックスデータは、グラフィックスパイプライン内で、ジオメトリ処理の開始からパイプライン内の後のハードウェアユニットにストリーミングされる。いくつかのそのような場合には、インデックスのための通常のバッファ(例えば、先入れ先出し(first-in-first out、FIFO)バッファ)は、インデックスデータを記憶するためにかなりの量のハードウェアを必要とすることになる。そのため、いくつかのそのような場合には、インデックスストリームを記憶するために使用される記憶域の量を低減するために、(例えば、本明細書で考察されるトリプレット圧縮を使用して)インデックスストリームを圧縮することが望ましい。いくつかのそのような場合には、圧縮の並列変形形態を使用することができる(すなわち、より大きいプリミティブスループットのために複数のプリミティブを並列に圧縮又は圧縮解除する)。
ストリーム内の連続するインデックスの数値は、典型的には、それらが典型的に構築される方法における空間的局所性に起因して数がかなり近いため、インデックスストリームは、典型的には、実質的時間的局所性を呈する(すなわち、数は、互いの閾値内等のように、値が近い)。例えば、ストリーム内の1つのインデックスを考慮すると、周囲のインデックス(例えば、直前のインデックス及び/又は直後のインデックス等のような、前のインデックス及び/又は後のインデックス)は、典型的には、近い(例えば、閾値数内の)値を有する。いくつかの実施形態では、この特性は、ジオメトリデータサイズを低減するために利用される圧縮性をもたらす。いくつかの実施形態では、ストリーム内のインデックスパターンを圧縮することによって、インデックスストリームを更に圧縮することが可能である。
コンピュータグラフィックスでは、様々なプリミティブが使用される。例えば、2つの頂点によって定義される線、又は、4つの頂点によって定義される四角形をレンダリングすることが可能である。いくつかの実施形態では、ほとんどの共通プリミティブは、3つの頂点によって表される三角形である。そのため、圧縮のために、三角形プリミティブの頂点を表すインデックスストリームをトリプレット(すなわち、3つの頂点のグループ又はインデックス)に分割することが望まれ得る。本明細書の技術、デバイス及びシステムは、例えば、インデックスストリームを他の数の頂点のグループに分割することによって、他のプリミティブにも適用可能であることに留意されたい。例えば、圧縮のために、四角形プリミティブの頂点を表すインデックスストリームをクアドラプレット(すなわち、4つの頂点のグループ又はインデックス)に分解することが望まれ得る。本明細書の例は、三角形/トリプレットの場合に関して記載されるが、例えば、インデックスストリームを他の数の頂点のグループに分割することによって、異なる数の頂点への適応が企図されることに留意されたい。更に、インデックスストリームにおいて、特別な場合が生じることに留意されたい。例えば、三角形メッシュは、典型的には、トリプレットとして整合される。しかしながら、いくつかの実施形態は、パッチプリミティブを含む。いくつかの場合には、パッチプリミティブは、プリミティブ当たり3個よりも多いインデックスを含む。更に、いくつかの実施形態は、トリプレットによって整合されない点プリミティブ(プリミティブ当たり1個のインデックス)、及び、線プリミティブ(プリミティブ当たり2個のインデックス)を含む。そのため、メッシュが各々5個のインデックスを有する7個のプリミティブを含む例では、インデックスの総数は、35である。35個のインデックスは、35個に整合させるために、11個のトリプレット(=33個のインデックス)及び末尾における2インデックスエントリとして表現可能である。代替的に、データは、各プリミティブが単一のトリプレット及び別の2インデックスエントリを含むように表され、その結果、データは5によって整合される。ここで、各プリミティブは、5個のインデックスを有し、7個のプリミティブがある。そのため、データを、7×(3+2)として記憶することができる、すなわち、各プリミティブは、トリプレットと、2個のインデックスのみを含むグループとして記憶される。代替的に、データは、トリプレットの長いシーケンスとして記憶され、最後のエントリは、データの量を記憶されたエントリの数と整合する(例えば、11×3+2、11個のトリプレットと、末尾に1つの特別枠)。
各頂点が異なる値によってインデックス付けされるため、数は、典型的には、インデックスストリームにおいて繰り返されない。しかしながら、プリミティブのインデックス内の基礎となるパターンは、プリミティブ間で同等である。例えば、プリミティブ内のインデックス間及び/又はインデックス間のデルタ値(例えば、差分値)は、別のプリミティブ内のインデックス間及び/又はインデックス間のデルタ値と同等であり、インデックス値が異なる場合でも、同様であり得る。このようにして、いくつかの実施形態では、共通パターンがインデックスストリーム内で識別可能である。
そのため、いくつかの実施形態では、インデックスストリームは、インデックストリプレット内及び/又はインデックストリプレット間(三角形プリミティブの場合若しくは四角形プリミティブの場合には、インデックスクアドラプレット内及び/若しくはインデックスクアドラプレット間)のデルタ値に基づいて圧縮される。
いくつかの実施形態では、圧縮されたデルタトリプレットストリームは、インデックスストリームの圧縮バージョンとして、様々な動作において使用される。いくつかの実施形態では、圧縮されたデルタトリプレットストリームは、可視性の形態として使用される。例えば、いくつかの実施形態では、圧縮されたデルタトリプレット値は、何れの三角形がレンダリングされたスクリーンのビン、タイル又は他の部分において可視であるかを追跡する、バッファ(例えば、「可視性バッファ」)内のインデックス値の代わりに使用される。いくつかの実施形態では、圧縮されたインデックスデータを使用することは、ビンごとの可視性情報のために有利である。例えば、いくつかの場合には、ビンをレンダリングする場合に、問題のビンに寄与しないプリミティブを処理する必要がないように、プリミティブごとの情報を記憶することが有利であり得る。圧縮されたインデックスストリームを構築することによって可視性フラグをフェッチし、次いで、フェッチされた可視性フラグに基づいてインデックスバッファにスパースフェッチ(sparse fetch)する必要はないが、これは、圧縮されたインデックスストリームが必要な情報を直接提供するためである。このことは、プリミティブをレンダリングする場合の帯域幅及び待ち時間を低減するという利点を有することができる。可視性情報を記憶する1つの方法は、プリミティブが可視であるかどうかを示すビットをプリミティブごとに計算し、この情報を圧縮形態又は非圧縮形態の何れかでメモリに記憶することである。この手法を使用すると、いくつかの場合には、インデックスをフェッチするためのプロセスは、最初に可視性情報がフェッチされ、その後、可視性ビットに基づくインデックスデータへの従属フェッチが続くことを必要とする。いくつかの実施形態では、この手法によれば、2つのデータフェッチパスの要件により、全体的なフェッチ待ち時間が2倍になる。いくつかの実施形態では、メモリフェッチが、典型的には、数百ビットのブロックで行われるので、インデックスデータのオーバーフェッチも存在することになり、一方、従属フェッチは、インデックスバッファ内のデータのサブセットのみを必要とし、これにより、フェッチされるデータのいくつかの部分は、可視プリミティブのインデックスとして使用されない。そのため、いくつかの実施形態は、可視プリミティブのインデックスのみを含む、圧縮されたインデックスデータをメモリ内に生成する。これにより、全てのフェッチされたデータが使用されることになる。いくつかのそのような実施形態では、可視性情報を書き込む場合に、より多くのデータが圧縮インデックスストリームのために生成されるが、より少ない情報が、より好都合なアクセスパターンを使用して、圧縮されたインデックスストリームを使用して読み取られる。
図4は、例示的なインデックスストリームの例示的なトリプレットベースのデルタ圧縮を示すフロー図400である。フロー図400は、トリプレットベースであるインデックスストリームを圧縮するための技術を示す。この技術は、3つの頂点を有する三角形であるほとんどの共通プリミティブタイプに対して最適化される。そのため、この技術では、デルタ値(例えば、差分値)が、インデックス値のトリプレットに対するデルタトリプレットを生成するために、インデックスストリームからのインデックス値のトリプレット内で計算され、ルックアップテーブルが、ストリームのほとんどの共通デルタトリプレットを取り込む。ルックアップテーブル内に取り込まれたデルタトリプレット(すなわち、ストリーム内のほとんどの共通のパターン又はデルタトリプレット)に対応するインデックストリプレットは、ルックアップテーブル内のエントリと関連付けられたパターン識別子(ID)によって表される。ルックアップテーブルに取り込まれないデルタトリプレットに対応するインデックストリプレットは、可変長符号化をデルタトリプレットに適用し、符号化された値によってインデックストリプレットを表すことによって等のように、別の方法で記憶又は符号化される。
いくつかの実施形態では、この技術は、インデックスストリームの有利に圧縮された表現をもたらす。いくつかの実施形態では、これは、比較的少数(例えば、閾値数又は閾値割合を下回る)のパターンがデルタストリーム内で発生することをもたらす、インデックスストリーム内の時間的局所性に起因しており、それにより、比較的多数(例えば、閾値数又は閾値割合を上回る)のデルタトリプレットが共通パターンルックアップテーブル内のエントリに合致する。
より詳細には、フロー図400は、2つのインデックストリプレット402、404に分割された6つのインデックスを含むインデックスストリームを示している。インデックストリプレット402は、インデックス406、408、410を含み、それぞれ、位置N-3、N-2及びN-1を占有する。インデックストリプレット404は、インデックス412、414、416を含み、それぞれ、位置N、N+1及びN+2を占有する。
いくつかの実施形態では、インデックストリプレット404を圧縮するために、インデックス412、414、416にそれぞれ対応する3つのデルタ値418、420、422が、インデックス412、414、416の値に基づいて計算される。例えば、デルタ値418は、(インデックス412)-(インデックス410)として決定される、すなわち、インデックス412の値とインデックス410の値との間の差である。デルタ値420は、(インデックス414)-(インデックス412)として計算される、すなわち、インデックス414の値とインデックス412の値との間の差である。デルタ値422は、(インデックス416)-(インデックス412)として計算される、すなわち、インデックス416の値とインデックス412の値との間の差である。3つのデルタ値のうち何れか(この例ではデルタ値418)は、前のトリプレットからのインデックス値に基づくが、他の2つのデルタ値(この例ではデルタ値420及びデルタ値422)は、トリプレット内のインデックス値から計算されることに留意されたい。3つのデルタ値418、420、422は、便宜上、デルタトリプレット424と呼ばれる。
デルタトリプレット424の値が決定された後、デルタトリプレット424が圧縮される。デルタトリプレットを圧縮するために、3つのデルタ値418、420、422が、共通パターンルックアップテーブル426内の値と比較される。共通パターンルックアップテーブル426は、グラフィックスハードウェア内の専用レジスタ等のように、任意の好適な方法で実装され、任意の好適なサイズとすることができる。この例では、共通パターンルックアップテーブル426は、15パターンのデルタ値を記憶する。いくつかの実施形態では、共通パターンルックアップテーブル内のエントリの数は、所望のルックアップ速度、ダイ面積及び/又は設計複雑さに基づいている。共通パターンルックアップテーブル内のパターンの各々は、パターン識別子(ID)と関連付けられる。
いくつかの実施形態では、デルタトリプレット424内のデルタ値418、420、422が(順番に)共通パターンルックアップテーブル426内の共通パターンに一致する場合、インデックストリプレット404は、デルタトリプレット424に一致する共通パターンに対応するパターンID430に基づいて、圧縮された表現428に圧縮される。いくつかの実施形態では、デルタ値418、420、422は、インデックストリプレット404の圧縮された表現428の一部ではない(パターンID430におけるそれらの表現は別として)。
いくつかの実施形態では、デルタトリプレット404内のデルタ値418、420、422が(順番に)共通パターンルックアップテーブル426内の何れの共通パターンにも一致しない場合、インデックストリプレット424は、別の好適な方法で圧縮された表現428で表される。例えば、いくつかの実施形態では、デルタトリプレット424内のデルタ値418、420、422は、可変長符号化等の任意の好適な方法で符号化され、インデックストリプレット404は、符号化されたデルタ値432に基づいて、圧縮された表現428に圧縮される。
いくつかの実施形態では、この場合には、共通パターンルックアップテーブル426内の何れの共通パターンにも一致しないデルタ値を、各デルタ値が「ドントケア」値である(すなわち、何れかのデルタ値に一致する)共通パターンルックアップテーブル426内のエントリに一致させることによって処理される。いくつかの実施形態では、インデックストリプレット404は、共通パターンルックアップテーブル426内のこの特定のエントリに対応するパターンID430と符号化されたデルタ値432との組み合わせに基づいて、圧縮された表現428に圧縮される。
いくつかの実施形態では、デルタトリプレット424内のデルタ値418、420、422のうち少なくとも1つであるが全てよりも少ない(すなわち、トリプレットの場合には1つ又は2つ)が(順番に)共通パターンルックアップテーブル426内の共通パターンに一致する場合、インデックストリプレット404は、パターンIDと符号化されたデルタ値との組み合わせに基づく等の別の好適な方法で圧縮された表現428に圧縮される。
例えば、いくつかの実施形態では、共通パターンルックアップテーブル426は、トリプレットが1つ以上の特定のデルタ値と1つ以上の「ドントケア」値とを含む、少なくとも1つの共通パターンを含む。そのような場合には、指定された値に一致するインデックストリプレット404の1つ以上のデルタ値は、共通パターンに対応するパターンID430に基づいて、圧縮された表現428で表現可能であり、1つ以上の「ドントケア」値に対応するインデックストリプレット404の1つ以上のデルタ値は、可変長符号化等の任意の好適な方法で符号化され、インデックストリプレットは、共通パターンに対応するパターンID430と1つ以上の符号化デルタ値432との組み合わせによって表される。
いくつかの実施形態では、共通パターンルックアップテーブル426は、事前に移入される(例えば、静的に)。いくつかの実施形態では、共通パターンルックアップテーブル426は固定されているか又は構成可能である。いくつかの実施形態では、パターンルックアップテーブル426は、トレーニングデータのセット(例えば、アプリケーショントレースから(例えば、経験的に、すなわち「現実の」アプリケーショントレースから)収集されたデータのセット)を分析することによって決定された値で事前に移入される。
いくつかの実施形態では、共通パターンルックアップテーブル426は、観測されたデルタトリプレット値の頻度を追跡することによって、インデックスストリームの圧縮の間に移入される。いくつかの実施形態では、ルックアップテーブルが一杯になった後(例えば、14個のデルタトリプレット又はパターンが14個のエントリを有する共通パターンルックアップテーブルに記憶された後)、異なるデルタトリプレット値又はパターンが、共通パターンルックアップテーブルハードウェア及び/又はソフトウェアによって観察され、より高い頻度でデルタストリームにおいて発生する場合、最も頻度の低いデルタトリプレット値又はパターンが共通パターンルックアップテーブルから追い出される。
図5は、例示的なインデックストリプレットのデルタ値の全てが共通パターンルックアップテーブル内のエントリの特定のデルタ値に一致する例示的な場合について、例示的なインデックスストリームの例示的なトリプレットベースのデルタ圧縮を示すフロー図500である。
より詳細には、フロー図500は、2つのインデックストリプレット502、504に分割された6つのインデックスを含むインデックスストリームを示している。インデックストリプレット502は、インデックス506、508、510を含む。インデックス510は、この例では、999の値を有する。インデックス506及び508の値は、この例示的な圧縮では使用されず、図では単に「D」として示されている。インデックストリプレット504は、それぞれ1000、1001、1002の値を有するインデックス512、514、516を含む。
この例では、インデックストリプレット504を圧縮するために、インデックス512、514、516にそれぞれ対応する3つのデルタ値518、520、522が、インデックス512、514、516の値に基づいて計算される。例えば、デルタ値518は、(インデックス512)-(インデックス510)として決定される、すなわち、(1000)-(999)=1である。デルタ値520は、(インデックス514)-(インデックス512)として計算される、すなわち、(1001)-(1000)=1である。デルタ値522は、(インデックス516)-(インデックス512)として計算される、すなわち、(1002)-(1000)=2である。3つのデルタ値518、520、522は、便宜上、デルタトリプレット524と呼ばれる。
デルタトリプレット524の値が決定された後、デルタトリプレット524が圧縮される。デルタトリプレットを圧縮するために、3つのデルタ値518、520、522が、共通パターンルックアップテーブル526内の値と比較される。共通パターンルックアップテーブル426は、グラフィックスハードウェア内の専用レジスタ等の任意の好適な方法で実装され、任意の好適なサイズとすることができる。この例では、共通パターンルックアップテーブル526は、15パターンのデルタ値を記憶する。表1は、例示的な共通パターンルックアップテーブル526に記憶された15パターンのデルタ値と、各エントリの対応するパターンIDと、を示している。
この例では、デルタ値518、520、522は、その順序で、パターンID3(バイナリ0011)に対応する共通パターンルックアップテーブル526内のパターンと一致する。この場合には、インデックストリプレット504は、3(b0011)の値を有するパターンID530に基づいて、圧縮された表現528に圧縮される。この例では、デルタ値518、520、522の各々がパターンIDによって取り込まれるため、「不一致の」デルタが存在せず、そのため、圧縮された表現528を生成するために符号化デルタ値532が使用されない。この例では、インデックス値の間の局所性は、可変長符号化を必要とせずに圧縮を有利に容易にする。
図6は、例示的なインデックストリプレットのデルタ値のサブセットが共通パターンルックアップテーブル内のエントリの特定のデルタ値に一致する一方で、他のデルタ値がエントリの「ドントケア」値に一致する例示的な場合について、例示的なインデックスストリームの例示的なトリプレットベースのデルタ圧縮を示すフロー図600である。
より詳細には、フロー図600は、2つのインデックストリプレット602、604に分割された6つのインデックスを含むインデックスストリームを示している。インデックストリプレット602は、インデックス606、608、610を含む。インデックス610は、この例では、0の値を有する。インデックス606及び608の値は、この例示的な圧縮では使用されず、図では単に「D」として示されている。インデックストリプレット604は、それぞれ1000、1001、1002の値を有するインデックス612、614、616を含む。
この例では、インデックストリプレット604を圧縮するために、インデックス612、614、616にそれぞれ対応する3つのデルタ値618、620、622が、インデックス612、614、616の値に基づいて計算される。例えば、デルタ値618は、(インデックス612)-(インデックス610)として決定される、すなわち、(1000)-(0)=1000である。デルタ値620は、(インデックス614)-(インデックス612)として計算される、すなわち、(1001)-(1000)=1である。デルタ値622は、(インデックス616)-(インデックス612)として計算される、すなわち、(1002)-(1000)=2である。3つのデルタ値618、620、622は、便宜上、デルタトリプレット624と呼ばれる。
デルタトリプレット624の値が決定された後、デルタトリプレット624が圧縮される。デルタトリプレットを圧縮するために、3つのデルタ値618、620、622が、共通パターンルックアップテーブル626内の値と比較される。共通パターンルックアップテーブル626は、グラフィックスハードウェア内の専用レジスタ等の任意の好適な方法で実装され、任意の好適なサイズとすることができる。この例では、共通パターンルックアップテーブル626は、15パターンのデルタ値を記憶する。表1は、例示的な共通パターンルックアップテーブル626に記憶された15パターンのデルタ値と、各エントリの対応するパターンIDと、を示している。
この例では、デルタ値618、620、622は、その順序で、パターンID4(バイナリ0100)に対応する共通パターンルックアップテーブル626内のパターンと一致する。この場合、インデックストリプレット604は、4(b0100)の値を有するパターンID630に基づいて、圧縮された表現628に圧縮される。この例では、特定のデルタ値のうち2つ620、622がパターンIDによって取り込まれるが、デルタ値618は、任意のデルタ値に一致する「ドントケア」エントリによって表される。そのため、デルタ値618の値(1000、又は符号ビットを含むb01111101000)が「不一致」であり、そのため、これらのビットは、例えば、可変長符号化を使用して符号化データ値632として符号化される。パターンID630と符号化されたデータ値632との組み合わせが、圧縮された表現628を生成するために使用される。この例では、インデックス値のうちいくつかの間の局所性は、有利には、デルタ値の全ての可変長符号化を必要とせずに圧縮を容易にするが、いくつかの符号化は、インデックス610とインデックス612との間の値における大きな差に起因して圧縮を補う。
図7は、例示的なインデックストリプレットのデルタ値の何れも共通パターンルックアップテーブル内のエントリの特定のデルタ値と一致しないが、むしろ、3つの「ドントケア」値を有するエントリと一致する例示的な場合について、例示的なインデックスストリームの例示的なトリプレットベースのデルタ圧縮を示すフロー図700である。
より詳細には、フロー図700は、2つのインデックストリプレット702、704に分割された6つのインデックスを含むインデックスストリームを示している。インデックストリプレット702は、インデックス706、708、710を含む。インデックス710は、この例では、0の値を有する。インデックス706及び708の値は、この例示的な圧縮では使用されず、図では単に「D」として示されている。インデックストリプレット704は、それぞれ1000、2000、2001の値を有するインデックス712、714、716を含む。
この例では、インデックストリプレット704を圧縮するために、インデックス712、714、716にそれぞれ対応する3つのデルタ値718、720、722が、インデックス712、714、716の値に基づいて計算される。例えば、デルタ値718は、(インデックス712)-(インデックス710)として決定される、すなわち、(1000)-(0)=1000である。デルタ値720は、(インデックス714)-(インデックス712)として計算される、すなわち、(2000)-(1000)=1000である。デルタ値722は、(インデックス716)-(インデックス712)として計算される、すなわち、(2001)-(1000)=1001である。3つのデルタ値718、720、722は、便宜上、デルタトリプレット724と呼ばれる。
デルタトリプレット724の値が決定された後、デルタトリプレット724が圧縮される。デルタトリプレットを圧縮するために、3つのデルタ値718、720、722が、共通パターンルックアップテーブル726内の値と比較される。共通パターンルックアップテーブル726は、グラフィックスハードウェア内の専用レジスタ等の任意の好適な方法で実装され、任意の好適なサイズとすることができる。この例では、共通パターンルックアップテーブル726は、15パターンのデルタ値を記憶する。表1は、例示的な共通パターンルックアップテーブル726に記憶された15パターンのデルタ値と、各エントリの対応するパターンIDと、を示している。
この例では、デルタ値718、720、722は、その順序で、パターンID14(バイナリ1110)に対応する共通パターンルックアップテーブル726内のパターンと一致する。この場合、インデックストリプレット704は、14(b1110)の値を有するパターンID730に基づいて、圧縮された表現728に圧縮される。この例では、特定のデルタ値718、720、722の何れもパターンIDによって取り込まれないが、デルタ値718、720、722の全ては、任意のデルタ値に一致する「ドントケア」エントリによって表される。そのため、デルタ値718、720、722(1000、2000、2001)の値が全て「不一致」であり、そのため、例えば、可変長符号化を使用して、その全てが符号化データ値732として符号化される。パターンID730と符号化されたデータ値732との組み合わせが、圧縮された表現728を生成するために使用される。この例では、インデックス値のいくつかの間の局所性の相対的な欠如により、デルタ値の全ての可変長符号化が必要とされる。
図8は、例示的なインデックスストリームを圧縮するための例示的なプロセス800を示すフローチャートである。
ステップ802において、インデックストリプレットは、プリミティブインデックスストリームから符号化ハードウェア(例えば、図3に関して図示及び記載されるようなラスタライザ段階314の一部)に入力される。ステップ804において、インデックストリプレットに基づいて、デルタ値トリプレットが計算される。インデックストリプレットのデルタ値が全て共通パターンルックアップテーブルのエントリの特定の値に一致するという条件806で、インデックストリプレットは、ステップ808において、共通パターンルックアップテーブル内のエントリ(例えば、それのインデックス値)に対応するパターンIDに基づいて圧縮される。
インデックストリプレットのデルタ値の何れも共通パターンルックアップテーブルのエントリの特定の値に一致しないという条件806で、インデックストリプレットは、ステップ810において、デルタ値の符号化(例えば、可変長符号化)に基づいて圧縮される。いくつかの実施形態では、インデックストリプレットは、この符号化と、各デルタ値が「ドントケア」値である(すなわち、任意のデルタ値に一致する)共通パターンルックアップテーブル内のエントリに対応するパターンID(例えば、インデックス値)と、に基づいて圧縮される。
インデックストリプレットのデルタ値のサブセット(例えば、1つ又は2つ)が共通パターンルックアップテーブルのエントリの特定の値に一致し、残りが一致しないという条件806で、インデックストリプレットは、ステップ812において、1つ以上の不一致デルタ値の符号化(例えば、可変長符号化)と、特定のデルタ及び「ドントケア」値と一致する共通パターンルックアップテーブル内のエントリに対応するパターンID(例えば、インデックス値)と、の組み合わせに基づいて圧縮される。インデックスストリームが圧縮のための更なるインデックストリプレットを有するという条件814で、フローはステップ802に戻る。そうでない場合、プロセスは終了する。
(圧縮解除)
圧縮に関して上記説明した技術は、圧縮解除に適用可能である。例えば、各トリプレット(又は非三角形プリミティブの場合には、プリミティブ情報の他のグループ)の圧縮された表現は、パターンIDを含むか又はパターンIDに基づいている。いくつかの実施形態では、デコーダは、トリプレットがどのように圧縮されるかを決定するためにパターンIDを復号する。パターンIDに応じて、トリプレットは、パターンIDによって示されるように、パターンID及び前のインデックスに基づいて、パターンID、前のインデックス及びいくつかの可変長符号化されたデルタ値に基づいて、又は、前のインデックス及び可変長符号化されたデルタ値に完全に基づいて圧縮される。
圧縮に関して上記説明した技術は、圧縮解除に適用可能である。例えば、各トリプレット(又は非三角形プリミティブの場合には、プリミティブ情報の他のグループ)の圧縮された表現は、パターンIDを含むか又はパターンIDに基づいている。いくつかの実施形態では、デコーダは、トリプレットがどのように圧縮されるかを決定するためにパターンIDを復号する。パターンIDに応じて、トリプレットは、パターンIDによって示されるように、パターンID及び前のインデックスに基づいて、パターンID、前のインデックス及びいくつかの可変長符号化されたデルタ値に基づいて、又は、前のインデックス及び可変長符号化されたデルタ値に完全に基づいて圧縮される。
図9は、例えば、上記の技術に従って圧縮された、例示的な圧縮されたインデックスストリームを圧縮解除するための例示的なプロセス900を示すフローチャートである。
ステップ902において、圧縮されたインデックストリプレットが、プリミティブの圧縮されたストリームから復号化ハードウェア(例えば、図3に関して図示及び記載されたアセンブラ段階302の一部)に入力される。ステップ904において、圧縮されたインデックストリプレットからパターンIDが抽出され(例えば、構文解析され)、復号される。復号されたパターンIDが、インデックストリプレットのデルタ値の全てが、パターンIDに対応する共通パターンルックアップテーブルのエントリの特定の値に一致することを示すという条件906で、インデックストリプレットは、ステップ908において、ストリーム内の前のトリプレットインデックスに基づいて、パターンIDに対応する共通パターンルックアップテーブル内のデルタ値を復号することによって圧縮解除される。ストリーム内の第1のトリプレット等のある特定の場合には、前のトリプレットインデックスの値は、いくつかの実施形態では0又は異なる好適な値に設定される。
復号パターンIDが、インデックストリプレットのデルタ値がパターンIDに対応する共通パターンルックアップテーブルのエントリの特定の値に一致しないことを示すという条件906で、圧縮されたインデックストリプレットのデルタ値の全ては、ステップ908において、圧縮されたインデックストリプレット内の符号化された(例えば、可変長符号化された)デルタ値に基づいて圧縮解除される。
復号されたパターンIDが、デルタトリプレットのデルタ値のサブセット(例えば、1つ又は2つ)がパターンIDに対応する共通パターンルックアップテーブルのエントリの特定の値に一致するが、残りは一致しないことを示すという条件906で、インデックストリプレットは、ステップ912において、不一致デルタ値を復号すること(例えば、可変長復号化)と、ストリーム内の前のトリプレットインデックスに基づくパターンIDに対応する共通パターンルックアップテーブル内の一致デルタ値を復号することと、の組み合わせに基づいて圧縮解除される。インデックスストリームが圧縮のためのインデックストリプレットを更に有するという条件914で、フローはステップ902に戻る。そうでない場合、プロセスは終了する。
頂点のインデックス値以外のプリミティブに関する情報は、いくつかの実施形態では、本明細書で説明する技術に従って圧縮可能であることに留意されたい。
例えば、いくつかの実施形態では、各プリミティブは、圧縮可能なインスタンス識別子(ID)と関連付けられる。インスタンス化は、同じメッシュが単一のAPI呼び出しで複数回レンダリングされることを可能にする3DグラフィックスAPIにおける特徴である。メッシュの各インスタンスは、インスタンスID(各インスタンスに対して1ずつ増分する)を有し、このIDは、例えば、同じメッシュの各インスタンスに対して異なる変換行列又はアニメーションフレームを選択するために使用される。いくつかの場合には、そのようなインスタンス化は、複数回繰り返される同じオブジェクト(すなわち、複数のインスタンス)を含むシーンをレンダリングするために使用される。一例では、大勢の群衆の中の人々のインスタンス、森林の中の木のインスタンス等を含み、いくつかの場合には、オブジェクト間のある変動を含む。各インスタンスは、典型的には、異なる変換を用いてレンダリングされるため、プリミティブ可視性は、インスタンスごとに異なることがある。そのため、各インスタンスの可視性データは、各インスタンスのソースインデックスデータが同じであっても、いくつかの実施形態では別に記憶される。これにより、いくつかの実施形態では、インスタンスID変更は、可視性データに埋め込まれる。いくつかの実施形態では、これは、例えば、各インスタンス化された描画呼び出し(ドローコール)を複数の描画に分割することなく、元のインスタンスIDの直接的な再構築を容易にするという利点を有する。インスタンスID変更は、典型的には、各プリミティブに対して発生しない(すなわち、典型的には、あらゆるプリミティブよりもスパースである)が、いくつかの場合には、インスタンス化されたレンダリングが使用され、各レンダリングされたインスタンスは、非常に単純な幾何学形状(例えば、粒子システムに対して、1つ又は2つだけのプリミティブ)を含む。いくつかのインスタンスは完全に不可視であり得るため、連続するインスタンス間の記憶されたインスタンスIDデルタは、常に1であるとは限らない(すなわち、より大きい量だけ前方にジャンプすることができる)。
図7を参照すると、インデックストリプレット702は、第1のプリミティブの頂点を指し、インデックストリプレット704は、第2のプリミティブの頂点を指す。いくつかの実施形態では、第1のプリミティブ及び第2のプリミティブの各々は、インスタンスIDと関連付けられる。上記説明した頂点インデックスと同様に、インスタンスIDは、いくつかの場合には、実質的な時間局所性を示す。例えば、第1のプリミティブと関連付けられたインスタンスIDは、100000の値を有する場合があり、第2のプリミティブと関連付けられたインスタンスIDは、100001の値を有する場合がある。これらのインスタンスIDの各々は、表現するために複数のバイナリビットを必要とし得るが、これらの特定の例示的な値の間の差は、単一のビットのみを使用して表現可能である(すなわち、この場合、差は1又はb1である)。そのため、インスタンスIDは、インスタンスID値のデルタに基づいて、圧縮された表現(図7の例を使用すると圧縮された表現728)で圧縮される。
いくつかの実施形態では、第1のプリミティブのインスタンスIDと第2のプリミティブのインスタンスIDとの間のデルタは、任意の不一致デルタとともに符号化される(例えば、図7の可変長符号化において、デルタ値718、720、722とともに符号化される)。いくつかの実施形態では、不一致デルタ(又は可変長符号化のための他の情報)がない場合、インスタンスIDデルタのみが符号化デルタ値732として符号化される。
いくつかの実施形態では、共通パターンルックアップテーブルは、インスタンスIDデルタを収容するように構成されている。例えば、いくつかの実施形態では、共通パターンルックアップテーブル(例えば、図7の例における共通パターンルックアップテーブル726)は、インスタンスIDデルタ及び頂点インデックスデルタの組み合わされたパターンに一致する第4のインデックスを含む。そのような場合、インスタンスIDは、任意の一致した頂点インデックスデルタとともにパターンID(例えば、図7の例におけるパターンID730)によって圧縮された表現(例えば、図7の例における圧縮された表現728)に圧縮される。
インスタンスIDを越えて、この技術は、プリミティブID等のプリミティブと関連付けられた任意の1つ以上の情報アイテムに拡張可能であることに留意されたい。プリミティブIDは、いくつかの実施形態では、各プリミティブを個々に識別する。いくつかの実施形態では、プリミティブIDは、メッシュ内のプリミティブを(例えば、「通し番号(running number)」として)識別する。例えば、いくつかの実施形態では、プリミティブIDは、メッシュの開始時に0から開始し、プリミティブごとに1だけ増分する。可視性ストリームはプリミティブのうちいくつかのみを含むため、プリミティブIDは、データが圧縮及び圧縮解除された後に連続的に増分する値ではなく、プリミティブ間のいくつかの値にわたって前方にジャンプし得る。いくつかの実施形態では、これは、元のプリミティブIDを使用してデータを再生することができるように、圧縮されたインデックスストリーム内に取り込まれる。いくつかの実施形態では、そのようなアイテムは、時間局所性の閾値度を有する整数値等の整数値を含み、ストリーム内で互いに隣接するプリミティブと関連付けられた数は、閾値内等のように値が近い。
いくつかの実施形態では、ベースプリミティブとは異なる数の頂点を有するストリーム内のプリミティブも、本明細書で説明する技術に従って圧縮可能であることに留意されたい。
例えば、本明細書の例は、3つの頂点、そのため、3つの頂点インデックスを有する三角形プリミティブに関して提示されている。しかしながら、いくつかの実施形態は、異なる数の頂点インデックスに関して定義されるインデックスストリーム内のプリミティブにも対応することに留意されたい。例えば、いくつかの実施形態では、三角形ストリーム内のプリミティブは、1つ又は2つの頂点インデックスのみを含むか(例えば、点プリミティブ及び線プリミティブ)、又は、4つ以上の頂点インデックス(例えば、長方形プリミティブ等)を含む。
パッチプリミティブは、3つより多いインデックスを有するプリミティブの例示的な使用例である。長方形は、典型的には、2D動作に使用され、いくつかの実施形態では、3つの頂点を用いて定義され、第4の頂点は、他の頂点から計算される。パッチプリミティブは、任意の数のソース頂点(例えば、APIに応じて、プリミティブ当たり最大32個の頂点)を含む。パッチプリミティブは、典型的には、ジオメトリ処理パイプラインにおいて三角形にテッセレーションされるが、元のインデックスは、例えば、インデックスデータを記憶するために使用される。
いくつかの実施形態では、この状況は、共通パターンルックアップテーブルによって1つ以上の「特別な」パターンID(例えば、1つの頂点インデックス、2つの頂点インデックス又は4つの頂点インデックス等を示す特定のパターンID)に一致し、インデックス頂点のデルタ値は、不一致デルタに関して上記説明した場合のように、可変長符号化を使用して、圧縮された表現に圧縮される。いくつかの実施形態では、共通パターンLUTは、2つ以上のプリミティブサイズのパターン圧縮に適応するように構成されている。いくつかのそのような例では、2つ以上のタイプのプリミティブ(すなわち、異なる数の頂点インデックスを有するプリミティブ)の頂点インデックスは、対応するパターンID(及び、例えば、不一致デルタがある場合、可変長符号化)に基づいて、圧縮された表現に圧縮可能である。
いくつかの実施形態では、異なる数の頂点を有するプリミティブが組み合わされて、トリプレット(又は他の基数の頂点)が形成される。例えば、いくつかの実施形態では、点プリミティブからの1つの頂点インデックスが、線プリミティブの2つの頂点インデックスと組み合わされてトリプレットを形成し、トリプレットは、三角形プリミティブのトリプレットのデルタ圧縮に関して上記説明したように圧縮される。
典型的には、点プリミティブ及び線プリミティブをトリプレットに組み合わせる必要はない。各描画呼び出しは、単一タイプのプリミティブのみを使用し、そのため、典型的には、単一タイプの長いシーケンスが存在する。しかしながら、これは、例えば、いくつかの可視プリミティブのみがそのようなシーケンスから可視であり、その後に、異なるタイプを有する別のシーケンスからのいくつかの可視プリミティブのみが続く場合に実装することができる。
いくつかの実施形態は、トリプレットを使用する代わりに、各プリミティブを個別の「特別な場合の」プリミティブ(1つ又は2つのみのインデックス値を有する)として記憶することによって、又は、数個の連続トリプレットを形成することによって点プリミティブ及び線プリミティブを圧縮し、ここで、各トリプレットは、3つの点からなる(点プリミティブの場合)か、又は、各2つのトリプレットは、2つの線からなる(線プリミティブの場合)。いくつかのそのような場合では、描画呼び出しの総インデックスカウントとの整合のために、単独の1インデックス又は2インデックスの「特別な場合の」データエントリが(例えば、データの最後に)使用される。
いくつかの実施形態では、複数のストリームが同時に圧縮及び/又は圧縮解除される。例えば、同じプリミティブストリームが異なる目的のために(例えば、異なるビンのために)同時に圧縮される場合、各トリプレット内のデルタ計算(例えば、図7の例におけるデルタ720、722)は、いくつかの実施形態では同じになる。そのため、そのような場合には、以前に記憶されたインデックスからのデルタ(例えば、図7の例ではインデックス710から計算されたデルタ718)のみが、各追加ストリームについて計算される。いくつかの実施形態では、以前に記憶されたインデックスに対するデルタは、ストリームごとに異なるが、トリプレットは、ストリームごとに同じである。いくつかの実施形態では、各三角形はトリプレットによって表され、記憶された第1のデルタは、最後に記憶された三角形の最後の頂点からの差である。各ビンは異なる三角形のセットを収納し得るため、最後に記憶されたプリミティブに対するデルタは、ビンごとに異なる。しかしながら、三角形内のデルタ(インデックス0とインデックス1との間のデルタ、及び、インデックス0とインデックス2との間のデルタ)は、全てのビンについて同じである。
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
図において示され及び/又は本明細書に記載される様々な機能ユニット(プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、加速処理デバイス116、スケジューラ136、グラフィックス処理パイプライン134、計算ユニット132、SIMDユニット138を含むが、これらに限定されない)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、汎用コンピュータ、プロセッサ若しくはプロセッサコアによって実行可能な非一時的なコンピュータ可読記憶媒体若しくは別の媒体に記憶されているプログラム、ソフトウェア若しくはファームウェアとして実装され得る。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態機械が挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリスト等の他の中間データ(そのような命令は、コンピュータ可読媒体に記憶させることが可能である)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、磁気媒体(例えば、内蔵ハードディスク及びリムーバブルディスク)、磁気光学媒体、並びに、光学媒体(例えば、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD))が挙げられる。
Claims (20)
- グラフィックスプリミティブと関連付けられたインデックスストリームを圧縮するための方法であって、
前記インデックスストリームのインデックスグループに基づいて、デルタ値グループを決定することと、
前記デルタ値グループをルックアップテーブル内のデルタ値と比較することと、
前記デルタ値グループが、前記ルックアップテーブル内のエントリの全てのデルタ値と一致する場合に、前記エントリに基づいて前記インデックスグループを圧縮し、そうでない場合に、可変長符号化に基づいて前記インデックスグループを圧縮することと、を含む、
方法。 - 前記デルタ値グループが、前記ルックアップテーブル内のエントリのデルタ値と一致する少なくとも1つの値を含み、前記エントリの何れのデルタ値にも一致しない少なくとも1つの値を含み、前記エントリの何れのデルタ値にも一致しない少なくとも1つの値が、前記エントリのドントケア値に対応する場合に、前記エントリに基づいて、及び、前記エントリの何れのデルタ値にも一致しない少なくとも1つの値の可変長符号化に基づいて、前記インデックスグループを圧縮することを更に含む、
請求項1の方法。 - 前記デルタ値グループが、前記ルックアップテーブル内のエントリのデルタ値と一致する少なくとも1つの値を含まない場合に、ドントケア値のみを含む前記ルックアップテーブル内のエントリに基づいて、及び、前記デルタ値の各々の可変長符号化に基づいて、前記インデックスグループを圧縮することを更に含む、
請求項1の方法。 - 前記インデックスグループはトリプレットであり、前記グラフィックスプリミティブは三角形である、
請求項1の方法。 - 前記インデックスストリームは、メッシュの頂点をインデックス付けする、
請求項1の方法。 - グラフィックスプリミティブと関連付けられた、圧縮されたインデックスストリームを圧縮解除するための方法であって、
前記圧縮されたインデックスストリームの圧縮されたインデックスグループを、ルックアップテーブルのエントリと比較することと、
前記圧縮されたインデックスグループが、前記圧縮されたインデックスグループの各々に対応するデルタ値を含むルックアップテーブルエントリと一致する場合に、前記デルタ値に基づいて前記圧縮されたインデックスグループを圧縮解除し、そうでない場合に、可変長復号化に基づいて前記圧縮されたインデックスグループを圧縮解除することと、を含む、
方法。 - 前記圧縮されたインデックスグループが、前記圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのデルタ値を含み、及び、前記圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのドントケア値を含むルックアップテーブルエントリと一致する場合に、前記少なくとも1つのデルタ値に基づいて、及び、前記少なくとも1つのドントケア値に対応するデルタ値の可変長復号化に基づいて、前記圧縮されたインデックスグループを圧縮解除することを更に含む、
請求項6の方法。 - 前記圧縮されたインデックスグループが、ドントケア値のみを含むルックアップテーブルエントリと一致する場合に、前記圧縮されたインデックスグループの各々に対応するデルタ値の可変長復号化に基づいて、前記圧縮されたインデックスグループを圧縮解除することを更に含む、
請求項6の方法。 - 前記圧縮されたインデックスグループはトリプレットであり、前記グラフィックスプリミティブは三角形である、
請求項6の方法。 - 前記圧縮されたインデックスストリームは、メッシュの頂点をインデックス付けする、
請求項6の方法。 - グラフィックスプリミティブと関連付けられたインデックスストリームを圧縮するように構成された圧縮器であって、
前記インデックスストリームのインデックスグループに基づいて、デルタ値グループを決定するように構成された回路と、
前記デルタ値グループをルックアップテーブル内のデルタ値と比較するように構成された回路と、
前記デルタ値グループが、前記ルックアップテーブル内のエントリの全てのデルタ値と一致する場合に、前記エントリに基づいて前記インデックスグループを圧縮し、そうでない場合に、可変長符号化に基づいて前記インデックスグループを圧縮するように構成された回路と、を備える、
圧縮器。 - 前記デルタ値グループが、前記ルックアップテーブル内のエントリのデルタ値と一致する少なくとも1つの値を含み、前記エントリの何れのデルタ値にも一致しない少なくとも1つの値を含み、前記エントリの何れのデルタ値にも一致しない少なくとも1つの値が、前記エントリのドントケア値に対応する場合に、前記エントリに基づいて、及び、前記エントリの何れのデルタ値にも一致しない少なくとも1つの値の可変長符号化に基づいて、前記インデックスグループを圧縮するように構成された回路を更に備える、
請求項11の圧縮器。 - 前記デルタ値グループが、前記ルックアップテーブル内のエントリのデルタ値と一致する少なくとも1つの値を含まない場合に、ドントケア値のみを含む前記ルックアップテーブル内のエントリに基づいて、及び、前記デルタ値の各々の可変長符号化に基づいて、前記インデックスグループを圧縮するように構成された回路を更に備える、
請求項11の圧縮器。 - 前記インデックスグループはトリプレットであり、前記グラフィックスプリミティブは三角形である、
請求項11の圧縮器。 - 前記インデックスストリームは、メッシュの頂点をインデックス付けする、
請求項11の圧縮器。 - グラフィックスプリミティブと関連付けられた、圧縮されたインデックスストリームを圧縮解除するように構成された圧縮解除器であって、
前記圧縮されたインデックスストリームの圧縮されたインデックスグループを、ルックアップテーブルのエントリと比較するように構成された回路と、
前記圧縮されたインデックスグループが、前記圧縮されたインデックスグループの各々に対応するデルタ値を含むルックアップテーブルエントリと一致する場合に、前記デルタ値に基づいて前記圧縮されたインデックスグループを圧縮解除し、そうでない場合に、可変長復号化に基づいて前記圧縮されたインデックスグループを圧縮解除するように構成された回路と、を備える、
圧縮解除器。 - 前記圧縮されたインデックスグループが、前記圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのデルタ値を含み、及び、前記圧縮されたインデックスグループのうち少なくとも1つに対応する少なくとも1つのドントケア値を含む、ルックアップテーブルエントリと一致する場合に、前記少なくとも1つのデルタ値に基づいて、及び、前記少なくとも1つのドントケア値に対応するデルタ値の可変長復号化に基づいて、前記圧縮されたインデックスグループを圧縮解除するように構成された回路を更に備える、
請求項16の圧縮解除器。 - 前記圧縮されたインデックスグループが、ドントケア値のみを含むルックアップテーブルエントリと一致する場合に、前記圧縮されたインデックスグループの各々に対応するデルタ値の可変長復号化に基づいて、前記圧縮されたインデックスグループを圧縮解除するように構成された回路を更に備える、
請求項16の圧縮解除器。 - 前記圧縮されたインデックスグループはトリプレットであり、前記グラフィックスプリミティブは三角形である、
請求項16の圧縮解除器。 - 前記圧縮されたインデックスストリームは、メッシュの頂点をインデックス付けする、
請求項16の圧縮解除器。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063042384P | 2020-06-22 | 2020-06-22 | |
US63/042,384 | 2020-06-22 | ||
US17/187,625 | 2021-02-26 | ||
US17/187,625 US12014527B2 (en) | 2020-06-22 | 2021-02-26 | Delta triplet index compression |
PCT/US2021/035296 WO2021262402A1 (en) | 2020-06-22 | 2021-06-01 | Delta triplet index compression |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023530306A true JP2023530306A (ja) | 2023-07-14 |
Family
ID=79023799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022577276A Pending JP2023530306A (ja) | 2020-06-22 | 2021-06-01 | デルタトリプレットインデックス圧縮 |
Country Status (6)
Country | Link |
---|---|
US (1) | US12014527B2 (ja) |
EP (1) | EP4168975A4 (ja) |
JP (1) | JP2023530306A (ja) |
KR (1) | KR20230027098A (ja) |
CN (1) | CN115836317A (ja) |
WO (1) | WO2021262402A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117097442B (zh) * | 2023-10-19 | 2024-01-16 | 深圳大普微电子股份有限公司 | 一种数据解码方法、系统、设备及计算机可读存储介质 |
CN117097346B (zh) * | 2023-10-19 | 2024-03-19 | 深圳大普微电子股份有限公司 | 一种解压器及数据解压方法、系统、设备、计算机介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5793371A (en) | 1995-08-04 | 1998-08-11 | Sun Microsystems, Inc. | Method and apparatus for geometric compression of three-dimensional graphics data |
GB2387094B (en) * | 2002-03-26 | 2005-12-07 | Imagination Tech Ltd | 3-D Computer graphics rendering system |
ATE382166T1 (de) | 2003-10-11 | 2008-01-15 | Spans Logic Inc | Speicher und stromeffizienter mechanismus für schnelles tabellennachschlagen |
US8493381B1 (en) | 2008-04-14 | 2013-07-23 | Google Inc. | Methods and systems for geometry compression |
GB2507838B (en) | 2013-05-09 | 2014-09-24 | Imagination Tech Ltd | Vertex parameter data compression |
US10460418B2 (en) | 2017-02-10 | 2019-10-29 | Microsoft Technology Licensing, Llc | Buffer index format and compression |
-
2021
- 2021-02-26 US US17/187,625 patent/US12014527B2/en active Active
- 2021-06-01 JP JP2022577276A patent/JP2023530306A/ja active Pending
- 2021-06-01 KR KR1020227046295A patent/KR20230027098A/ko active Search and Examination
- 2021-06-01 WO PCT/US2021/035296 patent/WO2021262402A1/en active Application Filing
- 2021-06-01 EP EP21828533.6A patent/EP4168975A4/en active Pending
- 2021-06-01 CN CN202180043937.5A patent/CN115836317A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN115836317A (zh) | 2023-03-21 |
EP4168975A4 (en) | 2024-04-17 |
KR20230027098A (ko) | 2023-02-27 |
US12014527B2 (en) | 2024-06-18 |
US20210398325A1 (en) | 2021-12-23 |
WO2021262402A1 (en) | 2021-12-30 |
EP4168975A1 (en) | 2023-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10991127B2 (en) | Index buffer block compression | |
US9330475B2 (en) | Color buffer and depth buffer compression | |
CN105374005A (zh) | 数据处理系统 | |
EP3580726B1 (en) | Buffer index format and compression | |
US20200167076A1 (en) | Compressed memory access improvement through compression-aware partial writes | |
JP2023530306A (ja) | デルタトリプレットインデックス圧縮 | |
EP3427229B1 (en) | Visibility information modification | |
US11978234B2 (en) | Method and apparatus of data compression | |
US20230186523A1 (en) | Method and system for integrating compression | |
US20220414939A1 (en) | Render target compression scheme compatible with variable rate shading | |
US11972518B2 (en) | Hybrid binning | |
US20220036629A1 (en) | Overlapping visibility and render passes for same frame | |
US20230377086A1 (en) | Pipeline delay elimination with parallel two level primitive batch binning | |
US11880924B2 (en) | Synchronization free cross pass binning through subpass interleaving | |
US20240087078A1 (en) | Two-level primitive batch binning with hardware state compression | |
US20240169641A1 (en) | Vertex index routing through culling shader for two level primitive batch binning | |
US20240257435A1 (en) | Hybrid binning | |
US20230377178A1 (en) | Potentially occluded rasterization | |
US20210398349A1 (en) | Fine grained replay control in binning hardware | |
WO2022211966A1 (en) | Post-depth visibility collection with two level binning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240521 |