(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-19
(45)【発行日】2023-04-27
(54)【発明の名称】可変レートシェーディング
(51)【国際特許分類】
G06T 15/00 20110101AFI20230420BHJP
【FI】
G06T15/00 501
(21)【出願番号】P 2020511305
(86)(22)【出願日】2018-08-21
(86)【国際出願番号】 US2018047401
(87)【国際公開番号】W WO2019040541
(87)【国際公開日】2019-02-28
【審査請求日】2021-08-10
(32)【優先日】2017-08-25
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】スカイラー ジョナソン サレハ
(72)【発明者】
【氏名】クリストファー ジェイ. ブレナン
(72)【発明者】
【氏名】アンドリュー エス. ポミャノフスキ
(72)【発明者】
【氏名】ルイジン ウ―
【審査官】岡本 俊威
(56)【参考文献】
【文献】米国特許出願公開第2017/0243395(US,A1)
【文献】K. Vaidyanathan 他,Coarse Pixel Shading,High Performance Graphics 2014,EUROGRAPHICS DIGITAL LIBRARY,2014年,p9-18,https://diglib.eg.org
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00-15/87
(57)【特許請求の範囲】
【請求項1】
三次元グラフィックスを、独立したラスタライズ及びピクセルシェーディング解像度で処理して、画像をレンダーターゲットにレンダリングする方法であって、
ラスタライザが、三角形をラスタライズして、細かいラスタライズデータと1つ以上のクワッドのセットとを生成することと、
前記ラスタライザによって出力された前記1つ以上のクワッドのセットのうち少なくとも1つを
、タイルバッファサイズを有するタイルバッファに蓄積することと、
前記タイルバッファ内のクワッドをダウンサンプリングして、粗いクワッドを生成すること
であって、前記ダウンサンプリングすることは、前記1つ以上のクワッドのセットのうち少なくとも1つに対して定義されたシェーディングレートに基づいており、前記シェーディングレートは、前記タイルバッファサイズに適合する第2の数のクワッドから生成する第1の数のクワッドを示す、ことと、
前記粗いクワッドをシェーディングして、シェーディングされた粗いクワッドを生成することと、
前記
シェーディングされた粗いクワッドを前記細かいラスタライズデータで変調することと、を含む、
方法。
【請求項2】
前記タイルバッファは、前記1つ以上のクワッドのセットのうち2つ以上のクワッドのデータを記憶するのに十分な容量を有するメモリを含む、
請求項1の方法。
【請求項3】
前記細かいラスタライズデータに対して深度テストを実行して、前記1つ以上のクワッドから隠されたピクセルを除去することをさらに含む、
請求項1の方法。
【請求項4】
前記1つ以上のクワッドのセットのうち少なくとも1つをタイルバッファに蓄積することは、
前記タイルバッファを、レンダーターゲットのタイルに対応する前記1つ以上のクワッドのセットのクワッドで充填することであって、
三角形によってカバーされない
クワッド又は深度カリングされたクワッドに対応する前記タイルバッファの部分は
クワッドで充填されない、ことを含む、
請求項1の方法。
【請求項5】
前記シェーディングレートを決定することをさらに含む、
請求項1の方法。
【請求項6】
前記タイルバッファ内のクワッドをダウンサンプリングすることは、
前記タイルバッファ内の前記クワッドのピクセルから生成された粗いピクセルをそれぞれ含む1つ以上の粗いクワッドのセットを、前記シェーディングレートに基づいて生成することを含む、
請求項5の方法。
【請求項7】
粗いピクセルの各々は、前記1つ以上のクワッドのセットのピクセルの数に対応する前記レンダーターゲットの領域に対応しており、前記数は、前記シェーディングレートに基づいている、
請求項6の方法。
【請求項8】
前記レンダーターゲットは、マルチサンプリングされたレンダーターゲットであり、
粗いピクセルの各々は、前記1つ以上のクワッドのセットの前記対応するピクセルに関連するマルチサンプルカバレッジを含む、
請求項6の方法。
【請求項9】
三次元グラフィックスを、独立したラスタライズ及びピクセルシェーディング解像度で処理して、画像をレンダーターゲットにレンダリングするアクセラレーテッド処理デバイス(APD)であって、
ラスタライザステージと、
ピクセルシェーダステージと、
出力マージャステージと、を備え、
前記ラスタライザステージは、
三角形をラスタライズして、細かいラスタライズデータと1つ以上のクワッドのセットとを生成することと、
ラスタライザによって出力された前記1つ以上のクワッドのセットのうち少なくとも1つを
、タイルバッファサイズを有するタイルバッファに蓄積することと、
前記タイルバッファ内のクワッドをダウンサンプリングして、粗いクワッドを生成すること
であって、前記ダウンサンプリングすることは、前記1つ以上のクワッドのセットのうち少なくとも1つに対して定義されたシェーディングレートに基づいており、前記シェーディングレートは、前記タイルバッファサイズに適合する第2の数のクワッドから生成する第1の数のクワッドを示す、ことと、を行うように構成されており、
前記ピクセルシェーダステージは、
前記粗いクワッドをシェーディングして、シェーディングされた粗いクワッドを生成するように構成されており、
前記出力マージャステージは、
前記
シェーディングされた粗いクワッドを前記細かいラスタライズデータで変調するように構成されている、
APD。
【請求項10】
前記タイルバッファは、前記1つ以上のクワッドのセットのうち2つ以上のクワッドのデータを記憶するのに十分な容量を有するメモリを含む、
請求項
9のAPD。
【請求項11】
前記ラスタライザステージは、
前記細かいラスタライズデータに対して深度テストを実行して、前記1つ以上のクワッドから隠されたピクセルを除去することを行うように構成されている、
請求項
9のAPD。
【請求項12】
前記ラスタライザステージは、
前記タイルバッファを、レンダーターゲットのタイルに対応する前記1つ以上のクワッドのセットのクワッドで充填することであって、
三角形によってカバーされない
クワッド又は深度カリングされたクワッドに対応する前記タイルバッファの部分は
クワッドで充填されない、ことによって、前記1つ以上のクワッドのセットのうち少なくとも1つをタイルバッファに蓄積することを行うように構成されている、
請求項
9のAPD。
【請求項13】
前記ラスタライザステージは、
前記シェーディングレートを決定することをさらに行うように構成されている、
請求項
9のAPD。
【請求項14】
前記ラスタライザステージは、
前記タイルバッファ内の前記クワッドのピクセルから生成された粗いピクセルをそれぞれ含む1つ以上の粗いクワッドのセットを、前記シェーディングレートに基づいて生成することによって、前記タイルバッファ内のクワッドをダウンサンプリングするように構成されている、
請求項
13のAPD。
【請求項15】
粗いピクセルの各々は、前記1つ以上のクワッドのセットのピクセルの数に対応する前記レンダーターゲットの領域に対応しており、前記数は、前記シェーディングレートに基づいている、
請求項
14のAPD。
【請求項16】
前記レンダーターゲットは、マルチサンプリングされたレンダーターゲットであり、
粗いピクセルの各々は、前記1つ以上のクワッドのセットの前記対応するピクセルに関連するマルチサンプルカバレッジを含む、
請求項
13のAPD。
【請求項17】
デバイスであって、
プロセッサと、
前記プロセッサから受信したコマンドを、独立したラスタライズ及びピクセルシェーディング解像度で処理して、画像をレンダーターゲットにレンダリングするアクセラレーテッド処理デバイス(APD)と、を備え、
前記APDは、
ラスタライザステージと、
ピクセルシェーダステージと、
出力マージャステージと、を備え、
前記ラスタライザステージは、
三角形をラスタライズして、細かいラスタライズデータと1つ以上のクワッドのセットとを生成することと、
前記1つ以上のクワッドのセットのうち少なくとも1つを
、タイルバッファサイズを有するタイルバッファに蓄積することと、
前記タイルバッファ内のクワッドをダウンサンプリングして、粗いクワッドを生成すること
であって、前記ダウンサンプリングすることは、前記1つ以上のクワッドのセットのうち少なくとも1つに対して定義されたシェーディングレートに基づいており、前記シェーディングレートは、前記タイルバッファサイズに適合する第2の数のクワッドから生成する第1の数のクワッドを示す、ことと、を行うように構成されており、
前記ピクセルシェーダステージは、
前記粗いクワッドをシェーディングして、シェーディングされた粗いクワッドを生成するように構成されており、
前記出力マージャステージは、
前記
シェーディングされた粗いクワッドを前記細かいラスタライズデータで変調するように構成されている、
デバイス。
【請求項18】
前記タイルバッファは、前記1つ以上のクワッドのセットのうち2つ以上のクワッドのデータを記憶するのに十分な容量を有するメモリを含む、
請求項
17のデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2017年8月25日に出願された米国特許出願第15/687,421号の利益を主張するものであり、その内容は、本明細書に完全に記載されているかのように、言及することによって本明細書に組み込まれる。
【背景技術】
【0002】
三次元(3D)グラフィックス処理パイプラインは、入力ジオメトリをスクリーン表示用の二次元(2D)画像に変換する一連のステップを実施する。いくつかのステップは、ラスタライズ及びピクセルシェーディングを含む。ラスタライズは、ラスタライザの前のパイプラインのステージで提供される三角形によってカバーされるピクセル(又は、サブピクセルのサンプル)を識別することを含む。ラスタライズの出力は、四角形(クワッド)(2×2ピクセルのブロック)と、何れのサンプルがクワッドのピクセルでカバーされているかを示すカバレッジデータと、を含む。ピクセルシェーダは、クワッドのピクセルをシェーディングし、クワッドのピクセルがフレームバッファに書き込まれる。ピクセルシェーディングは非常に多くのリソースを消費するため、ピクセルシェーディングの効率を向上させる技術が絶えず開発されている。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができるであろう。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の特徴を実装し得る例示的なデバイスのブロック図である。
【
図2】一例による、
図1のデバイスの詳細を示す図である。
【
図3】
図2に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。
【
図4】一例による、ピクセルシェーディングとは異なる解像度でラスタライズを実行するための技術を示す図である。
【
図5】いくつかの例による、4分の1以外のシェーディングレートの粗いクワッドの生成を示す図である。
【
図6】マルチサンプルレンダーターゲットへのレンダリングに関する詳細を含む、
図4に示す技術のいくつかの詳細を示す図である。
【
図7】
図6の例示的な技術に対する代替技術を示す図であり、ピクセルシェーダによってキルされた、シェーディングされた粗いピクセルのいくつかのサンプルカバレッジを示す図である。
【発明を実施するための形態】
【0005】
本明細書では、ラスタライズ及びピクセルシェーディングを独立した解像度で実行する技術を提供する。この技術は、通常のようにラスタライズを実行して、細かいラスタライズデータと、(細かい)クワッドのセットと、を生成することを含む。クワッドは、タイルバッファ内に蓄積され、粗いクワッドは、シェーディングレートに基づいてタイルバッファ内のクワッドから生成される。シェーディングレートは、細かいクワッドのピクセルをいくつ組み合わせて、粗いクワッドの粗いピクセルを生成するかを決定する。細かいピクセルの組み合わせは、組み合わせられる細かいピクセル毎に、単一の粗いピクセルを生成することを含む。粗いピクセルの各々は、対応する細かいピクセル(すなわち、粗いピクセルを形成するために組み合わされた細かいピクセル)のカバレッジに対応するカバレッジデータを有する。細かいピクセルからのサンプルカバレッジデータの組み合わせが、ピクセルのカバレッジに割り当てられたビット数を超える場合に、細かいピクセルからのカバレッジデータの一部が除去され、粗いピクセルのカバレッジデータの縮小されたセットが残る。粗いクワッドの粗いピクセルの位置は、対応する細かいピクセルの位置に基づいて設定される。一例では、粗いクワッドの各ピクセルの位置は、対応する細かいピクセルでカバーされるレンダーターゲットの領域の中心点に設定される。粗いクワッドは、通常のようにシェーディングされ、結果として得られるシェーディングされた粗いクワッドは、細かいラスタライズデータに基づいて変更され、シェーディングされた細かいクワッドを生成する。この変更は、粗いクワッドの各ピクセルをアップサンプリング(クローニング)して、各々が対応する粗いピクセルの色を有する複数のアップサンプリングされたクローンピクセルを生成し、次に、アップサンプリングされたクローンピクセルの各々に細かいラスタライズデータを適用することを含む。
【0006】
図1は、本開示の1つ以上の特徴を実装し得る例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、タブレットコンピュータ、又は、他のコンピューティングデバイスのうちの1つであってもよいが、これらに限定されない。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、1つ以上の入力ドライバ112と、1つ以上の出力ドライバ114と、を含む。任意の入力ドライバ112は、ハードウェア、ハードウェア及びソフトウェアの組み合わせ、又は、ソフトウェアとして実施され、入力デバイス108を制御する(例えば、動作の制御、入力ドライバ112からの入力の受信、及び、入力ドライバ112へのデータの提供)目的を果たす。同様に、任意の出力ドライバ114は、ハードウェア、ハードウェア及びソフトウェの組み合わせ、又は、ソフトウェアとして実施され、出力デバイス110を制御する(例えば、動作の制御、出力ドライバ114からの入力の受信、及び、出力ドライバ114へのデータの提供)目的を果たす。デバイス100は、
図1に示していない追加のコンポーネントを含み得ることを理解されたい。
【0007】
様々な代替例では、プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102から分離して配置される。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等)を含む。
【0008】
ストレージ106は、固定又は着脱可能なストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ等であるが、これらに限定されない)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0009】
入力ドライバ112及び出力ドライバ114は、入力デバイス108及び出力デバイス110の各々とインタフェースし、これらを駆動するように構成された1つ以上のハードウェア、ソフトウェア及び/又はファームウェアコンポーネントを含む。入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108からの入力を受信するのを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信するのを可能にする。出力ドライバ114は、ディスプレイデバイス118に接続されたアクセラレーテッド処理デバイス(Accelerated Processing Device:APD)116を含み、APD116は、いくつかの例では、物理ディスプレイデバイス、又は、出力を表示するためにリモートディスプレイプロトコルを使用するシミュレートデバイスである。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れ、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理して、ピクセル出力を、表示するためにディスプレイデバイス118に提供するように構成されている。以下により詳細に説明するように、APD116は、単一命令複数データ(single-instruction-multiple-data:SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理装置を含む。したがって、本明細書では、様々な機能がAPD116によって又はAPD116と共に実行されるものとして説明しているが、代替例では、APD116によって実行されるものとして説明している機能は、追加的又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、グラフィックス出力をディスプレイデバイス118に提供するように構成された、同様の機能を有する他のコンピューティングデバイスによって実行される。例えば、SIMDパラダイムに従って処理タスクを実行する任意の処理システムが、本明細書で説明する機能を実行するように構成されてもよいことが企図される。或いは、SIMDパラダイムに従って処理タスクを実行しないコンピューティングシステムが、本明細書で説明する機能を実行することが企図される。
【0010】
図2は、一例による、デバイス100及びAPD116の詳細を示す図である。プロセッサ102(
図1)は、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を実行し、他のソフトウェアを代替的又は追加的に実行してもよい。オペレーティングシステム120は、ハードウェアリソースの管理、サービス要求の処理、プロセス実行のスケジューリング及び制御、並びに、他の動作の実行等のデバイス100の様々な態様を制御する。APDドライバ122は、APD116の動作を制御し、グラフィックスレンダリングタスク又は他のワーク等のタスクを、処理のためにAPD116に送信する。また、APDドライバ122は、APD116の処理コンポーネント(例えば、以下により詳細に説明するSIMDユニット138等)による実行のためのプログラムをコンパイルするジャストインタイムコンパイラも含む。
【0011】
APD116は、グラフィックス操作及び非グラフィックス操作等のように、並列処理に適している選択された機能のためのコマンド及びプログラムを実行する。APD116は、ピクセル演算、幾何学的計算等のグラフィックスパイプライン操作を実行し、プロセッサ102から受信したコマンドに基づいて画像をディスプレイデバイス118にレンダリングするのに使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する操作等のように、グラフィックス操作に直接関連しない計算処理操作を実行する。
【0012】
APD116は、SIMDパラダイムに従ってプロセッサ102(又は、別のユニット)の要求に応じて並列に操作を実行するように構成された1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同じプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各SIMDユニット138は、16のレーンを含んでおり、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合、予測によってレーンをスイッチオフすることができる。また、予測を使用して、分岐した制御フローを有するプログラムを実行することもできる。具体的には、制御フローが、個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスの連続実行は、任意の制御フローを可能にする。
【0013】
計算ユニット132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMD処理ユニット138上で「ウェーブフロント(wavefront)」として同時に(又は、部分的に同時であって部分的に順次に)実行することができる。1つ以上のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれる。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。代替として、ウェーブフロントは、単一のSIMDユニット138又は異なるSIMDユニット138上で実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に(又は、疑似的に同時に)実行可能なワークアイテムの最大の集合と考えることができる。「疑似的に同時」な実行は、SIMDユニット138のレーン数よりも多いウェーブフロントの場合に発生する。このような状況では、ウェーブフロントは、複数のサイクルに亘って実行され、ワークアイテムの異なる集合が異なるサイクルで実行される。APDスケジューラ136は、計算ユニット132及びSIMDユニット138上で様々なワークグループ及びウェーブフロントのスケジューリングに関連する操作を実行するように構成されている。
【0014】
計算ユニット132によってもたらされる並列性は、ピクセル値計算、頂点変換及び他のグラフィックス操作等のグラフィックス関連操作に適している。したがって、場合によっては、プロセッサ102からグラフィックス処理コマンドを受け入れるグラフィックス処理パイプライン134は、計算タスクを、並列実行のために計算ユニット132に提供する。
【0015】
また、計算ユニット132は、グラフィックスに関連しないか、グラフィックス処理パイプライン134の「通常」の操作(例えば、グラフィックス処理パイプライン134の操作のために実行される処理を補足するのに実行されるカスタム操作)の一部として実行されない計算タスクを実行するために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、このような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
【0016】
図3は、
図2に示すグラフィックス処理パイプライン134のさらなる詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々がグラフィックス処理パイプライン134の特定の機能を実行するステージを含む。各ステージは、プログラム可能な計算ユニット132で実行されるシェーダプログラムとして部分的若しくは完全に実装され、又は、計算ユニット132の外部の固定機能のプログラム不可能なハードウェアとして部分的若しくは完全に実装される。
【0017】
入力アセンブラステージ302は、ユーザが充填したバッファ(例えば、プロセッサ102によって実行されるアプリケーション126等のソフトウェアの要求によって充填されたバッファ)からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。入力アセンブラステージ302は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
【0018】
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含む。これらの操作は、頂点座標を変更するモデリング変換、ビュー変換、投影変換、パースペクティブ分割及びビューポート変換等のうち1つ以上と、座標以外の属性を変更する他の操作と、を含む。
【0019】
頂点シェーダステージ304は、1つ以上の計算ユニット132で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づいている。ドライバ122は、このようなコンピュータプログラムをコンパイルして、計算ユニット132での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【0020】
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は、連携してテッセレーションを実行し、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ306は、入力されたプリミティブに基づいて、テッセレーションに関するパッチを生成する。テッセレータステージ308は、パッチのサンプルセットを生成する。ドメインシェーダステージ310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、頂点シェーダステージ304と同様に、ドライバ122によってコンパイルされる計算ユニット132上で実行されるシェーダプログラムとして実装することができる。
【0021】
ジオメトリシェーダステージ312は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ312によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン(fur-fin)生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。場合によっては、ドライバ122によってコンパイルされ、計算ユニット132上で実行されるジオメトリシェーダプログラムは、ジオメトリシェーダステージ312の操作を実行する。
【0022】
ラスタライザステージ314は、ラスタライザステージ314の上流で生成された単純なプリミティブ(三角形)を受け入れてラスタライズする。ラスタライズは、何れのスクリーンピクセル(又は、サブピクセルのサンプル)が特定のプリミティブによってカバーされるかを決定することから構成されている。ラスタライズは、固定機能のハードウェアによって実行される。
【0023】
ピクセルシェーダステージ316は、上流で生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ316は、テクスチャメモリからテクスチャを適用してもよい。ピクセルシェーダステージ316の操作は、ドライバ122によってコンパイルされ、計算ユニット132で実行されるピクセルシェーダプログラムによって実行される。
【0024】
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受け入れ、これらの出力をフレームバッファ内に結合(マージ)し、zテスト及びアルファブレンディング等の操作を実行することによって、スクリーンピクセルの最終色を決定する。
【0025】
1つの動作モードでは、ラスタライザステージ314によって実行されるラスタライズは、ピクセルシェーダステージ316によって実行されるピクセルシェーディングと同じ解像度で実行される。上記の説明よりも詳細な背景として、ラスタライザステージ314は、前のステージから三角形を受け入れ、当該三角形に対してスキャン変換を実行してフラグメントを生成する。フラグメントは、レンダーターゲットの個々のピクセルのデータであり、位置、深度及びカバレッジデータ等の情報を含み、ピクセルシェーダステージの後に、色等のシェーディングデータを含む。レンダーターゲットは、レンダリングが実行される(すなわち、色又は他の値が書き込まれている)ターゲット画像である。
【0026】
通常、フラグメントはクワッドにグループ化され、各クワッドは、4つの隣接するピクセル位置に対応するフラグメント(すなわち、2×2フラグメント)を含む。三角形のスキャン変換は、三角形によってカバーされているピクセル位置毎にフラグメントを生成することを含む。レンダーターゲットがマルチサンプル画像である場合、各ピクセルは、複数のサンプル位置を有し、その各々がカバレッジについてテストされる。フラグメントは、三角形によってカバーされているピクセル領域内のサンプルのカバレッジデータを記録する。ラスタライザステージ314によって生成されたフラグメントは、ピクセルシェーダステージ316に送信され、ピクセルシェーダステージ316は、これらのフラグメントの色値を決定し、同様に他の値を決定してもよい。
【0027】
同じ解像度でラスタライズ及びピクセルシェーディングを実行することは、ラスタライザによって生成されたフラグメント毎に、ピクセルシェーダ316が当該フラグメントの色を決定するための計算を実行することを意味する。つまり、ピクセルが占めるスクリーンスペースの面積は、色を決定する精度と同じ面積である。一例では、計算ユニット132のSIMDベースのハードウェアでは、ラスタライザステージ314によって生成された各フラグメントは、異なるワークアイテムによってシェーディングされる。したがって、生成されたフラグメントと、これらのフラグメントをシェーディングするために生成されたワークアイテムとの間には、1対1の対応関係がある。ラスタライザステージ314は、通常、前にレンダリングされたフラグメントによって隠されたフラグメントをカリングする深度テスト(depth testing)を実行することに留意されたい。したがって、この深度カリングで残存したフラグメントと、残存したフラグメントを着色するために生成されたワークアイテムとの間には、1対1の対応関係がある。シェーディングと同じ解像度でラスタライズが実行される動作モードを理解する別の方法は、三角形のエッジを定義できる解像度が、当該三角形の色を定義できる解像度に等しいことである。
【0028】
上記の動作モードに関する問題の1つは、固定色又は色の低周波数変化を有する三角形のピクセルシェーディングと同じ解像度でラスタライズが行われることである。このような三角形の場合、近くのフラグメントに対するピクセルシェーディング演算が同じ又は類似の色を生成し、事実上冗長である。したがって、ピクセルシェーダ演算の数を大幅に少なくして、同様の結果を得ることができる。したがって、ラスタライズ解像度をシェーディング解像度から独立させることが有利であり、以下に、ピクセルシェーディングとは異なる解像度でラスタライズを行うための技術を説明する。このような技術の利点は、実行されるピクセルシェーダ演算の数が減少し、これにより、処理負荷が低減され、パフォーマンスが向上することである。
【0029】
図4は、一例による、ピクセルシェーディングとは異なる解像度でラスタライズを実行するための技術を示す図である。
図4は、一連のステップを示し、異なるステップの例示的な図を提供し、グラフィックス処理パイプライン134の何れのステージが何れのステップに関連しているかを示している。
【0030】
この技術は、ステップ402から始まり、ラスタライザステージ314は、グラフィックス処理パイプライン134の前のステージから受信した三角形をラスタライズする。このラスタライズは、レンダーターゲットの解像度で実行される。ラスタライズは、三角形でカバーされているレンダーターゲットのサンプルを決定する。また、ラスタライザステージ314は、ステップ402で深度テストを実行する。一例では、深度テストは、三角形でカバーされている各サンプルの深度値を調べ、これらの深度値を、既に処理された三角形の深度値を記憶する深度バッファと比較することを含む。特定のサンプルの深度値は、特定のサンプルと同じ位置の深度バッファに記憶された深度値と比較される。サンプルが隠されていることを深度バッファが示している場合には当該サンプルが破棄され、サンプルが隠されていないことを深度バッファが示している場合には当該サンプルが存続する。いくつかの深度テストモードでは、存続しているサンプルによって、当該サンプルの位置の深度バッファが更新される。深度テストは、深度バッファ内の深度値と問題のサンプルの深度値との間の様々なタイプの比較(例えば、小なり比較(less-than comparison)、大なり比較(greater-than comparison)、等値比較(equal-to comparison)又は他のタイプの比較)に対応するモード等の異なるモード、及び、深度バッファを更新するための様々な条件(例えば、存続しているサンプルが更新をトリガしてもよいし、他の条件が更新をトリガしてもよいし、更新がスイッチオフされてもよい)で実行されてもよい。何れのサンプル位置がカバーされており、何れのサンプル位置が隠されていないかを示すデータは、この説明の他の箇所で説明するように、後の処理のためにグラフィックス処理パイプライン134の他の部分に渡される。
【0031】
カバレッジデータ(細かいラスタライズデータとも呼ばれる)を除き、ラスタライズの結果はクワッドである。具体的には、三角形によってカバーされた少なくとも1つのサンプルを有するピクセル毎に、ラスタライザステージ314がフラグメントを生成する。ラスタライザ314は、これらのフラグメントからクワッドを生成する。クワッドは、1つ以上のこのようなフラグメントが三角形によって完全にカバーされていない場合でも、2×2ピクセルの隣接する部分のフラグメントを含む。この場合、このようなフラグメントは「ヘルパーピクセル」と呼ばれる(ヘルパーピクセルは、ヘルパーピクセル以外のピクセルの色の生成を支援するためにピクセルシェーダによって使用されるが、ピクセルシェーダによって決定された色は、フレームバッファに書き込まれない)。
【0032】
また、ステップ402において、ラスタライザステージ314は、三角形のサンプルの1つ以上のシェーディングレートを決定する。シェーディングレートは、ピクセルシェーダステージ316において共にシェーディングされるピクセルの数を定義する。具体的には、シェーディングレートは、ピクセルシェーダステージ316の単一のワークアイテムによって決定された色がレンダーターゲット内のいくつのピクセル位置に与えられるかを決定する。例えば、シェーディングレートが4分の1である場合、ピクセルシェーダステージ316のワークアイテムは、レンダーターゲットの4つのピクセル位置の色を決定する。いくつかのピクセルの色は、三角形の外側にあるか、深度テストに基づいて隠されていることに起因して破棄される場合があるので、色は、ピクセルではなくピクセル位置に対して決定されると言われることに留意されたい。例えば、シェーディングレートが4分の1であり、これにより、特定のワークアイテムがレンダーターゲットの4つのピクセル位置の色を決定し、これらのうち3つのピクセル位置が三角形の外側にあるか隠されている場合には、ワークアイテムは、実際には、1つのピクセルのみの色を決定する。但し、ワークアイテムが色を決定した全てのピクセル位置が三角形内にあり、隠されていない可能性がある。このような状況では、1つのワークアイテムが、4つの異なるピクセルの色を決定する。
【0033】
シェーディングレートは、以下の技術のうち1つ以上に基づいて、レンダーターゲットに適用される。タイルベースのレート決定技術では、レンダーターゲットがシェーディングレートタイルのセットに分割され、各シェーディングレートタイルに特定のシェーディングレートが割り当てられる。三角形ベースのレート決定技術では、特定のシェーディングレートが各プリミティブに割り当てられる。状態ベースのレート決定技術では、シェーディングレートの状態変化がパイプラインを介して伝播され、ラスタライザステージ314において、次のシェーディングレートの状態変化がラスタライザステージ314によって処理されるまで、後続のピクセルのシェーディングレートを設定する。これらの技術を組み合わせて、異なる技術に異なる優先度を与えてもよい。一例では、状態ベースのレート決定技術は、三角形のサンプルのデフォルトのシェーディングレートを定義する。この例では、タイルベースのレート決定技術が状態ベースの値を上書きし、三角形ベースのシェーディングレートが状態ベースの値及びタイルベースの値を上書きする。他の優先度が代わりに存在してもよいし、異なる技術が独立して適用されてもよい。
【0034】
ラスタライズ
図420は、三角形でカバーされているピクセル(カバーされているピクセル502)と、カバーされていないピクセル(カバーされていないピクセル504)と、を含む三角形506を示している。ラスタライズ
図420は、レンダーターゲット(図示省略)の一部のみをカバーしており、レンダーターゲットの他の部分については、図示していないラスタライズが行われていることを理解されたい。図示した部分は、4つの異なるタイル508に分割される。これらのタイル508は、以下に詳細に説明するように、ピクセルを「ダウンサンプリング」して、ラスタライズ解像度とピクセルシェーディング解像度との分離を可能にするメカニズムの一部である。タイル508は、上述したシェーディングレートタイルと異なることに留意されたい。
【0035】
ステップ404において、ラスタライザステージ314は、ステップ402での細かいラスタライズの結果として生成されたクワッドを、タイルバッファ
図422で示すように、タイルバッファ510内に蓄積する。タイルバッファ510は、タイル508のクワッドを記憶する小さなメモリである。
図4では、タイルバッファ510は、4つの2×2の隣接する細かいピクセルクワッドのサイズであるが、他の例では、タイルバッファ510は、異なる数のクワッドを記憶してもよい。細かいピクセル514が示されているが、これらは、ダウンサンプリングされた解像度ではなく、レンダーターゲットの解像度のピクセルに対応している。深度カリングされた(すなわち、ステップ402の深度テストで存続したピクセルがない)クワッドの場合、タイルバッファ510の対応する部分は空のままである。ラスタライザステージ314は、スクリーン位置に対して、クワッドが生成される順序を知っており、これにより、クワッドがいつ「失われた」かを決定することができる。
【0036】
ステップ406において、ラスタライザステージは、(粗いクワッドの
図424に示すように)シェーディングレートに基づいて粗いクワッド515を生成する。タイルバッファは、複数の粗いピクセル領域512を含むと考えることができる。粗いピクセル領域512のサイズは、シェーディングレートに依存する。具体的には、粗いピクセル領域512の各々は、シェーディングレートの逆数に等しいピクセル数を含む。例えば、シェーディングレートが4分の1である場合、粗いピクセル領域512の各々は、4つの細かいピクセル514を含む。シェーディングレートが2分の1である場合、粗いピクセル領域512の各々は、2つの細かいピクセル514を含み、以下同様である。
【0037】
タイルバッファ510のサイズ及びシェーディングレートに基づいて、1つ以上の粗いクワッド515が生成される。生成される粗いクワッド515の数は、細かいピクセル514のタイルバッファ510のサイズに等しく、4(クワッド内の4ピクセル)で除算され、シェーディングレートで乗算される。したがって、
図4の例のように、タイルバッファ510が16個のピクセルであり、シェーディングレートが4分の1である場合、生成される粗いクワッド515の数は16/4×(1/4)=1に等しい。同様のタイルバッファ510及び2分の1シェーディングレートの場合、2つの粗いクワッド515が生成される。
【0038】
粗いクワッド515の各々は、4つの粗いピクセル520を含む。任意の特定の粗いピクセル520に割り当てられたカバレッジは、その粗いピクセル520に「潰された(collapsed)」細かいピクセル514に割り当てられたカバレッジの融合である。状況によっては、このような融合は、粗いピクセル520が過剰なカバレッジデータを有することになる。具体的には、グラフィックス処理パイプライン134は、ピクセルのカバレッジデータを指定するのに使用可能なビット数に対する制限を有する場合がある。この状況では、細かいピクセル514からのカバレッジデータが粗いピクセル520のカバレッジデータに融合されると、そのデータは忠実度が低下する。残っているカバレッジデータは、個々の細かいピクセルのカバレッジを幾何学的に表す。この考え方は、
図6に関してより詳細に説明される。カバレッジを有しない粗いクワッド515が生成される場合、このような粗いクワッド515は生成されない。タイルバッファ510がレンダーターゲットの特定のタイル508について如何なるクワッドも受信していない場合、ラスタライザステージ314は、そのタイル508をカバーする三角形が存在しないか、又は、そのタイル508について生成されたクワッドが他のジオメトリによって隠されていることを決定する。その場合、そのタイル508に対して粗いクワッド515が生成されない。
【0039】
ステップ408において、ラスタライザステージ314は、(
図426に示すように)ステップ406で生成された粗いクワッド515の粗いピクセル520の位置を設定する。この位置は、粗いピクセル520に潰された細かいピクセル514を含む粗いピクセル領域512を幾何学的に表す。一例では、粗いピクセル520の位置は、対応する粗いピクセル領域512の中心に設定される。粗いピクセル520の位置を設定するための他の技術的に実行可能な技術が可能である。
【0040】
ステップ410において、ピクセルシェーダステージ316は、ピクセルシェーディングの
図524に示すように、生成された粗いクワッド515をシェーディングして、シェーディングされた粗いピクセル524を生成する。このシェーディングは標準的な方法で行われ、例えば、粗いピクセル520の各々は、SIMDハードウェアで処理されるワークアイテムとして起動する。
【0041】
ステップ412において、出力マージャステージ318は、ステップ412において決定された細かいカバレッジデータを、変調の
図526に示すように、シェーディングされた粗いピクセル524に適用する。具体的には、シェーディングされた粗いピクセル524の各々は、シェーディングレートに基づいてクローニングされ、各クローンは、シェーディングされた粗いピクセル524の色を取得して、シェーディングされた細かいピクセル526を生成する。ラスタライザステージ314によって生成されたサンプルカバレッジ内のデータに基づいて、シェーディングされた細かいピクセル526の各々にカバレッジが適用される。サンプルがそのデータでカバーされていない場合、そのサンプルは、対応するクローニングされた細かいピクセルで無効になる。ラスタライザステージ314によって生成されたデータにカバレッジを有しないクローニングされたピクセルも同様に、ピクセルカバレッジを有しないように設定される。ステップ412に含まれる動作は、本明細書では「変調」と呼ばれることがある。例えば、シェーディングされた粗いピクセル524は、ラスタライザステージ314によって生成されたカバレッジデータによって変調され、シェーディングされた細かいピクセル526を生成すると言える。
【0042】
ステップ414において、ラスタライザステージ314からのサンプルカバレッジによって変更されたカバレッジを有する、シェーディングされた細かいピクセル526が、レンダーターゲットに書き込まれる。例えば、遅延z演算(late z operations)、ブレンディング等の他の遅延ピクセル演算を適用することができる。
【0043】
図5は、いくつかの例による、タイルバッファ510及びタイルバッファ510の内容から、4分の1以外のシェーディングレートの粗いクワッドの生成を示す図である。具体的には、2:1水平構成550(1)、2:1垂直構成550(2)、及び、1:1パススルー構成550(3)が示されている。
【0044】
2:1水平構成550(1)は、水平方向に隣接する2つの細かいピクセル514が粗いピクセル520に組み合わされる2分の1シェーディングレートを有する。同様に、2:1垂直構成550(2)は、垂直方向に隣接する2つの細かいピクセル514が粗いピクセル520に組み合わされる2分の1シェーディングレートを有する。図示した2:1構成の両方について、4分の1シェーディングレートのように、4つの粗いピクセル520が粗いクワッド514内に含まれる。タイルバッファ510が8つの粗いピクセル520に対応するので、2つのクワッドが生成される。また、粗いピクセル520の各々には、粗いピクセル520に蓄積される細かいピクセル514のカバレッジが割り当てられ、粗いピクセル520が細かいピクセル514の全てのカバレッジデータを記憶するのに十分なビットを含まない場合、カバレッジの忠実度は低下する。ピクセル位置調整は、粗いピクセル520の各々の位置を、粗いピクセル領域512を幾何学的に表す位置に設定することを含む。一例では、この位置は、粗いピクセル領域512の中心である。粗いピクセル520の位置を設定するための他の技術的に実行可能な技術も可能である。1:1構成550(3)では、特別な動作が実行されない。粗いクワッドが存在せず、ラスタライズによって生成されたクワッド540は、変更なしに出力され、ピクセルシェーダステージ316によってシェーディングされる。
【0045】
図6は、一例による、マルチサンプルレンダーターゲットへのレンダリングに関連するいくつかの詳細を含む、
図4に示す技術の詳細を示す図である。
図6は、
図4のステップのいくつかを示しており、簡潔にするために他のステップを省略している。
【0046】
細かいラスタライズデータ606は、マルチサンプルレンダーターゲットについて、ステップ402においてラスタライザステージ314によって生成されたラスタライズデータを含む。マルチサンプルレンダーターゲットは、各ピクセルが複数のカバレッジサンプルを有するレンダーターゲットである。
図6では、簡潔にするために、単一の粗いピクセル領域512のみが示されている。さらに、このシェーディングレートは、一例としてのみ使用されているが、4分の1である。4分の1のシェーディングレートは、粗いピクセル領域512が4つの細かいピクセル514を含むことを意味する。
【0047】
細かいラスタライズデータ606は、(三角形のエッジ602によって画定されるように)三角形の内側にあるいくつかのカバーされたサンプル608と、三角形の外側にあるいくつかのカバーされていないサンプル604と、を示している。「保守的なダウンサンプル(conservative downsample)」操作は、
図4のステップ406に対応する。具体的には、保守的なダウンサンプル操作は、各ピクセルで使用可能なサンプルカバレッジデータの制限に起因するサンプルカバレッジデータの減少と共に、複数の細かいピクセル514が単一の粗いピクセル520に潰されたことを示している。上述したように、このように潰されることは、細かいピクセル514のより忠実度の高いサンプルカバレッジを幾何学的に表すサンプルカバレッジのセットを保持することを含む。
図6では、各サンプルは、異なる細かいピクセル514に対応している。ダウンサンプルは、細かいピクセル514がカバーされている任意のサンプルを有する場合、その細かいピクセル514に対応する粗いピクセル520のサンプルがカバーされていると考えられるという点で保守的である。細かいピクセル514毎に粗いピクセル620内に1つのサンプルのみが存在する必要がないことに留意されたい。粗いピクセル520内の複数のサンプルは、単一の細かいピクセル514に対応してもよい。この場合、粗いピクセル520内の各サンプルは、細かいピクセル514の対応するサンプルを幾何学的に表すことになる。
【0048】
左下には、ピクセルシェーダによる処理後の粗いピクセル520が、シェーディングされた粗いピクセル520として示されている。このシェーディングされた粗いピクセル524は、(PS-C)と略された「ピクセルシェーダが適用された色」とラベル付けされた色で着色されている。このシェーディングされた粗いピクセル524は、
図4のステップ410の出力に対応する。この操作の後、シェーディングレートに基づいて、シェーディングされた粗いピクセル524がアップサンプリングされる。具体的には、シェーディングされた粗いピクセル524は、シェーディングレートの逆数(例えば、
図6の4)に等しい複数の細かいピクセルにクローニングされる。細かいピクセルの各々には、シェーディングされた粗いピクセル524の色が割り当てられる。このような細かいピクセルの各々におけるサンプルの数は、粗いクワッドを生成する前の細かいピクセル514のサンプルの数に等しい。クローニングされた細かいピクセルの各々の全てのサンプルは、バイナリ形式で設定される。シェーディングされた粗いピクセル524内の対応するサンプルがカバーされている場合、対応する細かいピクセルの全てのサンプルがカバーされ、シェーディングされた粗いピクセル524内の対応するサンプルがカバーされていない場合、対応する細かいピクセル内の全てのサンプルがカバーされない。最後に、これらの細かいサンプルは、細かいラスタライズデータ606にマージされる。マージは、ファイナライズされていないカバレッジ525を有するシェーディングされた細かいピクセルのサンプルと、細かいラスタライズデータ606の対応するサンプルと、に「AND」を適用することから構成される。シェーディングされた細かいピクセルのサンプルは、ファイナライズされていないカバレッジ525を有するシェーディングされた細かいピクセル内の対応するサンプルと、細かいラスタライズデータ606内の対応するサンプルと、の両方がカバーされている場合に、カバレッジであるとみなされる。一方又は両方がカバーされていない場合、シェーディングされた細かいピクセル526内のサンプルはカバーされていない。
【0049】
図7は、
図6の代替例を示しており、シェーディングされた粗いピクセル524内のいくつかのサンプルカバレッジが、ピクセルシェーダによって削除されている。ピクセルシェーダステージ316では、シェーディングされるクワッドのカバレッジを変更又は設定することができる。ピクセルシェーダステージ316が粗いクワッドのサンプルを削除する(例えば、これらのサンプルをカバーしないように設定する)場合、細かいラスタライズデータ606の対応するサンプルがカバーされていると考えられるが、ステップ412から出力されるシェーディングされた細かいピクセル526の対応するサンプルはカバーされない。
図7の例は、
図6に示すのと同じ細かいラスタライズデータ606を使用する。したがって、
図7では、ピクセルシェーダステージ316が、シェーディングされた粗いピクセル524の対応するサンプルを削除しているので、細かいラスタライズデータ606が、左の2つの細かいピクセル514のサンプルのいくつかがカバーされていることを示しても、左の2つの細かいピクセル516がカバーされているとみなされない。
【0050】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【0051】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【0052】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実装されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。