(58)【調査した分野】(Int.Cl.,DB名)
前記トレーシングは、各レイグループのレイを、これらのレイを有する前記レイグループに関連する前記アクセラレイション構造体の前記点のそれぞれに基づいて識別される前記階層的なアクセラレイション構造体の一連の要素と同時に、テストすることによって実施される、
請求項1に記載の装置によって実施される方法。
前記階層的なアクセラレイション構造体の前記点は、軸方向整列バウンディングボックス、球体及びkDツリーの平面を切断することによって定められる容量からの選択を含む、
請求項1に記載の装置によって実施される方法。
前記プロセッサは、前記複数の第2コレクション及び前記第1コレクションのレイに関連する前記シーンの領域に関する識別子に基づいて参照可能な複数のロケーションにメモリを論理的に分離するためのものである、
ことを特徴とする請求項6に記載の装置。
前記プロセッサは、前記第1のコレクション及び前記複数の第2のコレクションの各々にある前記レイの識別子を、そのようなレイコレクションに関連する前記シーンの前記領域に関する前記識別子のハッシュ値に基づいて識別可能な各コレクションに対するそれぞれのロケーションで、前記メモリに格納するためのものである、
ことを特徴とする請求項7に記載の装置。
前記プロセッサは、前記シーンの領域に関する前記識別子をハッシュして、前記シーンの当該領域に関連するレイのコレクションが格納され得る前記メモリの候補ロケーションを識別するように動作する、
ことを特徴とする請求項7に記載の装置。
前記プロセッサは、コレクション全体及び、全体より少ないコレクションの混合を選択することによって、前記第1のコレクション及び前記複数の第2のコレクションのレイの交差テストをスケジューリングするためのものである、
ことを特徴とする請求項6に記載の装置。
前記プロセッサは、前記レイのコレクションを格納するためのメモリにおける空間の消費量が使用量基準を超えることを決定することに応答して、全体より少ないコレクションの数を増やす、
ことを特徴とする請求項10に記載の装置。
前記プロセッサは、選択されたコレクション全体及び全体より少ないコレクションの混合をコレクションの準備完了リストに出力するためのものであり、前記準備完了リストからコレクションのレイの識別子を読み取り、前記テスタを備える複数のテストセル間にレイの前記識別子を分散するためのアービターをさらに備える、
ことを特徴とする請求項10に記載の装置。
【発明を実施するための形態】
【0037】
以下の説明は、当業者が本発明の様々な態様を構成し、使用することを可能にさせるため提示されている。具体的な技術、実施、および用途の説明は単に実施例として与えられている。本明細書中に記載された実施例に対する種々の変更は当業者に明白であり、本明細書中に記載された一般的な原理は、本発明の範囲から逸脱することなく他の実施例および用途に適用される。本説明は、最初に、
図2の実施例の場合と同様に、ジオメトリ・アクセラレイション・データを使って抽出できる3次元(3−D)シーン(
図1)の実施例に関係する態様を紹介することにより進む。このような3次元シーンは、図示され説明された実施例によるシステムおよび方法を使って2次元表現としてレンダリングできる。
【0038】
背景技術の欄に紹介されているように、3次元シーンは、表示用の2次元表現に変換されるべきである。このような変換は、シーンが観察されるカメラ位置を選択することを必要とする。カメラ位置は、シーンの観察者(例えば、ゲームをする人、動画を見る人など)の位置を示すことがよくある。2次元表現は、通常は、2次元表現が所望の解像度で画素のアレイを含むように、カメラとシーンとの間の平面位置にある。各画素の色ベクトルはレンダリングを通じて決定される。レイトレーシング中に、レイは、所望の点で2次元表現の平面と交差するように、最初にカメラ位置から放たれることが可能であり、その後に3次元シーンに続く。レイが2次元表現と交差する位置は、そのレイと関連付けられたデータ構造体の中に保持される。
【0039】
カメラ位置は、必ずしも空間内に定義された単一の点でなくてもよく、その代わりに、カメラ位置は、レイがカメラ位置の範囲内であるとみなされる数の点から放たれるように、拡散してもよい。各レイは、サンプルと呼ばれることもある画素の範囲内で2次元表現と交差する。いくつかの実施では、レイが画素と交差するロケーションのより正確な位置が記録され、色のより正確な補間および混合を可能にする。
【0040】
説明を明確にするため、ある一定のタイプの物体のデータ、例えば、プリミティブ(例えば、三角形の3頂点の座標)は、物体のデータを参照するのではなく、物体自体として簡単に記載されることがよくある。例えば、「プリミティブをフェッチする」というとき、そのプリミティブの物理的な実現ではなく、そのプリミティブを表すデータがフェッチされると理解されるべきである。しかし、特にレイに関して、本開示は、レイの識別子とレイ自体を定義するデータとを区別し、用語「レイ」が使用されるとき、文脈がそうではないことを明らかにしない限り、レイIDとレイを定義するデータとの両方の総称であるとみなされる。
【0041】
3次元シーンの中の現実的、かつ、精細な物体の輪郭の表現は、通常は、物体の表面を近似する多数の小さい幾何学的プリミティブを設けることによって行われる(すなわち、ワイヤ・フレーム・モデル)。したがって、より複雑な物体は、より単純な物体より多くのプリミティブおよび小さいプリミティブを使って表現されることが必要である。より高い解像度という利点を与えるが、特に、複雑なシーンは多数のオブジェクトを有することができるので、(上述のように、および下記にさらに詳細に示される)レイと多数のプリミティブとの間で交差テストを実行することは計算集約的である。交差テストのためシーンに何らかの外部からの体系化を加えることなく、各レイは各プリミティブとの交差をテストされるべきことになり、非常に遅い交差テストをもたらすことになる。したがって、レイ毎に必要とされるレイ/プリミティブ交差テストの回数を削減する方法は、シーンの中のレイ交差テストを加速するために役立つ。このような交差テストの回数を削減する一つの方法は、ある程度の数のプリミティブの表面を抽出する過剰なバウンディング面を設けることである。レイは、各レイと交差テストするプリミティブのより小さいサブセットを特定するため、最初にバウンディング面に対して交差テスト可能である。このようなバウンディング面形状は種々の形状で設けることが可能である。本開示では、このようなバウンディング面要素のコレクションはジオメトリ・アクセラレイション・データ(以下、GADと称される)と称される。
【0042】
GAD体系化、要素、および用途のより広範囲にわたる取り扱いは、2007年9月17日付で出願され、参照により本明細書に組み込まれる米国特許出願第11/856,612号に見られる。よって、GADのより簡便な取り扱いが前後関係のためここに記載され、これらの問題に関するさらなる詳細は上述の参照された出願から入手できる。
【0043】
紹介されているように、GAD要素は、一般に、幾何学的形状の表面とレイとが交差しないことが、レイがその形状によって境界を定められたいずれのプリミティブとも交差しないことを示すように、3次元空間の中で、プリミティブのそれぞれのコレクションを囲む幾何学的形状を含む。GAD要素は、球体、軸方向整列バウンディングボックス、kdツリー、オクツリー、および他の種類のバウンディングボリューム階層を含むことが可能であり、したがって、本開示による実施は、kdツリーのカッティングプレーン法、または、1若しくはそれ以上のシーンプリミティブの境界を定めるバウンディング面を見出し、バウンディング面の広がりを特定する別の方法のようなバウンディングスキームを使用可能である。要約すると、GAD要素は、主に、レイとプリミティブとの間の交差をより迅速に特定するためプリミティブの抽出に役立つので、GAD要素は、好ましくは、レイとの交差を容易にテストできる形状である。
【0044】
GAD要素は互いに相互に関係付け可能である。GAD要素の相互関係付けは、本明細書中では、GAD要素を表現するノードと、2つのGAD要素の間の相互関係付けを表現するエッジとを含むグラフであることが可能である。1対の要素がエッジによって接続される場合、エッジは、ノードのうちの一方がもう一方とは異なる相対的な粒度を有することを示すことがあり、すなわち、そのエッジによって接続されたノードのうちの一方はもう一方のノードより多いまたは少ないプリミティブの境界を定めるエッジによって接続されることを意味することが可能である。いくつかの場合、グラフは、グラフに方向付きであるように階層的であることが可能であり、グラフは親ノードから子ノードの順序にトラバース可能であり、残りの境界が定められたプリミティブを途中で狭小化する。いくつかの場合、グラフは、所定のGAD要素が他のGAD要素の境界を定める場合に、その所定のGAD要素がプリミティブの境界を直接的に定めることがないように(すなわち、均一なGAD構造では、プリミティブがリーフノードGAD要素によって直接的に境界を定められ、非リーフノードがプリミティブではなく他のGAD要素の境界を直接的に定めるように)均一なGAD要素を有することが可能である。
【0045】
GAD要素のグラフは、各GAD要素によって境界を定められたある程度の数の要素および/またはプリミティブにおいてある均一性を維持することを目標として構築可能である。所定のシーンは、このような目標が達成できるまで細分可能である。
【0046】
以下の説明中、所定のGAD要素と交差することが決定されたレイに基づいて、他のどのGAD要素が呼応して次にテストされるべきであるかを決定する仕組みが存在するとされる。階層グラフの実施例では、したがって、次にテストされる要素は、一般に、テストされたノードの子ノードである。
【0047】
ある程度の数の実施例において実施されるGADの一用法は、本明細書中では、レイが所定のGAD要素と交差することが見出されたとき、このレイが同様にこの要素と交差することが決定されている他のレイと共に収集されることである。ある程度の数のレイが収集されたとき、この要素に接続されているGAD要素のストリームは、主メモリからフェッチされ、各テスタが異なる収集されたレイを有するテスタを通じてストリーム化される。したがって、各テスタは、各テスタのレイをローカル高速メモリの中に固定的に維持し、一方、ジオメトリは、必要とされるときに、遅いメモリからフェッチされ、書き換えが許可される。より一般的には、この説明は、コンピューティング資源が、このようなレイと幾何学的形状(GAD要素およびプリミティブ)との交差を検出するためレイを処理し、最終的に、どのレイがどのプリミティブにヒットするかを特定するように体系化可能である方法についての一連の実施例を提供する。
【0048】
これらの実施例が実施可能である他の態様は、(1)交差テストからシェーディングへの出力のためのキューが設けられていること、(2)そのレイデータが計算資源にある程度までローカライズされ、ある一定のレイを幾何学的形状とテストすることが決定されたときにそれらの幾何学的形状がより遅いメモリからフェッチされること、および、(3)その交差テストが交差テストを実行する計算資源へのレイを(レイ識別子を使用して)特定することにより駆動され、各計算資源に各計算資源のローカライズされた(複数の)メモリから特定された(複数の)レイに対応するデータをフェッチさせることと、のうちのいずれかを含む。
【0049】
以下の説明は、レイトレーシングを使用して3次元シーンの2次元表現をレンダリングするシステムおよびシステムの一部の実施例を提示する。このようなシステムの2つの主な機能コンポーネントは、(1)交差を特定するレイをトレーシングすること、および、(2)特定された交差をシェーディングすることである。
【0050】
図1は、プリミティブで構成されたシーンをレイトレーシングする際に用いられるシステムの態様を図示する。一般に、
図1および他の図におけるいずれかの機能ユニットのいずれかの機能または役目は、複数のハードウェアユニット、または、ソフトウェア部品、ソフトウェアサブルーチンで実施されることがあり、異なるコンピュータで実行されることさえある。いくつかの場合、このような実施は、システム機能および性能に影響を与えることが可能であるので、より具体的に記載されている。
【0051】
図1は、ジオメトリユニット101と、交差処理ユニット102と、サンプル処理資源110と、フレームバッファ111と、GAD要素およびプリミティブを含むジオメトリ形状(プリミティブおよびGAD記憶装置103)、サンプル106、レイ・シェーディング・データ107、および、テクスチャデータ108を格納するため動作可能であるか、若しくは、構成され、または、格納しているメモリ資源139と、を図示する。ジオメトリユニット101は、レンダリングされるべきシーンの記述を入力し、プリミティブ、および、プリミティブの境界を定めるGAD要素を含むアクセラレイション構造を出力する。交差処理102は、レイとプリミティブとの間の特定された交差をシェードし、テクスチャ、シェーディングコード、および、図示されたデータ源から取得される他のサンプル情報のような入力を使用する。交差処理102の出力は、レンダリングされているシーンの2次元表現を生成する際に使用される新しいレイ(後述される)およびカラー情報を含む。これらの機能コンポーネントのすべては、破線185によって全体的に指定された1若しくはそれ以上のホスト処理資源で実施可能である。
【0052】
上述されているように、特定されたレイ/プリミティブ交差のシェーディング中に、交差処理102は、交差テストされるべき新しいレイを発生可能である。ドライバ188は、交差処理102とインターフェイスをとって、これらの新しいレイを受信し、交差処理資源102と、レイデータ記憶装置105および交差テストユニット109を含むローカライズされた交差テスト領域140との間の通信を管理する。交差テスト領域140は、交差に関してレイをテストし、インターフェイス112を介して、プリミティブおよびGAD記憶装置103へのリードアクセス権を有し、結果インターフェイス121を介して特定された交差の指標を交差処理102へ出力する。ローカル・レイ・データ記憶装置105は、比較的小さいサイズであることが可能な比較的高速なメモリで実施されることが好ましいが、プリミティブおよびアクセラレイション構造記憶装置は、ホスト185の主ダイナミックメモリであることが可能である比較的大規模かつ遅い主メモリ139で実施される。
【0053】
レイトレーシング高解像度シーンの一態様は、膨大な量のレイデータおよび形状データが含まれている。例えば、毎秒30フレームでフルHD解像度フィルムをレンダリングすることは、1秒間に6000万画素(1920×1080>2M、30回毎秒)以上の色を決定することを必要とする。さらに、各画素色を決定するため、多数のレイが必要とされることがある。したがって、数億のレイが毎秒処理されるべきことがあり、あらゆるレイが数バイトの格納場所を必要とする場合、フルHDシーンのレイトレーシングは、毎秒数ギガバイト以上のレイデータを必要とすることが可能である。さらに、いずれかの所定の時間に、多数のレイデータがメモリに格納されるべきである。アクセス速度とメモリサイズとの間には、費用対効果のよい大規模メモリは比較的低速であるという程度に、殆ど常にトレードオフの状況が存在する。さらに、大規模メモリは、十分に大規模なデータのブロックがアクセス可能かつ使用可能でない限りメモリが効率的に使用されないように構築される。したがって、1つの難問は、メモリから効率的にアクセスするため十分に大規模なレイのグループを一貫して特定できるようにすることである。しかし、類似した始点および方向をもつレイの検出およびグループテストのようなアプローチによってわかるように、このようなレイを特定する際に、処理オーバーヘッドが存在し、場合によっては非常に高い処理オーバーヘッドが存在することが可能である。一態様では、以下の例示的なアーキテクチャは、シーンレンダリングのためレイ交差テストおよびシェーディングのスループットを高めるために、複数のコンピューティング資源と、高速で高価なメモリと、低速で大規模なメモリとを体系化し使用する方法を開示する。
【0054】
図1は、このように、GAD要素およびプリミティブとの交差に関してレイをテストする計算資源109にローカライズされた高速メモリに格納されているレイ定義データを含むデータのフローによって、特定された交差のシェーディングからの交差テストの分離を図示する。交差テスト109の出力は、特定されたプリミティブと交差する特定されたレイの指標を含む。交差処理102は、これらの指標を受け取り、これらの交差に従ってシェーディングを実行し、テストのため、最終的に高速レイ・データ・メモリ105に格納される新しいレイをインスタンス化可能である。このような分離は、使用される処理資源に応じて選択された通信手段と共に、1若しくはそれ以上の固定機能ハードウェアおよびこの説明に応じたソフトウェアでプログラムされた汎用コンピュータを使用する種々の実施において行われることが可能である。しかし、これらの実施における一つの反復性のある態様は、レイとの交差に関してテストされた形状データがレイ定義データと比較すると交差テスト領域140において一過性であるということである。換言すると、適用できる場合には、高速メモリが主としてレイデータに割り当てられ、一方、形状はテスタを通じてストリーム化されるが、このような形状データのキャッシュ化を最適化するため計算資源は殆ど使用されない。種々の以下の図は、このような分離、データフロー、レイデータ記憶装置、および、交差テスト資源との結び付きのより具体的な実施例を図示する。
【0055】
図1は、最終的にフレームバッファ111の出力がディスプレイ197を駆動するため使用可能であることをさらに図示する。しかし、これは、便宜上レンダリングと称されることがある交差テストおよびシェーディング操作から生じることが可能である出力の単なる実施例である。例えば、出力はさらに、後で表示するため、若しくは、有形的なコンピュータ読み取り可能な媒体で配布するため、レンダリングされた画像の系列のようなレンダリング生成物を含むコンピュータ読み取り可能な媒体に書き込まれるか、または、通信リンクによって相互接続されたコンピューティング資源を含むネットワークを介して伝送されることが可能である。いくつかの場合に、レンダリングされる3次元シーンは、没入型の仮想現実会議の場合、または、3次元CADモデルの斜視図を含む画像のレンダリングの場合のように、現実の世界の3次元シーンを表すことが可能である。そのような場合、レンダリングの方法が、物理的な物体を表すデータに影響を及ぼす、または別の方法でデータを変換する。他の場合に、3次元シーンは、物理的な物体および物理的でない他の物体を表すいくつかの物体を有することができる。さらに別の3次元シーンでは、シーンの全体は、ビデオゲームなどの場合と同様に、架空であることがある。最終的には、しかし、一般的に、これらの方法は、メモリ、ディスプレイ、および/または、コンピュータ読み取り可能な媒体の物の変形である。
【0056】
さらに、1979年以来、レイトレーシングを用いるレンダリングが実施され、種々の手法が交差テストおよびレイトレーシングを用いるレンダリングを実施するため必要とされる他の機能のため開発されている。したがって、本明細書中に記載されている具体的なアーキテクチャおよび方法は、3次元シーンを2次元表現にレンダリングする際に用いられるレイトレーシングの基本的原理の占有権を行使しない。
【0057】
図2は、交差テスト領域140の交差テストユニット109が、レイに対して幾何学的形状をテスト可能である1若しくはそれ以上の個別のテスト資源(別名テストセル)を含むことを図示する。領域140は、それぞれがレイデータ記憶装置105からレイデータを受信し、メモリ139から幾何学的形状データを受信するテストセル205aから205nを含む。各テストセル205a〜205nは、結果インターフェイス121を介した交差処理102への通信のための、所定のレイが所定のプリミティブに交差したかどうかの指標を含むことが可能である結果を生成する。それに反して、GAD要素とレイとの交差テストの結果はロジック203に提供される。ロジック203は、レイをレイが交差していると決定されたGAD要素に関係付けるレイへの参照情報のコレクション210を維持する。
【0058】
一般に、システムコンポーネントは、所定の特定のレイテストの未知の終了までの時間をサポートするように設計される。交差テストユニット109は、ジオメトリメモリへのリードアクセス権を有し、入力としてレイへの参照情報のキューを有する。交差テストの出力として、各レイは、各レイが最初に交差したジオメトリの部分(便宜上本開示ではプリミティブと称される)と関連付けられる。他のジオメトリの部分(すなわち、複数のプリミティブ)は無関係であると見なすことができる。
【0059】
上述されているように、領域140は、テストセル205a〜205nにおいてテストされるべきレイコレクションのリスト210を維持するレイ参照情報バッファおよび関連付けられたマネージメントロジック203を含む。バッファ・マネージメント・ロジック203は、固定機能処理資源、または、コンピュータ読み取り可能な媒体から取得された命令を使って構成されたハードウェアで実施可能である。このような命令は、本明細書中ではロジック203に帰属させられた機能およびタスクに応じたモジュールの中に体系化可能である。当業者は、これらの開示内容に基づいてロジック203のさらなる実施を提供することも可能である。
【0060】
ロジック203は、レイおよびジオメトリをテストセルに割り当て可能であり、設計の中の他のユニットとの通信を取り扱い可能である。一態様では、リスト210の中の各レイコレクションは、1若しくはそれ以上の幾何学的形状との交差をテストされるべき複数のレイ識別子だけを含み、ロジック203はこのようなレイコレクションを維持する。より具体的な実施例では、複数のレイ識別子は、コレクションの中に特定されたGAD要素と交差することが決定され、複数のレイとの交差をテストされるべき次のGAD要素は、GAD要素のグラフの中のその交差したGAD要素に関係付けられる。所定のコレクションに対し関係付けられた要素は、これらの要素との交差テストが開始されるときにメモリ139からフェッチされる。
【0061】
換言すると、ロジック203は、一時的なレイ参照情報バッファの中のそれぞれの子ノードに対応するジオメトリデータの小部分と交差するレイを表す参照情報を保持可能であり、このようなレイのさらなる処理の延期を可能にする。階層的に配置されたGADの実施例では、このような延期は、子ノードのジオメトリの小部分と交差するレイの累積数がさらなる処理のため適当であることが判明するその後の時点まで、子ノードより下位にあるジオメトリ・アクセラレイション・データの小部分に対する処理を延期可能である。
【0062】
ロジック203は、テスト用の幾何学的形状をテストセル205a〜205nへ提供するメモリトランザクションをセットアップするためメモリ139とさらに通信可能である。ロジック203は、レイデータ記憶装置105とさらに通信し、そこにデータが格納されているレイを決定する。いくつかの実施では、ロジック203は、メモリ139または交差処理ユニット102の中で実行するシェーディングプロセスからレイを取得または受信し、スペースが利用可能であるとき、交差テスト中の格納および使用のためこれらのレイをメモリ105へ提供する。
【0063】
よって、ロジック203は、GAD形状の識別子とのレイ識別子の関連性を含む一時的なレイ参照情報バッファを維持可能である。実施では、GAD要素のための識別子は、そのGAD要素と関連付けられた所定のコレクションを格納するバッファの中の位置を特定するためハッシュ化可能である。関連性は、このようなデータのメモリへの格納または収集を記述するとき、本明細書中ではコレクションと総称され、本願のいくつかの場所では、一般に、テスト中のコレクションデータの移動と、交差テストからの結果の返送を意味するために、用語「パケット」が使用される。このような返送された結果は、後述されるように、GAD形状と関連付けられているメモリ内に格納されたコレクションに融合可能である。
【0064】
要約すると、
図2は、レイ定義データが高速メモリ105に格納され、このようなレイとの交差に関してテストされるべき形状データがメモリ139から到来することを引き続き図示する。上記開示は、複数の次にテストされるべき形状が同時にメモリ139からフェッチされ、「親」GAD要素と交差していることが既知であるレイのグループとの交差に関して順次にテストされることが好ましいということをさらに明らかにする。
【0065】
今度は、
図3は、3次元シーンの2次元表現をレイトレーシングするレンダリングシステムで使用可能である領域140(
図1)の交差テストユニット(ITU)350による実施の実施例のブロック図を含む。ITU350は、複数のテストセル310a〜310nおよび340a〜340nを含む。GAD要素は、GADデータ記憶装置103bから提供されるものとして図示され、プリミティブデータはプリミティブデータ記憶装置103aから提供される。
【0066】
テストセル310a〜310nは、GAD要素、および、これらのGAD要素とテストされるレイデータを受信する(すなわち、これらのテストセルがGAD要素をテストする)。テストセル340a〜340nは、プリミティブデータ、および、これらのプリミティブとテストされるレイデータを受信する(すなわち、これらのテストセルがプリミティブをテストする)。よって、ITU350は、プリミティブとの交差に関してレイのコレクションをテスト可能であり、GAD要素との交差に関して別個のレイのコレクションをテスト可能である。
【0067】
ITU350は、コレクション・マネージメント・ロジック203aおよびコレクションバッファ203bをさらに含む。コレクションバッファ203bおよびレイデータ105は、(例えば)メモリ139からレイデータを受信可能であるメモリ340に格納可能である。コレクションバッファ203bは、GAD要素と関連付けられたレイ参照情報を維持する。コレクション・マネージメント203aは、テストセルからの交差情報に基づいてこれらのコレクションを維持する。コレクション・マネージメント203aは、レイコレクションをテストするためメモリ139からのプリミティブおよびGAD要素のフェッチを開始することもできる。
【0068】
ITU350は、結果インターフェイス121を介して交差処理102へ最終的に提供するため出力バッファ375に一時記憶可能である特定された交差の指標を返送する。指標情報は、レイと、所定の精度の範囲内でレイが交差すると決定されたプリミティブとを特定するために十分である。
【0069】
ITU350は、ITU350にレイと、レイが交差に関してテストされることになる幾何学的形状とを与える制御プロセスまたはドライバ(例えば、ドライバ188)を通じて呼び出すことができる関数またはユーティリティであるとみなすことができる。例えば、ITU350は、ドライバ188を介して、すなわち、ITU350をシェーディングのような他のレンダリングプロセスおよび初期レイ生成関数とインターフェイス接続するプロセスを介して情報を提供されることが可能である。ITU350の観点から、ITU350は、領域140が、提供されるか、または、提供された他の情報に基づいて取得されるレイ、GAD、およびプリミティブ(または、より一般的にはシーンジオメトリ)を使用して交差テストを実行できるので、提供された情報の基点に気付く必要がない。
【0070】
上述されているように、ITU350は、ITU350が受動的でないように、どのように、いつ、そして、どのようなデータがITU350に提供されるかを制御し、そして、例えば、交差テストのため必要に応じて、レイ、または、ジオメトリデータ、または、アクセラレイションデータをフェッチすることができる。例えば、ITU350は、レイがテストされるべきシーンを特定するために十分な情報と共に、交差テストのための多数のレイを提供されることができる。例えば、ITU350は、所定の時点に交差テストのため10000より多くのレイを提供されることができ、そして、これらのレイのテストが終了するとき、後述されるように、(交差処理102によって発生させられた)新しいレイがITU350の中で処理されているレイの数をおおよそ初期数に保つために提供されることができる。ITU350は、その後、処理中に(レイ・コレクション・バッファ203bにおいて(
図3を参照のこと)、レイの一時的格納を制御し(ロジック203aにおいて(
図3を参照のこと))、処理中に必要に応じてプリミティブおよびGADの要素のフェッチを開始することができる。
【0071】
上述されているように、レイを定義するデータがレイデータ105に維持されている間に、レイ識別子はバッファ203bの中に維持され、GAD要素に関して体系化されるので、GAD要素およびプリミティブは、レイと比べるとITU350において一時的である。バッファ203bおよびレイデータ105のそれぞれは、SRAMキャッシュの1若しくはそれ以上のバンクのような様々な方法で物理的に実施でき、メモリ340に維持することができる。
【0072】
上述されているように、ロジック203aは、メモリ340に格納されたレイコレクションの状態を追跡し、処理の準備ができているコレクションを決定する。
図3に示されているように、ロジック203aは、メモリ340に通信的に連結され、テストのため接続されたテストセルの1つずつへのレイの分散を開始できる。GAD要素が、GAD要素およびプリミティブの組み合わせではなく、GAD要素だけ、または、プリミティブだけの境界を定める状況では、ロジック203aは、特有のコレクションがプリミティブまたは他のGAD要素の境界を定めるGAD要素と関連付けられているかどうかに依存して、テストセル340a〜340nまたはテストセル310a〜310nのいずれかにレイを割り当てることが可能である。
【0073】
特有のGAD要素が他のGAD要素およびプリミティブの両方の境界を定めることができる実施例では、ITU350は、レイと共に、GAD要素およびプリミティブの両方を各テストセルへ提供するデータ経路を有することになるので、ロジック203aは、テスト資源の間でコレクションのテスト用レイを準備することになる。このような実施例では、GAD要素とプリミティブとの間の形状の典型的な差(例えば、球体対三角形)のため、テストロジックを切り替えるか、または、テストされる形状のため最適化された交差テストアルゴリズムをロードする指標がロジック203aから提供されることができる。
【0074】
ロジック203aは、テストセル310a〜310nおよびテストセル340a〜340nへの情報の提供を直接的または間接的に引き起こすことができる。間接的な状況では、ロジック203aは、各テストセルがメモリ340からテスト用のレイデータのフェッチを開始するように、各テストセルに情報を提供可能である。ロジック203aは、説明を簡単にするため、メモリ340とは別個に図示されているが、ロジック203aによって実行されるマネージメント機能はメモリ340に格納されたデータに主として関係するので、ロジック203aはメモリ340の回路の内部に組み込まれることができる。
【0075】
交差テスト資源によるメモリ340へのアクセスの並列化を高める能力は、本明細書中に記載されているいくつかの態様の利点である。したがって、好ましくは、テストセル1つ当たりに少なくとも1つまでメモリ340へのアクセスポートの数を増加することは有利である。このような並列化に関係付けられた例示的な編成はさらに後述される。
【0076】
さらに、ITU350は、入力データをITUへ提供するか、または、ITUから出力を受信するユニットに関して非同期式に動作することができる。ここで、「非同期」は、交差テストが前に受信されたレイに対して継続している間に、ITUが付加的なレイを受信し、付加的なレイの交差テストを開始することを含むことができる。さらに、「非同期」は、ITU350がレイを受信した順序にレイが交差テストを終了しなくてもよいことを含むことができる。非同期は、ITU350の中の交差テスト資源が、3次元シーンの中のレイの位置、または、シーンに重畳されたスケジューリンググリッドを考慮することなく、交差テストの割り当てまたはスケジューリングのため、または、親レイおよび少数の親レイから生み出された子レイのような世代間関係を有するテスト専用レイ、あるいは、特殊な世代のレイ、例えば、カメラレイ若しくは2次レイだけをテストするために利用できることをさらに含む。
【0077】
ITU350は、プリミティブおよびプリミティブと交差したレイの特定された交差の指標を受信する出力バッファ375をさらに含む。実施例では、指標は、プリミティブと交差したレイを特定するために十分な情報とペアにされたプリミティブの特定情報を含む。レイの特定情報は、ホストプロセッサが利用できる資源の中に維持されているレイのリストの中の特定のレイを特定するインデックスのような参照情報を含むことができる。例えば、リストは、ホストプロセッサ上で動くドライバ188によって維持されることができ、リストはメモリ139の中に維持されることができる。好ましくは、メモリ139は、メモリ340の中にすべてのレイの定義データを含むことができる。しかし、レイ特定情報は、レイを再構成するために十分な、レイの始点および方向のような情報を含むことができる。通常の場合には、より少数のビットが参照情報に合格することが必要とされることになり、有利である。
【0078】
図4は、ワーキングメモリ410およびテストロジック420を含むテストセル310aの実施例を図示している。ワーキングメモリ410は、表面との交差に関して線分をテストするために十分な情報を収容する数個のレジスタであることができ、または、他の実施ではより複雑であることができる。例えば、ワーキングメモリ410は、交差に関して受信された特定の形状をテストするためテストロジック420を構成する命令を格納することができ、そして、どのような形状が受信されたかを受信されたデータに基づいて検出することができる。ワーキングメモリ410は、さらに検出されたヒットをキャッシュすることができ、各テストセルは幾何学的形状に対し一連のレイをテストするため構成され、または、逆もまた同様であり、したがって、キャッシュされたヒットはグループとして出力されることができる。ワーキングメモリは記憶装置103bから着信する形状データを受信することもできる。
【0079】
テストロジック420は利用可能または選択可能な解像度で交差テストを実行し、交差が検出されたかどうかを示すバイナリ値を返すことができる。バイナリ値は、GAD要素テストのためのメモリ340におけるリードサイクルのようなリードサイクル中のラッチングのための読み出し、キャッシュ化、または、出力のためワーキングメモリの中に格納可能である。
【0080】
図5は、例示的なメモリ編成により詳細に重点を置いて、交差テストユニット500の実施の態様を図示している。ITU500において、テストセル510a〜510nおよび540a〜540nが現れ、本実施例では、310a〜310nおよび540a〜540nと対応する。これは、テストセルの数に関する何らかの要件を意味するものではない。よって、ITU500において、プリミティブとGAD要素の両方が並列にテストされることができる。しかし、1種類または別の種類のそれ以上のテストセルが必要であると決定された場合、どのようなテストセルでも必要に応じて再構成可能である(ハードウェアの場合に再割り当てされ、ソフトウェアの場合に再プログラムされる)。トランジスタ密度が増加し続けると共に、それ以上のこのようなセルをハードウェア実施に(または、ソフトウェアを実行するため利用可能な資源として)収容することができる。記載されるように、テストセルの一部は、共通形状(すなわち、プリミティブまたはGAD要素)に対してレイをテストするので、オペレーショナル・グループとして取り扱うことができる。テストセル540a〜540nは、指定された精度レベル(例えば、16ビット)でプリミティブとの交差を示すバイナリ値を返すことができ、より大きいプリミティブの場合に役立つことができる、レイが交差したプリミティブ上の場所のより正確な指標を返すこともできる。
【0081】
ITU500において、メモリ540は、それぞれが2ポート(特定されたバンク515のポート531および532)を有する複数の独立した演算バンク510〜515を含む。一方のポートはGADテストロジック505を介してアクセスされ、もう一方はプリミティブ・テスト・ロジック530を介してアクセスされる。GADテストロジック505およびプリミティブ・テスト・ロジック530のそれぞれは、それぞれのワーキングバッファ560〜565と570〜575との間でデータのフローを管理し、それぞれにGAD記憶装置103aおよびプリミティブ記憶装置103bからテストのためのGAD要素を取得するため動作する。
【0082】
バンク510〜515は、大部分は、GADテストロジック505およびプリミティブ・テスト・ロジック530によるレイデータへの非競合アクセスをできるようにするため動作するように意図され、その結果、各テストセル510a〜510nおよびテストセル540a〜540nは別個のバンク510〜515からレイが提供され得る。このような非競合アクセスは、これらの開示内容から理解されることであるが、例えば、別個のキャッシュバンクによって実施可能であり、同様に、クロス・バー・アーキテクチャはポートによるメモリの異なる物理的部分へのアクセスを可能にする。1若しくはそれ以上のテストセルによるバンクの中に格納されたレイのテストが許可される場合、競合はテストされるべき2つのレイが同じバンクに存在する場合に発生し、このような場合に、アクセスはテストロジック505および530によって順次に取り扱うことが可能である。いくつかの場合に、ワーキングバッファ560〜565および570〜575は、他の処理が完了している間に次の処理のためロードされる。ITU500はさらに領域に編成可能である。例えば、領域578は、GADテスタ510aおよびメモリバンク510を含むので、GAD要素のためのテスト領域を構成し、領域579は、テスタ510aおよび540a(GADおよびプリミティブのそれぞれに対し1つずつ)と、領域578および579のテストセルに関係するテストで使用されるべきレイデータを格納するメモリバンク510へのアクセスとを含むので、GAD要素とプリミティブの両方のためのテスト領域を構成する。
【0083】
一貫性のある配置でレイをテストすることにより、どのレイがどのテストセルに割り当てられているかの追跡を軽減することが可能である。例えば、各コレクションは、32レイを有することができ、32のテストセル310a〜310n(510a〜510n)が存在することができる。例えば、コレクションの中の4番目のレイをテストセル310dへ一貫して提供することにより、テストセル310dは、提供されたレイに関する情報を維持する必要はなく、交差の指標を返すことだけが必要である。明らかなように、テストセルの間にレイ識別子のパケットを伝え、テストセルが交差結果をパケットに書き込むことを可能にすることを含む、一貫性を維持する他の実施が提供できる。
【0084】
レイコレクションの格納は、所定のレイコレクションがレイ・コレクション・バッファ203bまたは520のn箇所のうちの1つに格納されることができるように、レイコレクションのためのnウェイ・インターリーブ・キャッシュとして実施されることができる。レイ・コレクション・バッファ203bまたは520は、したがって、バッファのn箇所のそれぞれに格納されたレイコレクションのリストを維持することができる。レイ・コレクション・バッファ203bまたは520の実施は、レイコレクションと関連付けられたGADの要素の識別用特性を使用することを含むことができ、例えば、シーンをレンダリングする際にしようされるGADの要素の間で一意である識別子文字列が使用できる。英数文字列は、数字、ハッシュなどでもよい。例えば、ハッシュは、レイ・コレクション・バッファ203bおよび520のn箇所のうちの1つを参照可能である。
【0085】
他の実施では、GADの要素は、レイ・コレクション・バッファ203bおよび520の所定の箇所への格納を予定されることができ、例えば、使用される英数文字列のセグメントをこのようなバッファの(複数の)箇所へマッピングする。プリミティブ/レイ交差出力580は、潜在的なプリミティブ/レイ交差を特定する出力を表現し、出力580は直列または並列であることが可能である。例えば、32のプリミティブ・テスト・セル540a〜540nが存在する場合、出力580は、直前にテストされたプリミティブに対する各レイの交差の有無を指定する32ビットを含むことが可能である。当然ながら、出力は、例えば、パケット実施のような他の実施の場合のテストセルから直接的に来ることがある。出力は直列であることが可能であり、テストセルによってパケットの中に直列に格納されることが可能である。
【0086】
レイデータは、シェーダのような光線源からメモリ340(520)に受け取られる。コレクション・マネージメント・ロジック(例えば、
図2および3の203a)は、各コレクションがGADの要素と関連付けられている場合、レイをコレクションに初期的に割り当てるため動作する。例えば、GADの要素は、グラフのルートノードであることができ、受け取られたすべてのレイは、ルートノードと関連付けられた1若しくはそれ以上のコレクションに初期的に割り当てられる。レイの受け取りは、例えば、入力キューから完全なコレクションになるサイズにされたグループで行われることもでき、各コレクションは、例えば、レイ・コレクション・バッファ203bの中で特定されたコレクションのように取り扱われることが可能である。
【0087】
ある程度の数のコレクションが並列にテストされることができるという理解の下で、1コレクションの処理に重点を置くと、テストノードと関連付けられたコレクションのレイをメモリ340から取り出すことは、例えば、コレクションの中にデータとして格納された、メモリ340からの、または、
図5の実施例によって、テストセル(例えば、テストセル560〜565)による受信のため複数の出力ポート上にレイデータを提供するバンク510〜515からの、このようなレイの取り出しを可能にするこのようなレイのアドレス(レイ識別子)の提供によってコレクション・マネージメント・ロジック203aによって開始される。
【0088】
テストのため選択されたノードによって境界を定められたGAD要素のテストに関して(すなわち、選択されたノードと関連付けられたGAD要素が他のGAD要素の境界を定める)、テスト中のコレクションのレイに関するレイデータの分散が終了し、境界を定められたGAD要素のフェッチもまた実行される(このようなフェッチは必ずしもレイ分散の次に行われなくてもよい)。このようなフェッチのため、ロジック203aはアドレス指定情報をGAD記憶装置103bへ入力可能であり(または、どのようなメモリマネージメント手段が設けられているかとは無関係であり)、GAD記憶装置は、アドレス指定された(複数の)GAD要素をテストセル310a〜310nへ出力する。通常のとおり多数のGAD要素の境界が定められる場合、要素は、多数のGAD要素のブロック読み出しを可能にするように、例えば、シリアル化バッファを用いて、テストセルへ直列ストリーム化されるように配置される。
【0089】
テストセル(たとえば、310a〜310n)において、コレクションのレイは、直列に提供されたGAD要素との交差に関してテストすることが可能である(例えば、各テストセルにおいて異なるレイ)。レイが交差すると決定された場合、交差したGAD要素に関するコレクションが存在するかどうかが決定され、存在するならば、レイが余地を許すそのコレクションに追加され、存在しないならば、コレクションが作成され、レイが追加される。既存のコレクションに余地がない場合、新しいコレクションが作成される。
【0090】
いくつかの実施では、コレクションのすべてのレイが所定のGAD要素に対し並列にテストできるように、コレクションの中のレイの最大数対テストセル310a〜310nの数の1:1の対応関係が与えられ、この実施は、スループットが概ねレイ対テストセルの1:1の対応関係を用いて取得できる程度であるアーキテクチャを含むことが可能であるが、しかし、所定のコレクションのうちのレイ全体が並列にテスト可能であると見なされるとしても、異なるテストセルが異なるパケットからのレイをテストできるように、異なるテストセルの間でパケット(例えば、上述されているようにコレクションを表す情報)の逐次的な受け渡しを行うことが可能である。
【0091】
その後、レイは、テストセルに提供されたプリミティブとの交差に関してテストされ(すなわち、本実施例では、各テストセルは異なるレイを有し、そのレイと共通プリミティブとをテストする)。テスト後、各テストセルは検出された交差を知らせる。
【0092】
コレクションのうちの各レイは、テストセルに提供されたGAD要素との交差に関してそのテストセルでテストされる(例えば、
図5の複数のバックの実施例(図示されている領域578および579)では、レイは、例えば、バンクが各種の1若しくはそれ以上のテスタにレイデータを提供するように、GAD要素テスト領域および/またはプリミティブテスト領域にローカライズされていると見なされる)。
【0093】
GAD要素との交差に関するレイのテストからの出力はプリミティブ交差に関して同じレイをテストする場合と異なるので(すなわち、GAD要素との交差はそのGAD要素のためのコレクションの中への収集を生じるが、プリミティブとの交差はそのプリミティブとの最近接交差の決定と、このような交差の出力とを生じるので)、特定のレイが偶然に並行してテストされている2つのコレクションの中に存在するとしても、コレクションデータまたは出力された交差についてのライトバックへの競合が通常は起こるべきではない。さらなる並列化が、例えば、テストセル340a〜340nの複数のインスタンス化においてプリミティブ交差に関してレイの複数のコレクションをテストすることにより実施されるならば、複数の交差の格納のようなこのようなテストの順序正しい終了を強制する、ビットをロックするなどのように特徴が実施されることもできる。そして、
図5の実施例では、所定のレイのためのデータが唯一のバンクから1つのテスタタイプに提供可能である場合(すなわち、所定のレイが1つのメモリバンクに位置している場合)、複数のGADテスタは、例えば、同時に同じレイをテストすることがないので、ライトバック競合の問題を回避する。
【0094】
要約すると、方法は、レイを受信する工程と、レイをコレクションに割り当てる工程と、準備状況がアルゴリズム的に決定可能である場合にテストの準備ができているコレクションを選択する工程と、選択されたコレクションの中のレイを適切なテストセルに割り当てる工程と、交差テストのため適切なジオメトリをテストセルの中でストリーム化する工程とを含む。出力は、ジオメトリがシーンプリミティブであるか、または、GAD要素であるかに依存する。GAD要素に対してテストされたレイの場合、GAD要素はテスト中のコレクションと関連付けられたノードとのグラフ接続に基づいて特定され、レイはテスト中のGAD要素と関連付けられたコレクションに追加される。コレクションは準備状況に関して見直され、テストの準備ができたとき選択される。プリミティブとのレイ交差に関して、最近接交差がレイを用いて追跡される。レイは準備完了コレクションと関連付けられたときにテストされるので、暗黙のうちに、特定のレイのための交差テストは、特定のレイが関連付けられたコレクションがテストの準備ができていると決定されるまで延期される。レイは、このようなレイがシーンジオメトリの異なる部分に対しテストされることを可能にする複数のコレクションへ同時に収集可能である(すなわち、レイはトラバースの順序にテストされなくてもよい)。
【0095】
上述されているように、ITUは、レイ入力から前に受信されたレイを表す情報をメモリに格納する。ITUは、これらのレイに対し、各レイと複数のコレクションのうちの1若しくはそれ以上のレイコレクションとの関連性を維持する。ITUは、メモリに格納された複数のコレクションに関するコレクションフルネスの指標をさらに維持する。これらの指標は、フルコレクションを指定するそれぞれのフラグであること、または、所定のコレクションと関連付けられたある程度の数のレイを表現する数字であることができる。実施のさらなる詳細および他の実施例と、テストアルゴリズムの実施に関係した変形とは、前述の参照された関連出願に記載され、ここで文字通りに提示されている情報がそれらの排他的な取り扱いでないことを明らかにしている。
【0096】
ここまでの開示内容から明らかであるように、レイは、レイのコレクションの中に設けられた情報に基づいてメモリからロード(またはメモリの中でアクセス)される。したがって、このようなローディングは、各レイを表すデータが格納されるそれぞれのメモリロケーションを決定することを含むことができる。このようなデータはそのレイコレクションの中に含まれることができ、たとえば、レイコレクションは、それらのレイのためのレイデータがそのコレクションの中で格納されているメモリロケーション、または、格納場所への他の参照情報のリストを含むことができる。例えば、レイコレクションは、メモリ、例えば、メモリ340、または、メモリのバンク(例えば、バンク510)におけるロケーションへの参照情報を含むことができ、または、他の実施では、これらの参照情報は、絶対値、ベースからのオフセット、または、このようなデータを参照するための別の適当な方式であることができる。しかし、いくつかの実施では、レイ・コレクション・データおよびレイデータが、例えば、内容連想データベースとして維持されることが可能であるので。その分離は、それほど明示的または明白であることは必要でなく、コレクションとレイとの間の関連性、および、コレクションとGADの要素との間の関連性が維持され、テストのためコレクションと関連付けられたレイ、および、同様にコレクションと関連付けられたGADの要素を特定するため使用される。
【0097】
同様に、プリミティブまたはGAD要素のいずれかがテストサイクルの中を循環させられているので、レイデータがテストセルの中で「静止」しているということは明白である。関連出願に記載されているように、他の実施が可能であるが、これらの開示内容の主な焦点は、ローカライズされるか、または、そうでなければ、セルに関して静止するようにレイを準備し、その間に、ジオメトリがフェッチされテストされることである。
【0098】
このような実施の態様は
図6に関連して提案される。特に、交差テストロジックの別の実施は、メモリインターフェイス625に連結するフェッチユニット620を含む(
図2のテストロジック203に類似した)テスト制御ロジック603と、命令キャッシュ630と、命令デコーダ645と、データキャッシュ650とを含むプロセッサ605を含むことが可能である。データキャッシュ650はテストセル610a〜610nにデータを入力する。命令デコーダ645は、入力をテストセル610a〜610nへさらに提供する。命令ジェネレータ665は、命令入力を命令デコーダ645へ提供する。テストセルは検出された交差の指標をライトバックユニット660へ出力し、ライトバックユニットは次にデータをデータキャッシュ650に格納可能である。ライトバックユニット66からの出力は、命令を生成するとき命令ジェネレータ665への入力としても使用される。このようなプロセッサ605で使用される命令は単一データ複数命令の系統でもよく、テストセルの中で処理される命令が定義された面(たとえば、プリミティブおよびGAD要素)とレイとの間の交差テストであると考えられる。
【0099】
実施例では、「命令」は、プリミティブ、または、GADの要素のような幾何学的形状を定義するデータを含むことができ、複数のデータ要素は、「命令」として提供された幾何学的形状に対するテストを行う別個のレイの参照情報を含むことができる。したがって、幾何学的形状と複数のレイ参照情報との組み合わせは、複数の図示されたテストセルに分散可能である別々の情報のパケットであると考えられる。いくつかの場合に、パケット分散は順次に進行することが可能であり、その結果、複数のパケットが複数のテストセルの間で「衝突」する。
【0100】
このようなテストセルは、大規模命令セットをもつフル機能プロセッサとの関連で存在することが可能であり、各パケットは、その場合、パケットの目的を識別するために十分な他の情報を含むことができる。例えば、交差テストのため作成されたパケットを他の演算が実行されるための他の目的のため存在するパケットと区別するためにある程度の数のビットが含まれることが可能である。同様に、種々の交差テスト命令が、異なるプリミティブ形状および異なるGAD要素形状と、さらに、必要に応じて、異なるテストアルゴリズムとを含む目的のため、提供されることができる。
【0101】
典型的な実施例では、各交差テストパケットは、最初に、GADの要素またはプリミティブへの参照情報のいずれかであるジオメトリ要素への参照情報またはジオメトリ要素のためのデータと、ジオメトリ要素との交差に関してテストされるある程度の数のレイへの参照情報(すなわち、前述の「パケット」)とを収容することが可能である。
【0102】
デコーダ645は、ジオメトリ要素への参照情報を決定するため命令を解釈し、フェッチ620(メモリインターフェイス625のようなメモリインターフェイスのための制御)を介して要素のフェッチを開始できる。いくつかの実施では、デコーダ645は、将来に必要とされるジオメトリ要素のフェッチを開始するためにある程度の数の命令に備えることができる。ジオメトリ要素はフェッチ620によってデコーダ645へ提供でき、デコーダ645はジオメトリ要素をテストセル610a〜610nへ提供する。
【0103】
デコーダ645は、関数アドレスとして命令からのレイ参照情報をデータキャッシュ650へさらに提供し、データキャッシュは、各レイの交差テストのため十分なそれぞれのデータをテストセル610a〜610nのそれぞれに提供する。交差テストのため必要とされないレイと関連付けられたデータは提供される必要がない。したがって、データキャッシュ650は、交差セルテストとして動作する1若しくはそれ以上のコンピューティング資源のためのローカライズされたレイデータ記憶設備としての役割を果たすことができる。
【0104】
ジオメトリ要素は、各テストセル610a〜610nにおいてそれぞれのレイとの交差に関してテストされ、交差の指標がライトバック660による受信のため各テストセル610a〜610nから出力される。テストされるジオメトリ要素の性質に依存して、ライトバック660は、2つの異なる機能のうちの一方を実行する。テストセル610a〜610nが交差に関してプリミティブをテストしている場合、ライトバック660はテストされているプリミティブと交差した各レイの指標を出力する。テストセル610a〜610nがGADの要素をテストしている場合、ライトバックはテストセル610a〜610nの出力を命令ユニット665へ提供する。
【0105】
命令ユニット665は、さらなる交差テスト中にテストセルに指令することになる将来の命令を組み立てるため動作する。命令ユニット665は、以下の通り、GADの所定の要素と交差したレイを指定するテストセル610a〜610nの入力と、命令キャッシュ630と、GAD入力670からの入力を使って動作する。テストセル610a〜610nからの入力を使って、命令ユニット665は、GAD入力に基づいて、テストセル610a〜610nからの入力の中で指定されたGADの要素に接続されたGADの要素を決定する(すなわち、命令ユニット665は、所定のGAD要素に対して指示された交差に基づいて次にテストされるべき要素を決定する)。
【0106】
命令ユニット665は、命令キャッシュ630に格納された命令が交差した要素に接続しているとして特定されたGADの要素毎に既に存在するかどうかと、命令がさらなるレイ参照情報を許容するかどうか(すなわち、命令のすべてのデータスロットが満たされているか?)と、を決定する。命令ユニット665は、テストセル入力の中で交差しているとして特定されたレイと同数をその命令に加え、残りのレイ参照情報を受信するため十分な他の命令を作成する。命令ユニット665は、テストセル入力の中で特定された要素と接続しているとして特定されたGADの要素毎にこれを実行する。このように、テストセル入力(交差指標)を処理した後、同じGAD要素と交差しているとして特定されたレイはそれぞれがその同じGAD要素に接続されたGADの要素に対するレイのテストを指定する命令に加えられる。このようにして作成された命令は命令キャッシュ630に格納されることができる。
【0107】
命令は、GAD入力670から受信されたGADの要素の編成に基づいて命令キャッシュ630の中に編成されることができる。命令ユニット665は、ロジック203aおよび命令ユニット665の両方がどのレイがどの要素にヒットしたかの指標を受信し、このようなレイを将来のテストのためグルーピングするので、ロジック203aと類似した機能を実行する。
図6のシステムは、テストされるレイのパケットが異なる機能を達成する複数のタイプのうちのある種のパケットであることが可能であるので、より汎用的であることが意図されている。
【0108】
例えば、GAD入力670はGADのグラフを提供することができ、グラフのノードはGADの要素を表現し、ノードのペアはエッジによって接続されている。エッジは、どのノードが他のどのノードに接続されているかを特定し、命令ユニット665は、GADの所定の要素のためキャッシュの中に既に存在する命令と、新しいレイが追加される場所とを特定するために、ノードを接続するエッジを辿ることにより命令キャッシュ630を探索する。複数の命令が所定のGAD要素に対し存在する場合、複数の命令はリストの中でリンクされるか、または、そうでなければ、順序付けられるか、若しくは、互いに関連付けられることができる。関連した命令が見出されることがある命令キャッシュ630の中の潜在的なロケーションを特定するためのGAD要素IDのハッシングのようなその他の方法が同様に実施できる。
【0109】
命令は、(接続された各ノードのための命令を格納するのに反して)発行され復号化された命令に応答して、命令がGADの接続されたノードのフェッチを引き起こすように、テスト中のGADのノードをさらに参照できる。このような接続された要素のそれぞれは、各テストセルの中に維持されているそれぞれのレイとのテストのためテストセル610a〜610nの中へストリーム可能である(すなわち、レイデータは、複数のGAD要素がそれぞれのテストセルに提供され、各テストセルがそのレイを各GAD要素と順々にテストする間、テストセルの中で静止し続ける)。
【0110】
よって、これらの実施例にしたがって実施されたプロセッサは、接続されたノードに対する交差テストのための第1のノードとの交差に関して特定されたレイを収集する命令を取得するか、そうでなければ作成するために機能を提供することになる。上述された実施例と同様に、プロセッサ605に提供されたGADが階層的である場合、GADのグラフは階層的な順序でトラバースされることがある。
【0111】
GADの例示的な接続および供給源は典型的であり、他の配置も考えられる。例えば、メモリ615は、GAD要素の供給源であるかもしれないが、好ましくは、所定の処理アーキテクチャが許可する場合、ジオメトリデータではなく、レイ(すなわち、レイを定義するデータ、および、見出された現在の最近傍プリミティブ交差のような他のデータ)を高速メモリに格納し続ける。同様に、上記実施例では、テスト結果に基づいてテストされるべき次のノード(すなわち、次のアクセラレイション要素、またはプリミティブ)が決定され、パケットが幾何学的形状毎にそれぞれにインスタンス化された。上記開示内容から明らかである他の実施は、所定のノードの子のテストを開始することを決定し次第に、「子」ノード毎にパケットをインスタンス化することを含むことができ、後の時点で子命令/コレクションを作成する。
【0112】
図7は、交差テストと、カメラレイといった新しいレイの生成を含むレイシェーディングとの動作を分離するためキューを使用できるレイトレーシング・システム(例えば、システム700)の態様をさらに図示する。システム700は、交差テストのためのレイのサブミッションと、交差テストの完了とを可能にさせ、
図1〜6のシステムと同様に、異なる順序でシェーディングのための出力を生じる。同様に、交差テスト資源は、前に特定された交差のシェーディング解決のため停滞することなく、レイの交差テストを進めることが可能である。
【0113】
図7は、交差に関してテストされるべきレイを定義するデータを交差テスト資源に格納するレイデータ記憶装置766a〜766nにそれぞれが連結された複数の交差テスト資源(ITR)705a〜705nを図示する。ITRの各グループおよびレイデータ記憶装置(例えば、レイデータ766およびITR705a)は、テスト資源およびレイデータ記憶装置のローカライズされたグルーピング、例えば、前のグルーピング、例えば、
図5のグルーピング578および579に類似している図示されたグルーピング704と見なすことができる。
【0114】
レイデータ記憶装置766a〜766nは、プライベートL1キャッシュ、L2の共有部分またはマップ部分などのようなメモリであることが可能である。上述の実施例では、高速メモリを幾何学的データではなく、特定の処理資源にローカルであるレイデータの格納に当てるのが好ましい。レイデータのローカライズされた格納は、ここで使用される交差テストアルゴリズムによって簡単化され、レイがローカライズされた高速メモリに格納されることが可能である期間を増大させ、この小規模メモリのスラッシングの量を削減する。したがって、このレイ格納は、所定のレイのためのデータがシーンの中の交差テストを完了するまで通常は同じローカルメモリに格納されるので、準静的であると見なすことができる。
【0115】
レイを定義するデータは、(上述の図におけるロジック203bなどに類似した)テスト制御703から出力743を介してロードされる。テスト制御703は、レイ終了キュー730を介して、ITR70a〜705nにおいて交差テストを終了したレイの識別子を含む入力を受信する。
【0116】
キュー730はレイ識別子を格納する(いくつかの例示的なレイID1、18、10および480が図示されている)。キュー730は、ITR705a〜705nから、交差した最近傍交差を特定するためにテストされ、シーン内のテストを終了するレイを表現する入力を取得する。したがって、キュー730は、ITR705a〜705nからの所定の出力がGAD要素の情報、または、最近傍と思われるプリミティブ交差(ITR705a〜705nが両方のタイプの形状をテスト可能である場合に役立つ)を表現するかどうかを決定可能である決定ポイント751からデータ入力されることが可能である。
【0117】
決定ポイント751は、したがって、上述された2種類の交差制御機能を表現する。一方の交差制御機能では、GAD/レイ交差が交差テスタの近くで維持/管理され、もう一方では、最近傍の検出されたプリミティブ/レイ交差だけがシェーディングのため出力される。いくつかの上述のアーキテクチャにおいて、別個のテストセルがそれぞれに使用される場合、決定ポイントは、最近傍と思われるプリミティブ交差が見出されたときだけを追跡することができる。
【0118】
決定ポイント751から、GAD結果は、レイ制御703から提供され、そして、入力742から受信されたレイIDを格納するキュー725からレイID入力も受信するマルチプレクサ752に入る。レイ制御703は、テスト制御703から出力743を介してレイデータ766a〜766nに提供されているレイ情報に対応するレイ識別子と共に入力742を投入する。よって、(レイ識別子(レイID))によってキュー725の中で特定されたレイを定義するデータは、出力743を介して、レイデータ766a〜766nに提供され、これらのメモリに格納される。レイIDがどのように形成されるかについての実施例は後述される。
【0119】
両方のキュー730および725は、レイの一連の識別子(レイID)を図示する。しかし、後述されるように、レイは、一般に、所定の幾何学的形状に対して並行にテストされる。よって、このような場合、キュー725は、好ましくは、レイIDのパケットのためのレイIDを格納することになるので、キュー730は、各エントリが所定の形状と関連付けられたある程度の数のレイIDを有する一連のエントリを表現できる。
【0120】
特有の実施例として、このアーキテクチャを駆動するアルゴリズムは、ある程度の数のレイが所定の形状に対してテストされるべきであると決定されるまで一般に待機するので、多数のレイがほぼ同時にテストを終了し、そして、テストを開始すると一般に考えられる。有利な点として、これらの終了レイは、最初にインスタンス化された方法または時点に関して、または、これらの終了レイがどの経路を使ってアクセラレイション階層をトラバースしたかに関して、互いに完全に無関係にできる。逆に、キュー725は、シーンのデフォルトGAD要素、たとえば、GAD要素の階層の中のルートノードに対してテストされるべき新しいレイのグループまたはパケットを収容すると考えることができる。
【0121】
このような新しいレイは、カメラシェーダ735および他のシェーダ710a〜710nを含む光線源に由来する。カメラシェーダ735は、シーンの中でテストされるべき1次レイを生成するので、別個に特定される。シェーダ710a〜710nは、例えば、スレッドの形でコンピューティング資源の上で、および/または、1若しくはそれ以上のプロセッサのコアの上で動き、レイとプリミティブとの間で特定された交差に適切な応答を指定する命令または他のロジックの実行を表現する。通常は、このような応答は、プリミティブと関連付けられたコードをシェードすることにより少なくとも部分的に決定され、様々な他の影響および考慮事項を明らかにすることができる。
【0122】
シェーダ710a〜710nは、テスト制御703の出力745からこのようなレイデータを受信する分散ポイント772を介して(
図8aを参照のこと)、交差したレイおよびプリミティブの識別子を受信する。分散ポイント772は、このようなレイデータを所定のプリミティブのためのコードを実行する利用可能性を有する計算資源へ提供するために使用できるので、このような利用可能性決定手段は、負荷測定、計算資源によってセットされるフラグ、フルネス指標を使うFIFO分離、または、ラウンドロビン若しくは疑似ランダム分散スキームを含むこのような分散を制御するため使用可能である。
【0123】
これらのシェーダ710a〜710nの出力は、便宜上2次レイと呼ばれる他のレイを含むことが可能である(カメラ735からの出力もレイを含む)。本実施例では、このようなレイは、この時点で、レイを定義する始点および方向を少なくとも含むが、この時点で、好ましくは、テスト制御703によって提供されるレイIDが関連付けられている必要はない。
【0124】
識別できるように、テスト制御703は、交差テスト資源におけるレイ状態を監視可能であり、
図8〜9に関連してより詳細に記載されるように、新しいレイがレイデータ766a〜766nの中の終了したレイを置き換えることを可能にする。レイIDのITR705a〜705nへの分散は、
図10に関して詳述されるディストリビュータ780によって実行される。このような分散は、レイデータ766a〜766nのメモリが所定の識別子によって特定されたレイを定義するデータを格納することによって主として制御される。同様に、ディストリビュータ780は、
図10に関してさらに後述されるように、コレクション準備完了のような考慮事項に基づいて、レイIDがキュー725から取得される時点を制御する。
【0125】
今度は、
図8aを参照すると、レイデータ766a〜766nのそれぞれと関連付けられたメモリのバンクを含み、各バンクがレイデータで占められているスロットを有し、メモリアドレスによってアドレス指定可能である、テスト制御703の一部分が図示されている。
図8aは、レイ終了キュー730からの出力744がレイ識別子1、18、106および480を含み、各識別子がメモリ803の中にスペースを割り付けられていることを図示している。このようなスペースは、出力744からのこれらのレイ識別子の受信に応答して上書き/記入されることが許可される。分散ポイント722への出力745は、シェーディングの際に用いられるレイデータを含む。出力745は他のデータをさらに含むことができる。実際には、メモリ803は、シェーダ710a〜710nを実行するプロセスのような他のプロセスによっても使用されるメモリで実施されることができる。このような場合、出力745は、計算資源によるメモリ803からのこのようなデータの取り出しを表現可能である(または、取り出しによって実施可能である)。
【0126】
リンク741、742、743、744、745、750、790のような種々の通信リンクは
図7において特定され、これらのリンクのうちのいずれかが全体的なアーキテクチャ実施に従って実施可能であり、共有メモリ領域、物理リンク、拡張バスの上に確立された仮想チャネル、共有レジスタスペースなどを含むことが可能である。
【0127】
図8bは、新しいデータのためのデータは、(例えば、カメラシェーダ735のようなシェーディング動作からの)出力741から到来する。このようなレイデータは、レイ始点および方向情報を少なくとも含む。次に、テスト制御703は、これらの新しいレイをメモリ803の中で様々なレイデータ766a〜766nのためのロケーションに割り当てる。各レイ始点および方向と関連付けられた識別子は、それぞれが格納された場所に依存する。よって、入力742(キュー725に関する入力)はそれに基づいて決定されたレイ識別子を受信する。同様に、出力743は、レイ識別子と、それらと関連付けられ、メモリ803に格納された始点および方向情報との両方を含む。レイIDは関連データを特定するためメモリをインデックス付けするため使用できるが、ITR705a〜705nおよびメモリ803の中のレイデータの特定がレイ識別データを使用して実行できる限り、レイのための他の種類の識別子も使用できるので、
図8aおよび8bに図示されたレイIDの割り当ては便宜的である。
【0128】
図9aは、内容連想メモリ910がそれぞれ異なるレイデータと関連付けられているキー905を維持するこのような代替案の実施例を図示する。
【0129】
図9bは、各レイデータ766a〜766nの内部において、スロットがテスト制御703からインターフェイス743を介してレイデータを受け入れるため設けられていることを図示する。これらのスロットは、複数のバンクにさらに細分すること、または、インターリーブ化することが可能であり、および/または、キャッシュからのデータのより簡単な取り出しを可能にする他のキャッシュ編成メカニズムであることが可能である。レイは、ここでは、格納のため分散されることが必要であり、このような分散は、レイIDの最下位ビット、若しくは、レイIDのハッシュに基づいて、または、分散が行われるバンクの数によるモジュロ除算を用いて、ラウンド・ロビン・キューイングを用いて、もしくは、レイデータをメモリへ分散するため使用できる他の分散メカニズムを用いて進むことができる。所定の部分の範囲内で、レイデータはレイIDに基づいてソートされることも可能である。
【0130】
要約すると、
図7〜9bは、テストされるべきレイが制御ロジックによって収集され、好ましくは、レイ定義データが異なる交差テスト資源に連結されたそれぞれのキャッシュに格納されるメモリロケーションに基づいている識別子が割り当てられるアーキテクチャを図示する。プリミティブ交差テスト結果は、テストが終了したときにこれらのテスト資源から到来し、テスト制御ロジックは、その後に、これらの終了したレイのメモリロケーションをテストされることを必要とする新しいレイに再割り当て可能である。終了したレイは、テストされるべきさらなるレイを生成可能である複数の異なる交差処理/シェーディング資源のいずれかで共用可能である。レイは、一般に、アクセラレイション構造のトラバースの間中、かつ、最近傍プリミティブ交差が特定されるまで(または、レイがシーン背景以外と交差しないことが決定されるまで)交差テスト資源の中を循環させられる。
【0131】
図10を参照すると、レンダリングシステムのさらなるアーキテクチャ態様が図示されている。
図10における一態様は、レイデータが交差テストのため構成されたプロセッサに連結されたそれぞれのキャッシュメモリに格納できることである。別の態様は、ディストリビュータ780がITR705a〜705nとインターフェイスをとることができる方法である。図示されているさらなる態様は、テスト用の形状データが交差テスタへ提供できる方法である。
【0132】
ディストリビュータ780は、(ハードウェア、プロセス間またはスレッド間通信などとして実施された)通信リンク790を介してマルチプレクサ752(
図7)からレイ識別子を受信する。これらのレイIDのそれぞれは、レイIDと、次にテストされるべきそれぞれのGAD要素バウンディング物体との間の関連性が維持されているコレクション・マネージメント1075へ送信される。レイIDは、決定1013、1014および1015によって、レイIDがそれらのコレクションをテストするためコレクション・マネージメントおよび記憶装置1075からの決定を待つ場所であるキュー1021、1022、および1023の間にさらに分散されることが可能である。例えば、コレクション1045は、テストする準備が整っていると決定され、レイIDは、キャッシュ1065a〜1065nがこのようなレイIDのそれぞれのためのデータを収容しているそれぞれのITR705a〜705nへ送出される。コレクション・マネージメント1075は、テストのため必要とされる幾何学的形状の取り出しを開始するため、GAD要素データおよび/またはプリミティブデータを格納するメモリへのインターフェイスを有することもできる。
【0133】
これらの形状は、(例えば)リンク112を介して記憶装置103(
図1)からキュー1040に達する。これらの形状は、所定のコレクションと関連付けられたGADの要素との関連性に基づいて特定されている。例えば、階層GADの場合、これらの形状は、親GAD要素の子であることが可能である。各ITRは、キュー1040からの形状に対してそれぞれのレイを順次にテスト可能である。よって、所定のコレクションのレイがキャッシュ1065a〜1065nの間に均等に分散しているとき、最高スループットが実現され、コレクション・マネージメント1075は、所定のレイコレクションをテストした結果に基づいて最も簡単にコレクションを更新できる。所定のコレクションの中の複数のレイが1つのキャッシュにあるとき、他の交差テスタはストールすることが可能であるか、または、次のコレクションからのレイをテストすることが可能である。コレクションテスト同期が再び必要とされる前に、順序が乱れているテストの最大数が受け入れられる。
【0134】
出力は、出力750a〜750n(リンク750(
図7)のコンポーネントであることが可能である)で生成され、決定ポイント751(
図7)に提供される。上述の通り、このアーキテクチャは、どのような形状でも(すなわち、プリミティブまたはGAD要素のいずれかを)テストするITRを提供する。さらに、コレクション・マネージメント1075と連結された決定ポイント751は、GAD交差テストの結果が、所定のレイが所定のGAD要素にヒットする決定を含むことを表し、特定されたレイをそのGAD要素に対応するコレクションに追加させる。よって、別の実施は、GADテスト結果をコレクション・マネージメント1075へ直接的に提供することを含むことができる。より一般的には、上記実施例は、潜在的な情報のフローを例示し、他のフローがそこから明白である。
【0135】
注意すべき他の態様は、所定のレイコレクションの1若しくはそれ以上のレイIDがキュー1021、1022、1023(コレクション1047によって示されている)のいずれかに格納できることである。このような場合、そのキューのためのITRは両方のレイをテスト可能であり、利用可能になるとき2回目のテスト(または、多数の後続のテスト)の結果を出力する。決定ポイント751は、組み立てられるべきコレクションのすべての結果を待つことができ、または、「散在する」結果が利用できる限りで伝搬させられる。
【0136】
要約すると、
図10は、1若しくはそれ以上の形状と関連付けられたレイ識別子のパケットが複数のテスト資源のためのキューに分散されることを可能にさせ、各キューがレイデータのサブセットを格納するシステム編成を図示する。各テスト資源は、テスト資源にロードされた形状に対して各レイ識別子によって特定されたレイデータをフェッチする。好ましくは、形状は並行してすべてのテスト資源の中で順次にストリーム化可能である。形状は、主メモリの中のアドレスから始まる一連の子として特定することができる。よって、
図10は、形状が一般に複数のレイに対して並行してテストされるシステム編成を図示する。
【0137】
しかし、他の実施例は一連の異なる交差テスト資源の中の形状を順次にテストし、形状データおよびレイ識別子のパケットが交差テスト資源の間を進む。複数のパケットを進行させることにより、テストのスループットが増加する。本アプローチによる実施例は後述される。
【0138】
図11は、複数の計算資源1104〜1108のリングバス配置が実施可能であるコンピュータアーキテクチャの第1の実施例を図示する。各計算資源は、交差テストのため使用される計算資源のため、メモリ340の中の形状データ記憶装置1115からそのコンピューティング資源へ提供された幾何学的形状と交差テストされるべきレイデータを収容するプライベートL1キャッシュ1125a〜1125nにアクセス可能である。計算資源1104〜1108の間の通信は、複数のポイント・ツー・ポイント、または、このようなプロセッサ間通信のため利用可能である他のアーキテクチャを含むことができるバス1106によって行うことが可能である。
【0139】
計算資源がL2キャッシュ1130および1135のようなある一定のメモリ構造を共有する場合、これらの計算資源、例えば、L2キャッシュ1130を共有する計算資源1107および1106の間の通信は、ある目的のためそのキャッシュを介して互いに通信することができる。付加的に、システムの中でテストされているレイのためのデータのコピーは、レイデータ1101a〜1110nの間でのデータのサブセットの分散のため、レイデータ1110に維持されることができ、(後述されるように)これらのL2キャッシュに格納されることもできる。形状データ1115は、メモリ340に存在することもでき、L2 1130、1135のうちの1若しくはそれ以上と、キャッシュ1125a〜1125nのうちのいずれかに一時的に存在することもできる。しかし、このようなキャッシュに格納されたレイデータは、このような形状データによって上書きされることから保護され、このような形状のため割り付けられたスペースの大きさは、一般に、テストにおいて次に使用される時点についての指標がない場合に形状データを周りに維持しようとすることなく、形状データ1115へのレイテンシを遮断するため足りるように、テストの準備ができているとして現在特定されているパケットのために使える大きさに制限される。換言すると、レイデータのため、最大未使用置換のような、典型的なキャッシュ・マネージメント・アルゴリズムの使用を回避することが好ましい。
【0140】
図11は、アプリケーションおよび/またはドライバ1120が交差テストに加えて計算資源1104上で実行可能であることをさらに図示する。同様に、レイプロセス1121は計算資源1108上で実行可能であり、パケットデータ1116はパケットプロセス1121によって用いるためキャッシュ1125aに格納可能である。他のパケットデータはL2 1129に格納可能であるが、レイデータと同様に、パケットデータを最高速であると考えられるメモリに格納することが好ましい。パケットプロセスは、コレクションおよび他のマネージメントロジックが上述の図面において実行した同じ機能のうちの大半を実行し、すなわち、どのレイがどのGAD要素と交差したかを記録し、そして、例えば、交差したGAD要素の子に対してテストされる準備ができている十分なレイを有することによって、例えば、テストの準備ができているGAD要素を選択する。
【0141】
本実施例では、パケットプロセス1121は集中化されているので、複数のレイ識別子と、特定されたレイとの交差に関してテストされるべき(複数の)形状への参照情報または複数の形状のデータのいずれかと、を収容するパケットを発行することにより、動作することになる。交差テストを実行する各計算資源1104〜1107はパケットを受信する。例えば、複数のポイント・ツー・ポイント・リンクにおいて順番に(さらに後述される)、または、共有バス型の媒体においてほぼ同時に(
図10のアーキテクチャに類似することが可能である)。各計算資源1104〜1107は、それぞれのローカライズされたレイデータ1110a〜1110nがパケットの中で特定されたレイに関するデータを格納するかどうかを決定し、格納する場合、そのレイに関するデータを取り出し、テストし、結果を出力する。
【0142】
GAD要素交差の結果はパケットプロセス1121によって追跡されるので、このような結果をパケットプロセス1121へ戻す通信メカニズムが許容できる。このようなメカニズムは、システムの全体的なアーキテクチャに基づいて選択できる。いくつかの例示的なアプローチは後述され、見出された交差毎に別個の指標を含むことができるか、または、各テスト資源が循環するパケットに交差結果を投入することを可能にする。
【0143】
図12は、レイデータ1266a〜1266nおよびパケットデータ1216a〜1216nをそれぞれ格納するキャッシュ1281〜1284が付随した計算資源1205〜1208の編成のさらなる実施例を図示する。各計算資源1205〜1208は、キュー1251〜1254によって少なくとも1つの他の計算資源に接続される。レイプロセス1210は、キュー1250を介して計算資源1205へ入力を提供する。レイプロセス1210はアプリケーション/ドライバ1202と通信する。計算資源1208からの出力1255はレイプロセス1210と通信する。別の出力1256は計算資源1205と通信する。プリミティブおよびGAD記憶装置103は、計算資源1205〜1208のためその形状データへのリードアクセスを提供する。
【0144】
レイプロセス1210は、テストのためのレイを受信または作成し、特定されたレイのレイ識別子およびレイデータを収容するパケットを形成する。パケットは、キュー1250〜1254を介して計算資源1205〜1208のそれぞれへ伝えられる。各計算資源1205〜1208は、所定のパケットの中のレイの一部分、いくつかの実施例では、1つのレイを要し、レイのその部分を計算資源のレイデータ1266a〜1266nの中に格納する。他の実施例は、特有の計算資源1205〜1208へ向けられたパケットを送信することを含むことができ、レイプロセス1210はどのレイデータがどのローカライズされたレイデータ1266a〜1266nに格納されるかを決定することになる。
【0145】
レイがローカライズされた記憶装置にロードされた後、レイは、次に、始点および方向データをもたずに、レイIDだけを収容するパケットによって特定される。このようなパケットは、そのパケットの中で特定されたレイに対してテストされるべき形状への参照情報または形状のデータのいずれかをさらに収容する。いくつかの実施例では、このようなパケットを形成するデータは、計算資源1205〜1208のローカライズされたメモリ1281〜1284の間に分散される。よって、計算資源1205〜1208のそれぞれは、どのレイがどの形状に対して次にテストされるべきかに関する情報が分散されるように、所定の時刻にシステムの中でテストされているレイのためのパケットデータの一部分を維持する。かくして、各計算資源1205〜1208は、テストの準備ができているコレクションのテストを開始するため、レイIDおよび形状情報のパケットを発行可能である。
【0146】
各パケットは、キューおよび計算資源を一周し、次に、パケットの中に投入された交差テストの結果と共に発信元の計算資源へ返送される。一実施では、各計算資源1205〜1208は、各計算資源が発行するパケットのための形状データをフェッチする。例えば、計算資源1205は、テストのための準備が整ったパケット(たとえば、所定のGAD要素のためのレイのコレクション)を有し、次に、計算資源は、このような関連性(例えば、GAD要素の子)によってテストされるべき形状をフェッチし、各形状のためのデータを有するパケットを作り、キュー1251から各パケットを送出することが可能である。
【0147】
順番に、計算資源1205は、パケットが他の計算資源の中を移動した後、この計算資源が送出した各パケットを受信する。受信されたとき、各パケットは、他の計算資源1206〜1208に格納された/格納されるパケットの中の特定されたレイとの交差に関してそのパケットの中の形状をテストした結果(参照情報または定義データ)が投入される。計算資源1205は、他の計算資源がそれぞれのテストを実行する前または後のいずれかに、計算資源がレイデータ1266aの中にローカルに保有しているいずれかの特定されたレイをテスト可能である。よって、レイ定義データは、交差テスト資源に連結された複数の高速メモリの間に分散させることができ、テスト結果は分散された方式で収集可能である。
【0148】
図12に従ってアーキテクチャを実施することは、使用されている物理的なシステムの種々の特性を考慮に入れることができる。例えば、キューは、パケットを一方向へ送信するものとして表されている。しかし、利益はパケットを両方向へ送信することによって実現されることができる(双方向キューまたは複数のキュー)。同様に、
図12は、パケットデータが計算資源の間に分散され、より多くのL2キャッシュへのより分散したメモリアクセスと、潜在的に主メモリ103のようなより大規模なメモリへの他のポートのアクセスとを可能にすることを図示する。
【0149】
パケットが集中化される場合、データ参照情報と共に一方向に送信されたパケットは、例えば、計算資源1205によってフェッチされたデータを有することができ、データ参照情報と共にもう一方の方向へ送信されたパケットは、計算資源1208によってフェッチされたデータを有することができる。この状況は、このようなリングバス・アーキテクチャ(一方向または双方向)にエントリポイントを設けるため一般化が可能である。
【0150】
開示内容から明白であるように、上記キューは、交差テストのための新しいレイを複数の交差テスト資源を含むシステムに導入するための1若しくはそれ以上のキューと、交差テスト資源を互いに相互接続するキューとを含むことができる。いくつかの場合に、新しいレイを導入するキューはレイ定義データを収容可能である(例えば、交差テスト資源に接続されたキャッシュにデータを格納するのを待機するキュー)。このようなキューは、レイ定義データを格納する主メモリの中にリストとして実施可能である。パケットを伝える交差テスト資源を相互接続するキューは、好ましくは、レイ識別子だけを含み、レイ定義データを含まないことができる。
【0151】
図13は、計算資源1205が一方のコアであり、計算資源1206が別のコアであるように、計算資源がチップのコアを用いて実施されることができ、そして、キュー1251がコア間通信であるシステム1200の潜在的な実施の一部分を図示する。同様に図示するのは、レイデータを形状データと共に格納可能である中間L2キャッシュ1305である。前述の図に関して説明されているように、L2キャッシュ1305は、シーンジオメトリおよびアクセラレイションデータのいくつかの部分を格納することができ、このようなデータを格納する限りは、レイデータのスラッシュ化の増加はない(すなわち、レイデータは、好ましくは、キャッシュ格納において優先される)。
【0152】
図14a〜14cは、それぞれが、例示的なシステムの種々の実施によるキューが取ることができる種々の関係を図示する。一般に、計算資源間の通信は、直列または1:1であることが必要とされない。例えば、
図14aは、1入力1404が、1つの計算1407および1408にそれぞれに専用である両方のキュー1405および1406にデータ入力可能であることを図示する。例えば、計算1407および1408が単一の物理的なチップで実施される場合、入力1404はチップレベル入力であることが可能であり、各キュー1405、1406は特有のコアのため使われることが可能である。
【0153】
図14bは、単一入力が複数のコアにデータ入力可能であり、複数のコアのそれぞれが計算1407、1408にデータ入力可能であり、計算のそれぞれが同様にデータを反対側のキュー1406、1405へそれぞれに送信可能であることを図示する。
図14cは、キュー1411が入力1410を受信可能であり、出力を両方の計算1407および1408へ提供可能であることを図示する。よって、
図14a〜14cは、種々のキューイング戦略がこれらの態様に従ってパケットを伝達するため実施可能であることを図示する。
【0154】
図15は、複数のキャッシュ階層のレベルが存在すること(例えば、レベル1のキャッシュ1502および1503と、レベル2のキャッシュ1504と、レイデータの種々の組み合わせを設けることができること)を図示する。例えば、レイデータ1507は、レイデータ1505と1506との互いに素な部分集合と、1505または1506のいずれにも存在しないレイデータとを含むことが可能である。レイデータ1505および1506は、動的に変化することが可能であり、例えば、一方のキューが1若しくはそれ以上の計算資源(
図14c)にデータ入力する場合、レイデータは、いずれかのレイデータ1505または1506へのレイデータ1507に格納されたレイの動的な割り当てを反映することができる。
【0155】
図16は、キュー1251と、キューが格納可能であるデータとの例示的な実施をより詳細に図示する。各パケットがそれぞれのレイ識別子1605a〜1605p、1606a〜1606p、および1607a〜1607pと、対応するヒット情報フィールド1610a〜1610p、1611a〜1611p、および1612a〜1612pとを有するパケット1601a〜1601nが図示されている。パケット1601aは形状1のためのデータ1615aを収容し、パケット1601bは形状2のためのデータ1615bを収容し、パケット1601nは形状nのためのデータ1615nを収容する。識別できるように、キュー1251は、計算資源1205によってデータ入力され、計算資源1206によって読み取られる。当然ながら、
図14a〜14cに一部が図示されている様々な他のキューイング戦略が実施できる。
【0156】
キューイングは、その用語がここで使用されているように、いずれかの所定の計算資源においてテストされたレイに対する先入れ/先出し要件を意味しない。概して、所定のパケットの中で特定されたレイは、異なる計算資源のためのローカライズされたレイ記憶装置の間にほぼ均等に分散し、その結果、所定のパケットがある程度の数の計算資源の間に分散したそのパケットのレイを見出すはずであり、その結果、並列化が各パケットに対し実現される。1パケットに対するある程度の数のパケットが1つの計算資源においてテストされるべき場合、別の計算資源がそのパケットに対して交差するレイをもたないバブルが形成されることができる。このようなバブルは、別のパケットの他の交差テストを含む他の計算によって埋めることが可能である。いくつかの実施例では、各計算資源は、複数のスレッドの状態を維持し、所定のパケットのストール条件でスレッドを切り替えることが可能である。パケット間の各交差テストのための重大なデータがレジスタの中に維持できる限り、正味のスループットの利点が実現できるはずである。
【0157】
例示的なシステムの動作の態様を部分的に要約すると、各計算資源はパケットの受信に応答して作用する。パケットが特有の計算資源のための入力キューから到着するとき、計算資源は、そのパケットの中のレイ識別子を調べ、そのパケットの中で特定されたどのレイがそれぞれのメモリにそれらのレイのためのデータを格納したかを決定する。換言すると、パケットは、どの計算資源がそのパケットの中で特定されたレイのためのレイデータを収容するか、または、レイデータへの高速アクセス権を有するかについてのアプリオリな知識なしで、レイ識別子を用いて形成可能である。さらに、各計算資源は、パケットの中で特定されたすべてのレイのためのレイデータを取得することを応答的に試みることがなく、計算資源がそのローカル高速メモリの中にパケットの中で特定されたいずれかのレイのためのレイデータを有するかどうかを決定するだけであり、特定された(複数の)形状との交差に関してその(複数の)レイだけをテストする。
【0158】
図17は、パケットが例示的な計算資源において処理できる方法の態様を記載することを目的とする。
図17は、パケット1601aが計算資源1206に入ることを図示する。計算資源1605aは、パケット1601aからのレイ識別情報を使用して、そのレイデータを問い合わせる(例えば、レイ1605aはレイID31を有し、レイデータ記憶装置1266bの中でレイID31と照合する)。レイID31と関連付けられた始点および方向は1290を介して取り出される。同様に、形状データは、パケットの中で特定された場合、形状データが現在格納されているメモリ資源1291から取得1715される。形状データがパケットの中に設けられる場合、形状データは直接的に使用される。次に、レイ31は、形状1(または取り出されたデータによって定義された形状)との交差に関してテスト1720される。
【0159】
テストされた形状がGAD要素である場合(1725)、このような交差テストの効果は、テストされたレイと交差する可能性を依然として有することがあるシーンプリミティブの小さいサブセットを決定することである。従って、肯定的なヒット結果は、レイ識別子、すなわち、レイ31の識別子のためのロケーション1610aの中のパケットにライトバック1726される。いくつかの実施では、パケットの放出は、どのレイIDがパケットの中でどの順番で放出されたかを追跡できるので、結果だけがライトバックされる必要があり、暗黙的な順番は放射と同じである。よって、テスタを通過した後、資源から出るパケットはテスト結果を処理できる。
【0160】
逆に、テストされた形状がプリミティブである場合(1733)、最近傍プリミティブ交差決定(1731)は、この検出されたプリミティブが前のプリミティブより近接しているかどうかを決定するために実施可能である。近接している場合、交差したプリミティブと、選択的に交差距離とがパケットと共に格納されるか、または、そうでなければ、出力されることが可能である。所定のレイが複数のパケット(すなわち、同時に複数のGAD要素)と関連付けられることができるので、カウントは、毎回レイがGAD要素と関連付けられる期間に亘って維持1733できるので、カウントは、レイが依然としてテストを必要とする他のパケットに存在しないときが決定できるように毎回デクリメントされ、そのレイに専用にされたメモリが別のレイの投入のため開放されることを可能にする。
【0161】
要約すると、レイのローカル高速記憶装置の中の各レイと関連付けられたデータは、好ましくは、最近傍の検出されたプリミティブ交差識別子を含み、プリミティブ参照情報およびその交差までのパラメータ化された距離とを含むことができる。各レイと関連付けられた他のデータは、レイが存在するGAD要素レイコレクションのカウントを含む。各コレクションがテストされた後、カウントはデクリメントされ、別のコレクションが作成されたとき、カウントはインクリメントされる。カウントがゼロであるとき、その後に最近傍交差として特定されたプリミティブはそのレイが交差したと決定されるプリミティブである。
【0162】
図18は、パケットがテストのための幾何学的形状のストリップの開始を特定できる例示的な単一命令複数データ(SIMD)アーキテクチャに関係する。実施例では、GAD要素グラフのノードはエッジによって1若しくはそれ以上の他のノードに接続され、各ノードは、球体または軸方向整列バウンディングボックスのようなジオメトリ・アクセラレイション・データの要素を表す。いくつかの実施例では、グラフは階層的であるので、所定のノードをテストしたとき、所定のノードの子は、親ノードによって同様に境界を定められたプリミティブの選択の境界を定めることが知られている。GAD要素は、最終的に、プリミティブの選択の境界を定める。
【0163】
実施では、所定の要素の子であるアクセラレイション要素の文字列は、文字列の中の第1の要素のメモリアドレスによって特定可能である。従って、このアーキテクチャは、次の要素の開始時に、予め定められたデータのストライド長を設けることが可能である。フラグが所定のノードの子である所定の要素の文字列の終わりを指定するため設けることが可能である。同様に、プリミティブのストリップは、次のプリミティブを定義するために既知のストライド長を用いて開始メモリアドレスによって特定することが可能である。より具体的には三角形ストリップに関して、連続した2頂点がそれぞれに複数の三角形を定義することが可能である。
【0164】
図18は、
図6に関連して図示されたSIMDアーキテクチャに類似したSIMDアーキテクチャの態様を図示するため使用される。本実施例では、複数のレイ識別子1605a〜1605nと、選択的に受信交差テスト結果1610a〜1610nを格納するスペースと、テストされるべき形状(例えば、三角形プリミティブ)の形状定義データ、形状の識別子、または、ストリップの開始のための識別子1815aを含む形状データとを格納するパケット1601aが受信される。
【0165】
この例示的なアーキテクチャは、より大規模なキャッシュを備えた、より少数のより強力な別々の処理資源が交差テストのため使用される場合に適切であることがある。ここで、別々の処理資源のそれぞれは、概して、SIMD命令によってテスト可能であるレイの数とおよそ同数のレイを処理資源のローカル記憶装置の中に保有する(これに反して、
図10は、各キャッシュが、好ましくは、コレクション毎に1本のレイを保有する実施例を図示した)。例えば、4本のレイがSIMD実行ユニットにおいて同時にテスト可能である場合、順々に送られているパケット毎に、そのSIMDユニットのためのローカル記憶装置の中に統計的に約4本のレイを保有することが好ましい。例えば、4つの別々の処理資源が設けられ、各処理資源が4本のレイをテストする能力をもつSIMDユニットを保有する場合、パケットは、参照される約16本のレイを保有することが可能である。代替的に、別個のパケットがSIMDユニットを備える各処理資源のため設けられるので、例えば、パケットは、参照される4本のレイを保有することが可能であり、4倍のSIMDユニットが存在する。
【0166】
一実施例では、パケット1601aを受信する第1の計算資源1205は、形状のストリップのためのデータを取得するため識別子1815aを使用することが可能である。次に、レイデータ1266aに格納されたパケット1601aの中で参照される各レイは、計算ユニット1818a〜1818dにおいてテストされる。形状ストリップの実施例では、形状ストリップ1816が取り出され、形状1〜4を含む。各形状は、各計算ユニット1818a〜1818dを通じてストリーム化されることが可能であり、その計算ユニットにロードされたレイとの交差に関して各形状をテストする。ストリップの形状毎に、計算資源は、それぞれが形状のうちの1つに対してレイをテストした結果を格納するパケット(図示されたパケット1820)を作成可能である。
【0167】
代替的に、別個のビットが交差結果を受け入れるため各レイの結果セクションの中に設けられることができ、1パケットが渡されることができる。低速メモリからの再度のフェッチを回避するため、このアプローチは、複数の計算資源がL2を共有できる場合、または、第1の計算資源によるフェッチが同様に他の計算資源への形状データの転送を引き起こす場合、最も適切であることが予想される。例えば、DMAトランザクションは、それぞれがテストされるべき所定の形状のストリームを必要とする異なる計算資源である複数のターゲットを有することが可能であり、いくつかの実施のための適切なメモリ・トランザクション・モデルの実施例である。主な検討事項は、主メモリ103から同じデータを2回以上フェッチすることを削減することである。
【0168】
上述されているように、各交差テスト資源は、どのレイ識別子がそのレイデータ記憶装置の中にレイデータを格納しているかを決定する。いずれかのこのようなレイに関して、レイ始点および方向が取り出される。これまでに、実施例は、テスト資源が所定の特定されたレイを1若しくはそれ以上の特定された形状の系列とテストできることが仮定されている。しかし、処理資源が実質的な余分のレイテンシを伴うことなく所定のレイとの交差に関して複数の形状をテスト可能である場合、若しくは、複数のレイを1形状とテスト可能である場合、または、両方の組み合わせの場合がある。
図18では、SIMDアーキテクチャが示され、交差テストのため構成された1コンピューティング資源の内部で、4つのSIMDユニットのそれぞれがこのSIMDユニットに順次に提供された形状との交差に関して異なるレイをテスト可能である。形状の系列は、一連の形状の初期的な取り出しを開始するためシーンデータ記憶装置340へのインデックスとして使用される形状ストリップ参照情報に基づいてフェッチすることが可能であり、1つずつの形状または4つの形状が計算ユニット123でテストされる。
【0169】
好ましくは、レイは、収集されたレイとアクセラレイションデータのうちの要素との間で検出された交差に基づいてコレクションの中に収集される。従って、本実施例では、異なるレイが4個の異なる形状に対してそれぞれのSIMDユニットにおいてテストされ、SIMDユニットを収容するコンピューティング資源は、それぞれが形状を参照するレイのパケットに結果を再フォーマット化できる。
【0170】
SIMDユニットを使用する他のアーキテクチャは、代わりに、コレクションに収集された複数のレイをフェッチすることが可能である。上述の通り、このようなレイは、コレクションと関連付けられた形状に関係した形状に対して次に交差テストされることになる。例えば、収集された対照形状に接続された16または32の形状が存在することができる。これらの形状のうちの第1のサブセットは、異なるSIMDユニットにロードされることが可能であり、収集されたレイは、各SIMDユニットの中でストリーム化されることが可能である(すなわち、同じレイが同時にそれぞれのSIMDユニットを通過する)。結果パケットは各SIMDユニットによって独立に形成可能であり、次の形状がSIMDユニットにロードされる。レイは、次に、SIMDユニットの中で再循環させることが可能である。このプロセスは、すべての関係した形状が収集されたレイに対してテストされるまで継続可能である。
【0171】
図18bは、このような実施例のための計算ユニット1818aの時間ベースの経過を図示する。時点1で、形状1およびレイ1がテストされる。形状は1からqまで番号付けされ、コレクションからのレイは1からnまで番号付けされている。時点nで形状1およびレイnがテストされる。次のサイクルの開始時(時点q−1*n+1)に、最後の形状が計算ユニット1818aにおいてテストを開始する。
【0172】
図19は、パケット1905が計算資源の間で交差テストのため分散させることができる方法の態様と、特定された形状と関連付けられたパケット1905の中のレイのためのメモリを維持する計算資源1910においてそれぞれが最終的に融合されるテスト結果とを図示する。
図19は、処理中の例示的なシステム状態を図示する。特に、計算資源1910〜1914は、それぞれが、その計算資源でアクセス可能なメモリに格納されたレイのレイ識別情報を受信し、その特定された形状を交差に関してテストし、特定されたヒット1915、1917、1919を含む結果1915〜1919を出力している。ヒットまたはミスのいずれかがデフォルト挙動であることが可能であるので、例えば、ミスは正の値によって指定されることがなく、または、パケットの中のデフォルト値がミスにセットされることが可能である。テスト後、計算資源1910は少なくともヒット情報を収集し、ここで、計算資源1910は、テストシステムの中のすべてのパケット情報、または、この特有の形状を含むこのすべてのパケット情報のサブセットを管理していることが可能である。
【0173】
メモリ1966の例示的な編成は、ある程度の数のレイID、すなわち、レイA、レイBなどにマップされた形状参照情報の論理的な編成を表している。さらに図示されているのは、参照番号1に関係した行のいくつかのスロット(すなわち、テスト中の形状への参照情報)が空であることである。よって、計算資源1910がヒット結果を受信するとき、計算資源は、最初に所定の参照番号1の残りの空のスロットにデータ投入し、次に、レイnがメモリ1966の内部で参照番号1のための新しいパケットを開始することが1966に図示されている。今度は、参照番号1のためのパケットがフル状態であるので、このパケットはテストされる準備ができていると決定することが可能である。いくつかの実施例では、参照番号1によって参照された形状の子GAF要素がフェッチされ、パケットが各パケットの中の参照番号1と関連付けられたレイのすべてを使って形成される。例えば、参照番号1の32個の子が存在することが可能であるので、32個のパケットが形成されることが可能であり、パケット1922〜1924が図示されている。いくつかの実施例では、計算資源1910は、子形状を定義するデータをフェッチし、そのデータをパケット1922〜1924に格納することが可能である。代替的に、他の計算資源がこのようなデータをフェッチすることを可能にする参照情報が提供されることが可能である。
【0174】
いくつかの場合に、計算資源1910は、作成されたパケットの内部で特定されたレイをさらに記憶することができるので、パケットを送出する前にそのレイを最初にテストすることができる。このような場合に、計算資源1910は、送出されたパケットの中で既にフェッチされた形状データを記憶することができる。
図12に関連して説明されているように、実施は、このようなパケットを1若しくはそれ以上の他の計算資源へ送信すること、例えば、双方向キューイング、または、あらゆる方向の通信を可能にすることができる。
【0175】
図20は、上記態様による方法がどのように実施可能であるかについてのいくつかの実施例を説明することを目的としている。パケットは、形状情報、レイID、および、ヒット情報がライトバックされることができるロケーションと共に放出2005され、ヒット情報は、この時点で、ゼロ化されるか、または、そうでなければ、「ドントケア」にされることが可能である。1回目のテストは、レイ1のIDに対して実施2006され、ヒットすることが見出されるので、1がパケットに書き込まれ、そのパケットが第2のテスト2007のため伝達され、レイ3が2回目のテストのためローカライズされていることが見出され、ミスしていることが見出されるので、0が書き込まれ(または維持され)、テスト2006からのヒット情報がパケットの中で前方へ運ばれる(すなわち、パケットの中のレイは順序と無関係にテストされることが可能である)。3回目のテストがレイ2に対して実施され、ヒットすることが見出される。本実施例は、パケットの中のレイがパケットの中に出現した順序とは無関係にテストされることが可能であることを表し、テストの順序は、どのテスタが所定のレイIDに対するレイデータを最良にアクセスすることができるかに依存する。テストは、すべてのレイIDがテストされるまで続く(2009)。その後、パケットは融合されることが可能であり、すなわち、ヒット情報だけが維持される必要がある。このような融合は、パケットを放出した計算資源において行うことが可能である。新しいヒット結果は、既存のパケットからのヒット結果と組み合わせることが可能である(
図19を参照のこと)。その後、パケットの中のレイのコレクションが(例えば、フル状態に基づいて)テストされる準備ができているかどうかが決定2025される。準備ができていない場合、異なるパケットが処理2040されることが可能である。準備ができている場合、パケットと関連付けられた形状の子形状がフェッチ2030されることが可能であり、親ノード2041は形状であり、そのノードの子は、例えば、2042によって特定される。次に、新しいパケットは、親と関連付けられたパケットからのレイ識別子と子形状毎に生成2035されることが可能である。
【0176】
図21および22は、上述された方法の態様を実施するために使用することができる状況のシステムにおいて、上述された方法の態様を要約するのに役立つ。特に、
図21は、方法2100が、プリミティブおよびGAD要素を主メモリに格納する工程(2105)と、レイ定義データ(例えば、始点および方向情報)を使用して、交差テストのためのレイを定義する工程(2110)とを含むことを示す。各レイは識別子を用いて特定できるようにされる(2115)。レイ定義データのサブセットは、複数のこのような資源のうちのそれぞれの処理資源と関連付けられたローカライズされたメモリに格納される。レイは、これらのレイの識別子および形状データを処理資源の間に分散(2125)することにより、テストの予定が入れられる。レイは、これらのレイのための定義データがローカルに格納された処理資源においてテストされる(2130)。いくつかの状況では、各レイは、1つのローカルメモリだけに定義データを有することができる。
【0177】
レイとプリミティブとの間の交差の指標が計算資源の第1のサブセットから第2のサブセットへ通信される(2135)。第2のサブセットは交差をシェードする(2140)。シェーディングは、定義データがローカライズされたメモリの間で分散2145され、好ましくは、終了したレイの定義データを置き換える新しいレイを生じることが可能である。これらのレイはその後に上述の通りテストされる。計算資源のサブセットは、マルチスレッド化されたプロセッサまたはコアの上で動くスレッドをインスタンス化することを含む計算資源のインスタンス化またはそうでなければ割り付けにより実施されることが可能である。割り付けは長時間に亘って変化することが可能であり、交差テスト用の資源とシェーディング用の資源との間で静的割り付けであることは必要でない。例えば、交差テストのスレッドを実行するコアは、メモリスペースをプリミティブとのレイ交差のある程度の数の指標で埋めて、一連の交差テストを終了することが可能であり、その後、コアはこれらの交差のシェーディングに切り替わることが可能である。
【0178】
上記のいくつかの実施例は、交差に関してGAD要素をテストする観点から主として説明され、このようなテストの結果は、より小規模のプリミティブのグルーピングに対する(レイIDと特有のGAD要素との関連性による)レイのグルーピングである。最終的に、テストによって特定されたGAD要素は、そのGAD要素と関連付けられたグループの一部であるとして特定されたレイに対してテストされるべきプリミティブの境界を定めることが開示されている。プリミティブを有するパケットに関して、交差テストの結果は、所定のレイに対して検出された少なくとも最近傍のこのような交差を追跡することにより考慮された、通常はレイを定義する他のデータとのレイ/プリミティブ交差の識別情報である(便宜のため)。
【0179】
次に、所定のレイがシーンの全体に対してテストされた後、レイ毎の最近傍の検出された交差が、もしあるならば、レイIDと共に、アプリケーション若しくはドライバ、または、シェーディングプロセスを開始するためこのような結果を使用できる別のプロセスへ返送されることができる。レイ識別子は、本明細書中の様々な実施形態によるキューイング戦略のようなキューイング戦略を介して返送されることが可能である(すなわち、どの計算資源が特有の交差のためのシェーディングコードを実行しているかを指定することは不要であり、特有の交差テスト資源は所定のシェーディング資源によってテストされた交差を検出していない)。いくつかの交差テストでは、重心座標が交差テストのため計算され、これらの座標は、必要に応じて、シェーディングのため利用できるようにされる。これは、交差テスタからシェーダへ送信可能である他のデータの実施例である。
【0180】
一般に、本明細書中に記載された機能、特徴、および他のロジックのいずれかが種々のコンピューティング資源を用いて実施されることが可能である。コンピューティング資源は、スレッド、コア、プロセッサ、固定機能処理要素などであることが可能である。同様に、コレクションまたはパケット管理のような他の機能が、1つのコンピューティング資源にローカライズされること、または、複数のコンピューティング資源の間に分散されることが可能であるプロセス、スレッド、または、タスク(例えば、複数の物理的な計算資源の間に分散した複数のスレッド)として提供または実施されることが可能である。タスクは、基本的に、そのコンピューティング資源によって管理されたコレクションを有する形状に関する交差テスト結果を保有する進行中のパケットを特定する工程を含む。
【0181】
同様に、交差テストのため使用されているコンピューティング資源は、検出された交差をシェードするため使用されるシェーディングプロセスのような他のプロセスをホストすることも可能である。例えば、交差テストを実行するプロセッサは、シェーディング用スレッドを実行することも可能である。例えば、リングバス実施では、1つの処理資源のためのキューが現時点で交差テストのためのパケットを保有しない場合、データ処理資源は、代わりに、前に特定された交差をシェーディングするスレッドを開始することが可能である。所定のプロセッサ上に交差テストスレッドを有するという要件またはそのこととの間に一般的な関係が存在しないという主要な相違点は、そのスレッドによって検出されたレイ交差のためのシェーディング用スレッドをさらに動かす。その代わり、キューに入れられたレイ/プリミティブ交差は、シェーディング用スレッドに入力を提供するので、交差テスト資源とシェーディング資源との間のマッピングは、あらゆる方向であることが可能であるので、異なるハードウェアユニットまたはソフトウェアユニットが同じレイに対し交差テストとシェードとを行うことが可能である。
【0182】
同様に、異なる機能の間(例えば、交差テスト資源間、および、交差テストとシェーディングとの間)の通信に介在する様々なキューおよび他のインターフェイスは、メモリを実施するため利用できる物理的な資源に関係する検討事項に基づいて選択可能である種々のバッファリング戦略のうちのいずれかに従って1若しくはそれ以上のメモリにおいて実施可能である。キューは、発信側資源または着信側資源によって制御可能である。換言すると、着信側は、共有バス上のデータをリスニングすることが可能であり、必要とするデータを取ることが可能であり、または、データは、メモリマッピング、直接的な通信などによって、着信側へアドレス指定されることが可能である。
【0183】
さらなる実施例として、コアがマルチスレッド化をサポートできる場合、あるスレッドはシェーディングに専用であることが可能であり、別のスレッドは交差処理に専用であることが可能である。しかし、レイデータを維持することを犠牲にしてテクスチャおよび他のシェーディング情報をフェッチすることから生じるキャッシュ非コヒーレンスを回避するために注意する必要があり、交差テスト資源のためのキャッシュ割り付けを優先したままである。
【0184】
本アーキテクチャの利点は、形状データのためのキャッシング要件が緩和されることであると考えられるので、その種類のデータのためのキャッシュコヒーレンスの検討事項が削減される。実際に、いくつかの実施では、ある一定の形状データを利用可能な状態に保つこと、または、形状データが再び使用されるときを予測することに費やされるべき努力は殆どない。その代わり、レイIDの所定のパケットがテストの準備を完了したとき、これらの(複数の)パケットのための形状データは、最高速メモリから取得可能であり、次に、形状データを格納し、そして、一般に、他のパケットを処理する既存のワークロードは、このようなフェッチの際に被るレイテンシを遮断する。交差に関してこれらの形状をテストした後、形状データは上書きされることが許されることを可能にする。
【0185】
本明細書中で特定されたキューはいずれも、共有メモリ資源において、SRAMにおいて、リンクドリストとして、循環バッファとして、メモリのシーケンシャルなロケーション若しくはストライプ状のメモリロケーションで、または、キューの技術において公知である他の機能的な形式で実施されることが可能である。キューは、要件ではないが、最初に到達するパケットが最初に出て行くように、パケットの順序付けを維持するため動作可能である。いくつかの実施では、各計算資源は、パケットを順序と無関係に処理することが有利であるかどうかを決定するために、各計算資源のキュー内の所定の数のパケットを検査する能力が与えられることができる。このような実施は、順序正しいシステムより複雑であるが、必要に応じて提供されることが可能である。
【0186】
コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ、または、専用処理装置にある特定の関数または関数のグループを実行させるか、そうでなければ、構成する命令およびデータを含む。コンピュータ実行可能な命令は、例えば、バイナリ、アセンブリ言語のような中間フォーマット命令、またはソースコードでもよい。いくつかの主題は構造的特徴および/または方法の工程の実施例に固有の言語で記載されているが、請求項に記載された主題は必ずしもこれらの記載された特徴または作用に限定されないことが理解されるべきである。それどころか、記載された特徴および工程は、請求項に記載された事項の範囲内でシステムおよび方法のコンポーネントの実施例として開示されている。
【0187】
以上、コンピューティングハードウェアおよび/またはソフトウェアプログラミングの様々な実施例と、さらにこのようなハードウェア/ソフトウェアがどのように相互に通信できるかについての実施例とが説明された。ハードウェア、または、ソフトウェアを使って構成されたハードウェアと、このような通信インターフェイスとのこれらの実施例は、これらのそれぞれに帰属した機能を達成する手段を提供する。例えば、本明細書中のいくつかの実施例による交差テストの手段は、(1)それぞれがレイ定義データのローカライズされた記憶装置を有し、(複数の)レイの識別子および形状データが設けられるのに応答して、形状との交差に関してこれらの(複数の)レイをテストするため動作可能である複数の独立に動作可能なコンピューティング資源のうちのいずれかを含むことが可能である。
【0188】
例えば、レイのコレクションを管理する手段は、レイ識別子のグループの追跡を実施し、グループをアクセラレイションデータの要素と関連付ける、プログラミングを使って構成されたコンピューティング資源、または、FPGA若しくはASIC、または、それらの一部分を含み、レイ識別子と、レイ識別子のグループと関連付けられた形状によって決定された形状への参照情報または形状データのいずれかと、を備えるパケットを形成させるか、または、形成させる情報を提供することが可能である。
【0189】
例えば、上述された機能は、交差テストを終了し、これらの交差をシェードするため構成されたコンピューティング資源における処理のため、プリミティブと交差したレイの識別子を、キューを介して、通信することを含む。この機能を実施する手段は、ハードウェアキュー、または、リングバッファ若しくはリンクドリストなどとして構成されたメモリのようなキューまたはリストとして編成された共有メモリスペースを含むことが可能である。従って、この手段は、レイ識別子およびプリミティブ識別子がキューの中の次のスロット若しくは指定されたスロット、または、メモリ内のロケーションから取得されることをもたらすプログラミングおよび/またはロジックを含むことが可能である。コントローラは、レイ識別子およびプリミティブ識別子を発信および着信する次のリード位置および次のライト位置を維持するため、キューまたはメモリを管理することが可能である。このようなキューイング手段は、交差テスト資源がレイ識別子および形状データのパケットを互いに伝達するとき、交差テスト資源を一緒にインターフェイスをとるため使用されることがさらに可能である。このようなキューイング手段は、交差テストの開始を待機している新しいレイのためのレイ識別子を受信するため使用されることがさらに可能である。よって、このようなより具体的なキューイング機能のそれぞれは、これらの手段または均等物によって実施されることが可能である。
【0190】
例えば、上述の機能は、レイとプリミティブとの間で特定された交差をシェードする工程を含む。この機能は、交差したプリミティブと関連付けられたプログラミングを用いて構成されたコンピューティングハードウェアを含む手段によって実施されることが可能である。プログラミングは、プリミティブがプリミティブにヒットする光に与える影響を決定するためどのような他の情報が必要とされるかを決定するために、コンピューティングハードウェアにテクスチャ、手続き的ジオメトリ変形などのようなデータを取得させる。プログラミングは、新しいレイの放射がさらに交差テストされることを引き起こすことが可能である(例えば、シャドーレイ、屈折レイ、反射レイ)。プログラミングは、このようなレイの放射を引き起こすため、アプリケーション・プログラミング・インターフェイスとインターフェイスをとることが可能である。シェーディングプログラムによって定義されるようなレイは、始点および方向定義情報を含むことが可能であり、コントローラはこのような定義されたレイのレイ識別子を決定可能である。固定機能ハードウェアは、このような機能の一部分を実施するため使用されることが可能である。しかし、交差したプリミティブと関連付けられたコード、および/または、要求または必要に応じて他のコードに従って構成されることが可能であるコンピューティング資源を使用するプログラマブルシェーディングを許可することが好ましい。
【0191】
例えば、上述された別の機能は、交差に関してテスト中、および/または、交差テストを待機中のレイのマスタリストを維持し、これらのマスタレイのサブセットを交差テストの手段と関連付けられた分散型キャッシュメモリの間に分散させた。このような機能は、これらの機能を実施するプログラミングの制御下でデータを格納するメモリとインターフェイスをとるために集積型または別個のメモリコントローラを使用することが可能であるプロセッサまたはプロセッサのグループを含む手段を用いて実施されることが可能である。このようなプログラミングは、交差テスト機能と関連付けられるか、または、そうでなければ、交差テスト機能を制御するドライバの中に少なくとも部分的に組み入れられることが可能である。
【0192】
上述されたおよび/または請求項に記載された機能および方法の態様は、以下に詳述されるようにコンピュータハードウェアを含む専用または汎用コンピュータで実施されることがある。このようなハードウェア、ファームウェア、およびソフトウェアは、ビデオカードまたはその他の外部若しくは内部コンピュータシステム周辺機器に具現化することも可能である。種々の機能はカスタム化されたFPGA若しくはASIC、または、他の再構成可能なプロセッサの中に提供可能であるが、いくつかの機能はマネージメントまたはホストプロセッサの中に提供可能である。このような処理機能は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルな民生エレクトロニクス、ゲームコンソール、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話機、PDA、ページャなどで使用されることがある。
【0193】
さらに、
図1のリンク112、121および118のような図に表された通信リンクおよび他のデータフローと、他の図における類似したリンクとは、特定された機能の実施に依存する種々の方式で実施することが可能である。例えば、交差テストユニット109が、1若しくはそれ以上のCPUで動く複数のスレッドを含む場合、リンク118は、レイデータ記憶装置105にアクセスできるようにするため、このような(複数の)CPUおよび適切なメモリ・コントローラ・ハードウェア/ファームウェア/ソフトウェアの物理的なメモリアクセス資源を含むことが可能である。さらなる実施例として、交差テスト領域140がPCIエクスプレスバスによってホスト140に接続されたグラフィックスカード上にある場合、リンク121および112はPCIエクスプレスバスを使用して実施される。
【0194】
本明細書中に記載されているような交差テストは、大規模システムおよびシステムのコンポーネントとの関係において一般に存在する。例えば、処理は、ローカルまたはワイド・エリア・ネットワークのようなネットワーク上に分散させることが可能であり、そうでなければ、ピア・ツー・ピア・テクノロジなどを使用して実施されることもできる。タスクの分割は、製品若しくはシステムの所望の性能、所望の価格、または、これらの何らかの組み合わせに基づいて決定可能である。上記ユニットのいずれかを少なくとも部分的にソフトウェアで実施する実施形態では、単位機能を示すコンピュータ実行可能な命令は、例えば、磁気ディスク、光ディスク、フラッシュメモリ、USB装置、または、NAS若しくはSAS機器のようなネットワーク型のストレージ装置などのようなコンピュータ読み取り可能な媒体に格納可能である。処理のためのデータのような他の適当な情報もまたこのような媒体に格納可能である。
【0195】
同様に、いくつかの場合に、専門用語は、要点を当業者により合理的に伝えると考えられるので、本明細書中で使用されているが、このような専門用語は開示された実施例および他の態様によって包含される実施の範囲を暗黙的に制限するように考えられるべきではない。例えば、レイは、時には始点および方向を有しているといわれることがあり、これらの別個の項目のうちの1つずつは、本開示内容の態様を理解するため、3次元空間内の点、および、3次元空間内の方向ベクトルをそれぞれ表現しているとして見なすことが可能である。しかし、レイを表現するための種々の他の方法のいずれかが提供されることが可能であり、本開示内容の範囲内にとどまる。例えば、レイ方向は極座標で表現されることも可能である。一つのフォーマットで提供されたデータは、当初に表現されていたデータの情報の有意性を維持したまま、別のフォーマットに変換されるか、または、マップされることが可能であることも理解されることになる。
【0196】
同様に、ある程度の数の実施例が先行の開示内容において図示され、説明され、各実施例は、特許請求の範囲に従って具現化されたシステム、方法、および、コンピュータ読み取り可能な媒体に格納されたコンピュータ実行可能な命令である種々の態様を図示する。必然的に、必ずしもあらゆる実施例があらゆる態様を図示できなくてもよく、実施例はこのような態様の排他的なコンポーネントを図示しない。その代わりに、1つの図面または実施例に関連して図示され、説明された態様は使用されることが可能であり、または、他の図に関して図示され、説明された態様との組み合わせが可能である。従って、当業者は、これらの開示内容から、上記開示内容が請求項による実施形態の構成要素に関して制限的ではなく、それどころか、請求項の範囲は本明細書中の発明の実施形態の広がりおよび範囲を定義することを理解することになる。