(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
GPUは、多角形から作られた3次元シーンをレンダリングし、かつ/またはピクセルの2次元アレイを処理し得る。GPUは、1つまたは複数のテクスチャを多角形の各々に適用し、レンダリングし得る。画像レンダリングのプロセスの間に、GPUは、様々なカリング演算を実行して、レンダリングされる場合に可視ではなくなるピクセルを有するプリミティブを除去するように構成され得る。カリング演算の例には、バックフェースカリング、錐台カリング、ビューポートカリング、およびゼロピクセルカリングが含まれる。本開示の技法は、ゼロピクセルカリングに関する。ゼロピクセルカリングは、プリミティブに関連付けられたピクセルが1ピクセルよりも小さくなる(すなわち、サイズにおいてゼロピクセルになる)ので、三角形のピクセルがレンダリングされるときに可視ではなくなるか否かを、GPUが決定するプロセスである。ゼロピクセルカリングについて、以下でより詳細に説明する。
【0011】
いくつかの例では、ゼロピクセルカリングを実行するために、GPUは、一連の水平走査線および垂直走査線を生成する。所与のプリミティブに対して、GPUは、そのプリミティブを囲む境界ボックスを生成する。次いで、GPUは、境界ボックスが2つの隣接する水平走査線または2つの隣接する垂直走査線内に適合するか否かを決定する。走査線は、直交する垂直線および水平線のセットを備える。本開示では、走査線は、出力のためのピクセル値またはサンプル値のロケーションに対応し得る。境界ボックスが、2つの隣接する水平走査線または隣接する垂直走査線内に完全に適合する場合、GPUは、プリミティブがレンダリングされる場合に0個の可視ピクセルを有することになると決定する。プリミティブが0個の可視ピクセルを有することになるとの決定に基づいて、GPUは、レンダリングされるべきシーンからプリミティブをカリング(除去)し得る。不可視プリミティブを除去することによって、GPUは、レンダリング性能を上げることができ、その理由は、カリングされたゼロピクセルプリミティブがGPUによってラスタ化されないことになるからである。
【0012】
本開示は、角度に基づいてプリミティブを回転させるように、GPUを構成することによって、ゼロピクセルカリング技法を改善するための技法を提案する。プリミティブの座標を回転させることによって、座標を、回転されたu-v領域中に配置する。プリミティブを回転させた後、GPUは、回転されたプリミティブ座標の周囲に境界ボックスを生成するように構成される。プリミティブがu-v領域中の2つの平行な走査線内に位置する場合、GPUは、プリミティブをカリングする。u-v領域中の平行な走査線は、互いに直交するように配向されるが、従来のゼロピクセルカリングのx-y走査線に対してある角度において配向される。本開示の技法の追加の例について、以下でより詳細に説明する。
【0013】
図1は、グラフィックス処理ユニット(GPU)においてゼロピクセルカリングを実行するための本開示の技法を実装するために使用され得る、例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、たとえば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはコンソール、たとえば、セルラー電話もしくは衛星電話などのモバイル電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、またはグラフィカルデータを処理および/もしくは表示する任意の他のタイプのデバイスを含み得る。
【0014】
図1の例に示すように、コンピューティングデバイス2は、ユーザ入力インターフェース4と、中央処理ユニット(CPU)6と、メモリコントローラ8と、システムメモリ10と、GPU12と、グラフィックスメモリ14と、ディスプレイインターフェース16と、ディスプレイ18と、バス20および22とを含み得る。いくつかの例では、グラフィックスメモリ14はGPU12に「オンチップ」であってもよいことに留意されたい。すなわち、グラフィックスメモリ14は、いかなる共有バス(たとえば、バス20またはバス22)を使用することもなしに、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)バス)、または別のタイプのバスもしくはデバイス相互接続など、様々なバス構造のいずれかであり得る。
図1に示す異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、同じまたは異なる構成要素を有するコンピューティングデバイスおよび/または他のグラフィックス処理システムの他の構成が本開示の技法を実装するために使用され得ることに留意されたい。
【0015】
CPU6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを備え得る。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるために、入力をコンピューティングデバイス2に与え得る。CPU6上で実行されるソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーションまたは別のプログラムを含み得る。加えて、CPU6は、GPU12の動作を制御するためのGPUドライバ7を実行し得る。ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合されたキーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、入力をコンピューティングデバイス2に与え得る。
【0016】
CPU6上で実行されるソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを行わせるようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標))API、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、または任意の他の公的もしくはプロプライエタリ規格グラフィックスAPIなどのグラフィックスアプリケーションプログラミングインターフェース(API)に準拠し得る。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実行させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に(たとえば、GPUドライバ7を通じて)発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブ、たとえば、点、線、三角形、四角形、三角形ストリップなどのリストを含み得る。
【0017】
他の例では、CPU6上で実行されるソフトウェア命令は、GPU12に、GPUハードウェアの高度並列の性質によって実行されるように適用可能なより一般的な計算を実行するための汎用シェーダを実行させ得る。そのような汎用アプリケーションは、いわゆる汎用グラフィックス処理ユニット(GPGPU)であり得、OpenCLなどの汎用APIに準拠し得る。
【0018】
メモリコントローラ8は、システムメモリ10を出入りするデータの転送を容易にする。たとえば、メモリコントローラ8は、メモリ読取りコマンドおよびメモリ書込みコマンドを受け取り、メモリサービスをコンピューティングデバイス2内の構成要素に提供するためにシステムメモリ10に対してそのようなコマンドをサービスし得る。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信可能に結合される。メモリコントローラ8は、CPU6とシステムメモリ10の両方とは別個である処理モジュールであるものとして
図1に示されているが、他の例では、メモリコントローラ8の機能の一部または全部は、CPU6とシステムメモリ10の一方または両方において実装され得る。
【0019】
システムメモリ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つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含み得る。
【0020】
GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ18にレンダリングするためのグラフィックス演算を実行するように構成され得る。したがって、CPU6上で実行されるソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6は、ディスプレイ18にレンダリングするためにグラフィックスコマンドおよびグラフィックスデータをGPU12に与え得る。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。GPU12は、ある事例では、CPU6よりも効率的な、複雑なグラフィック関連演算の処理を実現する高度並列構造で構築され得る。たとえば、GPU12は、複数の頂点またはピクセル上で並行して動作するように構成された複数の処理要素を含み得る。GPU12の高度並列の性質は、いくつかの事例では、CPU6を使用してシーンを直接ディスプレイ18に描画するよりも速く、GPU12がグラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上に描画することを可能にし得る。
【0021】
GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに統合され得る。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード内のポートにインストールされるグラフィックスカード上に存在し得、またはさもなければコンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれ得る。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の等価の集積論理回路もしくはディスクリート論理回路などの1つまたは複数のプロセッサを含み得る。
【0022】
GPU12は、グラフィックスメモリ14に直接結合され得る。したがって、GPU12は、バス20を使用することなしに、グラフィックスメモリ14からデータを読み取り、グラフィックスメモリ14にデータを書き込んでもよい。言い換えれば、GPU12は、オフチップメモリではなく、ローカルストレージを使用してローカルにデータを処理し得る。これは、重いバストラフィックを経験する場合がある、GPU12がバス20を介してデータの読取りおよび書込みを行う必要をなくすことによって、GPU12がより効率的に動作することを可能にする。しかしながら、いくつかの事例では、GPU12は、別個のメモリを含まないが、代わりにバス20を介してシステムメモリ10を利用する場合がある。グラフィックスメモリ14は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体など、1つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含み得る。
【0023】
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は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【0024】
本開示の一例によれば、以下でより詳細に説明するように、GPU12は、三角形の座標を決定することであって、三角形が、GPU12によってレンダリングされるべきシーンの一部である、こと、角度に基づいて三角形の座標を回転させることであって、三角形の点を回転させるために、GPU12が、回転された領域中の三角形の座標を生成するように構成される、こと、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定すること、回転された領域中の複数の平行な第1の走査線を決定すること、回転された領域中の複数の平行な第2の走査線を決定することであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、ことを行うように構成され得る。GPU12は、回転された領域中の境界ボックス座標が、複数の第1の走査線または複数の第2の走査線のうちの2つの隣接する走査線内に位置するか否かを決定するようにさらに構成され得る。境界ボックス座標が、2つの隣接する走査線内に位置するとの決定に応答して、GPU12は、シーンから三角形を除去し得る。本開示の技法は、GPU12の固定機能ハードウェアユニットによって実行され得、ソフトウェアを実行するGPU12のプログラマブルハードウェアユニットによって実行され得、または両方の組合せであり得ることを理解されたい。
【0025】
図2は、
図1のCPU6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。CPU6は、少なくとも1つのソフトウェアアプリケーション24と、グラフィックスAPI26と、GPUドライバ7とを含み得、これらの各々は、CPU6上で実行する1つまたは複数のソフトウェアアプリケーションまたはサービスであり得る。GPU12は、グラフィックス処理コマンドを実行するために一緒に動作する複数のグラフィックス処理ステージを含むグラフィックス処理パイプライン30を含み得る。GPU12は、ビニングレンダリングモードおよび直接レンダリングモードを含む様々なレンダリングモードでグラフィックス処理パイプライン30を実行するように構成され得る。
図2に示すように、グラフィックス処理パイプライン30は、コマンドエンジン32と、ジオメトリ処理ステージ34と、ラスタ化ステージ36と、三角形セットアップエンジン37と、ピクセル処理パイプライン39とを含み得る。三角形セットアップエンジン37は、ゼロピクセルカリングエンジン38をさらに含む。グラフィックス処理パイプライン30内の構成要素の各々は、固定機能構成要素、(たとえば、プログラマブルシェーダユニット上で実行されるシェーダプログラムの一部としての)プログラマブル構成要素として、または固定機能構成要素とプログラマブル構成要素の組合せとして実装され得る。CPU6およびGPU12が利用可能なメモリは、システムメモリ10およびフレームバッファ15を含み得る。フレームバッファ15は、システムメモリ10の一部であってもよく、またはシステムメモリ10とは別であってもよい。フレームバッファ15は、レンダリングされた画像データを記憶し得る。
【0026】
ソフトウェアアプリケーション24は、GPU12の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション24は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングもしくは芸術アプリケーションのためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、またはGPUを利用し得る別のタイプのソフトウェアアプリケーションであり得る。
【0027】
ソフトウェアアプリケーション24は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようにGPU12に命令する1つまたは複数の描画命令を含み得る。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、GUIにおいて使用される複数のウィンドウイング表面の全部または一部をまとめて定義し得る。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間またはワールド空間内に、1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンの全部または一部をまとめて定義し得る。
【0028】
ソフトウェアアプリケーション24は、1つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための1つまたは複数のコマンドをGPU12に発行するために、グラフィックスAPI26を介してGPUドライバ7を呼び出し得る。たとえば、ソフトウェアアプリケーション24は、プリミティブ定義をGPU12に与えるために、グラフィックスAPI26を介してGPUドライバ7を呼び出し得る。いくつかの事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、長方形、三角形ファン、三角形ストリップなどのリストの形でGPU12に与えられ得る。プリミティブ定義は、レンダリングされるべきプリミティブに関連付けられた1つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、頂点ごとの位置座標と、いくつかの事例では、たとえば、色座標、法線ベクトル、およびテクスチャ座標など、頂点に関連付けられた他の属性とを含み得る。
【0029】
プリミティブ定義はまた、プリミティブタイプ情報(たとえば、三角形、長方形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含み得る。ソフトウェアアプリケーション24によってGPUドライバ7に発行された命令に基づいて、GPUドライバ7は、プリミティブをレンダリングするためにGPU12が実行するための1つまたは複数の動作を指定する1つまたは複数のコマンドを策定し得る。GPU12がCPU6からコマンドを受信すると、グラフィックス処理パイプライン30はコマンドを復号し、コマンドにおいて指定された動作を実行するようにグラフィックス処理パイプライン30内の1つまたは複数の処理要素を構成する。指定された動作を実行した後、グラフィックス処理パイプライン30は、レンダリングされたデータをディスプレイデバイスに関連付けられたフレームバッファ15に出力する。グラフィックス処理パイプライン30は、ビニングレンダリングモードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの1つで実行するように構成され得る。
【0030】
GPUドライバ7は、1つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムを、GPU12内に含まれる1つまたは複数のプログラマブルシェーダユニット上にダウンロードするようにさらに構成され得る。シェーダプログラムは、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語などの高レベルシェーディング言語において書かれ得る。コンパイルされたシェーダプログラムは、GPU12内のプログラマブルシェーダユニットの動作を制御する1つまたは複数の命令を含み得る。たとえば、シェーダプログラムは、頂点シェーダプログラムおよび/またはピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたはユニファイドシェーダユニットの実行を制御し、1つまたは複数の頂点ごとの動作を指定する命令を含み得る。ピクセルシェーダプログラムは、プログラマブルピクセルシェーダユニットまたはユニファイドシェーダユニットの実行を制御し、1つまたは複数のピクセルごとの動作を指定する命令を含む、ピクセルシェーダプログラムを含み得る。
【0031】
グラフィックス処理パイプライン30は、GPUドライバ7を介してCPU6から1つまたは複数のグラフィックス処理コマンドを受信するように、および、グラフィックス処理コマンドを実行して、表示可能なグラフィックス画像を生成するように構成され得る。上記で説明したように、グラフィックス処理パイプライン30は、グラフィックス処理コマンドを実行するために一緒に動作する複数のステージを含む。しかしながら、そのようなステージは必ずしも別個のハードウェアブロックにおいて実装される必要はないことに留意されたい。たとえば、ジオメトリ処理ステージ34およびピクセル処理パイプライン39の部分は、ユニファイドシェーダユニットの一部として実装され得る。この場合も、グラフィックス処理パイプライン30は、ビニングレンダリングモードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの1つで実行するように構成され得る。
【0032】
コマンドエンジン32は、グラフィックス処理コマンドを受信し、グラフィックス処理コマンドを実施するための様々な動作を実行するようにグラフィックス処理パイプライン30内の残りの処理ステージを構成し得る。グラフィックス処理コマンドは、たとえば、描画コマンドおよびグラフィックス状態コマンドを含み得る。描画コマンドは、1つまたは複数の頂点の位置座標を指定する頂点仕様コマンドと、いくつかの事例では、たとえば、色座標、法線ベクトル、テクスチャ座標およびフォグ座標など、頂点の各々に関連付けられた他の属性値とを含み得る。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、照明コマンドなどを含み得る。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプ、および/またはプリミティブを形成するために頂点がどのように組み合わされるかを指定し得る。変換コマンドは、頂点に対して実行すべき変換のタイプを指定し得る。照明コマンドは、グラフィックスシーン内の異なる照明のタイプ、方向および/または配置を指定し得る。コマンドエンジン32は、ジオメトリ処理ステージ34に、1つまたは複数の受信されたコマンドに関連付けられた頂点および/またはプリミティブに対してジオメトリ処理を実行させ得る。
【0033】
ジオメトリ処理ステージ34は、ラスタ化ステージ36のためのプリミティブデータを生成するために、1つまたは複数の頂点に対して頂点ごとの動作および/またはプリミティブセットアップ動作を実行し得る。各頂点は、たとえば、位置座標、色値、法線ベクトル、およびテクスチャ座標などの属性のセットに関連付けられ得る。ジオメトリ処理ステージ34は、様々な頂点ごとの動作に従って、これらの属性のうちの1つまたは複数を修正する。たとえば、ジオメトリ処理ステージ34は、修正された頂点位置座標を生成するために、頂点位置座標に対して1つまたは複数の変換を実行し得る。ジオメトリ処理ステージ34は、修正された頂点位置座標を生成するために、たとえば、モデリング変換、ビューイング変換、投影変換、モデルビュー(ModelView)変換、モデルビュー投影(ModelViewProjection)変換、ビューポート変換および深度範囲スケーリング変換のうちの1つまたは複数を頂点位置座標に適用し得る。いくつかの事例では、頂点位置座標は、モデル空間座標であり得、修正された頂点位置座標は、スクリーン空間座標であり得る。スクリーン空間座標は、モデリング変換、ビューイング変換、投影変換およびビューポート変換の適用の後で取得され得る。いくつかの事例では、ジオメトリ処理ステージ34はまた、頂点の修正された色座標を生成するために、頂点に対して頂点ごとの照明動作を実行し得る。ジオメトリ処理ステージ34はまた、たとえば、正規変換、ノーマル正規化(normal normalization)動作、ビューボリュームクリッピング、同次除算動作および/またはバックフェースカリング動作を含む他の動作を実行し得る。様々な例では、ジオメトリ処理ステージ34は、フィルタリングを実行し得る。
【0034】
ジオメトリ処理ステージ34は、ラスタ化されるべきプリミティブを定義する1つまたは複数の修正された頂点のセットを含むプリミティブデータ、ならびにプリミティブを形成するために頂点がどのように組み合わされるかを指定するデータを生成し得る。修正された頂点の各々は、たとえば、修正された頂点位置座標と、頂点に関連付けられた処理された頂点属性値とを含み得る。プリミティブデータはまとめて、グラフィックス処理パイプライン30のさらなるステージによってラスタ化されるべきプリミティブに対応し得る。概念的には、各頂点は、プリミティブの2つのエッジがぶつかるプリミティブの角に対応し得る。ジオメトリ処理ステージ34は、さらなる処理のために、プリミティブデータをラスタ化ステージ36に与え得る。
【0035】
いくつかの例では、ジオメトリ処理ステージ34の全部または一部は、1つまたは複数のシェーダユニット上で実行される1つまたは複数のシェーダプログラムによって実装され得る。たとえば、ジオメトリ処理ステージ34は、そのような例では、頂点シェーダ、ジオメトリシェーダまたはそれらの任意の組合せによって実装され得る。他の例では、ジオメトリ処理ステージ34は、固定機能ハードウェア処理パイプラインとして、または固定機能ハードウェアと1つもしくは複数のシェーダユニット上で実行される1つもしくは複数のシェーダプログラムの組合せとして実装され得る。
【0036】
ラスタ化ステージ36は、ジオメトリ処理ステージ34から、ラスタ化されるべきプリミティブを表すプリミティブデータを受信するように、および、プリミティブをラスタ化して、ラスタ化されたプリミティブに対応する複数のソースピクセルを生成するように構成され得る。いくつかの例では、ラスタ化ステージ36は、どのスクリーンピクセルロケーションがラスタ化されるべきプリミティブによってカバーされるかを決定し、プリミティブによってカバーされると決定されたスクリーンピクセルロケーションごとにソースピクセルを生成し得る。ラスタ化ステージ36は、たとえば、エッジウォーキング(edge-walking)技法、エッジ方程式評価(evaluating edge equations)などの、当業者に知られている技法を使用することによって、どのスクリーンピクセルロケーションがプリミティブによってカバーされるかを決定し得る。ラスタ化ステージ36は、さらなる処理のために、得られたソースピクセルをピクセル処理パイプライン39に与え得る。ラスタ化ステージ36はまた、本明細書で説明するようにアンチエイリアシング技法を実行するように構成され得る。たとえば、ラスタ化ステージ36は、マルチサンプルアンチエイリアシング(MSAA)、スーパーサンプルアンチエイリアシング(SSAA)、および/または本明細書で明示的に説明しない他のアンチエイリアシング技法を実行するように構成され得る。
【0037】
ラスタ化ステージ36によって生成されたソースピクセルは、スクリーンピクセルロケーション、たとえば、宛先ピクセルに対応し、1つまたは複数の色属性に関連付けられ得る。特定のラスタ化されたプリミティブのために生成されたソースピクセルのすべては、ラスタ化されたプリミティブに関連付けられていると言える。プリミティブによってカバーされるべき、ラスタ化ステージ36によって決定されるピクセルは、概念的には、プリミティブの頂点を表すピクセル、プリミティブのエッジを表すピクセル、およびプリミティブの内部を表すピクセルを含み得る。
【0038】
ラスタ化ステージ36は、三角形セットアップエンジン(TSE)37を含む。三角形セットアップエンジン(TSE)37は、プリミティブを受信し、プリミティブセットアップ、浮動小数点-固定小数点変換、クリッピング、ビューポート変換およびカリングを実行するように構成され得る。TSE37は、境界ボックスとエッジ方程式とを含む、ラスタ化ステージ36によって使用される変数を生成するように構成され得る。TSE37はまた、レンダリングのために使用される重心座標I、J、Z、およびWを生成し得る。TSE37はまた、ゼロピクセルカリングエンジン38を含む。ゼロピクセルカリングエンジン38は、本開示のゼロピクセルカリング技法を実行するように構成され得る。
【0039】
ピクセル処理パイプライン39は、ラスタ化されたプリミティブに関連付けられたソースピクセルを受信するように、および、ソースピクセルに対して1つまたは複数のピクセルごとの動作を実行するように構成される。ピクセル処理パイプライン39によって実行され得るピクセルごとの動作は、たとえば、アルファテスト、テクスチャマッピング、色計算、ピクセルシェーディング、ピクセルごとの照明、フォグ処理、ブレンディング、ピクセルオーナーシップテスト、ソースアルファテスト、ステンシルテスト、深度テスト、シザーテストおよび/またはスティップリング動作を含む。加えて、ピクセル処理パイプライン39は、1つまたは複数のピクセルごとの動作を実行するための1つまたは複数のピクセルシェーダプログラムを実行し得る。ピクセル処理パイプライン39によって生成された得られたデータは、本明細書では宛先ピクセルデータと呼ばれ、フレームバッファ15に記憶され得る。宛先ピクセルデータは、処理されたソースピクセルと同じディスプレイロケーションを有する、フレームバッファ15内の宛先ピクセルに関連付けられ得る。宛先ピクセルデータは、たとえば、色値、宛先アルファ値、深度値などのデータを含み得る。
【0040】
フレームバッファ15は、GPU12のための宛先ピクセルを記憶する。各宛先ピクセルは、一意のスクリーンピクセルロケーションに関連付けられ得る。いくつかの例では、フレームバッファ15は、宛先ピクセルごとの色成分および宛先アルファ値を記憶し得る。たとえば、フレームバッファ15は、各ピクセルの赤、緑、青、アルファ(RGBA)成分を記憶し得るが、ここにおいて、「RGB」成分は色値に対応し、「A」成分は宛先アルファ値に対応する。フレームバッファ15およびシステムメモリ10は別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ15はシステムメモリ10の一部であってもよい。
【0041】
本開示の技法による一例では、GPU12のTSE37は、三角形の座標を決定することであって、三角形が、GPU12によってレンダリングされるべきシーンの一部である、こと、角度に基づいて三角形の座標を回転させることを行うように構成され得る。三角形の座標を回転させるために、TSE37は、回転された領域中の三角形の座標を生成すること、および、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定することを行うように構成され得る。TSE37は、回転された領域中の複数の平行な第1の走査線を決定すること、および、回転された領域中の複数の平行な第2の走査線を決定することを行うようにさらに構成され得る。複数の平行な第2の走査線は、複数の平行な第1の走査線に直交する。TSE37は、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する走査線内、または複数の第2の走査線内の2つの隣接する走査線内に位置するか否かを決定するようにさらに構成され得る。境界ボックス座標が、2つの隣接する走査線内に位置するとの決定に応答して、TSE37は、シーンから三角形を除去し得る。
【0042】
図3は、ゼロピクセルカリングを実行する例示的なプロセスを示す概念図である。
図3は、4つの三角形40、42、44、および46を含む。三角形40、42、44、および46は、x-y直交座標系において示されている。TSE37は、互いに直交する垂直走査線、たとえば、走査線41と、水平走査線、たとえば、走査線43とを生成する。それらの走査線は、x軸およびy軸に平行であり、一定の間隔をおいて発生する、追加の線として示されている。走査線の交点は、GPU12がグラフィックスレンダリングパイプラインにおける後続のステージに出力することになるピクセルのロケーションに対応する。
図3の例は、直交する走査線を示すが、他の例では、直交しない走査線もまた使用され得ることを理解されたい。たとえば、x軸は、ある角度だけ回転され得、y軸は、別の異なる角度だけ回転され得る。
【0043】
ゼロピクセルカリングを実行するとき、TSE37は、三角形40、42、44、および46のうちの1つなどのプリミティブが、隣接する垂直走査線のセットまたは隣接する水平走査線のセット内に位置するか否かを決定する。プリミティブが、垂直または水平走査線の隣接するセット内のみに位置する場合、TSE37は、プリミティブのピクセルが可視ではなくなると決定する。プリミティブのピクセルは、レンダリングされたフレームの可視ピクセルに寄与しないほど小さくなるので、プリミティブのピクセルは可視ではなくなる。プリミティブが可視ではなくなる場合、TSE37は、レンダリングされるべきシーンからプリミティブをカリング(除去)し得る。シーンからプリミティブを除去することで、GPU12は、そのプリミティブをレンダリングすることに関係する追加のラスタ化計算の実行を回避することが可能になり、それによって、レンダリング性能を高める。
【0044】
三角形プリミティブが可視であるか否かをより迅速に決定するために、TSE37は、各三角形プリミティブを囲む境界ボックスを決定し得る。境界ボックスは、三角形の2つの最も遠い点の間の距離(すなわち、幅)に等しい幅と、三角形の高さに等しい高さとを有する、矩形である。三角形42に対応するサンプル境界ボックス48が、理解しやすいように示されている。各境界ボックスは、以下でより詳細に説明するように、4つの座標を有する。
【0045】
図3の例では、TSEは、三角形40が2つの隣接する水平走査線内に位置し、したがって、0個のレンダリングされたピクセルを生じるので、カリングされ得ると決定する。同様に、TSE37は、三角形42が2つの垂直に隣接する走査線内に位置すると決定し、したがって、TSE37は、三角形42をカリングし得る。三角形44および46は、ある角度にあり、2つの隣接する水平走査線、および2つの隣接する垂直走査線と交差するので、TSE37は、三角形44および46が、レンダリングされる場合にいかなるピクセルにも対応しなくなるように十分小さいにもかかわらず、三角形44および46がカリングされるべきであると決定することができない。
【0046】
図4は、本開示の技法に従ってゼロピクセルカリングを実行する例示的なプロセスを示す概念図である。
図3に関して説明したプロセスは、ゼロピクセルカリング技法について説明するが、これらの技法は、走査線が、ある角度ではなく、水平および垂直に配向されるので、ある角度で配向されるゼロピクセルプリミティブを除去しない。
図4の例では、TSE37は、角度に基づいてプリミティブの座標を回転させて、回転された領域中でプリミティブを生成する。プリミティブを回転させることによって、および、ゼロピクセルカリングのために使用される走査線を関連付けることによって、本技法に従って構成されたGPUは、ゼロピクセルカリングを実行するときにカリングされるプリミティブの数を増加させ得る。
【0047】
図4は、
図3に示した同じ三角形40、42、44、および46を示す。ただし、
図3とは異なり、
図4はまた、直交する走査線、たとえば、走査線60、62を含み、それらの走査線は、破線として示されており、実線の水平および垂直走査線に対してある角度において配向されている。ゼロピクセルカリングエンジン38は、角度走査線60および62などに基づいて、プリミティブをカリングし得る。本開示の技法によるゼロピクセルカリングを実行するために、TSE37は、角度に基づいて三角形40、42、44、46の座標を回転させる。様々な例では、角度は45度であり得る。しかしながら、他の例では、任意の他の角度または角度の組合せが使用され得る。
【0048】
三角形40、42、44、46のx-y座標を回転させることによって、座標が「u-v」領域と呼ばれる領域中に配置させられる。x-y座標系とu-v座標の両方は、左手直交座標系を含み得る。左手直交座標系は、一般に、右側に向けられたx(u)成分を含む。ただし、従来の左手直交座標系とは異なり、y(v)座標は、上方ではなく下方に向けられる(すなわち、y軸に沿って下方に移動するとき、y値が増す)。u-v領域もまた、2次元直交領域である。本開示におけるu-v領域および座標は、x-y領域に対してある角度だけ回転される。回転の角度(θ)は、x軸に対して時計回りに配向される。
【0049】
TSE37は、三角形40、42、44、46の座標をu-v領域に回転させるために、変換行列を適用し得る。変換行列は、以下を含み得る。
【0051】
ただし、xおよびyは、三角形のx座標およびy座標であり、uおよびvは、u-v領域回転座標である。座標を回転させた後、TSE37は、三角形40、42、44、46の各々のための境界ボックスのための座標を決定し得る。三角形42に対応する境界ボックス48が、再び例のために(今回は、実線の境界線を有して)示されている。
【0052】
境界ボックス座標を決定した後、次いで、TSE37は、三角形40、42、44、または46に関連付けられた境界ボックスのいずれかが、u-v領域中の2つの隣接する水平走査線内、または2つの隣接する垂直走査線内に位置するか否かを決定する。
図4の例では、u-v領域の走査線が、角度のある破線として示されている。u-v領域走査線は、TSE37が適用する回転のために、x-y軸に対してある角度において示されている。したがって、
図4の例では、TSE37は、三角形44および46の境界ボックスが隣接する平行な角度走査線内に完全に位置すると決定する。
【0053】
TSE37は、三角形40および42が隣接する平行な角度走査線内に完全に位置するのではないと決定する。TSE37は、この例では、三角形40および42をカリングしない。しかしながら、TSE37は、いくつかの例では、x-y領域中、および回転されたx-y領域中でカリングを実行するように構成され得る。たとえば、TSE37は、回転されたx-y領域中の複数の異なる角度について同時にプリミティブをカリングするように構成され得る。三角形46および44がu-v領域中の平行な隣接する走査線内に位置するとの決定に基づいて、TSE37は、三角形44および46がレンダリングされる場合にいかなるピクセルにも対応しなくなるので、三角形44および46をカリングし得る。他の例では、TSE37は、プリミティブの形状を決定すること、(たとえば、回転されないx-y領域中で)プリミティブに角度を割り当てること、および、割り当てられた角度に基づいてカリングを実行することを行うように構成され得る。
【0054】
図5は、追加の詳細とともに、本開示の技法に従ってゼロピクセルカリングテクスチャを実行する一例を示す概念図である。
図5の例では、TSE37は、所与の回転角に基づいて、u-v領域中に配置するべき三角形61の座標を決定している。破線の角度のある線の各々は、走査線に対応する。隣接する走査線の各々は、以前の平行な隣接する走査線に対する領域中の1単位のインクリメントまたはデクリメントに対応する。したがって、所与の走査線kについて、隣接する走査線は、値k+1またはk-1を有することになる。
【0055】
x-y領域では、三角形61は、x-y座標(x1,y1)をもつ左下頂点と、座標(x0,y0)をもつ中間頂点と、右上頂点座標(x2,y2)とを有する。回転行列を三角形61の以前の座標に適用した後、(v1,v1)に対応する、得られるu-v座標は、(x1+y1,x1-y1)である。(u0,v0)のためのu-v座標は、(x0+y0,x0-y0)に対応し、(u2,v2)のための座標は、(x2+y2,x2-y2)に対応する。
【0056】
三角形61のための回転されたu-v座標を決定した後、TSE37は、三角形61を囲む境界ボックスの4つの角のためのu-v座標を決定する。TSE37は、境界ボックスの4つの座標を、(Umin,Vmin)、(Umax,Vmin)、(Umax,Vmax)、および(Umin,Vmax)として決定し、ただし、それぞれ、UmaxおよびUminは、三角形の最大および最小u座標であり、VminおよびVmaxは、三角形の最大および最小v座標である。境界ボックスの座標に基づいて、TSE37は、境界ボックスが、2つの隣接する平行な水平u-v領域走査線、または2つの隣接する垂直u-v領域走査線内に適合するか否かを決定する。いくつかの例では、TSE37は、UmaxおよびUminの差分の絶対値が1未満であるか否かを決定することによって、境界ボックスが2つの隣接する走査線内であるか否かを決定し得る。TSE37はまた、VmaxおよびVminの差分の絶対値が1未満であるか否かを決定し得る。前述の差分値のいずれかが1未満である場合、境界ボックスは、2つの隣接する走査線内に適合する。境界ボックスが、2つの隣接する走査線内に適合する場合、TSE37は、三角形プリミティブ、すなわち、この例では三角形61をカリングし得る。
【0057】
図6は、本開示の技法に従ってマルチサンプルアンチエイリアシングとともにゼロピクセルカリングを実行する一例を示す概念図である。
図6の例では、2つの三角形80および82は、シーンのプリミティブを備える。プリミティブは、直交x-y軸、ならびに角度のある破線および実線の走査線に対応するu-v領域に対して示されている。走査線は、
図6の例では、互いに平行または直角のいずれかである。
【0058】
図6のシーンをレンダリングするとき、GPU12は、シーンのプリミティブ上でアンチエイリアシングを実行する。GPU12は、マルチサンプルアンチエイリアシング(MSAA)、スーパーサンプルアンチエイリアシング(SSAA)、および/または本明細書で明示的に説明していない別のアンチエイリアシング技法を使用して、シーン上でアンチエイリアシングを実行し得る。
【0059】
シーン上でアンチエイリアシングを実行するとき、GPU12は、シーンのための最終的なディスプレイ解像度よりも高い(スーパーサンプリングされた)解像度で、シーンを本質的にレンダリングする。より詳細には、GPU12は、最終的なシーン中でレンダリングされるべきピクセルごとに複数のサンプルを決定する。GPU12は、レンダリングされるべき最終的なピクセル値を決定するために、ピクセルの各々に関連付けられたサンプルをダウンサンプリング(すなわち、結合)する。
図6の例では、4つのサンプルがピクセルごとに決定される。単一のピクセル内のサンプルロケーションの各々は、各走査線により画定されたボックス内の円として示されている。様々なアンチエイリアシング技法について、次に手短に説明する。
【0060】
SSAAは、ダウンサンプリングされるべきサンプルが同じプリミティブに属するか否かを決定することなしに、および、サンプルがプリミティブのエッジに位置するか否かを顧慮せずに、GPUがダウンサンプリングを実行する、アンチエイリアシングのより性能集中的な技法である。MSAAは、SSAAと同様である。しかしながら、MSAAにおける一般化として、およびSSAAとは異なり、シェーダユニットは、2つ以上のプリミティブをカバーするピクセル上でいくつかのアンチエイリアシング計算(たとえば、ダウンサンプリング)を実行するのみである。MSAAごとに、ダウンサンプリング計算を低減することによって、ダウンサンプリングがあらゆるピクセル上で実行されるSSAAと比較して、MSAAの性能ペナルティが低減される。
【0061】
図6に示すように、GPU12がアンチエイリアシングを実行するとき、GPU12は、シーンの各ピクセルを複数回サンプリングする。
図6では、各ピクセルが4回サンプリングされ、4回は、一例として、4x MSAAに対応し得る。アンチエイリアシングとともにゼロピクセルカリングを実行するとき、TSE37は、たとえば、u-v領域中に三角形座標を配置するために、上記で説明した回転行列を使用して、角度に基づいて、三角形80の座標を回転させる。
【0062】
しかしながら、
図4〜
図5の場合のように、ピクセルロケーションの交点に基づいて、走査線を生成するのではなく、TSE37は、各ピクセルのサンプルロケーションと交差するu-v領域中の走査線を生成する。実線の角度走査線および破線の角度走査線は、サンプルロケーションと交差するそのような走査線の例である。
図3〜
図5に関して上記で説明したように、プリミティブのために生成された境界ボックスが、2つの平行な走査線内に位置する場合、TSE37は、そのプリミティブをカリングし得る。
図6の例では、三角形82は、2つの隣接する走査線内ではない。したがって、TSE37は、三角形82をカリングすることができない。三角形80は、2つの隣接する走査線内に位置するので、TSE37は、三角形80をカリングすることができる。
【0063】
アンチエイリアシングを実行するとき、ピクセルごとに生成された追加のサンプル、ならびに、対応する追加の走査線およびそれらの関連付けられた角度のために、TSE37は、アンチエイリアシングを実行するとともにゼロピクセルカリングを実行するとき、異なる回転角を使用し得る。たとえば、TSE37は、たとえば、4xMSAAを実行するとき、63.5度の回転角を使用し得る。いくつかの例では、TSE37は、アンチエイリアシングを実行するとともにゼロピクセルカリングを実行するとき、45度の回転角を最初に使用し得る。次いで、TSE37は、63.5度の回転角を使用し、アンチエイリアシングを実行するとき、いかなるゼロプリミティブをもカリングし得る。63.5度のカリング角を使用することで、以下でより詳細に説明するように、アンチエイリアシングを実行するとき、より高い割合のカリングされるプリミティブを生じ得る。三角形回転およびカリング決定を実行するための例示的な擬似コードについて、次に説明する。
【0064】
最初に、TSE37は、頂点A、B、およびCを有する入力三角形を受信する。三角形は、直交頂点座標、すなわち、A(x0,y0)、B(x1,y1)、およびC(x2,y2)を有する。TSE37はまた、回転角(T)を受信する。
【0065】
次に、TSE37は、以下の式に従って、回転された領域中の三角形の座標を決定する。
x0'=cos(T)*x0-sin(T)*y0=u0
y0'=sin(T)*x0+cos(T)*y0=v0
x1'=cos(T)*x1-sin(T)*y1=u1
y1'=sin(T)*x1+cos(T)*y1=v1
x2'=cos(T)*x2-sin(T)*y2=u2
y2'=sin(T)*x2+cos(T)*y2=v2
次いで、TSE37は、以下の式に従って、最大および最小のu値およびv値を決定する。
uMax=max(u0,u1,u2)、uMin=min(u1,u1,u2)
vMax=max(v0,v1,v2)、vMin=min(v1,v1,v2)
ただし、minは、その引数の最小値を戻す関数であり、maxは、その引数の最大値を戻す関数である。
【0066】
u-v座標と関連付けられた値とを決定した後、TSE37は、abs(uMax-uMin)またはabs(vMax-vMin)<1であるか否かを決定し、
ただし、absは、絶対値関数である。上記の条件が真である場合、TSE37は、プリミティブをカリングし得る。
【0067】
MSAAを実行するとき、TSE37は、ハードウェア、ソフトウェア、またはそれらの組合せにおいて、ゼロピクセルカリングを実行するための以下の擬似コードを実行し得る。
u0=x0+y0; v0=x0-y0 // n.8精度
u1=x1+y1; v1=x1-y1
u2=x2+y2; v2=x2-y2
uMax=max(u0,u1,u2); uMin=min(u0,u1,u2) // n.8精度
vMax=max(v0,v1,v2); vMin=min(v0,v1,v2)
switch(MSAA) {
case 0: // 1xMSAA
if(((uMax>>8)==(uMin>>8))&&((uMin & 0xff)!=0)) {
kill=true;
}
if(((vMax>>8)==(vMin>>8))&&((vMin & 0xff)!=0)) {
kill=true;
}
break;
case 1: // 2xMSAA
if(((vMax>>8)==(vMin>>8))&&((vMin & 0xff)!=0)) {
kill=true;
}
if((((uMax+0x80)>>7)==((uMin+0x80)>>7))&&(((uMin+0x80)& 0x7f)!=0)) {
kill=true;
}
break;
case 2: // 4xMSAA
if((((vMax+0x40)>>7)==((vMin+0x40)>>7))&&(((vMin+0x40)& 0x7f)!=0))
{
if (((vMin+0x40)&0x80)==0) {
kill=true;
}
}
if((((uMax+0x40)>>7)==((uMin+0x40)>>7))&&(((uMin+0x40)& 0x7f)!=0))
{
if (((uMin+0x40)&0x80)==0) {
kill=true;
}
}
break;
case 3:
case 4:
break;
【0068】
本開示のゼロピクセルカリング技法は、浮動小数点または固定小数点フォーマットにおいて実行され得る。上記の例では、8小数ビットの精度(n.8精度)をもつ固定小数点フォーマットが使用される。
【0069】
本開示の技法に関連付けられた様々な性能改善について、次に説明する。GFXBenchは、GPUによってレンダリングされたいくつかのシーンからなる、一般的に使用されるグラフィックス性能ベンチマークである。テストシーンのいくつかには、「エジプト」、「T-Rex」、および「マンハッタン」が含まれる。Table 1(表1)は、様々なMSAAモードとともに45度の回転角を使用することによる、プリミティブカリングレートにおける割合改善について説明している。
【0071】
したがって、ほぼあらゆるシーンにおいて、ゼロピクセルカリングを実行するときに45度回転を使用することで、性能改善が生じる。ただし、4xMSAAの場合には、ゼロプリミティブカリング割合レートは、比較的より低い。この場合に対処するために、TSE37は、様々な例では、ゼロピクセルカリングを実行するとき、63.5度の回転を利用し得る。いくつかの例では、TSE37は、45度の角度においてゼロピクセルカリングを実行し、次いで、63.5度においてゼロピクセルカリングを実行し得る。4xMSAAにおける様々な角度の組合せの性能改善について、以下のTable 2(表2)において説明する。
【0073】
したがって、Table 2(表2)において説明するように、63.5度の回転を使用することで、カリングされるプリミティブの割合がわずかに改善され得る。ゼロピクセルカリングを実行するとき、45度の回転と63.5度の回転の両方を使用することで、カリングされるプリミティブの割合がさらに改善され得る。
【0074】
図7は、本開示のゼロピクセルカリングの例示的な方法を示すフローチャートである。例のために、ゼロピクセルカリングエンジン38が、
図7に示す技法の一部または全部を実行し得ることを理解されたい。ゼロピクセルカリングエンジン38は、入力三角形と回転の角度とを得るように構成され得る(90)。ゼロピクセルカリングエンジン38は、三角形x-y座標を回転させて、u-v座標を生成し得る(92)。次いで、ゼロピクセルカリングエンジン38は、最大u-v座標と最小u-v座標とを有する、回転されアンチエイリアシングされた境界ボックス(AABB)を発見し得る(94)。Umaxは最大u座標に対応し、Uminは最小u座標に対応する。Vminは最小v座標に対応し、Vmaxは最大v座標に対応する。
【0075】
ゼロピクセルカリングエンジン38は、境界ボックスがピクセルグリッド内であるか否かを決定する(96)。境界ボックスがピクセルグリッド内である場合(決定ボックス96の「Yes」分岐)、ゼロピクセルカリングエンジン38は、三角形をカリングする(98)。
【0076】
図8は、本開示の例示的な方法を示すフローチャートである。
図8の方法は、TSE37を含む、GPU12の1つまたは複数のハードウェアユニットによって実行され得る。
図8は、GPU12のTSE37が、三角形の座標を決定すること(100)であって、三角形が、GPU12によってレンダリングされるべきシーンの一部である、こと、および、角度に基づいて三角形の座標を回転させること(102)を行うように構成され得る方法を示す。三角形の座標を回転させるために、TSE37は、回転された領域中の三角形の座標を生成すること(104)、および、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定すること(106)を行うように構成され得る。TSE37は、回転された領域中の複数の平行な第1の走査線を決定すること、および回転された領域中の複数の平行な第2の走査線を決定することであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、こと(108)を行うようにさらに構成され得る。TSE37は、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する走査線内、または複数の第2の走査線内の2つの隣接する走査線内に位置するか否かを決定すること(110)を行うようにさらに構成され得る。境界ボックス座標が、2つの隣接する走査線内に位置するとの決定に応答して、TSE37は、シーンから三角形を除去し得る(112)。
【0077】
1つまたは複数の例では、上記で説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。ソフトウェアにおいて実装される場合、機能は、非一時的コンピュータ可読媒体を備える製造品上の1つまたは複数の命令またはコードとして記憶され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを搬送もしくは記憶するために使用されコンピュータによってアクセスされ得る、任意の他の媒体を備え得る。ディスク(disk)およびディスク(disc)は、本明細書で使用するとき、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せはまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【0078】
コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。加えて、いくつかの態様では、本明細書で説明する機能は、専用ハードウェアモジュールおよび/またはソフトウェアモジュール内で提供され得る。また、技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
【0079】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットについて説明するが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットにおいて結合されてもよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上記で説明したような1つもしくは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されてもよい。
【0080】
様々な例について説明した。これらおよび他の例は、以下の特許請求の範囲内に入る。
グラフィックス処理ユニット(GPU)は、三角形の座標を決定し、角度に基づいて三角形の座標を回転させるように構成された、三角形セットアップエンジン(TSE)を含み得る。座標を回転させるために、TSEは、回転された領域中の三角形の座標を生成し、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定する。TSEは、回転された領域中の複数の平行な第1の走査線と、回転された領域中の複数の平行な第2の走査線とを決定する。複数の第1の走査線および複数の第2の走査線は、直交する。TSEは、境界ボックス座標が、2つの隣接する走査線内に位置するか否かを決定する。境界ボックス座標が、2つの隣接する走査線内に位置する場合、TSEは、シーンから三角形を除去する。