(57)【特許請求の範囲】
【請求項１】
グラフィックス処理の方法であって、
グラフィックス処理ユニット（ＧＰＵ）が、前記ＧＰＵのオンチップグラフィックスメモリの中に第１の共有されるデータチャネルとして第１のリングバッファを割り当てることと、ここにおいて前記第１のリングバッファは、グラフィックス処理パイプラインの第１の２つのステージによって作り出される第１および第２のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第１の２つのステージによって共有され、
前記ＧＰＵが、前記グラフィックス処理パイプラインの第２の２つのステージによって作り出される第３および第４のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第２の２つのステージによって共有される前記ＧＰＵの前記オンチップグラフィックスメモリの中に第２の共有されるデータチャネルとして第２のリングバッファを割り当てることと、
前記ＧＰＵの中のシェーダユニット上で、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの１つが、前記第１のリングバッファ内に記憶される前記第１のデータを作り出すために、前記第２のリングバッファの中に記憶される前記第３のデータを消費することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージ、および前記グラフィックス処理パイプラインの前記第２の２つのステージを実行することと、
前記ＧＰＵが、前記第１のリングバッファと前記第２のリングバッファ間のデッドロックを防ぐために、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの第２のものによって作り出される前記第２のデータを記憶するための前記第１のリングバッファの中のフリースペース、および前記グラフィックス処理パイプラインの前記第２の２つのステージのうちの１つによって作り出される前記第４のデータを記憶するための前記第２のリングバッファの中のフリースペースを保持することと、
オンチップグラフィックスメモリの中の前記第１のリングバッファ内に前記ＧＰＵが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの第１の２つのステージによって作り出される前記第１および第２のデータを、前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータのキューとして記憶することと、
オンチップグラフィックスメモリの中の前記第１のリングバッファから前記ＧＰＵが、前記第１のリングバッファから読み取られる前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを前記リングバッファから削除することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを読み取ることと、それによって前記ＧＰＵが前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記１つによって作り出される追加のデータを記憶するための前記第１のリングバッファの中のスペースを増加させ、
を備える、方法。
【請求項２】
データが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であり、ならびにフリースペースが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であるように、前記ＧＰＵが、前記第１のリングバッファ、または前記第２のリングバッファのステータスに少なくとも部分的に基づいて前記シェーダユニット上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングすることをさらに備える、請求項１に記載の方法。
【請求項３】
前記第２のリングバッファは、前記第２のリングバッファの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第１のリングバッファは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、請求項１に記載の方法。
【請求項４】
前記第１のリングバッファの中に記憶された前記第１および第２のデータは、前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される頂点データを備え、前記第２のリングバッファの中に記憶された前記第３および第４のデータは、前記グラフィックス処理パイプラインの前記第２の２つのステージによって作り出されるプリミティブを備える、請求項１に記載の方法。
【請求項５】
前記グラフィックス処理パイプラインの前記第１の２つのステージは、頂点シェーダおよびドメインシェーダを備える、請求項４に記載の方法。
【請求項６】
前記グラフィックス処理パイプラインの前記第２の２つのステージは、ハルシェーダおよびジオメトリシェーダを備える、請求項４に記載の方法。
【請求項７】
グラフィックスデータを処理するように構成された装置であって、
メモリと、
グラフィックス処理ユニット（ＧＰＵ）のオンチップグラフィックスメモリの中に第１の共有されるデータチャネルとして第１のリングバッファを割り当てることと、ここにおいて前記第１のリングバッファは、グラフィックス処理パイプラインの第１の２つのステージによって作り出される第１および第２のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第１の２つのステージによって共有され、
前記グラフィックス処理パイプラインの第２の２つのステージによって作り出される第３および第４のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第２の２つのステージによって共有される前記ＧＰＵの前記オンチップグラフィックスメモリの中に第２の共有されるデータチャネルとして第２のリングバッファを割り当てることと、
前記ＧＰＵの中のシェーダユニット上で、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの１つが、前記第１のリングバッファ内に記憶される前記第１のデータを作り出すために、前記第２のリングバッファの中に記憶される前記第３のデータを消費することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージ、および前記グラフィックス処理パイプラインの前記第２の２つのステージを実行することと、
前記第１のリングバッファと前記第２のリングバッファ間のデッドロックを防ぐために、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの第２のものによって作り出される前記第２のデータを記憶するための前記第１のリングバッファの中のフリースペース、および前記グラフィックス処理パイプラインの前記第２の２つのステージのうちの１つによって作り出される前記第４のデータを記憶するための前記第２のリングバッファの中のフリースペースを保持することと、
オンチップグラフィックスメモリの中の前記第１のリングバッファ内に、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータを、前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータのキューとして記憶することと、
前記第１のリングバッファから読み取られる前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを前記リングバッファから削除することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを、オンチップグラフィックスメモリの中の前記第１のリングバッファから読み取ることと、それによって前記ＧＰＵが前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記１つによって作り出される追加のデータを記憶するための前記第１のリングバッファの中のスペースを増加させ、
を行うように構成される前記ＧＰＵと、
を備える、装置。
【請求項８】
前記ＧＰＵは、
データが、前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であり、ならびにフリースペースが、前記シェーダプロセッサ上で実行している前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であるように、前記第１のリングバッファ、または前記第２のリングバッファのステータスに少なくとも部分的に基づいて前記シェーダプロセッサ上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングするようにさらに構成される、請求項７に記載の装置。
【請求項９】
前記第２のリングバッファは、前記第２のリングバッファの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第１のリングバッファは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、請求項７に記載の装置。
【請求項１０】
前記第１のリングバッファの中に記憶された前記データは、前記シェーダプロセッサ上で実行している前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される頂点データを備え、前記第２のリングバッファの中に記憶された前記第３および第４のデータは、前記シェーダプロセッサ上で実行している前記グラフィックス処理パイプラインの前記第２の２つのステージによって作り出されるプリミティブを備える、請求項７に記載の装置。
【請求項１１】
装置であって、
グラフィックス処理ユニット（ＧＰＵ）のオンチップグラフィックスメモリの中に第１の共有されるデータチャネルとして第１のリングバッファを割り当てるための手段と、ここにおいて前記第１のリングバッファは、グラフィックス処理パイプラインの第１の２つのステージによって作り出される第１および第２のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第１の２つのステージによって共有され、
前記グラフィックス処理パイプラインの第２の２つのステージによって作り出される第３および第４のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第２の２つのステージによって共有される前記ＧＰＵの前記オンチップグラフィックスメモリの中に第２の共有されるデータチャネルとして第２のリングバッファを割り当てるための手段と、
前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの１つが、前記第１のリングバッファ内に記憶される前記第１のデータを作り出すために、前記第２のリングバッファの中に記憶される前記第３のデータを消費することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージ、および前記グラフィックス処理パイプラインの前記第２の２つのステージを実行するための手段と、
前記第１のリングバッファと前記第２のリングバッファ間のデッドロックを防ぐために、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの第２のものによって作り出される前記第２のデータを記憶するための前記第１のリングバッファの中のフリースペース、および前記グラフィックス処理パイプラインの前記第２の２つのステージのうちの１つによって作り出される前記第４のデータを記憶するための前記第２のリングバッファの中のフリースペースを保持するための手段と、
オンチップグラフィックスメモリの中の前記第１のリングバッファ内に、シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータを、前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータのキューとして記憶するための手段と、
前記第１のリングバッファから読み取られる前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを前記リングバッファから削除することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを、オンチップグラフィックスメモリの中の前記第１のリングバッファからＧＰＵが読み取るための手段と、それによって前記ＧＰＵが前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記１つによって作り出される追加のデータを記憶するための前記第１のリングバッファの中のスペースを増加させ、
を備える、装置。
【請求項１２】
データが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であり、ならびにフリースペースが、前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であるように、前記第１のリングバッファ、または前記第２のリングバッファのステータスに少なくとも部分的に基づいて前記シェーダユニット上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングする手段をさらに備える、請求項１１に記載の装置。
【請求項１３】
前記第２のリングバッファは、前記第２のリングバッファの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第１のリングバッファは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、請求項１１に記載の装置。
【請求項１４】
前記第１のリングバッファの中に記憶された前記第１および第２のデータは、前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される頂点データを備え、前記第２のリングバッファの中に記憶された前記第３および第４のデータは、前記グラフィックス処理パイプラインの前記第２の２つのステージによって作り出されるプリミティブを備える、請求項１１に記載の装置。
【請求項１５】
命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記命令は、実行されるとき、１つ以上のプログラマブルプロセッサに、
オンチップグラフィックスメモリの中に第１の共有されるデータチャネルとして第１のリングバッファを割り当てることと、ここにおいて前記第１のリングバッファは、グラフィックス処理パイプラインの第１の２つのステージによって作り出される第１および第２のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第１の２つのステージによって共有され、
前記グラフィックス処理パイプラインの第２の２つのステージによって作り出される第３および第４のデータを記憶するために、前記グラフィックス処理パイプラインの前記それぞれの第２の２つのステージによって共有される前記オンチップグラフィックスメモリの中に第２の共有されるデータチャネルとして第２のリングバッファを割り当てることと、
シェーダユニット上で、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの１つが、前記第１のリングバッファ内に記憶される前記第１のデータを作り出すために、前記第２のリングバッファの中に記憶される前記第３のデータを消費することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージ、および前記グラフィックス処理パイプラインの前記第２の２つのステージを実行することと、
前記第１のリングバッファと前記第２のリングバッファ間のデッドロックを防ぐために、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの第２のものによって作り出される前記第２のデータを記憶するための前記第１のリングバッファの中のフリースペース、および前記グラフィックス処理パイプラインの前記第２の２つのステージのうちの１つによって作り出される前記第４のデータを記憶するための前記第２のリングバッファの中のフリースペースを保持することと、
オンチップグラフィックスメモリの中の前記リングバッファ内に、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータを、前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される前記第１および第２のデータのキューとして記憶することと、
前記第１のリングバッファから読み取られる前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを前記リングバッファから削除することを含む、前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記第２のものによって作り出される前記第２のデータを、オンチップグラフィックスメモリの中の前記第１のリングバッファから読み取ることと、それによって前記１つ以上のプログラマブルプロセッサが前記グラフィックス処理パイプラインの前記第１の２つのステージのうちの前記１つによって作り出される追加のデータを記憶するための前記第１のリングバッファの中のスペースを増加させ、
を行わせる、非一時的コンピュータ可読記憶媒体。
【請求項１６】
前記命令は、実行されるとき、前記１つ以上のプログラマブルプロセッサに、
データが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であり、ならびにフリースペースが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１のリングバッファ、または前記第２のリングバッファにおいて利用可能であるように、前記第１のリングバッファ、または前記第２のリングバッファのステータスに少なくとも部分的に基づいて前記シェーダユニット上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングすることをさらに行わせる、請求項１５に記載の非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記第２のリングバッファは、前記第２のリングバッファの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第１のリングバッファは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、請求項１５に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記第１のリングバッファの中に記憶された前記第１および第２のデータは、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第１の２つのステージによって作り出される頂点データを備え、前記第２のリングバッファの中に記憶された前記第３および第４のデータは、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第２の２つのステージによって作り出されるプリミティブを備える、請求項１５に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  この開示は、グラフィックス処理パイプライン（graphics processing pipeline）のステージ（stages）によって作り出され、消費されるデータを記憶するための共有されるデータチャネル（shared data channels）に関する。
【背景技術】
【０００２】
[0002]  コンピューティングデバイスのグラフィックス処理ユニット（ＧＰＵ）は、３次元シーンの２次元表現（two-dimensional representation of a three-dimensional scene）をレンダリングするためのグラフィックスコマンドを処理するための複数のステージを含むグラフィックス処理パイプラインを実行することができる。３次元シーンは、複数の頂点で典型的に構成され、グラフィックス処理パイプラインは、３次元シーンの中の各頂点のために、３次元シーンの２次元表現をレンダリングするための固定の順序で実行される一連のステージを含む。
【０００３】
[0003]  グラフィックス処理パイプラインは、３次元シーンの頂点を変換する（transform）ために実行するシェーダステージのチェーン（chain of shader stages）を含み得る。シェーダステージの各々は、前のステージによって作り出されたデータを消費し、次のステージのためにデータを作り出す。シェーダステージのチェーンを通して流れる膨大なデータ量のため、どのようにしてシェーダステージのチェーンのためのデータが管理されるかは、ＧＰＵのパフォーマンスおよびメモリの効率性に影響することができる。
【発明の概要】
【０００４】
[0004]  本開示の一例では、グラフィックス処理のための方法は、グラフィックス処理ユニット（ＧＰＵ）が、グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるＧＰＵのオンチップグラフィックスメモリの中に共有されるデータチャネルを割り当てること（allocating）を含み得る。方法は、ＧＰＵの中のシェーダユニット上で、グラフィックス処理パイプラインの少なくとも２つのステージを実行することをさらに含み得る。方法は、オンチップグラフィックスメモリの中の共有されるデータチャネルの中にＧＰＵが、シェーダユニット上で実行しているグラフィックス処理パイプラインの少なくとも２つのステージの各々によって作り出されるデータを記憶することをさらに含み得る。
【０００５】
[0005]  本開示の別の例では、グラフィックス処理のための装置は、グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるグラフィックス処理ユニット（ＧＰＵ）のオンチップグラフィックスメモリの中に共有されるデータチャネルを割り当てることと、ＧＰＵの中のシェーダユニット上で、グラフィックス処理パイプラインの少なくとも２つのステージを実行することと、オンチップグラフィックスメモリの中の共有されるデータチャネルの中に、シェーダユニット上で実行しているグラフィックス処理パイプラインの少なくとも２つのステージの各々によって作り出されるデータを記憶することとを行うように構成されるＧＰＵを含み得る。
【０００６】
[0006]  本開示の別の例では、グラフィックス処理のためのグラフィックスのための装置は、グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるグラフィックス処理ユニット（ＧＰＵ）のオンチップグラフィックスメモリの中に共有されるデータチャネルを割り当てるための手段を含み得る。装置は、グラフィックス処理パイプラインの少なくとも２つのステージを実行するための手段をさらに含み得る。装置は、オンチップグラフィックスメモリの中の共有されるデータチャネルの中に、グラフィックス処理パイプラインの少なくとも２つのステージの各々の実行によって作り出されるデータを記憶するための手段をさらに含み得る。
【０００７】
[0007]  本開示の別の例では、コンピュータ可読記憶媒体は、命令を記憶することができ、命令は、実行されるとき、１つ以上のプログラマブルプロセッサに、共有されるデータチャネルを、グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるそれのオンチップグラフィックスメモリの中に割り当てることと、シェーダユニット上で、グラフィックス処理パイプラインの少なくとも２つのステージを実行することと、オンチップグラフィックスメモリの中の共有されるデータチャネルの中に、シェーダユニット上で実行しているグラフィックス処理パイプラインの少なくとも２つのステージの各々によって作り出されるデータを記憶することとを行わせる。
【０００８】
[0008]  １つ以上の例の詳細は、添付の図面および以下の説明の中で記述される。他の特徴、目的、および利点は、説明および図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】[0009］  図１は、複数のグラフィックスパイプラインステージの間でデータチャネルを共有するための本開示の１つ以上の態様をインプリメントするように構成され得る例示的なコンピューティングデバイスを例示するブロック図である。
【図２】[0010]  図２は、３次元シーンの２次元表現を作るためにＧＰＵによって行われ得る例示的なグラフィックス処理パイプラインを例示するブロック図である。
【図３】[0011]  図３は、さらに詳細に図１のＣＰＵ、ＧＰＵ、およびシステムメモリの例示的なインプリメンテーションを例示するブロック図である。
【図４】[0012]  図４は、グラフィックス処理パイプラインの中で使用されている共有されるデータチャネルの例を例示するブロック図である。
【図５】[0013]  図５は、さらに詳細に図４のキャッシュモード共有チャネル（cache mode shared channel）を例示するブロック図である。
【図６】[0014]  図６は、グラフィックス処理パイプラインのステージによってデータチャネルを共有するための例示的なプロセスを例示する流れ図である。
【発明を実施するための形態】
【００１０】
[0015]  一般に、本開示は、共有されるデータチャネルを持つ生産者−消費者モデル（producer-consumer model）を使用してシングルパスシェーダパイプライン（single pass shader pipeline）に関する技法を説明する。コンピューティングデバイスの中のグラフィカル処理ユニット（ＧＰＵ）は、ＧＰＵ上で同時にシェーダパイプラインの複数のステージを実行し得るシェーダユニット上でシェーダパイプラインを実行することができる。ＧＰＵの中のオンチップメモリの中に記憶されるデータは典型的に、コンピューティングデバイスのシステムメモリの中に記憶されるデータより速く、より効率的にアクセスされることができるため、ＧＰＵの中のシェーダユニットの効率性は、ＧＰＵの中のオンチップメモリの中のデータチャネルからデータを消費することによって、およびＧＰＵの中のオンチップメモリの中のデータチャネルの中に記憶もされるデータを作り出すことによって増加させることができる。
【００１１】
[0016]  一例では、ＧＰＵは、ＧＰＵの中のシェーダユニットによるシェーダパイプラインの実行によって消費され、作り出されるデータを記憶するために等しいサイズのデータチャネルを割り当て得る。しかしながら、ＧＰＵの中のオンチップメモリが典型的に、コンピューティングデバイスのシステムメモリより非常に少ない記憶スペースを含むため、ＧＰＵの中のオンチップメモリは、ＧＰＵの中のシェーダユニットによって消費され、作り出されるデータのすべてのために別個のデータチャネルを割り当てるのに十分な記憶スペースを有しないことがある。さらに、シェーダパイプラインのステージが、シェーダパイプラインのいくつかのステージがシェーダパイプラインの他のステージより多くのデータを作り出す傾向があるような、アンバランスであり得るため、シェーダパイプラインの各ステージによって作り出されるデータのためにオンチップメモリの中に等しいスペースを割り当てることは、オンチップメモリの中の記憶スペースを浪費し得る。加えて、オンチップメモリは、シェーダパイプラインのステージによって作り出されるデータの少なくともいくつかがより遅いシステムメモリの中に記憶される必要があり得るような、シェーダパイプラインの各ステージによって作り出されるデータのために等しいスペースを割り当てるために十分な記憶スペースを有しないことがあり、それによってＧＰＵのパフォーマンスを低減させる。
【００１２】
[0017]  本開示の態様にしたがって、ＧＰＵは、シェーダパイプラインの２つ以上のステージが単一の共有されるデータチャネルを共有することができるような、共有されるデータチャネルを共有しているシェーダパイプラインの第１のステージからのデータを記憶するために使用されていない共有されるデータチャネルの中のスペースがデータチャネルを共有しているシェーダパイプラインの第２のステージからデータを記憶するために使用され得るような、ＧＰＵの中のオンチップメモリの中の共有されるデータチャネルを割り当て得る。このようにして、ＧＰＵの中のオンチップメモリは、より効率的な方法で利用され得る。さらに、他のアプローチに比べて、シェーダパイプラインによって作り出されるより多くのデータを潜在的に（potentially）記憶するために、より効率的な方法でＧＰＵの中のオンチップメモリを利用することによって、ＧＰＵの中のオンチップメモリは、シェーダパイプラインのステージを実行しているシェーダユニットによって消費される準備ができているより多くのデータを記憶することができ、それによってシェーダユニットの利用を増大させ、ＧＰＵのパフォーマンスを増大させる。
【００１３】
[0018］  図１は、複数のグラフィックスパイプラインステージの間でデータチャネルを共有するための本開示の１つ以上の態様をインプリメントするように構成され得る例示的なコンピューティングデバイスを例示するブロック図である。図１に示されるように、デバイス２は、ビデオデバイス、メディアプレーヤ、セットトップボックス、モバイル電話およびいわゆるスマートフォンのようなワイヤレスハンドセット、携帯情報端末（ＰＤＡｓ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイス等に限られないが、それらを含むコンピューティングデバイスであり得る。図１の例では、デバイス２は、中央処理ユニット（ＣＰＵ）６、システムメモリ１０、およびＧＰＵ１２を含み得る。デバイス２はまた、ディスプレイプロセッサ１４、トランシーバモジュール３、ユーザインタフェース４、およびディスプレイ８を含み得る。トランシーバモジュール３およびディスプレイプロセッサ１４は両方ともに、ＣＰＵ６および／またはＧＰＵ１２と同じ集積回路（ＩＣ）の一部であることができ、両方ともにＣＰＵ６および／またはＧＰＵ１２を含む単一のＩＣまたは複数のＩＣｓの外部に存在することができ、またはＣＰＵ６および／またはＧＰＵ１２を含むＩＣの外部に存在するＩＣの中に形成され得る。
【００１４】
[0019]  デバイス２は、明確さの目的で図１に示されていない追加のモジュールまたはユニットを含み得る。例えば、デバイス２は、どちらも図１に示されていない、スピーカおよびマイクロホンを、デバイス２がモバイルワイヤレス電話である例において、またはデバイス２がメディアプレーヤであるスピーカにおいて電話通信を達成するために含み得る。デバイス２はまた、ビデオカメラを含み得る。さらに、デバイス２に示される様々なモジュールおよびユニットは、デバイス２のすべての例において必要とは限らないことがある。例えば、ユーザインタフェース４およびディスプレイ８は、デバイス２がデスクトップコンピュータ、あるいは外部のユーザインタフェースまたはディスプレイとインタフェースをとるために装備される他のデバイスである例におけるデバイス２の外部に存在し得る。
【００１５】
[0020]  ユーザインタフェース４の例は、トラックボール、マウス、キーボード、および他のタイプの入力デバイスに限定されないが、それらを含む。ユーザインタフェース４はまた、タッチスクリーンであることもでき、ディスプレイ８の一部として組み込まれ得る。トランシーバモジュール３は、コンピューティングデバイス２と別のデバイスまたはネットワーク間でワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール３は、変調器、復調器、増幅器、およびワイヤードまたはワイヤレス通信のための他のそのような回路を含み得る。
【００１６】
[0021]  ＣＰＵ６は、実行のためのコンピュータプログラムの命令を処理するように構成される中央処理ユニット（ＣＰＵ）のような、マイクロプロセッサであり得る。ＣＰＵ６は、コンピューティングデバイス２のオペレーションを制御する汎用、または専用プロセッサを備え得る。ユーザは、ＣＰＵ６に１つ以上のソフトウェアアプリケーションを実行させるために入力をコンピューティングデバイス２に提供し得る。ＣＰＵ６上で実行するソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインタフェースアプリケーションまたは別のプログラムを含み得る。加えて、ＣＰＵ６は、ＧＰＵ１２のオペレーションを制御するためにＧＰＵドライバ２２を実行し得る。ユーザは、キーボード、マウス、マイクロホン、タッチパッドまたはユーザインタフェース４を介してコンピューティングデバイス２に結合される別の入力デバイスのような１つ以上の入力デバイス（示されていない）を介して入力をコンピューティングデバイス２に提供し得る。
【００１７】
[0022]  ＣＰＵ６上で実行するソフトウェアアプリケーションは、ディスプレイ８へのグラフィックスデータのレンダリングをもたらすためにＣＰＵ６に命令する１つ以上のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、例えば、オープングラフィックスライブラリ（ＯｐｅｎＧＬ（登録商標））アプリケーションプログラミングインタフェース（ＡＰＩ）、オープングラフィックスライブラリ埋め込みシステム（Open Graphics Library Embedded Systems）（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、または任意の他の公的または独自の基準グラフィックスＡＰＩ（public or proprietary standard graphics API）のようなグラフィックスＡＰＩにしたがい得る。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングのいくつか、またはすべてを行わせるために、（例えば、ＧＰＵドライバ２２を通して）１つ以上のグラフィックスレンダリングコマンドをＧＰＵ１２に発行し（issue）得る。いくつかの例では、レンダリングされるためのグラフィックスデータは、例えば、点、線、三角形、四角形、トライアングルストリップ（triangle strips）などのグラフィックスプリミティブ（graphics primitives）のリストを含み得る。
【００１８】
[0023]  ＧＰＵ１２は、ディスプレイ８への１つ以上のグラフィックスプリミティブをレンダリングするためにグラフィックスオペレーションを行うように構成され得る。したがって、ＣＰＵ６上で実行しているソフトウェアアプリケーションのうちの１つがグラフィックス処理を要求するとき、ＣＰＵ６は、ディスプレイ８へのレンダリングのためにグラフィックスコマンドおよびグラフィックスデータをＧＰＵ１２に提供し得る。グラフィックスデータは、例えば、描画コマンド（drawing commands）、ステート情報、プリミティブ情報、テクスチャ情報等を含み得る。ＧＰＵ１２は、いくつかの例では、複雑なグラフィック関連オペレーションのＣＰＵ６より効率的な処理を提供する高度に並列な構造（highly-parallel structure）で構築され得る。例えば、ＧＰＵ１２は、シェーダユニットのような、複数の処理要素を含むことができ、それらは、並行して（in a parallel manner）複数の頂点またはピクセル上で動作するように構成される。ＧＰＵ１２の高度に並列な性質は、いくつかの例では、ＧＰＵ１２が、ＣＰＵ６を使用してディスプレイ８に直接シーンを描写するより速くディスプレイ８上にグラフィックスイメージ（例えば、ＧＵＩｓおよび２次元（２Ｄ）および／または３次元（３Ｄ）のグラフィックスシーン）を描写することを可能し得る。
【００１９】
[0024]  ＧＰＵ１２は、いくつかの例では、コンピューティングデバイス２のマザーボードに組み込まれ得る。他の例では、ＧＰＵ１２は、コンピューティングデバイス２のマザーボードの中の一部にインストールされるグラフィックスカード上に存在し得る、または、そうでなければコンピューティングデバイス２と相互運用するように構成される周辺デバイス内に組み込まれ得る。ＧＰＵ１２は、１つ以上のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣｓ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡｓ）、デジタルシグナルプロセッサ（ＤＳＰｓ）、または他の同等の集積回路またはディスクリート論理回路のような、１つ以上のプロセッサを含み得る。ＧＰＵ１２はまた、ＧＰＵ１２がマルチコアプロセッサと称され得るように、１つ以上のプロセッサコアを含み得る。
【００２０】
[0025]  ＧＰＵ１２は、グラフィックスメモリ４０に直接結合され得る。したがって、ＧＰＵ１２は、バスを使用することなしにグラフィックスメモリ４０からデータを読み取り、グラフィックスメモリ４０にデータを書き込み得る。言い換えれば、ＧＰＵ１２は、オフチップメモリの代わりに、ローカル記憶装置をローカルに使用してデータを処理し得る。そのようなグラフィックスメモリ４０は、オンチップメモリと称され得る。このことは、バスを介してデータを読み取り、データを書き込むためのＧＰＵ１２の必要性を取り除くことによって、ＧＰＵ１２がより効率的な方法で動作することを可能にし、それは、重いバストラヒックを経験し得る。しかしながら、いくつかの例では、ＧＰＵ１２は、別個のメモリを含み得ないが、バスを介してシステムメモリ１０を代わりに利用し得る。グラフィックスメモリ４０は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能なプログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光記憶媒体のような、１つ以上の揮発性、または不揮発性メモリ、または記憶デバイスを含み得る。
【００２１】
[0026]  いくつかの例では、ＧＰＵ１２は、システムメモリ１０の中に十分に形成された画像を記憶し得る。ディスプレイプロセッサ１４は、システムメモリ１０から画像を取り出すことができ、ディスプレイ８のピクセルに画像をディスプレイするために明るくさせる値を出力し得る。ディスプレイ８は、ＧＰＵ１２によって生成される画像コンテンツをディスプレイするデバイス２のディスプレイであり得る。ディスプレイ８は、液晶ディスプレイ（ＬＣＤ）、有機発光ダイオードディスプレイ（ＯＬＥＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスであり得る。
【００２２】
[0027]  本開示の態様にしたがって、ＧＰＵ１２は、そのシェーダユニット上で複数のグラフィックスパイプラインステージを実行し得る。ＧＰＵ１２は、シェーダユニット上で実行している複数のグラフィックスパイプラインステージの２つのステージによって共有されるグラフィックスメモリ４０の中で共有されるデータチャネルを作り得る。ＧＰＵ１２は、共有されるデータチャネルの中のシェーダユニット上で実行している複数のグラフィックスパイプラインステージの２つのステージの各々によって作り出されるデータを記憶し得る。
【００２３】
[0028]  図２は、３次元シーンの２次元表現を作るためにＧＰＵ１２によって行われ得る例示的なグラフィックス処理パイプライン２４を例示するブロック図である。グラフィックス処理パイプライン２４は、グラフィックス処理コマンドを実行するために共に動作する複数のグラフィックス処理ステージを含み得る。図２に示されるように、グラフィックス処理パイプライン２４は、入力アセンブラ２６、頂点シェーダステージ（vertex shader stage）２８、ハルシェーダステージ（hull shader stage）３０、テッセレータステージ（tessellator stage）３２、ドメインシェーダステージ３４、ジオメトリシェーダステージ３６、およびピクセルシェーダステージ３８を含み得る。グラフィックス処理パイプライン２４の中のコンポーネントの各々は、固定機能コンポーネント（fixed-function components）、（例えば、プログラマブルシェーダユニット上で実行しているシェーダプログラムの一部としての）プログラマブルコンポーネントとして、または固定機能とプログラマブルコンポーネントの組み合わせとしてインプリメントされ得る。
【００２４】
[0029]  ＧＰＵ１２は、ＧＰＵドライバ２２を介して、ＣＰＵ６から１つ以上のグラフィックス処理コマンドを受信するように、およびディスプレイ可能なグラフィックス画像（displayable graphics images）を生成するためにグラフィックス処理パイプライン２４を介してグラフィックス処理コマンドを実行するように構成され得る。上記に説明されたように、グラフィックス処理パイプライン２４は、グラフィックス処理コマンドを実行するために共に動作する複数のステージを含む。
【００２５】
[0030]  グラフィックス処理パイプライン２４の中の入力アセンブラ２６は、グラフィックス処理パイプライン２４にグラフィックスデータ（例えば、三角形、線、および点）を供給することを一般に担う固定機能ステージであり得る。例えば、入力アセンブラステージ２６は、高次サーフェス（high order surfaces）、プリミティブ等のための頂点データを集めることができ、頂点データおよび属性を頂点シェーダステージ２８に出力し得る。よって、入力アセンブラステージ２６は、固定機能オペレーションを使用して、システムメモリ１０のような、オフチップメモリから頂点を読み取り得る。入力アセンブラステージ２６は次に、これらの頂点からパイプライン作業項目（pipeline work items）を作ることができ、その一方で頂点識別子（「ＶｅｒｔｅｘＩＤｓ」）、インスタンス識別子（頂点シェーダに利用可能である（made available to）「ＩｎｓｔａｎｃｅＩＤｓ」）、およびプリミティブ識別子（ジオメトリシェーダおよびピクセルシェーダに利用可能である「ＰｒｉｍｉｔｉｖｅＩＤｓ」）も生成する。入力アセンブラステージ２６は、頂点を読み取ると、ＶｅｒｔｅｘＩＤｓ、ＩｎｓｔａｎｃｅＩＤｓ、およびＰｒｉｍｉｔｉｖｅＩＤｓを自動的に生成し得る。
【００２６】
[0031]  頂点シェーダステージ２８は、受信された頂点データおよび属性を処理し得る。例えば、頂点シェーダステージ２８は、変換（transformations）、スキニング（skinning）、頂点変位（vertex displacement）、および頂点ごとの物質属性（per-vertex material attributes）を計算することのような頂点ごとの処理を行い得る。いくつかの例では、頂点シェーダステージ２８は、テクスチャ座標、頂点カラー（vertex color）、頂点ライティング（vertex lighting）、フォグファクタ（fog factors）等を生成し得る。頂点シェーダステージ２８は一般に、単一の入力頂点を取り、単一の、処理された出力頂点を出力する。
【００２７】
[0032]  ハルシェーダステージ３０、テッセレータ３２、およびドメインシェーダステージ３４は、テッセレーションステージと集合的に称され得る。テッセレーションステージは、低詳細サブディビジョンサーフェス（low-detail subdivision surfaces）を高詳細プリミティブ（higher-detail primitives）に変換し（convert）、レンダリングのために高次サーフェスを適したサーフェス（例えば、三角形）にタイル表示する（tiles）。ハルシェーダステージ３０は、頂点シェーダステージ２８からプリミティブを受信し、少なくとも２つのアクションを実行することを担う。まず、ハルシェーダステージ３０は、テッセレーションファクタのセットを決定することを典型的に担う。ハルシェーダステージ３０は、プリミティブごとに１回テッセレーションファクタを生成し得る。テッセレーションファクタは、所与のプリミティブをどのくらい細かく（how finely）テッセレートする（tessellate）（例えば、プリミティブをより小さいパーツに分割する）かを決定するためにテッセレータステージ３２によって使用され得る。ハルシェーダステージ３０はまた、ドメインシェーダステージ３４によって後で使用されることとなる制御点（control points）を生成することも担う。すなわち、例えば、ハルシェーダステージ３０は、実際にテッセレートされた頂点（actual tessellated vertices）を作るためにドメインシェーダステージ３４によって使用されることとなる制御点を生成することを担い、それは、レンダリングで最終的に使用される。
【００２８】
[0033]  テッセレータステージ３２がハルシェーダステージ３０からデータを受信するとき、テッセレータステージ３２は、現在のプリミティブタイプのための適切なサンプリングパターンを決定するためにいくつかのアルゴリズムのうちの１つを使用する。例えば、一般に、テッセレータステージ３２は、（ハルシェーダステージ３０によって決定されるような）テッセレーションの要求された量を現在の「ドメイン」内の座標点のグループに変換する。すなわち、ハルシェーダステージ３０からのテッセレーションファクタ、ならびにテッセレータステージ３２の特定の構成に依存して、テッセレータステージ３２は、現在のプリミティブの中のどの点が入力プリミティブをより小さいパーツにテッセレートするためにサンプリングされる必要があるかを決定する。テッセレータステージ３２の出力は、ドメイン点のセットであることができ、それは、重心座標（barycentric coordinates）を含み得る。
【００２９】
[0034]  ドメインシェーダステージ３４は、ハルシェーダステージ３０によって作り出される制御点に加えて、ドメイン点を取り、新たな頂点を作るためにドメイン点を使用する。ドメインシェーダステージ３４は、各テッセレートされた点に関する重心「ロケーション（location）」をパイプラインの中の次のステージにパスされる出力ジオメトリに変換するための現在のプリミティブ、テクスチャ、手続型のアルゴリズム（procedural algorithms）、またはその他のもののために生成される制御点の完全なリスト（complete list）を使用することができる。
【００３０】
[0035]  ジオメトリシェーダステージ３６は、その頂点データ（例えば、三角形のための３つの頂点、線のための２つの頂点、または点のための単一の頂点）によって定義されるプリミティブを受信することができ、プリミティブをさらに処理し得る。例えば、ジオメトリシェーダステージ３６は、他の可能性がある処理オペレーションの間で、シルエットエッジ検出（silhouette-edge detection）およびシャドウボリューム押出し（shadow volume extrusion）のようなプリミティブごとの処理を行い得る。よって、ジオメトリシェーダステージ３６は、（１つ以上の頂点を含み得る）入力および出力０、１、または（この場合も先と同様に（again）１つ以上の頂点を含み得る）複数のプリミティブとして１つのプリミティブを受信し得る。出力プリミティブは、ジオメトリシェーダステージ３６なしで可能であり得るより多くのデータを包含し得る。出力データの総量は、頂点カウントを乗じた（multipled by the vertex count）頂点サイズと同等であることができ、起動（invocation）ごとに制限され得る。ジオメトリシェーダステージ３６からのストリーム出力は、このステージに達するプリミティブが、システムメモリ１０のようなオフチップメモリに記憶されることを可能にし得る。ストリーム出力は、ジオメトリシェーダステージ３６に典型的に関係しており（tied）、両方は、（例えば、ＡＰＩを使用して）共にプログラムされ得る。
【００３１】
[0036]  ラスタライザステージ（rasterizer stage）３７は典型的に、ピクセルシェーダステージ３８のために、プリミティブをクリッピングすること、およびプリミティブを準備することを担う固定機能ステージである。例えば、ラスタライザステージ３７は、（カスタムクリップ境界（custom clip boundaries）を含む）クリッピング、パースペクティブデバイド（perspective divide）、ビューポート／切り取り選択（viewport/scissor selection）、およびインプリメンテーションを行うことができ、ターゲット選択およびプリミティブセットアップをレンダリングし得る。このようにして、ラスタライザステージ３７は、ピクセルシェーダステージ３８によってシェーディングするためのいくつかのフラグメント（fragments）を生成し得る。
【００３２】
[0037]  ピクセルシェーダステージ３８は、ラスタライザステージ３７からフラグメントを受信し、カラーのような、ピクセルごとのデータを生成する。ピクセルシェーダステージ３８はまた、テクスチャブレンディング（texture blending）およびライティングモデル計算（lighting model computation）のようなピクセルごとの処理も行い得る。よって、ピクセルシェーダステージ３８は、入力として１つのピクセルを受信することができ、同じ相対位置（relative position）（またはピクセルのためのゼロ値）で１つのピクセルを出力し得る。
【００３３】
[0038]  本開示の態様にしたがって、グラフィックス処理パイプライン２４の２つ以上のステージは、グラフィックスメモリ４０の中で共有されるデータチャネルを共有し得る。例えば、頂点シェーダステージ２８およびドメインシェーダステージ３４によって作り出される頂点は、共有されるデータチャネルの中に記憶され得る。さらに、ハルシェーダステージ３０およびジオメトリシェーダステージ３６によって作り出されるプリミティブは、別の共有されるデータチャネルの中に記憶され得る。このようにして、ＧＰＵ１２は、グラフィックスメモリ４０をより効率的に利用し得る。
【００３４】
[0039]  図３は、さらに詳細に図１のＣＰＵ６、ＧＰＵ１２、およびシステムメモリ１０の例示的なインプリメンテーションを例示するブロック図である。図３に示されるように、ＣＰＵ６は、少なくとも１つのソフトウェアアプリケーション１８、グラフィックスＡＰＩ２０、およびＧＰＵドライバ２２を含むことができ、それらの各々は、ＣＰＵ６上で実行する１つ以上のソフトウェアアプリケーションまたはサービスであり得る。
【００３５】
[0040]  ＣＰＵ６およびＧＰＵ１２に利用可能であるメモリは、システムメモリ１０およびフレームバッファ１６を含み得る。フレームバッファ１６は、システムメモリ１０の一部であることができ、またはシステムメモリ１０から分離され得る。フレームバッファ１６は、レンダリングされた画像データを記憶し得る。
【００３６】
[0041]  ソフトウェアアプリケーション１８は、ＧＰＵ１２の機能を利用する任意のアプリケーションであり得る。例えば、ソフトウェアアプリケーション１８は、ＧＵＩアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション（portable mapping application）、エンジニアリングまたは芸術的なアプリケーション（artistic applications）のためのコンピュータ支援設計プログラム（computer-aided design program）、ビデオゲームアプリケーション、あるいは２Ｄまたは３Ｄグラフィックスを使用する別のタイプのソフトウェアアプリケーションであり得る。
【００３７】
[0042]  ソフトウェアアプリケーション１８は、グラフィカルユーザインタフェース（ＧＵＩ）および／またはグラフィックスシーンをレンダリングするためにＧＰＵ１２に命令する１つ以上の描画命令を含み得る。例えば、描画命令は、ＧＰＵ１２によってレンダリングされるための１つ以上のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、ＧＵＩで使用される複数のウィンドウイングサーフェス（windowing surfaces）のすべてまたは一部を集合的に定義し得る。追加の例では、描画命令は、アプリケーションによって定義されるモデルスペースまたはワールドスペース内の１つ以上のグラフィックスオブジェクトを含むグラフィックスシーンのすべてまたは一部を集合的に定義し得る。
【００３８】
[0043]  ソフトウェアアプリケーション１８は、１つ以上のグラフィックスプリミティブをディスプレイ可能なグラフィックス画像にレンダリングするためのＧＰＵ１２への１つ以上のコマンドを発行するために、グラフィックスＡＰＩ２０を介して、ＧＰＵドライバ２２を呼び出し得る。例えば、ソフトウェアアプリケーション１８は、ＧＰＵ１２にプリミティブ定義（primitive definitions）を提供するために、グラフィックスＡＰＩ２０を介して、ＧＰＵドライバ２２を呼び出し得る。いくつかの例では、プリミティブ定義は、例えば、三角形、長方形、トライアングルファン（triangle fans）、トライアングルストリップ（triangle strips）等の描画プリミティブのリストの形でＧＰＵ１２に提供され得る。プリミティブ定義は、レンダリングされるためのプリミティブと関連する１つ以上の頂点を特定する頂点仕様（vertex specifications）を含み得る。頂点仕様は、各頂点に関する位置座標（positional coordinates）および、いくつかの例では、例えば、カラー座標、法線ベクトル（normal vectors）、およびテクスチャ座標のような、頂点と関連する他の属性を含み得る。プリミティブ定義はまた、プリミティブタイプの情報（例えば、三角形、長方形、トライアングルファン、トライアングルストリップ等）、スケーリング情報、回転情報等も含み得る。ソフトウェアアプリケーション１８によってＧＰＵドライバ２２に発行される命令に基づいて、ＧＰＵドライバ２２は、プリミティブをレンダリングするために行うためのＧＰＵ１２のための１つ以上のオペレーションを特定する１つ以上のコマンドを公式化し（formulate）得る。ＧＰＵ１２がＣＰＵ６からコマンドを受信するとき、グラフィックス処理パイプライン２４は、そのコマンドを復号し、そのコマンドにおいて特定されたオペレーションを行うようにグラフィックス処理パイプライン２４を構成する。例えば、グラフィックス処理パイプライン２４の中の入力アセンブラ２６は、プリミティブデータを読み取ることができ、グラフィックス処理パイプライン２４の中の他のグラフィックスパイプラインステージによる使用のためにデータをプリミティブにアセンブルし（assemble）得る。特定されたオペレーションを行った後、グラフィックス処理パイプライン２４は、ディスプレイデバイスと関連するフレームバッファ１６にレンダリングされたデータを出力する。
【００３９】
[0044]  フレームバッファ１６は、ＧＰＵ１２のために宛先ピクセル（destination pixels）を記憶する。各宛先ピクセルは、一意的なスクリーンピクセルロケーションと関連し得る。いくつかの例では、フレームバッファ１６は、各宛先ピクセルのための宛先アルファ値（destination alpha value）およびカラーコンポーネントを記憶し得る。例えば、フレームバッファ１６は、「ＲＧＢ」コンポーネントがカラー値に対応し、「Ａ」コンポーネントが宛先アルファ値に対応する各ピクセルに関する赤、緑、青、アルファ（ＲＧＢＡ）コンポーネントを記憶し得る。フレームバッファ１６およびシステムメモリ１０は、別個のメモリユニットであるように例示されているが、他の例では、フレームバッファ１６は、システムメモリ１０の一部であり得る。
【００４０】
[0045]  いくつかの例では、グラフィックス処理パイプライン２４の頂点シェーダステージ２８、ハルシェーダステージ３０、ドメインシェーダステージ３４、ジオメトリシェーダステージ、およびピクセルシェーダステージ３８は、シェーダステージと見なされ得る。これらのシェーダステージは、ＧＰＵ１２の中のシェーダユニット４６上で実行する１つ以上のシェーダプログラムとしてインプリメントされ得る。シェーダユニット４６は、処理コンポーネントのプログラマブルパイプラインとして構成され得る。いくつかの例では、シェーディングユニット（shading unit）４６は、「シェーダプロセッサ」、または「統合シェーダ（unified shaders）」と称されることができ、グラフィックスをレンダリングするためにジオメトリ、頂点、ピクセル、または他のシェーディングオペレーションを行い得る。シェーダユニット４６は、プロセッサコア４８を含むことができ、それらの各々は、オペレーションをフェッチする（fetching）および復号するための１つ以上のコンポーネント、算術計算（arithmetic calculations）を実行するための１つ以上の算術論理ユニット（arithmetic logic units）、１つ以上のメモリ、キャッシュ、およびレジスタを含み得る。
【００４１】
[0046]  ＧＰＵ１２は、グラフィックス処理パイプライン２４の中の頂点シェーダステージ２８、ハルシェーダステージ３０、ドメインシェーダステージ３４、ジオメトリシェーダステージ３６、およびピクセルシェーダステージ３８のうちの１つ以上を実行するためにコマンドをシェーダユニット４６に送ることによって、頂点シェーディング、ハルシェーディング、ドメインシェーディング、ジオメトリシェーディング、ピクセルシェーディング等のような様々なシェーディングオペレーションを行うためにシェーダユニット４６を指定し得る。いくつかの例では、ＧＰＵドライバ２２は、１つ以上のシェーダプログラムをコンパイルするように、およびコンパイルされたシェーダプログラムをＧＰＵ１２内に包含される１つ以上のプログラマブルシェーダユニットにダウンロードするように構成され得る。シェーダプログラムは、例えば、ＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）、ハイレベルシェーディング言語（ＨＬＳＬ）、グラフィックスのためのＣ（Ｃｇ）シェーディング言語（C for Graphics (Cg) shading language）等のような、ハイレベルシェーディング言語で書き込まれ得る。コンパイルされたシェーダプログラムは、ＧＰＵ１２内のシェーダユニット４６のオペレーションを制御する１つ以上の命令を含み得る。例えば、シェーダプログラムは、頂点シェーダステージ２８の機能を行うためにシェーダユニット４６によって実行され得る頂点シェーダプログラム、ハルシェーダステージ３０の機能を行うためにシェーダユニット４６によって実行され得るハルシェーダプログラム、ドメインシェーダステージ３４の機能を行うためにシェーダユニット４６によって実行され得るドメインシェーダプログラム、ジオメトリシェーダステージ３６の機能を行うためにシェーダユニット４６によって実行され得るジオメトリシェーダプログラム、および／またはピクセルシェーダ３８の機能を行うためにシェーダユニット４６によって実行され得るピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニット、または統合（unified）シェーダユニットの実行を制御することができ、１つ以上の頂点ごとのオペレーションを特定する命令を含み得る。
【００４２】
[0047]  グラフィックスメモリ４０は、ＧＰＵ１２の集積回路に物理的に組み込まれるオンチップ記憶装置、またはメモリである。グラフィックスメモリ４０がオンチップであるため、ＧＰＵ１２は、システムバスを介してシステムメモリ１０から値を読み取ること、またはシステムメモリ１０に値を書き込むことより速くグラフィックスメモリ４０から値を読み取り、またはグラフィックスメモリ４０に値を書き込むことができ得る。そのようなものとして、シェーダユニット４６のパフォーマンスは、グラフィックスメモリ４０からグラフィックス処理パイプライン２４のシェーダステージによって作り出される、および消費されるデータを読み取ること、および記憶することによって増加され得る。
【００４３】
[0048]  本開示の態様にしたがって、シェーダユニット４６は、プロセッサコア４８上で同時に複数のシェーディングオペレーションを行い得る。ＧＰＵ１２は、異なるプロセッサコア４８上で実行されるためのグラフィックス処理パイプライン２４の異なるシェーディングステージをイネーブルする（enable）コマンドをシェーディングユニット４６に送ることができ、それによってグラフィックス処理パイプライン２４のステージをインタリーブする。例えば、ＧＰＵ１２は、シェーディングユニット４６に、シェーダユニット４６の異なるプロセッサコア４８上で同時に頂点シェーダステージ２８およびジオメトリシェーダステージ３６を実行させるコマンドをシェーディングユニット４６に送り得る。別の例では、ＧＰＵ１２は、シェーディングユニット４６に、複数のプロセッサ上で同時にジオメトリシェーダステージ３６の複数の例を実行させるコマンドをシェーディングユニット４６に送り得る。
【００４４】
[0049]  本開示の態様にしたがって、グラフィックスメモリ４０は、単一のデータチャネルを共有するためにグラフィックス処理パイプライン２４の異なるステージによって作り出されるデータをイネーブルする（enable）共有されるデータチャネル５０Ａ−５０Ｎ（「共有されるデータチャネル５０」）のうちの１つ以上を含むことができ、それによってＧＰＵ１２がグラフィックスメモリ４０の中の限られたスペースをより効率的に利用することをイネーブルし、またシェーダプロセッサクラスタ４６がグラフィックス処理パイプライン２４の複数のステージを同時に実行するためにそのプロセッサコア４８の利用を増加させることもイネーブルする。
【００４５】
[0050]  共有されるデータチャネル５０の中の各共有されるデータチャネルは、グラフィックス処理パイプライン２４の２つ以上のステージによって作り出されるデータを記憶し得る。グラフィックス処理パイプライン２４の個別のステージのためにデータチャネルを割り当てることとは対照的に、共有されるデータチャネル５０の中の共有されるデータチャネルを共有することによって、グラフィックス処理パイプライン２４の中のステージがより少ないデータを作り出す場合、同じ共有されるデータチャネルを共有する別のステージは、それが共有されるデータチャネルの中で作り出すより多くのデータを記憶することによってそのファクト（fact）を活用することが可能であり得る。
【００４６】
[0051]  本開示の態様にしたがって、ジオメトリ処理ユニット（ＧＰＣ）４２は、共有されるデータチャネル５０のステータスに基づいてシェーダプロセッサクラスタ４６の実行をスケジューリングし得る。ＧＰＣ４２は、シェーダプロセッサクラスタ４６によって実行されるためにグラフィックス処理パイプライン２４のステージによって消費されるための十分なデータが共有されるデータチャネル５０の中にあるか否かを決定するために、共有されるデータチャネル５０をモニタし（monitor）得る。ＧＰＣ４２はまた、シェーダプロセッサクラスタ４６によって実行されるためにグラフィックス処理パイプライン２４のステージによって作り出されるデータを記憶するための十分なフリースペースが共有されるデータチャネル５０の中にあるか否かを決定するために、共有されるデータチャネル５０をモニタし得る。ＧＰＣ４２が、共有されるデータチャネル５０の中に十分なデータおよびフリースペースが存在することを決定する場合、ＧＰＣ４２は、グラフィックス処理パイプライン２４のステージのバッチ（batch of stages）を実行するために、実行コマンドをシェーダプロセッサクラスタ４６に送り得る。ステージのバッチの実行を完了したことに応答して、シェーダプロセッサクラスタ４６は、プロセッサクラスタ４６がステージのバッチの実行を完了したことを示す信号をＧＰＣ４２に送り得る。それに応答して、データチャネルマネージャ（data channel manager）４４は、共有されるデータチャネル５０のための関連のある読み取りおよび書き込みポインタをアップデートし得る。ＧＰＣ４２は、共有されるデータチャネル５０を管理するデータチャネルマネージャ４４を含み得る。データチャネルマネージャ４４は、共有されるデータチャネル５０にデータを書き込む、および共有されるデータチャネル５０からデータを読み取るために共有されるデータチャネル５０内でロケーションを指し示す共有されるデータチャネル５０のための読み取りおよび書き込みポインタを管理し得る。
【００４７】
[0052]  本開示の態様にしたがって、共有されるデータチャネル５０Ａは、共有されるデータチャネル５０Ａがグラフィックス処理パイプライン２４の第１のステージによって出力されたデータ５５Ａと、グラフィックス処理パイプライン２４の第２のステージによって出力されたデータ５５Ｂの両方を記憶し得るように、グラフィックス処理パイプライン２４の２つ以上のステージによって共有されるデータチャネルであり得る。共有されるデータチャネル５０Ａは、データ５５Ａおよび５５Ｂが、それらが作り出された、および／または消費されたとき、そのサイズを動的に増加と低減の両方をさせることができるようにリングバッファであることができ、それによって共有されるデータチャネル５０Ａに割り当てられたメモリブロックのより効率的な使用を可能にする。ＧＰＣ４２は、書き込みポインタ５１Ａおよび５１Ｂ、ならびに読み取りポインタ５３Ａおよび５３Ｂを管理し得る。書き込みポインタ５１Ａは、データ５５Ａを書き込むために、共有されるデータチャネル５０Ａのメモリロケーションを指し示すことができ、読み取りポインタ５３Ａは、データ５５Ａを読み取るために、共有されるデータチャネル５０Ａのメモリロケーションを指し示し得る。
【００４８】
[0053]  典型的に、読み取りポインタ５３Ａおよび５３Ｂが、それぞれ、キューの先頭（head of the queue）と称されることもある、データ５５Ａおよび５５Ｂの中のデータの最も古い部分（oldest piece）を記憶する共有されるデータチャネル５０Ａのメモリロケーションを指し示すように、ならびに書き込みポインタ５１Ａおよび５１Ｂが、それぞれ、キューの末端（tail of the queue）と称されることもある、データ５５Ａおよび５５Ｂの中のデータの最も新しい部分を記憶する共有されるデータチャネル５０Ａのメモリロケーションを指し示すように、ＧＰＵ１２は、ファーストインファーストアウト（first-in-first-out）（ＦＩＦＯ）の順序で共有されるデータチャネル５０Ａの中にデータ５５Ａおよび５５Ｂを記憶する。
【００４９】
[0054]  共有されるデータチャネル５０Ａはまた、データ５５Ａおよび５５Ｂから読み取られたデータが共有されるデータチャネル５０Ａから削除され、それらのメモリロケーションが割り当てを解除され（deallocated）得るようにＦＩＦＯモードで動作し得る。以上のように、ＧＰＵ１２が共有されるデータチャネル５０Ａからデータ５５Ａを読み取るとき、共有されるデータチャネル５０Ａの中のフリースペース５７は増加し、それによってＧＰＵ１２のための共有されるデータチャネル５０Ａの中の追加のスペースがデータ５５Ｂにデータを書き込むことを可能にする。同様に、ＧＰＵ１２が共有されるデータチャネル５０Ａからデータ５５Ｂを読み取るとき、共有されるデータチャネル５０Ａの中のフリースペース５９は増加し、それによってＧＰＵ１２のための共有されるデータチャネル５０Ａの中の追加のスペースがデータ５５Ａにデータを書き込むことを可能にする。共有されるデータチャネル５０Ａのみが上記に詳細に説明されたが、共有されるデータチャネル５０の中の各共有されるデータチャネルが、共有されるデータチャネル５０Ａに関して上記に説明された特徴を共有し得ることは理解されるべきである。
【００５０】
[0055]  図４は、グラフィックス処理パイプライン２４の中で使用されている共有されるデータチャネル５０の例を例示するブロック図である。図４に示されるように、共有されるデータチャネル５０Ａは、ステージによって作り出されるデータを記憶するためにグラフィックス処理パイプライン２４のステージによって共有され得る。
具体的には、共有されるデータチャネル５０Ａは、グラフィックス処理パイプライン２４のハルシェーダステージ３０によって作り出されるデータ５２を記憶することができ、グラフィックス処理パイプライン２４のジオメトリシェーダステージ３６によって作り出されるデータ５４をさらに記憶し得る。データ５２は、グラフィックス処理パイプライン２４のドメインシェーダステージ３４によって消費されることができ、データ５４は、グラフィックス処理パイプライン２４のピクセルシェーダステージによって消費され得る。
【００５１】
[0056]  ハルシェーダステージ３０およびジオメトリシェーダステージ３６によって共有されるデータチャネル５０Ａに記憶されたデータ５２およびデータ５４は、それぞれ、ハルシェーダステージ３０によって出力されるパッチ制御点およびジオメトリシェーダステージ３６によって出力される頂点を含み得る。データチャネル５０Ａがデータ５２および５４をキャッシュしないため、データ５２および５４は、データ５２および５４から読み取られるデータが共有されるデータチャネル５０Ａから削除されるＦＩＦＯキューとして各々動作し得る。
【００５２】
[0057]  いくつかの例では、グラフィックス処理パイプライン２４のいくつかのステージによって作り出される同じデータは、グラフィックス処理パイプライン２４の他のステージによって複数回（multiple times）消費され得る。データがＦＩＦＯキューとして動作する共有されるデータチャネル５０の１つに記憶される場合、ＦＩＦＯキューに記憶されるデータがそれがＦＩＦＯキューから読み取られるとき削除され得るため、データを作り出すグラフィックス処理パイプライン２４のステージは、同じデータを作り出すために複数回実行する必要があり得る。複数回同じ頂点を作り出すために複数回頂点シェーダ２８またはドメインシェーダ３４を実行することに代わって、ＧＰＵ１２は、キャッシュモード共有チャネル５６の中で頂点シェーダ２８およびドメインシェーダ３４によって作り出されるデータを代わりにキャッシュし得る。
【００５３】
[0058]  例えば、頂点シェーダステージ２８によって変換される頂点を含む、グラフィックス処理パイプライン２４の頂点シェーダステージ２８によって作り出されるデータは、グラフィックス処理パイプライン２４のハルシェーダステージ３０によって消費され得る。同様に、ドメインシェーダステージ３４によって出力される頂点位置のような、グラフィックス処理パイプライン２４のドメインシェーダステージ３４によって作り出されるデータは、グラフィックス処理パイプライン２４のジオメトリシェーダステージ３６によって消費され得る。例えば、近接したプリミティブ（例えば、三角形）が頂点を共有し得るため、同じ頂点は、２つの近接した三角形を形成するために使用され得る。したがって、頂点シェーダステージ２８およびドメインシェーダステージ３４によって作り出される頂点データは、複数回消費され得る。頂点シェーダステージ２８およびドメインシェーダステージ３４によって作り出されるデータは、複数回消費され得るため、これらのステージによって作り出されるデータは、キャッシュされたデータが、それがキャッシュモード共有チャネル５６から読み取られることに応答して削除され得ないように、キャッシュモード共有チャネル５６の中でキャッシュされ得る。
【００５４】
[0059]  図５は、キャッシュモード共有チャネル５６を例示するブロック図である。図５に示されるように、キャッシュモード共有チャネル５６は、２つの共有されるデータチャネル：共有されるプリミティブキュー５０Ｂおよび共有される頂点キャッシュ５０Ｃ、ならびにキャッシュウィンドウ７０を含み得る。共有される頂点キャッシュ５０Ｃは、共有される頂点キャッシュ５０Ｃに記憶されるデータが共有される頂点キャッシュ５０Ｃから読み取られる際に削除されない場合があるようにキャッシュモードで動作し得る。共有されるプリミティブキュー５０Ｂに記憶されるデータ６２およびデータ６４は、頂点シェーダステージ２８およびドメインシェーダステージ３４によって作り出されるプリミティブデータを含み得る。例えば、データ６２は、各プリミティブのために頂点シェーダステージ２８によって作り出された、共有される頂点キャッシュ５０Ｃで記憶された頂点データの頂点インデックスおよびロケーションを含むことができ、データ６４は、各プリミティブのためにドメインシェーダステージ３４によって作り出された、共有される頂点キャッシュ５０Ｃで記憶された頂点データの頂点インデックスおよびロケーションを含み得る。データ６２および６４はまた、関連するプリミティブの各々のための割り当て解除フラグ（deallocation flags）を含み得る。共有される頂点キャッシュ５０Ｃに記憶されたデータ６６は、頂点シェーダステージ２８によって変換された頂点を含むことができ、一方、共有される頂点キャッシュ５０Ｃに記憶されたデータ６８は、ドメインシェーダステージ３４によって出力された頂点位置を含み得る。ＧＰＣ４２は、キャッシュモード共有チャネル５６がデータを受け取るために十分なフリースペースを有するか否かを決定するために、共有されるプリミティブキュー５０Ｂと共有される頂点キャッシュ５０Ｃの両方のフリースペースをチェックし得る。
【００５５】
[0060]  キャッシュウィンドウ７０は、特定の頂点が、共有される頂点キャッシュ５０Ｃの限られたウィンドウの中に既に記憶されている場合、インジケーションを記憶し得る。例えば、キャッシュウィンドウ７０は、フリーアソシアティブキャッシュ（fully associative cache）として動作することができ、頂点を消費し得るシェーダの、共有される頂点キャッシュ５０Ｃ内の頂点のデータロケーション、頂点インデックス、およびフラグのような、インジケーションを記憶し得る。
【００５６】
[0061]  プリミティブによるＧＰＣ４２処理ジオメトリプリミティブ。頂点シェーダ２８およびドメインシェーダ３４のために、ＧＰＣ４２が、頂点インデックス上のキャッシュウィンドウ７０、および／または頂点が属するシェーダをチェックすることに基づいて、プリミティブの特定の頂点が共有される頂点キャッシュ５０Ｃの中に存在しないことを決定する場合、キャッシュミスが発生することがあり得、そしてＧＰＣ４２は、所望の頂点を作り出すために、およびキャッシュモード共有チャネル５６の中に作り出された頂点データを記憶するために適切なシェーダステージ（例えば、頂点シェーダ２８またはドメインシェーダ３４）を実行するためのコマンドをシェーダユニット４６に送り得る。ＧＰＣ４２は、共有される頂点キャッシュ５０Ｃで頂点データの頂点インデックスおよびロケーションを共有されるプリミティブキュー５０Ｂに追加し得る。ＧＰＣ４２は、キャッシュモード共有チャネル５６の中の今キャッシュされた頂点に関する適切なデータをキャッシュウィンドウ７０に追加し得る。キャッシュウィンドウ７０は、キャッシュミスの後にキャッシュウィンドウ７０の中に余地がない場合、キャッシュウィンドウ７０の中の最も古いスロットの中に関連し、共有されるプリミティブキュー５０Ｂの中にセットされたそれの割り当て解除フラグを有する頂点が、キャッシュモード共有チャネル５６に追加される最新の頂点に関する情報でセットされ得るようにファーストインファーストアウト（ＦＩＦＯ）の方法で動作し得る。しかしながら、ＧＰＣ４２が特定の頂点がキャッシュモード共有チャネル５６の中でキャッシュされることを決定する場合、ＧＰＣ４２は、所望の頂点の共有される頂点キャッシュ５０Ｃの中のメモリロケーションを使用することができ、共有される頂点キャッシュ５０Ｃで頂点データの頂点インデックスおよびロケーションを共有されるプリミティブキュー５０Ｂに追加することができる。このようにして、ＧＰＵ１２は、グラフィックス処理パイプライン２４の中のステージの無関係な処理（extraneous processing）を低減することができる。
【００５７】
[0062]  ハルシェーダ３０およびジオメトリシェーダ３６を実行するために、ＧＰＣ４２は、共有されるプリミティブキュー５０Ｂと共有される頂点キャッシュ５０Ｃの両方からデータを消費し得る。ＧＰＣ４２は、共有されるプリミティブキュー５０Ｂから共有される頂点キャッシュ５０Ｃの中の頂点データの頂点インデックスおよびロケーションを読み取り得る。ＧＰＣ４２は次に、共有されるプリミティブキュー５０Ｂから読み取ったロケーションを使用して、共有される頂点キャッシュ５０Ｃから頂点データを読み取り得る。ＧＰＣ４２は、データを読み取った後、共有されるプリミティブキュー５０Ｂの読み取りポインタを動かし得る。しかしながら、続くプリミティブが、共有される頂点キャッシュ５０Ｃから丁度読み取られた同じ頂点も使用し得るため、キャッシュされた頂点が、共有される頂点キャッシュ５０Ｃから読み取られた直後、ＧＰＣ４２は、共有される頂点キャッシュ５０Ｃの読み取りポインタを即時に動かさないことがある。頂点を消費するプリミティブのための共有されるプリミティブキュー５０Ｂの中の関連する割り当てを解除されたフラグがセットされる場合、ＧＰＣ４２は、読み取りポインタを動かすこと、およびキャッシュモード共有チャネル５６から頂点を割り当て解除することを可能にされ得る。ＧＰＣ４２は、頂点データを消費するためのシェーダステージ（例えば、ハルシェーダ３０およびジオメトリシェーダ３６）を実行するために、および次のシェーダステージのための頂点を作り出し、共有されるデータチャネル５０Ａの中の作り出された頂点データを記憶するためにコマンドをシェーダユニット４６に送り得る。
【００５８】
[0063]  ＧＰＣ４２は、デッドロックのためのキャッシュモード共有チャネル５６および共有されるデータチャネル５０Ａをモニタし得る。一例では、キャッシュモード共有チャネル５６が頂点シェーダステージ２８によって作り出されるデータでいっぱいである場合、および共有されるデータチャネル５０Ａがハルシェーダステージ３０によって作り出されるデータでいっぱいである場合、デッドロックは、発生し得る。この場合では、ハルシェーダステージ３０が頂点ステージ２８によって作り出されたデータを消費するため、ハルシェーダステージ３０は、新たに作り出されたデータを記憶するための共有されるデータチャネル５０Ａの中のフリースペースが存在しないため、共有されるデータチャネル５０Ａに記憶されたデータを作り出すために頂点シェーダステージ２８によって作り出され、キャッシュモード共有チャネル５６の中に記憶されるデータを消費することができない。さらに、キャッシュモード共有チャネル５６が、頂点シェーダステージ２８によって作り出されるデータでいっぱいであり、そのデータのいずれもハルシェーダ３０によって消費されることができないため、そのデータのいずれも、ドメインシェーダ３４によって作り出されたデータを記憶するためのキャッシュモード共有チャネル５６に関するスペースを解放する（free up）ために割り当てを解除されることができない。さらに、ドメインシェーダ３４がハルシェーダステージ３０によって作り出され、共有されるデータチャネル５０Ａの中に記憶されるデータを消費するため、ハルシェーダ３０Ａによって作り出され、共有されるデータチャネル５０Ａの中に記憶されるデータのいずれも、ジオメトリシェーダ３６によって作り出されたデータを記憶するための共有されるデータチャネル５０Ａに関する、共有されるデータチャネル５０Ａの中のスペースを解放するためにドメインシェーダ３４によって消費されることができない。
【００５９】
[0064]  キャッシュモード共有チャネル５６と共有されるデータチャネル５０Ａ間のデッドロック状況を防ぐために、キャッシュモード共有チャネル５６および共有されるデータチャネル５０Ａがそれぞれ、頂点シェーダ２８およびハルシェーダ３０によって作り出されるデータを記憶するだけでないように、ＧＰＣ４２は、それぞれドメインシェーダ３４およびジオメトリシェーダ３６によって作り出されるデータを記憶するためにキャッシュモード共有チャネル５６および共有されるデータチャネル５０Ａの中のスペースを保持し（reserve）得る。ＧＰＣ４２は、共有されるプリミティブキュー５０Ｂと共有される頂点キャッシュ５０Ｃの両方のコンポーネントの中でキャッシュモード共有チャネル５６のスペースの量、および例えば、シェーダクラスタ４６の中の所与の数の波（waves）のためにドメインシェーダ３４およびジオメトリシェーダ３６からの出力を記憶するために必要であるスペースの量を決定することによって、保持するべき共有されるデータチャネル５０Ａのスペースの量を決定し得る。
【００６０】
[0065]  図６は、グラフィックス処理パイプラインのステージによってデータチャネルを共有するための例示的なプロセスを例示する流れ図である。図６に示されるように、処理は、ＧＰＵ１２が、グラフィックス処理パイプライン２４の少なくとも２つのステージによって共有されるＧＰＵ１２のオンチップグラフィックスメモリ４０の中に共有されるデータチャネル５０Ａを割り当てることを含み得る（５０２）。プロセスは、ＧＰＵ１２の中のシェーダユニット４６上で、グラフィックス処理パイプライン２４の少なくとも２つのステージを実行することをさらに含み得る（５０４）。プロセスは、オンチップグラフィックスメモリ４０の中の共有されるデータチャネル５０Ａの中にＧＰＵ１２が、シェーダユニット４６上で実行しているグラフィックス処理パイプライン２４の少なくとも２つのステージによって作り出されるデータを記憶することをさらに含み得る（５０６）。
【００６１】
[0066]  いくつかの例では、プロセスは、ＧＰＵ１２が、グラフィックス処理パイプライン２４の第２の少なくとも２つのステージによって共有されるＧＰＵ１２のオンチップグラフィックスメモリ４０の中に第２のキャッシュモード共有チャネル５６を割り当てることをさらに含むことができ、ここにおいて、共有されるデータチャネル５０Ａは、第１の共有されるデータチャネルである。いくつかの例では、プロセスは、ＧＰＵ１２の中のシェーダユニット４６上で、グラフィックス処理パイプライン２４の第２の少なくとも２つのステージを実行することをさらに含み得る。いくつかの例では、プロセスは、第２のキャッシュモード共有チャネル５６の中にＧＰＵ１２が、シェーダユニット４６上で実行しているグラフィックス処理パイプライン２４の第２の少なくとも２つのステージの各々によって作り出される第２のデータを記憶することをさらに含み得る。
【００６２】
[0067]  いくつかの例では、データが、シェーダユニット４６上で実行しているとき、グラフィックス処理パイプライン２４の１つ以上のステージによって消費されるために第１の共有されるデータチャネル５０Ａ、または第２のキャッシュモード共有チャネル５６で利用可能であり、ならびにフリースペースが、シェーダユニット４６上で実行しているときグラフィックス処理パイプライン２４の１つ以上のステージによって作り出されるデータを記憶するために第１の共有されるデータチャネル５０Ａ、または第２のキャッシュモード共有チャネル５６で利用可能であるように、プロセスは、ＧＰＵ１２が、第１の共有されるデータチャネル５０Ａまたは第２のキャッシュモード共有チャネル５６のステータスに少なくとも部分的に基づいてシェーダユニット４６によってグラフィックス処理パイプライン２４の１つ以上のステージの実行をスケジューリングすることをさらに含み得る。
【００６３】
[0068]  いくつかの例では、グラフィックス処理パイプライン２４の少なくとも２つのステージは、頂点シェーダ２８およびドメインシェーダ３４を含む。いくつかの例では、グラフィックス処理パイプライン２４の第２の少なくとも２つのステージは、ハルシェーダ３０およびジオメトリシェーダ３６を含む。
【００６４】
[0069]  いくつかの例では、プロセスは、ＧＰＵ１２が、第１の共有されるデータチャネル５０Ａと第２のキャッシュモード共有チャネル５６間のデッドロックを防ぐために、第１の共有されるデータチャネル５０Ａ、および第２のキャッシュモード共有チャネル５６のうちの少なくとも１つの中のフリースペースを保持することをさらに含み得る。
【００６５】
[0070]  １つ以上の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せでインプリメントされ得る。ソフトウェアでインプリメントされる場合、これらの機能は、コンピュータ可読媒体上で、１つ以上の命令またはコードとして記憶または送信され得る。コンピュータ可読媒体は、１つの場所から別の場所へのコンピュータプログラムの転送を容易にするあらゆる媒体を含むコンピュータデータ記憶媒体または通信媒体を含み得る。データ記憶媒体は、本開示で説明された技法のインプリメンテーションのための命令、コード、および／またはデータ構造を取り出すために、１つ以上のコンピュータまたは１つ以上のプロセッサによってアクセスされることができるあらゆる利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光学ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイス、あるいは命令またはデータ構造の形で所望のプログラムコードを搬送または記憶するために使用されることができ、コンピュータによってアクセスされることができる任意の他の媒体を備えることができる。また、任意の接続は、コンピュータ可読媒体と厳密には称される。例えば、ソフトウェアが、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線（ＤＳＬ）、または赤外線、無線、およびマイクロ波のようなワイヤレス技術を使用して、ウェブサイト、サーバ、または他の遠隔ソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、ＤＳＬ、または赤外線、無線、およびマイクロ波のようなワイヤレス技術は、媒体の定義に含まれる。本明細書で使用される場合、ディスク（disk）およびディスク（disc）は、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、デジタル多用途ディスク（ＤＶＤ）、フロッピー（登録商標）ディスク、およびＢｌｕ−ｒａｙ（登録商標）ディスクを含み、ここでディスク（disk）は通常、磁気的にデータを再生し、一方ディスク（disc）は、レーザーを用いて光学的にデータを再生する。上記の組み合わせはまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【００６６】
[0071]  コードは、１つ以上のデジタルシグナルプロセッサ（ＤＳＰｓ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣｓ）、フィールドプログラマブル論理アレイ（ＦＰＧＡｓ）、または他の同等な集積またはディスクリート論理回路のような、１つ以上のプロセッサによって実行され得る。よって、本明細書で使用される場合、「プロセッサ」および「処理ユニット」という用語は、前述の構造、または本明細書に説明された技法のインプリメンテーションに適した任意の他の構造のいずれかを指し得る。加えて、いくつかの態様では、本明細書に説明された機能は、符号化および復号のために構成された専用ハードウェアおよび／またはソフトウェアモジュール内で提供され得る、あるいは組み合わせられたコーデックの中に組み込まれ得る。また、技法は、１つ以上の回路または論理要素で十分にインプリメントされることができる。
【００６７】
[0072]  本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣｓのセット（すなわち、チップセット）を含む、幅広い様々なデバイスまたは装置においてインプリメントされ得る。様々なコンポーネント、モジュール、またはユニットは、開示された技法を行うように構成されるデバイスの機能的な態様を強調するために本開示の中で説明されるが、必ずしも異なるハードウェアユニットによる実現を要求しない。むしろ、上記に説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされ得るか、または適切なソフトウェアおよび／またはファームウェアと併せて、上記に説明されたような１つ以上のプロセッサを含む、相互運用のハードウェアユニット（interoperative hardware units）の集合によって提供され得る。
【００６８】
[0073]  様々な例が、説明された。これらおよび他の例は、以下の特許請求の範囲の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
グラフィックス処理の方法であって、
グラフィックス処理ユニット（ＧＰＵ）が、グラフィックス処理パイプラインの少なくとも２つのステージによって共有される前記ＧＰＵのオンチップグラフィックスメモリの中に共有されるデータチャネルを割り当てることと、
前記ＧＰＵの中のシェーダユニット上で、前記グラフィックス処理パイプラインの前記少なくとも２つのステージを実行することと、
オンチップグラフィックスメモリの中の前記共有されるデータチャネルの中に前記ＧＰＵが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記少なくとも２つのステージの各々によって作り出されるデータを記憶することと、
を備える、方法。
［Ｃ２］
前記ＧＰＵが、前記グラフィックス処理パイプラインの第２の少なくとも２つのステージによって共有される前記ＧＰＵのオンチップグラフィックスメモリの中に第２の共有されるデータチャネルを割り当てることと、ここにおいて、前記共有されるデータチャネルは、第１の共有されるデータチャネルである、
前記ＧＰＵの中の前記シェーダユニット上で、前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージを実行することと、
前記第２の共有されるデータチャネルの中に前記ＧＰＵが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージの各々によって作り出される第２のデータを記憶することと、
をさらに備える、Ｃ１に記載の方法。
［Ｃ３］
データが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であり、ならびにフリースペースが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であるように、前記ＧＰＵが、前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルのステータスに少なくとも部分的に基づいて前記シェーダユニット上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングすることをさらに備える、Ｃ２に記載の方法。
［Ｃ４］
前記第１の共有されるデータチャネルは、前記第１の共有されるデータチャネルの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第２の共有されるデータチャネルは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、Ｃ２に記載の方法。
［Ｃ５］
前記第１の共有されるデータチャネルは、第１のリングバッファであり、前記第２の共有されるデータチャネルは、第２のリングバッファである、Ｃ２に記載の方法。
［Ｃ６］
前記第１の共有されるデータチャネルの中に記憶された前記データは、前記グラフィックス処理パイプラインの前記少なくとも２つのステージによって作り出される頂点データを備え、前記第２の共有されるデータチャネルの中に記憶された前記第２のデータは、前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージによって作り出されるプリミティブを備える、Ｃ２に記載の方法。
［Ｃ７］
前記グラフィックス処理パイプラインの前記少なくとも２つのステージは、頂点シェーダおよびドメインシェーダを備える、Ｃ６に記載の方法。
［Ｃ８］
前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージは、ハルシェーダおよびジオメトリシェーダを備える、Ｃ６に記載の方法。
［Ｃ９］
前記ＧＰＵが、前記第１の共有されるデータチャネルと前記第２の共有されるデータチャネル間のデッドロックを防ぐために、前記第１の共有されるデータチャネル、および前記第２の共有されるデータチャネルのうちの少なくとも１つの中のフリースペースを保持することをさらに備える、Ｃ２に記載の方法。
［Ｃ１０］
グラフィックスデータを処理するように構成された装置であって、
グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるグラフィックス処理ユニット（ＧＰＵ）のオンチップグラフィックスメモリの中に共有されるデータチャネルを割り当てることと、
前記ＧＰＵの中のシェーダユニット上で、前記グラフィックス処理パイプラインの前記少なくとも２つのステージを実行することと、
オンチップグラフィックスメモリの中の前記共有されるデータチャネルの中に、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記少なくとも２つのステージの各々によって作り出されるデータを記憶することと、
を行うように構成される前記ＧＰＵを備える、装置。
［Ｃ１１］
前記ＧＰＵは、
前記グラフィックス処理パイプラインの第２の少なくとも２つのステージによって共有される前記ＧＰＵのオンチップグラフィックスメモリの中に第２の共有されるデータチャネルを割り当てることと、ここにおいて、前記共有されるデータチャネルは、第１の共有されるデータチャネルである、
前記ＧＰＵの中の前記シェーダユニット上で、前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージを実行することと、
前記第２の共有されるデータチャネルの中に、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージの各々によって作り出される第２のデータを記憶することと、
を行うようにさらに設定される、Ｃ１０に記載の装置。
［Ｃ１２］
前記ＧＰＵは、
データが、前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であり、ならびにフリースペースが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であるように、前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルのステータスに少なくとも部分的に基づいて前記シェーダユニット上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングするようにさらに構成される、Ｃ１１に記載の装置。
［Ｃ１３］
前記第１の共有されるデータチャネルは、前記第１の共有されるデータチャネルの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第２の共有されるデータチャネルは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、Ｃ１１に記載の装置。
［Ｃ１４］
前記第１の共有されるデータチャネルは、第１のリングバッファであり、前記第２の共有されるデータチャネルは、第２のリングバッファである、Ｃ１１に記載の装置。
［Ｃ１５］
前記第１の共有されるデータチャネルの中に記憶された前記データは、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記少なくとも２つのステージによって作り出される頂点データを備え、前記第２の共有されるデータチャネルの中に記憶された前記第２のデータは、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージによって作り出されるプリミティブを備える、Ｃ１１に記載の装置。
［Ｃ１６］
前記ＧＰＵは、
前記第１の共有されるデータチャネルと前記第２の共有されるデータチャネル間のデッドロックを防ぐために、前記第１の共有されるデータチャネル、および前記第２の共有されるデータチャネルのうちの少なくとも１つの中のフリースペースを保持するようにさらに構成される、Ｃ１１に記載の装置。
［Ｃ１７］
装置であって、
グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるグラフィックス処理ユニット（ＧＰＵ）のオンチップグラフィックスメモリの中に共有されるデータチャネルを割り当てるための手段と、
前記グラフィックス処理パイプラインの前記少なくとも２つのステージを実行するための手段と、
オンチップグラフィックスメモリの中の前記共有されるデータチャネルの中に、前記グラフィックス処理パイプラインの前記少なくとも２つのステージの各々の実行によって作り出されるデータを記憶するための手段と、
を備える、装置。
［Ｃ１８］
前記グラフィックス処理パイプラインの第２の少なくとも２つのステージによって共有される前記ＧＰＵのオンチップグラフィックスメモリの中に第２の共有されるデータチャネルを割り当てるための手段と、ここにおいて、前記共有されるデータチャネルは、第１の共有されるデータチャネルである、
前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージを実行するための手段と、
前記第２の共有されるデータチャネルの中に、前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージの各々の実行によって作り出される第２のデータを記憶するための手段と、
をさらに備える、Ｃ１７に記載の装置。
［Ｃ１９］
データが、前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であり、ならびにフリースペースが、前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であるように、前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルのステータスに少なくとも部分的に基づいて前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングする手段をさらに備える、Ｃ１８に記載の装置。
［Ｃ２０］
前記第１の共有されるデータチャネルは、前記第１の共有されるデータチャネルの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第２の共有されるデータチャネルは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、Ｃ１８に記載の装置。
［Ｃ２１］
前記第１の共有されるデータチャネルは、第１のリングバッファであり、前記第２の共有されるデータチャネルは、第２のリングバッファである、Ｃ１８に記載の装置。
［Ｃ２２］
前記第１の共有されるデータチャネルの中に記憶された前記データは、前記グラフィックス処理パイプラインの前記少なくとも２つのステージによって作り出される頂点データを備え、前記第２の共有されるデータチャネルの中に記憶された前記第２のデータは、前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージによって作り出されるプリミティブを備える、Ｃ１８に記載の装置。
［Ｃ２３］
前記第１の共有されるデータチャネルと前記第２の共有されるデータチャネル間のデッドロックを防ぐために、前記第１の共有されるデータチャネル、および前記第２の共有されるデータチャネルのうちの少なくとも１つの中のフリースペースを保持するための手段をさらに備える、Ｃ１８に記載の装置。
［Ｃ２４］
命令を記憶するコンピュータ可読記憶媒体であって、前記命令は、実行されるとき、１つ以上のプログラマブルプロセッサに、
共有されるデータチャネルを、グラフィックス処理パイプラインの少なくとも２つのステージによって共有されるそれのオンチップグラフィックスメモリの中に割り当てることと、
シェーダユニット上で、前記グラフィックス処理パイプラインの前記少なくとも２つのステージを実行することと、
オンチップグラフィックスメモリの中の前記共有されるデータチャネルの中に、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記少なくとも２つのステージの各々によって作り出されるデータを記憶することと、
を行わせる、コンピュータ可読記憶媒体。
［Ｃ２５］
前記命令は、実行されるとき、前記１つ以上のプログラマブルプロセッサに、
前記グラフィックス処理パイプラインの第２の少なくとも２つのステージによって共有されるオンチップグラフィックスメモリの中に第２の共有されるデータチャネルを割り当てることと、ここにおいて、前記共有されるデータチャネルは、第１の共有されるデータチャネルである、
前記シェーダユニット上で、前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージを実行することと、
前記第２の共有されるデータチャネルの中に、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージの各々によって作り出される第２のデータを記憶することと、
をさらに行わせる、Ｃ２４に記載のコンピュータ可読記憶媒体。
［Ｃ２６］
前記命令は、実行されるとき、前記１つ以上のプログラマブルプロセッサに、
データが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの１つ以上のステージによって消費されるために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であり、ならびにフリースペースが、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記１つ以上のステージによって作り出されるデータを記憶するために前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルにおいて利用可能であるように、前記第１の共有されるデータチャネル、または前記第２の共有されるデータチャネルのステータスに少なくとも部分的に基づいて前記シェーダユニット上で前記グラフィックス処理パイプラインの前記１つ以上のステージの前記実行をスケジューリングすることをさらに行わせる、Ｃ２５に記載のコンピュータ可読記憶媒体。
［Ｃ２７］
前記第１の共有されるデータチャネルは、前記第１の共有されるデータチャネルの中に記憶されたデータをキャッシュするためにキャッシュモードで動作し、前記第２の共有されるデータチャネルは、ファーストインファーストアウト（ＦＩＦＯ）モードで動作する、Ｃ２５に記載のコンピュータ可読記憶媒体。
［Ｃ２８］
前記第１の共有されるデータチャネルは、第１のリングバッファであり、前記第２の共有されるデータチャネルは、第２のリングバッファである、Ｃ２５に記載のコンピュータ可読記憶媒体。
［Ｃ２９］
前記第１の共有されるデータチャネルの中に記憶された前記データは、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記少なくとも２つのステージによって作り出される頂点データを備え、前記第２の共有されるデータチャネルの中に記憶された前記第２のデータは、前記シェーダユニット上で実行している前記グラフィックス処理パイプラインの前記第２の少なくとも２つのステージによって作り出されるプリミティブを備える、Ｃ２５に記載のコンピュータ可読記憶媒体。
［Ｃ３０］
前記命令は、実行されるとき、前記１つ以上のプログラマブルプロセッサに、
前記第１の共有されるデータチャネルと前記第２の共有されるデータチャネル間のデッドロックを防ぐために、前記第１の共有されるデータチャネル、および前記第２の共有されるデータチャネルのうちの少なくとも１つの中のフリースペースを保持することをさらに行わせる、Ｃ２５に記載のコンピュータ可読記憶媒体。
【図１】
0006271768.tif 000002
【図２】
0006271768.tif 000003
【図３】
0006271768.tif 000004
【図４】
0006271768.tif 000005
【図５】
0006271768.tif 000006
【図６】
0006271768.tif 000007