(57)【要約】【課題】プリミティブおよびピクセルを処理する多様な仕方を許可する。【解決手段】グラフィクス・パイプラインにおいて、ラスタ化段の途中または終了時に、クリップ後出力段がプリミティブを記憶し、ピクセルがメモリの一部分に記憶される。ラスタ化段の途中または終了時にプリミティブおよびピクセルが利用可能であることが、プリミティブおよびピクセルを処理する多様な仕方を許可する。【選択図】図１
2011044143.tif 000002
【特許請求の範囲】
【請求項１】
プリミティブ属性を記憶するためにメモリ内の第一のバッファの部分を割り当てる段階と；
前記第一のバッファの部分にラスタ化器からのプリミティブ属性を記憶することを要求する段階と；
グラフィクス・パイプラインから独立なアプリケーションによる前記プリミティブ属性へのアクセスを許可する段階とを含む、
コンピュータによって実装される方法。
【請求項２】
前記プリミティブ属性が画面空間バーテックス位置、バーテックスごとの奥行き情報、クリッピングされたタイル境界の識別情報および描画順のうちの一つまたは複数を含む、請求項１記載の方法。
【請求項３】
前記プリミティブ属性が、テクスチャ座標、色、寿命、輝度および照度のうちの少なくとも一つから選択されるバーテックスごとの属性を含む、請求項１記載の方法。
【請求項４】
請求項１記載の方法であって、さらに：
前記ラスタ化器からのプリミティブ属性に関連付けられたピクセル被覆マスクの受領を要求する段階と；
前記プリミティブ属性に関連付けられたピクセル被覆マスクを記憶するためにメモリ内の第二のバッファの部分を割り当てる段階と；
前記第二のバッファの前記部分にピクセル被覆マスクを記憶することを要求する段階とを含み、記憶されるピクセル被覆マスクの少なくとも一つは、少なくとも一つのピクセルとプリミティブとの関係を同定する、
方法。
【請求項５】
請求項１記載の方法であって、さらに：
プリミティブ属性へのアクセスを許可する段階と、
アプリケーションが、バーテックス位置および奥行きを含む選択されたプリミティブ属性に基づいてピクセル被覆マスクを生成することを許可する段階であって、前記ピクセル被覆マスクはピクセルがプリミティブ内にあるか、プリミティブ外にあるか、またはプリミティブのエッジ上にあるかを同定する、段階とを含む、
方法。
【請求項６】
請求項１記載の方法であって、さらに：
複数のコアによる並列処理のために諸ピクセル被覆マスクの諸タイルへのアクセスを許可する段階をさらに含む、
方法。
【請求項７】
請求項１記載の方法であって、さらに：
色、奥行きおよび座標のうちから選択されるプリミティブ・バーテックス属性に部分的に基づいて、アプリケーションが、ピクセルの色および奥行きを、そのピクセルの中心から外れた位置において補間することを許可する段階を含む、
方法。
【請求項８】
メモリと；
少なくともラスタ化器およびクリップ後ストリーム出力段を有するグラフィクス・パイプラインと；
プロセッサ実行アプリケーションであって：
前記ラスタ化器からのプリミティブ属性を記憶するために前記メモリ内の第一のバッファの部分を割り当て、
前記第一のバッファの部分に前記プリミティブ属性を記憶することを前記クリップ後ストリーム出力段に要求し、
第二のプロセッサ実行アプリケーションによる前記プリミティブ属性へのアクセスを許可する、プロセッサ実行アプリケーションとを有する、
装置。
【請求項９】
前記プリミティブ属性が画面空間バーテックス位置、バーテックスごとの奥行き情報、クリッピングされたタイル境界の識別情報および描画順のうちの一つまたは複数を含む、請求項８記載の装置。
【請求項１０】
前記プリミティブ属性が、テクスチャ座標、色、寿命、輝度および照度のうちの少なくとも一つから選択されるバーテックスごとの属性を含む、請求項８記載の装置。
【請求項１１】
請求項８記載の装置であって、前記第二のアプリケーションが：
前記ラスタ化器からのプリミティブ属性に関連付けられたピクセル被覆マスクの受領を要求し、
前記プリミティブ属性に関連付けられたピクセル被覆マスクを記憶するためにメモリ内の第二のバッファの部分を割り当て、
前記第二のバッファの前記部分にピクセル被覆マスクを記憶することを要求し、ピクセル被覆マスクは、少なくとも一つのピクセルとプリミティブとの関係を同定する、
装置。
【請求項１２】
請求項８記載の装置であって、前記第二のアプリケーションが：
バーテックス位置および奥行きを含む選択されたプリミティブ属性に基づいてピクセル被覆マスクを生成する段階であって、前記ピクセル被覆マスクはピクセルがプリミティブ内にあるか、プリミティブ外にあるか、またはプリミティブのエッジ上にあるかを同定する、段階；
複数のコアによる並列処理のために諸ピクセル被覆マスクを割り当てる段階；および
色、奥行きおよび座標のうちから選択されるプリミティブ属性に部分的に基づいて、ピクセルの色および奥行きを、そのピクセルの中心から外れた位置において補間する段階のうちの一つまたは複数の段階を実行する、
装置。
【請求項１３】
ディスプレイおよびコンピュータ・システムを有するシステムであって、前記コンピュータ・システムは：
前記ディスプレイによるレンダリングのために画像またはビデオを処理することのできるグラフィクス・パイプラインであって、少なくともラスタ化器およびクリップ後ストリーム出力段を有するグラフィクス・パイプラインと；
ロジックとを有し、前記ロジックは：
前記ラスタ化器からのプリミティブ属性を記憶するためにメモリ内の第一のバッファの部分を割り当て、
前記第一のバッファの部分に前記プリミティブ属性を記憶することを前記出力段に要求する、
システム。
【請求項１４】
前記プリミティブ属性が画面空間バーテックス位置およびバーテックスごとの奥行き情報を含む、請求項１３記載のシステム。
【請求項１５】
記憶された前記プリミティブ属性が、テクスチャ座標、色、寿命、輝度および照度のうちの少なくとも一つから選択されるバーテックスごとの属性を含む、請求項１３記載のシステム。
【請求項１６】
請求項１３記載のシステムであって、さらに：
バーテックス位置および奥行きを含む選択されたプリミティブ属性に基づいてピクセル被覆マスクを生成する段階ならびに
複数のコアによる並列処理のために諸ピクセル被覆マスクを割り当てる段階のうちの少なくとも一つの段階を実行するロジックを有する、
システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本稿に開示される主題は概括的には画像データを記憶および検索する技法に関する。
【背景技術】
【０００２】
グラフィクス処理に対する要求は、コンピュータ・ゲーム、コンピュータ・アニメーションおよび医療撮像といった領域で明白である。グラフィクス・パイプラインがグラフィクスのレンダリングを受け持っている。数多くのグラフィクス・パイプライン構成が知られている。たとえば、一般的なレンダリング・パイプライン・アーキテクチャは非特許文献１および非特許文献２に記載されている。現代のパイプラインは三つのプログラム可能な段階をもつ。一つはバーテックス・データを処理する段階（たとえばバーテックス・シェーダー（vertex  shader））、第二は幾何学的プリミティブを処理する段階（たとえば幾何シェーダー（geometry  shader））、第三はピクセル・フラグメントを処理する段階（たとえば、フラグメントまたはピクセル・シェーダー（fragment  or  pixel  shader））である。マイクロソフト〔登録商標〕DirectX  10は、幾何シェーダーおよび幾何ストリーム・アウト段を導入した。Direct3D  10システムの概観は非特許文献３で与えられている。DirectXは、入力装置、オーディオおよびビデオ／グラフィクスに関わるアプリケーション・プログラム・インターフェース（API:  application  program  interface）群である。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Segal,  M.  and  Akeley,  K.,  “The  OpenGL  Graphics  System:  A  Specification  (Version  2.0)”  (2004)
【非特許文献２】The  Microsoft  DirectX  9  Programmable  Graphics  Pipe-line,  Microsoft  Press  (2003)
【非特許文献３】D.  Blythe,  “The  Direct3D  10  System,”  Microsoft  Corporation  (2006)
【非特許文献４】Gregory  S.  Johnson,  William  R.  Mark,  and  Christopher  A.  Burns,  “The  Irregular  Z-Buffer  and  its  Application  to  Shadow  Mapping,”  The  University  of  Texas  at  Austin,  Department  of  Computer  Sciences,  Technical  Report  TR-04-09
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は従来技術の欠点を克服する。
【課題を解決するための手段】
【０００５】
本発明の課題は請求項記載の手段によって解決される。
【０００６】
本発明の実施形態は、限定ではなく例として、図面において例解されている。図面では、同様の参照符号は同様の要素を指す。
【図面の簡単な説明】
【０００７】
【図１】ある実施形態に基づく、ブロック図形式での、グラフィクス処理パイプラインの一例を描いた図である。
【図２】ピクセル被覆マスクの従来式のピクセル・シェーダー処理と、さまざまな実施形態に基づくタイル内でのピクセル被覆マスクの処理との例を描いた図である。
【図３】単一のコアがタイルを処理するときのコア利用率と、単一タイルの処理を複数のコアに分散させる前およびあとのコア利用率の例を描いた図である。
【図４】プリミティブおよびピクセル被覆マスクのカスタマイズされたラスタ化処理の例を描いた図である。
【図５】ある実施形態に基づく、バッファリングされたモードにおける、プリミティブおよびピクセル被覆マスクを記憶する仕方の流れ図である。
【図６】ある実施形態に基づく、バッファリングされたモードにおける、プリミティブおよびピクセル被覆マスクを検索する仕方の流れ図である。
【発明を実施するための形態】
【０００８】
本明細書を通じて「一つの実施形態」または「ある実施形態」への言及は、その実施形態との関連で記載される特定の機能、構造または特徴が本発明の少なくとも一つの実施形態に含まれるということを意味する。よって、本明細書の随所で「一つの実施形態では」または「ある実施形態では」といった句が現れることは、必ずしもこれらがみな同一の実施形態を指しているのではない。さらに、個別の機能、構造または特徴が一つまたは複数の実施形態において組み合わされてもよい。
【０００９】
さまざまな実施形態は、グラフィクス・パイプラインにおけるラスタ化段の最中またはその後にプリミティブ属性およびピクセル被覆情報を記憶する仕方を提供する。ポストクリップ（post-clip）・ストリーム出力段は、プリミティブおよび該プリミティブに関係したピクセル被覆マスクを記憶するためにメモリ内のバッファの諸部分を用いる。タイルとして知られる画面の部分領域は、画面空間におけるピクセル・データの空間的にコヒーレントな集まりである。プリミティブはタイルごとに順序付けられ、任意的にはピクセル被覆マスクをもって、タイル境界にクリッピングされる。ピクセル被覆マスク（pixel  coverage  mask）は、ピクセルのプリミティブとの関係を同定する。たとえば、ピクセル被覆マスクは、あるピクセルがプリミティブ内にあるか、プリミティブ外にあるか、あるいはプリミティブのエッジ上にあるかを同定する。記憶されるプリミティブおよびピクセル被覆情報は、多様な仕方で読み出され、処理されることができる。たとえば、同じタイルに関係した複数のピクセル被覆マスクが、並列にまたはシーケンスで読み出されることができ、同じタイルに関係した複数のピクセル被覆マスクが一緒に処理されることができる。同じタイルに関連する複数のピクセル被覆マスクに対してピクセル処理が実行されることができる。これにより、可能な場合には処理されたデータがピクセル被覆マスクのために再利用できる。
【００１０】
DirectX  10は、幾何シェーダーにおいてクリップされた三角形データを生成することを規定している。DirectX  10は、ピクセル・シェーダーにおいてはスカラー・モードで、被覆されたピクセル被覆マスクを露わにするのみである。これに対し、さまざまな実施形態は、プリミティブごとのピクセル被覆マスクを、単一命令複数データ（SIMD:  Single  Instruction,  Multiple  Data）ベクトル化コードによってまたは複数のコアもしくはスレッド上でいくつかのタスクを並列に実行することによって、諸タイル全体を並列に処理するために利用可能にする。
【００１１】
図１は、ある実施形態に基づく、ブロック図形式での、グラフィクス処理パイプライン１００の例を描いている。さまざまな実施形態において、パイプライン１００は、少なくともマイクロソフトのDirectX  10またはOpenGL  2.1に基づいてプログラム可能である。さまざまな実施形態において、すべての段階は、一つまたは複数のアプリケーション・プログラム・インターフェース（API）を使って構成されることができる。描画プリミティブ（たとえば、三角形、長方形、正方形、直線、点または少なくとも一つのバーテックスをもつ形）がこのパイプラインの上部から流れ込み、コンピュータ画面上での描画のために画面空間のピクセルに変換およびラスタ化される。
【００１２】
入力集合器（input-assembler）段１０２は、８個までのバーテックス・バッファ入力ストリームからバーテックス・データを集める。他の数のバーテックス・バッファ入力ストリームを集めることもできる。さまざまな実施形態において、入力集合器段１０２は、「インスタンス生成（instancing）」と呼ばれるプロセスをもサポートしていてもよい。インスタンス生成では、入力集合器段１０２は一回の描画コールだけでオブジェクトを何回か複製する。
【００１３】
バーテックス・シェーダー（VS）段１０４は、バーテックスをオブジェクト空間からクリップ空間に変換する。VS段１０４は、単一のバーテックスを読んで単一の変換されたバーテックスを出力として生じる。
【００１４】
幾何シェーダー段１０６は、単一プリミティブのバーテックスを受け取り、ゼロ個以上のプリミティブのバーテックスを生成する。幾何シェーダー段１０６は、プリミティブおよび線を、バーテックスの接続されたストリップとして出力する。場合によっては、幾何シェーダー段１０６は、データ増幅と呼ばれるプロセスにおいて、前記バーテックス・シェーダー段からの各バーテックスから1024個までのバーテックスを放出する。また、場合によっては、幾何シェーダー段１０６は、バーテックス・シェーダー段１０４から一群のバーテックスを受け、それらを組み合わせてより少数のバーテックスを放出する。
【００１５】
ストリーム出力段１０８は、幾何シェーダー段１０６からの幾何データを直接、メモリ１５０内のフレーム・バッファの一部分に転送する。データがストリーム出力段１０８からフレーム・バッファに移ったのち、データはさらなる処理のためにパイプライン中の任意の点に戻ることができる。たとえば、ストリーム出力段１０８は、幾何シェーダー段１０６によって出力されたバーテックス情報の部分集合を、シーケンス順でメモリ１５０内の出力バッファにコピーしてもよい。
【００１６】
ラスタ化段１１０は、クリッピング（clipping）、選別（culling）、フラグメント生成（fragment  generation）、切り取り（scissoring）、透視分割（perspective  dividing）、ビューポート変換（viewport  transformation）、プリミティブ・セットアップ（primitive  setup）および奥行きオフセット（depth  offset）のような動作を実行する。さらに、ラスタ化段１１０は：並列処理のために画像空間プリミティブをタイル（たとえば画面の部分領域）と関連付ける；プリミティブをタイル（または単一タイルの場合は画面ビューポート全体）の範囲にクリッピングする；各タイル内においてプリミティブが接触するピクセルのリストであるピクセル被覆マスクを生成する；および／または接触する各ピクセルについて表面および材質属性の補間された値を生成する、のうちの任意のものまたは全部を実行できる。
【００１７】
ラスタ化段１１０は、少なくとも一つの出力ストリームを与える。該出力ストリームは少なくとも二つのサブストリームを含む：一つはプリミティブについてのサブストリーム、一つはピクセル被覆マスクについてのサブストリームである。これらのサブストリームは、異なるレートで出力されることができる。ストリーミングされたデータは、利用可能になるとすぐに各ラスタ化されたタイルについて独立して消費されることができる。これは、他のタイルについてのストリーム・データがまだグラフィクス・パイプラインにおいて生成中の間に作業が異なるスレッドに割り当てられて並列に処理されることができるマルチスレッド環境において有利である。
【００１８】
ピクセルのパイプライン順序処理（pipeline  ordered  processing）に関連して、クリップ後ストリーム出力段１１２が、パイプライン中でラスタ化段１１０のあと、ピクセル・シェーディング段１１４の前に位置される。クリップ後ストリーム出力段１１２は、プリミティブ・ストリームを、プリミティブ・メモリ領域１５２の一部分に記憶し、ピクセル被覆マスクをタイル・メモリ領域１５４の一部分に記憶する。場合によっては、ラスタ化段１１０によって生成されるピクセル被覆マスクは、メモリ領域１５４内に記憶されない。そのような場合、メモリ領域１５４は割り当てられない。
【００１９】
さまざまな実施形態において、プリミティブ・ストリームは、クリッピングされた画面空間プリミティブを含み、描画順になっているが、必ずしもタイルごとにグループ化されてはいない。プリミティブ・ストリームは、カスタム補間のために、プリミティブの画面空間バーテックス位置およびバーテックスごとの奥行き情報を含む。プリミティブについての他の、バーテックスごとの属性は、テクスチャ座標、色、寿命、輝度（radiance）、照度（irradiance）および奥行きを含み、メモリ・フットプリント、機能およびパフォーマンスについてのアプリケーション要求に依存して、そうした属性もストリームに含められることができる。
【００２０】
さまざまな実施形態において、ピクセル被覆ストリームはプリミティブを参照し、クリッピングされたプリミティブごとにグループ化される。ピクセル被覆マスクは、どの画面ピクセルが対応するプリミティブによって接触されるかを定義する。いくつかの実施形態では、このピクセル被覆マスク・ストリームは記憶されない。その代わり、カスタムのアプリケーション側被覆マスク生成コードが、ピクセル被覆マスクを生成する。ピクセル被覆マスクを生成するアプリケーションは、プリミティブのバーテックス位置を知っており、そのバーテックス位置に基づいてピクセルがプリミティブと関連するかどうかを判定する。そのようなアプリケーションは、メモリ１５０内のバッファを割り当て、メモリ内の割り当てられた領域にピクセル被覆マスクを記憶することができる。
【００２１】
さまざまな実施形態において、クリップ後ストリーム出力段１１２は、プリミティブ・データおよび任意的にピクセル被覆データを可変サイズのメモリ・バッファに、ストリーミング・モードまたはバッファリングされるモードで、それらのプリミティブおよびピクセル被覆ストリームの描画順のシーケンシャルな消費を可能にするリンク・リスト表現（linked-list  representation）をもって記憶する。ピクセル被覆マスクが生成される場合、被覆ストリーム・データ構造は、プリミティブ・ストリーム内のその関連付けられたプリミティブのデータ構造へのポインタを含む。
【００２２】
ストリーミング・モードでは、プリミティブ・データは、タイルごとのコールバック関数においてアプリケーションによって処理される。ストリーミング・モードでは、ストリームの一部のみ（たとえばタイルのサイズ）がアプリケーションにとってすぐ利用可能である。ストリーミング・モードでは、プリミティブおよびピクセル被覆データは、処理後、上書きされることができる。アプリケーションがストリームのそのタイル・サイズの部分の処理を終えたのち、ストリームのその部分は上書きされるべく利用可能である。このモードは、メモリ消費がより少なく、マルチスレッド環境において準備ができるとすぐにデータを処理することを可能にするが、複数のタイルを横断しての作業分担（work  sharing）は可能にしない。
【００２３】
バッファリングされるモードでは、画面全体についてのデータがバッファ内に記憶され、ストリーム全体（たとえば全部のタイルまたは特定の数もしくは領域のタイル）が生成されたのちにアプリケーションによってアクセス可能となる。したがって、バッファリング・モードでは、フレームの全タイルのピクセル被覆マスクがタイル・メモリ領域１５４に記憶される。タイル・メモリ領域１５４はクリップ後出力段１１２によって埋められ、あるフレームの諸タイルのピクセル被覆マスクは、フレームの全タイルのピクセル被覆マスクが記憶されているまたはタイル・メモリ領域１５４が充填されている場合に、処理のために利用可能である。すると、一つまたは複数のアプリケーションはその後、全データをいっぺんに処理できる。
【００２４】
ストリーミング・モードおよびバッファリング・モードのいずれでも、データは、グラフィクス・パイプライン上で管理されているメモリ資源にストリーム・アウトされ、直接プログラム可能ではなく、アプリケーションにとって直接アクセス可能ではない。データは、タイルごとのコールバック関数においてアプリケーション側で処理されることができる。データは、その後のレンダリング・パスにおいて、アプリケーション側の介在なしにパイプライン中にストリームし戻される、あるいはアプリケーションによって非同期的に読まれることができるようステージング（staging）資源にコピーされることができる。グラフィクス・パイプラインは管理されるストリーム・メモリ資源依存性について知っているので、グラフィクス・パイプラインはいかなる仕方でデータ・ストリームの生成をスケジュールするのも自由である。メモリ資源依存性は、ストリーム・アウト・データがその後のレンダリング・パスにおいて使用される場合、あるいはデータがアプリケーションによる処理が終わったあと破棄されることができる場合に起こりうる。バッファリング・モードでは、アプリケーションは、資源上へのロックまたは非同期コピーのいずれかを要求することによってデータにアクセスできる。
【００２５】
ピクセル・シェーダー段１１４は、各単一ピクセル・フラグメントの属性を読み、色および奥行き値をもつ出力フラグメントを生成する。
【００２６】
出力併合段１１６は、ピクセル・シェーダー段１１４からのフラグメントに対して、ステンシルおよび奥行き試験を実行する。場合によっては、出力併合段１１６はレンダー・ターゲット・ブレンディングを実行する。
【００２７】
メモリ１５０は：これに限られないがランダム・アクセス・メモリ（RAM）、動的ランダム・アクセス・メモリ（DRAM）、静的RAM（SRAM）といった揮発性メモリ・デバイスまたは半導体ベースのメモリもしくは磁気メモリの他の任意の型の任意の組み合わせとして実装できる。
【００２８】
図２は、従来式のピクセル・シェーダーのピクセル処理およびさまざまな実施形態に基づくタイル内のピクセルの処理の例を描いている。既知のグラフィクス・パイプラインにおける従来式のピクセル・シェーダーの処理については、プリミティブからのピクセルは、処理のために複数のピクセル・シェーダーに分配される。しかしながら、さまざまな実施形態では、同じタイルに関係するピクセルが処理のために利用可能になる。同じタイルに関係するピクセルの処理は、従来式のピクセル・シェーダーによるピクセルの処理に対していくつかの利点を提供しうるが、そのような利点はどの実施形態についても必須の特徴ではない。第一に、単独プリミティブに共通の多くの計算は、事前計算して、タイル内の全ピクセルについて再利用できる。そのような計算の例は、三角形内試験および早期アウト戦略のための補間行列の計算である。第二に、プリミティブごとの処理は、隣接ピクセル・データを通信する柔軟性を提供し、それによりアプリケーション側でのブルーム（bloom）および奥行き（depth-of-field）といった画面空間効果を可能にする。
【００２９】
既知のグラフィクス・パイプラインでは、タイル処理は、幾何シェーダーまたはピクセル・シェーダー内の単一コアに制約される。しかしながら、さまざまな実施形態は、複数のコアがプリミティブおよびタイルのピクセルを並列に処理することを許容する。さまざまな実施形態では、ラスタ化後のプリミティブおよびピクセルの利用可能性が、ピクチャーの部分領域の処理のようなプリミティブのタイル化された処理を許容する。さらに、ラスタ化後のプリミティブおよびピクセルの利用可能性は、アプリケーション側で作業を並列化して再分配できるようにする。たとえば、複数コアがプリミティブおよびピクセルを並列に処理できる。結果として、ラスタ化後のプリミティブおよびピクセルの利用可能性は、従来式のグラフィクス・パイプラインに比べ、かなりのパフォーマンス上の改善を可能にする。
【００３０】
タイル順の（tile-ordered）アクセス・パターンは、画面空間における空間的コヒーレンスをもつ傾向がある多くのグラフィクス処理技法のための著しいパフォーマンス上の利点を可能にする。そのような順序付けは、グラフィクス・キャッシュの最適な使用を可能にし、キャッシュ・ミスフェッチ・パフォーマンス・ペナルティを回避する。
【００３１】
図３は、単一のコアが諸タイルを処理するときのコア利用率および単一タイルの処理の複数コアへの分配後のコア利用率の例を描いている。二つの図は、時間ごとのベクトル利用率（vector  utilization）を表している。グラフ３０２は、各タイルについての作業が単一コアに制約される場合を示している。いくつかのコアはすぐアイドルになる一方、他のコアは作業集約的なタイルについてまだ処理を続けている。グラフ３０４はそれらのタイルの作業が複数コアを横断して再分配されて、時間がたってもずっとよいコア利用率を達成していることを示している。
【００３２】
さまざまな実施形態において、ラスタ化後のプリミティブおよびピクセルの利用可能性は、プリミティブおよびピクセル被覆マスクのカスタム化された処理を可能にする。画面の一部がレンダリングされるたびにコールバック・ルーチンが呼ばれることができる。例示的なコールバック・ルーチンは、タイル・レンダリング動作である。ストリーミング・モードでは、新しいグラフィクス機能および効果は、コールバック・ルーチンに、プリミティブおよびピクセルのカスタム化されたラスタ化処理を実装するコードを追加することによって追加できる。
【００３３】
図４は、プリミティブおよびピクセルのカスタム化されたラスタ化処理の例を描いている。たとえば、カスタム化されたラスタ化処理は不規則ラスタ化を含むことができる。不規則ラスタ化は、画像をレンダリングする際に、2Dでないグリッド・データ構造を利用するラスタ化を含む。たとえば、不規則なラスタ化およびシャドーイング（shadowing）アプリケーションについて、アプリケーションはカスタム補間技法を実装できる。プリミティブ固有の表面および材質属性が画面バーテックスごとに（per-screen-vertex）与えられ、プリミティブ・バーテックス値が使用のために利用可能だからである。カスタム補間は、プリミティブ・バーテックス値に基づいて、中心を外れたピクセル位置において、表面属性値を決定することを含みうる。このプリミティブ・バーテックス・データは、従来式のピクセル・シェーダーにおいては利用可能でない。従来式のピクセル・シェーダーはピクセルの中心において補間された値を与えられるだけだからである。カスタム補間は、ストリーム・アウトを使うアプリケーションによってなされ、よってそれらの結果は、グラフィクス・パイプラインではなく、前記アプリケーションによって使用されうる。
【００３４】
第二の例として、アプリケーションは、ラスタ化器における通常の被覆マスク計算をやめ、その代わりにカスタム被覆マスクを計算することを選ぶことができる。被覆マスクは、どのピクセルがプリミティブによって触れられるかを定義するマスクである。たとえば、設計者は、ピクセルがプリミティブに接触するかどうかを判定するためにどんな規則を適用するかを決定しうる。たとえば、カスタム被覆マスクは、ピクセルがプリミティブにかろうじて接触するがピクセルの内部ではない場合に、プリミティブがピクセルに接触することを許容してもよい。アプリケーションは、そのようなカスタム被覆マスクを使うことができる。
【００３５】
不規則Zバッファが非特許文献４の論文に記載されている。その論文の図３では、黄色のドットが、色および奥行きといったプリミティブの属性が計算される、ピクセル内の位置を示している。この計算は「補間」と呼ばれる。この論文の図３を参照すると、古典的なグラフィクス・パイプラインでは、奥行きはピクセル中心において計算される。対照的に、不規則Zバッファについて、奥行き（「Z」としても知られる）は任意の位置で決定される。さまざまな実施形態において、プリミティブおよびピクセル被覆マスクの記憶は、アプリケーションが任意の位置で補間することを許容し、これは、不規則Zバッファの実装において使用される。
【００３６】
図５は、ある実施形態に基づく、バッファリング・モードにおいてプリミティブおよびピクセルを記憶する仕方を描いたプロセス５００の流れ図を描いている。図５のプロセスは、プロセッサによって実行されるアプリケーションによって実行されることができる。ブロック５０２は、タイルに関連付けられたピクセル被覆マスクを記憶するためのメモリ中のタイル・バッファと、プリミティブを記憶するためのメモリ中のプリミティブ・バッファとを割り当てることを含む。ブロック５０２は、アプリケーションがカスタムのピクセル被覆マスクを生成する場合には実行される必要はない。たとえば、タイルに関連付けられたピクセル被覆マスクを記憶するためにメモリ中にタイル・バッファを割り当てることは、アプリケーションがカスタムのピクセル被覆マスクを生成する場合には実行されなくてもよい。アプリケーションがカスタムのピクセル被覆マスクを生成する場合には、アプリケーションはカスタムのピクセル被覆マスクを記憶するためのバッファを割り当てうる。たとえば、タイルは4×4のピクセル領域でありうる。たとえば、下記の擬似コードにおいて、命令SetFrontEndSOTargetsがバッファを割り当てる。
【００３７】
ブロック５０４は、ラスタ化器からのプリミティブ属性をプリミティブ・バッファに記憶し、ラスタ化器からのプリミティブに関連付けられたピクセル被覆マスクをタイル・バッファに記憶するためのコールを発することを含む。ラスタ化器からのプリミティブに関連付けられたピクセル被覆マスクをタイル・バッファに記憶するためのコールを発することは、アプリケーションがカスタムのピクセル被覆マスクを生成する場合には、実行されなくてもよい。
【００３８】
ブロック５０６は、ピクセル被覆マスクおよびプリミティブ属性の割り当てられたバッファへの記憶を無効にすることを含む。たとえば、下記の擬似コードにおいて、命令FrontEndSOSetTargetsが、割り当てられたバッファへの記憶を無効にする。ピクセル被覆マスクの割り当てられたバッファへの記憶を無効にすることは、アプリケーションがカスタムのピクセル被覆マスクを生成する場合には実行されなくてもよい。
【００３９】
図６は、ある実施形態に基づく、プリミティブ属性およびピクセル被覆マスクにアクセスする仕方を描いたプロセス６００の流れ図を描いている。プロセス６００は、ホスト側アプリケーションによって実行できる。ブロック６０２は、プリミティブ属性およびタイル・バッファの特性を決定することを含む。たとえば、ブロック６０２は、各バッファに関連付けられたオーバーフロー・フラグを取得し、タイル・バッファに記憶されたタイルの数を決定することを含みうる。下記の擬似コードでは、命令Query_GetDataがオーバーフロー・フラグを取得する。
【００４０】
ブロック６０４は、タイル・バッファおよびプリミティブ・バッファのオーバーフローが起こるかどうかを判定することを含む。たとえば、ブロック６０４は、オーバーフロー・フラグに基づいてそれらのバッファのオーバーフローを識別することを含みうる。オーバーフローが検出された場合、プロセスは終了できる。さまざまな実施形態において、プロセスは、バッファのオーバーフローが起こらないよう、タイルおよびプリミティブ・バッファ内の追加的メモリを求めてもよい。該追加的メモリは、オーバーフローしたバッファについて割り当てられたメモリよりも多くてもよい。たとえば、追加的メモリは、タイル・バッファ内に記憶されるよりも多くのタイルの記憶およびプリミティブ・バッファ内に記憶されているよりも多くのプリミティブの記憶を許容してもよい。たとえば、下記の擬似コードでは、命令SetFrontEndSOTargetsがバッファのサイズを割り当てる。したがって、命令SetFrontEndSOTargetsの次の実行では、バッファのサイズは変更されることができる。
【００４１】
ブロック６０６は、プリミティブ属性および関連するピクセル被覆マスクを記憶するバッファまたはバッファの一部のメモリ・ロックを要求することを含む。メモリ・ロックは、他のプロセスを、対象バッファ内のデータを上書きすることから排除することに関わりうる。下記の擬似コードでは、命令ViewLockはタイル・バッファの一部のロックを引き起こす。
【００４２】
ブロック６０８は、記憶されているプリミティブ属性および関連付けられたピクセル被覆マスクを取得することを含む。取得されたプリミティブ・データは、いかなる仕方で処理するために解放されることもできる。たとえば、図４との関連で述べたプロセスがプリミティブおよびピクセル・データを処理できる。
【００４３】
ブロック６１０は、ロックされたバッファ部分のメモリ・ロックを解放することを含む。下記の擬似コードでは、命令ViewUnlockはバッファのロックされた部分を解放して、バッファが他のプロセスから読まれ、他のプロセスによって書き込まれることができるようにする。
【実施例】
【００４４】
プリミティブおよびピクセルを記憶し（図５）、記憶されたプリミティブおよびピクセルにアクセスする（図６）方法についての擬似コードを下記に与えておく。
【００４５】
【表１】
2011044143.tif 000003
【００４６】
【表２】
2011044143.tif 000004
【００４７】
【表３】
2011044143.tif 000005
【００４８】
【表４】
2011044143.tif 000006
本発明の諸実施形態は：マザーボードを使って相互接続された一つまたは複数のマイクロチップまたは集積回路、結線論理、メモリ・デバイスによって記憶されマイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路（ASIC）および／または現場プログラム可能なゲートアレイ（FPGA）のうちの任意のものまたは組み合わせとして実装されうる。用語「論理（logic）」は、例として、ソフトウェアまたはハードウェアおよび／またはソフトウェアとハードウェアの組み合わせを含みうる。
【００４９】
本稿に記載されたグラフィクスおよび／またはビデオ処理技法は、さまざまなハードウェア・アーキテクチャにおいて実装されうる。たとえば、グラフィクスおよび／またはビデオ機能性はチップセット内に統合されてもよい。あるいはまた、離散的なグラフィクスおよび／またはビデオ・プロセッサが使用されてもよい。さらにもう一つの実施形態としては、グラフィクスおよび／またはビデオ機能は、マルチコア・プロセッサを含む汎用プロセッサによって実装されてもよい。さらなる実施形態では、それらの機能は、ポータブル・モバイル・コンピュータまたは携帯電話のような、グラフィクス・パイプラインによって処理された画像もしくはビデオを表示する表示装置をもつ消費者電子装置において実装されてもよい。
【００５０】
本発明の諸実施形態は、たとえば、コンピュータ、コンピュータのネットワークまたは他の電子装置のような一つまたは複数の機械によって実行されたときに該一つまたは複数の機械に本発明の実施形態に基づく動作を実行させうる機械実行可能命令が格納されている一つまたは複数の機械可読媒体を含みうるコンピュータ・プログラム・プロダクトとして提供されてもよい。機械可読媒体は、これに限られないが、フロッピー（登録商標）ディスケット、光ディスク、CD-ROM（コンパクトディスクを利用した読み出し専用メモリ）および光磁気ディスク、ROM（読み出し専用メモリ）、RAM（ランダム・アクセス・メモリ）、EPROM（消去可能なプログラム可能型読み出し専用メモリ）、EEPROM（電気的に消去可能なプログラム可能型読み出し専用メモリ）、磁気もしくは光カード、フラッシュ・メモリまたは機械実行可能命令を記憶するのに好適な他の型の媒体／機械可読媒体を含みうる。
【００５１】
図面および以上の記述は、本発明の例を与えるものである。いくつかの別個の機能要素として描かれていても、当業者はそのような要素の一つまたは複数が単一の機能要素に組み合わされてもよいことを認識するであろう。あるいはまた、ある種の要素が複数の機能要素に分割されてもよい。一つの実施形態からの要素が別の実施形態に加えられてもよい。たとえば、本稿に記載されるプロセスの順序は変更されてもよく、本稿に記載される仕方に限定されるものではない。さらに、いかなる流れ図の動作も、図示した順序に実装される必要はないし、すべての工程が必ずしも実行される必要はない。また、他の工程に依存しないような工程は、該他の工程と並行して実行されてもよい。ただし、本発明の範囲は、これらの個別的な例によって決して限定されるものではない。本明細書において明示的に与えられているか否かによらず、構造、大きさおよび材料の使用における相違のような数多くの変形が可能である。本発明の範囲は、少なくとも、付属の請求項によって与えられるのと同じ広さをもつものである。
【符号の説明】
【００５２】
１０２  入力集合段
１０４  バーテックス・シェーダー段
１０６  幾何シェーダー段
１０８  ストリーム出力段
１１０  ラスタ化段
１１２  クリップ後ストリーム出力段
１１４  ピクセル・シェーダー段
１１６  出力マージャー段
１５０  メモリ資源
１５２  プリミティブ・メモリ領域
１５４  タイル・メモリ領域
５０２  タイルに関連付けられたピクセル被覆マスクを記憶するためのメモリ中のタイル・バッファと、プリミティブ属性を記憶するためのメモリ中のプリミティブ・バッファとを割り当てる
５０４  プリミティブをプリミティブ・メモリに記憶し、プリミティブ属性に関連付けられたピクセル被覆マスクをタイル・バッファに記憶するためのコールを発する
５０６  タイル・バッファおよびプリミティブ・バッファへの記憶を無効にする
６０２  タイル・バッファおよびプリミティブ・バッファの特性を決定
６０４  タイル・バッファおよびプリミティブ・バッファのオーバーフロー？
６０６  プリミティブ属性および関連するピクセル被覆マスクを記憶するバッファのロックを要求
６０８  記憶されているプリミティブ属性および関連付けられたピクセル被覆マスクを取得
６１０  プリミティブ属性および関連するピクセル被覆マスクを記憶するバッファのアンロックを要求
【図１】
2011044143.tif 000007
【図２】
2011044143.tif 000008
【図３】
2011044143.tif 000009
【図４】
2011044143.tif 000010
【図５】
2011044143.tif 000011
【図６】
2011044143.tif 000012