(57)【要約】レンダリングされるプリミティブのセットを定義するインデックスストリームからリセットインデックスを除去し、インデックスストリーム内のプリミティブを識別する技術が開示される。インデックスストリームは、中央処理装置で実行されているアプリケーションプログラムによって指定することができる。この技術は、オフセットベース技術を必要とするか非オフセットベース技術を必要とするかの何れかとして、インデックスストリームのプリミティブトポロジを分類することを含む。この分類は、プリミティブトポロジに従って、後続の各インデックスが前のインデックスを用いてプリミティブ（例えば、ラインストリップ、トライアングルストリップ等）を形成することができるかどうかを判別することによって行われる。後続の各インデックスが前のインデックスを用いてプリミティブを形成することができる場合には、使用される技術は、非オフセットベース技術である。後続の各インデックスが前のインデックスを用いてプリミティブを形成しないが、代わりに、少なくとも２つのインデックスが、新たなプリミティブ（例えば、ラインリスト、トライアングルリスト等）を形成するのに必要とされる場合には、使用される技術は、オフセットベース技術である。【選択図】図５
2019537799.tif 000002
【特許請求の範囲】
【請求項１】
インデックスのセットからプリミティブを識別する方法であって、
前記インデックスのセットのプリミティブトポロジを識別することであって、前記プリミティブトポロジは、プリミティブに含まれるインデックスの数を指定する、ことと、
前記インデックスのセットからプリミティブ候補を識別することであって、前記プリミティブ候補の各々は、前記プリミティブトポロジに従って、前記プリミティブに含まれる数のインデックスを含む、ことと、
出力プリミティブを得るために、リセットプリミティブを含むプリミティブ候補を破棄することと、
プリミティブ毎の処理のために、前記出力プリミティブをワールド空間パイプラインに転送することと、を含む、
方法。
【請求項２】
インデックスのシーケンスにおいて、前記プリミティブトポロジが、新たなプリミティブが後続の単一のインデックスの各々を用いて形成されないタイプであると判別することと、
前記判別したことに応じて、
前記インデックスのセットのリセットインデックスの１つ以上の位置に基づいて１つ以上のオフセットを識別することと、
前記１つ以上のオフセットに基づいて、前記プリミティブ候補を含むインデックスを識別することと、
によって、前記インデックスのセットから前記プリミティブ候補を識別することと、をさらに含む、
請求項１の方法。
【請求項３】
前記１つ以上のオフセットを識別することは、
前記インデックスのセットから初期プリミティブ候補のセットを識別することであって、初期プリミティブ候補の各々は、前記プリミティブ候補の異なるプリミティブ候補に対応する、ことと、
前記初期プリミティブ候補内のリセットインデックスの存在及び位置に基づいて、オフセットを前記プリミティブ候補に割り当てることと、を含む、
請求項２の方法。
【請求項４】
オフセットをプリミティブ候補に割り当てることは、
前記プリミティブ候補の直前のプリミティブ候補に対応する初期プリミティブ候補が少なくとも１つのリセットインデックスを含むかどうかを判別することと、
前記初期プリミティブ候補が少なくとも１つのリセットインデックスを含む場合に、前記オフセットを、前記初期プリミティブ候補の最新のリセットインデックスの位置として割り当てることであって、インデックスの位置は、前記初期プリミティブ候補の最新のインデックスについて０で開始し、前記プリミティブトポロジに従ってプリミティブに含まれるインデックスの数から前記初期プリミティブ候補の最古のインデックスについて１を差し引いた範囲に及ぶ、こと、又は、
前記初期プリミティブ候補が少なくとも１つのリセットインデックスを含まない場合に、前記オフセットを、前記プリミティブ候補の直前の前記プリミティブ候補に割り当てられたオフセットとして割り当てることと、を含む、
請求項３の方法。
【請求項５】
前記インデックスのセットから前記プリミティブ候補を識別することは、
前記プリミティブ候補に割り当てられた前記オフセットの値と等しいインデックスの数だけ古いインデックスに向かってシフトした前記インデックスのセットの前記初期プリミティブ候補のインデックスの位置に存在する前記インデックスのセットのインデックスを、前記プリミティブ候補のインデックスとして識別することを含む、
請求項４の方法。
【請求項６】
インデックスのシーケンスにおいて、前記プリミティブトポロジが、新たなプリミティブが後続の単一インデックスの各々を用いて形成されるタイプであると判別することと、
前記判別したことに応じて、前記インデックスのセットにおいて、プリミティブに含まれる数のインデックスのそれぞれ連続するグループとして前記プリミティブ候補を識別することと、をさらに含む、
請求項１の方法。
【請求項７】
レンダリングされるプリミティブを定義するインデックスを含むように指定されたインデックスバッファ内の前記インデックスのセットをプロセッサから受信することと、
前記プロセッサから前記プリミティブトポロジの指標を受信することと、をさらに含む、
請求項１の方法。
【請求項８】
前記プリミティブ毎の処理は、プリミティブカリング、ジオメトリシェーディング及びテッセレーションのうち少なくとも１つを含む、
請求項１の方法。
【請求項９】
アクセラレーテッド処理デバイス（ＡＰＤ）であって、
１つ以上のシェーダエンジンと、
グラフィックス処理パイプラインであって、ワールド空間パイプラインと、入力アセンブラステージと、を含むグラフィックス処理パイプラインと、を備え、
前記入力アセンブラステージは、
インデックスのセットのプリミティブトポロジを識別することであって、前記プリミティブトポロジは、プリミティブに含まれるインデックスの数を指定する、ことと、
前記インデックスのセットからプリミティブ候補を識別することであって、前記プリミティブ候補の各々は、前記プリミティブトポロジに従って、前記プリミティブに含まれる数のインデックスを含む、ことと、
出力プリミティブを得るために、リセットプリミティブを含むプリミティブ候補を破棄することと、
プリミティブ毎の処理のために、前記出力プリミティブをワールド空間パイプラインに転送することと、
によって、前記インデックスのセットからプリミティブを識別するように構成されている、
アクセラレーテッド処理デバイス。
【請求項１０】
前記入力アセンブラステージは、
インデックスのシーケンスにおいて、前記プリミティブトポロジが、新たなプリミティブが後続の単一インデックスの各々を用いて形成されないタイプであると判別することとし、
前記判別したことに応じて、
前記インデックスのセットのリセットインデックスの１つ以上の位置に基づいて１つ以上のオフセットを識別することと、
前記１つ以上のオフセットに基づいて、前記プリミティブ候補を含むインデックスを識別することと、
によって、前記インデックスのセットから前記プリミティブ候補を識別するようにさらに構成されている、
請求項９のＡＰＤ。
【請求項１１】
前記入力アセンブラステージは、
前記インデックスのセットから初期プリミティブ候補のセットを識別することであって、初期プリミティブ候補の各々は、前記プリミティブ候補の異なるプリミティブ候補に対応する、ことと、
前記初期プリミティブ候補内のリセットインデックスの存在及び位置に基づいて、オフセットを前記プリミティブ候補に割り当てることと、
によって、前記１つ以上のオフセットを識別するように構成されている、
請求項１０のＡＰＤ。
【請求項１２】
前記入力アセンブラステージは、
前記プリミティブ候補の直前のプリミティブ候補に対応する初期プリミティブ候補が少なくとも１つのリセットインデックスを含むかどうかを判別することと、
前記初期プリミティブ候補が少なくとも１つのリセットインデックスを含む場合に、前記オフセットを、前記初期プリミティブ候補の最新のリセットインデックスの位置として割り当てることであって、インデックスの位置は、前記初期プリミティブ候補の最新のインデックスについて０で開始し、前記プリミティブトポロジに従ってプリミティブに含まれるインデックスの数から前記初期プリミティブ候補の最古のインデックスについて１を差し引いた範囲に及ぶ、こと、又は、
前記初期プリミティブ候補が少なくとも１つのリセットインデックスを含まない場合に、前記オフセットを、前記プリミティブ候補の直前の前記プリミティブ候補に割り当てられるオフセットとして割り当てることと、
によって、オフセットをプリミティブ候補に割り当てるように構成されている、
請求項１１のＡＰＤ。
【請求項１３】
前記入力アセンブラステージは、
前記プリミティブ候補に割り当てられた前記オフセットの値と等しいインデックスの数だけ古いインデックスに向かってシフトした前記インデックスのセットの前記初期プリミティブ候補のインデックスの位置に存在する前記インデックスのセットのインデックスを、前記プリミティブ候補のインデックスとして識別することによって、前記インデックスのセットから前記プリミティブ候補を識別するように構成されている、
請求項１２のＡＰＤ。
【請求項１４】
前記入力アセンブラステージは、
前記プリミティブ候補の直前のプリミティブ候補に対応する前記初期プリミティブ候補が少なくとも１つのリセットインデックスを含むかどうかに基づいて、前記初期プリミティブ候補の最新のリセットインデックスの位置、又は、前記プリミティブ候補の直前のプリミティブ候補に割り当てられたオフセットを前記オフセットとして選択するように構成されたマルチプレクサを含む、
請求項１２のＡＰＤ。
【請求項１５】
前記入力アセンブラステージは、
インデックスのシーケンスにおいて、前記プリミティブトポロジが、新たなプリミティブが後続の単一インデックスの各々を用いて形成されるタイプであると判別することと、
前記判別したことに応じて、前記インデックスのセットにおいて、プリミティブに含まれる数のインデックスのそれぞれ連続するグループとして前記プリミティブ候補を識別することと、を行うようにさらに構成されている、
請求項９のＡＰＤ。
【請求項１６】
前記入力アセンブラステージは、
レンダリングされるプリミティブを定義するインデックスを含むように指定されたインデックスバッファ内の前記インデックスのセットをプロセッサから受信することと、
前記プロセッサから前記プリミティブトポロジの指標を受信することと、
を行うようにさらに構成されている、
請求項９のＡＰＤ。
【請求項１７】
前記プリミティブ毎の処理は、プリミティブカリング、ジオメトリシェーディング及びテッセレーションのうち少なくとも１つを含む、
請求項９のＡＰＤ。
【請求項１８】
コンピュータシステムであって、
プロセッサと、
アクセラレーテッド処理デバイスと、を備え、
前記アクセラレーテッド処理デバイスは、
１つ以上のシェーダエンジンと、
グラフィックス処理パイプラインであって、ワールド空間パイプラインと、入力アセンブラステージと、を備え、
前記入力アセンブラステージは、
インデックスのセットのプリミティブトポロジを識別することであって、前記プリミティブトポロジは、プリミティブに含まれるインデックスの数を指定する、ことと、
前記インデックスのセットからプリミティブ候補を識別することであって、前記プリミティブ候補の各々は、前記プリミティブトポロジに従って、前記プリミティブに含まれる数のインデックスを含む、ことと、
出力プリミティブを得るために、リセットプリミティブを含むプリミティブ候補を破棄することと、
プリミティブ毎の処理のために、前記出力プリミティブをワールド空間パイプラインに転送することと、
によって、前記プロセッサから受信した前記インデックスのセットからプリミティブを識別するように構成されている、
コンピュータシステム。
【請求項１９】
前記入力アセンブラステージは、
インデックスのシーケンスにおいて、前記プリミティブトポロジが、新たなプリミティブが後続の単一インデックスの各々を用いて形成されないタイプであると判別することと、
前記判別したことに応じて、
前記インデックスのセットのリセットインデックスの１つ以上の位置に基づいて１つ以上のオフセットを識別することと、
前記１つ以上のオフセットに基づいて、前記プリミティブ候補を含むインデックスを識別することと、
によって、前記インデックスのセットから前記プリミティブ候補を識別するようにさらに構成されている、
請求項１８のコンピュータシステム。
【請求項２０】
前記入力アセンブラステージは、
インデックスのシーケンスにおいて、前記プリミティブトポロジが、新たなプリミティブが後続の単一インデックスの各々を用いて形成されるタイプであると判別することと、
前記判別したことに応じて、前記インデックスのセットにおいて、プリミティブに含まれる数のインデックスのそれぞれ連続するグループとして前記プリミティブ候補を識別することと、を行うようにさらに構成されている、
請求項１８のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１１月１７日に出願された米国特許出願第１５／３５４，５１３号及び２０１６年１１月２４日に出願された欧州特許出願第１６２００４６３．４号の利益を主張するものであり、これらは参照により本明細書に完全に記載されているものとして援用される。
【０００２】
開示された実施形態は、概して、グラフィックス処理に関し、特に、入力インデックスストリームのプリミティブを識別することに関する。
【背景技術】
【０００３】
三次元グラフィックスをレンダリングするハードウェアは、スクリーンに描かれるプリミティブを指定する入力を受け付ける。この入力の少なくも一部は、プリミティブの形状、位置及び属性を指定する頂点を指すインデックスを含む。通常、これらのインデックスは、ユーザが提供するフォーマットから、グラフィックスハードウェアでの使用に適したフォーマットに処理する必要がある。レンダリングの動作は、類似しているが独立した多数の操作（例えば、異なるピクセルのカラー値の計算、異なる頂点の位置の変換等）を含むので、グラフィックスハードウェアは、通常、超並列である。超並列処理装置に十分な負荷を与えて高度に利用できるようにするには、入力インデックスを迅速且つ効率的に処理する必要がある。
【０００４】
添付図面と併せて例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【０００５】
【図１】１つ以上の開示された実施形態を実装し得る例示的なデバイスのブロック図である。
【図２】一例によるアクセラレーテッド処理デバイスのブロック図である。
【図３】図２に示すグラフィックス処理パイプラインの追加の詳細を示すブロック図である。
【図４】例による様々なプリミティブトポロジの図である。
【図５】一例による、特定のプリミティブトポロジが与えられた場合に、リセットインデックスを含み得るインデックスのセットからプリミティブを識別する方法のフロー図である。
【図６】インデックスのチャンクからプリミティブを識別するためのオフセットベース技術の適用例を示す図である。
【図７】一例による、特定のプリミティブトポロジが与えられた場合に、リセットインデックスを含み得るインデックスのセットからプリミティブを識別する方法のフロー図である。
【図８】インデックスのチャンクからプリミティブを識別するための非オフセットベース技術の適用例を示す図である。
【発明を実施するための形態】
【０００６】
本開示は、レンダリングされるプリミティブのセットを定義するインデックスストリームからリセットインデックスを除去し、プリミティブを識別するための技術に関する。インデックスストリームを、グラフィックスカードの外部の中央処理装置から受信することができ、中央処理装置で実行されるアプリケーションプログラムによって指定することができる。この技術は、オフセットベースの技術を必要とするか、非オフセットベースの技術を必要とするかの何れかとして、インデックスストリームのプリミティブトポロジを分類することを含む。この分類は、プリミティブトポロジに従って、後続するインデックスの各々が先行するインデックスを有するプリミティブ（例えば、ラインストリップ、トライアングルストリップ）を形成できるかどうかを判別することによって行われる。後続するインデックスの各々が先行するインデックスを有するプリミティブを形成できる場合には、使用される技術は、非オフセットベース技術である。後続するインデックスの各々が先行するインデックスを有するプリミティブを形成しないが、その代わりに、少なくとも２つのインデックスが、新たなプリミティブ（例えば、ラインリスト、トライアングルリスト）を形成するのに必要とされる場合には、使用される技術は、オフセットベース技術である。
【０００７】
非オフセットベース技術は、プリミティブになり得るインデックスストリーム内のインデックスの各グループを識別し、リセットインデックスを含む全てのグループを除去することを含む。オフセットベース技術は、より複雑であり、インデックスストリームから出力プリミティブが得られるオフセットを計算することを含む。オフセットは、インデックスのストリーム内のリセットインデックスの位置に関連する。
【０００８】
オフセットを決定するために、最初に、プリミティブトポロジに従って、リセットインデックスの位置に関係なく、プリミティブになる可能性のあるインデックスの各グループを識別することによって、初期プリミティブ候補のセットが識別される。次に、初期プリミティブ候補毎に、プリミティブにおける最新のリセットインデックスの位置が決定される。
【０００９】
位置の範囲は、０から、プリミティブのサイズから１を引いた値までであり、最新のインデックスから始まる。これらの位置は、最終プリミティブ候補を識別するために使用される。より具体的には、最終プリミティブ候補のセットが生成され、最終プリミティブ候補の各々は、異なる初期プリミティブ候補に対応する。最終プリミティブ候補の各々には、直前の初期プリミティブ候補のリセットインデックスの位置、及び、初期プリミティブ候補がリセットインデックスを有していない場合には直前の最終プリミティブ候補に割り当てられたオフセット、の何れかに等しいオフセットが割り当てられる。
【００１０】
オフセットは、最終プリミティブ候補のインデックスを識別するために使用される。より具体的には、任意の特定の最終プリミティブ候補のインデックスは、入力インデックスストリームの入力インデックスの位置が、最終プリミティブ候補に割り当てられたオフセットに等しいインデックスの数だけ古いインデックスに向かってシフトした場合に生じるインデックスとして識別される。例えば、最終プリミティブ候補に１のオフセットが割り当てられた場合、最終プリミティブ候補には、初期プリミティブ候補に割り当てられたインデックスよりも１つ古いインデックスストリームのインデックスが割り当てられる。具体的な例では、インデックスストリームがインデックス１、Ｒ、３、４、５、６（ここで、「Ｒ」は、リセットインデックスである）を含み、初期プリミティブ候補が［４、５、６］であり、対応する最終プリミティブ候補が１のオフセットを有する場合、最終プリミティブ候補は、初期プリミティブ候補のインデックスを左に１シフトしたインデックス（インデックス３、４、５）を有する。最終プリミティブ候補が得られると、リセットインデックスを有するプリミティブが除去され、残りのプリミティブが出力プリミティブとなり、グラフィックス処理パイプラインで使用するために出力される。
【００１１】
図１は、本開示の１つ以上の態様が実装された例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージデバイス１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力デバイス１０８及び出力デバイス１１０をそれぞれ駆動する入力ドライバ１１２及び出力ドライバ１１４も含む。デバイス１００は、図１に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【００１２】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含む。
【００１３】
ストレージデバイス１０６は、固定又は着脱可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１４】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤ１１６は、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス１１８に提供するように構成されている。
【００１５】
ＡＰＤ１１６は、単一命令複数データ（ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理装置を含む。しかしながら、ＡＰＤ１１６によって実行されるものとして説明した機能は、ＳＩＭＤパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【００１６】
図２は、一例によるアクセラレーテッド処理デバイス１１６のブロック図である。プロセッサ１０２は、プロセッサ１０２による実行のための１つ以上の制御論理モジュールをシステムメモリ１０４内に保持している。制御論理モジュールは、オペレーティングシステム１２０と、ドライバ１２２と、アプリケーション１２６と、を含む。これらの制御論理モジュールは、プロセッサ１０２及びＡＰＤ１１６の様々な態様の動作を制御する。例えば、オペレーティングシステム１２０は、ハードウェアと直接通信し、プロセッサ１０２で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするために、プロセッサ１０２で実行中のソフトウェア（例えば、アプリケーション１２６）へのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供することによって、ＡＰＤ１１６の動作を制御する。また、ドライバ１２２は、ＡＰＤ１１６の処理コンポーネント（例えば、以下でさらに詳細に説明するＳＩＭＤユニット１３８等）による実行のために、シェーダプログラムをコンパイルするジャストインタイムコンパイラを含む。
【００１７】
ＡＰＤ１１６は、例えばグラフィックス処理及び非グラフィックス処理等のように、並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングするために使用することができる。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンド、又は、グラフィックス処理パイプライン１３４の「正常な」情報フローの一部ではないコマンドに基づいて、例えばビデオ、物理シミュレーション、計算流体力学又は他のタスクに関係する動作等のようにグラフィックス処理に直接関連しない（若しくは関連していない）計算処理動作を実行する。
【００１８】
ＡＰＤ１１６は、ＳＩＭＤパラダイムに従って、プロセッサ１０２の要求に応じて並列に動作を実行するように構成された１つ以上のＳＩＭＤユニット１３８を有するシェーダエンジン１３２（本明細書では、まとめて「プログラマブル処理装置２０２」と呼ばれる）を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含んでおり、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行するのに必要とされていない場合、レーンを予測によってスイッチオフにすることができる。予測を使用して、分岐した制御フローを有するプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
【００１９】
シェーダエンジン１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並行して実行されるプログラムの単一のインスタンス化（instantiation）を表す。ワークアイテムは、単一のＳＩＭＤユニット１３８上で「ウェーブフロント（wavefront）」として同時に実行することができる。複数のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれてもよい。ワークグループを構成する各ウェーブフロントを実行することによって、ワークグループを実行することができる。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で連続して実行されてもよいし、異なるＳＩＭＤユニット１３８上で部分的に又は完全に並列して実行されてもよい。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で同時に実行可能なワークアイテムの最大の集合と考えることができる。したがって、プロセッサ１０２から受信したコマンドが、特定のプログラムが単一のＳＩＭＤユニット１３８上で同時に実行できない程度に並列化されることを示す場合、当該プログラムは、２つ以上のＳＩＭＤユニット１３８で並列化され、又は、同じＳＩＭＤユニット１３８上で直列化（必要に応じて、並列化及び直列化の両方が行われる）されたウェーブフロントに分割される。スケジューラ１３６は、異なるシェーダエンジン１３２及びＳＩＭＤユニット１３８で様々なウェーブフロントをスケジュールすることに関連する動作を実行するように構成されている。スケジュールすることは、ＳＩＭＤユニット１３８上で実行するためのウェーブフロントを割り当てること、ウェーブフロントがいつ終了したかを決定することと、ウェーブフロントがいつストールし、他のウェーブフロントとスワップアウトされるかを判別することと、他のスケジューリングタスクを実行すること、を含む。
【００２０】
シェーダエンジン１３２によって提供される並列性は、例えば、ピクセル値計算、頂点変換及び他のグラフィックス動作等のグラフィックス関連動作に適している。プロセッサ１０２からグラフィックス処理コマンドを受信するグラフィックス処理パイプライン１３４は、並列実行のために計算タスクをシェーダエンジン１３２に提供する。
【００２１】
また、シェーダエンジン１３２は、グラフィックスに関連しないか、グラフィックス処理パイプライン１３４の「正常」動作（例えば、グラフィックス処理パイプライン１３４の動作のために実行される処理を補足するのに実行されるカスタム動作）の一部として実行されない計算タスクを実行するために使用される。プロセッサ１０２で実行中のアプリケーション１２６又は他のソフトウェアは、係る計算タスクを定義するプログラム（「計算シェーダプログラム」とよく呼ばれる）を、実行のためにＡＰＤ１１６に送信する。
【００２２】
図３は、図２に示すグラフィックス処理パイプライン１３４の追加の詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、入力アセンブラステージ３０２と、ワールド空間（world-space）パイプライン３０４と、ピクセルパイプライン３０６と、を含む。入力アセンブラステージ３０２は、グラフィックス処理パイプライン１３４による処理のために、プロセッサ１０２から受信した入力を処理し、フォーマットする。ワールド空間パイプライン３０４は、三次元ワールド空間で定義されたオブジェクトをスクリーン空間で定義された三角形に変換する頂点及びプリミティブ操作を実行する。ピクセルパイプライン３０６は、スクリーン空間内に定義された三角形を処理してピクセルカラーを生成し、フレームバッファ３０８に出力する。入力アセンブラステージ３０２、ワールド空間パイプライン３０４及びピクセルパイプライン３０６の各々は、（固定機能ハードウェア及びプログラム可能ハードウェアを含む）ハードウェアとソフトウェアとの組み合わせとして、（全ての固定機能ハードウェア、全てのプログラム可能ハードウェア、若しくは、これらの組み合わせを含む）全てのハードウェアとして、又は、ハードウェアプロセッサで実行中のソフトウェアとして全体的に実装することができる。
【００２３】
入力アセンブラステージ３０２は、ユーザが充填したバッファ（例えば、アプリケーション１２６等のプロセッサ１０２によって実行されるソフトウェアの要求によって充填されたバッファ）からプリミティブデータを読み出し、パイプラインの残りの部分によって使用されるプリミティブにデータをアセンブルする。入力アセンブラステージ３０２は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。
【００２４】
ワールド空間パイプライン３０４は、プロセッサ１０２から受信した入力を、スクリーンピクセルにレンダリングするのにより適した形式に変換する機能を実行する。より具体的には、ワールド空間パイプライン３０４は、頂点シェーディング機能、オプションのテッセレーション機能（テッセレーションが有効にされている場合）、及び、オプションのジオメトリシェーディング機能（ジオメトリシェーディングが有効にされている場合）を実行する。
【００２５】
頂点シェーディングは、例えば、トランスフォーム、スキニング、モーフィング、頂点単位のライティング等の様々な頂点単位の操作を実行することを含む。トランスフォーム操作は、頂点の座標をトランスフォーム（変換）するための様々な操作を含むことができる。これらの操作は、モデリングトランスフォーム、表示トランスフォーム（viewing transformations）、投影トランスフォーム、パースペクティブ（perspective）分割及びビューポートトランスフォームのうち１つ以上を含んでもよい。本明細書では、このようなトランスフォームは、トランスフォームが実行される頂点の座標、つまり「位置」を変更すると考えられる。頂点シェーディングの他の操作は、座標以外の属性を変更してもよい。頂点シェーディングは、１つ以上のシェーダエンジン１３２で実行される頂点シェーダプログラムとして部分的又は完全に実装される。いくつかの例では、頂点シェーダプログラムは、プロセッサ１０２によって提供され、コンピュータプログラマによって事前に生成されたプログラムに基づいている。ドライバ１２２は、このようなプログラムをコンパイルして、シェーダエンジン１３２内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。他の例では、頂点シェーダプログラムは、ドライバ１２２によって直接提供されるか、ＡＰＤ１１６内に記憶されるか、他の技術的に実現可能な手段によって提供される。
【００２６】
テッセレーションは、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。テッセレーションは、入力プリミティブに基づいてテッセレーションのパッチを生成し、パッチのサンプルのセットを生成し、パッチのサンプルに対応する頂点の頂点位置を計算することを含む。テッセレーションは、プログラマブル処理装置２０２上で実行されるシェーダプログラムによって、部分的又は完全に実行することができる。
【００２７】
ジオメトリシェーディングは、プリミティブ毎に頂点操作を実行する。様々な異なるタイプの操作を、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン（fur-fin）生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含むジオメトリシェーディングを介して実行することができる。ジオメトリシェーディングのための操作は、プログラマブル処理装置２０２上で実行されるシェーダプログラムによって実行されてもよい。
【００２８】
ワールド空間パイプライン３０４は、ピクセル生成及び最終的にフレームバッファ３０８に書き込むためのプリミティブ（一般的に三角形）をピクセルパイプライン３０６に出力する。フレームバッファ３０８の内容が読み出され、ディスプレイデバイス１１８に表示される。ピクセルパイプライン３０６は、ラスタライズ及びピクセルシェーディングを実行する。
【００２９】
ラスタライズは、何れのスクリーンピクセル（又は、サブピクセルサンプル）が特定のプリミティブによってカバーされるかを判別することを含む。ピクセルシェーディングは、ワールド空間パイプライン３０４で生成されたプリミティブ及びラスタライズの結果に基づいてスクリーンピクセルの出力値を決定することを含む。ピクセルシェーディングは、テクスチャメモリからテクスチャを適用することを含んでもよい。ピクセルシェーディングのための操作は、プログラマブル処理装置２０２上で実行される１つ以上のシェーダプログラムによって実行されてもよい。ラスタライズ及びシェーディングの後、ピクセルパイプライン３０６は、ディスプレイデバイス１１８上に表示するために、結果をフレームバッファ３０８に書き込む。
【００３０】
入力アセンブラステージ３０２の１つのタスクは、プロセッサ１０２から受信した入力インデックスのストリーム内のプリミティブを識別することである。インデックスは、頂点バッファに記憶されている頂点に対する参照である。入力アセンブラステージ３０２によるこの分析では、インデックスは、頂点よりも小さく、処理されるリソース（例えば、記憶素子、ワイヤ等）がより少ないので、参照する頂点の代わりにインデックスが使用される。
【００３１】
入力インデックスからのプリミティブの識別は、グラフィックス処理パイプライン１３４の操作のボトルネックとして作用する場合がある。これは、グラフィックス処理パイプライン１３４の一部が、様々な目的のためにプリミティブを識別するデータを使用し、その情報が所定時間利用できない場合に、パイプラインのこれらの部分が当該所定時間の間に有用な作業を実行することができない可能性があるからである。
【００３２】
プロセッサ１０２から受信した入力頂点のストリームを処理することは、いくつかの理由から複雑なタスクである。入力頂点のストリームは、インデックスがプリミティブを形成するためにどのように解釈されるかを示すプリミティブトポロジ（例えば、ラインリスト、ラインストリップ、トライアングルリスト、トライアングルストリップ等）を指定するインデックス及びメタデータのストリームとして受信される。したがって、同じインデックスのセットを、指定されたプリミティブトポロジに基づいて異なるように解釈することができる。さらに、インデックスのストリームは、多くの場合、入力インデックスのストリームを解釈するのを助けるために使用される特別なインデックス値である１つ以上のリセットインデックスを含む。リセットインデックスは、プリミティブトポロジに応じて異なる方法で解釈される。これらの要因は、入力インデックスのストリームからのプリミティブの識別を複雑なタスクにする。
【００３３】
このタスクは、ＡＰＤ１１６の極めて並列な性質によってさらに複雑化する。より具体的には、入力アセンブラステージ３０２が複数のシェーダエンジン１３２の動作のボトルネックとして作用しないように、入力アセンブラステージ３０２が多くのシェーダエンジン１３２に並列にプリミティブを提供することが望ましい。したがって、入力アセンブラステージ３０２がプリミティブを識別するのにあまりに多くの時間を消費する場合、シェーダエンジン１３２は、プリミティブに関連する動作を実行する場合に、全容量までロードすることができない可能性がある。
【００３４】
入力インデックスを異なるシェーダエンジン１３２に迅速に分配するための１つの技術は、入力インデックスのストリームを、同じ数のインデックスを有するチャンクに単に分割し、チャンクを、処理のために異なるシェーダエンジン１３２に送信することである。しかしながら、この技術の１つの問題は、任意の所定のチャンク内のリセットインデックスの数及び位置が変化するために、任意の所定のチャンクによって表されるプリミティブの実際の数が大きく変化する場合があることである。以下に例を示す。この例では、プリミティブトポロジは、ラインリストである。このプリミティブトポロジでは、２つのインデックス毎に異なるラインを指定する。例えば、インデックス１、２がラインを指定し、インデックス３、４がラインを指定し、インデックス５、６がラインを指定する等である。２つのインデックスのシーケンスがリセットインデックスを含む場合、当該シーケンスは無効なプリミティブとみなされる。このプリミティブトポロジでは、次のインデックスのチャンクに５つのラインが含まれている。（以下の例では、チャンクは「孤立した状態で」示されており、前後のチャンクのインデックスを考慮しないことを意味する。しかしながら、チャンクは、通常、前後のチャンクと連続して解釈される。言い換えると、特定のチャンクの最古のインデックスは、直前のチャンクの最新のインデックスを用いてプリミティブを形成する場合がある。）
１、２、Ｒ、４、５、Ｒ、７、８、９、１０、１１、１２
表１：インデックスのチャンクの第１例
【００３５】
表１では、［１、２］は第１プリミティブであり、［４、５］は第２プリミティブであり（Ｒは、リセットプリミティブである）、［７、８］は第３プリミティブであり、［９、１０］は第４プリミティブであり、［１１、１２］は第５ラインである。次のインデックスのチャンクは、６つのプリミティブを含む。
１、２、３、４、５、６、７、８、９、１０、１１、１２
表２：インデックスのチャンクの第２例
【００３６】
表２では、［１、２］は第１ラインであり、［３、４］は第２ラインであり、［５、６］は第３ラインであり、［７，８］は第４ラインであり、［９、１０］は第５ラインであり、［１１、１２］は第６ラインである。表１のチャンクと表２のチャンクの両方とも１２のインデックスを含むが、これらの２つのチャンクは異なる数のプリミティブを有する。この差異は、プリミティブ毎の処理を実行するために異なるシェーダエンジン１３２に同じサイズのチャンクを割り当てることによって、これらの異なるシェーダエンジン１３２が異なる量の作業を受信し、したがって一方のシェーダエンジン１３２が他方のシェーダエンジン１３２よりもアイドル状態になることを示す。
【００３７】
したがって、入力インデックスのストリームからプリミティブを迅速に識別するための技術が本明細書で提供される。この技術により、プリミティブを、処理のために異なるシェーダエンジン１３２に効率的に並列伝送するために抽出しパックすることができるように、十分に迅速に識別することが可能になる。それぞれ異なるタイプのプリミティブトポロジを処理するために使用される２つの技術が本明細書で提供される。
【００３８】
図５及び図６に関して以下に説明する第１技術は、全ての新たなインデックスが、必ずしも前のインデックスを用いて新たなプリミティブを形成しないプリミティブトポロジに対して使用される。概して、このタイプのプリミティブトポロジは、例えばラインストリップ、トライアングルストリップ等のストリップタイプのトポロジを含み、後続の各インデックスが当該インデックスの直前のインデックスを有するプリミティブを形成する。例えば、クワッドストリップ等のいくつかのストリップタイプのトポロジは、第１タイプのプリミティブトポロジに含まれず、例えばポイントリスト等のいくつかのリストタイプのトポロジが第１タイプのプリミティブトポロジに含まれる。第１技術は、本明細書において「オフセットベース技術」と呼ばれる場合がある。
【００３９】
図７及び図８に関して以下に説明する第２技術は、インデックスのチャンク内の後続の各インデックスが新たなプリミティブを生成する可能性を有するプリミティブトポロジに使用される。概して、このタイプのプリミティブトポロジは、例えばラインリスト、ラインストリップ等のリストタイプのトポロジを含む。第２技術は、本明細書において「非オフセットベース技術」と呼ばれる場合がある。これらの２つの技術の相違点は、以下の開示を参照すると、より明らかになるであろう。
【００４０】
図４は、例による様々なプリミティブトポロジの図である。プリミティブトポロジは、考えられる全てのプリミティブトポロジを含むわけではなく、最も一般的に使用されるトポロジの多くを含む。当業者は、本明細書に記載の原理及び技術を他のプリミティブトポロジに適用することができるであろう。図示されている各プリミティブトポロジは、いくつかの頂点を示している。各頂点に示されている数字は、頂点を参照するインデックスである。プリミティブトポロジを説明する上での明確さのために、リセットインデックスは、図４に関して説明されていない。しかし、以下に示すインデックスのシーケンスに含まれる１つ以上のリセットインデックスは、これらのシーケンスが解釈される方法を変更する。
【００４１】
トライアングルリストトポロジ４０２は、３つのインデックスの各シーケンスが異なる三角形を定義するトポロジである。したがって、インデックス０、１、２、３、４、５、６、７、８のシーケンスは、３つの三角形（つまり、三角形［０、１、２］、三角形［３、４、５］及び三角形［６、７、８］）を定義する。このプリミティブトポロジのインデックスは、プリミティブを識別するために３つのグループ（２以上である）で検査されるので、このプリミティブトポロジは、オフセットベース技術で処理される。
【００４２】
トライアングルストリップトポロジ４０４は、最初の３つのインデックスの後に、後続の各インデックスが直前の２つのインデックスを用いて新たな三角形を形成するトポロジである。したがって、インデックス０、１、２、３、４、５のシーケンスは、４つの三角形（つまり、三角形［０、１、２］、三角形［１、２、３］、三角形［２、３、４］及び三角形［３、４、５］）を生成する。このプリミティブトポロジは、インデックスのシーケンスにおける後続の各インデックスが新たなプリミティブを生成する可能性を有するので、非オフセットベース技術で処理される。
【００４３】
ラインリストトポロジ４０６は、２つのインデックスの各シーケンスが異なるラインを定義するトポロジである。したがって、インデックス０、１、２、３、４、５のシーケンスは、３つのライン（つまり、ライン［０、１］、ライン［２、３］及びライン［４、５］）を定義する。このプリミティブトポロジのインデックスは、２つのグループで検査されるので、このプリミティブトポロジは、オフセットベース技術で処理される。
【００４４】
ラインストリップトポロジ４０８は、最初の２つのインデックスの後に、後続の各インデックスが直前のインデックスを用いて新たなラインを形成するトポロジである。したがって、インデックス０、１、２、３、４のシーケンスは、４つのライン（つまり、ライン［０、１］、ライン［１、２］、ライン［２、３］及びライン［３、４］）を生成する。このプリミティブトポロジは、インデックスのシーケンスにおける後続の各インデックスが新たなプリミティブを生成する可能性を有するので、非オフセットベース技術で処理される。ラインループトポロジは、ラインストリップトポロジと同じであるが、最後のインデックスが最初のインデックスに接続される点が異なっている。
【００４５】
隣接を伴うラインリストトポロジ４１０は、４つのインデックスの各シーケンスが異なるラインを定義するトポロジである。各シーケンスの２番目及び３番目のインデックスがラインを定義する。一方、各シーケンスの最初及び最後のインデックスは、定義されたラインの隣接関係を定義する。隣接インデックスは、ジオメトリシェーディングで使用するためのラインの「接続性」を示している。隣接関係は、例えば、シルエット検出、シャドウボリューム押し出し及び他の技術等の技術において使用されてもよい。インデックス０、１、２、３、４、５、６、７のシーケンスは、２つのライン（つまり、（隣接インデックス０、３を有する）ライン［１、２］及び（隣接インデックス４、７を有する）ライン［５、６］）を生成する。このプリミティブトポロジのインデックスは、４つのグループで検査されるので、このプリミティブトポロジは、オフセットベース技術で処理される。
【００４６】
隣接を伴うトライアングルリストトポロジ４１２は、サイズインデックスの各シーケンスが、隣接するインデックスと共に異なる三角形を定義するトポロジである。第１インデックス、第３インデックス及び第５インデックスは、三角形の頂点を定義する。第２インデックスは、第１インデックス及び第３インデックスに隣接するインデックスを定義する。第４インデックスは、第３インデックス及び第５インデックスに隣接するインデックスを定義する。第６インデックスは、第１インデックス及び第５インデックスに隣接するインデックスを定義する。０、１、２、３、４、５、６、７、８、９、１０、１１のシーケンスは、２つの三角形（つまり、（隣接する頂点１、３、５を有する）［０、２、４］及び（隣接する頂点７、９、１１を有する）［６、８、１０］）を生成する。このプリミティブトポロジのインデックスは、４つのグループで検査されるので、このプリミティブトポロジは、オフセットベース技術で処理される。
【００４７】
隣接を伴うラインリストトポロジ４１４は、最初の４つのインデックスの後に、後続の各インデックスが直前の３つのインデックスと隣接するラインを形成するトポロジである。したがって、０、１、２、３、４、５、６、７、８のシーケンスは、隣接を伴う６つのライン（つまり、（隣接する頂点として０、３を有する）ライン［１、２］、（隣接する頂点として１、４を有する）ライン［２、３］、（隣接する頂点として２、５を有する）ライン［３、４］、（隣接する頂点として３、６を有する）ライン［４、５］、（隣接する頂点として４、７を有する）ライン［５、６］、（隣接する頂点として５、８を有する）ライン［６、７］）を生成する。このプリミティブトポロジは、インデックスのシーケンスにおける後続の各インデックスが新たなプリミティブを生成する可能性を有するので、非オフセットベース技術で処理される。
【００４８】
隣接を伴うトライアングルストリップトポロジ４１６は、最初の６つの頂点の後に、全ての追加の頂点が直前の５つの頂点と隣接する新たな三角形を形成することができるトポロジである。したがって、０、１、２、３、４、５、６、７、８、９のシーケンスは、隣接１、３、６を有する三角形０、２、４と、隣接０、５、８を有する三角形２、４、６と、隣接２、７、９を有する三角形４、６、８と、を生成する。隣接を伴うトライアングルストリップトポロジ４１６では、全ての２つのインデックスが新たなプリミティブを生成する可能性を有するので、オフセットベース技術が使用される。
【００４９】
クワッドリストトポロジ４１８は、４つのインデックスの各シーケンスがクワッドタイププリミティブを形成するトポロジである。したがって、インデックス０、１、２、３、４、５、６、７は、クワッド［０、１、２、３］及びクワッド［４、５、６、７］を生成する。このプリミティブトポロジのインデックスは、４つのグループで検査されるので、このプリミティブトポロジは、オフセットベース技術で処理される。
【００５０】
トライアングルファントポロジ４２０は、第１インデックスが、インデックスの後続のシーケンスの第１インデックスとして機能するトポロジである。より具体的には、最初の３つのインデックスが第１三角形を形成する。後続のインデックスは、第１インデックス及び後続のインデックスの直前のインデックスを用いて三角形を形成する。２番目の後続のインデックスは、第１インデックス及び２番目の後続のインデックスの直前のインデックスを用いて三角形を形成する。したがって、インデックス０、１、２、３、４、５、は、三角形［０、１、２］、［０、２、３］、［０、３、４］、［０、４、５］を生成する。このプリミティブトポロジは、インデックスのシーケンスにおける後続の各インデックスが新たなプリミティブを生成する可能性を有するので、非オフセットベース技術で処理される。
【００５１】
クワッドストリップトポロジ４２２は、最初の４つのインデックスの後に、後続の２つのインデックス毎に新たなクワッドプリミティブを生成するトポロジである。したがって、最初の４つのインデックスがクワッドを形成し、次の２つのインデックスがこれらの次の２つのインデックスの前に２つのインデックスを有するクワッドを形成し、以降同様に続く。したがって、インデックス０、１、２、３、４、５、６、７は、クワッド［０、１、２、３］、［２、３、４、５］、［４、５、６、７］を生成する。このプリミティブトポロジのインデックスは、２つのグループで検査されるので、このプリミティブトポロジは、オフセットベース技術で処理される。
【００５２】
ポリゴントポロジ４２４は、インデックスのグループが単一のポリゴンを形成するトポロジである。このトポロジは、トライアングルファントポロジ４２０が一連の三角形に変換されるのと同様である。このプリミティブトポロジは、インデックスのシーケンスにおける後続の各インデックスが新たなプリミティブを生成する可能性を有するので、非オフセットベース技術で処理される。
【００５３】
ポイントリスト及びパッチトポロジ（図示省略）は、非オフセットベース技術を使用して処理される。示されていない他のトポロジは、後続の各インデックスが新たなプリミティブを生成するかどうかに応じて、オフセットベース技術又は非オフセットベース技術の何れかを使用する。入力アセンブラステージ３０２は、後続の各インデックスが新たなプリミティブを生成するかどうかに基づいて、オフセットベース技術を適用するか非オフセットベース技術を適用するかを決定する。より具体的には、後続の各インデックスが新たなプリミティブを生成するプリミティブトポロジの場合、入力アセンブラステージ３０２は、非オフセットベース技術を使用し、後続の各インデックスが必ずしも新たなプリミティブを生成しないプリミティブトポロジの場合、入力アセンブラステージ３０２は、オフセットベース技術を使用する。
【００５４】
プリミティブトポロジに応じて、上記技術のうち１つの技術をインデックスのシーケンスに適用して、インデックスからプリミティブを識別する。インデックスのシーケンスのリセットインデックスは、これらのインデックスによってプリミティブがどのように定義されるかに影響を及ぼす。概念的に及び一般的に、リセットインデックスは、プリミティブを形成することができるインデックスのセクションを定義する。また、リセットインデックスは、プリミティブがリセットインデックスの何れかの側に形成され得るがリセットインデックスを横切って形成され得ないような、インデックスのストリームの「切断」と考えることができる。リセットインデックスは、プリミティブトポロジがリストタイプかストリップタイプかに基づいて、インデックスのストリームによってプリミティブがどのように定義されるのかに影響を及ぼす。
【００５５】
リストタイプの場合、プリミティブは、重複しないインデックスのシーケンスによって形成され、したがって、リセットインデックスは、不完全なプリミティブを形成するインデックスのシーケンスの早期終了をもたらす場合がある。例えば、１、２、３、４、５、Ｒのインデックスのシーケンスをトライアングルリストとして解釈すると、１つの有効なプリミティブ（つまり、［１、２、３］）のみもたらす。リセットプリミティブは、インデックス４、５が有効なプリミティブの一部にならないようにする。これは、１）これらのインデックスがリストタイプとして解釈されているという事実は、インデックス４、５が別のプリミティブを形成するためにインデックス３と結合できないことを意味し、２）プリミティブトポロジ（トライアングルタイプ）がプリミティブ毎に３つのインデックスを必要とするため、インデックス４、５がプリミティブを形成するには不十分であるからである。
【００５６】
ストリップタイプの場合、プリミティブは、重複するインデックスのシーケンスによって形成され、リセットインデックスは、概して、プリミティブを形成することができるインデックスのシーケンスの終わりを定義する。例えば、上記と同じシーケンス１、２、３、４、５、Ｒをトライアングルストリップとして解釈すると、プリミティブ［１、２、３］、［２、３、４］、［３、４、５］をもたらす。しかし、例えばクワッドストリップ等のいくつかのストリップタイプは、２つのインデックスのシーケンスを必要とするため、いくつかのインデックスをプリミティブに組み込むことができない場合がある。例えば、上記と同じシーケンスをクワッドストリップとして解釈すると、プリミティブ［１、２、３、４］のみもたらす。プリミティブ［３、４、５、Ｒ］は、リセットプリミティブを含むことによって無効であることから、追加のプリミティブを形成することができない。クワッドストリッププリミティブトポロジは、インデックス２、３、４、５からクワッドが形成されるのを妨げる。
【００５７】
ストリップタイプ及びリストタイプの両方のプリミティブトポロジでは、リセットインデックス間のインデックス数が不十分な場合、これらのインデックスを有するプリミティブが形成されない。例えば、トライアングルリストとして解釈されるＲ、２、Ｒのシーケンスは、単一のインデックス（インデックス２）が三角形を形成するには不十分であることから、有効なプリミティブをもたらさない。
【００５８】
図５及び図６は、プリミティブトポロジに基づいて、インデックスのセットからプリミティブを識別するためのオフセットベース技術を説明する図である。図５は、一例による、特定のプリミティブトポロジが与えられた場合に、リセットインデックスを含み得るインデックスのセットからプリミティブを識別する方法のフロー図である。図１〜図３に関して図示及び説明したシステムについて説明したが、技術的に実現可能な任意の順序で方法を実行するように構成された任意のシステムも本開示の範囲内にあることを理解されたい。
【００５９】
方法５００は、グラフィックス処理パイプライン１３４によってレンダリングされるプリミティブを記述するインデックスバッファであって、例えばプロセッサ１０２上で実行しているアプリケーション１２６によって充填され得るインデックスバッファから受信したインデックスのチャンクを入力として受け入れる。また、方法５００は、インデックスのチャンク内のインデックスがプリミティブを形成するためにどのように解釈されるかを定義するプリミティブトポロジの識別情報を入力として受け入れる。いくつかの例では、各チャンクは、インデックスバッファから取り出された同じ数のインデックスを含む。さらに、各チャンクは、固定数（例えば２等）のクロックサイクルで処理されてもよく、これにより、ほぼ同数のインデックスが、所定数のクロックサイクルのプリミティブを識別するために分析される。
【００６０】
図示するように、方法５００は、ステップ５０２で開始し、ここで、入力アセンブラステージは、プリミティブトポロジに基づいて頂点の入力チャンクを分割し、初期プリミティブ候補を形成する。より具体的には、入力アセンブラステージ３０２は、何れのインデックスのセットがプリミティブになり得るかを決定し、これらのインデックスを初期プリミティブ候補として識別する。プリミティブになり得るインデックスのセットが重複しないプリミティブトポロジの場合、入力アセンブラステージ３０２は、プリミティブトポロジによって指定されたサイズのインデックスの連続シーケンスを初期プリミティブ候補として識別する。一例では、プリミティブトポロジは、トライアングルリストである。トライアングルリストでは、三角形を形成するインデックスが重複しない。したがって、入力アセンブラステージ３０２は、トライアングルリストの三角形を表す３つのインデックスの連続シーケンスの各々を、初期プリミティブ候補として識別する。プリミティブを形成することができるインデックスが重複するプリミティブトポロジの場合、入力アセンブラステージ３０２は、プリミティブトポロジによって指定されたサイズのインデックスの重複するシーケンスを、初期プリミティブ候補として識別する。一例では、プリミティブトポロジは、クワッドストリップである。このプリミティブトポロジでは、最初の２つのインデックスの後、追加の２つのインデックス毎に、直前の２つのインデックスを用いて新たなクワッドが形成される。この状況では、入力アセンブラステージ３０２は、２つのインデックスによって離間された４つのインデックスの重複するシーケンスを、初期プリミティブ候補として識別する。このステップでは、リセットインデックスを考慮していないことに留意されたい。初期プリミティブ候補は、後のステップでカリングされるリセットインデックスを含む場合がある。
【００６１】
ステップ５０４において、入力アセンブラステージ３０２は、初期プリミティブ候補の各々のリセットインデックスの位置を識別する。各チャンクでは、インデックスは、最古のインデックスから最新のインデックスの順に配列される。同様に、初期プリミティブ候補の各々は、最古のインデックスから最新のインデックスに順序付けられたインデックスを有する。ステップ５０４は、リセットインデックスを有する初期プリミティブ候補における最新のリセットインデックスの位置を識別することを含む。「位置」は、０からＳ−１までの範囲であり、「Ｓ」は、初期プリミティブ候補の各々のサイズ（インデックスの数）である。したがって、トライアングルリストの場合、位置の範囲は０〜２である。初期プリミティブ候補における最新のインデックスは、この範囲内で最も低い位置（つまり、０）を有し、初期プリミティブ候補における最古のインデックスは、この範囲内で最も高い位置を有する。初期プリミティブ候補がリセットインデックスを有する場合、リセットインデックスの位置は、最新のリセットインデックスの位置である。したがって、初期プリミティブ候補が１つのリセットインデックスしか有していない場合、最新のリセットインデックスの位置は、単一のリセットインデックスの位置である。初期プリミティブ候補が２つ以上のリセットインデックスを有する場合、最新のリセットインデックスの位置は、リセットインデックスの位置の中で最も小さい番号の位置である。初期プリミティブ候補がリセットインデックスを有していない場合、リセットインデックスの位置は、本明細書では「Ｘ」又は「リセットインデックスなし」値と呼ばれる特別な値として記録される。
【００６２】
ステップ５０６において、入力アセンブラステージ３０２は、初期プリミティブ候補のリセットインデックスの位置に基づいて、最終プリミティブ候補を生成するためのオフセットを決定する。より具体的には、入力アセンブラステージ３０２は、初期プリミティブ候補毎に最終プリミティブ候補を生成する。入力アセンブラステージ３０２は、初期プリミティブ候補のリセットインデックス位置に基づいて、最終プリミティブ候補の各々にオフセットを割り当てる。
【００６３】
オフセットがどのように特定の最終プリミティブ候補に割り当てられるかは、対応する初期プリミティブ候補（「直前の初期プリミティブ候補」とも呼ばれる）よりも１プリミティブ古い初期プリミティブ候補が、リセットインデックスを含むかどうかに依存する。最終プリミティブ候補は、２つのプリミティブがインデックスのチャンク内の同じ配列位置にある場合（例えば、初期プリミティブ候補のうち最古のものは、最終プリミティブ候補のうち最古のものに対応し、初期プリミティブ候補のうち２番目に古いものは、最終プリミティブ候補のうち２番目に古いものに対応する等）、初期プリミティブ候補に対応する。直前の初期プリミティブ候補がリセットインデックスを含む場合、入力アセンブラステージ３０２は、直前の初期プリミティブ候補に対応する最終プリミティブ候補に割り当てられたのと同じオフセット値を、最終プリミティブ候補に割り当てる。直前の初期プリミティブ候補がリセットプリミティブを含まない場合、入力アセンブラステージ３０２は、最終プリミティブ候補のオフセットとして、直前の初期プリミティブ候補の最新のリセットインデックスの位置を割り当てる。チャンクの最古の最終プリミティブ候補の場合、直前の初期プリミティブ候補は、前のチャンクの最新の初期プリミティブ候補である。
【００６４】
ステップ５０８において、入力アセンブラステージ３０２は、決定されたオフセットに基づいて、インデックスのチャンクから最終プリミティブ候補に属するインデックスを識別する。最終プリミティブ候補毎のインデックスは、その最終プリミティブ候補に割り当てられたオフセットに等しいインデックスの数だけ「古い」方向（例えば、チャンク内の古いインデックに向かって）にシフトされた対応する初期プリミティブ候補に対応するチャンクのインデックスを含む。一例では、チャンクは、インデックス０、Ｒ、２、３、４、５を含む。初期プリミティブ候補は、［０、Ｒ、２］及び［３、４、５］を含む。このような第１プリミティブのリセットインデックス位置は１であり、第２プリミティブのリセットインデックス位置はＸである。第２最終プリミティブ候補のオフセットが１（第１初期プリミティブ候補から割り当てられる）であるため、最終プリミティブ候補は、［３、４、５］、［２、３、４］の代わりに［０、Ｒ、２］を含む。このオフセットにより、最終プリミティブ候補のインデックスの位置が、チャンクの「古い」側に１つ分シフトされる。
【００６５】
ステップ５０８において、入力アセンブラステージ３０２は、リセットインデックスを含む最終プリミティブ候補を除去する。残りの最終プリミティブ候補は、指定されたプリミティブトポロジに従ってインデックスのチャンクによって定義されるプリミティブである。上記の例を続けると、最終プリミティブ候補［０、Ｒ、２］は、有効なプリミティブではないので、除去される。これらの最終プリミティブ候補は、例えば、テッセレーション、ジオメトリシェーダ、プリミティブカリング等のプリミティブ識別情報を使用する処理のために、ワールド空間パイプライン３０４に提供される。
【００６６】
図６は、インデックスのチャンクからプリミティブを識別するためのオフセットベース技術の適用例を示す図である。インデックスのチャンク６０２が示されており、インデックス１、２、３、Ｒ、５、６、７、Ｒ、９、１０、１１、１２、１３、Ｒ、Ｒ、１６、１７、１８、１９、２０、２１を、最古から最新の順序（１が最古であり、２１が最新である）で含む。始めに（ステップ５０２）、入力アセンブラステージ３０２は、３つのインデックスの後続のセットの各々が別の三角形を形成するトライアングルリストのプリミティブトポロジに基づいて、チャンク６０２を分割して初期プリミティブ候補６０４を生成する。したがって、入力アセンブラステージ３０２は、インデックス［１、２、３］を含む初期プリミティブ候補６０４（１）と、インデックス［Ｒ、５、６］を含む初期プリミティブ候補６０４（２）と、インデックス［７、Ｒ、９］を含む初期プリミティブ候補６０４（３）と、インデックス［１０、１１、１２］を含む初期プリミティブ候補６０４（４）と、インデックス［１３、Ｒ、Ｒ］を含む初期プリミティブ候補６０４（５）と、インデックス［１６、１７、１８］を含む初期プリミティブ候補６０４（６）と、インデックス［１９、２０、２１］を含む初期プリミティブ候補６０４（７）と、を生成する。
【００６７】
次に（ステップ５０４）、入力アセンブラステージ３０２は、初期プリミティブ候補６０４の各々のリセットインデックスの最新の位置を決定する。初期プリミティブ候補６０４（１）は、リセットインデックスを有していないので、リセットインデックス位置として「Ｘ」が割り当てられる。初期プリミティブ候補６０４（２）は、位置２に最新のリセットインデックスを有する。（インデックス５、６は、それぞれ位置１、０にある。）したがって、初期プリミティブ候補６０４（２）は、リセットインデックス位置として「２」が割り当てられる。初期プリミティブ候補６０４（３）は、位置１に最新のリセットインデックスを有しているので、リセットインデックス位置として「１」が割り当てられる。初期プリミティブ候補６０４（４）は、リセットインデックスを有していないので、リセットインデックス位置「Ｘ」が割り当てられる。初期プリミティブ候補６０４（５）は、２つのリセットインデックスを有しているが、最新のリセットインデックスが位置０にある。したがって、初期プリミティブ候補６０４（５）は、リセットインデックス位置「０」が割り当てられる。初期プリミティブ候補６０４（６）及び初期プリミティブ候補６０４（７）は、共にリセットインデックスを有していないので、リセットインデックス位置「Ｘ」が割り当てられる。ハードウェアによるリセットインデックス位置の割り当ては、例えばコンパレータ等の適切な論理ゲートを用いて達成することができる。
【００６８】
最終プリミティブ候補６１４のオフセットを識別するために、一連のマルチプレクサ６０８が使用される。異なる２：１マルチプレクサ６０８は、異なる初期プリミティブ候補６０１に対して設けられ、したがって、異なる最終プリミティブ候補６１４に対応する。各マルチプレクサ６０８は、マルチプレクサ６０８に関連する初期プリミティブ候補６０４のリセットインデックス位置と、直前のマルチプレクサ６０８から受信したオフセット値とから、直後のマルチプレクサ６０８に転送するためのオフセット値を選択する。選択は、マルチプレクサ６０８に関連する初期プリミティブ候補６０４のリセットインデックス位置がＸに等しいかどうかに基づく。リセットインデックス位置がＸに等しい場合、マルチプレクサ６０８は、直前のマルチプレクサ６０８から値を転送することを選択する。チャンクの最古の最終プリミティブ候補６０４の場合、直前のマルチプレクサ６０８は、前のチャンクの最終マルチプレクサ６０８である。リセットインデックス位置がＸに等しくない場合、マルチプレクサ６０８は、マルチプレクサ６０８に関連する初期プリミティブ候補６０４のリセットインデックス位置を転送することを選択する。初期プリミティブ候補６０４が初期プリミティブ候補６０４のシーケンス内にあるので、マルチプレクサ６０８がマルチプレクサ６０８のシーケンス内の同じ位置にある場合、マルチプレクサ６０８は、初期プリミティブ候補６０４に関連付けられる。したがって、第１マルチプレクサ６０８（１）は第１初期プリミティブ候補６０４（１）に関連付けられ、第２マルチプレクサ６０８（２）は第２初期プリミティブ候補６０４（２）に関連付けられ、以降同様である。
【００６９】
図６に示す例では、初期プリミティブ候補６０４（１）のリセットインデックス位置がＸに等しいので、第１マルチプレクサ６０８（１）は、前のチャンクの最終マルチプレクサ６０８からリセットインデックス位置を転送することを選択する。第２マルチプレクサ６０８（２）は、転送のために、「２」に等しい初期プリミティブ候補６０４（２）のリセットインデックス位置（６０６（２）として示す）を選択する。第３マルチプレクサ６０８（３）は、転送のために、「１」に等しい初期プリミティブ候補６０４（３）のリセットインデックス位置を選択する。第４マルチプレクサ６０８（４）は、同じ値「１」を選択する。第５マルチプレクサ６０８、第６マルチプレクサ６０８、第７マルチプレクサ６０８は、図示するように、転送のために「０」、「０」、「０」を選択する。
【００７０】
何れかの特定の最終プリミティブ候補６１４（ステップ５０６）に対して選択されたオフセット（要素６１０で示す）は、直前の最終プリミティブ候補６１４に関連するマルチプレクサ６０８から、その最終プリミティブ候補６１４に関連するマルチプレクサ６０８によって受信されたリセットインデックス位置である。
【００７１】
図６に示す例では、第１最終プリミティブ候補６１４（１）のオフセットは、直前のマルチプレクサ６０８から受信したオフセットである。第２最終プリミティブ候補６１４（２）のオフセットは、直前のマルチプレクサ（６０８）１から受信したオフセット（「０」に等しい）である。第３オフセット値、第４オフセット値、第５オフセット値、第６オフセット値、第７オフセット値は、それぞれ「２」、「１」、「１」、「０」、「０」である。
【００７２】
入力アセンブラステージ３０２は、オフセットに基づいて最終プリミティブ候補６１４のインデックスを決定する（ステップ５０８）。より具体的には、任意の特定の最終プリミティブ候補６１４のインデックスは、対応する初期プリミティブ候補６０４が、最終プリミティブ候補６１４のオフセットだけチャンク６０２の古いインデックスに向かってシフトした場合に生じるインデックスとして選択される。
【００７３】
図６に示す例では、最終プリミティブ候補６１４のインデックス６１２の集合内で、最初の２つの最終プリミティブ候補６１４は、最初の２つの最終プリミティブ候補のオフセットが「０」であるため、対応する初期プリミティブ候補６０４と同じ頂点を含む。第３最終プリミティブ候補６１４（３）は「２」のオフセットを有する。第３最終プリミティブ候補６１４（３）のインデックスは、第３最終プリミティブ候補６１４（３）のオフセットと等しいチャンク６０２の古い端部に向かってインデックスの数だけ第３初期プリミティブ候補６０４（３）をシフトすることによって生じるインデックスとして選択される。したがって、［７、Ｒ、９］の代わりに、第３最終プリミティブ候補６１４（３）は、第３初期プリミティブ候補６０４（３）に対応する「ウィンドウ」を２つのインデックスだけ左にシフトすることによって得られるインデックス［５、６、７］を有する。同様に、第４最終プリミティブ候補６１４（４）は、第４初期プリミティブ候補６０４（４）の「ウィンドウ」を１つのインデックスだけ左にシフト（第４最終プリミティブ候補６１４（４）のオフセットが「１」であるため）することによって得られるインデックスを有し、このインデックスは、インデックス［９、１０、１１］を含む。また、第５最終プリミティブ候補６１４（５）は、第５初期プリミティブ候補６０４（５）のウィンドウを左に１つシフトすることによって得られるインデックスを有し、［１２、１３、Ｒ］を得る。第６最終プリミティブ候補６１４（６）及び第７最終プリミティブ候補６１４（７）は、最終プリミティブ候補６１４のオフセット値が０であるため、対応する初期プリミティブ候補６０４と同じインデックスを有する。
【００７４】
入力アセンブラステージ３０２は、チャンク６０２のための最終プリミティブ候補集合６２０内の最終プリミティブ候補６１４の各々を検査する。リセットインデックスを含む最終プリミティブ候補６１４は、無効なプリミティブ６２４として破棄される。リセットインデックスを含まない最終プリミティブ候補６１４は、出力プリミティブ６２２とみなされ、プリミティブ情報に作用するワールド空間パイプライン３０４の一部による処理のために編成されて、ワールド空間パイプライン３０４に転送される。
【００７５】
オフセットベース技術は、チャンク６０２がリセットプリミティブを含むかどうかに応じて、１つ又は２つのコンピュータクロックサイクルで実行することができる。チャンクがリセットプリミティブを含まない場合、初期プリミティブ候補６０４は、出力プリミティブ６２２とみなされ、処理のためにワールド空間パイプライン３０４に転送され得る。
【００７６】
リセットプリミティブが存在する場合、いくつかの実施形態では、初期プリミティブ候補６０４のリセットインデックス位置を決定することは、最終プリミティブ候補６１４のインデックスを識別するのとは異なるクロックサイクルで行われる。マルチプレクサ６０８を介したデータの通過は連続的に行われるが、２：１マルチプレクサは、チャンク６０２に使用される全てのマルチプレクサ６０８に亘る総遅延が単一のクロックサイクル内に収まるほど十分に小さくなるように、十分に効率的に実装することができる。チャンクのサイズは、使用されるマルチプレクサ６０８の数がクロックサイクルに相当する時間を超えないことを保証するために、プリミティブトポロジに基づいて変えることができる。
【００７７】
図５及び図６に関して説明したオフセットベース技術を使用する異なるプリミティブトポロジは、初期プリミティブ候補６０４及び最終プリミティブ候補６１４のサイズを調整することによって適応される。例えば、ラインリストは、２つのインデックスを有するプリミティブ候補を使用し、クワッドリストは、４つのインデックスを有するプリミティブ候補を使用する等である。特定のプリミティブトポロジの場合、プリミティブ候補が重複する場合がある。例えば、クワッドストリップは、４つのインデックスサイズのプリミティブ候補を有するが、これらのプリミティブが重複する場合がある（例えば、入力頂点０、１、２、３、４、５は、クワッド［０、１、２、３］及び［２、３、４、５］を生成する）。
【００７８】
図７及び図８は、プリミティブトポロジに基づいてインデックスのセットからプリミティブを識別するための非オフセットベース技術を説明する図である。図７は、一例による、特定のプリミティブトポロジが与えられた場合に、リセットインデックスを含み得るインデックスのセットからプリミティブを識別する方法のフロー図である。図１〜図３に関連して図示及び説明したシステムに関して説明したが、技術的に実現可能な順序でこの方法を実行するように構成された任意のシステムが本発明の範囲に含まれることを理解されたい。
【００７９】
図示するように、方法７００は、ステップ７０２で開始し、ここで入力アセンブラステージ３０２は、プリミティブトポロジに基づいてインデックスを分割して、プリミティブ候補を形成する。より具体的には、非オフセットベース技術を使用するプリミティブトポロジの場合、プリミティブトポロジに基づく最初の数のインデックスが第１プリミティブを形成する。次いで、後続の各インデックスは、直前のインデックスを有するプリミティブを形成する。一例では、プリミティブトポロジは、トライアングルストリップである。このプリミティブトポロジでは、最初の３つのインデックスが第１三角形を形成する。次のインデックスは、第１三角形の最後の２つのインデックスを用いて別の三角形を形成する等である。プリミティブ候補は、このようにして識別された全てのプリミティブを含む。
【００８０】
ステップ７０４において、入力アセンブラステージ３０２は、リセットインデックスを含む全てのプリミティブ候補を削除する。残りのプリミティブ候補は、処理のためにワールド空間パイプライン３０４に出力される最終プリミティブである。
【００８１】
図８の例では、インデックス１、２、３、Ｒ、５、６、７、Ｒ、９、１０、１１、１２、１３、Ｒ、Ｒ、１６、１７、１８、１９、２０、２１を含むインデックスのチャンク８０２を示している。この例のプリミティブトポロジは、トライアングルストリップである。入力アセンブラステージ３０２は、最初の３つのインデックス［１、２、３］から第１プリミティブ候補８０６（１）を形成する。入力アセンブラステージ３０２は、後続のインデックス毎に新たなプリミティブ候補を形成する。したがって、入力アセンブラステージ３０２は、インデックス［２、３、Ｒ］から第２プリミティブ候補８０６（２）を形成する。第３プリミティブ候補８０６（３）は、インデックス［３、Ｒ、５］を含む。第４プリミティブ候補８０６（４）は、インデックス［Ｒ、５、６］を含む。第５プリミティブ候補８０６（５）は、インデックス［５、６、７］を含む等である。出力プリミティブ８０８は、リセット頂点を含まない全てのプリミティブ候補８０６を含む。これらの出力プリミティブ８０８は、処理のためにワールド空間パイプライン３０４に送信される。
【００８２】
インデックスのセットからプリミティブを識別する方法が本明細書で提供される。方法は、インデックスのセットのプリミティブトポロジを識別することを含み、プリミティブトポロジは、プリミティブに含まれるインデックスの数を指定する。また、方法は、インデックスのセットからプリミティブ候補を識別することを含み、プリミティブ候補の各々は、プリミティブトポロジに従って、プリミティブに含まれる数のインデックスを含む。方法は、出力プリミティブを得るためにリセットプリミティブを含むプリミティブ候補を破棄することをさらに含む。また、方法は、プリミティブ毎の処理のために、出力プリミティブをワールド空間パイプラインに転送することを含む。
【００８３】
アクセラレーテッド処理デバイスも提供される。アクセラレーテッド処理デバイスは、１つ以上のシェーダエンジンと、ワールド空間パイプライン及び入力アセンブラステージを含むグラフィックス処理パイプラインと、を含む。入力アセンブラステージは、インデックスのセットのプリミティブトポロジを識別することによって、インデックスのセットからプリミティブを識別することであって、プリミティブトポロジは、プリミティブに含まれるインデックスの数を指定する、ことと、インデックスのセットからプリミティブ候補を識別することであって、プリミティブ候補の各々は、プリミティブトポロジに従って、プリミティブに含まれる数のインデックスを含む、ことと、出力プリミティブを得るために、リセットプリミティブを含むプリミティブ候補を破棄することと、プリミティブ毎の処理のために、出力プリミティブをワールド空間パイプラインに転送することと、を行うように構成されている。
【００８４】
また、コンピュータシステムも提供される。コンピュータシステムは、プロセッサと、アクセラレーテッド処理デバイスと、を含む。アクセラレーテッド処理デバイスは、１つ以上のシェーダエンジンと、ワールド空間パイプライン及び入力アセンブラステージを含むグラフィックス処理パイプラインと、を含む。入力アセンブラステージは、インデックスのセットのプリミティブトポロジを識別することによって、インデックスのセットからプリミティブを識別することであって、プリミティブトポロジは、プリミティブに含まれるインデックスの数を指定する、ことと、インデックスのセットからプリミティブ候補を識別することであって、プリミティブ候補の各々は、プリミティブトポロジに従って、プリミティブに含まれる数のインデックスを含む、ことと、出力プリミティブを得るために、リセットプリミティブを含むプリミティブ候補を破棄することと、プリミティブ毎の処理のために、出力プリミティブをワールド空間パイプラインに転送することと、を行うように構成されている。
【００８５】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の複合で上記に説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な複合で使用されてもよい。
【００８６】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００８７】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2019537799.tif 000003
【図２】
2019537799.tif 000004
【図３】
2019537799.tif 000005
【図４】
2019537799.tif 000006
【図５】
2019537799.tif 000007
【図６】
2019537799.tif 000008
【図７】
2019537799.tif 000009
【図８】
2019537799.tif 000010
【国際調査報告】
2019537799.tif 000011
2019537799.tif 000012
2019537799.tif 000013