(57)【特許請求の範囲】
【請求項１】
視覚的コンテンツを出力するシステムであって、
コンテンツを受信する無線機と、
共有リソースと、
前記共有リソースに関連付けられているソフトウェアモジュールを実行するホストプロセッサと、
シェーダディスパッチモジュールであって、
前記ソフトウェアモジュールから、前記コンテンツに関連するドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するインタフェースと、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャと、
を含むシェーダディスパッチモジュールと、
前記コンテンツを視覚的に提示するディスプレイと、
を備えたシステム。
【請求項２】
前記ドローコールマネージャは、
スレッドカウンタと、
前記ドローコールに関連付けられているスレッドグループ内のスレッドごとに前記スレッドカウンタをインクリメントするインクリメントユニットと、
前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチする起動ユニットと、
前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするデクリメントユニットと、
を含む、請求項１記載のシステム。
【請求項３】
シェーダディスパッチモジュールを動作させる方法であって、
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するステップと、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするステップと、
を含む方法。
【請求項４】
前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、
前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、
前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、
をさらに含む、請求項３記載の方法。
【請求項５】
コンピュータプログラムであって、前記コンピュータプログラムが、コンピューティングデバイスのシェーダディスパッチモジュールにより実行されたときに、前記コンピュータプログラムは、前記シェーダディスパッチモジュールに、
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するステップと、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするステップと、
を実行させる、コンピュータプログラム。
【請求項６】
前記コンピュータプログラムが、前記シェーダディスパッチモジュールにより実行されたときに、前記コンピュータプログラムは、前記シェーダディスパッチモジュールに、
前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、
前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、
前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、
を実行させる、請求項５記載のコンピュータプログラム。
【請求項７】
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するインタフェースと、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャと、
を備えたシェーダディスパッチモジュール。
【請求項８】
前記ドローコールマネージャは、
スレッドカウンタと、
前記ドローコールに関連付けられているスレッドグループ内のスレッドごとに前記スレッドカウンタをインクリメントするインクリメントユニットと、
前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチする起動ユニットと、
前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするデクリメントユニットと、
を含む、請求項７記載のシェーダディスパッチモジュール。
【請求項９】
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信する手段と、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチする手段と、
を備えたシェーダディスパッチモジュール。
【請求項１０】
請求項５又は６記載のコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
グラフィックスパイプラインは、コンピューティングシステム上でのコンテンツの視覚的出力を円滑にすることができる。一例において、グラフィックスパイプラインは、最終画像を構成するために使用される画素、頂点、及び／又はテクスチャの位置、色相、彩度、明度、及びコントラストを設定する様々な「シェーダ」段（例えば、頂点シェーダ段、ハルシェーダ段、ドメインシェーダ段、ジオメトリシェーダ段、及び／又は画素シェーダ段）を含む一連の段として表される。アンオーダードアクセスビュー（ＵＡＶ：unordered  access  view）が、ディスプレイ／スクリーンを介して出力されるレンダリングターゲットへの最終画像の移動の前に、中間サーフェス情報をバッファ／格納するために、シェーダ段により使用され得る。
【０００２】
動作中、所与のシェーダ段は、１以上のドローコールを介して、ＵＡＶに対して書き込む且つ／又はＵＡＶから読み出すことがある。ＵＡＶは、複数のシェーダ段の間で共有され得るので、第１のシェーダ段からの「生成側（producer）」ドローコールの完了の前にＵＡＶ内の情報にアクセスする第２のシェーダ段からの「消費側（consumer）」ドローコールに関連するリードアフターライト（ＲＡＷ：read  after  write）ハザードについての懸念が存在する。そのようなハザードに対して保護するために、従来のソリューションは、アプリケーションプログラミングインタフェース（ＡＰＩ）レベルで中央処理装置（ＣＰＵ）上で実行されるソフトウェアモジュールを使用して、ドローコール依存関係が検出されたときに、グラフィックスパイプライン全体をフラッシュアウトすることができるものである。このようなアプローチは、パイプラインに比較的大きな「バブル」を挿入することがあり、それにより、効率性、性能、電力消費、及び／又はバッテリ寿命に悪影響を及ぼすことがある。
【図面の簡単な説明】
【０００３】
実施形態の様々な利点が、本明細書及び特許請求の範囲を読み図面を参照することにより、当業者に明らかになるであろう。
【図１】一実施形態に従ったグラフィックスパイプラインアーキテクチャの一例のブロック図。
【図２】一実施形態に従った、シェーダ段ディスパッチモジュールを動作させる方法の一例のフローチャート。
【図３】一実施形態に従った、リードアフターライト（ＲＡＷ）ハザードを防止する方法の一例のフローチャート。
【図４】一実施形態に従った、グローバルカウンタを維持する方法の一例のフローチャート。
【図５】一実施形態に従った、先入れ先出し（ＦＩＦＯ）バッファにデータを追加する方法の一例のフローチャート。
【図６】一実施形態に従った、スレッドカウンタを維持する方法の一例のフローチャート。
【図７】一実施形態に従った、ドローコールをグローバルに監視する方法の一例のフローチャート。
【図８】一実施形態に従ったシェーダディスパッチモジュールの一例のブロック図。
【図９】一実施形態に従ったシステムの一例のブロック図。
【図１０】一実施形態に従った、スモールフォームファクタを有するシステムの一例のブロック図。
【発明を実施するための形態】
【０００４】
図１は、例えば、アプリケーションプログラミングインタフェース（ＡＰＩ）、オペレーティングシステム（ＯＳ）コンポーネント、ユーザモードドライバ（ＵＭＤ）等といったソフトウェアモジュール３２が、一連の段を有するグラフィックスパイプライン２２にドローコール３３（３３ａ、３３ｂ）を発行するアーキテクチャ２０を示している。図示される例において、これらの段は、一般に、最終画像を構成するために使用される画素、頂点、及び／又はテクスチャの位置、色相、彩度、明度、及びコントラストを設定することができる複数のシェーダインボケーション（invocation）２４（２４ａ、２４ｂ、例えば、グラフィックスプロセッサ内にあり、コンピュートエンジン／スライス、実行ユニット、又は他のグラフィックスハードウェア等）を含む。複数のシェーダインボケーション２４は、例えば、上流（upstream）シェーダ２４ａ及び下流（downstream）シェーダ２４ｂを含み得る。上流シェーダ２４ａ及び下流シェーダ２４ｂは、ドローコール３３に従ってそれぞれのシェーダインボケーション２４に（例えば、スレッド及び／又はスレッドグループの形態の）ワークロードをディスパッチする対応するシェーダディスパッチモジュール２６（２６ａ、２６ｂ、例えば、グラフィックスハードウェア内にある）を有する。シェーダインボケーション２４は、共有リソース３０（例えば、ＤＩＲＥＣＴＸ（登録商標）アンオーダードアクセスビュー（ＵＡＶ）、ＯＰＥＮＧＬ（登録商標）イメージ、汎用バッファ、スクラッチメモリ等）へのアクセス２８（２８ａ、２８ｂ）を発行することができる。アクセス２８は、一般に、ディスプレイ／スクリーン（図示せず）を介して出力されるレンダリングターゲットへの最終画像の移動の前に、共有リソース３０に視覚的情報（例えば、中間サーフェス情報、スクラッチメモリデータ）をバッファ／格納することができる。
【０００５】
より詳細には、図示される上流シェーダ２４ａが、共有リソース３０への第１のアクセス２８ａ（「共有リソースアクセス＃１」）を発行し、ここで、第１のアクセス２８ａは、第１のドローコール３３ａ（「ドローコール＃１」）に対応する。同様に、図示される下流シェーダ２４ｂが、共有リソース３０への第２のアクセス２８ｂ（「共有リソースアクセス＃２」）を発行し、ここで、第２のアクセス２８ｂは、第２のドローコール３３ｂ（「ドローコール＃２」）に対応する。第１のアクセス２８ａは、例えば、画像の特定の領域（例えば、１６個のスレッドのグループにより操作される４×４ブロックの画素）に対する頂点シェーダ操作、ハルシェーダ操作、ドメインシェーダ操作、及び／又はジオメトリシェーダ操作に関与する１以上のスレッドから発行され得るのに対し、第２のアクセス２８ｂは、例えば、その画像の同じ領域に対する画素シェーダ操作に関与する１以上のスレッドから発行され得る。したがって、第１のアクセス２８ａが、第２のアクセス２８ｂにより消費されるデータを書き込む場合、生成側−消費側の関係が、ドローコール３３の間にシェーダインボケーション２４にわたって存在し得る。
【０００６】
図示される例において、第１のドローコール３３ａの後に、パイプラインフラッシュを発行し、第２のドローコール３３ｂを発行する前に、フラッシュがパイプライン２２の最初から最後まで進むのを待つ代わりに、ソフトウェアモジュール３２は、第１のドローコール３３ａとともに第１の複数の信号３４を発行し、第２のドローコール３３ｂとともに第２の複数の信号３５を発行する。以下でより詳細に説明するように、図示される信号３４、３５は、ディスパッチモジュール２６のうちの１以上のディスパッチモジュール２６が、パイプラインレベルでドローコール３３のステータスを内部的にトラッキングし、生成側−消費側の関係が存在するかどうかを判定することを可能にする。したがって、下流シェーダ２４ｂに対応するディスパッチモジュール２６ｂは、第２の複数の信号３５に基づいて、第２のドローコール２８ｂに対応するワークロードを選択的にディスパッチすることができる。特に注目すべきなのは、第２のドローコール３３ｂに対応するワークロードが、パイプライン２２全体がフラッシュされるのを待つ代わりに、パイプライン２２の前の段を経て進行することが可能にされ得ることである。このようなアプローチは、パイプライン２２におけるバブルの存在を大幅に低減させることができ、それにより、効率性及び性能を向上させ、電力消費を低減させ、且つ／又は、バッテリ寿命を延ばすことができる。
【０００７】
信号３４、３５は、各ドローコール３３が共有リソース３０にアクセスするかどうかに関する情報、各ドローコール３３の境界（例えば、開始、終了）に到達したかどうかに関する情報、各ドローコール３３がコヒーレンシ要件を有するかどうか（例えば、各ドローコール３３が前のドローコールに対する消費側であるかどうか）に関する情報等を伝達するコマンド／命令ビットのセットとしてフォーマット化され得る。以下の表Ｉは、信号３４、３５についてのプロトコルの一例を示している。
【０００８】
【表１】
0006374038.tif 000002
【０００９】
したがって、アクセス２８を生じさせるドローコール３３が、ソフトウェアモジュール３２によりグラフィックスパイプライン２２に対して発行されると、信号３４、３５が、例えば、下流シェーダ２４ｂ（例えば、画素シェーダ）のディスパッチモジュール２６ｂ等の特定のシェーダインボケーション２４のディスパッチモジュール２６により調べられ得る。ディスパッチモジュール２６は、次いで、信号３４、３５を使用して、ドローコール３３及び関連付けられているスレッド／スレッドグループをトラッキングし、後続のワークロードをシェーダインボケーションにディスパッチするべきか、又は、例えば、１以上の生成側ドローコールが完了するまでそのようなワークロードを保留するべきか、を決定することができる。
【００１０】
図２は、例えば、すでに説明しているディスパッチモジュール２６ｂ（図１）等のシェーダディスパッチモジュールを動作させる方法４０を示している。方法４０は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、プログラム可能なＲＯＭ（ＰＲＯＭ）、フラッシュメモリ等といったマシン読み取り可能な又はコンピュータ読み取り可能な記憶媒体に記憶される論理命令のセットとしての、例えば、プログラマブルロジックアレイ（ＰＬＡ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、コンプレックスプログラマブルロジックデバイス（ＣＰＬＤ）等の設定可能なロジックとしての、例えば、特定用途向け集積回路（ＡＳＩＣ）、相補型金属酸化膜半導体（ＣＭＯＳ）、若しくはトランジスタ−トランジスタロジック（ＴＴＬ）技術等の回路技術を用いた固定機能ロジックハードウェアとしての、又はこれらの任意の組合せとしての、１以上のモジュールにより実装され得る。例えば、方法４０に示される動作を実行するためのコンピュータプログラムコードは、Ｃ＋＋等のオブジェクト指向プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語等の慣用的な手続き型プログラミング言語を含む１以上のプログラミング言語の任意の組合せにより記述することができる。さらに、方法４０は、本明細書で言及する回路技術のうちの任意の回路技術を使用して実装され得る。
【００１１】
図示される処理ブロック４２は、共有リソースに関連付けられているソフトウェアモジュールから、複数の信号を受信することを提供する。複数の信号は、例えば、ドローコールが共有リソースにアクセスするかどうかを示す第１の信号（例えば、表Ｉの「共有リソースマーカー」列に対応する１以上のビット）、ドローコールの境界に到達したかどうかを示す第２の信号（例えば、表Ｉの「共有リソース境界」列に対応する１以上のビット）、ドローコールが１以上の前のドローコールに対するコヒーレンシ要件を有するかどうかを示す第３の信号（例えば、表Ｉの「共有リソースコヒーレンシ要件」列に対応する１以上のビット）等を含み得る。さらに、ブロック４４は、複数の信号に基づいて、シェーダインボケーションにおいて、ドローコールに対応するワークロードを選択的にディスパッチすることができる。
【００１２】
ブロック４４は、概して、例えば、ＲＡＷハザードを防止すること、グローバルカウンタを維持すること、スレッドグループ識別子についての先入れ先出し（ＦＩＦＯ）バッファにデータを追加すること、スレッドカウンタを維持すること、ドローコールをグローバルに監視すること等を含み得る。図３〜図７は、これらの様々な動作を実行する方法４６、４８、５０、５２、及び５４を示している。方法４６、４８、５０、５２、及び５４も、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、フラッシュメモリ等といったマシン読み取り可能な又はコンピュータ読み取り可能な記憶媒体に記憶される論理命令のセットとしての、例えば、ＰＬＡ、ＦＰＧＡ、ＣＰＬＤ等の設定可能なロジックとしての、例えば、ＡＳＩＣ、ＣＭＯＳ、若しくはＴＴＬ技術等の回路技術を用いた固定機能ロジックハードウェアとしての、又はこれらの任意の組合せとしての、モジュールにより実装され得る。
【００１３】
図３を詳細に参照すると、ＲＡＷハザードを防止する方法４６が示されている。図示される処理ブロック５６は、ドローコールの開始に遭遇したかどうかを判定することを提供する。したがって、ブロック５６は、表Ｉの「共有リソース境界」列に対応するビットが、ドローコールコマンド／命令においてセットされているかどうか（すなわち、１という値を有するかどうか）を判定することを含み得る。「共有リソース境界」列に対応するビットがセットされている場合、ブロック５８において、ドローコールが、１以上の前に遭遇したドローコールに対するコヒーレンシ要件を有するかどうかについての判定がなされ得る。したがって、ブロック５８は、「共有リソースコヒーレンシ要件」ビットが、ドローコールコマンド／命令においてセットされているかどうかを判定することを含み得る。「共有リソースコヒーレンシ要件」ビットがセットされている場合、ブロック６０は、進行中の（pending）グローバルに監視されるドローコールのグローバルカウンタが０に達するまで、シェーダへのワークロードを保留することを提供する。
【００１４】
以下でより詳細に説明するように、グローバルカウンタは、グラフィックスパイプラインの下流コンポーネントに至るドローコールの進行をトラッキングするために使用され得る。したがって、０に達したグローバルカウンタは、パイプラインの残りの部分（remainder）がドローコールをもはや含んでいないことを示すことができる。そのような状態は、今度は、ＲＡＷハザードについての懸念なく、ワークロードがシェーダインボケーションにディスパッチされてもよいことを示すことができる。ドローコールの開始に遭遇していない場合又はドローコールがコヒーレンシ要件を有さない場合のいずれかにおいて、ブロック６０は、図示される例においてバイパスされる。
【００１５】
図４を詳細に参照すると、グローバルカウンタを維持する方法４８が示されている。図示される処理ブロック６２は、ドローコールの終了に到達したかどうかを判定する。したがって、ブロック６２は、表Ｉの「共有リソース境界」列に対応するビットが、ドローコールコマンド／命令においてセットされていないかどうか（すなわち、０という値を有するかどうか）を判定することを含み得る。「共有リソース境界」列に対応するビットがセットされていない場合、図示されるブロック６４において、進行中のグローバルに監視される（「ＧＯ（globally  observed）」）ドローコールのグローバルカウンタがインクリメントされる。そうでない場合、ブロック６４は、バイパスされ得る。ブロック６６は、グローバルに監視されるアクノレッジメントが、グラフィックスパイプラインの下流コンポーネントから受信されたかどうかを判定することができる。このアクノレッジメントが受信された場合、ブロック６８は、グローバルカウンタをデクリメントすることができる。そうでない場合、ブロック６８は、バイパスされ得る。したがって、グローバルカウンタ値は、ドローコールが終了すると上に変動し、ドローコールがアクノレッジされると下に変動し得、終了したドローコールの数がＧＯドローコールの数に等しくなると、グローバルカウンタは０に達する。
【００１６】
図５を詳細に参照すると、ＦＩＦＯバッファにデータを追加する方法５０が示されている。図示される処理ブロック７０は、ドローコールが共有リソースに対して書き込むかどうかを判定する。したがって、ブロック７０は、表Ｉの「共有リソースマーカー」列に対するビットが、ドローコールコマンド／命令においてセットされているかどうかを判定することを含み得る。「共有リソースマーカー」列に対応するビットがセットされている場合、図示されるブロック７２は、ドローコールの開始に遭遇したかどうかを判定する。ドローコールの開始に遭遇した場合、ブロック７４において、グループ識別子（ＩＤ、例えば、「色」ＩＤ）が、スレッドのグループに対して割り当てられ得、図示されるブロック７６は、割り当てられたグループＩＤを先入れ先出し（ＦＩＦＯ）バッファに追加する。例えば、１６個のスレッドのグループが、画像の４×４領域を操作するために、ドローコールを使用する場合、グループＩＤが、１６個のスレッドのこのグループに割り当てられ得、今度は、このグループＩＤが、上記ドローコールに関連付けられ得る。一例において、２ビットのグループＩＤが使用され、ＦＩＦＯバッファは、４エントリ分の深さである。状況に応じて、他のＩＤ及びバッファ構成が使用されてもよい。ドローコールが共有リソースに対して書き込まない場合又はドローコールの開始に遭遇していない場合のいずれかにおいて、ブロック７４及び７６は、図示される例においてバイパスされる。
【００１７】
図６を詳細に参照すると、スレッドカウンタを維持する方法５２が示されている。図示される処理ブロック７８は、スレッドカウンタをインクリメントする。ここで、スレッドカウンタは、ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングする。したがって、スレッドグループが、１６個のスレッドを含む場合、例えば、ブロック７８は、スレッドカウンタを１６回インクリメントすることができる。ブロック８０は、スレッドグループ内の１６個のスレッドを、シェーダインボケーションにディスパッチすることを提供することができ、ブロック８２において、スレッドグループ内の各スレッドの回収に応じて、スレッドカウンタがデクリメントされ得る。
【００１８】
図７を詳細に参照すると、ドローコールをグローバルに監視する（例えば、システムレベルで監視する）方法５４が示されている。図示される処理ブロック８４は、ＦＩＦＯバッファ内の最初（一番上）のエントリが、０であるスレッドカウンタを伴うグループＩＤを有するかどうかを判定する。ブロック８４において、最初のエントリが、０であるスレッドカウンタを伴うグループＩＤを有すると判定され、且つ、ブロック８６において、グローバルカウンタが０より大きいと判定された場合、ブロック８８は、ＧＯ通知をポストすることができる。ＦＩＦＯバッファ内の最初のエントリに対応するスレッドカウンタが０でない場合又はグローバルカウンタが０より大きくない場合のいずれかにおいて、ブロック８８は、図示される例においてバイパスされる。
【００１９】
図８は、すでに説明しているシェーダディスパッチモジュール２６（図１）のうちの任意のシェーダディスパッチモジュール２６の代わりに容易に使用され得るシェーダディスパッチモジュール９０（９０ａ、９０ｂ）を示している。図示される例において、インタフェース９０ａは、共有リソースに関連付けられているソフトウェアモジュールから、複数の信号を受信する。複数の信号は、例えば、ドローコールが共有リソースにアクセスするかどうかを示す第１の信号、ドローコールの境界（例えば、開始、終了）に到達したかどうかを示す第２の信号、ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号等を含み得る。
【００２０】
図示されるシェーダディスパッチモジュール９０はまた、複数の信号に基づいて、シェーダインボケーションにおいて、ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャ９０ｂを含む。一例において、ドローコールマネージャ９０ｂは、進行中のＧＯドローコールのグローバルカウンタ９２と、ドローコールが共有リソースにアクセスすることが第１の信号により示され、ドローコールの開始に到達したことが第２の信号により示され、且つドローコールがコヒーレンシ要件を有することが第３の信号により示された場合に限り、シェーダインボケーションへのワークロードを保留するコヒーレンシユニット９４と、を含む。このような場合、グローバルカウンタ９２が０に達するまで、ワークロードは保留され得る。図示されるグローバルカウンタ９２は、ドローコールの終了に到達したことが第２の信号により示されたことに応じて、グローバルカウンタ９２をインクリメントするインクリメントユニットと、下流コンポーネントからアクノレッジメントに応じて、グローバルカウンタ９２をデクリメントするデクリメントユニットと、を含む。
【００２１】
ドローコールマネージャ９０ｂはまた、グループＩＤ  ＦＩＦＯバッファ９６と、ドローコールが共有リソースに対して書き込むことが第１の信号により示され、且つドローコールの開始に到達したことが第２の信号により示された場合に、スレッドのグループに対してグループＩＤを割り当てるアロケータ９８と、を含み得る。さらに、プッシュユニット１００は、割り当てられたグループＩＤをＦＩＦＯバッファ９６に追加することができる。
【００２２】
図示されるドローコールマネージャ９０ｂはまた、１以上のスレッドカウンタ１０２を含む。各スレッドカウンタ１０２は、ドローコールに関連付けられているスレッドグループ内のスレッドごとに当該スレッドカウンタ１０２をインクリメントするインクリメントユニットを含む。起動ユニット（launch  unit）１０４は、スレッドグループ内のスレッドをシェーダインボケーションにディスパッチすることができる。さらに、各スレッドカウンタ１０２は、スレッドグループ内の各スレッドの回収に応じて、当該スレッドカウンタ１０２をデクリメントするデクリメントユニットを含み得る。
【００２３】
ドローコールマネージャ９０ｂはまた、ＦＩＦＯバッファ９６内の最初のエントリが、０であるスレッドカウンタを伴うグループＩＤを有し、且つグローバルカウンタ９２が０より大きいことに応じて、ＧＯ通知をポストするグローバル監視ユニット１０６を含み得る。すでに説明しているように、スレッドカウンタ１０２は、ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングすることができ、グローバルカウンタ９２は、進行中のＧＯドローコールをトラッキングすることができる。
【００２４】
以下の擬似コードは、シェーダディスパッチモジュール９０の１以上の態様を実装する１つのアプローチを提供する。
Process_Draw()
{
If  DrawBegin()  {
If  DrawRequiresUAVCoherency()  {
Wait  on  (PendingGOCounter==0);
}
If  DrawOutputsUAV()  {
Wait  on  (AllocateGroupID()!=NULL);  //  グループＩＤが利用可能になるまで待機する
CurrentGroupID=AllocateGroupID();
Push.GroupIDFIFO(CurrentGroupID);
}
}
For  all  PS  threads  in  the  CurrentDraw  {  //  すなわち、in  CurrentGrouplD
PendingFFTID[GroupID]++;
LaunchPSThread[FFTID];
}
If  DrawEnd()  {
PendingGOCounter++;
}
}
Process  DecrementFFTIDCounter(GroupID)  {  //  ＰＳスレッド回収がこのプロセスを呼び出す
PendingFFTID[GroupID]--;
}
Process  PostGONotification(GroupID)  {  //  最初のエントリのpendingFFTIDcounterが０になると、このプロセスがトリガされる
If  (PendingFFTID[GoupIDFIFO.TopEntry]==0)  AND  (PendingGOCounter>0)  {
PostGONotification();
}
}
Process  DecrementPendingGOCounter()  {  //  下流からのＧＯアクノレッジメントの受信により呼び出される
PendingGOCounter--;
}
【００２５】
図９は、一実施形態に従って、視覚的コンテンツを出力することができるシステム７００の一実施形態を示している。実施形態において、システム７００は、メディアシステムであり得るが、システム７００は、このコンテキストに限定されるものではない。例えば、システム７００は、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレットコンピュータ、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、携帯情報端末（ＰＤＡ）、セルラ電話機、セルラ電話機／ＰＤＡの組合せ、テレビジョン、スマートデバイス（例えば、スマートフォン又はスマートテレビジョン）、モバイルインターネットデバイス（ＭＩＤ）、メッセージングデバイス、データ通信デバイス、ゲームコンソール等に組み込むことができる。
【００２６】
実施形態において、システム７００は、ディスプレイ７２０に接続されるプラットフォーム７０２を備える。プラットフォーム７０２は、１以上のコンテンツサービスデバイス７３０若しくは１以上のコンテンツ配信デバイス７４０又は同様のコンテンツソース等のコンテンツデバイスから、コンテンツを受信することができる。１以上のナビゲーション特徴を含むナビゲーションコントローラ７５０を使用して、例えば、プラットフォーム７０２及び／又はディスプレイ７２０とインタラクトすることができる。これらのコンポーネントの各々が、以下でより詳細に説明される。
【００２７】
実施形態において、プラットフォーム７０２は、チップセット７０５、プロセッサ７１０、メモリ７１２、ストレージ７１４、グラフィックスサブシステム７１５、アプリケーション７１６、及び／又は無線機７１８の任意の組合せを含み得る。チップセット７０５は、プロセッサ７１０、メモリ７１２、ストレージ７１４、グラフィックスサブシステム７１５、アプリケーション７１６、及び／又は無線機７１８の間の相互通信を提供することができる。例えば、チップセット７０５は、ストレージ７１４との相互通信を提供することができるストレージアダプタ（図示せず）を含み得る。
【００２８】
プロセッサ７１０は、複合命令セットコンピュータ（ＣＩＳＣ）プロセッサ、縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ、ｘ８６命令セット互換プロセッサ、マルチコアマイクロプロセッサ若しくは任意の他のマイクロプロセッサ、又は中央処理装置（ＣＰＵ）として実装され得る。実施形態において、プロセッサ７１０は、１以上のデュアルコアプロセッサ、１以上のデュアルコアモバイルプロセッサ等を含み得る。
【００２９】
メモリ７１２は、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、又はスタティックＲＡＭ（ＳＲＡＭ）等の揮発性メモリデバイスとして実装され得るが、これらに限定されるものではない。
【００３０】
ストレージ７１４は、磁気ディスクドライブ、光ディスクドライブ、テープドライブ、内蔵記憶デバイス、外付け記憶デバイス、フラッシュメモリ、バッテリバックアップ型ＳＤＲＡＭ（シンクロナスＤＲＡＭ）、及び／又はネットワークアクセス可能な記憶デバイス等の不揮発性記憶デバイスとして実装され得るが、これらに限定されるものではない。実施形態において、ストレージ７１４は、例えば、複数のハードドライブが含まれる場合には、価値のあるデジタルメディアのための記憶性能拡張保護を増大させる技術を含み得る。
【００３１】
グラフィックスサブシステム７１５は、表示のための静止画像又はビデオ等の画像の処理を実行することができる。グラフィックスサブシステム７１５は、例えば、グラフィックス処理装置（ＧＰＵ）又はビジュアル処理装置（ＶＰＵ）であり得る。アナログインタフェース又はデジタルインタフェースを使用して、グラフィックスサブシステム７１５とディスプレイ７２０とを通信可能に接続することができる。例えば、このようなインタフェースは、高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））、ＤｉｓｐｌａｙＰｏｒｔ、ワイヤレスＨＤＭＩ（登録商標）、及び／又はワイヤレスＨＤ準拠技術のうちの任意のものであり得る。グラフィックスサブシステム７１５は、プロセッサ７１０又はチップセット７０５に組み込まれることもある。グラフィックスサブシステム７１５は、チップセット７０５に通信可能に接続されるスタンドアロンカードであることもある。一例において、グラフィックスサブシステム７１５は、例えば、すでに説明しているグラフィックスパイプライン２２（図１）等のパイプラインを含み、プロセッサ７１０は、例えば、すでに説明しているソフトウェアモジュール３２（図１）等のソフトウェアモジュールを実行するホストプロセッサであり、メモリ７１２は、例えば、すでに説明している共有リソース３０（図１）等の共有リソースを含む。
【００３２】
本明細書に記載のグラフィックス処理技術及び／又はビデオ処理技術は、様々なハードウェアアーキテクチャにおいて実装され得る。例えば、グラフィックス機能及び／又はビデオ機能は、チップセット内に統合され得る。代替的に、別個のグラフィックスプロセッサ及び／又はビデオプロセッサが使用されてもよい。さらに別の実施形態として、グラフィックス機能及び／又はビデオ機能は、マルチコアプロセッサを含む汎用プロセッサにより実装されてもよい。さらなる実施形態において、これらの機能は、コンシューマ電子デバイス内に実装されてもよい。
【００３３】
無線機７１８は、種々の適切な無線通信技術を使用して信号を送受信することができる１以上の無線機を含み得る。そのような技術は、１以上の無線ネットワークを介する通信に関連し得る。例示的な無線ネットワークは、無線ローカルエリアネットワーク（ＷＬＡＮ）、無線パーソナルエリアネットワーク（ＷＰＡＮ）、無線メトロポリタンエリアネットワーク（ＷＭＡＮ）、セルラネットワーク、及びサテライトネットワークを含む（が、これらに限定されるものではない）。このようなネットワークを介して通信する際、無線機７１８は、任意のバージョンの１以上の適用可能な規格に従って動作することができる。
【００３４】
実施形態において、ディスプレイ７２０は、任意のテレビジョン型モニタ又はディスプレイを含み得る。ディスプレイ７２０は、例えば、コンピュータディスプレイスクリーン、タッチスクリーンディスプレイ、ビデオモニタ、テレビジョン状デバイス、及び／又はテレビジョンを含み得る。ディスプレイ７２０は、デジタル式且つ／又はアナログ式であり得る。実施形態において、ディスプレイ７２０は、ホログラフィックディスプレイであり得る。また、ディスプレイ７２０は、視覚的投影を受像することができる透過表面であり得る。そのような投影は、様々な形態の情報、画像、及び／又はオブジェクトを伝えることができる。例えば、そのような投影は、モバイル拡張現実（ＭＡＲ）アプリケーションのための視覚的オーバーレイであり得る。１以上のソフトウェアアプリケーション７１６の制御の下、プラットフォーム７０２は、ディスプレイ７２０上にユーザインタフェース７２２を表示することができる。
【００３５】
実施形態において、１以上のコンテンツサービスデバイス７３０は、任意の国内サービス、国際サービス、及び／又は独立サービスによりホストされ得、したがって、例えば、インターネットを介してプラットフォーム７０２にアクセス可能である。１以上のコンテンツサービスデバイス７３０は、プラットフォーム７０１及び／又はディスプレイ７２０に接続され得る。プラットフォーム７０２及び／又は１以上のコンテンツサービスデバイス７３０は、ネットワーク７６０との間でメディア情報を通信する（例えば、送信及び／又は受信する）ために、ネットワーク７６０に接続され得る。１以上のコンテンツ配信デバイス７４０も、プラットフォーム７０２及び／又はディスプレイ７２０に接続され得る。
【００３６】
実施形態において、１以上のコンテンツサービスデバイス７３０は、ケーブルテレビジョンボックス、パーソナルコンピュータ、ネットワーク、電話機、デジタル情報及び／又はコンテンツを配信することができるインターネット対応デバイス又は機器、及び、コンテンツプロバイダとプラットフォーム７０２及び／又はディスプレイ７２０との間でネットワーク７６０を介して又は直接的にコンテンツを単方向又は双方向に通信することができる任意の他の同様のデバイスを含み得る。コンテンツは、システム７００内のコンポーネントのうちの任意の１つのコンポーネントとコンテンツプロバイダとの間でネットワーク７６０を介して単方向且つ／又は双方向に通信され得ることが理解されよう。コンテンツの例は、例えば、ビデオ、音楽、医療情報、ゲーム情報等を含む任意のメディア情報を含み得る。
【００３７】
１以上のコンテンツサービスデバイス７３０は、メディア情報、デジタル情報、及び／又は他のコンテンツを含むケーブルテレビジョン番組等のコンテンツを受信する。コンテンツプロバイダの例は、任意のケーブルテレビジョンプロバイダ、衛星テレビジョンプロバイダ、ケーブルラジオプロバイダ、衛星ラジオプロバイダ、又はインターネットコンテンツプロバイダを含み得る。提供した例は、実施形態を限定するよう意図されるものではない。
【００３８】
実施形態において、プラットフォーム７０２は、１以上のナビゲーション特徴を有するナビゲーションコントローラ７５０から、制御信号を受信することができる。ナビゲーションコントローラ７５０のナビゲーション特徴を使用して、例えば、ユーザインタフェース７２２とインタラクトすることができる。実施形態において、ナビゲーションコントローラ７５０は、ユーザが空間データ（例えば、連続的な多次元のデータ）をコンピュータに入力することを可能にするコンピュータハードウェアコンポーネント（詳細にはヒューマンインタフェースデバイス）であり得るポインティングデバイスであり得る。グラフィカルユーザインタフェース（ＧＵＩ）並びにテレビジョン及びモニタ等の多くのシステムは、ユーザが、身体のジェスチャを用いてコンピュータ又はテレビジョンを制御すること及び身体のジェスチャを用いてコンピュータ又はテレビジョンにデータを提供することを可能にする。
【００３９】
ナビゲーションコントローラ７５０のナビゲーション特徴の動きは、ディスプレイ（例えば、ディスプレイ７２０）上に表示されるポインタ、カーソル、フォーカスリング、又は他の視覚的インジケータの動きにより、ディスプレイ上でそのまま繰り返され得る。例えば、ソフトウェアアプリケーション７１６の制御の下、ナビゲーションコントローラ７５０上に配置されたナビゲーション特徴は、例えば、ユーザインタフェース７２２上に表示される仮想ナビゲーション特徴にマッピングされ得る。実施形態において、ナビゲーションコントローラ７５０は、別個のコンポーネントではなく、プラットフォーム７０２及び／又はディスプレイ７２０に統合されることもある。しかしながら、実施形態は、図示されるコンテキストにおける要素又は本明細書に記載の要素に限定されるものではない。
【００４０】
実施形態において、ドライバ（図示せず）は、例えば、有効にされたときに初期起動後のボタンのタッチによるテレビジョンのように、ユーザが、プラットフォーム７０２を瞬時的にオン及びオフすることを可能にする技術を含み得る。プログラムロジックは、プラットフォーム７０２が、プラットフォームが「オフ」にされるときに、メディアアダプタ又は他の１以上のコンテンツサービスデバイス７３０若しくは１以上のコンテンツ配信デバイス７４０にコンテンツをストリーミングすることを可能にし得る。さらに、チップセット７０５は、例えば、５．１サラウンドサウンドオーディオ及び／又は高精細７．１サラウンドサウンドオーディオのためのハードウェアサポート及び／又はソフトウェアサポートを含み得る。ドライバは、統合されたグラフィックスプラットフォームのためのグラフィックスドライバを含み得る。実施形態において、グラフィックスドライバは、周辺コンポーネント相互接続（ＰＣＩ）エクスプレスグラフィックスカードを含み得る。
【００４１】
様々な実施形態において、システム７００内に図示されるコンポーネントのうちの任意の１以上のコンポーネントが統合され得る。例えば、プラットフォーム７０２及び１以上のコンテンツサービスデバイス７３０が統合されることもあるし、プラットフォーム７０２及び１以上のコンテンツ配信デバイス７４０が統合されることもあるし、プラットフォーム７０２、１以上のコンテンツサービスデバイス７３０、及び１以上のコンテンツ配信デバイス７４０が統合されることもある。様々な実施形態において、プラットフォーム７０２及びディスプレイ７２０が、統合されたユニットであることもある。例えば、ディスプレイ７２０及び１以上のコンテンツサービスデバイス７３０が統合されることもあるし、ディスプレイ７２０及び１以上のコンテンツ配信デバイス７４０が統合されることもある。これらの例は、実施形態を限定するよう意図されるものではない。
【００４２】
様々な実施形態において、システム７００は、無線システム、有線システム、又はこれらの組合せとして実装され得る。無線システムとして実装される場合、システム７００は、１以上のアンテナ、送信機、受信機、トランシーバ、増幅器、フィルタ、制御ロジック等の、無線共用媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。無線共用媒体の例は、ＲＦスペクトル等といった無線スペクトルの一部を含み得る。有線システムとして実装される場合、システム７００は、入力／出力（Ｉ／Ｏ）アダプタ、Ｉ／Ｏアダプタを対応する有線通信媒体に接続する物理コネクタ、ネットワークインタフェースカード（ＮＩＣ）、ディスクコントローラ、ビデオコントローラ、オーディオコントローラ等といった、有線通信媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。有線通信媒体の例は、ワイヤ、ケーブル、メタルリード、プリント回路基板（ＰＣＢ）、バックプレーン、スイッチファブリック、半導体材料、ツイストペアワイヤ、同軸ケーブル、ファイバオプティックス等を含み得る。
【００４３】
プラットフォーム７０２は、情報を通信するための１以上の論理チャネル又は物理チャネルを確立することができる。この情報は、メディア情報及び制御情報を含み得る。メディア情報は、ユーザのために意図されるコンテンツを表す任意のデータを指し得る。コンテンツの例は、例えば、音声会話からのデータ、ビデオ会議、ストリーミングビデオ、電子メール（「ｅｍａｉｌ」）メッセージ、音声メールメッセージ、英数字記号、グラフィックス、画像、ビデオ、テキスト等を含み得る。音声会話からのデータは、例えば、発話情報、無音期間、背景雑音、快適雑音、トーン等であり得る。制御情報は、自動化システムのために意図されるコマンド、命令、又は制御語を表す任意のデータを指し得る。例えば、制御情報を使用して、システムを介してメディア情報をルーティングすることができる、又は、予め定められた方式でメディア情報を処理するようにノードに命令することができる。しかしながら、実施形態は、図９に示されるコンテキストにおける要素又は説明した要素に限定されるものではない。
【００４４】
上述したように、システム７００は、可変の物理的スタイル又はフォームファクタで具現化され得る。図１０は、システム７００（図９）を具現化することができるスモールフォームファクタデバイス８００の実施形態を示している。実施形態において、例えば、デバイス８００は、無線能力を有するモバイルコンピューティングデバイスとして実装され得る。モバイルコンピューティングデバイスは、例えば、処理システムと、１以上のバッテリ等のモバイル電源と、を有する任意のデバイスを指し得る。
【００４５】
上述したように、モバイルコンピューティングデバイスの例は、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、携帯情報端末（ＰＤＡ）、セルラ電話機、セルラ電話機／ＰＤＡの組合せ、テレビジョン、スマートデバイス（例えば、スマートフォン、スマートタブレット、又はスマートテレビジョン）、モバイルインターネットデバイス（ＭＩＤ）、メッセージングデバイス、データ通信デバイス等を含み得る。
【００４６】
モバイルコンピューティングデバイスの例はまた、リストコンピュータ、フィンガーコンピュータ、リングコンピュータ、アイグラスコンピュータ、ベルトクリップコンピュータ、アームバンドコンピュータ、シューコンピュータ、クロージングコンピュータ、及び他のウェアラブルコンピュータ等の、人により装着されるよう構成されるコンピュータを含み得る。実施形態において、例えば、モバイルコンピューティングデバイスは、コンピュータアプリケーションに加えて、音声通信及び／又はデータ通信を実行することができるスマートフォンとして実装され得る。いくつかの実施形態が、一例としてのスマートフォンとして実装されるモバイルコンピューティングデバイスを使用するものとして説明され得るが、他の実施形態は、他の無線モバイルコンピューティングデバイスを使用して実装されてもよいことが理解できるであろう。実施形態は、このコンテキストにおいて限定されるものではない。
【００４７】
図１０に示されるように、デバイス８００は、ハウジング８０２、ディスプレイ８０４、入力／出力（Ｉ／Ｏ）デバイス８０６、及びアンテナ８０８を含み得る。デバイス８００はまた、ナビゲーション特徴８１２を含み得る。ディスプレイ８０４は、モバイルコンピューティングデバイスに適切な情報を表示するための任意の適切なディスプレイユニットを含み得る。Ｉ／Ｏデバイス８０６は、モバイルコンピューティングデバイスに情報を入力するための任意の適切なＩ／Ｏデバイスを含み得る。Ｉ／Ｏデバイス８０６の例は、英数字キーボード、数字キーパッド、タッチパッド、入力キー、ボタン、スイッチ、ロッカースイッチ、マイクロフォン、スピーカ、音声認識デバイス及びソフトウェア等を含み得る。情報はまた、マイクロフォンを介してデバイス８００に入力され得る。そのような情報は、音声認識デバイスによりデジタル化され得る。実施形態は、このコンテキストにおいて限定されるものではない。
【００４８】
さらなる留意事項及び例：
例１は、コンテンツを受信する無線機と、共有リソースと、前記共有リソースに関連付けられているソフトウェアモジュールを実行するホストプロセッサと、シェーダディスパッチモジュールと、を備えるシステムを含み得る。前記シェーダディスパッチモジュールは、前記ソフトウェアモジュールから、前記コンテンツに関連するドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するインタフェースを含み得る。前記シェーダディスパッチモジュールは、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャをさらに含み得る。前記システムは、前記コンテンツを視覚的に提示するディスプレイをさらに備え得る。
【００４９】
例２は、前記ドローコールマネージャが、進行中のグローバルに監視されるドローコールのグローバルカウンタと、前記ドローコールが前記共有リソースにアクセスすることが前記第１の信号により示され、前記ドローコールの開始に到達したことが前記第２の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第３の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するコヒーレンシユニットであって、前記ワークロードが、前記グローバルカウンタが０に達するまで保留される、コヒーレンシユニットと、を含む、例１のシステムを含み得る。
【００５０】
例３は、前記ドローコールマネージャが、前記ドローコールの終了に到達したことが前記第２の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするインクリメントユニットと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするデクリメントユニットと、をさらに含む、例２のシステムを含み得る。
【００５１】
例４は、前記ドローコールマネージャが、グループ識別子先入れ先出し（ＦＩＦＯ）バッファと、前記ドローコールが前記共有リソースに対して書き込むことが前記第１の信号により示され、且つ前記ドローコールの開始に到達したことが前記第２の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるアロケータと、前記グループ識別子を前記グループ識別子ＦＩＦＯバッファに追加するプッシュユニットと、を含む、例１のシステムを含み得る。
【００５２】
例５は、前記ドローコールマネージャが、スレッドカウンタと、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとに前記スレッドカウンタをインクリメントするインクリメントユニットと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチする起動ユニットと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするデクリメントユニットと、を含む、例１のシステムを含み得る。
【００５３】
例６は、ドローコールマネージャが、グループ識別子先入れ先出し（ＦＩＦＯ）バッファと、該グループ識別子ＦＩＦＯバッファ内の最初のエントリが、０であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが０より大きいことに応じて、グローバルに監視される通知をポストするグローバル監視ユニットであって、該スレッドカウンタが、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタが、進行中のグローバルに監視されるドローコールをトラッキングする、グローバル監視ユニットと、を含む、例１乃至５いずれかのシステムを含み得る。
【００５４】
例７は、シェーダディスパッチモジュールを動作させる方法であって、共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するステップと、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするディスパッチステップと、を含む方法を含み得る。
【００５５】
例８は、前記ディスパッチステップが、前記ドローコールが前記共有リソースにアクセスすることが前記第１の信号により示され、前記ドローコールの開始に到達したことが前記第２の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第３の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するステップであって、前記ワークロードが、進行中のグローバルに監視されるドローコールのグローバルカウンタが０に達するまで保留される、ステップを含む、例７の方法を含み得る。
【００５６】
例９は、前記ドローコールの終了に到達したことが前記第２の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするステップと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするステップと、をさらに含む、例８の方法を含み得る。
【００５７】
例１０は、前記ドローコールが前記共有リソースに対して書き込むことが前記第１の信号により示され、且つ前記ドローコールの開始に到達したことが前記第２の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるステップと、前記グループ識別子を先入れ先出しバッファに追加するステップと、をさらに含む、例７の方法を含み得る。
【００５８】
例１１は、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、をさらに含む、例７の方法を含み得る。
【００５９】
例１２は、先入れ先出しバッファ内の最初のエントリが、０であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが０より大きいことに応じて、グローバルに監視される通知をポストするステップであって、該スレッドカウンタが、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタが、進行中のグローバルに監視されるドローコールをトラッキングする、ステップをさらに含む、例７乃至１１いずれかの方法を含み得る。
【００６０】
例１３は、命令のセットを含む少なくとも１つのコンピュータ読み取り可能な記憶媒体であって、前記命令のセットが、コンピューティングデバイスのシェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するステップと、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするステップと、を実行させる、少なくとも１つのコンピュータ読み取り可能な記憶媒体を含み得る。
【００６１】
例１４は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールが前記共有リソースにアクセスすることが前記第１の信号により示され、前記ドローコールの開始に到達したことが前記第２の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第３の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するステップであって、前記ワークロードが、進行中のグローバルに監視されるドローコールのグローバルカウンタが０に達するまで保留される、ステップを実行させる、例１３の少なくとも１つのコンピュータ読み取り可能な記憶媒体を含み得る。
【００６２】
例１５は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールの終了に到達したことが前記第２の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするステップと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするステップと、を実行させる、例１４の少なくとも１つのコンピュータ読み取り可能な記憶媒体を含み得る。
【００６３】
例１６は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールが前記共有リソースに対して書き込むことが前記第１の信号により示され、且つ前記ドローコールの開始に到達したことが前記第２の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるステップと、前記グループ識別子を先入れ先出しバッファに追加するステップと、を実行させる、例１３の少なくとも１つのコンピュータ読み取り可能な記憶媒体を含み得る。
【００６４】
例１７は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、を実行させる、例１３の少なくとも１つのコンピュータ読み取り可能な記憶媒体を含み得る。
【００６５】
例１８は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、先入れ先出しバッファ内の最初のエントリが、０であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが０より大きいことに応じて、グローバルに監視される通知をポストするステップであって、該スレッドカウンタが、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタが、進行中のグローバルに監視されるドローコールをトラッキングする、ステップを実行させる、例１３乃至１７いずれかの少なくとも１つのコンピュータ読み取り可能な記憶媒体を含み得る。
【００６６】
例１９は、共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第１の信号と、前記ドローコールの境界に到達したかどうかを示す第２の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第３の信号と、を含む複数の信号を受信するインタフェースと、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャと、を備えたシェーダディスパッチモジュールを含み得る。
【００６７】
例２０は、前記ドローコールマネージャが、進行中のグローバルに監視されるドローコールのグローバルカウンタと、前記ドローコールが前記共有リソースにアクセスすることが前記第１の信号により示され、前記ドローコールの開始に到達したことが前記第２の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第３の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するコヒーレンシユニットであって、前記ワークロードが、前記グローバルカウンタが０に達するまで保留される、コヒーレンシユニットと、を含む、例１９のシェーダディスパッチモジュールを含み得る。
【００６８】
例２１は、前記ドローコールマネージャが、前記ドローコールの終了に到達したことが前記第２の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするインクリメントユニットと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするデクリメントユニットと、をさらに含む、例２０のシェーダディスパッチモジュールを含み得る。
【００６９】
例２２は、前記ドローコールマネージャが、グループ識別子先入れ先出し（ＦＩＦＯ）バッファと、前記ドローコールが前記共有リソースに対して書き込むことが前記第１の信号により示され、且つ前記ドローコールの開始に到達したことが前記第２の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるアロケータと、前記グループ識別子を前記グループ識別子ＦＩＦＯバッファに追加するプッシュユニットと、を含む、例１９のシェーダディスパッチモジュールを含み得る。
【００７０】
例２３は、前記ドローコールマネージャが、スレッドカウンタと、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとに前記スレッドカウンタをインクリメントするインクリメントユニットと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチする起動ユニットと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするデクリメントユニットと、を含む、例１９のシェーダディスパッチモジュールを含み得る。
【００７１】
例２４は、前記ドローコールマネージャが、グループ識別子先入れ先出し（ＦＩＦＯ）バッファと、該グループ識別子ＦＩＦＯバッファ内の最初のエントリが、０であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが０より大きいことに応じて、グローバルに監視される通知をポストするグローバル監視ユニットであって、該スレッドカウンタは、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタは、進行中のグローバルに監視されるドローコールをトラッキングする、グローバル監視ユニットと、を含む、例１９乃至２３いずれかのシェーダディスパッチモジュールを含み得る。
【００７２】
例２５は、例７乃至１２いずれかの方法を実行する手段を備えたシェーダディスパッチモジュールを含み得る。
【００７３】
したがって、本明細書に記載の技術は、グラフィックスパイプラインにおける大きなギャップを回避して、コヒーレンシが要求される段までドローコールイベントを完全にパイプライン化することができる。例えば、画素シェーダディスパッチ（ＰＳＤ）機能は、複数のドローコールをトラッキングするために、ブックキーピング情報を保持して、パイプラインレベルでハードウェアにおけるコヒーレンシを強制することができる。このようなアプローチは、比較的大量のドローコールをリアルタイムで処理するインタラクティブアプリケーションにとって特に有用であり得る。
【００７４】
様々な実施形態は、ハードウェア要素、ソフトウェア要素、又はこれらの組合せを使用して実装され得る。ハードウェア要素の例は、プロセッサ、マイクロプロセッサ、回路、回路素子（例えば、トランジスタ、レジスタ、キャパシタ、インダクタ等）、集積回路、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）、デジタル信号プロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ロジックゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット等を含み得る。ソフトウェア要素の例は、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、ファンクション、メソッド、プロシージャ、ソフトウェアインタフェース、アプリケーションプログラムインタフェース（ＡＰＩ）、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、又はこれらの任意の組合せを含み得る。実施形態が、ハードウェア要素及び／又はソフトウェア要素を使用して実装されるかの決定は、所望の計算速度、電力レベル、熱耐性、処理サイクルバジェット、入力データ速度、出力データ速度、メモリリソース、データバス速度、及び他の設計制約又は性能制約等の任意の数のファクタに応じて変わり得る。
【００７５】
少なくとも１つの実施形態の１以上の態様は、プロセッサ内の様々なロジックを表現する、マシン読み取り可能な媒体に記憶される表現命令により実装され得る。この表現命令が、マシンにより読み取られると、この表現命令は、マシンに、本明細書に記載の技術を実行するためのロジックを製造させる。「ＩＰコア」として知られているそのような表現は、有体のマシン読み取り可能な媒体に記憶され、様々な顧客、又は、実際にロジック又はプロセッサを製造する製造マシンにロードする製造施設に提供され得る。
【００７６】
実施形態は、全てのタイプの半導体集積回路（「ＩＣ」）チップとともに使用するのに適用可能である。これらのＩＣチップの例は、プロセッサ、コントローラ、チップセットコンポーネント、プログラマブルロジックアレイ（ＰＬＡ）、メモリチップ、ネットワークチップ等を含むが、これらに限定されるものではない。さらに、図面のうちのいくつかにおいて、信号線が、線で表されている。いくつかのものは、より多くの構成信号パスを示すために異なり、構成信号パスの数を示すために数ラベルを有し、且つ／又は、プライマリ情報フロー方向を示すために１以上の端部に矢印を有する。しかしながら、これは、限定的に解釈されるべきではない。むしろ、そのような追加された詳細は、回路のより容易な理解を促進させるために、１以上の例示的な実施形態に関連して用いられ得る。表されているあらゆる信号線は、追加的な情報を有するか否かにかかわらず、実際には複数の方向に移動することができる１以上の信号を含み得、例えば、差動ペアとともに実装されるデジタル線又はアナログ線、光ファイバ線、及び／又はシングルエンド線といった任意の適切なタイプの信号スキームにより実装され得る。
【００７７】
サイズ／モデル／値／範囲の例が与えられているかもしれないが、実施形態は、そのような例に限定されるものではない。製造技術（例えば、フォトリソグラフィ）は時間とともに成熟するため、より小型サイズのデバイスが製造される可能性があることが予想される。さらに、ＩＣチップ及び他のコンポーネントへの周知の電源／接地接続は、図示及び説明の簡潔さのために、そして実施形態の所定の態様を曖昧にしないようにするために、図面内に示されていることもあるし示されていないこともある。さらに、実施形態を曖昧にするのを避けるために、そして、ブロック図の配置の実装に関する詳細が、実施形態がその内部に実装されることになるプラットフォームに高度に依存するという事実を考慮して、そのような配置は、ブロック図の形で示されることがある、すなわち、そのような詳細は、十分に当業者の視野内にあるものである。例示的な実施形態を説明するために具体的な詳細（例えば、回路）が記載されている場合、実施形態は、これらの具体的な詳細なく又はその変形をもって、実施できることが、当業者には明らかであろう。したがって、本説明は、限定ではなく例示と考えられるべきである。
【００７８】
いくつかの実施形態は、例えば、命令又は命令のセットを記憶することができる有体のコンピュータ読み取り可能な媒体若しくは製品、又はマシンを使用して、実装され得る。このような命令又は命令のセットが、マシンにより実行された場合、このような命令又は命令のセットは、これらの実施形態に従った方法及び／又は動作をマシンに実行させることができる。このようなマシンは、例えば、任意の適切な処理プラットフォーム、コンピューティングプラットフォーム、コンピューティングデバイス、処理デバイス、コンピューティングシステム、処理システム、コンピュータ、プロセッサ等を含み得、ハードウェア及び／又はソフトウェアの任意の適切な組合せを使用して実装され得る。マシン読み取り可能な媒体又は製品は、例えば、任意の適切なタイプのメモリユニット、メモリデバイス、メモリ製品、メモリ媒体、記憶デバイス、ストレージ製品、記憶媒体、及び／又は記憶ユニットを含み得、例えば、メモリ、着脱可能な媒体、着脱不可能な媒体、消去可能な媒体、消去不可能な媒体、書き込み可能な媒体、再書き込み可能な媒体、デジタル媒体、アナログ媒体、ハードディスク、フロッピー（登録商標）ディスク、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクレコーダブル（ＣＤ−Ｒ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、光ディスク、磁気媒体、光磁気媒体、着脱可能なメモリカード又はディスク、様々なタイプのデジタル多用途ディスク（ＤＶＤ）、テープ、カセット等を含み得る。命令は、任意の適切な高水準プログラミング言語、低水準プログラミング言語、オブジェクト指向プログラミング言語、ビジュアルプログラミング言語、コンパイル型プログラミング言語、及び／又はインタープリタ型プログラミング言語を使用して実装されるソースコード、コンパイル済みコード、インタープリット済みコード、実行可能コード、静的コード、動的コード、暗号化済みコード等といった任意の適切なタイプのコードを含み得る。
【００７９】
別途明示されない限り、「処理する」、「計算する」、「算出する」、「判定する」等といった用語は、コンピューティングシステムのレジスタ及び／又はメモリ内の物理（電子）量として表されたデータを操作し、且つ／又は、このようなデータを、コンピューティングシステムのメモリ、レジスタ又は他のこのような情報記憶デバイス、伝送デバイス若しくはディスプレイデバイス内の物理量として同様に表されるデータに変換するコンピュータ、コンピューティングシステム、又は同様の電子コンピューティングデバイスの動作及び処理を指すことが理解できるであろう。実施形態は、このコンテキストにおいて限定されるものではない。
【００８０】
「接続される、接続されている、接続された」という用語は、本明細書において、直接的であるか間接的であるかを問わず、当該のコンポーネントの間のあらゆるタイプの関係を指すために使用され得、電気的接続、機械的接続、流体接続、光接続、電磁接続、電気機械的接続、又は他の接続に適用され得る。さらに、「第１の」、「第２の」等といった用語は、本明細書において、説明を容易にするためのみに使用されており、別途明示されない限り、特定の時間的意義又は経時的意義を有していない。さらに、不定冠詞「a」又は「an」は、「１以上」又は「少なくとも１つ」という意味を有することを理解されたい。
【００８１】
当業者であれば、上記の説明から、実施形態の広範な技術が様々な形態で実装され得ることが、理解されよう。したがって、実施形態が、その特定の例に関連して説明されたが、図面、明細書、及び特許請求の範囲を検討すれば、他の変更が当業者には明らかになるため、実施形態の真の範囲は、そのように限定されるべきではない。
【００８２】
（関連出願との相互参照）
本出願は、２０１４年６月２６日に出願された米国特許出願第１４／３１５５９７号に対する優先権の利益を主張する。
【図１】
0006374038.tif 000003
【図２】
0006374038.tif 000004
【図３】
0006374038.tif 000005
【図４】
0006374038.tif 000006
【図５】
0006374038.tif 000007
【図６】
0006374038.tif 000008
【図７】
0006374038.tif 000009
【図８】
0006374038.tif 000010
【図９】
0006374038.tif 000011
【図１０】
0006374038.tif 000012