(57)【特許請求の範囲】
【請求項１】
グラフィックスデータを処理するように構成された装置であって、前記装置は、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、
前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路と、
前記複数の段の前記バイパス可能な部分の前に配置されたコントローラと
を備え、前記コントローラが、
グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの後続のセットのための命令を分析することと、
グラフィックスデータの前記後続のセットのための前記命令の前記分析に少なくとも部分的に基づいて、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングすることと
を行うように構成された、
装置。
【請求項２】
前記コントローラは、前記コントローラがグラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングする場合、前記複数の段の前記バイパス可能な部分への電力をオフにするようにさらに構成された、請求項１に記載の装置。
【請求項３】
前記複数の段の前記バイパス可能な部分が１つまたは複数のバイパス可能な段を備える、請求項１に記載の装置。
【請求項４】
前記コントローラが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、請求項１に記載の装置。
【請求項５】
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項４に記載の装置。
【請求項６】
前記複数の段の前記バイパス可能な部分は、グラフィックスデータを記憶するように構成された１つまたは複数のレジスタを備え、前記１つまたは複数のレジスタは、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送るように構成された、請求項４に記載の装置。
【請求項７】
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項６に記載の装置。
【請求項８】
前記コントローラは、前記１つまたは複数のレジスタからの前記信号に基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、請求項６に記載の装置。
【請求項９】
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項８に記載の装置。
【請求項１０】
前記コントローラは、グラフィックスデータの後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかの前記決定とに基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、
請求項４に記載の装置。
【請求項１１】
前記コントローラは、グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、
請求項１０に記載の装置。
【請求項１２】
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項１１に記載の装置。
【請求項１３】
グラフィックスデータを処理するための方法であって、前記方法は、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理することと、
グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの後続のセットのための命令を分析することと、
前記複数の段の前記バイパス可能な部分の前に配置されたコントローラを用いて、グラフィックスデータの前記後続のセットのための前記命令の前記分析に少なくとも部分的に基づいて、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングすることと
を備える、方法。
【請求項１４】
グラフィックスデータの前記現在のセットが前記ショートカット回路にルーティングされる場合、前記複数の段の前記バイパス可能な部分への電力をオフにすること
をさらに備える、請求項１３に記載の方法。
【請求項１５】
前記複数の段の前記バイパス可能な部分が１つまたは複数のバイパス可能な段を備える、請求項１３に記載の方法。
【請求項１６】
グラフィックスデータの前記現在のセットをルーティングすることが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングすることを備える、請求項１３に記載の方法。
【請求項１７】
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、請求項１６に記載の方法。
【請求項１８】
前記複数の段の前記バイパス可能な部分は、グラフィックスデータを記憶するように構成された１つまたは複数のレジスタを備え、前記方法は、
前記１つまたは複数のレジスタから、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送ること
をさらに備える、請求項１６に記載の方法。
【請求項１９】
前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、請求項１８に記載の方法。
【請求項２０】
前記１つまたは複数のレジスタからの前記信号に基づいて、グラフィックスデータの前記現在のセットをルーティングすること
をさらに備える、請求項１８に記載の方法。
【請求項２１】
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、請求項２０に記載の方法。
【請求項２２】
グラフィックスデータの後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかの前記決定とに基づいて、グラフィックスデータの前記現在のセットをルーティングすることと
をさらに備える、請求項１６に記載の方法。
【請求項２３】
グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、前記現在のセットグラフィックスデータをルーティングすることと
をさらに備える、請求項２２に記載の方法。
【請求項２４】
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、請求項２３に記載の方法。
【請求項２５】
グラフィックスデータを処理するように構成された装置であって、前記装置は、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理するための手段と、
グラフィックスデータの後続のセットが前記複数の段のバイパス可能な部分によって処理されることになるか否かを決定するために、グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの前記後続のセットのための命令を分析するための手段と、
グラフィックスデータの前記後続のセットのための前記命令の前記分析に少なくとも部分的に基づいて、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングするための手段と
を備える、装置。
【請求項２６】
グラフィックスデータの前記現在のセットをルーティングするための前記手段が、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするための手段を備える、請求項２５に記載の装置。
【請求項２７】
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするための手段と、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするための手段と
をさらに備える、請求項２６に記載の装置。
【請求項２８】
実行されたとき、グラフィックスデータを処理するように構成されたデバイスの１つまたは複数のプロセッサに、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理することと、
グラフィックスデータの後続のセットが前記複数の段のバイパス可能な部分によって処理されることになるか否かを決定するために、グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの前記後続のセットのための命令を分析することと、
グラフィックスデータの前記後続のセットのための前記命令の前記分析に少なくとも部分的に基づいて、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングすることと
を行わせる命令を記憶する非一時的なコンピュータ可読記憶媒体。
【請求項２９】
前記１つまたは複数のプロセッサが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、請求項２８に記載の非一時的なコンピュータ可読記憶媒体。
【請求項３０】
前記１つまたは複数のプロセッサは、
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
を行うようにさらに構成された、請求項２９に記載の非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示はグラフィックス処理に関する。
【背景技術】
【０００２】
[0002]グラフィカルユーザインターフェースおよびビデオゲームのためのコンテンツなど、表示のための視覚コンテンツは、グラフィックス処理ユニット（ＧＰＵ：graphics processing unit）によって生成され得る。ＧＰＵは、２次元または３次元（３Ｄ）オブジェクトを、表示され得る２次元（２Ｄ）ピクセル表現に変換し得る。３Ｄオブジェクトに関する情報を、表示され得るビットマップに変換することは、ピクセルレンダリングとして知られており、かなりのメモリおよび処理能力を必要とする。過去に、３Ｄグラフィックス能力は、強力なワークステーション上でのみ利用可能だった。しかしながら、現在、３Ｄグラフィックスアクセラレータは、一般的に、パーソナルコンピュータ（ＰＣ）において、ならびにスマートフォン、タブレットコンピュータ、ポータブルメディアプレーヤ、ポータブルビデオゲームコンソールなど、組込みデバイス中において見つけられる。一般に、組込みデバイスは、従来のＰＣと比較してより少ない計算能力およびメモリ容量を有する。したがって、３Ｄグラフィックスレンダリング技法の複雑さの増大は、組込みシステム上でそのような技法を実装するときに困難をもたらす。
【発明の概要】
【０００３】
[0003]本開示は、固定ハードウェアパイプライン（fixed hardware pipeline）を用いてグラフィックスデータを処理するための技法について説明する。特に、本開示は、いずれかの固定ハードウェアパイプラインのバイパス可能な段（bypassable stage）に、またはバイパス可能な段を避けてグラフィックスデータをルーティングするショートカット回路にグラフィックスデータを選択的にルーティングするための装置および技法について説明する。
【０００４】
[0004]本開示の１つまたは複数の例では、コントローラが、１つまたは複数の異なる基準に基づいてグラフィックスデータの現在のセットをルーティングするように構成され得る。基準は、グラフィックスデータの現在のセットのための現在の命令と、グラフィックスデータの後続のセットのための命令と、バイパス可能な段が他のグラフィックスデータを現在処理しているか否かの指示とを含み得る。このようにして、本開示の例示的な装置および技法は、バイパス可能な段を通して、またはバイパス可能な段を避けてグラフィックスデータを選択的にルーティングする一方、順序どおりの実行を維持し、さらにデータレイテンシ、電力消費およびチップ面積コストの改善を与え得る。
【０００５】
[0005]本開示の一例では、グラフィックスデータを処理するように構成された装置は、グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む複数の段を備える、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路と、複数の段のバイパス可能な部分の前に配置されたコントローラと、コントローラが、グラフィックスデータの現在のセットをショートカット回路または複数の段のバイパス可能な部分のうちの１つに選択的にルーティングするように構成された、を備える。
【０００６】
[0006]本開示の別の例では、グラフィックスデータを処理するための方法は、グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む複数の段を備える、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの現在のセットを処理することと、複数の段のバイパス可能な部分の前に配置されたコントローラを用いて、グラフィックスデータの現在のセットをショートカット回路または複数の段のバイパス可能な部分のうちの１つに選択的にルーティングすることとを備える。
【０００７】
[0007]本開示の別の例では、グラフィックスデータを処理するように構成された装置は、グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む複数の段を備える、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの現在のセットを処理するための手段と、グラフィックスデータの現在のセットをショートカット回路または複数の段のバイパス可能な部分のうちの１つに選択的にルーティングするための手段とを備える。
【０００８】
[0008]別の例では、本開示は、実行されたとき、グラフィックスデータを処理するように構成されたデバイスの１つまたは複数のプロセッサに、グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む複数の段を備える、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの現在のセットを処理することと、グラフィックスデータの現在のセットをショートカット回路または複数の段のバイパス可能な部分のうちの１つに選択的にルーティングすることとを行わせる命令を記憶するコンピュータ可読記憶媒体について説明する。
【０００９】
[0009]本開示の１つまたは複数の例の詳細を添付の図面および以下の説明に記載する。本開示の他の特徴、目的、および利点は、これらの説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１０】
【図１】[0010]本開示の技法を使用するように構成された例示的なコンピューティングデバイスを示すブロック図。
【図２】[0011]図１の構成要素をより詳細に示すブロック図。
【図３】[0012]例示的な固定ハードウェアパイプラインを示すブロック図。
【図４】[0013]固定ハードウェアパイプラインの別の例を示すブロック図。
【図５】[0014]固定ハードウェアパイプラインの別の例を示すブロック図。
【図６】[0015]本開示の技法による、固定ハードウェアパイプラインの一例を示すブロック図。
【図７Ａ】[0016]グラフィックス処理において発生し得る例示的なデータバブルを示す概念図。
【図７Ｂ】グラフィックス処理において発生し得る例示的なデータバブルを示す概念図。
【図８Ａ】[0017]本開示による、例示的なデータバブル防止技法を示す概念図。
【図８Ｂ】本開示による、例示的なデータバブル防止技法を示す概念図。
【図９】[0018]本開示の技法による、固定ハードウェアパイプラインの別の例を示すブロック図。
【図１０】[0019]本開示の技法による、例示的なバイパスコントローラを示すブロック図。
【図１１】[0020]本開示の例示的な方法を示すフローチャート。
【図１２】[0021]本開示の別の例示的な方法を示すフローチャート。
【図１３】[0022]本開示の別の例示的な方法を示すフローチャート。
【図１４】[0023]本開示の別の例示的な方法を示すフローチャート。
【発明を実施するための形態】
【００１１】
[0024]多くのグラフィックス処理技法は、固定ハードウェアパイプラインを使用して実行される。すなわち、関連する算術論理ユニット（ＡＬＵ：arithmetic logic unit）をもつプログラマブル処理ユニットを使用するのではなく、１つまたは複数の関数は、一連の固定ハードウェア論理ユニットを使用して実行され得る。固定ハードウェアパイプラインには、固定ハードウェアパイプラインが実施する（１つまたは複数の）関数が変更され得ないので、プログラマブル処理ユニットのフレキシビリティがない。しかしながら、固定ハードウェアパイプラインは、概して、関数がプログラマブル処理ユニットを使用して実施され得るよりもはるかに高速に関数を実施する。
【００１２】
[0025]ハードウェア論理ユニットを使用して実行されることを望まれる各関数または関数の組合せのために複数の固定パイプラインを有するのではなく、多くのグラフィックス処理ユニット（ＧＰＵ）は、２つ以上の関数のためのハードウェア論理ユニットを含む固定ハードウェアパイプラインで構成される。この構成では、固定ハードウェアパイプラインの特定の段（すなわち、１つまたは複数のハードウェア論理ユニット）は、いくつかの関数を実施するために必要とされない（すなわち、バイパスされる）ことがある。これは、バイパスされた段が他の異なる関数のために使用されるからである。
【００１３】
[0026]１つまたは複数のバイパス可能な段を含む固定ハードウェアパイプラインを実装するための現在の技法は、電力消費、チップ面積コスト、およびデータレイテンシに関して欠点を呈する。これらの欠点に鑑みて、本開示は、固定ハードウェアパイプラインを用いてグラフィックスデータを処理するための装置および技法について説明する。特に、本開示は、いずれかの固定ハードウェアパイプラインのバイパス可能な段に、またはバイパス可能な段を避けてグラフィックスデータをルーティングするショートカット回路にグラフィックスデータを選択的にルーティングするための装置および技法について説明する。
【００１４】
[0027]本開示の１つまたは複数の例では、コントローラが、１つまたは複数の異なる基準に基づいてグラフィックスデータの現在のセットをルーティングするように構成され得る。基準は、グラフィックスデータの現在のセットのための現在の命令と、グラフィックスデータの後続のセットのための命令と、バイパス可能な段が他のグラフィックスデータを現在処理しているか否かの指示とを含み得る。このようにして、本開示の例示的な装置および技法は、バイパス可能な段を通して、またはバイパス可能な段を避けてグラフィックスデータを選択的にルーティングする一方、順序どおりの実行を維持し、さらにデータレイテンシ、電力消費およびチップ面積コストの改善を与え得る。
【００１５】
[0028]図１は、本開示の動的固定パイプラインおよび関連する技法を使用し得る例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、たとえば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、たとえば、セルラー電話または衛星電話などの携帯電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプーイヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、あるいはグラフィカルデータを処理および／または表示する任意の他のタイプのデバイスを備え得る。
【００１６】
[0029]図１の例に示されているように、コンピューティングデバイス２は、ユーザ入力インターフェース４と、中央処理ユニット（ＣＰＵ）６と、メモリコントローラ８と、システムメモリ１０と、ＧＰＵ１２と、グラフィックスメモリ１４と、ディスプレイインターフェース１６と、ディスプレイ１８と、バス２０および２２とを含み得る。いくつかの例では、グラフィックスメモリ１４が、ＧＰＵ１２とともに「オンチップ」であり得ることに留意されたい。いくつかの場合には、図１に示されているＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびグラフィックスメモリ１４、および場合によってはディスプレイインターフェース１６は、たとえば、システムオンチップ（ＳｏＣ）設計におけるオンチップであり得る。ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびディスプレイインターフェース１６は、バス２０を使用して互いに通信し得る。メモリコントローラ８およびシステムメモリ１０はまた、バス２２を使用して互いと通信し得る。バス２０、２２は、第３世代バス（たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバスまたはＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（たとえばアドバンストグラフィックスポートバス、周辺構成要素相互接続（ＰＣＩ）エクスプレスバス、またはアドバンストエクステンシブルインターフェース（ＡＸＩ：Advanced eXentisible Interface）バス）、あるいは別のタイプのバスまたはデバイスの相互接続などの様々なバス構造のいずれかであり得る。図１に示されている異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、コンピューティングデバイスの他の構成および／あるいは同じまたは異なる構成要素をもつ他のグラフィックス処理システムが、本開示の技法を実装するために使用され得ることに留意されたい。
【００１７】
[0030]ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるためにコンピューティングデバイス２に入力を与え得る。ＣＰＵ６上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。さらに、ＣＰＵ６は、ＧＰＵ１２の動作を制御するためのＧＰＵドライバ７を実行し得る。ユーザは、ユーザインターフェース４を介してコンピューティングデバイス２に結合されたキーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなどの１つまたは複数の入力デバイス（図示せず）を介して、コンピューティングデバイス２に入力を与え得る。
【００１８】
[0031]ＣＰＵ６上で実行するソフトウェアアプリケーションは、ディスプレイ１８へのグラフィックスデータのレンダリングを行わせるようにＣＰＵ６に命令する１つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ（ＯｐｅｎＧＬ：Open Graphics Library（商標登録））アプリケーションプログラミングインターフェース（ＡＰＩ）、オープングラフィックスライブラリ組込みシステムズ（ＯｐｅｎＧＬ  ＥＳ：Open Graphics Library Embedded Systems）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、あるいは任意の他の公開またはプロプライエタリ規格グラフィックスＡＰＩなどのグラフィックスＡＰＩに準拠し得る。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングの一部または全部を実施させるために、１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１２に（たとえば、ＧＰＵドライバ７を通して）発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブのリスト、たとえば、点、線、三角形、四角形、三角形ストリップなどを含み得る。
【００１９】
[0032]他の例では、ＣＰＵ６上で実行するソフトウェア命令は、ＧＰＵ１２に、ＧＰＵハードウェアの高度並列性質によって実行されるために適用可能なより一般的な計算を実施するための汎用シェーダを実行させ得る。そのような汎用アプリケーションは、いわゆる汎用グラフィックス処理ユニット（ＧＰＧＰＵ：general-purpose graphics processing unit）であり得、ＯｐｅｎＣＬなどの汎用ＡＰＩに準拠し得る。
【００２０】
[0033]メモリコントローラ８は、システムメモリ１０に入るおよびそれから出るデータの転送を可能にする。たとえば、メモリコントローラ８は、コンピューティングデバイス２中の構成要素にメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信し、システムメモリ１０に関するそのようなコマンドをサービスし得る。メモリコントローラ８は、メモリバス２２を介してシステムメモリ１０に通信可能に結合される。メモリコントローラ８は、ＣＰＵ６とシステムメモリ１０の両方とは別個である処理モジュールであるものとして図１に示されているが、他の例では、メモリコントローラ８の機能の一部または全部は、ＣＰＵ６とシステムメモリ１０の一方または両方の上で実装され得る。
【００２１】
[0034]システムメモリ１０は、ＣＰＵ６が実行するためにアクセス可能であるプログラムモジュールおよび／または命令、ならびに／あるいはＣＰＵ６上で実行しているプログラムによる使用のためのデータを記憶し得る。たとえば、システムメモリ１０は、ディスプレイ１８上にグラフィカルユーザインターフェース（ＧＵＩ）を提示するために、ＣＰＵ６によって使用されるウィンドウマネージャアプリケーションを記憶し得る。さらに、システムメモリ１０は、ユーザアプリケーションと、アプリケーションに関連するアプリケーション表面データとを記憶し得る。システムメモリ１０は、コンピューティングデバイス２の他の構成要素による使用のための情報、および／または他の構成要素によって生成される情報をさらに記憶し得る。たとえば、システムメモリ１０は、ＧＰＵ１２のためのデバイスメモリとして働き得、ＧＰＵ１２によってそれに対して演算されるべきデータ、ならびにＧＰＵ１２によって実施される演算から生じるデータを記憶し得る。たとえば、システムメモリ１０は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。システムメモリ１０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
【００２２】
[0035]ＧＰＵ１２は、１つまたは複数のグラフィックスプリミティブをディスプレイ１８にレンダリングするためにグラフィックス演算を実施するように構成され得る。したがって、ＣＰＵ６上で実行しているソフトウェアアプリケーションのうちの１つがグラフィックス処理を必要とするとき、ＣＰＵ６は、ディスプレイ１８にレンダリングするためのグラフィックスコマンドおよびグラフィックスデータをＧＰＵ１２に与え得る。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。ＧＰＵ１２は、いくつかの事例では、複雑なグラフィック関係演算の、ＣＰＵ６よりも効率的な処理を行う高度並列構造を用いて構築され得る。たとえば、ＧＰＵ１２は、複数の頂点またはピクセル上で並列様式で演算するように構成された複数の処理要素を含み得る。ＧＰＵ１２の高度並列性質は、いくつかの事例では、ＧＰＵ１２が、ＣＰＵ６を使用して直接ディスプレイ１８にシーンを描画するよりも速く、グラフィックス画像（たとえば、ＧＵＩ、ならびに２次元（２Ｄ）および／または３次元（３Ｄ）グラフィックスシーン）をディスプレイ１８上に描画することを可能にし得る。
【００２３】
[0036]以下でより詳細に説明するように、ＧＰＵ１２は、グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインし得る。本開示のコンテキストでは、グラフィックスデータのセットは、それに対して論理関数および／または数学関数が実施され得るデータの１つまたは複数の値である。固定ハードウェアパイプラインは、複数の段のバイパス可能な部分を含む複数の段を含み得る。ＧＰＵ１２は、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路と、複数の段のバイパス可能な部分の前に配置されたコントローラとをさらに含み得る。コントローラは、グラフィックスデータの現在のセットをショートカット回路または複数の段のバイパス可能な部分のうちの１つに選択的にルーティングするように構成され得る。
【００２４】
[0037]ＧＰＵ１２は、いくつかの事例では、コンピューティングデバイス２のマザーボードに組み込まれ得る。他の事例では、ＧＰＵ１２は、コンピューティングデバイス２のマザーボード中のポート中に設置されたグラフィックスカード上に存在し得るか、または場合によっては、コンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。ＧＰＵ１２は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積またはディスクリート論理回路など、１つまたは複数のプロセッサを含み得る。
【００２５】
[0038]ＧＰＵ１２はグラフィックスメモリ１４に直接結合され得る。したがって、ＧＰＵ１２は、バス２０を使用することなしに、グラフィックスメモリ１４からデータを読み取り、グラフィックスメモリ１４にデータを書き込み得る。言い換えれば、ＧＰＵ１２は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルに処理し得る。これは、ＧＰＵ１２が、重いバストラフィックを経験し得る、バス２０を介したデータの読取りおよび書込みを行う必要をなくすことによって、ＧＰＵ１２がより効率的な方法で動作することを可能にする。しかしながら、いくつかの事例では、ＧＰＵ１２は、別個のメモリを含まないことがあるが、代わりに、バス２０を介してシステムメモリ１０を利用し得る。グラフィックスメモリ１４は、たとえば、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
【００２６】
[0039]ＣＰＵ６および／またはＧＰＵ１２は、レンダリングされた画像データをフレームバッファ１５に記憶し得る。フレームバッファ１５は、独立したメモリであり得るか、またはシステムメモリ１０内に割り振られ得る。ディスプレイインターフェース１６は、フレームバッファ１５からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ１８を構成し得る。一部の例では、ディスプレイインターフェース１６は、フレームバッファから取り出されたデジタル値を、ディスプレイ１８によって消費可能なアナログ信号に変換するように構成されたデジタルアナログ変換器（ＤＡＣ）を含み得る。他の例では、ディスプレイインターフェース１６は、処理のために、デジタル値をディスプレイ１８に直接パスし得る。ディスプレイ１８は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、有機ＬＥＤ（ＯＬＥＤ）ディスプレイなどの発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ（ＳＥＤ）、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ１８は、コンピューティングデバイス２内に組み込まれ得る。たとえば、ディスプレイ１８は携帯電話のスクリーンであり得る。代替的に、ディスプレイ１８は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス２に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ１８は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００２７】
[0040]図２は、図１のＣＰＵ６、ＧＰＵ１２、およびシステムメモリ１０の例示的な実装形態をさらに詳細に示すブロック図である。ＣＰＵ６は、その各々がＣＰＵ６上で実行する１つまたは複数のソフトウェアアプリケーションまたはサービスであり得る、少なくとも１つのソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、およびＧＰＵドライバ７を含み得る。ＧＰＵ１２は、グラフィックス処理コマンドを実行するためにともに動作する複数のグラフィックス処理段を含むグラフィックス処理パイプライン３０を含み得る。ＧＰＵ１２は、ビニングレンダリングモードと直接レンダリングモードとを含む様々なレンダリングモードでグラフィックス処理パイプライン３０を実行するように構成され得る。図２に示されているように、グラフィックス処理パイプライン３０は、コマンドエンジン３２と、ジオメトリ処理段３４と、ラスタ化段３６と、ピクセル処理パイプライン３８とを含み得る。ピクセル処理パイプライン３８はテクスチャエンジン３９を含み得る。グラフィックス処理パイプライン３０中の構成要素の各々は、固定関数構成要素、プログラマブル構成要素として（たとえば、プログラマブルシェーダユニット上で実行しているシェーダプログラムの一部として）、または固定関数とプログラマブル構成要素との組合せとして実装され得る。ＣＰＵ６およびＧＰＵ１２にとって利用可能なメモリは、システムメモリ１０とフレームバッファ１５とを含み得る。フレームバッファ１５はシステムメモリ１０の一部であり得るか、またはシステムメモリ１０とは別個であり得る。フレームバッファ１５は、レンダリングされた画像データを記憶し得る。
【００２８】
[0041]ソフトウェアアプリケーション２４は、ＧＰＵ１２の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション２４は、ＧＵＩアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングまたは芸術的アプリケーションのためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、あるいはＧＰＵを利用し得る別のタイプのソフトウェアアプリケーションであり得る。
【００２９】
[0042]ソフトウェアアプリケーション２４は、ＧＰＵ１２に、グラフィカルユーザインターフェース（ＧＵＩ）および／またはグラフィックスシーンをレンダリングするように命令する１つまたは複数の描画命令を含み得る。たとえば、描画命令は、ＧＰＵ１２によってレンダリングされるべき１つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、ＧＵＩにおいて使用される複数のウィンドウ処理表面の全部または一部をまとめて定義し得る。さらなる例では、描画命令は、アプリケーションによって定義されるモデル空間または世界空間内に１つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンの全部または一部をまとめて定義し得る。
【００３０】
[0043]ソフトウェアアプリケーション２４は、１つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための１つまたは複数のコマンドをＧＰＵ１２に発行するために、グラフィックスＡＰＩ２６を介してＧＰＵドライバ７を呼び出し得る。たとえば、ソフトウェアアプリケーション２４は、プリミティブ定義をＧＰＵ１２に与えるために、グラフィックスＡＰＩ２６を介してＧＰＵドライバ７を呼び出し得る。いくつかの事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、長方形、三角形ファン、三角形ストリップなどのリストの形式でＧＰＵ１２に与えられ得る。プリミティブ定義は、レンダリングされるべきプリミティブに関連する１つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、各頂点についての位置座標を含み、いくつかの事例では、頂点に関連する他の属性、たとえば、色座標、法線ベクトル、およびテクスチャ座標などを含み得る。
【００３１】
[0044]プリミティブ定義はまた、プリミティブタイプ情報（たとえば、三角形、長方形、三角形ファン、三角形ストリップなど）、スケーリング情報、回転情報などを含み得る。ソフトウェアアプリケーション２４によってＧＰＵドライバ７に発行された命令に基づいて、ＧＰＵドライバ７は、プリミティブをレンダリングするためにＧＰＵ１２が実施すべき１つまたは複数の演算を指定する１つまたは複数のコマンドを構築し得る。ＧＰＵ１２がＣＰＵ６からコマンドを受信するとき、グラフィックス処理パイプライン３０はコマンドを復号し、コマンド中で指定された演算を実施するためにグラフィックス処理パイプライン３０内で１つまたは複数の処理要素を構成する。指定された演算を実施した後、グラフィックス処理パイプライン３０は、レンダリングされたデータを、ディスプレイデバイスに関連するフレームバッファ１５に出力する。グラフィックス処理パイプライン３０は、ビンニングレンダリングモードと直接レンダリングモードとを含む複数の異なるレンダリングモードのうちの１つで実行するように構成され得る。
【００３２】
[0045]ＧＰＵドライバ７は、１つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムを、ＧＰＵ１２内に含まれている１つまたは複数のプログラマブルシェーダユニット上にダウンロードするようにさらに構成され得る。シェーダプログラムは、たとえば、ＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）、ハイレベルシェーディング言語（ＨＬＳＬ）、グラフィックスのためのＣ（Ｃｇ）シェーディング言語など、ハイレベルシェーディング言語で書かれ得る。コンパイルされたシェーダプログラムは、ＧＰＵ１２内のプログラマブルシェーダユニットの動作を制御する１つまたは複数の命令を含み得る。たとえば、シェーダプログラムは頂点シェーダプログラムおよび／またはピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたは統合シェーダユニットの実行を制御し、頂点ごとの１つまたは複数の演算を指定する命令を含み得る。ピクセルシェーダプログラムは、プログラマブルピクセルシェーダユニットまたは統合シェーダユニットの実行を制御するピクセルシェーダプログラムを含み、ピクセルごとの１つまたは複数の演算を指定する命令を含み得る。
【００３３】
[0046]グラフィックス処理パイプライン３０は、ＧＰＵドライバ７を介して、ＣＰＵ６から１つまたは複数のグラフィックス処理コマンドを受信し、表示可能なグラフィックス画像を生成するためにグラフィックス処理コマンドを実行するように構成され得る。上記で説明したように、グラフィックス処理パイプライン３０は、グラフィックス処理コマンドを実行するためにともに動作する複数の段を含む。しかしながら、そのような段は、必ずしも別個のハードウェアブロック中で実装される必要がないことに留意されたい。たとえば、ジオメトリ処理段３４およびピクセル処理パイプライン３８の一部は、統合シェーダユニットの一部として実装され得る。この場合も、グラフィックス処理パイプライン３０は、ビニングレンダリングモードと直接レンダリングモードとを含む複数の異なるレンダリングモードのうちの１つで実行するように構成され得る。
【００３４】
[0047]コマンドエンジン３２は、グラフィックス処理コマンドを受信し、グラフィックス処理コマンドを行うための様々な演算を実施するようにグラフィックス処理パイプライン３０内の残りの処理段を構成し得る。グラフィックス処理コマンドは、たとえば、描画コマンドおよびグラフィックス状態コマンドを含み得る。描画コマンドは、１つまたは複数の頂点のための位置座標を指定し、いくつかの事例では、たとえば、色座標、法線ベクトル、テクスチャ座標、およびフォグ座標など、頂点の各々に関連する他の属性値を指定する頂点仕様コマンドを含み得る。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、ライティングコマンド（lighting command）などを含み得る。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプ、および／またはプリミティブを形成するためにどのように頂点が組み合わせられるかを指定し得る。変換コマンドは、頂点上で実施すべき変換のタイプを指定し得る。ライティングコマンドは、グラフィックスシーン内の異なる光のタイプ、方向および／または配置を指定し得る。コマンドエンジン３２は、ジオメトリ処理段３４に、１つまたは複数の受信コマンドに関連する頂点および／またはプリミティブに関してジオメトリ処理を実施させ得る。
【００３５】
[0048]ジオメトリ処理段３４は、ラスタ化段３６のためのプリミティブデータを生成するために、１つまたは複数の頂点上で、頂点ごとの演算および／またはプリミティブセットアップ演算を実施し得る。各頂点は、たとえば、位置座標、色値、法線ベクトル、およびテクスチャ座標などの属性のセットに関連し得る。ジオメトリ処理段３４は、頂点ごとの様々な演算に従って、それらの属性のうちの１つまたは複数を変更する。たとえば、ジオメトリ処理段３４は、変更された頂点位置座標を生成するために、頂点位置座標上で１つまたは複数の変換を実施し得る。ジオメトリ処理段３４は、変更された頂点位置座標を生成するために、たとえば、モデリング変換、視野変換（viewing transformation）、投影変換、ＭｏｄｅｌＶｉｅｗ変換、ＭｏｄｅｌＶｉｅｗＰｒｏｊｅｃｔｉｏｎ変換、ビューポート変換（viewport transformation）および深度レンジスケーリング変換のうちの１つまたは複数を頂点位置座標に適用し得る。いくつかの事例では、頂点位置座標はモデル空間座標であり得、変更された頂点位置座標はスクリーン空間座標であり得る。スクリーン空間座標は、モデリング変換、視野変換、投影変換およびビューポート変換の適用の後に取得され得る。いくつかの事例では、ジオメトリ処理段３４はまた、頂点のための変更された色座標を生成するために、頂点上で頂点ごとのライティング演算を実施し得る。ジオメトリ処理段３４はまた、たとえば、正規変換、正規の正規化演算、ビューボリュームクリッピング、均一分割および／またはバックフェースカリング演算を含む他の演算を実施し得る。
【００３６】
[0049]ジオメトリ処理段３４は、ラスタライズされるべきプリミティブを定義する１つまたは複数の変更された頂点のセットを含むプリミティブデータ、ならびにプリミティブを形成するためにどのように頂点を組み合わせるかを指定するデータを生成し得る。変更された頂点の各々は、たとえば、変更された頂点位置座標、および頂点に関連する処理された頂点属性値を含み得る。プリミティブデータは、グラフィックス処理パイプライン３０のさらなる段によってラスタライズされるべきプリミティブにまとめて対応し得る。概念的に、各頂点は、プリミティブの２つのエッジが交わるプリミティブのコーナーに対応し得る。ジオメトリ処理段３４は、さらなる処理のために、プリミティブデータをラスタ化段３６に与え得る。
【００３７】
[0050]いくつかの事例では、ジオメトリ処理段３４の全部または一部は、１つまたは複数のシェーダユニット上で実行している１つまたは複数のシェーダプログラムによって実装され得る。たとえば、ジオメトリ処理段３４は、そのような例では、頂点シェーダ、ジオメトリシェーダ、またはそれらの任意の組合せによって実装され得る。他の例では、ジオメトリ処理段３４は、固定関数ハードウェア処理パイプラインとして、あるいは固定関数ハードウェアと１つまたは複数のシェーダユニット上で実行している１つまたは複数のシェーダプログラムとの組合せとして実装され得る。
【００３８】
[0051]ラスタ化段３６は、ラスタライズされるべきプリミティブを表すプリミティブデータをジオメトリ処理段３４から受信し、プリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソースピクセルを生成するように構成される。いくつかの事例では、ラスタ化段３６は、ラスタライズされるべきプリミティブによってどのスクリーンピクセルロケーションがカバーされるかを決定し、プリミティブによってカバーされると決定された各スクリーンピクセルロケーションのためのソースピクセルを生成し得る。ラスタ化段３６は、たとえば、エッジウォーキング（edge-walking）技法など、当業者に知られている技法を使用すること、エッジ式を評価することなどによって、どのスクリーンピクセルロケーションがプリミティブによってカバーされるかを決定し得る。ラスタ化段３６は、さらなる処理のために、得られたソースピクセルをピクセル処理パイプライン３８に与え得る。
【００３９】
[0052]ラスタ化段３６によって生成されたソースピクセルは、スクリーンピクセルロケーション、たとえば、目標ピクセルに対応し、１つまたは複数の色属性に関連し得る。特定のラスタライズされたプリミティブのために生成されたソースピクセルのすべては、ラスタライズされたプリミティブに関連すると言われ得る。ラスタ化段３６によって、プリミティブによってカバーされるべきと決定されたピクセルは、概念的に、プリミティブの頂点を表すピクセルと、プリミティブのエッジを表すピクセルと、プリミティブの内部を表すピクセルとを含み得る。
【００４０】
[0053]ピクセル処理パイプライン３８は、ラスタライズされたプリミティブに関連するソースピクセルを受信し、ソースピクセル上で１つまたは複数のピクセルごとの演算を実施するように構成される。ピクセル処理パイプライン３８によって実施され得るピクセルごとの演算は、たとえば、アルファテスト、テクスチャマッピング、色計算、ピクセルシェーディング、ピクセルごとのライティング、フォグ処理、混合、ピクセルオーナーシップテスト、ソースアルファテスト、ステンシルテスト、深度テスト、シザーステスト、および／またはスティップリング演算を含む。さらに、ピクセル処理パイプライン３８は、ピクセルごとの１つまたは複数の演算を実施するために１つまたは複数のピクセルシェーダプログラムを実行し得る。ピクセル処理パイプライン３８によって生成された得られたデータは、本明細書では目標ピクセルデータと呼ばれ、フレームバッファ１５に記憶され得る。目標ピクセルデータは、処理されたソースピクセルと同じ表示ロケーションを有する、フレームバッファ１５中の目標ピクセルに関連し得る。目標ピクセルデータは、たとえば、色値、目標アルファ値、深度値などのデータを含み得る。
【００４１】
[0054]テクスチャエンジン３９は、ピクセル処理パイプライン３８の一部として含まれ得る。テクスチャエンジン３９は、テクスチャ（テクセル）をピクセルに適用するように設計された、プログラマブルであるとともに固定である関数ハードウェアを含み得る。テクスチャエンジン３９は、テクスチャフィルタ処理を実施するための専用ハードウェアを含み得、それによって、１つまたは複数のテクセル値は、最終テクスチャマッピングされたピクセルを生成するために、１つまたは複数のピクセル値によって乗算され、累算される。以下でより詳細に説明するように、本開示は、テクスチャエンジン３９が単一のシェーダ命令を使用してＬＣＨＯＦを実施するために使用され得るようにテクスチャエンジン３９への変更を提案する。
【００４２】
[0055]フレームバッファ１５は、ＧＰＵ１２のための目標ピクセルを記憶する。各目標ピクセルは、一意なスクリーンピクセルロケーションに関連し得る。いくつかの事例では、フレームバッファ１５は、各目標ピクセルについての色成分と目標アルファ値とを記憶し得る。たとえば、フレームバッファ１５は、各ピクセルについての赤、緑、青、アルファ（ＲＧＢＡ）成分を記憶し得、ただし、「ＲＧＢ」成分は色値に対応し、「Ａ」成分は目標アルファ値に対応する。フレームバッファ１５およびシステムメモリ１０は、別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ１５はシステムメモリ１０の一部であり得る。
【００４３】
[0056]上記で説明したように、ＧＰＵ１２のグラフィックス処理パイプライン３０は、グラフィックスデータに対して１つまたは複数のプロセスを実行するように構成された１つまたは複数の固定ハードウェアパイプラインを含み得る。固定ハードウェアパイプラインを利用し得るグラフィックス処理パイプライン３０の例プロセスは、（たとえば、テクスチャエンジン３９中で実施される）テクスチャマッピング、（たとえば、ジオメトリ処理段３４または別個のテッセレーションユニット中で実施される）テッセレーション、（たとえば、ラスタ化段３６中で実施される）三角形ラスタ化、（たとえば、テクスチャエンジン３９中で実施される）ピクセルブレンディングを含む。テクスチャマッピング、テッセレーション、三角形ラスタ化、およびピクセルブレンディングは、固定ハードウェアパイプラインを使用して実行され得るグラフィックスプロセスの例にすぎない。本開示の技法は、実施されている実際のプロセスにかかわらず、概して固定ハードウェアパイプラインとともに利用され得る。
【００４４】
[0057]図３は、例示的な固定ハードウェアパイプラインを示す概念図である。固定ハードウェアパイプライン１００は、グラフィックスデータのセットに対して関数（関数Ａ）を実行するように構成される。この場合も、本開示のコンテキストでは、グラフィックスデータのセットは、それに対して論理関数および／または数学関数が実施され得るデータの１つまたは複数の値である。たとえば、固定ハードウェアパイプライン１００（または本開示で説明する他の固定ハードウェアパイプライン）は、グラフィックスデータの１つまたは複数の値に対して並列に関数を実施するように構成され得る。固定ハードウェアパイプライン１００は、グラフィックスデータに対して関数を実施する（すなわち、１つまたは複数の論理関数を実施する）ためのハードウェア論理ユニットを含む複数の段と、グラフィックスデータに対して実施された関数の結果を記憶するように構成された１つまたは複数のレジスタとを含み得る。図３に示されているように、固定ハードウェアパイプライン１００は、ハードウェア論理ユニット１０２ａおよび１０２ｂの第１の段と、ハードウェア論理ユニット１０３ａ、１０３ｂ、および１０３ｃの第２の段とを含む。固定ハードウェアパイプライン１００はまた、グラフィックスデータに対して論理関数を実施するハードウェア論理ユニット１０２ａ〜ｂおよび１０３ａ〜ｃの中間結果を記憶するように構成されたレジスタ１０１ａ〜ｆを含む。
【００４５】
[0058]固定ハードウェアパイプライン１１０は、グラフィックスデータのセットに対して異なる関数（すなわち、関数Ａとは異なる関数Ｂ）を実行するように構成される。図３に示されているように、固定ハードウェアパイプライン１１０は、ハードウェア論理ユニット１１２ａおよび１１２ｂの第１の段と、ハードウェア論理ユニット１１３ａおよび１１３ｂの第２の段とを含む。固定ハードウェアパイプライン１１０はまた、グラフィックスデータに対して論理関数を実施するハードウェア論理ユニット１１２ａ〜ｂおよび１１３ａ〜ｂの中間結果を記憶するように構成されたレジスタ１１１ａ〜ｅを含む。
【００４６】
[0059]図３に示されているように、固定ハードウェアパイプライン１００のハードウェア論理ユニット１０２ａ〜ｂは、固定パイプライン１１０のハードウェア論理ユニット１１２ａ〜ｂと同じ関数を実施する。関数ＡおよびＢをそれぞれ実施するために２つの別個の固定ハードウェアパイプライン１００および１１０を有することは、固定関数パイプラインが、ＧＰＵ上に実装するためにかなりの量のスペースをしばしば必要とするので、チップ面積に関して望ましくない、および／または費用がかかり得る。概して、Ｎ個の異なる関数があり得、Ｎ個の別個の固定パイプラインを有することは電力消費およびチップ面積を非常に増加させ得る。
【００４７】
[0060]したがって、いくつかの例では、ＧＰＵ（たとえば、ＧＰＵ１２）は、図示のように、関数Ａと関数Ｂの両方を実施するのに必要なハードウェア論理ユニットを含む単一の固定ハードウェアパイプライン１２０を含むように設計され得る。ある意味では、関数Ａのための固定ハードウェアパイプラインと関数Ｂのための固定ハードウェアパイプラインとは、マージされている。しかしながら、固定ハードウェアパイプライン１２０を使用して関数Ａを実施するために、ハードウェア論理ユニット１１３ａ〜ｂに対応するハードウェアパイプライン１２０の段の一部は必要とされないことがあり、代わりに何らかの方法でバイパスされ得る。同様に、固定ハードウェアパイプライン１２０を使用して関数Ｂを実施するために、ハードウェア論理ユニット１０３ａ〜ｃを含む段の一部は必要とされないことがあり、代わりに何らかの方法でバイパスされ得る。
【００４８】
[0061]特定の関数（すなわち、固定ハードウェアパイプラインの特定の段を必要としない特定の関数）を実施するために固定ハードウェアパイプラインの１つまたは複数の段をバイパスするための従来の技法は、実装のために必要とされる大きいチップ面積と、固定ハードウェアパイプラインにわたる高いデータレイテンシ（すなわち、データがパイプラインを通って移動するために要する時間）と、電力消費の大きいおよび／または望ましくない量とに関して欠点を呈する。
【００４９】
[0062]たとえば、固定パイプライン１２０を使用して関数Ａを実施するために、グラフィックスデータのセットは、バイパスされない場合、ハードウェア論理ユニット１１３ａ〜ｂが無効にされ、グラフィックスのセットに対して関数を実施しない（すなわち、グラフィックスデータのセットがハードウェア論理ユニット１１３ａ〜ｂを通して受け渡される）にもかかわらず、依然として、ハードウェア論理ユニット１１３ａ〜ｂに関連するレジスタを通過する。同様に、固定パイプライン１２０を使用して関数Ｂを実施するために、グラフィックスデータのセットは、バイパスされない場合、ハードウェア論理ユニット１０３ａ〜ｃが無効にされ、グラフィックスのセットに対して関数を実施しないにもかかわらず、依然として、段１０３ａ〜ｃに関連するレジスタを通過する。すなわち、関数Ａまたは関数Ｂを実施するために、固定ハードウェアパイプライン１２０を使用することは、固定ハードウェアパイプラインの必要とされない部分を通してデータを移動させるために余分のクロックサイクルを必要とする。したがって、固定ハードウェアパイプライン１２０は、単一用途のパイプライン（たとえば、固定ハードウェアパイプライン１００および１１０）のために必要とされるハードウェアの量を制限する一方、単一用途のパイプラインに対して、パイプラインの段のすべてを使用するとは限らない関数についてレイテンシの増加（すなわち、パイプラインを通って移動する時間の増加）をもたらす。
【００５０】
[0063]図４に、図３のマージされた固定ハードウェアパイプライン１２０に関連するレイテンシ問題を制限するように構成された固定ハードウェアパイプラインの一例を示す。図４の例では、ハードウェア論理ユニット２１０は、グラフィックスデータのセットに対して関数Ｃを実施するように構成される。同様に、ハードウェア論理ユニット２２０は、グラフィックスのセットに対して関数Ｄを実施するように構成される。関数Ｃと関数Ｄとを実施するために必要とされるハードウェア論理ユニットは、ハードウェア論理ユニット２３０を除いて同等である（すなわち、ユニット２１０および２２０は、ユニット２２０が含まないユニット２３０をユニット２１０が含むことを除いて同等である）。ある意味では、ハードウェア論理ユニット２３０は、関数Ｄのためにバイパス可能である。
【００５１】
[0064]図を簡単にするために、ハードウェア論理ユニット２１０および２２０の矩形ブロックの各々は、ハードウェア論理ユニットと、グラフィックスデータのセットに対して動作する特定のハードウェア論理ユニットの結果を記憶するために使用される対応するレジスタの両方を表す。この規則は、本明細書中の各後続の図について使用されることになる。
【００５２】
[0065]図３の例の場合のように、関数Ｃのためのパイプラインと関数Ｄのためのパイプラインとをマージし、関数Ｃを処理することについて得られた増加したレイテンシをもたらすのではなく、図４の例は、関数Ｃと関数Ｄとをそれぞれ実施するために２つの別個のパイプラインを維持する。すなわち、グラフィックスデータのセットはマルチプレクサ２４０において受信され、マルチプレクサ２４０は、グラフィックスデータに対して（たとえば、ソフトウェア命令によって制御されるように）実施されることが望まれる演算に応じて、グラフィックスデータのセットを関数Ｃパイプラインまたは関数Ｄパイプラインのうちの１つにルーティングするように構成され得る。固定ハードウェアパイプラインの関数Ｃ部分または関数Ｄ部分のいずれかを通過すると、グラフィックスデータのセットはデマルチプレクサ２５０を通過し、固定ハードウェアパイプラインの別の部分に（たとえば、いずれかの別のバイパス可能な部分に、またはバイパス可能でない部分に）フォワーディングされる。
【００５３】
[0066]したがって、図４の例は、図３の例における固定ハードウェアパイプライン１２０のレイテンシ欠点のいずれをも有しない。しかしながら、図４の例の固定ハードウェアパイプラインは、関数Ｄのために必要とされる余分のハードウェア論理ユニットを実装するためにチップ（たとえば、ＧＰＵ１２）上のさらなる面積を必要とする。さらに、関数Ｃおよび関数Ｄのために２つの別個の固定ハードウェアパイプラインを有することは、パイプラインの電力消費を増加させ得る。
【００５４】
[0067]図５に、図３および図４の固定ハードウェアパイプラインの電力消費欠点を制限するように構成された固定ハードウェアパイプラインの別の例を示す。図５の例では、固定ハードウェアパイプライン２５５は、使用していないときに（すなわち、バイパスされたときに）完全に電源を切断され、したがって、電力消費を減らし得るバイパス可能な段２６０を含み得る。バイパス可能な段２６０によって実施される関数がグラフィックスデータのセットに対して実施されるべきでない場合、グラフィックスデータのそのセットは代替データ経路２７０を通してルーティングされる。代替データ経路２７０は、バイパス可能な段２６０中の段の数に等しい数のレジスタを含む。このようにして、グラフィックスデータのセットは、グラフィックスデータのセットがバイパス可能な段２６０を通してクロック制御された場合と同じ時間量で、代替データ経路２７０を通してクロック制御され得る。図５の例は依然としてレイテンシ問題を呈するが、順序どおりの実行は維持される。すなわち、バイパス可能な段２６０をバイパスするグラフィックスデータのセットは、バイパス可能な段２６０を利用する前のデータの前に、固定ハードウェアパイプライン２５５の後続の段に達しない。
【００５５】
[0068]上記の説明に示されているように、ＧＰＵ中の固定ハードウェアパイプラインを実施するための様々な技法は、データレイテンシと、チップ面積コストと、電力消費とに関して欠点を呈する。これらの欠点に鑑みて、本開示は、グラフィックスデータに対して１つまたは複数の関数を実施するための動的固定ハードウェアパイプラインを実行するための装置および技法について説明する。本開示の様々な例では、動的固定ハードウェアパイプラインは、未使用パイプライン段（すなわち、バイパス可能な段）を選択的にスキップするように構成され得る。特に、本開示の例示的な技法は、固定ハードウェアパイプラインの１つまたは複数のバイパス可能な段を通してグラフィックスデータのセットを選択的にルーティングするか、またはバイパス可能な段を避けてショートカット回路を通してグラフィックスデータのセットをルーティングするために、バイパスコントローラを使用する。
【００５６】
[0069]本開示の様々な例では、バイパスコントローラは、１つまたは複数の異なる基準に基づいてグラフィックスデータの現在のセットをルーティングするように構成され得る。基準は、グラフィックスデータの現在のセットのための現在の命令と、グラフィックスデータの後続のセットのための命令と、バイパス可能な段が他のグラフィックスデータを現在処理しているか否かの指示とを含み得る。このようにして、以下でより詳細に説明するように、本開示の例示的な装置および技法は、バイパス可能な段を通して、またはバイパス可能な段を避けてグラフィックスデータを選択的にルーティングする一方、順序どおりの実行を維持し、データレイテンシ、電力消費およびチップ面積コストの改善を与え得る。
【００５７】
[0070]図６は、本開示の技法による、固定ハードウェアパイプラインの一例を示すブロック図である。図６は、ＧＰＵ１２中で実装され得るより大きい固定ハードウェアパイプラインの段のバイパス可能な部分３００を示している。すなわち、グラフィックスデータのセット３０２は、より大きい固定ハードウェアパイプラインの前の部分から段のバイパス可能な部分３００に入り、グラフィックスデータのセット３０２は、段のバイパス可能な部分３００を抜けて、より大きい固定ハードウェアパイプラインの後続部分に続く。段のバイパス可能な部分３００は、グラフィックスデータのセット３０２に対して特定の関数を実施するように構成されたハードウェア論理ユニット３０４ａ〜ｎを含む。ハードウェア論理ユニット３０４ａ〜ｎの各々は、図６に示されているように、グラフィックスデータのセット３０２に対して論理関数および／または数学関数を実施するように構成された１つまたは複数のハードウェア論理ユニットと、グラフィックスデータのセット３０２に適用される論理関数および／または数学関数の中間結果を記憶するためのレジスタの両方を含む。
【００５８】
[0071]段のバイパス可能な部分３００は、より大きい固定ハードウェアパイプライン中のバイパス可能な段の１つの可能な部分を表すことを理解されたい。固定ハードウェアパイプラインは複数のバイパス可能な部分を含み得、その各々は、それら自体のバイパスコントローラをもつ。図９は、本開示の技法による、固定ハードウェアパイプラインの別の例を示すブロック図である。図９に見られるように、固定ハードウェアパイプラインは、段の第１のバイパス可能な部分３５２と、段の固定部分３５４（すなわち、バイパス可能でない段）と、バイパス可能な段の第２の部分３５６とを含み得る。段のバイパス可能な部分を１つの固定ハードウェアパイプラインにマージすることによって、チップ面積は、バイパス可能な段がない別個の固定ハードウェアパイプラインを使用する実装形態と比較して節約され得る。
【００５９】
[0072]段のバイパス可能な部分３００によって実施される関数は、グラフィックスデータのあらゆるセットに対して実施される必要があるとは限らない。したがって、段のバイパス可能な部分３００は、グラフィックスデータの特定のセットのためにバイパスされ得る。本開示の技法によれば、グラフィックスデータのセット３０２は、段のバイパス可能な部分３００を通してルーティングされるか、またはショートカット回路３１４を通してグラフィックスデータのセット３０２をルーティングすることによって段のバイパス可能な部分３００を避けてルーティングされるかのいずれかであり得る。マルチプレクサ３０８は、グラフィックスデータのセット３０２を段のバイパス可能な部分３００またはショートカット回路３１４のうちの１つに選択的にルーティングするように構成され得る。特に、段のバイパス可能な部分３００の前に配置されたバイパスコントローラ３１０は、グラフィックスデータのセット３０２をルーティングするためにマルチプレクサ３０８の動作を制御するように構成される。グラフィックスデータのセット３０２がどこにルーティングされるかにかかわらず、グラフィックスデータのセット３０２は、より大きい固定ハードウェアパイプラインの別の部分に、または場合によってはパイプラインの出力としてグラフィックスデータのセット３０２をフォワーディングするデマルチプレクサ３１２に最終的に到着する。
【００６０】
[0073]バイパスコントローラ３１０は、グラフィックスデータのセット３０２をどこにルーティングすべきかを決定するために１つまたは複数の基準を使用するように構成され得る。１つの例示的な基準は、グラフィックスデータのセット３０２に対応する命令である。すなわち、グラフィックスデータのセット３０２を処理することに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とする場合、バイパスコントローラ３１０は、段のバイパス可能な部分３００を通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。グラフィックスデータのセット３０２を処理することに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要としない場合、バイパスコントローラ３１０は、ショートカット回路３１４を通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。ショートカット回路３１４は、段のバイパス可能な部分３００を避けた直接接続であり、同等の数の段を通してクロック制御される必要がないので、段のバイパス可能な部分３００をバイパスするときに経験されるデータレイテンシは、大幅に低減される。すなわち、より少数のクロックサイクルが、バイパスされた段を避けてグラフィックスデータのセットを移動させるために必要とされる。
【００６１】
[0074]さらに、バイパスコントローラ３１０（またはＧＰＵ１２の別のハードウェアユニット）は、ショートカット回路３１４を通してグラフィックスデータのセット３０２をルーティングすることが決定されたとき、段のバイパス可能な部分３００の電源を切断するようにさらに構成され得る。このようにして、電力消費は低減され得る。
【００６２】
[0075]本開示の別の例では、バイパスコントローラ３１０は、グラフィックスデータのセット３０２のためのルーティングを決定するために追加の基準を利用するように構成され得る。すなわち、グラフィックスデータのセット３０２に関係する命令のみに基づいてグラフィックスデータのセット３０２をルーティングするのではなく、バイパスコントローラ３１０はまた、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているか否かを考慮し得る。この点について、ハードウェア論理ユニット３０４ａ〜ｎは、ハードウェア論理ユニット３０４ａ〜ｎがグラフィックスデータを現在処理しているか否かを示すバイパス信号３０６ａ〜ｎをバイパスコントローラ３１０に送信するように構成され得る。本開示の一例では、バイパス信号３０６ａ〜ｎは、ハードウェア論理ユニット３０６ａ〜ｎに関連するレジスタによって生成され得る。事実上、レジスタは、グラフィックスデータの前のセットのためのデータがレジスタに現在記憶されているか否か、したがって段のバイパス可能な部分３００によって依然として処理されているか否かを示すバイパス信号３０６ａ〜ｎを生成する追加のハードウェアを含み得る。
【００６３】
[0076]上記で説明したように、バイパスコントローラ３１０は、段のバイパス可能な部分３００のステータスを決定するためにバイパス信号３０６ａ〜ｎを利用し得る。別の例では、バイパスコントローラ３１０は、グラフィックスデータの前のセットに関係する命令を分析し、それらの命令が、グラフィックスデータの前のセットが段のバイパス可能な部分３００によって処理されることを必要としたかどうかを決定するように構成され得る。はいの場合、バイパスコントローラは、グラフィックスの前のセットが現在時間とグラフィックスデータの前のセットが段のバイパス可能な部分３００に入った時間とに基づいて段のバイパス可能な部分３００によって依然として処理されているかどうかを決定し得る。すなわち、バイパスコントローラ３１０は、段のバイパス可能な部分３００がグラフィックスデータのセットを処理するために必要とする時間量を示す情報を記憶し、処理が開始してから経過した時間量に基づいて、グラフィックスデータの特定のセットが依然として処理されているかどうかを決定し得る。
【００６４】
[0077]いくつかの状況では、他のいかなるデータも段のバイパス可能な部分３００によって現在処理されていない場合、グラフィックスデータのセット３０２をショートカット回路３１４のみにルーティングすることは有益であり得る。これは、グラフィックスデータの前のセットが段のバイパス可能な部分３００によって処理されることが終わる前に、グラフィックスデータのセット３０２がショートカット回路３１４を介してデマルチプレクサ３１２に到着する状況を回避するためのものである。そのような状況は、順序どおりの実行が必要とされるときに許容できないことがある、順が狂っているデータを生じることになる。順序どおりの実行は、データ（またはデータのセット）が固定ハードウェアパイプラインに入ったのと同じ順序で、データ（またはデータのセット）が固定ハードウェアパイプラインを抜けるための要件である。
【００６５】
[0078]したがって、本開示の別の例では、バイパスコントローラ３１０は、グラフィックスデータの現在のセット３０２に関係する命令と、段のバイパス可能な部分３００のステータス（すなわち、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているか否か）の両方に基づいて、グラフィックスデータのセット３０２を段のバイパス可能な部分３００またはショートカット回路３１４にルーティングするように構成され得る。バイパスコントローラ３１０が、バイパス信号３０６ａ〜ｎ、および上記で説明した命令分析技法を通してなど、任意の方法で段のバイパス可能な部分３００のステータスを決定するように構成され得ることを理解されたい。
【００６６】
[0079]この例では、グラフィックスデータのセット３０２を処理することに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とする場合、バイパスコントローラ３１０は、段のバイパス可能な部分３００を通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。グラフィックスデータのセット３０２を処理することに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要としない場合、バイパスコントローラ３１０は、（たとえば、バイパス信号３０６ａ〜ｎによって示されるように）段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理していない場合、ショートカット回路３１４のみを通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。すなわち、順序どおりの実行を維持するために、バイパスコントローラ３１０は、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理している場合、段のバイパス可能な部分３００を通してグラフィックスデータのセット３０２をルーティングするように構成され得る。グラフィックスデータの現在のセットが、段のバイパス可能な部分３００によって実施される関数を必要としない場合、段のバイパス可能な部分３００は、グラフィックスデータのセット３０２をそのまま渡すように命令されることになる。バイパスコントローラ３１０は、グラフィックスデータのセット３０２に関係する命令が段のバイパス可能な部分３００による処理を必要とせず、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理していないとバイパスコントローラ３１０が決定した場合、ショートカット回路３１４を通してグラフィックスデータのセット３０２をルーティングするように構成される。
【００６７】
[0080]本開示のさらなる例では、バイパスコントローラ３１０は、グラフィックスデータのセット３０２のルーティングを決定するためにグラフィックスデータの（１つまたは複数の）後続のセットに関係する命令を分析するようにさらに構成され得る。たとえば、バイパスコントローラ３１０は、グラフィックスデータの（１つまたは複数の）後続のセットが段のバイパス可能な部分３００によって処理されることになるか否かを決定するために、グラフィックスデータの後続のセットに関係する命令を分析するように構成され得る。グラフィックスデータの後続のセットは、グラフィックスデータの現在のセット、たとえば、グラフィックスデータのセット３０２の後にある。そのような分析は、いわゆるデータ「バブル」を回避するために、グラフィックスデータの現在のセット（たとえば、グラフィックスデータのセット３０２）のためのルーティングを決定することために使用され得る。
【００６８】
[0081]データの１つのセットがデータの前のセットよりも急速に処理されるとき、データバブルが生じ、したがって、パイプラインのある部分においてデータ処理が実施されていない時間期間（すなわち、バブル）を生じる。そのようなデータバブルは、データ不連続性、未使用パイプライン段、および一般的なグラフィックスパイプライン非効率性を生じる。図６の例では、グラフィックスデータのセット３０２がショートカット回路３１４を通してルーティングされるが、グラフィックスデータの後続のセットが段のバイパス可能な部分３００を通してルーティングされる場合、データバブルは発生し得る。データが、ショートカット回路３１４を通るよりもはるかに遅いレートにおいて段のバイパス可能な部分３００を通って移動するので、データバブルはグラフィックスデータのセット３０２とグラフィックスデータの後続のセットとの間に生じ得る。
【００６９】
[0082]図７Ａおよび図７Ｂは、グラフィックス処理において発生し得る例示的なデータバブルを示す概念図である。図７Ａに示されているように、各正方形は、グラフィックスパイプラインの段を表す。パイプラインの中間セクションは、段のバイパス可能な部分である。段の各後続の行は、異なる時間におけるパイプラインを表す。図７Ａに示されているように、パイプライン段がバイパスされないとき、グラフィックスデータは相次いでパイプラインを横断する。すなわち、いつでも、未使用パイプライン段はない。しかしながら、図７Ｂに示されているように、グラフィックスデータのセットが段のバイパス可能な部分をバイパスする場合、データバブルは発生し得、それにより、パイプライン段の一部分は、ある時間期間の間未使用である。図７Ｂに示されているように、そのようなバブルは、段のバイパス可能な部分をバイパスし得るグラフィックスデータが、（たとえば、順序どおりの実行を維持するために）前のデータが段のバイパス可能な部分を完了する前にある時間期間の間停止された場合、より大きくなり得る。
【００７０】
[0083]したがって、本開示の別の例では、バイパスコントローラ３１０は、グラフィックスデータの後続のセットに関係する命令を分析し、分析に基づいてグラフィックスデータのセット３０２をルーティングするようにさらに構成され得る。この例では、グラフィックスデータのセット３０２を処理することに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とする場合、バイパスコントローラ３１０は、段のバイパス可能な部分３００を通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。
【００７１】
[0084]グラフィックスデータのセット３０２を処理することに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要としない場合、バイパスコントローラ３１０は、（たとえば、バイパス信号３０６ａ〜ｎによって示されるように）段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理していない場合、およびグラフィックスデータの後続のセットに関係する命令の分析がまた、段のバイパス可能な部分３００の関数を必要としない場合、ショートカット回路３１４のみを通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。
【００７２】
[0085]グラフィックスデータの現在のセットが段のバイパス可能な部分３００によって実施される関数を必要としないが、グラフィックスデータの後続のセットが段のバイパス可能な部分３００の関数を必要とするとバイパスコントローラ３１０が決定した場合、バイパスコントローラ３１０は、段のバイパス可能な部分３００を通してグラフィックスデータのセット３０２をルーティングするように構成される。この場合、段のバイパス可能な部分３００は、そのままグラフィックスデータのセット３０２を渡すように命令されることになる。
【００７３】
[0086]本開示の別の例では、データバブルは、前のデータフローの特性に基づいて、グラフィックスデータの後続のセットに関係する命令または他の情報を考慮することなしに予測され得る。たとえば、バイパスコントローラ３１０は、グラフィックスデータの前のセットが段のバイパス可能な部分３００をバイパスしたか否かに基づいて、グラフィックスデータの現在のセットが段のバイパス可能な部分３００をバイパスし得るかどうかを予測するように構成され得る。たとえば、グラフィックスデータの（１つまたは複数の）前のセットが段のバイパス可能な部分３００をバイパスした場合、バイパスコントローラ３１０は、ショートカット回路３１４を通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。グラフィックスデータの（１つまたは複数の）前のセットが段のバイパス可能な部分３００をバイパスしなかった場合、バイパスコントローラ３１０は、段のバイパス可能な部分３００を通してグラフィックスデータのセット３０２をルーティングするようにマルチプレクサ３０８を制御することになる。
【００７４】
[0087]図８Ａおよび図８Ｂは、本開示による、例示的なデータバブル予測技法を示す概念図である。図８Ａに示されているように、バイパス可能でないグラフィックスデータ（すなわち、段のバイパス可能な部分をバイパスし得ないグラフィックスデータ）と、バイパス可能なグラフィックスデータ（すなわち、段のバイパス可能な部分をバイパスし得るグラフィックスデータ）との交互のシーケンスが、グラフィックスパイプラインを通して移動するようにスケジュールされる。
【００７５】
[0088]上記で説明したように、バイパスコントローラ３１０は、グラフィックスデータの現在のセットがショートカット回路３１４を通してルーティングされるべきか否かを決定するために命令の順方向検査を実施するように構成され得る。しかしながら、命令の利用可能性、またはグラフィックスデータの現在のセットがバイパス可能であるか否かを示すグラフィックスデータの他の属性は利用可能でないことがあり、時間および／または処理電力に関して、取得するのにコストがかかる得る。これは、グラフィックスパイプラインに入る直前に、グラフィックスデータの現在のセットが作成され得るからである。
【００７６】
[0089]したがって、本開示の別の例では、バイパスコントローラ３１０は、グラフィックスデータの前のセットが段のバイパス可能な部分をバイパスしたか否かに基づいて、グラフィックスデータの現在のセットが段のバイパス可能な部分をバイパスし得るか否かを予測するように構成され得る。
【００７７】
[0090]たとえば、図８に示されているように、バイパスコントローラ３１０は、段のバイパス可能な部分を通して（すなわち、ショートカット回路３１４を通さずに）バイパス可能なグラフィックスデータ８００の第１のセットをルーティングするように構成され得る。これは、パイプラインを横断したグラフィックスデータの前のセットがバイパス可能でないグラフィックスデータであったからである。上記で説明したように、段のバイパス可能な部分の各段は、パイプライン段内の現在のデータがバイパス可能であるか否かを示すためにバイパス信号３０６をシグナリングするように構成され得る。段のバイパス可能な部分内のすべてのグラフィックスデータがバイパス可能であるときのみ、バイパスコントローラ３１０は、バイパス可能なグラフィックスデータがショートカット回路３１４を使用することを可能にするように構成されることになるか。
【００７８】
[0091]この予測技法は、グラフィックスデータが段のバイパス可能な部分をいつバイパスし得るかを決定するために、前のグラフィックスデータの履歴データを使用する。たとえば、段のバイパス可能な部分がＮ個の段の長さである場合、バイパスコントローラ３１０は、すべてのＮ個の段が、段のバイパス可能な部分中のすべてのデータがバイパス可能であることを示すそれらがバイパス信号３０６をバイパスコントローラ３１０にシグナリングするまで、データが段のバイパス可能な部分をバイパスすることを可能にしないように構成され得る。図８Ｂは、最後の時間期間において、段のバイパス可能な部分中のすべてのデータがバイパス可能である一例を示している。次いで、後続のバイパス可能なグラフィックスデータがショートカット回路３１４にルーティングされ得る。本技法は、パイプラインが極めて低いコストにおいてバイパス可能であるか否かの予測を可能にする。
【００７９】
[0092]図１０は、本開示の技法による、例示的なバイパスコントローラ３１０を示すブロック図である。図１０に示されているように、１つの例示的なバイパスコントローラ３１０は、命令分析器３７０と、バブル決定ユニット３７２と、バイパス信号分析器３７４と、ルーティングユニット３７６とを含み得る。
【００８０】
[0093]命令分析器３７０は、グラフィックスデータの特定のセットが固定ハードウェアパイプラインの段のバイパス可能な部分によって実行される関数によって処理されることを必要とされるか否かを決定するために、グラフィックスデータの１つまたは複数のセットのための命令を分析するように構成され得る。命令分析器３７０は、グラフィックスデータの特定のセットが段のバイパス可能な部分による処理を必要とするか否かを示す指示をルーティングユニット３７６に与えるように構成され得る。命令分析器はまた、そのような指示をバブル決定ユニット３７２に与え得る。
【００８１】
[0094]バブル決定ユニット３７２は、グラフィックスデータの現在のセットの後続グラフィックスデータのセットのための命令を分析し、グラフィックスデータの現在のセットがショートカット回路３１４にルーティングされる場合、データバブルが発生することになるか否かを決定するように構成される。たとえば、グラフィックスデータの後続のセットに関係する命令がバイパス可能な段の使用を必要とする場合、バブル決定ユニット３７２は、グラフィックスの現在のセットがショートカット回路３１７にルーティングされる場合にデータバブルが発生し得ることをルーティング３７６に示し得る。同様に、グラフィックスデータの後続のセットに関係する命令がバイパス可能な段の使用を必要としない場合、バブル決定ユニット３７２は、グラフィックスの現在のセットがショートカット回路３１７にルーティングされる場合にデータバブルが発生しないことになることをルーティング３７６に示し得る。
【００８２】
[0095]他の例では、バブル決定ユニット３７２は、前のデータフローに基づいて予測アルゴリズムを使用してデータバブルが発生することになるか否かを決定するように構成され得る。このコンテキストでは、データフローは、バイパス可能な段を通して、またはバイパス可能な段を避けて処理されるグラフィックスデータの複数のセットを表し得る。バブル決定ユニット３７２は、バイパス可能な段を通して、またはバイパス可能な段を避けて処理されているデータの前の例を分析し、データバブルを生じたそのようなフローの特性を識別するように構成され得る。バブル決定ユニット３７２は、次いで、将来のデータフローが同じ特性を有する状況でのデータバブルの将来の発生を予測し、起こり得るデータバブルをルーティングユニット３７６に示し得る。
【００８３】
[0096]バイパス信号分析器３７４は、段のバイパス可能な部分３００からバイパス信号３０６ａ〜ｎを受信および分析するように構成される。この場合も、バイパス信号３０６ａ〜ｎは、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているか否かを示す。バイパス信号分析器３７４は、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているか否かの指示をルーティングユニット３７６に渡し得る。
【００８４】
[0097]ルーティングユニット３７６は、命令分析器３７０と、バブル決定ユニット３７２と、バイパス信号分析器３７４とによって与えられる１つまたは複数の基準に基づいて、グラフィックスデータの現在のセットを段のバイパス可能な部分３００またはショートカット回路３１４のうちの１つにルーティングするように構成される。この場合も、基準は、グラフィックスデータの現在のセットに関係する現在の命令が段のバイパス可能な部分３００によって実施される関数を必要とするかどうかの指示と、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているか否かの指示と、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングすることがデータバブルを生じることになるか否かの指示中とのうちの１つまたは複数を含み得る。図９〜図１２に、これらの基準に基づいて行われ得るルーティング決定の様々な例を示す。ルーティングが決定されると、ルーティングユニット３７６はグラフィックスデータの現在のセットを段のバイパス可能な部分３００またはショートカット回路３１４のうちの１つにルーティングするために信号をマルチプレクサ３０８に送る。
【００８５】
[0098]要約すれば、本開示は、グラフィックスデータを処理するように構成された装置（たとえば、ＧＰＵ１２）を提案する。本装置は、グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインを含み得る。固定ハードウェアパイプラインは、複数の段のバイパス可能な部分（たとえば、段のバイパス可能な部分３００）を含む複数の段を含み得る。複数の段のバイパス可能な部分は、１つまたは複数のバイパス可能な段を含み得る。
【００８６】
[0099]固定ハードウェアパイプラインは、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路（たとえば、ショートカット回路３１４）と、複数の段のバイパス可能な部分の前に配置されたコントローラ（たとえば、バイパスコントローラ３１０）と、コントローラが、グラフィックスデータの現在のセットをショートカット回路３１４または複数の段のバイパス可能な部分のうちの１つにルーティングするように構成された、をさらに含み得る。本開示の一例では、コントローラは、コントローラがグラフィックスデータの現在のセットをショートカット回路にルーティングする場合、複数の段のバイパス可能な部分への電力をオフにするように構成される。
【００８７】
[0100]図１１は、本開示の例示的な方法を示すフローチャートである。図１１の例では、バイパスコントローラ３１０は、グラフィックスデータの現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの現在のセットをルーティングするように構成される。バイパスコントローラ３１０は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とするかどうかを決定する（９００）ように構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（９０４）ように構成される。いいえの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングする（９０２）ように構成される。
【００８８】
[0101]図１２は、本開示の別の例示的な方法を示すフローチャートである。図１２の例では、段のバイパス可能な部分３００は、グラフィックスデータを記憶するように構成された（たとえば、ハードウェア論理ユニット３０４ａ〜ｎに対応する）１つまたは複数のレジスタを含む。１つまたは複数のレジスタは、１つまたは複数のレジスタ中のグラフィックスデータが段のバイパス可能な部分３００によって現在処理されているか否かを示す信号（たとえば、バイパス信号３０６ａ〜ｎ）をバイパスコントローラ３１０に送るように構成される。図１２の例ではさらに、バイパスコントローラ３１０は、グラフィックスデータの現在のセットに関係する命令と、１つまたは複数のレジスタによって送られた信号の両方に基づいて、グラフィックスデータの現在のセットをルーティングするように構成される。
【００８９】
[0102]バイパスコントローラ３１０は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とするかどうかを決定する（１０００）ように構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１００６）ように構成される。いいえの場合、バイパスコントローラは、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているかどうかを決定する（１００２）ようにさらに構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１００６）ように構成される。いいえの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングする（１００４）ように構成される。
【００９０】
[0103]図１３は、本開示の別の例示的な方法を示すフローチャートである。図１３の例では、バイパスコントローラ３１０は、グラフィックスデータの後続のセットが段のバイパス可能な部分３００によって処理されることになるかどうかを決定するようにさらに構成される。この例では、バイパスコントローラ３１０は、グラフィックスデータの現在のセットに関係する命令と、グラフィックスデータの後続のセットが段のバイパス可能な部分３００によって処理されることになるか否かの決定の両方に基づいて、グラフィックスデータの現在のセットをルーティングするように構成される。
【００９１】
[0104]バイパスコントローラ３１０は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とするかどうかを決定する（１１００）ように構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１１０６）ように構成される。いいえの場合、バイパスコントローラは、グラフィックス命令の後続のセットに関係する命令の分析を通して、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングすることがデータバブルを生じることになるかどうかを決定する（１１０２）ようにさらに構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１１０６）ように構成される。いいえの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングする（１１０４）ように構成される。
【００９２】
[0105]図１４は、本開示の別の例示的な方法を示すフローチャートである。図１４の例では、バイパスコントローラ３１０は、段のバイパス可能な部分３００の１つまたは複数のレジスタによって送られたグラフィックスデータバイパス信号の現在のセットに関係する命令のうちの３つすべてと、グラフィックスデータの後続のセットが段のバイパス可能な部分３００によって処理されることになるか否かの決定とに基づいて、グラフィックスデータの現在のセットをルーティングするように構成される。
【００９３】
[0106]バイパスコントローラ３１０は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分３００によって実施される関数を必要とするかどうかを決定する（１２００）ように構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１２０８）ように構成される。
【００９４】
[0107]いいえの場合、バイパスコントローラは、段のバイパス可能な部分３００がグラフィックスデータの前のセットを現在処理しているかどうかを決定する（１２０２）ようにさらに構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１２０８）ように構成される。
【００９５】
[0108]いいえの場合、バイパスコントローラは、グラフィックス命令の後続のセットに関係する命令の分析を通して、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングすることがデータバブルを生じることになるかどうかを決定する（１２０４）ようにさらに構成される。はいの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットを段のバイパス可能な部分３００にルーティングする（１２０８）ように構成される。いいえの場合、バイパスコントローラ３１０は、グラフィックスデータの現在のセットをショートカット回路３１４にルーティングする（１２０６）ように構成される。
【００９６】
[0109]１つまたは複数の例では、上記で説明した関数は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、関数は、１つまたは複数の命令またはコードとして非一時的コンピュータ可読媒体を備える製造品上に記憶され得る。コンピュータ可読媒体はコンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび／またはデータ構造を取り出すために、１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。本明細書で使用するディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）、およびＢｌｕ−ｒａｙ（登録商標）ディスク（disc）を含み、ここで、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【００９７】
[0110]コードは、１つまたは複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、あるいは他の等価な集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサによって実行され得る。さらに、いくつかの態様では、本明細書で説明した機能は、専用のハードウェアモジュールおよび／またはソフトウェアモジュール内に与えられ得る。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【００９８】
[0111]本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示した技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明した１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【００９９】
[0112]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
グラフィックスデータを処理するように構成された装置であって、前記装置は、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、
前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路と、
前記複数の段の前記バイパス可能な部分の前に配置されたコントローラと、前記コントローラが、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングするように構成された、
を備える、装置。
［Ｃ２］
前記コントローラは、前記コントローラがグラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングする場合、前記複数の段の前記バイパス可能な部分への電力をオフにするようにさらに構成された、Ｃ１に記載の装置。
［Ｃ３］
前記複数の段の前記バイパス可能な部分が１つまたは複数のバイパス可能な段を備える、Ｃ１に記載の装置。
［Ｃ４］
前記コントローラが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするように構成された、Ｃ１に記載の装置。
［Ｃ５］
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
Ｃ４に記載の装置。
［Ｃ６］
前記複数の段の前記バイパス可能な部分は、グラフィックスデータを記憶するように構成された１つまたは複数のレジスタを備え、前記１つまたは複数のレジスタは、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送るように構成された、Ｃ４に記載の装置。
［Ｃ７］
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
Ｃ６に記載の装置。
［Ｃ８］
前記コントローラが、グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの後続のセットのための命令を分析するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析と、前記１つまたは複数のレジスタからの前記信号とに基づいて、グラフィックスデータの前記現在のセットをルーティングするように構成された、
Ｃ６に記載の装置。
［Ｃ９］
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
Ｃ８に記載の装置。
［Ｃ１０］
前記コントローラは、グラフィックスデータの後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかの前記決定とに基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、
Ｃ４に記載の装置。
［Ｃ１１］
前記コントローラは、グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するように構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、グラフィックスデータの前記現在のセットをルーティングするように構成された、
Ｃ１０に記載の装置。
［Ｃ１２］
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
Ｃ１１に記載の装置。
［Ｃ１３］
グラフィックスデータを処理するための方法であって、前記方法は、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理することと、
前記複数の段の前記バイパス可能な部分の前に配置されたコントローラを用いて、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングすることと
を備える、方法。
［Ｃ１４］
グラフィックスデータの前記現在のセットが前記ショートカット回路にルーティングされる場合、前記複数の段の前記バイパス可能な部分への電力をオフにすること
をさらに備える、Ｃ１３に記載の方法。
［Ｃ１５］
前記複数の段の前記バイパス可能な部分が１つまたは複数のバイパス可能な段を備える、Ｃ１３に記載の方法。
［Ｃ１６］
グラフィックスデータの前記現在のセットをルーティングすることが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングすることを備える、Ｃ１３に記載の方法。
［Ｃ１７］
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、Ｃ１６に記載の方法。
［Ｃ１８］
前記複数の段の前記バイパス可能な部分が、グラフィックスデータを記憶するように構成された１つまたは複数のレジスタを備え、前記方法は、
前記１つまたは複数のレジスタから、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送ること
をさらに備える、Ｃ１６に記載の方法。
［Ｃ１９］
前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、Ｃ１８に記載の方法。
［Ｃ２０］
グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの後続のセットのための命令を分析することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析と、前記１つまたは複数のレジスタからの前記信号とに基づいて、グラフィックスデータの前記現在のセットをルーティングすることと
をさらに備える、Ｃ１８に記載の方法。
［Ｃ２１］
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記１つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、Ｃ２０に記載の方法。
［Ｃ２２］
グラフィックスデータの後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかの前記決定とに基づいて、グラフィックスデータの前記現在のセットをルーティングすることと
をさらに備える、Ｃ１６に記載の方法。
［Ｃ２３］
グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、前記現在のセットグラフィックスデータをルーティングすることと
をさらに備える、Ｃ２２に記載の方法。
［Ｃ２４］
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、Ｃ２３に記載の方法。
［Ｃ２５］
グラフィックスデータを処理するように構成された装置であって、前記装置は、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理するための手段と、
グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングするための手段と
を備える、装置。
［Ｃ２６］
グラフィックスデータの前記現在のセットをルーティングするための前記手段が、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするための手段を備える、Ｃ２５に記載の装置。
［Ｃ２７］
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするための手段と、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするための手段と
をさらに備える、Ｃ２６に記載の装置。
［Ｃ２８］
実行されたとき、グラフィックスデータを処理するように構成されたデバイスの１つまたは複数のプロセッサに、
グラフィックスデータの現在のセットに対して１つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理することと、
グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの１つに選択的にルーティングすることと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
［Ｃ２９］
前記１つまたは複数のプロセッサが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、Ｃ２８に記載のコンピュータ可読記憶媒体。
［Ｃ３０］
前記１つまたは複数のプロセッサは、
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
を行うようにさらに構成された、Ｃ２６に記載のコンピュータ可読記憶媒体。
【図１】
0006309696.tif 000002
【図２】
0006309696.tif 000003
【図３】
0006309696.tif 000004
【図４】
0006309696.tif 000005
【図５】
0006309696.tif 000006
【図６】
0006309696.tif 000007
【図７Ａ】
0006309696.tif 000008
【図７Ｂ】
0006309696.tif 000009
【図８Ａ】
0006309696.tif 000010
【図８Ｂ】
0006309696.tif 000011
【図９】
0006309696.tif 000012
【図１０】
0006309696.tif 000013
【図１１】
0006309696.tif 000014
【図１２】
0006309696.tif 000015
【図１３】
0006309696.tif 000016
【図１４】
0006309696.tif 000017