(58)【調査した分野】(Int.Cl.,DB名)
前記コントローラは、前記コントローラがグラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングする場合、前記複数の段の前記バイパス可能な部分への電力をオフにするようにさらに構成された、請求項1に記載の装置。
前記コントローラが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、請求項1に記載の装置。
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項4に記載の装置。
前記複数の段の前記バイパス可能な部分は、グラフィックスデータを記憶するように構成された1つまたは複数のレジスタを備え、前記1つまたは複数のレジスタは、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送るように構成された、請求項4に記載の装置。
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項6に記載の装置。
前記コントローラは、前記1つまたは複数のレジスタからの前記信号に基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、請求項6に記載の装置。
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項8に記載の装置。
前記コントローラは、グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、
請求項10に記載の装置。
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするようにさらに構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするようにさらに構成された、
請求項11に記載の装置。
グラフィックスデータの前記現在のセットをルーティングすることが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングすることを備える、請求項13に記載の方法。
前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、請求項18に記載の方法。
グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、前記現在のセットグラフィックスデータをルーティングすることと
をさらに備える、請求項22に記載の方法。
グラフィックスデータの前記現在のセットをルーティングするための前記手段が、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするための手段を備える、請求項25に記載の装置。
前記1つまたは複数のプロセッサが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、請求項28に記載の非一時的なコンピュータ可読記憶媒体。
【発明を実施するための形態】
【0011】
[0024]多くのグラフィックス処理技法は、固定ハードウェアパイプラインを使用して実行される。すなわち、関連する算術論理ユニット(ALU:arithmetic logic unit)をもつプログラマブル処理ユニットを使用するのではなく、1つまたは複数の関数は、一連の固定ハードウェア論理ユニットを使用して実行され得る。固定ハードウェアパイプラインには、固定ハードウェアパイプラインが実施する(1つまたは複数の)関数が変更され得ないので、プログラマブル処理ユニットのフレキシビリティがない。しかしながら、固定ハードウェアパイプラインは、概して、関数がプログラマブル処理ユニットを使用して実施され得るよりもはるかに高速に関数を実施する。
【0012】
[0025]ハードウェア論理ユニットを使用して実行されることを望まれる各関数または関数の組合せのために複数の固定パイプラインを有するのではなく、多くのグラフィックス処理ユニット(GPU)は、2つ以上の関数のためのハードウェア論理ユニットを含む固定ハードウェアパイプラインで構成される。この構成では、固定ハードウェアパイプラインの特定の段(すなわち、1つまたは複数のハードウェア論理ユニット)は、いくつかの関数を実施するために必要とされない(すなわち、バイパスされる)ことがある。これは、バイパスされた段が他の異なる関数のために使用されるからである。
【0013】
[0026]1つまたは複数のバイパス可能な段を含む固定ハードウェアパイプラインを実装するための現在の技法は、電力消費、チップ面積コスト、およびデータレイテンシに関して欠点を呈する。これらの欠点に鑑みて、本開示は、固定ハードウェアパイプラインを用いてグラフィックスデータを処理するための装置および技法について説明する。特に、本開示は、いずれかの固定ハードウェアパイプラインのバイパス可能な段に、またはバイパス可能な段を避けてグラフィックスデータをルーティングするショートカット回路にグラフィックスデータを選択的にルーティングするための装置および技法について説明する。
【0014】
[0027]本開示の1つまたは複数の例では、コントローラが、1つまたは複数の異なる基準に基づいてグラフィックスデータの現在のセットをルーティングするように構成され得る。基準は、グラフィックスデータの現在のセットのための現在の命令と、グラフィックスデータの後続のセットのための命令と、バイパス可能な段が他のグラフィックスデータを現在処理しているか否かの指示とを含み得る。このようにして、本開示の例示的な装置および技法は、バイパス可能な段を通して、またはバイパス可能な段を避けてグラフィックスデータを選択的にルーティングする一方、順序どおりの実行を維持し、さらにデータレイテンシ、電力消費およびチップ面積コストの改善を与え得る。
【0015】
[0028]
図1は、本開示の動的固定パイプラインおよび関連する技法を使用し得る例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、たとえば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、たとえば、セルラー電話または衛星電話などの携帯電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプーイヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、あるいはグラフィカルデータを処理および/または表示する任意の他のタイプのデバイスを備え得る。
【0016】
[0029]
図1の例に示されているように、コンピューティングデバイス2は、ユーザ入力インターフェース4と、中央処理ユニット(CPU)6と、メモリコントローラ8と、システムメモリ10と、GPU12と、グラフィックスメモリ14と、ディスプレイインターフェース16と、ディスプレイ18と、バス20および22とを含み得る。いくつかの例では、グラフィックスメモリ14が、GPU12とともに「オンチップ」であり得ることに留意されたい。いくつかの場合には、
図1に示されているCPU6、メモリコントローラ8、GPU12、およびグラフィックスメモリ14、および場合によってはディスプレイインターフェース16は、たとえば、システムオンチップ(SoC)設計におけるオンチップであり得る。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12、およびディスプレイインターフェース16は、バス20を使用して互いに通信し得る。メモリコントローラ8およびシステムメモリ10はまた、バス22を使用して互いと通信し得る。バス20、22は、第3世代バス(たとえば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(たとえばアドバンストグラフィックスポートバス、周辺構成要素相互接続(PCI)エクスプレスバス、またはアドバンストエクステンシブルインターフェース(AXI:Advanced eXentisible Interface)バス)、あるいは別のタイプのバスまたはデバイスの相互接続などの様々なバス構造のいずれかであり得る。
図1に示されている異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、コンピューティングデバイスの他の構成および/あるいは同じまたは異なる構成要素をもつ他のグラフィックス処理システムが、本開示の技法を実装するために使用され得ることに留意されたい。
【0017】
[0030]CPU6は、コンピューティングデバイス2の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるためにコンピューティングデバイス2に入力を与え得る。CPU6上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。さらに、CPU6は、GPU12の動作を制御するためのGPUドライバ7を実行し得る。ユーザは、ユーザインターフェース4を介してコンピューティングデバイス2に結合されたキーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、コンピューティングデバイス2に入力を与え得る。
【0018】
[0031]CPU6上で実行するソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを行わせるようにCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL:Open Graphics Library(商標登録))アプリケーションプログラミングインターフェース(API)、オープングラフィックスライブラリ組込みシステムズ(OpenGL ES:Open Graphics Library Embedded Systems)API、Direct3D API、X3D API、RenderMan API、WebGL API、あるいは任意の他の公開またはプロプライエタリ規格グラフィックスAPIなどのグラフィックスAPIに準拠し得る。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実施させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に(たとえば、GPUドライバ7を通して)発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブのリスト、たとえば、点、線、三角形、四角形、三角形ストリップなどを含み得る。
【0019】
[0032]他の例では、CPU6上で実行するソフトウェア命令は、GPU12に、GPUハードウェアの高度並列性質によって実行されるために適用可能なより一般的な計算を実施するための汎用シェーダを実行させ得る。そのような汎用アプリケーションは、いわゆる汎用グラフィックス処理ユニット(GPGPU:general-purpose graphics processing unit)であり得、OpenCLなどの汎用APIに準拠し得る。
【0020】
[0033]メモリコントローラ8は、システムメモリ10に入るおよびそれから出るデータの転送を可能にする。たとえば、メモリコントローラ8は、コンピューティングデバイス2中の構成要素にメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信し、システムメモリ10に関するそのようなコマンドをサービスし得る。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信可能に結合される。メモリコントローラ8は、CPU6とシステムメモリ10の両方とは別個である処理モジュールであるものとして
図1に示されているが、他の例では、メモリコントローラ8の機能の一部または全部は、CPU6とシステムメモリ10の一方または両方の上で実装され得る。
【0021】
[0034]システムメモリ10は、CPU6が実行するためにアクセス可能であるプログラムモジュールおよび/または命令、ならびに/あるいはCPU6上で実行しているプログラムによる使用のためのデータを記憶し得る。たとえば、システムメモリ10は、ディスプレイ18上にグラフィカルユーザインターフェース(GUI)を提示するために、CPU6によって使用されるウィンドウマネージャアプリケーションを記憶し得る。さらに、システムメモリ10は、ユーザアプリケーションと、アプリケーションに関連するアプリケーション表面データとを記憶し得る。システムメモリ10は、コンピューティングデバイス2の他の構成要素による使用のための情報、および/または他の構成要素によって生成される情報をさらに記憶し得る。たとえば、システムメモリ10は、GPU12のためのデバイスメモリとして働き得、GPU12によってそれに対して演算されるべきデータ、ならびにGPU12によって実施される演算から生じるデータを記憶し得る。たとえば、システムメモリ10は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。システムメモリ10は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
【0022】
[0035]GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ18にレンダリングするためにグラフィックス演算を実施するように構成され得る。したがって、CPU6上で実行しているソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6は、ディスプレイ18にレンダリングするためのグラフィックスコマンドおよびグラフィックスデータをGPU12に与え得る。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。GPU12は、いくつかの事例では、複雑なグラフィック関係演算の、CPU6よりも効率的な処理を行う高度並列構造を用いて構築され得る。たとえば、GPU12は、複数の頂点またはピクセル上で並列様式で演算するように構成された複数の処理要素を含み得る。GPU12の高度並列性質は、いくつかの事例では、GPU12が、CPU6を使用して直接ディスプレイ18にシーンを描画するよりも速く、グラフィックス画像(たとえば、GUI、ならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上に描画することを可能にし得る。
【0023】
[0036]以下でより詳細に説明するように、GPU12は、グラフィックスデータの現在のセットに対して1つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインし得る。本開示のコンテキストでは、グラフィックスデータのセットは、それに対して論理関数および/または数学関数が実施され得るデータの1つまたは複数の値である。固定ハードウェアパイプラインは、複数の段のバイパス可能な部分を含む複数の段を含み得る。GPU12は、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路と、複数の段のバイパス可能な部分の前に配置されたコントローラとをさらに含み得る。コントローラは、グラフィックスデータの現在のセットをショートカット回路または複数の段のバイパス可能な部分のうちの1つに選択的にルーティングするように構成され得る。
【0024】
[0037]GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに組み込まれ得る。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード中のポート中に設置されたグラフィックスカード上に存在し得るか、または場合によっては、コンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれ得る。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、あるいは他の等価な集積またはディスクリート論理回路など、1つまたは複数のプロセッサを含み得る。
【0025】
[0038]GPU12はグラフィックスメモリ14に直接結合され得る。したがって、GPU12は、バス20を使用することなしに、グラフィックスメモリ14からデータを読み取り、グラフィックスメモリ14にデータを書き込み得る。言い換えれば、GPU12は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルに処理し得る。これは、GPU12が、重いバストラフィックを経験し得る、バス20を介したデータの読取りおよび書込みを行う必要をなくすことによって、GPU12がより効率的な方法で動作することを可能にする。しかしながら、いくつかの事例では、GPU12は、別個のメモリを含まないことがあるが、代わりに、バス20を介してシステムメモリ10を利用し得る。グラフィックスメモリ14は、たとえば、RAM、SRAM、DRAM、EPROM、EEPROM、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
【0026】
[0039]CPU6および/またはGPU12は、レンダリングされた画像データをフレームバッファ15に記憶し得る。フレームバッファ15は、独立したメモリであり得るか、またはシステムメモリ10内に割り振られ得る。ディスプレイインターフェース16は、フレームバッファ15からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ18を構成し得る。一部の例では、ディスプレイインターフェース16は、フレームバッファから取り出されたデジタル値を、ディスプレイ18によって消費可能なアナログ信号に変換するように構成されたデジタルアナログ変換器(DAC)を含み得る。他の例では、ディスプレイインターフェース16は、処理のために、デジタル値をディスプレイ18に直接パスし得る。ディスプレイ18は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、有機LED(OLED)ディスプレイなどの発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ18は、コンピューティングデバイス2内に組み込まれ得る。たとえば、ディスプレイ18は携帯電話のスクリーンであり得る。代替的に、ディスプレイ18は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ18は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【0027】
[0040]
図2は、
図1のCPU6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。CPU6は、その各々がCPU6上で実行する1つまたは複数のソフトウェアアプリケーションまたはサービスであり得る、少なくとも1つのソフトウェアアプリケーション24、グラフィックスAPI26、およびGPUドライバ7を含み得る。GPU12は、グラフィックス処理コマンドを実行するためにともに動作する複数のグラフィックス処理段を含むグラフィックス処理パイプライン30を含み得る。GPU12は、ビニングレンダリングモードと直接レンダリングモードとを含む様々なレンダリングモードでグラフィックス処理パイプライン30を実行するように構成され得る。
図2に示されているように、グラフィックス処理パイプライン30は、コマンドエンジン32と、ジオメトリ処理段34と、ラスタ化段36と、ピクセル処理パイプライン38とを含み得る。ピクセル処理パイプライン38はテクスチャエンジン39を含み得る。グラフィックス処理パイプライン30中の構成要素の各々は、固定関数構成要素、プログラマブル構成要素として(たとえば、プログラマブルシェーダユニット上で実行しているシェーダプログラムの一部として)、または固定関数とプログラマブル構成要素との組合せとして実装され得る。CPU6およびGPU12にとって利用可能なメモリは、システムメモリ10とフレームバッファ15とを含み得る。フレームバッファ15はシステムメモリ10の一部であり得るか、またはシステムメモリ10とは別個であり得る。フレームバッファ15は、レンダリングされた画像データを記憶し得る。
【0028】
[0041]ソフトウェアアプリケーション24は、GPU12の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション24は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングまたは芸術的アプリケーションのためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、あるいはGPUを利用し得る別のタイプのソフトウェアアプリケーションであり得る。
【0029】
[0042]ソフトウェアアプリケーション24は、GPU12に、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするように命令する1つまたは複数の描画命令を含み得る。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、GUIにおいて使用される複数のウィンドウ処理表面の全部または一部をまとめて定義し得る。さらなる例では、描画命令は、アプリケーションによって定義されるモデル空間または世界空間内に1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンの全部または一部をまとめて定義し得る。
【0030】
[0043]ソフトウェアアプリケーション24は、1つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための1つまたは複数のコマンドをGPU12に発行するために、グラフィックスAPI26を介してGPUドライバ7を呼び出し得る。たとえば、ソフトウェアアプリケーション24は、プリミティブ定義をGPU12に与えるために、グラフィックスAPI26を介してGPUドライバ7を呼び出し得る。いくつかの事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、長方形、三角形ファン、三角形ストリップなどのリストの形式でGPU12に与えられ得る。プリミティブ定義は、レンダリングされるべきプリミティブに関連する1つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、各頂点についての位置座標を含み、いくつかの事例では、頂点に関連する他の属性、たとえば、色座標、法線ベクトル、およびテクスチャ座標などを含み得る。
【0031】
[0044]プリミティブ定義はまた、プリミティブタイプ情報(たとえば、三角形、長方形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含み得る。ソフトウェアアプリケーション24によってGPUドライバ7に発行された命令に基づいて、GPUドライバ7は、プリミティブをレンダリングするためにGPU12が実施すべき1つまたは複数の演算を指定する1つまたは複数のコマンドを構築し得る。GPU12がCPU6からコマンドを受信するとき、グラフィックス処理パイプライン30はコマンドを復号し、コマンド中で指定された演算を実施するためにグラフィックス処理パイプライン30内で1つまたは複数の処理要素を構成する。指定された演算を実施した後、グラフィックス処理パイプライン30は、レンダリングされたデータを、ディスプレイデバイスに関連するフレームバッファ15に出力する。グラフィックス処理パイプライン30は、ビンニングレンダリングモードと直接レンダリングモードとを含む複数の異なるレンダリングモードのうちの1つで実行するように構成され得る。
【0032】
[0045]GPUドライバ7は、1つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムを、GPU12内に含まれている1つまたは複数のプログラマブルシェーダユニット上にダウンロードするようにさらに構成され得る。シェーダプログラムは、たとえば、OpenGLシェーディング言語(GLSL)、ハイレベルシェーディング言語(HLSL)、グラフィックスのためのC(Cg)シェーディング言語など、ハイレベルシェーディング言語で書かれ得る。コンパイルされたシェーダプログラムは、GPU12内のプログラマブルシェーダユニットの動作を制御する1つまたは複数の命令を含み得る。たとえば、シェーダプログラムは頂点シェーダプログラムおよび/またはピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたは統合シェーダユニットの実行を制御し、頂点ごとの1つまたは複数の演算を指定する命令を含み得る。ピクセルシェーダプログラムは、プログラマブルピクセルシェーダユニットまたは統合シェーダユニットの実行を制御するピクセルシェーダプログラムを含み、ピクセルごとの1つまたは複数の演算を指定する命令を含み得る。
【0033】
[0046]グラフィックス処理パイプライン30は、GPUドライバ7を介して、CPU6から1つまたは複数のグラフィックス処理コマンドを受信し、表示可能なグラフィックス画像を生成するためにグラフィックス処理コマンドを実行するように構成され得る。上記で説明したように、グラフィックス処理パイプライン30は、グラフィックス処理コマンドを実行するためにともに動作する複数の段を含む。しかしながら、そのような段は、必ずしも別個のハードウェアブロック中で実装される必要がないことに留意されたい。たとえば、ジオメトリ処理段34およびピクセル処理パイプライン38の一部は、統合シェーダユニットの一部として実装され得る。この場合も、グラフィックス処理パイプライン30は、ビニングレンダリングモードと直接レンダリングモードとを含む複数の異なるレンダリングモードのうちの1つで実行するように構成され得る。
【0034】
[0047]コマンドエンジン32は、グラフィックス処理コマンドを受信し、グラフィックス処理コマンドを行うための様々な演算を実施するようにグラフィックス処理パイプライン30内の残りの処理段を構成し得る。グラフィックス処理コマンドは、たとえば、描画コマンドおよびグラフィックス状態コマンドを含み得る。描画コマンドは、1つまたは複数の頂点のための位置座標を指定し、いくつかの事例では、たとえば、色座標、法線ベクトル、テクスチャ座標、およびフォグ座標など、頂点の各々に関連する他の属性値を指定する頂点仕様コマンドを含み得る。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、ライティングコマンド(lighting command)などを含み得る。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプ、および/またはプリミティブを形成するためにどのように頂点が組み合わせられるかを指定し得る。変換コマンドは、頂点上で実施すべき変換のタイプを指定し得る。ライティングコマンドは、グラフィックスシーン内の異なる光のタイプ、方向および/または配置を指定し得る。コマンドエンジン32は、ジオメトリ処理段34に、1つまたは複数の受信コマンドに関連する頂点および/またはプリミティブに関してジオメトリ処理を実施させ得る。
【0035】
[0048]ジオメトリ処理段34は、ラスタ化段36のためのプリミティブデータを生成するために、1つまたは複数の頂点上で、頂点ごとの演算および/またはプリミティブセットアップ演算を実施し得る。各頂点は、たとえば、位置座標、色値、法線ベクトル、およびテクスチャ座標などの属性のセットに関連し得る。ジオメトリ処理段34は、頂点ごとの様々な演算に従って、それらの属性のうちの1つまたは複数を変更する。たとえば、ジオメトリ処理段34は、変更された頂点位置座標を生成するために、頂点位置座標上で1つまたは複数の変換を実施し得る。ジオメトリ処理段34は、変更された頂点位置座標を生成するために、たとえば、モデリング変換、視野変換(viewing transformation)、投影変換、ModelView変換、ModelViewProjection変換、ビューポート変換(viewport transformation)および深度レンジスケーリング変換のうちの1つまたは複数を頂点位置座標に適用し得る。いくつかの事例では、頂点位置座標はモデル空間座標であり得、変更された頂点位置座標はスクリーン空間座標であり得る。スクリーン空間座標は、モデリング変換、視野変換、投影変換およびビューポート変換の適用の後に取得され得る。いくつかの事例では、ジオメトリ処理段34はまた、頂点のための変更された色座標を生成するために、頂点上で頂点ごとのライティング演算を実施し得る。ジオメトリ処理段34はまた、たとえば、正規変換、正規の正規化演算、ビューボリュームクリッピング、均一分割および/またはバックフェースカリング演算を含む他の演算を実施し得る。
【0036】
[0049]ジオメトリ処理段34は、ラスタライズされるべきプリミティブを定義する1つまたは複数の変更された頂点のセットを含むプリミティブデータ、ならびにプリミティブを形成するためにどのように頂点を組み合わせるかを指定するデータを生成し得る。変更された頂点の各々は、たとえば、変更された頂点位置座標、および頂点に関連する処理された頂点属性値を含み得る。プリミティブデータは、グラフィックス処理パイプライン30のさらなる段によってラスタライズされるべきプリミティブにまとめて対応し得る。概念的に、各頂点は、プリミティブの2つのエッジが交わるプリミティブのコーナーに対応し得る。ジオメトリ処理段34は、さらなる処理のために、プリミティブデータをラスタ化段36に与え得る。
【0037】
[0050]いくつかの事例では、ジオメトリ処理段34の全部または一部は、1つまたは複数のシェーダユニット上で実行している1つまたは複数のシェーダプログラムによって実装され得る。たとえば、ジオメトリ処理段34は、そのような例では、頂点シェーダ、ジオメトリシェーダ、またはそれらの任意の組合せによって実装され得る。他の例では、ジオメトリ処理段34は、固定関数ハードウェア処理パイプラインとして、あるいは固定関数ハードウェアと1つまたは複数のシェーダユニット上で実行している1つまたは複数のシェーダプログラムとの組合せとして実装され得る。
【0038】
[0051]ラスタ化段36は、ラスタライズされるべきプリミティブを表すプリミティブデータをジオメトリ処理段34から受信し、プリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソースピクセルを生成するように構成される。いくつかの事例では、ラスタ化段36は、ラスタライズされるべきプリミティブによってどのスクリーンピクセルロケーションがカバーされるかを決定し、プリミティブによってカバーされると決定された各スクリーンピクセルロケーションのためのソースピクセルを生成し得る。ラスタ化段36は、たとえば、エッジウォーキング(edge-walking)技法など、当業者に知られている技法を使用すること、エッジ式を評価することなどによって、どのスクリーンピクセルロケーションがプリミティブによってカバーされるかを決定し得る。ラスタ化段36は、さらなる処理のために、得られたソースピクセルをピクセル処理パイプライン38に与え得る。
【0039】
[0052]ラスタ化段36によって生成されたソースピクセルは、スクリーンピクセルロケーション、たとえば、目標ピクセルに対応し、1つまたは複数の色属性に関連し得る。特定のラスタライズされたプリミティブのために生成されたソースピクセルのすべては、ラスタライズされたプリミティブに関連すると言われ得る。ラスタ化段36によって、プリミティブによってカバーされるべきと決定されたピクセルは、概念的に、プリミティブの頂点を表すピクセルと、プリミティブのエッジを表すピクセルと、プリミティブの内部を表すピクセルとを含み得る。
【0040】
[0053]ピクセル処理パイプライン38は、ラスタライズされたプリミティブに関連するソースピクセルを受信し、ソースピクセル上で1つまたは複数のピクセルごとの演算を実施するように構成される。ピクセル処理パイプライン38によって実施され得るピクセルごとの演算は、たとえば、アルファテスト、テクスチャマッピング、色計算、ピクセルシェーディング、ピクセルごとのライティング、フォグ処理、混合、ピクセルオーナーシップテスト、ソースアルファテスト、ステンシルテスト、深度テスト、シザーステスト、および/またはスティップリング演算を含む。さらに、ピクセル処理パイプライン38は、ピクセルごとの1つまたは複数の演算を実施するために1つまたは複数のピクセルシェーダプログラムを実行し得る。ピクセル処理パイプライン38によって生成された得られたデータは、本明細書では目標ピクセルデータと呼ばれ、フレームバッファ15に記憶され得る。目標ピクセルデータは、処理されたソースピクセルと同じ表示ロケーションを有する、フレームバッファ15中の目標ピクセルに関連し得る。目標ピクセルデータは、たとえば、色値、目標アルファ値、深度値などのデータを含み得る。
【0041】
[0054]テクスチャエンジン39は、ピクセル処理パイプライン38の一部として含まれ得る。テクスチャエンジン39は、テクスチャ(テクセル)をピクセルに適用するように設計された、プログラマブルであるとともに固定である関数ハードウェアを含み得る。テクスチャエンジン39は、テクスチャフィルタ処理を実施するための専用ハードウェアを含み得、それによって、1つまたは複数のテクセル値は、最終テクスチャマッピングされたピクセルを生成するために、1つまたは複数のピクセル値によって乗算され、累算される。以下でより詳細に説明するように、本開示は、テクスチャエンジン39が単一のシェーダ命令を使用してLCHOFを実施するために使用され得るようにテクスチャエンジン39への変更を提案する。
【0042】
[0055]フレームバッファ15は、GPU12のための目標ピクセルを記憶する。各目標ピクセルは、一意なスクリーンピクセルロケーションに関連し得る。いくつかの事例では、フレームバッファ15は、各目標ピクセルについての色成分と目標アルファ値とを記憶し得る。たとえば、フレームバッファ15は、各ピクセルについての赤、緑、青、アルファ(RGBA)成分を記憶し得、ただし、「RGB」成分は色値に対応し、「A」成分は目標アルファ値に対応する。フレームバッファ15およびシステムメモリ10は、別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ15はシステムメモリ10の一部であり得る。
【0043】
[0056]上記で説明したように、GPU12のグラフィックス処理パイプライン30は、グラフィックスデータに対して1つまたは複数のプロセスを実行するように構成された1つまたは複数の固定ハードウェアパイプラインを含み得る。固定ハードウェアパイプラインを利用し得るグラフィックス処理パイプライン30の例プロセスは、(たとえば、テクスチャエンジン39中で実施される)テクスチャマッピング、(たとえば、ジオメトリ処理段34または別個のテッセレーションユニット中で実施される)テッセレーション、(たとえば、ラスタ化段36中で実施される)三角形ラスタ化、(たとえば、テクスチャエンジン39中で実施される)ピクセルブレンディングを含む。テクスチャマッピング、テッセレーション、三角形ラスタ化、およびピクセルブレンディングは、固定ハードウェアパイプラインを使用して実行され得るグラフィックスプロセスの例にすぎない。本開示の技法は、実施されている実際のプロセスにかかわらず、概して固定ハードウェアパイプラインとともに利用され得る。
【0044】
[0057]
図3は、例示的な固定ハードウェアパイプラインを示す概念図である。固定ハードウェアパイプライン100は、グラフィックスデータのセットに対して関数(関数A)を実行するように構成される。この場合も、本開示のコンテキストでは、グラフィックスデータのセットは、それに対して論理関数および/または数学関数が実施され得るデータの1つまたは複数の値である。たとえば、固定ハードウェアパイプライン100(または本開示で説明する他の固定ハードウェアパイプライン)は、グラフィックスデータの1つまたは複数の値に対して並列に関数を実施するように構成され得る。固定ハードウェアパイプライン100は、グラフィックスデータに対して関数を実施する(すなわち、1つまたは複数の論理関数を実施する)ためのハードウェア論理ユニットを含む複数の段と、グラフィックスデータに対して実施された関数の結果を記憶するように構成された1つまたは複数のレジスタとを含み得る。
図3に示されているように、固定ハードウェアパイプライン100は、ハードウェア論理ユニット102aおよび102bの第1の段と、ハードウェア論理ユニット103a、103b、および103cの第2の段とを含む。固定ハードウェアパイプライン100はまた、グラフィックスデータに対して論理関数を実施するハードウェア論理ユニット102a〜bおよび103a〜cの中間結果を記憶するように構成されたレジスタ101a〜fを含む。
【0045】
[0058]固定ハードウェアパイプライン110は、グラフィックスデータのセットに対して異なる関数(すなわち、関数Aとは異なる関数B)を実行するように構成される。
図3に示されているように、固定ハードウェアパイプライン110は、ハードウェア論理ユニット112aおよび112bの第1の段と、ハードウェア論理ユニット113aおよび113bの第2の段とを含む。固定ハードウェアパイプライン110はまた、グラフィックスデータに対して論理関数を実施するハードウェア論理ユニット112a〜bおよび113a〜bの中間結果を記憶するように構成されたレジスタ111a〜eを含む。
【0046】
[0059]
図3に示されているように、固定ハードウェアパイプライン100のハードウェア論理ユニット102a〜bは、固定パイプライン110のハードウェア論理ユニット112a〜bと同じ関数を実施する。関数AおよびBをそれぞれ実施するために2つの別個の固定ハードウェアパイプライン100および110を有することは、固定関数パイプラインが、GPU上に実装するためにかなりの量のスペースをしばしば必要とするので、チップ面積に関して望ましくない、および/または費用がかかり得る。概して、N個の異なる関数があり得、N個の別個の固定パイプラインを有することは電力消費およびチップ面積を非常に増加させ得る。
【0047】
[0060]したがって、いくつかの例では、GPU(たとえば、GPU12)は、図示のように、関数Aと関数Bの両方を実施するのに必要なハードウェア論理ユニットを含む単一の固定ハードウェアパイプライン120を含むように設計され得る。ある意味では、関数Aのための固定ハードウェアパイプラインと関数Bのための固定ハードウェアパイプラインとは、マージされている。しかしながら、固定ハードウェアパイプライン120を使用して関数Aを実施するために、ハードウェア論理ユニット113a〜bに対応するハードウェアパイプライン120の段の一部は必要とされないことがあり、代わりに何らかの方法でバイパスされ得る。同様に、固定ハードウェアパイプライン120を使用して関数Bを実施するために、ハードウェア論理ユニット103a〜cを含む段の一部は必要とされないことがあり、代わりに何らかの方法でバイパスされ得る。
【0048】
[0061]特定の関数(すなわち、固定ハードウェアパイプラインの特定の段を必要としない特定の関数)を実施するために固定ハードウェアパイプラインの1つまたは複数の段をバイパスするための従来の技法は、実装のために必要とされる大きいチップ面積と、固定ハードウェアパイプラインにわたる高いデータレイテンシ(すなわち、データがパイプラインを通って移動するために要する時間)と、電力消費の大きいおよび/または望ましくない量とに関して欠点を呈する。
【0049】
[0062]たとえば、固定パイプライン120を使用して関数Aを実施するために、グラフィックスデータのセットは、バイパスされない場合、ハードウェア論理ユニット113a〜bが無効にされ、グラフィックスのセットに対して関数を実施しない(すなわち、グラフィックスデータのセットがハードウェア論理ユニット113a〜bを通して受け渡される)にもかかわらず、依然として、ハードウェア論理ユニット113a〜bに関連するレジスタを通過する。同様に、固定パイプライン120を使用して関数Bを実施するために、グラフィックスデータのセットは、バイパスされない場合、ハードウェア論理ユニット103a〜cが無効にされ、グラフィックスのセットに対して関数を実施しないにもかかわらず、依然として、段103a〜cに関連するレジスタを通過する。すなわち、関数Aまたは関数Bを実施するために、固定ハードウェアパイプライン120を使用することは、固定ハードウェアパイプラインの必要とされない部分を通してデータを移動させるために余分のクロックサイクルを必要とする。したがって、固定ハードウェアパイプライン120は、単一用途のパイプライン(たとえば、固定ハードウェアパイプライン100および110)のために必要とされるハードウェアの量を制限する一方、単一用途のパイプラインに対して、パイプラインの段のすべてを使用するとは限らない関数についてレイテンシの増加(すなわち、パイプラインを通って移動する時間の増加)をもたらす。
【0050】
[0063]
図4に、
図3のマージされた固定ハードウェアパイプライン120に関連するレイテンシ問題を制限するように構成された固定ハードウェアパイプラインの一例を示す。
図4の例では、ハードウェア論理ユニット210は、グラフィックスデータのセットに対して関数Cを実施するように構成される。同様に、ハードウェア論理ユニット220は、グラフィックスのセットに対して関数Dを実施するように構成される。関数Cと関数Dとを実施するために必要とされるハードウェア論理ユニットは、ハードウェア論理ユニット230を除いて同等である(すなわち、ユニット210および220は、ユニット220が含まないユニット230をユニット210が含むことを除いて同等である)。ある意味では、ハードウェア論理ユニット230は、関数Dのためにバイパス可能である。
【0051】
[0064]図を簡単にするために、ハードウェア論理ユニット210および220の矩形ブロックの各々は、ハードウェア論理ユニットと、グラフィックスデータのセットに対して動作する特定のハードウェア論理ユニットの結果を記憶するために使用される対応するレジスタの両方を表す。この規則は、本明細書中の各後続の図について使用されることになる。
【0052】
[0065]
図3の例の場合のように、関数Cのためのパイプラインと関数Dのためのパイプラインとをマージし、関数Cを処理することについて得られた増加したレイテンシをもたらすのではなく、
図4の例は、関数Cと関数Dとをそれぞれ実施するために2つの別個のパイプラインを維持する。すなわち、グラフィックスデータのセットはマルチプレクサ240において受信され、マルチプレクサ240は、グラフィックスデータに対して(たとえば、ソフトウェア命令によって制御されるように)実施されることが望まれる演算に応じて、グラフィックスデータのセットを関数Cパイプラインまたは関数Dパイプラインのうちの1つにルーティングするように構成され得る。固定ハードウェアパイプラインの関数C部分または関数D部分のいずれかを通過すると、グラフィックスデータのセットはデマルチプレクサ250を通過し、固定ハードウェアパイプラインの別の部分に(たとえば、いずれかの別のバイパス可能な部分に、またはバイパス可能でない部分に)フォワーディングされる。
【0053】
[0066]したがって、
図4の例は、
図3の例における固定ハードウェアパイプライン120のレイテンシ欠点のいずれをも有しない。しかしながら、
図4の例の固定ハードウェアパイプラインは、関数Dのために必要とされる余分のハードウェア論理ユニットを実装するためにチップ(たとえば、GPU12)上のさらなる面積を必要とする。さらに、関数Cおよび関数Dのために2つの別個の固定ハードウェアパイプラインを有することは、パイプラインの電力消費を増加させ得る。
【0054】
[0067]
図5に、
図3および
図4の固定ハードウェアパイプラインの電力消費欠点を制限するように構成された固定ハードウェアパイプラインの別の例を示す。
図5の例では、固定ハードウェアパイプライン255は、使用していないときに(すなわち、バイパスされたときに)完全に電源を切断され、したがって、電力消費を減らし得るバイパス可能な段260を含み得る。バイパス可能な段260によって実施される関数がグラフィックスデータのセットに対して実施されるべきでない場合、グラフィックスデータのそのセットは代替データ経路270を通してルーティングされる。代替データ経路270は、バイパス可能な段260中の段の数に等しい数のレジスタを含む。このようにして、グラフィックスデータのセットは、グラフィックスデータのセットがバイパス可能な段260を通してクロック制御された場合と同じ時間量で、代替データ経路270を通してクロック制御され得る。
図5の例は依然としてレイテンシ問題を呈するが、順序どおりの実行は維持される。すなわち、バイパス可能な段260をバイパスするグラフィックスデータのセットは、バイパス可能な段260を利用する前のデータの前に、固定ハードウェアパイプライン255の後続の段に達しない。
【0055】
[0068]上記の説明に示されているように、GPU中の固定ハードウェアパイプラインを実施するための様々な技法は、データレイテンシと、チップ面積コストと、電力消費とに関して欠点を呈する。これらの欠点に鑑みて、本開示は、グラフィックスデータに対して1つまたは複数の関数を実施するための動的固定ハードウェアパイプラインを実行するための装置および技法について説明する。本開示の様々な例では、動的固定ハードウェアパイプラインは、未使用パイプライン段(すなわち、バイパス可能な段)を選択的にスキップするように構成され得る。特に、本開示の例示的な技法は、固定ハードウェアパイプラインの1つまたは複数のバイパス可能な段を通してグラフィックスデータのセットを選択的にルーティングするか、またはバイパス可能な段を避けてショートカット回路を通してグラフィックスデータのセットをルーティングするために、バイパスコントローラを使用する。
【0056】
[0069]本開示の様々な例では、バイパスコントローラは、1つまたは複数の異なる基準に基づいてグラフィックスデータの現在のセットをルーティングするように構成され得る。基準は、グラフィックスデータの現在のセットのための現在の命令と、グラフィックスデータの後続のセットのための命令と、バイパス可能な段が他のグラフィックスデータを現在処理しているか否かの指示とを含み得る。このようにして、以下でより詳細に説明するように、本開示の例示的な装置および技法は、バイパス可能な段を通して、またはバイパス可能な段を避けてグラフィックスデータを選択的にルーティングする一方、順序どおりの実行を維持し、データレイテンシ、電力消費およびチップ面積コストの改善を与え得る。
【0057】
[0070]
図6は、本開示の技法による、固定ハードウェアパイプラインの一例を示すブロック図である。
図6は、GPU12中で実装され得るより大きい固定ハードウェアパイプラインの段のバイパス可能な部分300を示している。すなわち、グラフィックスデータのセット302は、より大きい固定ハードウェアパイプラインの前の部分から段のバイパス可能な部分300に入り、グラフィックスデータのセット302は、段のバイパス可能な部分300を抜けて、より大きい固定ハードウェアパイプラインの後続部分に続く。段のバイパス可能な部分300は、グラフィックスデータのセット302に対して特定の関数を実施するように構成されたハードウェア論理ユニット304a〜nを含む。ハードウェア論理ユニット304a〜nの各々は、
図6に示されているように、グラフィックスデータのセット302に対して論理関数および/または数学関数を実施するように構成された1つまたは複数のハードウェア論理ユニットと、グラフィックスデータのセット302に適用される論理関数および/または数学関数の中間結果を記憶するためのレジスタの両方を含む。
【0058】
[0071]段のバイパス可能な部分300は、より大きい固定ハードウェアパイプライン中のバイパス可能な段の1つの可能な部分を表すことを理解されたい。固定ハードウェアパイプラインは複数のバイパス可能な部分を含み得、その各々は、それら自体のバイパスコントローラをもつ。
図9は、本開示の技法による、固定ハードウェアパイプラインの別の例を示すブロック図である。
図9に見られるように、固定ハードウェアパイプラインは、段の第1のバイパス可能な部分352と、段の固定部分354(すなわち、バイパス可能でない段)と、バイパス可能な段の第2の部分356とを含み得る。段のバイパス可能な部分を1つの固定ハードウェアパイプラインにマージすることによって、チップ面積は、バイパス可能な段がない別個の固定ハードウェアパイプラインを使用する実装形態と比較して節約され得る。
【0059】
[0072]段のバイパス可能な部分300によって実施される関数は、グラフィックスデータのあらゆるセットに対して実施される必要があるとは限らない。したがって、段のバイパス可能な部分300は、グラフィックスデータの特定のセットのためにバイパスされ得る。本開示の技法によれば、グラフィックスデータのセット302は、段のバイパス可能な部分300を通してルーティングされるか、またはショートカット回路314を通してグラフィックスデータのセット302をルーティングすることによって段のバイパス可能な部分300を避けてルーティングされるかのいずれかであり得る。マルチプレクサ308は、グラフィックスデータのセット302を段のバイパス可能な部分300またはショートカット回路314のうちの1つに選択的にルーティングするように構成され得る。特に、段のバイパス可能な部分300の前に配置されたバイパスコントローラ310は、グラフィックスデータのセット302をルーティングするためにマルチプレクサ308の動作を制御するように構成される。グラフィックスデータのセット302がどこにルーティングされるかにかかわらず、グラフィックスデータのセット302は、より大きい固定ハードウェアパイプラインの別の部分に、または場合によってはパイプラインの出力としてグラフィックスデータのセット302をフォワーディングするデマルチプレクサ312に最終的に到着する。
【0060】
[0073]バイパスコントローラ310は、グラフィックスデータのセット302をどこにルーティングすべきかを決定するために1つまたは複数の基準を使用するように構成され得る。1つの例示的な基準は、グラフィックスデータのセット302に対応する命令である。すなわち、グラフィックスデータのセット302を処理することに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とする場合、バイパスコントローラ310は、段のバイパス可能な部分300を通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。グラフィックスデータのセット302を処理することに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要としない場合、バイパスコントローラ310は、ショートカット回路314を通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。ショートカット回路314は、段のバイパス可能な部分300を避けた直接接続であり、同等の数の段を通してクロック制御される必要がないので、段のバイパス可能な部分300をバイパスするときに経験されるデータレイテンシは、大幅に低減される。すなわち、より少数のクロックサイクルが、バイパスされた段を避けてグラフィックスデータのセットを移動させるために必要とされる。
【0061】
[0074]さらに、バイパスコントローラ310(またはGPU12の別のハードウェアユニット)は、ショートカット回路314を通してグラフィックスデータのセット302をルーティングすることが決定されたとき、段のバイパス可能な部分300の電源を切断するようにさらに構成され得る。このようにして、電力消費は低減され得る。
【0062】
[0075]本開示の別の例では、バイパスコントローラ310は、グラフィックスデータのセット302のためのルーティングを決定するために追加の基準を利用するように構成され得る。すなわち、グラフィックスデータのセット302に関係する命令のみに基づいてグラフィックスデータのセット302をルーティングするのではなく、バイパスコントローラ310はまた、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているか否かを考慮し得る。この点について、ハードウェア論理ユニット304a〜nは、ハードウェア論理ユニット304a〜nがグラフィックスデータを現在処理しているか否かを示すバイパス信号306a〜nをバイパスコントローラ310に送信するように構成され得る。本開示の一例では、バイパス信号306a〜nは、ハードウェア論理ユニット306a〜nに関連するレジスタによって生成され得る。事実上、レジスタは、グラフィックスデータの前のセットのためのデータがレジスタに現在記憶されているか否か、したがって段のバイパス可能な部分300によって依然として処理されているか否かを示すバイパス信号306a〜nを生成する追加のハードウェアを含み得る。
【0063】
[0076]上記で説明したように、バイパスコントローラ310は、段のバイパス可能な部分300のステータスを決定するためにバイパス信号306a〜nを利用し得る。別の例では、バイパスコントローラ310は、グラフィックスデータの前のセットに関係する命令を分析し、それらの命令が、グラフィックスデータの前のセットが段のバイパス可能な部分300によって処理されることを必要としたかどうかを決定するように構成され得る。はいの場合、バイパスコントローラは、グラフィックスの前のセットが現在時間とグラフィックスデータの前のセットが段のバイパス可能な部分300に入った時間とに基づいて段のバイパス可能な部分300によって依然として処理されているかどうかを決定し得る。すなわち、バイパスコントローラ310は、段のバイパス可能な部分300がグラフィックスデータのセットを処理するために必要とする時間量を示す情報を記憶し、処理が開始してから経過した時間量に基づいて、グラフィックスデータの特定のセットが依然として処理されているかどうかを決定し得る。
【0064】
[0077]いくつかの状況では、他のいかなるデータも段のバイパス可能な部分300によって現在処理されていない場合、グラフィックスデータのセット302をショートカット回路314のみにルーティングすることは有益であり得る。これは、グラフィックスデータの前のセットが段のバイパス可能な部分300によって処理されることが終わる前に、グラフィックスデータのセット302がショートカット回路314を介してデマルチプレクサ312に到着する状況を回避するためのものである。そのような状況は、順序どおりの実行が必要とされるときに許容できないことがある、順が狂っているデータを生じることになる。順序どおりの実行は、データ(またはデータのセット)が固定ハードウェアパイプラインに入ったのと同じ順序で、データ(またはデータのセット)が固定ハードウェアパイプラインを抜けるための要件である。
【0065】
[0078]したがって、本開示の別の例では、バイパスコントローラ310は、グラフィックスデータの現在のセット302に関係する命令と、段のバイパス可能な部分300のステータス(すなわち、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているか否か)の両方に基づいて、グラフィックスデータのセット302を段のバイパス可能な部分300またはショートカット回路314にルーティングするように構成され得る。バイパスコントローラ310が、バイパス信号306a〜n、および上記で説明した命令分析技法を通してなど、任意の方法で段のバイパス可能な部分300のステータスを決定するように構成され得ることを理解されたい。
【0066】
[0079]この例では、グラフィックスデータのセット302を処理することに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とする場合、バイパスコントローラ310は、段のバイパス可能な部分300を通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。グラフィックスデータのセット302を処理することに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要としない場合、バイパスコントローラ310は、(たとえば、バイパス信号306a〜nによって示されるように)段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理していない場合、ショートカット回路314のみを通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。すなわち、順序どおりの実行を維持するために、バイパスコントローラ310は、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理している場合、段のバイパス可能な部分300を通してグラフィックスデータのセット302をルーティングするように構成され得る。グラフィックスデータの現在のセットが、段のバイパス可能な部分300によって実施される関数を必要としない場合、段のバイパス可能な部分300は、グラフィックスデータのセット302をそのまま渡すように命令されることになる。バイパスコントローラ310は、グラフィックスデータのセット302に関係する命令が段のバイパス可能な部分300による処理を必要とせず、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理していないとバイパスコントローラ310が決定した場合、ショートカット回路314を通してグラフィックスデータのセット302をルーティングするように構成される。
【0067】
[0080]本開示のさらなる例では、バイパスコントローラ310は、グラフィックスデータのセット302のルーティングを決定するためにグラフィックスデータの(1つまたは複数の)後続のセットに関係する命令を分析するようにさらに構成され得る。たとえば、バイパスコントローラ310は、グラフィックスデータの(1つまたは複数の)後続のセットが段のバイパス可能な部分300によって処理されることになるか否かを決定するために、グラフィックスデータの後続のセットに関係する命令を分析するように構成され得る。グラフィックスデータの後続のセットは、グラフィックスデータの現在のセット、たとえば、グラフィックスデータのセット302の後にある。そのような分析は、いわゆるデータ「バブル」を回避するために、グラフィックスデータの現在のセット(たとえば、グラフィックスデータのセット302)のためのルーティングを決定することために使用され得る。
【0068】
[0081]データの1つのセットがデータの前のセットよりも急速に処理されるとき、データバブルが生じ、したがって、パイプラインのある部分においてデータ処理が実施されていない時間期間(すなわち、バブル)を生じる。そのようなデータバブルは、データ不連続性、未使用パイプライン段、および一般的なグラフィックスパイプライン非効率性を生じる。
図6の例では、グラフィックスデータのセット302がショートカット回路314を通してルーティングされるが、グラフィックスデータの後続のセットが段のバイパス可能な部分300を通してルーティングされる場合、データバブルは発生し得る。データが、ショートカット回路314を通るよりもはるかに遅いレートにおいて段のバイパス可能な部分300を通って移動するので、データバブルはグラフィックスデータのセット302とグラフィックスデータの後続のセットとの間に生じ得る。
【0069】
[0082]
図7Aおよび
図7Bは、グラフィックス処理において発生し得る例示的なデータバブルを示す概念図である。
図7Aに示されているように、各正方形は、グラフィックスパイプラインの段を表す。パイプラインの中間セクションは、段のバイパス可能な部分である。段の各後続の行は、異なる時間におけるパイプラインを表す。
図7Aに示されているように、パイプライン段がバイパスされないとき、グラフィックスデータは相次いでパイプラインを横断する。すなわち、いつでも、未使用パイプライン段はない。しかしながら、
図7Bに示されているように、グラフィックスデータのセットが段のバイパス可能な部分をバイパスする場合、データバブルは発生し得、それにより、パイプライン段の一部分は、ある時間期間の間未使用である。
図7Bに示されているように、そのようなバブルは、段のバイパス可能な部分をバイパスし得るグラフィックスデータが、(たとえば、順序どおりの実行を維持するために)前のデータが段のバイパス可能な部分を完了する前にある時間期間の間停止された場合、より大きくなり得る。
【0070】
[0083]したがって、本開示の別の例では、バイパスコントローラ310は、グラフィックスデータの後続のセットに関係する命令を分析し、分析に基づいてグラフィックスデータのセット302をルーティングするようにさらに構成され得る。この例では、グラフィックスデータのセット302を処理することに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とする場合、バイパスコントローラ310は、段のバイパス可能な部分300を通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。
【0071】
[0084]グラフィックスデータのセット302を処理することに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要としない場合、バイパスコントローラ310は、(たとえば、バイパス信号306a〜nによって示されるように)段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理していない場合、およびグラフィックスデータの後続のセットに関係する命令の分析がまた、段のバイパス可能な部分300の関数を必要としない場合、ショートカット回路314のみを通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。
【0072】
[0085]グラフィックスデータの現在のセットが段のバイパス可能な部分300によって実施される関数を必要としないが、グラフィックスデータの後続のセットが段のバイパス可能な部分300の関数を必要とするとバイパスコントローラ310が決定した場合、バイパスコントローラ310は、段のバイパス可能な部分300を通してグラフィックスデータのセット302をルーティングするように構成される。この場合、段のバイパス可能な部分300は、そのままグラフィックスデータのセット302を渡すように命令されることになる。
【0073】
[0086]本開示の別の例では、データバブルは、前のデータフローの特性に基づいて、グラフィックスデータの後続のセットに関係する命令または他の情報を考慮することなしに予測され得る。たとえば、バイパスコントローラ310は、グラフィックスデータの前のセットが段のバイパス可能な部分300をバイパスしたか否かに基づいて、グラフィックスデータの現在のセットが段のバイパス可能な部分300をバイパスし得るかどうかを予測するように構成され得る。たとえば、グラフィックスデータの(1つまたは複数の)前のセットが段のバイパス可能な部分300をバイパスした場合、バイパスコントローラ310は、ショートカット回路314を通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。グラフィックスデータの(1つまたは複数の)前のセットが段のバイパス可能な部分300をバイパスしなかった場合、バイパスコントローラ310は、段のバイパス可能な部分300を通してグラフィックスデータのセット302をルーティングするようにマルチプレクサ308を制御することになる。
【0074】
[0087]
図8Aおよび
図8Bは、本開示による、例示的なデータバブル予測技法を示す概念図である。
図8Aに示されているように、バイパス可能でないグラフィックスデータ(すなわち、段のバイパス可能な部分をバイパスし得ないグラフィックスデータ)と、バイパス可能なグラフィックスデータ(すなわち、段のバイパス可能な部分をバイパスし得るグラフィックスデータ)との交互のシーケンスが、グラフィックスパイプラインを通して移動するようにスケジュールされる。
【0075】
[0088]上記で説明したように、バイパスコントローラ310は、グラフィックスデータの現在のセットがショートカット回路314を通してルーティングされるべきか否かを決定するために命令の順方向検査を実施するように構成され得る。しかしながら、命令の利用可能性、またはグラフィックスデータの現在のセットがバイパス可能であるか否かを示すグラフィックスデータの他の属性は利用可能でないことがあり、時間および/または処理電力に関して、取得するのにコストがかかる得る。これは、グラフィックスパイプラインに入る直前に、グラフィックスデータの現在のセットが作成され得るからである。
【0076】
[0089]したがって、本開示の別の例では、バイパスコントローラ310は、グラフィックスデータの前のセットが段のバイパス可能な部分をバイパスしたか否かに基づいて、グラフィックスデータの現在のセットが段のバイパス可能な部分をバイパスし得るか否かを予測するように構成され得る。
【0077】
[0090]たとえば、
図8に示されているように、バイパスコントローラ310は、段のバイパス可能な部分を通して(すなわち、ショートカット回路314を通さずに)バイパス可能なグラフィックスデータ800の第1のセットをルーティングするように構成され得る。これは、パイプラインを横断したグラフィックスデータの前のセットがバイパス可能でないグラフィックスデータであったからである。上記で説明したように、段のバイパス可能な部分の各段は、パイプライン段内の現在のデータがバイパス可能であるか否かを示すためにバイパス信号306をシグナリングするように構成され得る。段のバイパス可能な部分内のすべてのグラフィックスデータがバイパス可能であるときのみ、バイパスコントローラ310は、バイパス可能なグラフィックスデータがショートカット回路314を使用することを可能にするように構成されることになるか。
【0078】
[0091]この予測技法は、グラフィックスデータが段のバイパス可能な部分をいつバイパスし得るかを決定するために、前のグラフィックスデータの履歴データを使用する。たとえば、段のバイパス可能な部分がN個の段の長さである場合、バイパスコントローラ310は、すべてのN個の段が、段のバイパス可能な部分中のすべてのデータがバイパス可能であることを示すそれらがバイパス信号306をバイパスコントローラ310にシグナリングするまで、データが段のバイパス可能な部分をバイパスすることを可能にしないように構成され得る。
図8Bは、最後の時間期間において、段のバイパス可能な部分中のすべてのデータがバイパス可能である一例を示している。次いで、後続のバイパス可能なグラフィックスデータがショートカット回路314にルーティングされ得る。本技法は、パイプラインが極めて低いコストにおいてバイパス可能であるか否かの予測を可能にする。
【0079】
[0092]
図10は、本開示の技法による、例示的なバイパスコントローラ310を示すブロック図である。
図10に示されているように、1つの例示的なバイパスコントローラ310は、命令分析器370と、バブル決定ユニット372と、バイパス信号分析器374と、ルーティングユニット376とを含み得る。
【0080】
[0093]命令分析器370は、グラフィックスデータの特定のセットが固定ハードウェアパイプラインの段のバイパス可能な部分によって実行される関数によって処理されることを必要とされるか否かを決定するために、グラフィックスデータの1つまたは複数のセットのための命令を分析するように構成され得る。命令分析器370は、グラフィックスデータの特定のセットが段のバイパス可能な部分による処理を必要とするか否かを示す指示をルーティングユニット376に与えるように構成され得る。命令分析器はまた、そのような指示をバブル決定ユニット372に与え得る。
【0081】
[0094]バブル決定ユニット372は、グラフィックスデータの現在のセットの後続グラフィックスデータのセットのための命令を分析し、グラフィックスデータの現在のセットがショートカット回路314にルーティングされる場合、データバブルが発生することになるか否かを決定するように構成される。たとえば、グラフィックスデータの後続のセットに関係する命令がバイパス可能な段の使用を必要とする場合、バブル決定ユニット372は、グラフィックスの現在のセットがショートカット回路317にルーティングされる場合にデータバブルが発生し得ることをルーティング376に示し得る。同様に、グラフィックスデータの後続のセットに関係する命令がバイパス可能な段の使用を必要としない場合、バブル決定ユニット372は、グラフィックスの現在のセットがショートカット回路317にルーティングされる場合にデータバブルが発生しないことになることをルーティング376に示し得る。
【0082】
[0095]他の例では、バブル決定ユニット372は、前のデータフローに基づいて予測アルゴリズムを使用してデータバブルが発生することになるか否かを決定するように構成され得る。このコンテキストでは、データフローは、バイパス可能な段を通して、またはバイパス可能な段を避けて処理されるグラフィックスデータの複数のセットを表し得る。バブル決定ユニット372は、バイパス可能な段を通して、またはバイパス可能な段を避けて処理されているデータの前の例を分析し、データバブルを生じたそのようなフローの特性を識別するように構成され得る。バブル決定ユニット372は、次いで、将来のデータフローが同じ特性を有する状況でのデータバブルの将来の発生を予測し、起こり得るデータバブルをルーティングユニット376に示し得る。
【0083】
[0096]バイパス信号分析器374は、段のバイパス可能な部分300からバイパス信号306a〜nを受信および分析するように構成される。この場合も、バイパス信号306a〜nは、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているか否かを示す。バイパス信号分析器374は、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているか否かの指示をルーティングユニット376に渡し得る。
【0084】
[0097]ルーティングユニット376は、命令分析器370と、バブル決定ユニット372と、バイパス信号分析器374とによって与えられる1つまたは複数の基準に基づいて、グラフィックスデータの現在のセットを段のバイパス可能な部分300またはショートカット回路314のうちの1つにルーティングするように構成される。この場合も、基準は、グラフィックスデータの現在のセットに関係する現在の命令が段のバイパス可能な部分300によって実施される関数を必要とするかどうかの指示と、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているか否かの指示と、グラフィックスデータの現在のセットをショートカット回路314にルーティングすることがデータバブルを生じることになるか否かの指示中とのうちの1つまたは複数を含み得る。
図9〜
図12に、これらの基準に基づいて行われ得るルーティング決定の様々な例を示す。ルーティングが決定されると、ルーティングユニット376はグラフィックスデータの現在のセットを段のバイパス可能な部分300またはショートカット回路314のうちの1つにルーティングするために信号をマルチプレクサ308に送る。
【0085】
[0098]要約すれば、本開示は、グラフィックスデータを処理するように構成された装置(たとえば、GPU12)を提案する。本装置は、グラフィックスデータの現在のセットに対して1つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインを含み得る。固定ハードウェアパイプラインは、複数の段のバイパス可能な部分(たとえば、段のバイパス可能な部分300)を含む複数の段を含み得る。複数の段のバイパス可能な部分は、1つまたは複数のバイパス可能な段を含み得る。
【0086】
[0099]固定ハードウェアパイプラインは、複数の段のバイパス可能な部分を避けてグラフィックスデータの現在のセットをルーティングするように構成されたショートカット回路(たとえば、ショートカット回路314)と、複数の段のバイパス可能な部分の前に配置されたコントローラ(たとえば、バイパスコントローラ310)と、コントローラが、グラフィックスデータの現在のセットをショートカット回路314または複数の段のバイパス可能な部分のうちの1つにルーティングするように構成された、をさらに含み得る。本開示の一例では、コントローラは、コントローラがグラフィックスデータの現在のセットをショートカット回路にルーティングする場合、複数の段のバイパス可能な部分への電力をオフにするように構成される。
【0087】
[0100]
図11は、本開示の例示的な方法を示すフローチャートである。
図11の例では、バイパスコントローラ310は、グラフィックスデータの現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの現在のセットをルーティングするように構成される。バイパスコントローラ310は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とするかどうかを決定する(900)ように構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(904)ように構成される。いいえの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットをショートカット回路314にルーティングする(902)ように構成される。
【0088】
[0101]
図12は、本開示の別の例示的な方法を示すフローチャートである。
図12の例では、段のバイパス可能な部分300は、グラフィックスデータを記憶するように構成された(たとえば、ハードウェア論理ユニット304a〜nに対応する)1つまたは複数のレジスタを含む。1つまたは複数のレジスタは、1つまたは複数のレジスタ中のグラフィックスデータが段のバイパス可能な部分300によって現在処理されているか否かを示す信号(たとえば、バイパス信号306a〜n)をバイパスコントローラ310に送るように構成される。
図12の例ではさらに、バイパスコントローラ310は、グラフィックスデータの現在のセットに関係する命令と、1つまたは複数のレジスタによって送られた信号の両方に基づいて、グラフィックスデータの現在のセットをルーティングするように構成される。
【0089】
[0102]バイパスコントローラ310は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とするかどうかを決定する(1000)ように構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1006)ように構成される。いいえの場合、バイパスコントローラは、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているかどうかを決定する(1002)ようにさらに構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1006)ように構成される。いいえの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットをショートカット回路314にルーティングする(1004)ように構成される。
【0090】
[0103]
図13は、本開示の別の例示的な方法を示すフローチャートである。
図13の例では、バイパスコントローラ310は、グラフィックスデータの後続のセットが段のバイパス可能な部分300によって処理されることになるかどうかを決定するようにさらに構成される。この例では、バイパスコントローラ310は、グラフィックスデータの現在のセットに関係する命令と、グラフィックスデータの後続のセットが段のバイパス可能な部分300によって処理されることになるか否かの決定の両方に基づいて、グラフィックスデータの現在のセットをルーティングするように構成される。
【0091】
[0104]バイパスコントローラ310は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とするかどうかを決定する(1100)ように構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1106)ように構成される。いいえの場合、バイパスコントローラは、グラフィックス命令の後続のセットに関係する命令の分析を通して、グラフィックスデータの現在のセットをショートカット回路314にルーティングすることがデータバブルを生じることになるかどうかを決定する(1102)ようにさらに構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1106)ように構成される。いいえの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットをショートカット回路314にルーティングする(1104)ように構成される。
【0092】
[0105]
図14は、本開示の別の例示的な方法を示すフローチャートである。
図14の例では、バイパスコントローラ310は、段のバイパス可能な部分300の1つまたは複数のレジスタによって送られたグラフィックスデータバイパス信号の現在のセットに関係する命令のうちの3つすべてと、グラフィックスデータの後続のセットが段のバイパス可能な部分300によって処理されることになるか否かの決定とに基づいて、グラフィックスデータの現在のセットをルーティングするように構成される。
【0093】
[0106]バイパスコントローラ310は、グラフィックスデータの現在のセットに関係する命令が、段のバイパス可能な部分300によって実施される関数を必要とするかどうかを決定する(1200)ように構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1208)ように構成される。
【0094】
[0107]いいえの場合、バイパスコントローラは、段のバイパス可能な部分300がグラフィックスデータの前のセットを現在処理しているかどうかを決定する(1202)ようにさらに構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1208)ように構成される。
【0095】
[0108]いいえの場合、バイパスコントローラは、グラフィックス命令の後続のセットに関係する命令の分析を通して、グラフィックスデータの現在のセットをショートカット回路314にルーティングすることがデータバブルを生じることになるかどうかを決定する(1204)ようにさらに構成される。はいの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットを段のバイパス可能な部分300にルーティングする(1208)ように構成される。いいえの場合、バイパスコントローラ310は、グラフィックスデータの現在のセットをショートカット回路314にルーティングする(1206)ように構成される。
【0096】
[0109]1つまたは複数の例では、上記で説明した関数は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、関数は、1つまたは複数の命令またはコードとして非一時的コンピュータ可読媒体を備える製造品上に記憶され得る。コンピュータ可読媒体はコンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)、およびBlu−ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【0097】
[0110]コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、あるいは他の等価な集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。さらに、いくつかの態様では、本明細書で説明した機能は、専用のハードウェアモジュールおよび/またはソフトウェアモジュール内に与えられ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
【0098】
[0111]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示した技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【0099】
[0112]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
グラフィックスデータを処理するように構成された装置であって、前記装置は、
グラフィックスデータの現在のセットに対して1つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、
前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路と、
前記複数の段の前記バイパス可能な部分の前に配置されたコントローラと、前記コントローラが、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの1つに選択的にルーティングするように構成された、
を備える、装置。
[C2]
前記コントローラは、前記コントローラがグラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングする場合、前記複数の段の前記バイパス可能な部分への電力をオフにするようにさらに構成された、C1に記載の装置。
[C3]
前記複数の段の前記バイパス可能な部分が1つまたは複数のバイパス可能な段を備える、C1に記載の装置。
[C4]
前記コントローラが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするように構成された、C1に記載の装置。
[C5]
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
C4に記載の装置。
[C6]
前記複数の段の前記バイパス可能な部分は、グラフィックスデータを記憶するように構成された1つまたは複数のレジスタを備え、前記1つまたは複数のレジスタは、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送るように構成された、C4に記載の装置。
[C7]
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
C6に記載の装置。
[C8]
前記コントローラが、グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの後続のセットのための命令を分析するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析と、前記1つまたは複数のレジスタからの前記信号とに基づいて、グラフィックスデータの前記現在のセットをルーティングするように構成された、
C6に記載の装置。
[C9]
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
C8に記載の装置。
[C10]
前記コントローラは、グラフィックスデータの後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するようにさらに構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかの前記決定とに基づいて、グラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、
C4に記載の装置。
[C11]
前記コントローラは、グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定するように構成され、
前記コントローラは、グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、グラフィックスデータの前記現在のセットをルーティングするように構成された、
C10に記載の装置。
[C12]
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするように構成され、
前記コントローラは、前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするように構成された、
C11に記載の装置。
[C13]
グラフィックスデータを処理するための方法であって、前記方法は、
グラフィックスデータの現在のセットに対して1つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理することと、
前記複数の段の前記バイパス可能な部分の前に配置されたコントローラを用いて、グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの1つに選択的にルーティングすることと
を備える、方法。
[C14]
グラフィックスデータの前記現在のセットが前記ショートカット回路にルーティングされる場合、前記複数の段の前記バイパス可能な部分への電力をオフにすること
をさらに備える、C13に記載の方法。
[C15]
前記複数の段の前記バイパス可能な部分が1つまたは複数のバイパス可能な段を備える、C13に記載の方法。
[C16]
グラフィックスデータの前記現在のセットをルーティングすることが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングすることを備える、C13に記載の方法。
[C17]
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、C16に記載の方法。
[C18]
前記複数の段の前記バイパス可能な部分が、グラフィックスデータを記憶するように構成された1つまたは複数のレジスタを備え、前記方法は、
前記1つまたは複数のレジスタから、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されているか否かを示す信号を前記コントローラに送ること
をさらに備える、C16に記載の方法。
[C19]
前記現在の関数が前記バイパス可能な部分を必要とする場合、または前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、C18に記載の方法。
[C20]
グラフィックスデータの前記現在のセットの後に処理されるべきであるグラフィックスデータの後続のセットのための命令を分析することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析と、前記1つまたは複数のレジスタからの前記信号とに基づいて、グラフィックスデータの前記現在のセットをルーティングすることと
をさらに備える、C18に記載の方法。
[C21]
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていることを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とせず、前記1つまたは複数のレジスタ中の前記グラフィックスデータが前記バイパス可能な部分によって現在処理されていないことを前記信号が示す場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、C20に記載の方法。
[C22]
グラフィックスデータの後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかの前記決定とに基づいて、グラフィックスデータの前記現在のセットをルーティングすることと
をさらに備える、C16に記載の方法。
[C23]
グラフィックスデータの前記後続のセットのための命令を分析することによって、グラフィックスデータの前記後続のセットが前記バイパス可能な部分によって処理されることになるかどうかを決定することと、
グラフィックスデータの前記現在のセットに対して実行されるべき前記現在の関数と、グラフィックスデータの前記後続のセットのための前記命令の前記分析とに基づいて、前記現在のセットグラフィックスデータをルーティングすることと
をさらに備える、C22に記載の方法。
[C24]
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
グラフィックスデータの前記後続のセットのための前記命令が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要とせず、グラフィックスデータの前記後続のセットのための前記命令も前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
をさらに備える、C23に記載の方法。
[C25]
グラフィックスデータを処理するように構成された装置であって、前記装置は、
グラフィックスデータの現在のセットに対して1つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理するための手段と、
グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの1つに選択的にルーティングするための手段と
を備える、装置。
[C26]
グラフィックスデータの前記現在のセットをルーティングするための前記手段が、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするための手段を備える、C25に記載の装置。
[C27]
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングするための手段と、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングするための手段と
をさらに備える、C26に記載の装置。
[C28]
実行されたとき、グラフィックスデータを処理するように構成されたデバイスの1つまたは複数のプロセッサに、
グラフィックスデータの現在のセットに対して1つまたは複数の関数を実行するように構成された固定ハードウェアパイプラインと、前記固定ハードウェアパイプラインが、複数の段のバイパス可能な部分を含む前記複数の段を備える、前記複数の段の前記バイパス可能な部分を避けてグラフィックスデータの前記現在のセットをルーティングするように構成されたショートカット回路とを用いて、グラフィックスデータの前記現在のセットを処理することと、
グラフィックスデータの前記現在のセットを前記ショートカット回路または前記複数の段の前記バイパス可能な部分のうちの1つに選択的にルーティングすることと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
[C29]
前記1つまたは複数のプロセッサが、グラフィックスデータの前記現在のセットに対して実行されるべき現在の関数に基づいてグラフィックスデータの前記現在のセットをルーティングするようにさらに構成された、C28に記載のコンピュータ可読記憶媒体。
[C30]
前記1つまたは複数のプロセッサは、
前記現在の関数が前記バイパス可能な部分を必要とする場合、グラフィックスデータの前記現在のセットを前記バイパス可能な部分にルーティングすることと、
前記現在の関数が前記バイパス可能な部分を必要としない場合、グラフィックスデータの前記現在のセットを前記ショートカット回路にルーティングすることと
を行うようにさらに構成された、C26に記載のコンピュータ可読記憶媒体。