(58)【調査した分野】(Int.Cl.,DB名)
コンピュータプログラムであって、前記コンピュータプログラムが、コンピューティングデバイスのシェーダディスパッチモジュールにより実行されたときに、前記コンピュータプログラムは、前記シェーダディスパッチモジュールに、
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信するステップと、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするステップと、
を実行させる、コンピュータプログラム。
前記コンピュータプログラムが、前記シェーダディスパッチモジュールにより実行されたときに、前記コンピュータプログラムは、前記シェーダディスパッチモジュールに、
前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、
前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、
前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、
を実行させる、請求項5記載のコンピュータプログラム。
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信するインタフェースと、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャと、
を備えたシェーダディスパッチモジュール。
共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信する手段と、
前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチする手段と、
を備えたシェーダディスパッチモジュール。
【発明を実施するための形態】
【0004】
図1は、例えば、アプリケーションプログラミングインタフェース(API)、オペレーティングシステム(OS)コンポーネント、ユーザモードドライバ(UMD)等といったソフトウェアモジュール32が、一連の段を有するグラフィックスパイプライン22にドローコール33(33a、33b)を発行するアーキテクチャ20を示している。図示される例において、これらの段は、一般に、最終画像を構成するために使用される画素、頂点、及び/又はテクスチャの位置、色相、彩度、明度、及びコントラストを設定することができる複数のシェーダインボケーション(invocation)24(24a、24b、例えば、グラフィックスプロセッサ内にあり、コンピュートエンジン/スライス、実行ユニット、又は他のグラフィックスハードウェア等)を含む。複数のシェーダインボケーション24は、例えば、上流(upstream)シェーダ24a及び下流(downstream)シェーダ24bを含み得る。上流シェーダ24a及び下流シェーダ24bは、ドローコール33に従ってそれぞれのシェーダインボケーション24に(例えば、スレッド及び/又はスレッドグループの形態の)ワークロードをディスパッチする対応するシェーダディスパッチモジュール26(26a、26b、例えば、グラフィックスハードウェア内にある)を有する。シェーダインボケーション24は、共有リソース30(例えば、DIRECTX(登録商標)アンオーダードアクセスビュー(UAV)、OPENGL(登録商標)イメージ、汎用バッファ、スクラッチメモリ等)へのアクセス28(28a、28b)を発行することができる。アクセス28は、一般に、ディスプレイ/スクリーン(図示せず)を介して出力されるレンダリングターゲットへの最終画像の移動の前に、共有リソース30に視覚的情報(例えば、中間サーフェス情報、スクラッチメモリデータ)をバッファ/格納することができる。
【0005】
より詳細には、図示される上流シェーダ24aが、共有リソース30への第1のアクセス28a(「共有リソースアクセス#1」)を発行し、ここで、第1のアクセス28aは、第1のドローコール33a(「ドローコール#1」)に対応する。同様に、図示される下流シェーダ24bが、共有リソース30への第2のアクセス28b(「共有リソースアクセス#2」)を発行し、ここで、第2のアクセス28bは、第2のドローコール33b(「ドローコール#2」)に対応する。第1のアクセス28aは、例えば、画像の特定の領域(例えば、16個のスレッドのグループにより操作される4×4ブロックの画素)に対する頂点シェーダ操作、ハルシェーダ操作、ドメインシェーダ操作、及び/又はジオメトリシェーダ操作に関与する1以上のスレッドから発行され得るのに対し、第2のアクセス28bは、例えば、その画像の同じ領域に対する画素シェーダ操作に関与する1以上のスレッドから発行され得る。したがって、第1のアクセス28aが、第2のアクセス28bにより消費されるデータを書き込む場合、生成側−消費側の関係が、ドローコール33の間にシェーダインボケーション24にわたって存在し得る。
【0006】
図示される例において、第1のドローコール33aの後に、パイプラインフラッシュを発行し、第2のドローコール33bを発行する前に、フラッシュがパイプライン22の最初から最後まで進むのを待つ代わりに、ソフトウェアモジュール32は、第1のドローコール33aとともに第1の複数の信号34を発行し、第2のドローコール33bとともに第2の複数の信号35を発行する。以下でより詳細に説明するように、図示される信号34、35は、ディスパッチモジュール26のうちの1以上のディスパッチモジュール26が、パイプラインレベルでドローコール33のステータスを内部的にトラッキングし、生成側−消費側の関係が存在するかどうかを判定することを可能にする。したがって、下流シェーダ24bに対応するディスパッチモジュール26bは、第2の複数の信号35に基づいて、第2のドローコール28bに対応するワークロードを選択的にディスパッチすることができる。特に注目すべきなのは、第2のドローコール33bに対応するワークロードが、パイプライン22全体がフラッシュされるのを待つ代わりに、パイプライン22の前の段を経て進行することが可能にされ得ることである。このようなアプローチは、パイプライン22におけるバブルの存在を大幅に低減させることができ、それにより、効率性及び性能を向上させ、電力消費を低減させ、且つ/又は、バッテリ寿命を延ばすことができる。
【0007】
信号34、35は、各ドローコール33が共有リソース30にアクセスするかどうかに関する情報、各ドローコール33の境界(例えば、開始、終了)に到達したかどうかに関する情報、各ドローコール33がコヒーレンシ要件を有するかどうか(例えば、各ドローコール33が前のドローコールに対する消費側であるかどうか)に関する情報等を伝達するコマンド/命令ビットのセットとしてフォーマット化され得る。以下の表Iは、信号34、35についてのプロトコルの一例を示している。
【0009】
したがって、アクセス28を生じさせるドローコール33が、ソフトウェアモジュール32によりグラフィックスパイプライン22に対して発行されると、信号34、35が、例えば、下流シェーダ24b(例えば、画素シェーダ)のディスパッチモジュール26b等の特定のシェーダインボケーション24のディスパッチモジュール26により調べられ得る。ディスパッチモジュール26は、次いで、信号34、35を使用して、ドローコール33及び関連付けられているスレッド/スレッドグループをトラッキングし、後続のワークロードをシェーダインボケーションにディスパッチするべきか、又は、例えば、1以上の生成側ドローコールが完了するまでそのようなワークロードを保留するべきか、を決定することができる。
【0010】
図2は、例えば、すでに説明しているディスパッチモジュール26b(
図1)等のシェーダディスパッチモジュールを動作させる方法40を示している。方法40は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、プログラム可能なROM(PROM)、フラッシュメモリ等といったマシン読み取り可能な又はコンピュータ読み取り可能な記憶媒体に記憶される論理命令のセットとしての、例えば、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、コンプレックスプログラマブルロジックデバイス(CPLD)等の設定可能なロジックとしての、例えば、特定用途向け集積回路(ASIC)、相補型金属酸化膜半導体(CMOS)、若しくはトランジスタ−トランジスタロジック(TTL)技術等の回路技術を用いた固定機能ロジックハードウェアとしての、又はこれらの任意の組合せとしての、1以上のモジュールにより実装され得る。例えば、方法40に示される動作を実行するためのコンピュータプログラムコードは、C++等のオブジェクト指向プログラミング言語、及び、「C」プログラミング言語又は同様のプログラミング言語等の慣用的な手続き型プログラミング言語を含む1以上のプログラミング言語の任意の組合せにより記述することができる。さらに、方法40は、本明細書で言及する回路技術のうちの任意の回路技術を使用して実装され得る。
【0011】
図示される処理ブロック42は、共有リソースに関連付けられているソフトウェアモジュールから、複数の信号を受信することを提供する。複数の信号は、例えば、ドローコールが共有リソースにアクセスするかどうかを示す第1の信号(例えば、表Iの「共有リソースマーカー」列に対応する1以上のビット)、ドローコールの境界に到達したかどうかを示す第2の信号(例えば、表Iの「共有リソース境界」列に対応する1以上のビット)、ドローコールが1以上の前のドローコールに対するコヒーレンシ要件を有するかどうかを示す第3の信号(例えば、表Iの「共有リソースコヒーレンシ要件」列に対応する1以上のビット)等を含み得る。さらに、ブロック44は、複数の信号に基づいて、シェーダインボケーションにおいて、ドローコールに対応するワークロードを選択的にディスパッチすることができる。
【0012】
ブロック44は、概して、例えば、RAWハザードを防止すること、グローバルカウンタを維持すること、スレッドグループ識別子についての先入れ先出し(FIFO)バッファにデータを追加すること、スレッドカウンタを維持すること、ドローコールをグローバルに監視すること等を含み得る。
図3〜
図7は、これらの様々な動作を実行する方法46、48、50、52、及び54を示している。方法46、48、50、52、及び54も、RAM、ROM、PROM、フラッシュメモリ等といったマシン読み取り可能な又はコンピュータ読み取り可能な記憶媒体に記憶される論理命令のセットとしての、例えば、PLA、FPGA、CPLD等の設定可能なロジックとしての、例えば、ASIC、CMOS、若しくはTTL技術等の回路技術を用いた固定機能ロジックハードウェアとしての、又はこれらの任意の組合せとしての、モジュールにより実装され得る。
【0013】
図3を詳細に参照すると、RAWハザードを防止する方法46が示されている。図示される処理ブロック56は、ドローコールの開始に遭遇したかどうかを判定することを提供する。したがって、ブロック56は、表Iの「共有リソース境界」列に対応するビットが、ドローコールコマンド/命令においてセットされているかどうか(すなわち、1という値を有するかどうか)を判定することを含み得る。「共有リソース境界」列に対応するビットがセットされている場合、ブロック58において、ドローコールが、1以上の前に遭遇したドローコールに対するコヒーレンシ要件を有するかどうかについての判定がなされ得る。したがって、ブロック58は、「共有リソースコヒーレンシ要件」ビットが、ドローコールコマンド/命令においてセットされているかどうかを判定することを含み得る。「共有リソースコヒーレンシ要件」ビットがセットされている場合、ブロック60は、進行中の(pending)グローバルに監視されるドローコールのグローバルカウンタが0に達するまで、シェーダへのワークロードを保留することを提供する。
【0014】
以下でより詳細に説明するように、グローバルカウンタは、グラフィックスパイプラインの下流コンポーネントに至るドローコールの進行をトラッキングするために使用され得る。したがって、0に達したグローバルカウンタは、パイプラインの残りの部分(remainder)がドローコールをもはや含んでいないことを示すことができる。そのような状態は、今度は、RAWハザードについての懸念なく、ワークロードがシェーダインボケーションにディスパッチされてもよいことを示すことができる。ドローコールの開始に遭遇していない場合又はドローコールがコヒーレンシ要件を有さない場合のいずれかにおいて、ブロック60は、図示される例においてバイパスされる。
【0015】
図4を詳細に参照すると、グローバルカウンタを維持する方法48が示されている。図示される処理ブロック62は、ドローコールの終了に到達したかどうかを判定する。したがって、ブロック62は、表Iの「共有リソース境界」列に対応するビットが、ドローコールコマンド/命令においてセットされていないかどうか(すなわち、0という値を有するかどうか)を判定することを含み得る。「共有リソース境界」列に対応するビットがセットされていない場合、図示されるブロック64において、進行中のグローバルに監視される(「GO(globally observed)」)ドローコールのグローバルカウンタがインクリメントされる。そうでない場合、ブロック64は、バイパスされ得る。ブロック66は、グローバルに監視されるアクノレッジメントが、グラフィックスパイプラインの下流コンポーネントから受信されたかどうかを判定することができる。このアクノレッジメントが受信された場合、ブロック68は、グローバルカウンタをデクリメントすることができる。そうでない場合、ブロック68は、バイパスされ得る。したがって、グローバルカウンタ値は、ドローコールが終了すると上に変動し、ドローコールがアクノレッジされると下に変動し得、終了したドローコールの数がGOドローコールの数に等しくなると、グローバルカウンタは0に達する。
【0016】
図5を詳細に参照すると、FIFOバッファにデータを追加する方法50が示されている。図示される処理ブロック70は、ドローコールが共有リソースに対して書き込むかどうかを判定する。したがって、ブロック70は、表Iの「共有リソースマーカー」列に対するビットが、ドローコールコマンド/命令においてセットされているかどうかを判定することを含み得る。「共有リソースマーカー」列に対応するビットがセットされている場合、図示されるブロック72は、ドローコールの開始に遭遇したかどうかを判定する。ドローコールの開始に遭遇した場合、ブロック74において、グループ識別子(ID、例えば、「色」ID)が、スレッドのグループに対して割り当てられ得、図示されるブロック76は、割り当てられたグループIDを先入れ先出し(FIFO)バッファに追加する。例えば、16個のスレッドのグループが、画像の4×4領域を操作するために、ドローコールを使用する場合、グループIDが、16個のスレッドのこのグループに割り当てられ得、今度は、このグループIDが、上記ドローコールに関連付けられ得る。一例において、2ビットのグループIDが使用され、FIFOバッファは、4エントリ分の深さである。状況に応じて、他のID及びバッファ構成が使用されてもよい。ドローコールが共有リソースに対して書き込まない場合又はドローコールの開始に遭遇していない場合のいずれかにおいて、ブロック74及び76は、図示される例においてバイパスされる。
【0017】
図6を詳細に参照すると、スレッドカウンタを維持する方法52が示されている。図示される処理ブロック78は、スレッドカウンタをインクリメントする。ここで、スレッドカウンタは、ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングする。したがって、スレッドグループが、16個のスレッドを含む場合、例えば、ブロック78は、スレッドカウンタを16回インクリメントすることができる。ブロック80は、スレッドグループ内の16個のスレッドを、シェーダインボケーションにディスパッチすることを提供することができ、ブロック82において、スレッドグループ内の各スレッドの回収に応じて、スレッドカウンタがデクリメントされ得る。
【0018】
図7を詳細に参照すると、ドローコールをグローバルに監視する(例えば、システムレベルで監視する)方法54が示されている。図示される処理ブロック84は、FIFOバッファ内の最初(一番上)のエントリが、0であるスレッドカウンタを伴うグループIDを有するかどうかを判定する。ブロック84において、最初のエントリが、0であるスレッドカウンタを伴うグループIDを有すると判定され、且つ、ブロック86において、グローバルカウンタが0より大きいと判定された場合、ブロック88は、GO通知をポストすることができる。FIFOバッファ内の最初のエントリに対応するスレッドカウンタが0でない場合又はグローバルカウンタが0より大きくない場合のいずれかにおいて、ブロック88は、図示される例においてバイパスされる。
【0019】
図8は、すでに説明しているシェーダディスパッチモジュール26(
図1)のうちの任意のシェーダディスパッチモジュール26の代わりに容易に使用され得るシェーダディスパッチモジュール90(90a、90b)を示している。図示される例において、インタフェース90aは、共有リソースに関連付けられているソフトウェアモジュールから、複数の信号を受信する。複数の信号は、例えば、ドローコールが共有リソースにアクセスするかどうかを示す第1の信号、ドローコールの境界(例えば、開始、終了)に到達したかどうかを示す第2の信号、ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号等を含み得る。
【0020】
図示されるシェーダディスパッチモジュール90はまた、複数の信号に基づいて、シェーダインボケーションにおいて、ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャ90bを含む。一例において、ドローコールマネージャ90bは、進行中のGOドローコールのグローバルカウンタ92と、ドローコールが共有リソースにアクセスすることが第1の信号により示され、ドローコールの開始に到達したことが第2の信号により示され、且つドローコールがコヒーレンシ要件を有することが第3の信号により示された場合に限り、シェーダインボケーションへのワークロードを保留するコヒーレンシユニット94と、を含む。このような場合、グローバルカウンタ92が0に達するまで、ワークロードは保留され得る。図示されるグローバルカウンタ92は、ドローコールの終了に到達したことが第2の信号により示されたことに応じて、グローバルカウンタ92をインクリメントするインクリメントユニットと、下流コンポーネントからアクノレッジメントに応じて、グローバルカウンタ92をデクリメントするデクリメントユニットと、を含む。
【0021】
ドローコールマネージャ90bはまた、グループID FIFOバッファ96と、ドローコールが共有リソースに対して書き込むことが第1の信号により示され、且つドローコールの開始に到達したことが第2の信号により示された場合に、スレッドのグループに対してグループIDを割り当てるアロケータ98と、を含み得る。さらに、プッシュユニット100は、割り当てられたグループIDをFIFOバッファ96に追加することができる。
【0022】
図示されるドローコールマネージャ90bはまた、1以上のスレッドカウンタ102を含む。各スレッドカウンタ102は、ドローコールに関連付けられているスレッドグループ内のスレッドごとに当該スレッドカウンタ102をインクリメントするインクリメントユニットを含む。起動ユニット(launch unit)104は、スレッドグループ内のスレッドをシェーダインボケーションにディスパッチすることができる。さらに、各スレッドカウンタ102は、スレッドグループ内の各スレッドの回収に応じて、当該スレッドカウンタ102をデクリメントするデクリメントユニットを含み得る。
【0023】
ドローコールマネージャ90bはまた、FIFOバッファ96内の最初のエントリが、0であるスレッドカウンタを伴うグループIDを有し、且つグローバルカウンタ92が0より大きいことに応じて、GO通知をポストするグローバル監視ユニット106を含み得る。すでに説明しているように、スレッドカウンタ102は、ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングすることができ、グローバルカウンタ92は、進行中のGOドローコールをトラッキングすることができる。
【0024】
以下の擬似コードは、シェーダディスパッチモジュール90の1以上の態様を実装する1つのアプローチを提供する。
Process_Draw()
{
If DrawBegin() {
If DrawRequiresUAVCoherency() {
Wait on (PendingGOCounter==0);
}
If DrawOutputsUAV() {
Wait on (AllocateGroupID()!=NULL); // グループIDが利用可能になるまで待機する
CurrentGroupID=AllocateGroupID();
Push.GroupIDFIFO(CurrentGroupID);
}
}
For all PS threads in the CurrentDraw { // すなわち、in CurrentGrouplD
PendingFFTID[GroupID]++;
LaunchPSThread[FFTID];
}
If DrawEnd() {
PendingGOCounter++;
}
}
Process DecrementFFTIDCounter(GroupID) { // PSスレッド回収がこのプロセスを呼び出す
PendingFFTID[GroupID]--;
}
Process PostGONotification(GroupID) { // 最初のエントリのpendingFFTIDcounterが0になると、このプロセスがトリガされる
If (PendingFFTID[GoupIDFIFO.TopEntry]==0) AND (PendingGOCounter>0) {
PostGONotification();
}
}
Process DecrementPendingGOCounter() { // 下流からのGOアクノレッジメントの受信により呼び出される
PendingGOCounter--;
}
【0025】
図9は、一実施形態に従って、視覚的コンテンツを出力することができるシステム700の一実施形態を示している。実施形態において、システム700は、メディアシステムであり得るが、システム700は、このコンテキストに限定されるものではない。例えば、システム700は、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレットコンピュータ、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、携帯情報端末(PDA)、セルラ電話機、セルラ電話機/PDAの組合せ、テレビジョン、スマートデバイス(例えば、スマートフォン又はスマートテレビジョン)、モバイルインターネットデバイス(MID)、メッセージングデバイス、データ通信デバイス、ゲームコンソール等に組み込むことができる。
【0026】
実施形態において、システム700は、ディスプレイ720に接続されるプラットフォーム702を備える。プラットフォーム702は、1以上のコンテンツサービスデバイス730若しくは1以上のコンテンツ配信デバイス740又は同様のコンテンツソース等のコンテンツデバイスから、コンテンツを受信することができる。1以上のナビゲーション特徴を含むナビゲーションコントローラ750を使用して、例えば、プラットフォーム702及び/又はディスプレイ720とインタラクトすることができる。これらのコンポーネントの各々が、以下でより詳細に説明される。
【0027】
実施形態において、プラットフォーム702は、チップセット705、プロセッサ710、メモリ712、ストレージ714、グラフィックスサブシステム715、アプリケーション716、及び/又は無線機718の任意の組合せを含み得る。チップセット705は、プロセッサ710、メモリ712、ストレージ714、グラフィックスサブシステム715、アプリケーション716、及び/又は無線機718の間の相互通信を提供することができる。例えば、チップセット705は、ストレージ714との相互通信を提供することができるストレージアダプタ(図示せず)を含み得る。
【0028】
プロセッサ710は、複合命令セットコンピュータ(CISC)プロセッサ、縮小命令セットコンピュータ(RISC)プロセッサ、x86命令セット互換プロセッサ、マルチコアマイクロプロセッサ若しくは任意の他のマイクロプロセッサ、又は中央処理装置(CPU)として実装され得る。実施形態において、プロセッサ710は、1以上のデュアルコアプロセッサ、1以上のデュアルコアモバイルプロセッサ等を含み得る。
【0029】
メモリ712は、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、又はスタティックRAM(SRAM)等の揮発性メモリデバイスとして実装され得るが、これらに限定されるものではない。
【0030】
ストレージ714は、磁気ディスクドライブ、光ディスクドライブ、テープドライブ、内蔵記憶デバイス、外付け記憶デバイス、フラッシュメモリ、バッテリバックアップ型SDRAM(シンクロナスDRAM)、及び/又はネットワークアクセス可能な記憶デバイス等の不揮発性記憶デバイスとして実装され得るが、これらに限定されるものではない。実施形態において、ストレージ714は、例えば、複数のハードドライブが含まれる場合には、価値のあるデジタルメディアのための記憶性能拡張保護を増大させる技術を含み得る。
【0031】
グラフィックスサブシステム715は、表示のための静止画像又はビデオ等の画像の処理を実行することができる。グラフィックスサブシステム715は、例えば、グラフィックス処理装置(GPU)又はビジュアル処理装置(VPU)であり得る。アナログインタフェース又はデジタルインタフェースを使用して、グラフィックスサブシステム715とディスプレイ720とを通信可能に接続することができる。例えば、このようなインタフェースは、高精細度マルチメディアインタフェース(HDMI(登録商標))、DisplayPort、ワイヤレスHDMI(登録商標)、及び/又はワイヤレスHD準拠技術のうちの任意のものであり得る。グラフィックスサブシステム715は、プロセッサ710又はチップセット705に組み込まれることもある。グラフィックスサブシステム715は、チップセット705に通信可能に接続されるスタンドアロンカードであることもある。一例において、グラフィックスサブシステム715は、例えば、すでに説明しているグラフィックスパイプライン22(
図1)等のパイプラインを含み、プロセッサ710は、例えば、すでに説明しているソフトウェアモジュール32(
図1)等のソフトウェアモジュールを実行するホストプロセッサであり、メモリ712は、例えば、すでに説明している共有リソース30(
図1)等の共有リソースを含む。
【0032】
本明細書に記載のグラフィックス処理技術及び/又はビデオ処理技術は、様々なハードウェアアーキテクチャにおいて実装され得る。例えば、グラフィックス機能及び/又はビデオ機能は、チップセット内に統合され得る。代替的に、別個のグラフィックスプロセッサ及び/又はビデオプロセッサが使用されてもよい。さらに別の実施形態として、グラフィックス機能及び/又はビデオ機能は、マルチコアプロセッサを含む汎用プロセッサにより実装されてもよい。さらなる実施形態において、これらの機能は、コンシューマ電子デバイス内に実装されてもよい。
【0033】
無線機718は、種々の適切な無線通信技術を使用して信号を送受信することができる1以上の無線機を含み得る。そのような技術は、1以上の無線ネットワークを介する通信に関連し得る。例示的な無線ネットワークは、無線ローカルエリアネットワーク(WLAN)、無線パーソナルエリアネットワーク(WPAN)、無線メトロポリタンエリアネットワーク(WMAN)、セルラネットワーク、及びサテライトネットワークを含む(が、これらに限定されるものではない)。このようなネットワークを介して通信する際、無線機718は、任意のバージョンの1以上の適用可能な規格に従って動作することができる。
【0034】
実施形態において、ディスプレイ720は、任意のテレビジョン型モニタ又はディスプレイを含み得る。ディスプレイ720は、例えば、コンピュータディスプレイスクリーン、タッチスクリーンディスプレイ、ビデオモニタ、テレビジョン状デバイス、及び/又はテレビジョンを含み得る。ディスプレイ720は、デジタル式且つ/又はアナログ式であり得る。実施形態において、ディスプレイ720は、ホログラフィックディスプレイであり得る。また、ディスプレイ720は、視覚的投影を受像することができる透過表面であり得る。そのような投影は、様々な形態の情報、画像、及び/又はオブジェクトを伝えることができる。例えば、そのような投影は、モバイル拡張現実(MAR)アプリケーションのための視覚的オーバーレイであり得る。1以上のソフトウェアアプリケーション716の制御の下、プラットフォーム702は、ディスプレイ720上にユーザインタフェース722を表示することができる。
【0035】
実施形態において、1以上のコンテンツサービスデバイス730は、任意の国内サービス、国際サービス、及び/又は独立サービスによりホストされ得、したがって、例えば、インターネットを介してプラットフォーム702にアクセス可能である。1以上のコンテンツサービスデバイス730は、プラットフォーム701及び/又はディスプレイ720に接続され得る。プラットフォーム702及び/又は1以上のコンテンツサービスデバイス730は、ネットワーク760との間でメディア情報を通信する(例えば、送信及び/又は受信する)ために、ネットワーク760に接続され得る。1以上のコンテンツ配信デバイス740も、プラットフォーム702及び/又はディスプレイ720に接続され得る。
【0036】
実施形態において、1以上のコンテンツサービスデバイス730は、ケーブルテレビジョンボックス、パーソナルコンピュータ、ネットワーク、電話機、デジタル情報及び/又はコンテンツを配信することができるインターネット対応デバイス又は機器、及び、コンテンツプロバイダとプラットフォーム702及び/又はディスプレイ720との間でネットワーク760を介して又は直接的にコンテンツを単方向又は双方向に通信することができる任意の他の同様のデバイスを含み得る。コンテンツは、システム700内のコンポーネントのうちの任意の1つのコンポーネントとコンテンツプロバイダとの間でネットワーク760を介して単方向且つ/又は双方向に通信され得ることが理解されよう。コンテンツの例は、例えば、ビデオ、音楽、医療情報、ゲーム情報等を含む任意のメディア情報を含み得る。
【0037】
1以上のコンテンツサービスデバイス730は、メディア情報、デジタル情報、及び/又は他のコンテンツを含むケーブルテレビジョン番組等のコンテンツを受信する。コンテンツプロバイダの例は、任意のケーブルテレビジョンプロバイダ、衛星テレビジョンプロバイダ、ケーブルラジオプロバイダ、衛星ラジオプロバイダ、又はインターネットコンテンツプロバイダを含み得る。提供した例は、実施形態を限定するよう意図されるものではない。
【0038】
実施形態において、プラットフォーム702は、1以上のナビゲーション特徴を有するナビゲーションコントローラ750から、制御信号を受信することができる。ナビゲーションコントローラ750のナビゲーション特徴を使用して、例えば、ユーザインタフェース722とインタラクトすることができる。実施形態において、ナビゲーションコントローラ750は、ユーザが空間データ(例えば、連続的な多次元のデータ)をコンピュータに入力することを可能にするコンピュータハードウェアコンポーネント(詳細にはヒューマンインタフェースデバイス)であり得るポインティングデバイスであり得る。グラフィカルユーザインタフェース(GUI)並びにテレビジョン及びモニタ等の多くのシステムは、ユーザが、身体のジェスチャを用いてコンピュータ又はテレビジョンを制御すること及び身体のジェスチャを用いてコンピュータ又はテレビジョンにデータを提供することを可能にする。
【0039】
ナビゲーションコントローラ750のナビゲーション特徴の動きは、ディスプレイ(例えば、ディスプレイ720)上に表示されるポインタ、カーソル、フォーカスリング、又は他の視覚的インジケータの動きにより、ディスプレイ上でそのまま繰り返され得る。例えば、ソフトウェアアプリケーション716の制御の下、ナビゲーションコントローラ750上に配置されたナビゲーション特徴は、例えば、ユーザインタフェース722上に表示される仮想ナビゲーション特徴にマッピングされ得る。実施形態において、ナビゲーションコントローラ750は、別個のコンポーネントではなく、プラットフォーム702及び/又はディスプレイ720に統合されることもある。しかしながら、実施形態は、図示されるコンテキストにおける要素又は本明細書に記載の要素に限定されるものではない。
【0040】
実施形態において、ドライバ(図示せず)は、例えば、有効にされたときに初期起動後のボタンのタッチによるテレビジョンのように、ユーザが、プラットフォーム702を瞬時的にオン及びオフすることを可能にする技術を含み得る。プログラムロジックは、プラットフォーム702が、プラットフォームが「オフ」にされるときに、メディアアダプタ又は他の1以上のコンテンツサービスデバイス730若しくは1以上のコンテンツ配信デバイス740にコンテンツをストリーミングすることを可能にし得る。さらに、チップセット705は、例えば、5.1サラウンドサウンドオーディオ及び/又は高精細7.1サラウンドサウンドオーディオのためのハードウェアサポート及び/又はソフトウェアサポートを含み得る。ドライバは、統合されたグラフィックスプラットフォームのためのグラフィックスドライバを含み得る。実施形態において、グラフィックスドライバは、周辺コンポーネント相互接続(PCI)エクスプレスグラフィックスカードを含み得る。
【0041】
様々な実施形態において、システム700内に図示されるコンポーネントのうちの任意の1以上のコンポーネントが統合され得る。例えば、プラットフォーム702及び1以上のコンテンツサービスデバイス730が統合されることもあるし、プラットフォーム702及び1以上のコンテンツ配信デバイス740が統合されることもあるし、プラットフォーム702、1以上のコンテンツサービスデバイス730、及び1以上のコンテンツ配信デバイス740が統合されることもある。様々な実施形態において、プラットフォーム702及びディスプレイ720が、統合されたユニットであることもある。例えば、ディスプレイ720及び1以上のコンテンツサービスデバイス730が統合されることもあるし、ディスプレイ720及び1以上のコンテンツ配信デバイス740が統合されることもある。これらの例は、実施形態を限定するよう意図されるものではない。
【0042】
様々な実施形態において、システム700は、無線システム、有線システム、又はこれらの組合せとして実装され得る。無線システムとして実装される場合、システム700は、1以上のアンテナ、送信機、受信機、トランシーバ、増幅器、フィルタ、制御ロジック等の、無線共用媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。無線共用媒体の例は、RFスペクトル等といった無線スペクトルの一部を含み得る。有線システムとして実装される場合、システム700は、入力/出力(I/O)アダプタ、I/Oアダプタを対応する有線通信媒体に接続する物理コネクタ、ネットワークインタフェースカード(NIC)、ディスクコントローラ、ビデオコントローラ、オーディオコントローラ等といった、有線通信媒体を介して通信するのに適したコンポーネント及びインタフェースを含み得る。有線通信媒体の例は、ワイヤ、ケーブル、メタルリード、プリント回路基板(PCB)、バックプレーン、スイッチファブリック、半導体材料、ツイストペアワイヤ、同軸ケーブル、ファイバオプティックス等を含み得る。
【0043】
プラットフォーム702は、情報を通信するための1以上の論理チャネル又は物理チャネルを確立することができる。この情報は、メディア情報及び制御情報を含み得る。メディア情報は、ユーザのために意図されるコンテンツを表す任意のデータを指し得る。コンテンツの例は、例えば、音声会話からのデータ、ビデオ会議、ストリーミングビデオ、電子メール(「email」)メッセージ、音声メールメッセージ、英数字記号、グラフィックス、画像、ビデオ、テキスト等を含み得る。音声会話からのデータは、例えば、発話情報、無音期間、背景雑音、快適雑音、トーン等であり得る。制御情報は、自動化システムのために意図されるコマンド、命令、又は制御語を表す任意のデータを指し得る。例えば、制御情報を使用して、システムを介してメディア情報をルーティングすることができる、又は、予め定められた方式でメディア情報を処理するようにノードに命令することができる。しかしながら、実施形態は、
図9に示されるコンテキストにおける要素又は説明した要素に限定されるものではない。
【0044】
上述したように、システム700は、可変の物理的スタイル又はフォームファクタで具現化され得る。
図10は、システム700(
図9)を具現化することができるスモールフォームファクタデバイス800の実施形態を示している。実施形態において、例えば、デバイス800は、無線能力を有するモバイルコンピューティングデバイスとして実装され得る。モバイルコンピューティングデバイスは、例えば、処理システムと、1以上のバッテリ等のモバイル電源と、を有する任意のデバイスを指し得る。
【0045】
上述したように、モバイルコンピューティングデバイスの例は、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ウルトララップトップコンピュータ、タブレット、タッチパッド、ポータブルコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、携帯情報端末(PDA)、セルラ電話機、セルラ電話機/PDAの組合せ、テレビジョン、スマートデバイス(例えば、スマートフォン、スマートタブレット、又はスマートテレビジョン)、モバイルインターネットデバイス(MID)、メッセージングデバイス、データ通信デバイス等を含み得る。
【0046】
モバイルコンピューティングデバイスの例はまた、リストコンピュータ、フィンガーコンピュータ、リングコンピュータ、アイグラスコンピュータ、ベルトクリップコンピュータ、アームバンドコンピュータ、シューコンピュータ、クロージングコンピュータ、及び他のウェアラブルコンピュータ等の、人により装着されるよう構成されるコンピュータを含み得る。実施形態において、例えば、モバイルコンピューティングデバイスは、コンピュータアプリケーションに加えて、音声通信及び/又はデータ通信を実行することができるスマートフォンとして実装され得る。いくつかの実施形態が、一例としてのスマートフォンとして実装されるモバイルコンピューティングデバイスを使用するものとして説明され得るが、他の実施形態は、他の無線モバイルコンピューティングデバイスを使用して実装されてもよいことが理解できるであろう。実施形態は、このコンテキストにおいて限定されるものではない。
【0047】
図10に示されるように、デバイス800は、ハウジング802、ディスプレイ804、入力/出力(I/O)デバイス806、及びアンテナ808を含み得る。デバイス800はまた、ナビゲーション特徴812を含み得る。ディスプレイ804は、モバイルコンピューティングデバイスに適切な情報を表示するための任意の適切なディスプレイユニットを含み得る。I/Oデバイス806は、モバイルコンピューティングデバイスに情報を入力するための任意の適切なI/Oデバイスを含み得る。I/Oデバイス806の例は、英数字キーボード、数字キーパッド、タッチパッド、入力キー、ボタン、スイッチ、ロッカースイッチ、マイクロフォン、スピーカ、音声認識デバイス及びソフトウェア等を含み得る。情報はまた、マイクロフォンを介してデバイス800に入力され得る。そのような情報は、音声認識デバイスによりデジタル化され得る。実施形態は、このコンテキストにおいて限定されるものではない。
【0048】
さらなる留意事項及び例:
例1は、コンテンツを受信する無線機と、共有リソースと、前記共有リソースに関連付けられているソフトウェアモジュールを実行するホストプロセッサと、シェーダディスパッチモジュールと、を備えるシステムを含み得る。前記シェーダディスパッチモジュールは、前記ソフトウェアモジュールから、前記コンテンツに関連するドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信するインタフェースを含み得る。前記シェーダディスパッチモジュールは、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャをさらに含み得る。前記システムは、前記コンテンツを視覚的に提示するディスプレイをさらに備え得る。
【0049】
例2は、前記ドローコールマネージャが、進行中のグローバルに監視されるドローコールのグローバルカウンタと、前記ドローコールが前記共有リソースにアクセスすることが前記第1の信号により示され、前記ドローコールの開始に到達したことが前記第2の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第3の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するコヒーレンシユニットであって、前記ワークロードが、前記グローバルカウンタが0に達するまで保留される、コヒーレンシユニットと、を含む、例1のシステムを含み得る。
【0050】
例3は、前記ドローコールマネージャが、前記ドローコールの終了に到達したことが前記第2の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするインクリメントユニットと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするデクリメントユニットと、をさらに含む、例2のシステムを含み得る。
【0051】
例4は、前記ドローコールマネージャが、グループ識別子先入れ先出し(FIFO)バッファと、前記ドローコールが前記共有リソースに対して書き込むことが前記第1の信号により示され、且つ前記ドローコールの開始に到達したことが前記第2の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるアロケータと、前記グループ識別子を前記グループ識別子FIFOバッファに追加するプッシュユニットと、を含む、例1のシステムを含み得る。
【0052】
例5は、前記ドローコールマネージャが、スレッドカウンタと、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとに前記スレッドカウンタをインクリメントするインクリメントユニットと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチする起動ユニットと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするデクリメントユニットと、を含む、例1のシステムを含み得る。
【0053】
例6は、ドローコールマネージャが、グループ識別子先入れ先出し(FIFO)バッファと、該グループ識別子FIFOバッファ内の最初のエントリが、0であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが0より大きいことに応じて、グローバルに監視される通知をポストするグローバル監視ユニットであって、該スレッドカウンタが、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタが、進行中のグローバルに監視されるドローコールをトラッキングする、グローバル監視ユニットと、を含む、例1乃至5いずれかのシステムを含み得る。
【0054】
例7は、シェーダディスパッチモジュールを動作させる方法であって、共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信するステップと、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするディスパッチステップと、を含む方法を含み得る。
【0055】
例8は、前記ディスパッチステップが、前記ドローコールが前記共有リソースにアクセスすることが前記第1の信号により示され、前記ドローコールの開始に到達したことが前記第2の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第3の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するステップであって、前記ワークロードが、進行中のグローバルに監視されるドローコールのグローバルカウンタが0に達するまで保留される、ステップを含む、例7の方法を含み得る。
【0056】
例9は、前記ドローコールの終了に到達したことが前記第2の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするステップと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするステップと、をさらに含む、例8の方法を含み得る。
【0057】
例10は、前記ドローコールが前記共有リソースに対して書き込むことが前記第1の信号により示され、且つ前記ドローコールの開始に到達したことが前記第2の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるステップと、前記グループ識別子を先入れ先出しバッファに追加するステップと、をさらに含む、例7の方法を含み得る。
【0058】
例11は、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、をさらに含む、例7の方法を含み得る。
【0059】
例12は、先入れ先出しバッファ内の最初のエントリが、0であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが0より大きいことに応じて、グローバルに監視される通知をポストするステップであって、該スレッドカウンタが、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタが、進行中のグローバルに監視されるドローコールをトラッキングする、ステップをさらに含む、例7乃至11いずれかの方法を含み得る。
【0060】
例13は、命令のセットを含む少なくとも1つのコンピュータ読み取り可能な記憶媒体であって、前記命令のセットが、コンピューティングデバイスのシェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信するステップと、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするステップと、を実行させる、少なくとも1つのコンピュータ読み取り可能な記憶媒体を含み得る。
【0061】
例14は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールが前記共有リソースにアクセスすることが前記第1の信号により示され、前記ドローコールの開始に到達したことが前記第2の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第3の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するステップであって、前記ワークロードが、進行中のグローバルに監視されるドローコールのグローバルカウンタが0に達するまで保留される、ステップを実行させる、例13の少なくとも1つのコンピュータ読み取り可能な記憶媒体を含み得る。
【0062】
例15は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールの終了に到達したことが前記第2の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするステップと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするステップと、を実行させる、例14の少なくとも1つのコンピュータ読み取り可能な記憶媒体を含み得る。
【0063】
例16は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールが前記共有リソースに対して書き込むことが前記第1の信号により示され、且つ前記ドローコールの開始に到達したことが前記第2の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるステップと、前記グループ識別子を先入れ先出しバッファに追加するステップと、を実行させる、例13の少なくとも1つのコンピュータ読み取り可能な記憶媒体を含み得る。
【0064】
例17は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとにスレッドカウンタをインクリメントするステップと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチするステップと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするステップと、を実行させる、例13の少なくとも1つのコンピュータ読み取り可能な記憶媒体を含み得る。
【0065】
例18は、前記命令のセットが、前記シェーダディスパッチモジュールにより実行されたときに、前記命令のセットが、前記シェーダディスパッチモジュールに、先入れ先出しバッファ内の最初のエントリが、0であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが0より大きいことに応じて、グローバルに監視される通知をポストするステップであって、該スレッドカウンタが、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタが、進行中のグローバルに監視されるドローコールをトラッキングする、ステップを実行させる、例13乃至17いずれかの少なくとも1つのコンピュータ読み取り可能な記憶媒体を含み得る。
【0066】
例19は、共有リソースに関連付けられているソフトウェアモジュールから、ドローコールが前記共有リソースにアクセスするかどうかを示す第1の信号と、前記ドローコールの境界に到達したかどうかを示す第2の信号と、前記ドローコールがコヒーレンシ要件を有するかどうかを示す第3の信号と、を含む複数の信号を受信するインタフェースと、前記複数の信号に基づいて、シェーダインボケーションにおいて、前記ドローコールに対応するワークロードを選択的にディスパッチするドローコールマネージャと、を備えたシェーダディスパッチモジュールを含み得る。
【0067】
例20は、前記ドローコールマネージャが、進行中のグローバルに監視されるドローコールのグローバルカウンタと、前記ドローコールが前記共有リソースにアクセスすることが前記第1の信号により示され、前記ドローコールの開始に到達したことが前記第2の信号により示され、且つ前記ドローコールがコヒーレンシ要件を有することが前記第3の信号により示された場合に限り、前記シェーダインボケーションへの前記ワークロードを保留するコヒーレンシユニットであって、前記ワークロードが、前記グローバルカウンタが0に達するまで保留される、コヒーレンシユニットと、を含む、例19のシェーダディスパッチモジュールを含み得る。
【0068】
例21は、前記ドローコールマネージャが、前記ドローコールの終了に到達したことが前記第2の信号により示されたことに応じて、前記グローバルカウンタをインクリメントするインクリメントユニットと、下流グラフィックスコンポーネントからのアクノレッジメントに応じて、前記グローバルカウンタをデクリメントするデクリメントユニットと、をさらに含む、例20のシェーダディスパッチモジュールを含み得る。
【0069】
例22は、前記ドローコールマネージャが、グループ識別子先入れ先出し(FIFO)バッファと、前記ドローコールが前記共有リソースに対して書き込むことが前記第1の信号により示され、且つ前記ドローコールの開始に到達したことが前記第2の信号により示された場合に、スレッドのグループに対してグループ識別子を割り当てるアロケータと、前記グループ識別子を前記グループ識別子FIFOバッファに追加するプッシュユニットと、を含む、例19のシェーダディスパッチモジュールを含み得る。
【0070】
例23は、前記ドローコールマネージャが、スレッドカウンタと、前記ドローコールに関連付けられているスレッドグループ内のスレッドごとに前記スレッドカウンタをインクリメントするインクリメントユニットと、前記スレッドグループ内のスレッドを前記シェーダインボケーションにディスパッチする起動ユニットと、前記スレッドグループ内の各スレッドの回収に応じて、前記スレッドカウンタをデクリメントするデクリメントユニットと、を含む、例19のシェーダディスパッチモジュールを含み得る。
【0071】
例24は、前記ドローコールマネージャが、グループ識別子先入れ先出し(FIFO)バッファと、該グループ識別子FIFOバッファ内の最初のエントリが、0であるスレッドカウンタを伴うグループ識別子を有し、且つグローバルカウンタが0より大きいことに応じて、グローバルに監視される通知をポストするグローバル監視ユニットであって、該スレッドカウンタは、前記ドローコールに関連付けられているスレッドグループ内の各スレッドをトラッキングし、該グローバルカウンタは、進行中のグローバルに監視されるドローコールをトラッキングする、グローバル監視ユニットと、を含む、例19乃至23いずれかのシェーダディスパッチモジュールを含み得る。
【0072】
例25は、例7乃至12いずれかの方法を実行する手段を備えたシェーダディスパッチモジュールを含み得る。
【0073】
したがって、本明細書に記載の技術は、グラフィックスパイプラインにおける大きなギャップを回避して、コヒーレンシが要求される段までドローコールイベントを完全にパイプライン化することができる。例えば、画素シェーダディスパッチ(PSD)機能は、複数のドローコールをトラッキングするために、ブックキーピング情報を保持して、パイプラインレベルでハードウェアにおけるコヒーレンシを強制することができる。このようなアプローチは、比較的大量のドローコールをリアルタイムで処理するインタラクティブアプリケーションにとって特に有用であり得る。
【0074】
様々な実施形態は、ハードウェア要素、ソフトウェア要素、又はこれらの組合せを使用して実装され得る。ハードウェア要素の例は、プロセッサ、マイクロプロセッサ、回路、回路素子(例えば、トランジスタ、レジスタ、キャパシタ、インダクタ等)、集積回路、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、ロジックゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット等を含み得る。ソフトウェア要素の例は、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、ファンクション、メソッド、プロシージャ、ソフトウェアインタフェース、アプリケーションプログラムインタフェース(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、又はこれらの任意の組合せを含み得る。実施形態が、ハードウェア要素及び/又はソフトウェア要素を使用して実装されるかの決定は、所望の計算速度、電力レベル、熱耐性、処理サイクルバジェット、入力データ速度、出力データ速度、メモリリソース、データバス速度、及び他の設計制約又は性能制約等の任意の数のファクタに応じて変わり得る。
【0075】
少なくとも1つの実施形態の1以上の態様は、プロセッサ内の様々なロジックを表現する、マシン読み取り可能な媒体に記憶される表現命令により実装され得る。この表現命令が、マシンにより読み取られると、この表現命令は、マシンに、本明細書に記載の技術を実行するためのロジックを製造させる。「IPコア」として知られているそのような表現は、有体のマシン読み取り可能な媒体に記憶され、様々な顧客、又は、実際にロジック又はプロセッサを製造する製造マシンにロードする製造施設に提供され得る。
【0076】
実施形態は、全てのタイプの半導体集積回路(「IC」)チップとともに使用するのに適用可能である。これらのICチップの例は、プロセッサ、コントローラ、チップセットコンポーネント、プログラマブルロジックアレイ(PLA)、メモリチップ、ネットワークチップ等を含むが、これらに限定されるものではない。さらに、図面のうちのいくつかにおいて、信号線が、線で表されている。いくつかのものは、より多くの構成信号パスを示すために異なり、構成信号パスの数を示すために数ラベルを有し、且つ/又は、プライマリ情報フロー方向を示すために1以上の端部に矢印を有する。しかしながら、これは、限定的に解釈されるべきではない。むしろ、そのような追加された詳細は、回路のより容易な理解を促進させるために、1以上の例示的な実施形態に関連して用いられ得る。表されているあらゆる信号線は、追加的な情報を有するか否かにかかわらず、実際には複数の方向に移動することができる1以上の信号を含み得、例えば、差動ペアとともに実装されるデジタル線又はアナログ線、光ファイバ線、及び/又はシングルエンド線といった任意の適切なタイプの信号スキームにより実装され得る。
【0077】
サイズ/モデル/値/範囲の例が与えられているかもしれないが、実施形態は、そのような例に限定されるものではない。製造技術(例えば、フォトリソグラフィ)は時間とともに成熟するため、より小型サイズのデバイスが製造される可能性があることが予想される。さらに、ICチップ及び他のコンポーネントへの周知の電源/接地接続は、図示及び説明の簡潔さのために、そして実施形態の所定の態様を曖昧にしないようにするために、図面内に示されていることもあるし示されていないこともある。さらに、実施形態を曖昧にするのを避けるために、そして、ブロック図の配置の実装に関する詳細が、実施形態がその内部に実装されることになるプラットフォームに高度に依存するという事実を考慮して、そのような配置は、ブロック図の形で示されることがある、すなわち、そのような詳細は、十分に当業者の視野内にあるものである。例示的な実施形態を説明するために具体的な詳細(例えば、回路)が記載されている場合、実施形態は、これらの具体的な詳細なく又はその変形をもって、実施できることが、当業者には明らかであろう。したがって、本説明は、限定ではなく例示と考えられるべきである。
【0078】
いくつかの実施形態は、例えば、命令又は命令のセットを記憶することができる有体のコンピュータ読み取り可能な媒体若しくは製品、又はマシンを使用して、実装され得る。このような命令又は命令のセットが、マシンにより実行された場合、このような命令又は命令のセットは、これらの実施形態に従った方法及び/又は動作をマシンに実行させることができる。このようなマシンは、例えば、任意の適切な処理プラットフォーム、コンピューティングプラットフォーム、コンピューティングデバイス、処理デバイス、コンピューティングシステム、処理システム、コンピュータ、プロセッサ等を含み得、ハードウェア及び/又はソフトウェアの任意の適切な組合せを使用して実装され得る。マシン読み取り可能な媒体又は製品は、例えば、任意の適切なタイプのメモリユニット、メモリデバイス、メモリ製品、メモリ媒体、記憶デバイス、ストレージ製品、記憶媒体、及び/又は記憶ユニットを含み得、例えば、メモリ、着脱可能な媒体、着脱不可能な媒体、消去可能な媒体、消去不可能な媒体、書き込み可能な媒体、再書き込み可能な媒体、デジタル媒体、アナログ媒体、ハードディスク、フロッピー(登録商標)ディスク、コンパクトディスク読み取り専用メモリ(CD−ROM)、コンパクトディスクレコーダブル(CD−R)、コンパクトディスクリライタブル(CD−RW)、光ディスク、磁気媒体、光磁気媒体、着脱可能なメモリカード又はディスク、様々なタイプのデジタル多用途ディスク(DVD)、テープ、カセット等を含み得る。命令は、任意の適切な高水準プログラミング言語、低水準プログラミング言語、オブジェクト指向プログラミング言語、ビジュアルプログラミング言語、コンパイル型プログラミング言語、及び/又はインタープリタ型プログラミング言語を使用して実装されるソースコード、コンパイル済みコード、インタープリット済みコード、実行可能コード、静的コード、動的コード、暗号化済みコード等といった任意の適切なタイプのコードを含み得る。
【0079】
別途明示されない限り、「処理する」、「計算する」、「算出する」、「判定する」等といった用語は、コンピューティングシステムのレジスタ及び/又はメモリ内の物理(電子)量として表されたデータを操作し、且つ/又は、このようなデータを、コンピューティングシステムのメモリ、レジスタ又は他のこのような情報記憶デバイス、伝送デバイス若しくはディスプレイデバイス内の物理量として同様に表されるデータに変換するコンピュータ、コンピューティングシステム、又は同様の電子コンピューティングデバイスの動作及び処理を指すことが理解できるであろう。実施形態は、このコンテキストにおいて限定されるものではない。
【0080】
「接続される、接続されている、接続された」という用語は、本明細書において、直接的であるか間接的であるかを問わず、当該のコンポーネントの間のあらゆるタイプの関係を指すために使用され得、電気的接続、機械的接続、流体接続、光接続、電磁接続、電気機械的接続、又は他の接続に適用され得る。さらに、「第1の」、「第2の」等といった用語は、本明細書において、説明を容易にするためのみに使用されており、別途明示されない限り、特定の時間的意義又は経時的意義を有していない。さらに、不定冠詞「a」又は「an」は、「1以上」又は「少なくとも1つ」という意味を有することを理解されたい。
【0081】
当業者であれば、上記の説明から、実施形態の広範な技術が様々な形態で実装され得ることが、理解されよう。したがって、実施形態が、その特定の例に関連して説明されたが、図面、明細書、及び特許請求の範囲を検討すれば、他の変更が当業者には明らかになるため、実施形態の真の範囲は、そのように限定されるべきではない。
【0082】
(関連出願との相互参照)
本出願は、2014年6月26日に出願された米国特許出願第14/315597号に対する優先権の利益を主張する。