(57)【要約】計算ユニット（１１１〜１１４）は、グラフィックスプリミティブの頂点のインデックスを表すビットのチャンク（３１０）にアクセスする。計算ユニットは、チャンクが単調であるか通常であるかを示す第１ビット（４２０）の値と、チャンク内のインデックスの値に基づいて決定されるオフセットを定義する第２ビット（４２５）の値と、第２ビットによって定義されたオフセットに基づいてチャンク内のインデックスの値を決定する第３ビットのセット（４３０）の値と、を設定する。計算ユニットは、第１ビットと、第２ビットと、第３ビットのセットと、によって表される圧縮チャンク（３１５）をメモリ（１１５）に書き込む。圧縮チャンクは、インデックスの値とインデックスの特性を示すビットフィールドとに基づいて決定されるオフセットを含むメタデータ（６０５）に基づいて復元され、復元されたインデックスがインデックスバッファ（２０６）に書き込まれる。【選択図】図３
2021501938.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックスパイプラインによって処理されるプリミティブの複数の頂点のインデックスを表すビットのチャンクにアクセスすることと、
前記チャンクが単調であるか通常であるかを示す第１ビットの値を設定することと、
前記チャンク内のインデックスの値に基づいて決定されるオフセットを定義する第２ビットの値を設定することと、
前記第２ビットによって定義された前記オフセットに基づいて、前記チャンク内の前記インデックスの値を決定する第３ビットのセットの値を設定することと、
前記第１ビットと、前記第２ビットと、前記第３ビットのセットと、によって表される圧縮チャンクをメモリに書き込むことと、
を行うように構成された計算ユニットを備える、
装置。
【請求項２】
前記計算ユニットは、
インデックスバッファに記憶された前記圧縮チャンクの先頭アドレスを表すメタデータを生成することと、
前記メタデータを前記メモリに書き込むことと、
を行うように構成されている、
請求項１の装置。
【請求項３】
前記チャンクは、隣接する三角形によって共有されない頂点のインデックスを前記チャンクの前記ビットに追加することによって、連続して隣接するプリミティブを表す単調チャンクであり、前記計算ユニットは、前記第１ビットの値を、前記チャンクが単調であることを示す第１値に設定することを行うように構成されている、
請求項２の装置。
【請求項４】
前記計算ユニットは、前記第２ビットの値を、次のプリミティブがリスタートインデックスの前のインデックスによって表される前のプリミティブに隣接していないことを示す前記リスタートインデックスではない、前記チャンク内の第１インデックスの値に等しいオフセット値に設定することを行うように構成されている、
請求項３の装置。
【請求項５】
前記計算ユニットは、前記チャンク内のリスタートインデックスの数を示す前記第３ビットの第１セットの値を設定することと、前記チャンク内の少なくとも１つのリスタートインデックスの少なくとも１つの位置を示す第３ビットの少なくとも１つの他のセットを設定することと、を行うように構成されている、
請求項４の装置。
【請求項６】
前記計算ユニットは、前記チャンク内のリスタートインデックスの位置を示すビットフィールドを含むメタデータを生成することと、前記第１ビットと、前記第２ビットと、前記ビットフィールドと、を含む前記メタデータを前記メモリに書き込むことと、を行うように構成されている、
請求項４の装置。
【請求項７】
前記チャンクは、前記プリミティブの全ての頂点のインデックスを使用してプリミティブを表す通常チャンクであり、前記計算ユニットは、前記チャンクが通常であることを示すために、前記第１ビットの値を第２値に設定することを行うように構成されている、
請求項２の装置。
【請求項８】
前記計算ユニットは、前記第２ビットの値を、前記チャンク内の前記インデックスの最小値に等しいオフセット値に設定することを行うように構成されている、
請求項７の装置。
【請求項９】
前記計算ユニットは、
前記インデックスの値と前記オフセット値との間の差を表すのに使用されるビットの数を示す第３ビットの第１セットの値を設定することと、
何れかのインデックスがユニークであることと、ユニークインデックスと前記オフセット値との間の差と、を示す第３ビットの少なくとも１つの第２セットの値を設定することと、
少なくとも１つのインデックスがユニークインデックスのリピート値であることと、前記チャンク内の前記ユニークインデックスの相対位置と、を示す第３ビットの少なくとも１つの第３セットの値を設定することと、
を行うように構成されている、
請求項８の装置。
【請求項１０】
前記計算ユニットは、前記圧縮チャンク内のインデックスを復元するのに使用されるレーンを示すビットフィールドを含むメタデータを生成することを行うように構成されており、前記計算ユニットは、前記第１ビットと、前記第２ビットと、前記インデックスの値と前記オフセット値との間の差を表すのに使用されるビットの数を示す第３ビットの第１セットと、前記ビットフィールドと、を含む前記メタデータを前記メモリに書き込むことを行うように構成されている、
請求項８の装置。
【請求項１１】
グラフィックスパイプラインによって処理されるプリミティブの頂点のインデックスを記憶するように構成されたインデックスバッファと、
計算ユニットと、を備え、
前記計算ユニットは、
第１圧縮チャンクが単調であるか通常であるかを示す前記第１圧縮チャンク内の第１ビットと、前記第１圧縮チャンク内の前記インデックスの値に基づいて決定されるオフセットを定義する前記第１圧縮チャンク内の第２ビットと、前記第２ビットによって定義された前記オフセットに基づいて前記第１圧縮チャンク内の前記インデックスの値を決定する前記第１圧縮チャンク内の第３ビットのセットと、に基づいて、前記インデックスを表すビットの前記第１圧縮チャンク内のインデックスを復元することと、
前記第１圧縮チャンク内の復元されたインデックスを前記インデックスバッファに書き込むことと、
を行うように構成されている、
装置。
【請求項１２】
前記計算ユニットは、前記第１圧縮チャンクの第１先頭アドレス及び第２圧縮チャンクの第２先頭アドレスを含むメタデータに基づいて、メタデータから、前記第１圧縮チャンクの前記第１ビットと、前記第２ビットと、前記第３ビットのセットと、を識別するように構成されている、
請求項１１の装置。
【請求項１３】
前記計算ユニットは、隣接する三角形によって共有されない頂点のインデックスを前記第１圧縮チャンクのビットに追加することによって、前記第１圧縮チャンクが、連続して隣接するプリミティブを表す単調チャンクであると、前記第１ビットに基づいて決定するように構成されており、前記第２ビットの値は、次のプリミティブがリスタートインデックスの前のインデックスによって表される前のプリミティブに隣接していないことを示す前記リスタートインデックスではない、前記第１圧縮チャンク内の第１インデックスの値に等しいオフセット値に設定される、
請求項１１の装置。
【請求項１４】
前記第３ビットの第１セットの値は、前記第１圧縮チャンク内のリスタートインデックスの数を示し、前記第３ビットの少なくとも１つの他のセットは、前記第１圧縮チャンク内の少なくとも１つのリスタートインデックスの少なくとも１つの位置を示す、
請求項１３の装置。
【請求項１５】
前記計算ユニットは、前記第１圧縮チャンクが、前記プリミティブの全ての頂点のインデックスを使用してプリミティブを表す通常チャンクであると、前記第１ビットに基づいて決定するように構成されており、前記第２ビットは、前記第１圧縮チャンク内の前記インデックスの最小値に等しいオフセット値を示し、前記第３ビットの第１セットは、前記インデックスの値と前記オフセット値との間の差を表すのに使用されるビットの数を示し、前記第３ビットの少なくとも１つの第２セットは、少なくとも１つのインデックスがユニークであることと、ユニークインデックスと前記オフセット値との間の差と、を示し、前記第３ビットの少なくとも１つの第３セットは、少なくとも１つのインデックスがユニークインデックスのリピート値であることと、前記チャンク内のユニークインデックスの相対位置と、を示す、
請求項１１の装置。
【請求項１６】
グラフィックスパイプラインによって処理されるプリミティブの頂点のインデックスを記憶するように構成されたインデックスバッファと、
複数の計算ユニットと、を備え、
前記複数の計算ユニットは、
圧縮チャンクのメタデータにアクセスすることであって、前記メタデータは、前記圧縮チャンクが単調であるか通常であるかを示す第１ビットと、前記インデックスの値に基づいて決定されるオフセットを定義する第２ビットと、前記インデックスの特性を示すビットフィールドと、を含む、ことと、
前記メタデータに基づいて前記圧縮チャンクを復元することと、
復元されたインデックスを前記インデックスバッファに書き込むことと、
を同時に行うように構成されている、
装置。
【請求項１７】
前記第１ビットは、前記圧縮チャンクが単調圧縮チャンクであることを示し、前記ビットフィールドは、前記圧縮チャンク内のリスタートインデックスの位置を示す、
請求項１６の装置。
【請求項１８】
前記第１ビットは、前記圧縮チャンクが通常圧縮チャンクであることを示し、前記ビットフィールドは、前記複数の計算ユニットのうち何れが前記圧縮チャンク内のインデックスを復元するのに使用されるかを示す、
請求項１６の装置。
【請求項１９】
前記メタデータは、前記圧縮チャンクの前記インデックスの前記値と前記オフセットとの間の差を表すのに使用されるビットの数を示すフィールドを含む、
請求項１８の装置。
【請求項２０】
前記計算ユニットは、メタデータに記憶された前記圧縮チャンクの先頭アドレスに基づいて、前記圧縮チャンク内の圧縮インデックスにアクセスするように構成されており、前記計算ユニットは、前記圧縮インデックスと、前記オフセットと、前記ビットフィールドと、に基づいて、前記圧縮チャンクを復元するように構成されている、
請求項１９の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
グラフィックスプロセッサは、プログラマブルシェーダ及び固定機能ハードウェアブロックのシーケンスを含むグラフィックスパイプラインを使用して表示用の画像を生成し、シーンのモデルに基づいて画像をレンダリングする。例えば、フレームに表示されるオブジェクトの３Ｄモデルは、ユーザに表示するためのピクセル値を生成するために、プリミティブ（例えば、グラフィックスパイプラインで処理される三角形、他のポリゴン又はパッチ等）のセットによって表すことができる。各プリミティブは、プリミティブの頂点において例えば赤緑青（ＲＧＢ）等の値で表される。例えば、三角形は、三角形の３つの頂点における値のセットで表される。グラフィックスパイプラインは、頂点を識別するインデックスを使用して、三角形の頂点にアクセスする。頂点のインデックスは、通常、１６ビット又は３２ビットを含む２進数で表される。三角形のセットのインデックスは、例えばチャンク毎に１６のインデックス等のように、所定数のインデックスを含む「チャンク」で処理される。チャンクは、グラフィックスパイプラインで使用される前にインデックスバッファに記憶される。
【０００２】
チャンクは、通常チャンク又は単調チャンクである。通常チャンクは、チャンク内の三角形毎に３つの頂点が順番にリストされる。単調チャンクは、隣接する三角形が２つの頂点を共有するという事実を利用する。例えば、三角形のトライアングルストリップメッシュは、互いに隣接する三角形の大部分を含む。単調チャンクは、隣接する三角形によって共有されない頂点のインデックスのみを追加することによって、連続して隣接する三角形を表す。したがって、単調チャンクは、２つの連続する三角形によって共有される頂点のインデックスを繰り返さない。例えば、第１三角形の頂点がインデックス８，９，１０を有し、第２三角形の頂点がインデックス９，１０，１１を有する場合、単調チャンク内の第１三角形及び第２三角形の表現は、インデックス８，９，１０，１１をリストする。対照的に、通常チャンクは、第１三角形及び第２三角形を８，９，１０，９，１０，１１と表す。連続してディスパッチされた三角形が常に隣接しているとは限らず、単調チャンクは、単調チャンク内の前の三角形と頂点を共有しない三角形の頂点を次のインデックスが識別することを示すリスタートインデックス（restart index）を含む。
【０００３】
添付の図面を参照することによって本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面で同じ符号を使用している場合、類似又は同一のアイテムを示している。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、ディスプレイへの出力を意図した視覚イメージを生成するためのグラフィックス処理ユニット（ＧＰＵ）を含む処理システムのブロック図である。
【図２】いくつかの実施形態による、高次ジオメトリプリミティブを処理して三次元（３Ｄ）シーンのラスタライズ画像を生成することができるグラフィックスパイプラインを示す図である。
【図３】いくつかの実施形態による、処理システムの一部を示すブロック図である。
【図４】いくつかの実施形態による、単調チャンク内のインデックスを圧縮する方法を示す図である。
【図５】いくつかの実施形態による、通常チャンク内のインデックスを圧縮する方法を示す図である。
【図６】いくつかの実施形態による、圧縮チャンクのメタデータを生成する方法を示す図である。
【図７】いくつかの実施形態による、インデックスの同時復元をサポートするために、単調チャンク内のインデックスを圧縮する方法を示す図である。
【図８】いくつかの実施形態による、圧縮チャンクのメタデータ及び圧縮インデックスを生成する方法を示す図である。
【発明を実施するための形態】
【０００５】
インデックスのセット（本明細書では「チャンク」と呼ばれる）は、チャンクが単調であるか通常であるかを示す第１ビットと、チャンク内のインデックスの値に基づいて決定されるオフセットを定義する第２ビットと、を使用することによって、インデックスバッファに記憶するために圧縮される。圧縮チャンクは、第２ビットによって定義されたオフセットに基づいて、チャンク内の各インデックスの値を決定する第３ビットのセットも含む。圧縮チャンクはメモリに記憶され、メモリに記憶された圧縮チャンクの先頭アドレスを表すメタデータが生成される。圧縮チャンクは、メタデータに基づいてメモリ（又は、関連するキャッシュ）からフェッチされる。例えば、復元ユニットは、メタデータに記憶された先頭アドレスを使用して、圧縮チャンクと重複するキャッシュラインを判別し、重複するキャッシュラインをフェッチする。チャンク内のインデックスの値は、第１ビットと、第２ビットと、第３ビットのセットと、に基づいて決定される。
【０００６】
単調チャンクは、第１ビットを、チャンクが単調チャンクであることを示す値に設定し、第２ビットを、リスタートインデックスではない単調チャンク内の第１インデックスの値に等しいオフセット値に設定することによって圧縮される。第３ビットの第１セットは、単調チャンク内のリスタートインデックスの番号を示す値に設定され、第３ビットの１つ以上の他のセットは、単調チャンク内のリスタートインデックスの位置を示す値に設定される。通常チャンクは、第１ビットを、チャンクが通常チャンクであることを示す値に設定し、第２ビットを、通常チャンク内のインデックスの最小インデックス値に等しいオフセット値に設定することによって圧縮される。第３ビットの第１セットは、インデックスの値と最小インデックス値との間の差を表すのに使用されるビット数を示す値に設定される。第３ビットの第２セットは、対応するインデックスがユニークであることを示し、オフセットに関するユニークインデックスの値を示すために使用される。第３ビットの第３セットは、対応するインデックスがユニークインデックスのリピート値であることを示し、通常チャンク内のユニークインデックスの相対位置を示すために使用される。
【０００７】
いくつかの実施形態では、圧縮チャンクのインデックスは、この情報を圧縮チャンクに記憶する代わりに、ヘッダビットのセットをメタデータに記憶することによって同時に又は並列に復元される。単調チャンクの場合、第１ビット及び第２ビットは、メタデータに記憶されたヘッダビットのセットに含まれる。ヘッダビットは、リスタートインデックスの位置を表すビットフィールドも含む。通常チャンクの場合、第１ビット及び第２ビットは、メタデータに記憶されたヘッダビットのセットに含まれる。また、ヘッダビットは、圧縮チャンク内のユニークインデックスの位置を示すビットの値を有するビットフィールドを含む。通常チャンクのメタデータは、インデックスの値と最小インデックス値との間の差を表すのに使用されるビット数を示す第３ビットの第１セットをさらに含む。圧縮チャンク内のインデックスを復元するために使用されるレーンは、メタデータに記憶されたビットフィールドに基づいて選択的に有効にされ、これにより、チャンク内の復元されたインデックスの順序が保存される。
【０００８】
図１は、いくつかの実施形態による、ディスプレイ１１０への出力を意図した視覚イメージを生成するためのグラフィックス処理ユニット（ＧＰＵ）１０５を含む処理システム１００のブロック図である。ＧＰＵ１０５は、複数の計算ユニット１１１，１１２，１１３，１１４を含むマルチスレッドプロセッサであり、本明細書ではこれらをまとめて「計算ユニット１１１〜１１４」と呼ぶ。計算ユニット１１１〜１１４は、命令を同時又は並列に実行するように構成されている。計算ユニット１１１〜１１４のいくつかの実施形態は、ビデオレンダリングに必要とされる基本的な算術演算等の比較的少ない演算セットを実施するように構成されている。図１では、分かり易くするために４つの計算ユニット１１１〜１１４を示しているが、ＧＰＵ１０５のいくつかの実施形態は、数十、数百又は数千の計算ユニットを含む。計算ユニット１１１〜１１４のいくつかの実施形態は、複数のデータセット上で単一のプログラムの複数のインスタンス（又は、ウェーブ）を、例えば、単一の命令、複数のデータ（ＳＩＭＤ）ウェーブとして同時に実行する。例えば、計算ユニット１１１〜１１４は、データのアレイ又はストリームに対して同じ動作シーケンスを実行するように構成されている。
【０００９】
処理システム１００は、メモリ１１５を含む。メモリ１１５のいくつかの実施形態は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）として実施される。しかし、他の実施形態では、メモリ１１５は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、不揮発性ＲＡＭ等を含む他のタイプのメモリを使用して実施されてもよい。図示した実施形態では、ＧＰＵ１０５は、バス１２０を介してメモリ１１５と通信する。しかし、ＧＰＵ１０５のいくつかの実施形態は、直接接続を介して、又は、他のバス、ブリッジ、スイッチ、ルータ等を介して、メモリ１１５と通信する。ＧＰＵ１０５は、メモリ１１５に記憶された命令を実行することができ、ＧＰＵ１０５は、実行された命令の結果等の情報をメモリ１１５に記憶することができる。例えば、メモリ１１５は、ＧＰＵ１０５の計算ユニット１１１〜１１４によって実行されるプログラムコードからの命令のコピー１２５を記憶することができる。
【００１０】
処理システム１００は、命令を実行するための中央処理装置（ＣＰＵ）１３０を含む。ＣＰＵ１３０のいくつかの実施形態は、シーケンシャルシリアル処理用に最適化された複数のプロセッサコア１３１，１３２，１３３，１３４（本明細書ではまとめて「プロセッサコア１３１〜１３４」と呼ぶ）を含む。プロセッサコア１３１〜１３４は、（例えば、計算ユニット１１１〜１１４によって実行される小さな命令セットに対して）比較的大きな命令セットと、処理システム１００で実行されるアプリケーションによって必要とされる計算の全レパートリをＣＰＵ１３０が実行するのを可能にする大きな特徴セットと、を実装する。ＣＰＵ１３０のいくつかの実施形態は、プロセッサコア１３１〜１３４を使用して複数のパイプラインを実装することができる。ＣＰＵ１３０は、バス１２０にも接続されており、これにより、バス１２０を介してＧＰＵ１０５及びメモリ１１５と通信する。ＣＰＵ１３０は、メモリ１１５に記憶されたプログラムコード１３５等の命令を実行し、実行された命令の結果等の情報をメモリ１１５に記憶する。また、ＣＰＵ１３０は、ドローコールをＧＰＵ１０５に発行することによって、グラフィックス処理を開始することができる。ドローコールは、フレーム内のオブジェクト（又は、オブジェクトの一部）のレンダリングをＧＰＵ１０５に指示するために、ＣＰＵ１３０によって生成され、ＧＰＵ１０５に送信されるコマンドである。ＧＰＵ１０５は、ドローコールに応じて、オブジェクトをレンダリングして、ディスプレイ１１０に提示されるピクセル値を生成し、ディスプレイ１１０は、ピクセル値を使用して、レンダリングされたオブジェクトを表す画像を表示する。
【００１１】
入出力（Ｉ／Ｏ）エンジン１４０は、処理システム１００の他の要素（例えば、キーボード、マウス、プリンタ、外部ディスク等）と同様に、ディスプレイ１１０に関連する入出力動作を処理する。Ｉ／Ｏエンジン１４０は、ＧＰＵ１０５、メモリ１１５又はＣＰＵ１３０と通信できるように、バス１２０に接続されている。図示した実施形態では、Ｉ／Ｏエンジン１４０は、外部記憶媒体１４５（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ネットワークサーバ等）に記憶された情報を読み出すように構成されている。外部記憶媒体１４５は、ビデオゲーム等のアプリケーションを実行するために使用されるプログラムコードを表す情報を記憶する。外部記憶媒体１４５のプログラムコードは、ＧＰＵ１０５によって実行される命令のコピー１２５、又は、ＣＰＵ１３０によって実行されるプログラムコード１３５を形成するために、メモリ１１５に書き込まれる。
【００１２】
マルチスレッドＧＰＵ１０５の計算ユニット１１１〜１１４は、ＧＰＵ１０５のウェーブの実行をサポートするために使用されるリソースを共有する。ＧＰＵ１０５のいくつかの実施形態は、計算ユニット１１１〜１１４で実行されるウェーブの状態情報を記憶するベクトル汎用レジスタ（ＶＧＰＲ、明確にするために図１に示されていない）のセットを実装する。ＶＧＰＲは、計算ユニット１１１〜１１４で同時に実行されているウェーブ間で共有される。例えば、各ウェーブにはＶＧＰＲのサブセットが割り当てられ、ウェーブの状態情報が記憶される。また、ウェーブは、同時に実行されるウェーブ間で分割されるローカルデータ共有、ローカルキャッシュにアクセスするためにウェーブによって共有されるメモリ帯域幅等を含む、ＧＰＵ１０５の他のリソースを共有する。マルチスレッドＣＰＵ１３０のプロセッサコア１３１〜１３４もリソースを共有する。
【００１３】
ＧＰＵ１０５は、複数のワークロードを同時に又は並列に実行するための複数のパイプラインを実装するように構成されている。計算ユニット１１１〜１１４のいくつかの実施形態は、ディスプレイ１１０に表示されるオブジェクトの画像をレンダリングするためにグラフィックスワークロードを実行するグラフィックスパイプラインを実装するのに使用される。例えば、計算ユニット１１１〜１１４は、シーンの３Ｄモデルの一部を表す三角形等のプリミティブを操作するシェーダの複数のインスタンスを実行することによって、グラフィックス処理を実行する。プリミティブは、頂点のセットで定義される。例えば、三角形は、三角形の３つの頂点の値のセットで表される。計算ユニット１１１〜１１４は、頂点を識別するインデックスを使用して三角形の頂点にアクセスすることができる。例えば、計算ユニット１１１〜１１４は、計算ユニット１１１〜１１４がプリミティブの頂点の処理を開始する準備ができている場合に、インデックスバッファ（明確にするために図１に示されていない）からインデックスにアクセスする。
【００１４】
三角形のセットのインデックスは、本明細書では、例えばチャンク毎の１６のインデックス等のように、所定数のインデックスを含む「チャンク」と呼ばれる。チャンクは、処理システム１００のリソースを節約するために圧縮される。いくつかの実施形態では、圧縮は、ＧＰＵ１０５又は処理システム１００の他の処理ユニットによって（例えば、計算ユニット１１１〜１１４がインデックスによって示される頂点の処理を開始する準備ができる前に）オフラインで実行され、圧縮されたインデックス（圧縮インデックス）は、メモリ１１５等のメモリに記憶される。メタデータも生成され、メモリ１１５に記憶される。図示した実施形態では、圧縮インデックス及びメタデータは、メモリ１１５のブロック１５５に記憶される。しかし、他の実施形態では、メタデータ及び圧縮インデックスは、他の場所に記憶され、全ての実施形態で同じ場所に記憶される必要はない。ＧＰＵ１０５は、計算ユニット１１１〜１１４が頂点の処理を開始する準備ができている場合に、ブロック１５５からメタデータを取り出す。いくつかの実施形態では、メタデータは、ブロック１５５から圧縮インデックスを取り出すために使用され、圧縮インデックスは、キャッシュに記憶される。ＧＰＵ１０５は、圧縮インデックスをオンザフライ（on the fly）で復元し、復元されたインデックスをインデックスバッファに記憶して、計算ユニット１１１〜１１４が利用できるようにする。
【００１５】
図２は、いくつかの実施形態による、高次のジオメトリプリミティブを処理して三次元（３Ｄ）シーンのラスタライズ画像を生成することができるグラフィックスパイプライン２００を示す図である。グラフィックスパイプライン２００は、図１に示すＧＰＵ１０５のいくつかの実施形態において実施される。例えば、いくつかの実施形態では、グラフィックスパイプライン２００は、図１に示すＧＰＵ１０５の計算ユニット１１１〜１１４を使用して実施されてもよい。図２に示すグラフィックスパイプライン２００は、グラフィックスパイプライン２００に含まれる全てのシェーダが、共有されたＳＩＭＤプロセッサコアにおいて同じ実行プラットフォームを有するように、ユニファイドシェーダモデル（unified shader model）を実装する。したがって、シェーダは、本明細書においてユニファイドシェーダプール２０１と呼ばれるリソースの共通セットを使用して実装される。ユニファイドシェーダプール２０１のいくつかの実施形態は、図１に示すＧＰＵ１０５に実装された計算ユニット１１１〜１１４を使用して実施される。
【００１６】
ストレージリソース２０２は、グラフィックスパイプライン２００のステージによって共有される。ストレージリソース２０２は、複数のウェーブのワークグループ内で読み出し／書き込み通信及び同期のために使用されるローカルデータストア（ＬＤＳ）２０３を含む。また、ストレージリソース２０２は、ウェーブによって実行された動作の中間結果等のように、ウェーブの現在の状態を定義する状態情報を記憶するＶＧＰＲ２０４を含む。さらに、ストレージリソース２０２は、圧縮チャンク、メタデータ、頂点データ、テクスチャデータ、及び、グラフィックスパイプライン２００の１つ以上のステージによって頻繁に使用される他のデータ等の情報をキャッシュするために使用されるキャッシュ階層２０５を含む。さらにまた、ストレージリソース２０２は、グラフィックスパイプライン２００内のエンティティによるアクセスのために、頂点の復元されたインデックスを記憶するのに使用されるインデックスバッファ２０６を含む。いくつかの実施形態では、ストレージリソース２０２は、他のレジスタ、バッファ、メモリ又はキャッシュも含む。グラフィックスパイプライン２００の共有リソースは、グラフィックスパイプライン２００のステージとストレージリソース２０２との間の通信をサポートするために使用されるメモリファブリックの帯域幅も含む。ストレージリソース２０２の一部は、図１に示すＧＰＵ１０５の一部としてオンチップで実装され、又は、図１に示すメモリ１１５のいくつかの実施形態を使用してオフチップで実装される。図２には、単一のグラフィックスパイプライン２００が示されているが、（ユニファイドシェーダプール２０１と同様に）ストレージリソース２０２のいくつかの実施形態は、複数のグラフィックスパイプラインによって共有される。
【００１７】
グラフィックスパイプライン２００は、シーンのモデルの一部を表すオブジェクトを定義するのに使用されるストレージリソース２０２からの情報にアクセスするように構成された入力アセンブラ２１０を含む。入力アセンブラ２１０のいくつかの実施形態は、インデックスバッファ２０６から頂点のインデックスを取り出し、取り出したインデックスを使用して、グラフィックスパイプライン２００の下流のエンティティに提供される頂点を識別するように構成されている。
【００１８】
頂点シェーダ２１１は、例えばソフトウェアにおいて実装され、プリミティブの単一の頂点を入力として論理的に受信し、単一の頂点を出力する。頂点シェーダ２１１等のシェーダのいくつかの実施形態は、例えば、ユニファイドシェーダプール２０１を実装するのに使用される計算ユニットによって複数の頂点が同時に処理されるように、単一命令複数データ（ＳＩＭＤ）処理を実施する。
【００１９】
ハルシェーダ２１２は、入力パッチを定義するのに使用される入力高次パッチ又はコントロールポイントに基づいて動作する。ハルシェーダ２１２は、テッセレーション係数及び他のパッチデータを出力する。ハルシェーダ２１２によって生成されたプリミティブは、オプションでテッセレータ２１３に提供されてもよい。テッセレータ２１３は、ハルシェーダ２１２からオブジェクト（パッチ等）を受信し、例えば、ハルシェーダ２１２によってテッセレータ２１３に提供されるテッセレーション係数に基づいて入力オブジェクトをテッセレーションすることによって、入力オブジェクトに対応するプリミティブを識別する情報を生成する。テッセレーションは、例えば、テッセレーション処理によって生成されるプリミティブの粒度を指定するテッセレーション係数によって示すように、例えばパッチ等の入力高次プリミティブを、より詳細なレベルを表すより低次出力プリミティブのセットに分割する。したがって、シーンのモデルを、（メモリ又は帯域幅を節約するために）少数の高次プリミティブで表すことができ、高次プリミティブをテッセレーションすることによってさらなる詳細を追加することができる。
【００２０】
ドメインシェーダ２１４は、ドメイン位置及び（オプションで）他のパッチデータを入力する。ドメインシェーダ２１４は、提供された情報に基づいて動作し、入力ドメイン位置及び他の情報に基づいて、出力用の単一の頂点を生成する。ジオメトリシェーダ２１５は、入力プリミティブを受信し、入力プリミティブに基づいて、ジオメトリシェーダ２１５によって生成される最大４つのプリミティブを出力する。プリミティブの１つのストリームがラスタライザ２１６に提供され、最大４つのプリミティブのストリームがストレージリソース２０２のバッファに連結され得る。ラスタライザ２１６は、シェーディング操作と、他の操作（例えば、クリッピング、パースペクティブ分割、シザリング、ビューポート選択等）と、を実行する。ピクセルシェーダ２１７は、ピクセルフローを入力し、入力されたピクセルフローに応じて、０又は別のピクセルフローを出力する。出力マージャブロック２１８は、ピクセルシェーダ２１７から受信したピクセルに対して、ブレンド、デプス（depth）、ステンシル又は他の操作を実行する。
【００２１】
図３は、いくつかの実施形態による、処理システムの一部３００を示すブロック図である。一部３００は、図１に示す処理システム１００及び図２に示すグラフィックスパイプライン２００のいくつかの実施形態で実施される。一部３００は、グラフィックスプリミティブの頂点を識別するインデックスのチャンク３１０を圧縮するように構成されたコンプレッサ３０５を含む。コンプレッサ３０５は、圧縮インデックスを表すビットを含む圧縮チャンク３１５をチャンク３１０から生成する。また、一部は、圧縮インデックスを表すビットを含む圧縮チャンク３１５を復元するように構成されたデコンプレッサ３２０を含む。デコンプレッサ３２０は、チャンク３１０内のインデックスを表すビットを生成する。コンプレッサ３０５及びデコンプレッサ３２０のいくつかの実施形態は、図１に示す計算ユニット１１１〜１１４等の計算ユニットを使用して実施される。コンプレッサ３０５及びデコンプレッサ３２０の他の実施形態は、図１に示すＧＰＵ１０５等の処理ユニット内の別個のハードウェアブロックとして実施される。
【００２２】
図４は、いくつかの実施形態による、単調チャンク内のインデックスを圧縮する方法４００を示す図である。方法４００は、図１に示された処理システム１００、図２に示されたグラフィックスパイプライン２００、及び図３に示された処理システムの一部３００のいくつかの実施形態において実施される。
【００２３】
方法４００は、１６のインデックス４１０（明確にするために、１つのみが符号で示されている）を表すビットを含む単調チャンク４０５に対して動作する。本明細書で使用される「単調チャンク」という用語は、隣接する三角形によって共有されない頂点のインデックスのみを追加することによって、連続して隣接する三角形を表すチャンクを指す。したがって、単調チャンク４０５は、２つの連続する三角形によって共有される頂点のインデックスを繰り返さない。例えば、第１三角形の頂点は、インデックス８，９，１０を有し、第２三角形の頂点は、インデックス９，１０，１１を有する。したがって、単調チャンク４０５は、第１三角形及び第２三角形を、インデックス８，９，１０，１１のリストとして表す。
【００２４】
インデックス４１０は、本明細書でリスタートインデックス（Ｒ）と呼ばれる特別なインデックスを含む。リスタートインデックスは、次のインデックス４１０が、前の三角形と頂点を共有しない新たな三角形の第１頂点のインデックスであることを示す。図示した実施形態では、インデックス１１とインデックス１２との間のリスタートインデックスは、次の三角形が、インデックス１２，１３，１４によって識別された頂点を含むことを示す。また、リスタートインデックスは、次の三角形が、インデックス９，１０，１１によって識別された前の三角形の頂点を共有していないことを示す。チャンク４０５内のビット又はインデックスの特定の数は、設計上の選択事項である。インデックス４１０は、図４において、ローマ数字（又は、文字Ｒ）で示されている。しかし、実際には、インデックス４１０は、対応するインデックス４１０の値を示すビットのセットによって表される。図示した実施形態では、各インデックス４１０を表すために使用されるビットの数は、１６ビットである。他の実施形態では、インデックス４１０を表すために、他の数のビット（例えば、３２ビット）が使用される。リスタートインデックスは、インデックス４１０を表すために使用されるビットの予約値によって示される。
【００２５】
図３に示すコンプレッサ３０５等のコンプレッサは、チャンク４０５内のインデックス４１０の値を使用して圧縮チャンク４１５を生成する。コンプレッサは、第１ビット４２０の値を例えば０に設定することによって、圧縮チャンク４１５が圧縮された単調チャンクを表していることを示す値に設定する。コンプレッサは、ビット４２５の値を、チャンク４０５内の第１インデックスの値に等しいオフセットを表す値に設定する。図示した実施形態では、ビット４２５の値は、８のオフセット値を示す「…００１０００」に設定される。また、コンプレッサは、単調チャンク４０５内で検出されたリスタートインデックスの数を示すビット４３０の値を生成する。ビット４３０の数は、チャンク４０５内のインデックス４１０の数に依存する。図示した実施形態では、チャンク４０５内のインデックス４１０の数が１６に等しい場合に５ビットが必要になるが、これは、１６のリスタートインデックスが単調チャンク４０５内で検出される可能性があるためである。例えば、ビット４３０は、単調チャンク４０５内に２つのリスタートインデックスが存在することを示すために、「０００１０」の値に設定される。単調チャンク４０５内のリスタートインデックスの位置は、ビット４３５，４４０によって示されている。図示した実施形態では、インデックス４１０は、０〜１５に番号付けされている。例えば、ビット４３５は、第１リスタートインデックスが単調チャンク４０５の５番目のインデックスで検出されたことを示すために、「０１００」の値に設定される。別の例では、ビット４４０は、第２リスタートインデックスが単調チャンク４０５の９番目のインデックスで検出されたことを示すために、「１０００」の値に設定される。
【００２６】
圧縮チャンク４１０は、単調チャンク４０５よりも少ないビットを含み、単調チャンク４０５内のインデックス４１０を再構成するのに必要な全ての情報を含む。したがって、図３に示すデコンプレッサ３２０等のデコンプレッサは、復元されたインデックス４１０を取り戻すように方法４００を反転することによって、圧縮チャンク４１０を復元することができる。最良の場合のシナリオでは、圧縮チャンク４１０は、単調チャンク４０５内のビット数の４％のみを含む。最悪の場合のシナリオでは、実際には発生しないが全てのインデックス４１０がリスタートインデックスである場合、方法４００は、１７％の圧縮を生じさせる。実際のグラフィックス処理ワークロードでテストした結果、圧縮率は、大抵、最悪の場合のシナリオの１７％の圧縮率よりも、最良の場合のシナリオの４％の圧縮率に近いことがわかった。
【００２７】
図５は、いくつかの実施形態による、通常チャンク内のインデックスを圧縮する方法５００を示す図である。方法５００は、図１に示す処理システム１００、図２に示すグラフィックスパイプライン２００、及び、図３に示す処理システムの一部３００のいくつかの実施形態で実施される。
【００２８】
方法５００は、８のインデックス５１０（明確にするために、１つのみが符号で示されている）を表すビットを含む通常チャンク５０５に対して動作する。本明細書で使用される「通常チャンク」という用語は、チャンク内の三角形毎に３つの頂点を連続的にリストするチャンクを指す。例えば、通常チャンク５０５は、第１三角形の頂点を識別するインデックス８，９，１０をリストし、第２三角形の頂点を識別するインデックス１０，９，１１を続けてリストする。通常チャンク５０５は、各三角形の頂点に関する全てのインデックスを必ずしもリストするわけではない。例えば、通常チャンク５０５は、第３三角形の２つの頂点を識別するインデックス１８，６をリストするが、第３三角形の第３頂点のインデックスを含まない。
【００２９】
図３に示すコンプレッサ３０５等のコンプレッサは、チャンク５０５内のインデックス５１０の値を使用して、圧縮チャンク５１５を生成する。コンプレッサは、ビット５２０の値を、例えば１に設定することによって、圧縮チャンク５１５が圧縮された通常チャンクを表していることを示す値に設定する。コンプレッサは、ビット５２５を、インデックス５１０の最小値に等しいオフセットに設定する。図示した実施形態では、インデックス５１０の最小値は６に等しいので、オフセットは、「…００１１０」に設定されたビット５２５によって表される。コンプレッサは、ビット５３０を、インデックス５１０の値とオフセット値との間の差を表すのに必要なビット数を表す値に設定する。したがって、ビット５３０によって表される値は、インデックス５１０の最大値と最小値との間の差によって決定される。
【数１】
2021501938.tif 000003
【００３０】
図示した実施形態では、最大値が１８であり、最小値が６である。したがって、これらの値の間の差は、４ビットで表される。ビット５３０の値は、ビット数が３＋１＝４であることを示すために、「００１１」に設定される。
【００３１】
インデックス５１０の値を表すのに使用されるビットは、インデックス５１０の値が、現在のインデックスの値がチャンク５０５内の前のインデックスの値と等しくないことを示す「ユニーク」であるかどうか、又は、現在のインデックス５１０の値が前のインデックスの値を有することを示す「リピート」であるかどうかに基づいて決定される。ビット５３５は、対応するインデックスがユニークインデックスであることを示す値（例えば、０の値）に設定された１ビットと、インデックスの値とオフセット５２５によって示された最小値との間の差を示す４ビットと、を含む。例えば、ビット５３５は、インデックスの値が６＋２＝８であるように、インデックスの値がオフセット５２５から２だけ異なることを示すために、「００１０」の値に設定された４ビットを含む。ビット５４０は、対応するインデックスがリピートインデックスであることを示す値（例えば、１の値）に設定された１ビットと、現在のインデックスに対するリピートインデックスの位置を識別する３ビットと、を含む。例えば、ビット５４０は、現在のインデックスが前のインデックスの値と同じ１０の値を有するように、現在のインデックスが前のインデックスのリピートであることを示すために、「０００」の値に設定された３ビットを含む。
【００３２】
図６は、いくつかの実施形態による、圧縮チャンクのメタデータ６０５を生成する方法６００を示す図である。方法６００は、図１に示す処理システム１００、図２に示すグラフィックスパイプライン２００、及び、図３に示す処理システムの一部３００のいくつかの実施形態で実施される。
【００３３】
メタデータ６０５は、本明細書でまとめて「チャンク６１０〜６１３」と呼ばれる一連の非圧縮チャンク６１０，６１１，６１２，６１３内の情報に基づいて生成される。チャンク６１０は、ビット０，…，３１を含み、チャンク６１１は、ビット３２，…，６３を含み、チャンク６１２は、ビット６４，…，９５を含み、チャンク６１２は、ビット９６，…，１２７を含む。図示した実施形態では、チャンク６１０〜６１３は、本明細書でまとめて「圧縮チャンク６１５〜６１８」と呼ばれる圧縮チャンク６１５，６１６，６１７，６１８を形成するように圧縮される。圧縮チャンク６１５〜６１８は、単調チャンクを圧縮するための図４に示す方法４００、及び、通常チャンクを圧縮するための図５に示す方法５００のいくつかの実施形態に従って形成される。圧縮チャンク６１５〜６１８の各々におけるビット数は、圧縮方法及びチャンク６１０〜６１３内のインデックスの値に依存する。したがって、メタデータ６０５は、圧縮チャンク６１５〜６１８の先頭アドレス（０，３３，７０，１１５）を示す値と、圧縮チャンク６１８の最終アドレス（２００）を示す値と、を含む。したがって、メタデータ６０５は、例えば、異なる圧縮チャンク６１５〜６１８へのランダムアクセスをサポートするために、圧縮チャンク６１５〜６１８内のビットを識別するのに使用される。
【００３４】
いくつかの実施形態では、圧縮チャンク６１５〜６１８うち１つ以上が、キャッシュに又はキャッシュからフェッチされる。キャッシュは、通常、キャッシュラインに編成され、データは、キャッシュラインのサイズと等しいビットブロックでキャッシュに又はキャッシュからフェッチされる。図示した実施形態では、キャッシュラインは、３２バイトに等しい長さを有する。チャンク６１０〜６１３内の非圧縮インデックスは、２バイトで表され、チャンク６１０〜６１３の各々は、３２のインデックスを含む。よって、チャンク６１０〜６１３の各々は、キャッシュライン境界６２０（明確にするために、１つのみが符号で示されている）によって示されるように、２つのキャッシュラインに記憶される。対照的に、圧縮チャンク６１５〜６１８の各々に対応するキャッシュラインの数は、圧縮チャンク６１５〜６１８の圧縮サイズ及び圧縮チャンク６１５〜６１８の順序に依存する。
【００３５】
メタデータ６０５は、圧縮チャンク６１５〜６１８に対してフェッチされるキャッシュラインを決定するために使用される。例えば、メタデータ６０５は、圧縮チャンク６１５の一部が第１キャッシュライン及び第２キャッシュラインに記憶されることを示す。したがって、圧縮チャンク６１５をフェッチするために、２つのキャッシュラインがフェッチされる。別の例では、メタデータ６０５は、圧縮チャンク６１８の一部が３つの異なるキャッシュラインに記憶されるので、圧縮チャンク６１８をフェッチするために、３つのキャッシュラインがフェッチされる。いくつかの実施形態では、圧縮チャンク６１５〜６１８は、圧縮チャンク６１５〜６１８をフェッチするためにフェッチされるキャッシュラインの数を減少させるために、バイトアライメントされる。圧縮チャンク６１５〜６１８をキャッシュライン境界６２０とアライメントすることは、本明細書で開示される圧縮アルゴリズムの性能に対して小さな又は無視できる影響しか与えない。
【００３６】
図７は、いくつかの実施形態による、インデックスの同時復元をサポートするために、単調チャンク内のインデックスを圧縮する方法７００を示す図である。方法７００は、図１に示す処理システム１００、図２に示すグラフィックスパイプライン２００、及び、図３に示す処理システムの一部３００のいくつかの実施形態で実施される。図示した実施形態では、方法７００は、本明細書で説明するように、三角形の頂点のインデックス７１０とリスタートインデックスとを含む単調チャンク７０５に対して動作する。
【００３７】
メタデータ７１５は、インデックス７１０の値に基づいて生成される。メタデータ７１５は、単調チャンク７０５が単調であることを示す値（例えば、０の値）に設定されたビット７２０を含む。ビット７２５の値は、チャンク７０５内の第１インデックスの値に等しいオフセットを表す値に設定される。図示した実施形態では、ビット７２５の値は、８のオフセット値を示すために、「…００１０００」に設定される。また、メタデータ７１５は、リスタートインデックスの位置を示すビットフィールド７３０を含む。図示した実施形態では、ビットフィールド７３０内のいくつかのエントリは、頂点を示すインデックス７１０を示す１の値を有し、ビットフィールド７３０内のいくつかのエントリは、リスタートインデックスであるインデックス７１０を示す０の値を有する。メタデータ７１５は、図１に示すメモリ１１５等のメモリに記憶される。次に、メタデータ７１５が取り出され、非圧縮インデックス７１０を再構成するために使用される。
【００３８】
メタデータ７１５を使用した復元は、ビットカウント演算をビットフィールド７３０に適用して、頂点を識別するインデックス７１０と、リスタートインデックスの位置に対応する非アクティブレーンの指標と、のプレフィックス合計を表すフィールド７３５を生成することによって実行される。フィールド７３５内の各々のエントリは、対応するインデックス７１０の復元を同時に実行するために使用されるレーンに対応する。例えば、フィールド７３５の第１エントリは、図２に示すグラフィックスパイプライン２００等のグラフィックスパイプラインの第１レーンに対応し、フィールド７３５の第２エントリは、グラフィックスパイプラインの第２レーンに対応する、等である。図示した実施形態では、フィールド７３５のエントリ内の「Ｘ」は、リスタートインデックスに対応するレーンを示す。
【００３９】
オフセット７２５の値は、フィールド７３５のエントリ内のプレフィックス合計の各々に加算され、フィールド７４０の対応するエントリが生成される。加算演算は、グラフィックスパイプラインの対応するレーンで実行され、レーンがインデックスの復元を同時に又は並列に実行するのを可能にする。例えば、第１レーンは、８＋０＝８の値を有するフィールド７４０内の第１エントリを生成し、第２レーンは、８＋１＝９の値を有するフィールド７４０内の第２エントリを生成する、等である。フィールド７４０のエントリ内の「Ｘ」は、リスタートインデックスに対応するレーンを示す。いくつかの実施形態では、リスタートインデックスに関連するレーンは、他のレーンがインデックス７１０の非圧縮値を生成している間、無効にされる。次に、リスタートインデックスに関連するレーンが有効になり、以前有効になっていたレーンが無効になる。リスタートインデックスに関連するグラフィックスパイプラインのレーンは、非圧縮リスタートインデックスを示す値と等しい値を出力し、これにより、非圧縮チャンク７０５を生成する。
【００４０】
図８は、いくつかの実施形態による、圧縮チャンクのメタデータ８０５及び圧縮インデックス８１０，８１５を生成する方法８００を示す図である。方法８００は、図１に示す処理システム１００、図２に示すグラフィックスパイプライン２００、及び、図３に示す処理システムの一部３００のいくつかの実施形態で実施される。方法８００は、８つのインデックス８２５（明確にするために、１つのみが符号で示されている）を表すビットを含む通常チャンク８２０に対して動作する。
【００４１】
メタデータ８０５は、例えば値を１に設定することによって、圧縮チャンクが圧縮された通常チャンクを表していることを示す値に設定されたビット８３０を含む。また、メタデータは、インデックス８２５の最小値に等しいオフセットを表す値に設定されたビット８３５を含む。図示した実施形態では、インデックス８２５の最小値が６に等しいので、オフセットは、「…００１１０」に設定されたビット８３５によって表される。また、メタデータ８０５は、インデックス８２５の値とオフセット値８３５との間の差を表すのに必要なビット数を示す値に設定されたビット８４０を含む。したがって、ビット８４０によって表される値は、インデックス８２５の最大値と最小値との間の差によって決定される。
【数２】
2021501938.tif 000004
【００４２】
図示した実施形態では、最大値が１８であり、最小値が６である。したがって、これらの値の間の差が４ビットで表される。ビット８４０の値は、ビット数が３＋１＝４であることを示す「００１１」に設定される。
【００４３】
また、メタデータ８０５は、チャンク８２０内のユニークインデックス及びリピートインデックスの位置を示すビットの値を含むビットフィールド８４５を含む。例えば、ビットフィールド８０５のエントリにおける１の値は、ユニークな対応するインデックス８２５を示し、ビットフィールド８０５のエントリにおける０の値は、チャンク８２０内の前のインデックスのリピートである、対応するインデックス８２５を示す。
【００４４】
圧縮インデックス８１０，８１５は、メタデータ８０５とチャンク８２０内のインデックス８２５の値と、に基づいて生成される。圧縮インデックス８１０は、圧縮インデックス８１０に対応する復元されたインデックス８２５との間の差を表す値を含む。例えば、第１圧縮インデックス８１０は、第１復元インデックス８２５の値（８）とオフセット８３５の値（６）との間の差に等しい値２を有する。圧縮インデックス８１０は、チャンク８２０内のユニークなインデックスの値を含む。圧縮インデックス８１５は、チャンク８２０内のリピートインデックスに関連付けられる。図示した実施形態では、圧縮インデックス８１５は、対応するリピートインデックス８１５において繰り返されるユニークインデックスの位置を示す。例えば、第１圧縮インデックス８１５は、チャンク８２０内の対応するユニークインデックスの位置を示す値２を有する。チャンク８２０内のインデックス８２５の位置は、図示した実施形態では、０，…，７で番号付けされている。
【００４５】
したがって、圧縮チャンクは、メタデータ８０５及び圧縮インデックス８１０，８１５によって表される。いくつかの実施形態では、圧縮チャンクは、対応するインデックスを並列に復元するグラフィックスパイプラインの複数のレーンを使用して復元される。図示した実施形態では、ビットフィールド８４５に対してビットカウント演算が実行され、フィールド８５０内のエントリに値が割り当てられる。フィールド８５０内の各エントリは、グラフィックプロセッサ内のレーンに対応する。ユニークインデックスに対応するエントリは、（０，１，２，３，４，５）の値を有し、リピートインデックスに対応するエントリは、「Ｘ」の値に設定される。したがって、フィールド８１５内のエントリの値は、対応する圧縮インデックス８１０をマッピングする。したがって、グラフィックプロセッサの対応するレーンは、オフセット８３５を圧縮インデックス８１０の対応する値に加算することによって、ユニークインデックスの復元された値を生成することができる。レーンは、これらの演算を同時に又は並列に実行することができる。ユニークなエントリの数８５５も、ビットフィールド８４５に基づいて決定される。図示した実施形態では、ユニークなエントリの数は、６である。
【００４６】
リピートインデックスを復元するために、ビットフィールド８４５を反転させて、反転ビットフィールド８６０を形成する。図示した実施形態では、反転ビットフィールド８６０に対してビットカウント演算が実行され、フィールド８６５内のエントリに値が割り当てられる。リピートインデックスに対応するエントリは、（０，１）の値を有し、ユニークインデックスに対応するエントリの値は、「Ｘ」に設定される。リピートインデックスに対応するエントリの値は、当該値を数８５５に加算する加算器８７０に与えられ、フィールド８７５内のエントリが形成される。例えば、フィールド８６５内の値０は、フィールド８７５の対応するエントリ内の値６を形成するように、値６だけインクリメントされる。フィールド８７５内のエントリは、対応する圧縮インデックス８１５を示し、復元インデックス８２５を生成するために使用される。ユニークインデックスが既に復元されているので、リピートインデックスを復元するためにこれらを利用可能である。例えば、第１圧縮インデックスは、チャンク８２０内の対応するユニークインデックスの位置を示す値２を含む。値２で示された位置におけるユニークインデックスは、復元されたリピートインデックスに割り当てられる値１０を有する。
【００４７】
いくつかの態様によれば、装置は、グラフィックスパイプラインによって処理されるプリミティブの複数の頂点のインデックスを表すビットのチャンクにアクセスし、チャンクが単調であるか通常であるかを示す第１ビットの値を設定し、チャンク内のインデックスの値に基づいて決定されるオフセットを定義する第２ビットの値を設定し、第２ビットによって定義されたオフセットに基づいて、チャンク内のインデックスの値を決定する第３ビットのセットの値を設定し、第１ビットと、第２ビットと、第３ビットのセットと、によって表される圧縮チャンクをメモリに書き込む、ように構成された計算ユニットを含む。計算ユニットは、インデックスバッファに記憶された圧縮チャンクの先頭アドレスを表すメタデータを生成し、メタデータをメモリに書き込む、ように構成されている。いくつかの実施形態では、チャンクは、隣接する三角形によって共有されない頂点のインデックスをチャンクのビットに追加することによって、連続して隣接するプリミティブを表す単調チャンクであり、計算ユニットは、第１ビットの値を、チャンクが単調であることを示す第１値に設定するように構成されている。いくつかの実施形態では、計算ユニットは、第２ビットの値を、次のプリミティブがリスタートインデックスの前のインデックスによって表される前のプリミティブに隣接していないことを示すリスタートインデックスではない、チャンク内の第１インデックスの値に等しいオフセット値に設定するように構成されている。さらに、計算ユニットは、チャンク内のリスタートインデックスの数を示す第３ビットの第１セットの値を設定し、チャンク内の少なくとも１つのリスタートインデックスの少なくとも１つの位置を示す第３ビットの少なくとも１つの他のセットを設定する、ように構成されてもよい。また、計算ユニットは、チャンク内のリスタートインデックスの位置を示すビットフィールドを含むメタデータを生成するように構成されてもよく、計算ユニットは、第１ビットと、第２ビットと、ビットフィールドと、を含むメタデータをメモリに書き込むように構成されている。他の実施形態では、チャンクは、プリミティブの全ての頂点のインデックスを使用してプリミティブを表す通常チャンクであり、計算ユニットは、チャンクが通常であることを示すために、第１ビットの値を第２値に設定するように構成されている。このような場合、計算ユニットは、第２ビットの値を、チャンク内のインデックスの最小値に等しいオフセット値に設定するように構成されている。さらに、計算ユニットは、インデックスの値とオフセット値との間の差を表すのに使用されるビットの数を示す第３ビットの第１セットの値を設定し、何れかのインデックスがユニークであることと、ユニークインデックスとオフセット値との間の差と、を示す第３ビットの少なくとも１つの第２セットの値を設定し、少なくとも１つのインデックスがユニークインデックスのリピート値であることと、チャンク内のユニークインデックスの相対位置と、を示す第３ビットの少なくとも１つの第３セットの値を設定する、ように構成されてもよい。別の実施形態では、計算ユニットは、圧縮チャンク内のインデックスを復元するのに使用されるレーンを示すビットフィールドを含むメタデータを生成するように構成されており、計算ユニットは、第１ビットと、第２ビットと、インデックスの値とオフセット値との間の差を表すのに使用されるビットの数を示す第３ビットの第１セットと、ビットフィールドと、を含むメタデータをメモリに書き込むように構成されている。
【００４８】
別の態様によれば、装置は、グラフィックスパイプラインによって処理されるプリミティブの頂点のインデックスを記憶するように構成されたインデックスバッファと、計算ユニットと、を備え、計算ユニットは、第１圧縮チャンクが単調であるか通常であるかを示す第１圧縮されたチャンク内の第１ビットと、第１圧縮チャンク内のインデックスの値に基づいて決定されるオフセットを定義する第１圧縮チャンク内の第２ビットと、第２ビットによって定義されたオフセットに基づいて第１圧縮チャンク内のインデックスの値を決定する第１圧縮チャンク内の第３ビットのセットと、に基づいて、インデックスを表すビットの第１圧縮チャンク内のインデックスを復元し、第１圧縮チャンク内の復元されたインデックスをインデックスバッファに書き込む、ように構成されている。計算ユニットは、第１圧縮チャンクの第１先頭アドレス及び第２圧縮チャンクの第２先頭アドレスを含むメタデータに基づいて、メタデータから、第１圧縮チャンクの第１ビットと、第２ビットと、第３ビットのセットと、を識別するように構成されている。さらに、計算ユニットは、隣接する三角形によって共有されない頂点のインデックスを第１圧縮チャンクのビットに追加することによって、第１圧縮チャンクが、連続して隣接するプリミティブを表す単調チャンクであると、第１ビットに基づいて決定するように構成されており、第２ビットの値は、次のプリミティブがリスタートインデックスの前のインデックスによって表される前のプリミティブに隣接していないことを示すリスタートインデックスではない、第１圧縮チャンク内の第１インデックスの値に等しいオフセット値に設定される。一実施形態では、第３ビットの第１セットの値は、第１圧縮チャンク内のリスタートインデックスの数を示し、第３ビットの少なくとも１つの他のセットは、第１圧縮チャンク内の少なくとも１つのリスタートインデックスの少なくとも１つの位置を示す。いくつかの実施形態では、計算ユニットは、第１圧縮チャンクが、プリミティブの全ての頂点のインデックスを使用してプリミティブを表す通常チャンクであると、第１ビットに基づいて決定するように構成されており、第２ビットは、第１圧縮チャンク内のインデックスの最小値に等しいオフセット値を示し、第３ビットの第１セットは、インデックスの値とオフセット値との間の差を表すのに使用されるビットの数を示し、第３ビットの少なくとも１つの第２セットは、少なくとも１つのインデックスがユニークであることと、ユニークインデックスとオフセット値との間の差と、を示し、第３ビットの少なくとも１つの第３セットは、少なくとも１つのインデックスがユニークインデックスのリピート値であることと、チャンク内のユニークインデックスの相対位置と、を示す。
【００４９】
さらに別の態様によれば、装置は、グラフィックスパイプラインによって処理されるプリミティブの頂点のインデックスを記憶するように構成されたインデックスバッファと、複数の計算ユニットと、を備え、複数の計算ユニットは、圧縮チャンクのメタデータにアクセスすることであって、メタデータは、圧縮チャンクが単調であるか通常であるかを示す第１ビットと、インデックスの値に基づいて決定されるオフセットを定義する第２ビットと、インデックスの特性を示すビットフィールドと、を含む、ことと、メタデータに基づいて圧縮チャンクを復元することと、復元されたインデックスをインデックスバッファに書き込むことと、を同時に行うように構成されている。いくつかの実施形態では、第１ビットは、圧縮チャンクが単調圧縮チャンクであることを示し、ビットフィールドは、圧縮チャンク内のリスタートインデックスの位置を示す。他の実施形態では、第１ビットは、圧縮チャンクが通常圧縮チャンクであることを示し、ビットフィールドは、複数の計算ユニットのうち何れが圧縮チャンク内のインデックスを復元するのに使用されるかを示し、メタデータは、圧縮チャンクのインデックスの値とオフセットとの間の差を表すのに使用されるビットの数を示すフィールドを含む。このような実施形態では、計算ユニットは、メタデータに記憶された圧縮チャンクの先頭アドレスに基づいて、圧縮チャンク内の圧縮インデックスにアクセスするように構成されており、計算ユニットは、圧縮インデックスと、オフセットと、ビットフィールドと、に基づいて、圧縮チャンクを復元するように構成されている。
【００５０】
いくつかの実施形態では、上記の装置及び技術は、図１〜図８を参照して上述した処理システム等の１つ以上の集積回路（ＩＣ）デバイス（集積回路パッケージ又はマイクロチップとも呼ばれる）を備えるシステムに実装される。これらのＩＣデバイスの設計及び製造には、電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールが使用される。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように１つ以上のＩＣデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ＩＣデバイスの設計又は製造の１つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【００５１】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ、磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、キャッシュ）、不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ）、又は、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし（例えば、システムＲＡＭ又はＲＯＭ）、コンピュータシステムに固定的に取り付けられてもよいし（例えば、磁気ハードドライブ）、コンピュータシステムに着脱可能に取り付けられてもよいし（例えば、光学ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））。
【００５２】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行されると、上記の技術の１つ以上の態様を実行するように１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【００５３】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、１つ以上のさらなるアクティビティが実行される場合があり、１つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【００５４】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【図１】
2021501938.tif 000005
【図２】
2021501938.tif 000006
【図３】
2021501938.tif 000007
【図４】
2021501938.tif 000008
【図５】
2021501938.tif 000009
【図６】
2021501938.tif 000010
【図７】
2021501938.tif 000011
【図８】
2021501938.tif 000012
【手続補正書】
【提出日】令和2年7月1日(2020.7.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
グラフィックスパイプラインによって処理されるプリミティブの複数の頂点のインデックスを表すビットのチャンクにアクセスすることと、
前記チャンクが単調であるか通常であるかを示す第１ビットの値を設定することと、
前記チャンク内のインデックスの値に基づいて決定されるオフセットを定義する第２ビットの値を設定することと、
前記第２ビットによって定義された前記オフセットに基づいて、前記チャンク内の前記インデックスの値を決定する第３ビットのセットの値を設定することであって、前記第３ビットの第１セットは、前記チャンク内の少なくとも１つのインデックスが、前記チャンク内の前のインデックスの値と等しくない値を有する点でユニークであることを示し、前記第３ビットの第１セットは、ユニークインデックスと前記オフセットとの間の差を示す、ことと、
前記第１ビットと、前記第２ビットと、前記第３ビットのセットと、によって表される圧縮チャンクをメモリに書き込むことと、
を行うように構成された計算ユニットを備える、
装置。
【請求項２】
前記計算ユニットは、
インデックスバッファに記憶された前記圧縮チャンクの先頭アドレスを表すメタデータを生成することと、
前記メタデータを前記メモリに書き込むことと、
を行うように構成されている、
請求項１の装置。
【請求項３】
前記チャンクは、隣接する三角形によって共有されない頂点のインデックスを前記チャンクの前記ビットに追加することによって、連続して隣接するプリミティブを表す単調チャンクであり、前記計算ユニットは、前記第１ビットの値を、前記チャンクが単調であることを示す第１値に設定することを行うように構成されている、
請求項２の装置。
【請求項４】
前記計算ユニットは、前記第２ビットの値を、次のプリミティブがリスタートインデックスの前のインデックスによって表される前のプリミティブに隣接していないことを示す前記リスタートインデックスではない、前記チャンク内の第１インデックスの値に等しいオフセット値に設定することを行うように構成されている、
請求項１の装置。
【請求項５】
前記計算ユニットは、前記チャンク内のリスタートインデックスの数を示す前記第３ビットの第１セットの値を設定することと、前記チャンク内の少なくとも１つのリスタートインデックスの少なくとも１つの位置を示す第３ビットの少なくとも１つの他のセットを設定することと、を行うように構成されている、
請求項１の装置。
【請求項６】
前記計算ユニットは、前記チャンク内のリスタートインデックスの位置を示すビットフィールドを含むメタデータを生成することと、前記第１ビットと、前記第２ビットと、前記ビットフィールドと、を含む前記メタデータを前記メモリに書き込むことと、を行うように構成されている、
請求項１〜５の何れかの装置。
【請求項７】
前記チャンクは、前記プリミティブの全ての頂点のインデックスを使用してプリミティブを表す通常チャンクであり、前記計算ユニットは、前記チャンクが通常であることを示すために、前記第１ビットの値を第２値に設定することを行うように構成されている、
請求項２の装置。
【請求項８】
前記計算ユニットは、前記第２ビットの値を、前記チャンク内の前記インデックスの最小値に等しいオフセット値に設定することを行うように構成されている、
請求項７の装置。
【請求項９】
前記計算ユニットは、
前記インデックスの値と前記オフセット値との間の差を表すのに使用されるビットの数を示す第３ビットの第２セットの値を設定することと、
少なくとも１つのインデックスがユニークインデックスのリピート値であることと、前記チャンク内の前記ユニークインデックスの相対位置と、を示す第３ビットの少なくとも１つの第３セットの値を設定することと、
を行うように構成されている、
請求項８の装置。
【請求項１０】
前記計算ユニットは、前記圧縮チャンク内のインデックスを復元するのに使用されるレーンを示すビットフィールドを含むメタデータを生成することを行うように構成されており、前記計算ユニットは、前記第１ビットと、前記第２ビットと、前記インデックスの値と前記オフセット値との間の差を表すのに使用されるビットの数を示す第３ビットの第１セットと、前記ビットフィールドと、を含む前記メタデータを前記メモリに書き込むことを行うように構成されている、
請求項８の装置。
【請求項１１】
グラフィックスパイプラインによって処理されるプリミティブの頂点のインデックスを記憶するように構成されたインデックスバッファと、
複数の計算ユニットと、を備え、
前記複数の計算ユニットは、
圧縮チャンクのメタデータにアクセスすることであって、前記メタデータは、前記圧縮チャンクが単調であるか通常であるかを示す第１ビットと、前記インデックスの値に基づいて決定されるオフセットを定義する第２ビットと、前記圧縮チャンク内の少なくとも１つのインデックスが、前記圧縮チャンク内の前のインデックスの値と等しくない値を有する点でユニークであることを示す第３ビットの第１セットであって、ユニークインデックスと前記オフセットとの間の差を示す第３ビットの第１セットと、を含む、ことと、
前記メタデータに基づいて前記圧縮チャンクを復元することと、
復元されたインデックスを前記インデックスバッファに書き込むことと、
を同時に行うように構成されている、
装置。
【請求項１２】
前記第１ビットは、前記圧縮チャンクが単調圧縮チャンクであることを示し、前記第３ビットの第２セットは、前記圧縮チャンク内のリスタートインデックスの位置を示す、
請求項１１の装置。
【請求項１３】
前記第１ビットは、前記圧縮チャンクが通常圧縮チャンクであることを示し、前記第３ビットの第２セットは、前記複数の計算ユニットのうち何れが前記圧縮チャンク内のインデックスを復元するのに使用されるかを示す、
請求項１１の装置。
【請求項１４】
前記メタデータは、前記圧縮チャンクの前記インデックスの前記値と前記オフセットとの間の差を表すのに使用されるビットの数を示すフィールドを含む、
請求項１１〜１３の何れかの装置。
【請求項１５】
前記計算ユニットは、メタデータに記憶された前記圧縮チャンクの先頭アドレスに基づいて、前記圧縮チャンク内の圧縮インデックスにアクセスするように構成されており、前記計算ユニットは、前記圧縮インデックスと、前記オフセットと、ビットフィールドと、に基づいて、前記圧縮チャンクを復元するように構成されている、
請求項１４の装置。
【国際調査報告】
2021501938.tif 000013
2021501938.tif 000014
2021501938.tif 000015