JP2009543195A - グラフィックスパイプラインステートの高速再構成 - Google Patents

グラフィックスパイプラインステートの高速再構成 Download PDF

Info

Publication number
JP2009543195A
JP2009543195A JP2009518138A JP2009518138A JP2009543195A JP 2009543195 A JP2009543195 A JP 2009543195A JP 2009518138 A JP2009518138 A JP 2009518138A JP 2009518138 A JP2009518138 A JP 2009518138A JP 2009543195 A JP2009543195 A JP 2009543195A
Authority
JP
Japan
Prior art keywords
resource
slot
shader
resources
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009518138A
Other languages
English (en)
Other versions
JP5154551B2 (ja
JP2009543195A5 (ja
Inventor
スリニバサン,ラマヌジャン
マルコビッチ,レルジャ
グラゼンバーグ,サミュエル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009543195A publication Critical patent/JP2009543195A/ja
Publication of JP2009543195A5 publication Critical patent/JP2009543195A5/ja
Application granted granted Critical
Publication of JP5154551B2 publication Critical patent/JP5154551B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

【解決手段】
グラフィックスパイプラインにおいて、シェーダに関連付けられる特定のスロットにリソースを結合するための技法及び技術を提供する。各シェーダによって利用されているリソース間のリソース依存関係が決定され得、これらのリソース依存関係に基づいてコモンリソース/スロット関連付けが、計算され得る。コモンリソース/スロット関連付けそれぞれは、特定のスロットの1つに関連付けられる特定のリソース1つを指定する。
【選択図】図6

Description

3次元(3−D)グラフィックスを画面上にレンダリングし、表示することは、通常、多くの演算及び計算を伴う。単純なグラフィックスシステムにおいては、そのような計算は、いくつかのレベルの協調的又は共有のプロセスに従って中央処理ユニット(CPU)及びグラフィックスプロセッシングユニット(GPU)によって発生する。例示的なシナリオにおいては、命令が処理され、いくつかの初期計算がCPUにおいて発生した後、レンダリングされるオブジェクトを定義するコーディネートポイント又はバーテックス(頂点:vertex)のセットが、グラフィックスパイプラインにおけるGPUによる更なる処理のためにビデオメモリにストアされる。グラフィックスプログラマが、有効なグラフィックスAPIセットを介しグラフィックスアプリケーションを開発するとき、プログラマは、一般にアルゴリズムエレメントセットによって操作されるバーテックスセットを指し示す。このデータは、グラフィックスパイプラインに送信され、各バーテックスは、グラフィックスパイプライン中の固定のGPUサブユニットセットを介しストリーミングされる。これらのサブユニットの1つは、テッセレータ(tesselator)と呼ばれ、表示されるオブジェクトの表面を効率的にカバーするように設計された所定のアルゴリズムに従って、グラフィックスデータを単純なポリゴンに分解する。その後、時としてシェーダ又は「シェーダプログラム」として参照される1つ以上のプログラム可能なシェーダユニットは、データに作用し得、グラフィックスデータに対して特化された操作を実行し得る。シェーダは、例えばバーテックスシェーダ(単数又は複数)、ジオメトリシェーダ(単数又は複数)及びピクセルシェーダ(単数又は複数)を含み得る。
単一のシェーダは、異なる組み合わせのシェーダ定数を受信でき、提供される特定の組み合わせのシェーダ定数に従って、シェーダによって生成される出力が異なる。これらのシェーダ定数は、例えばピクセルがどのように結合されるか、データがどのように読み込まれ読み出されるか、テクスチャの場合は、そのテクスチャからどのような値が抽出されるかを指定し得る。シェーディングプロセスは、計算に集中する複雑な処理である。これらの特定のシェーダが、グラフィックスパイプラインにおいて作動するとき、各ステージにおいて発生する動作による日常的なボトルネックがある。
「ステート」は、シェーダプログラムによって解釈されるリソースを参照している。どのような実例においても、グラフィックスパイプラインは、(レンダリングステート、シェーダ(複数)、シェーダ可変定数(複数)、リソース/メモリ結合(複数)などの)大量の動的ステートを含む。ステートの異なる組み合わせが、様々な構成要素のシミュレート及び視覚効果を可能にする。
このステートの一つの要素は、シェーダプログラムを実行する前にGPUに結合される必要があるシェーダ定数セットである。どのような実例においても、グラフィックスパイプラインを実装するために使用されるハードウェアは、1つだけの構成において存在し得るために、ステート(例えばシェーダ定数)を設定し、GPUにコマンドを発行することに消費される時間を低減することが望まれる。
シェーダの中にはシェーダ定数の分類又は集合を保持する(定数レジスタと対照的なものとして)定数バッファを利用するものもある。シェーダ定数の集合が分類されるために、定数バッファは、シェーダ定数をGPUにより高速に設定可能にし得る。これらの進歩にも関わらず、余分な評価及びデバイスステート変更を回避するために、ステートを効率的に管理することが望まれる。例えばGPUにステートをより効率的に設定するために、異なるシェーダにおいて使用される定数バッファ(又は他のリソース)を効率的に設定する技法を提供することが望まれる。
複数のリソースを含む依存ツリーを再構成するための技法を提供する。依存ツリーは、異なるシェーダリソース間の関係又は依存関係の経過を保持する。特定のリソースそれぞれは、依存ツリーにおける親オブジェクトのスロットに結合される。これらの技法に従って依存ツリー内の依存関係それぞれが走査され、依存ツリーの異なる再構成(シェーダの再配置又は再構築)それぞれに関連するコストが算出される。依存ツリーの再構成それぞれは、一定のリソース(CB(複数))が結合されている特定のスロットを変更する。依存ツリーの特定の再構成は次に、より上位レベルのステート間を遷移するために、デバイス再構成の数を低減又は最小化するように選択できる。言い換えれば、現在ロードされたシェーダ間の移行/切り換えのために再結合される必要があるスロット数を最小化する依存ツリーの特定の再構成が次に、選択され得る。一実装においては、これらの技法は、オフラインコンテンツの生成及び保存のために実行され得、(例えばシェーダのセットが事前に知られている場合、シェーダが分析され、依存関係が再配置され、次に、シェーダがディスクに戻って保存される)。代替の実装においては、本方法は、(例えばシェーダのセットが事前に知られていない場合)アプリケーションの実行時/ロード時に動的に実行される。
「発明を実施するための最良の形態」に更に後述される概念から選択を簡易化された形式で紹介するためにこの概要を提供する。この概要が、請求項記載対象の重要な特徴又は本質的な特徴を特定することを意図せず、請求項記載対象の範囲を決定する際に使用されることも意図しない。
更に添付図面を参照し、グラフィックスパイプライン性能の最適化における使用のためのシステム及び方法を説明する。
以下の詳細説明は、実際には単に例示的であって、本発明又はアプリケーション及び本発明の用途を限定する意図はない。本明細書において、語句「例示的」は、「例、実例又は図示として提供すること」を意味する。本明細書に「例示的である」として記述された任意の実装は、他の実装に比較して必ずしも好ましいか又は有利であると理解される必要はない。後述する実装のすべては、当業者が本発明を作成又は使用可能にするために提供される例示的な実装であって、請求項によって定義される発明の範囲を限定する意図はない。更に、以前の背景、簡潔な概要又は以下の詳細な説明において提示された任意の表現又は暗示された理論によって拘束される意図は全くない。
用語
本明細書において、用語「シェーダ」は、一般にシェーディングを実行するGPUのハードウェアサブユニットを参照するか又はシェーディングを実行するためのシェーダ(ハードウェア)によって使用されるメモリ例えばレジスタ記憶装置に次にロードされる、GPUにダウンロードされる命令セット又はトークンを参照するために使用され得る。用語「シェーダ」は、動作する双方を一緒に参照することもできる。また用語「サブユニット」が用語「シェーダ」に関連しても使用され、用語「シェーダ」は、シェーディングに関連するプロセスを実行するGPUのサブユニットについて参照するように解釈されたい。用語「シェーダプログラム」は、一般にグラフィックスパイプラインに存在し実行するプログラム又はプロセスを参照し得、画面上の最終的な画像の表面特性又は3次元画面環境におけるオブジェクトの決定/定義を支援するために使用される。「シェーダ」は、それらの特定のタスクを実行するために毎秒何十億の計算を実行可能である。
本明細書において、用語「リソース」は、シェーダプログラムによって使用される入力を参照し、例えばシェーダプログラムによって使用されるテクスチャ、サンプラー、定数バッファ又は他の任意のリソースも包含し得る。
本明細書において、用語「シェーダ定数」は、シェーダプログラムが、使用される特定のシェーダ定数に基づいて異なる結果の生成を可能にするシェーダプログラムに与えられる異なるパラメタ又は変数を参照し得る。シェーダプログラムは、シェーダ定数それぞれのための様々な異なる値を受信し得る。シェーダ可変定数(constant variables)は、そのシェーダ呼び出しの間、値を変更しない。
概要
実行時のシェーダ定数の使用パターンを追跡し、次にシェーダ定数の使用形態に関連するデータの使用パターンを生成するための技法を提供する。この使用パターンのデータは次に、一定の経験則を所与として最大性能のために、データを効率的に割り付けるための最適化アルゴリズムに与えられ得る。考慮される要因は、例えば値のクライアント更新周期、一定のシェーダによる用法、結果バッファのサイズ及び数を含む。
例示的ネットワーク分散環境
当業者は、本発明が任意の計算機又は他のクライアント又はサーバ装置と接続し実装され得、計算機ネットワークの一部として又は分散計算環境において、使用され得ることを理解されよう。この点において、本発明は、様々なメモリ又は記憶装置を有する計算機システム又は環境と、様々な記憶ユニット又はボリュームに渡って発生する様々なアプリケーション及びプロセスと、に関連し本発明による任意のグラフィックスパイプラインの非限定的な実装のためのプロセスに関連し使用され得る。本発明は、リモート又はローカル記憶装置を有するネットワーク環境又は分散計算環境において配備されるサーバ計算機及びクライアント計算機を用いた環境に適用できる。また本発明は、プログラム言語機能性、インタプリタ及びリモート又はローカルサービスと接続して情報を生成し、受信し、送信するための実行能力を有する単独で動作する計算装置に適用され得る。ゲーム環境においては、グラフィックスパイプラインは、特にネットワーク化された又は分散化された計算環境において作動する計算装置に関連し、従って本発明によるグラフィックスパイプライン技法は、それらの環境において多くの効力を適用できる。
分散計算は、計算装置及びシステム間の交換によって、計算機リソース及びサービス共有を提供する。これらのリソース及びサービスは、情報の交換、キャッシュ記憶装置及びファイル用のディスク記憶装置を含む。分散計算は、ネットワークの接続性を利用し、クライアントが、企業全体のためになるクライアントの集合的な力を活用可能にする。この点においては、様々な装置は、本発明のグラフィックスパイプラインプロセスに関係していると見なされ得るアプリケーション、オブジェクト又はリソースを有し得る。
図1は、例示的なネットワーク化された又は分散された計算環境の概念図を提供する。分散計算環境は、計算オブジェクト(10a)、(10b)その他及び計算オブジェクト又は装置(110a)、(110b)、(110c)その他を含む。これらのオブジェクトは、プログラム、方法、データストア、プログラム可能なロジックなどを含み得る。オブジェクトは、PDA、音声/映像装置、MP3プレーヤ、パーソナル計算機その他などの同一か又は異なる装置の一部を含み得る。各オブジェクトは、通信ネットワーク(14)を介し別のオブジェクトと通信できる。このネットワークは、図2Aのシステムにサービスを提供する他の計算オブジェクト及び計算装置を含み得、複数の相互接続ネットワークを表し得る。本発明の特徴に従ってオブジェクト(10a)(10b)その他又は(110a)、(110b)、(110c)その他それぞれが、本発明によるグラフィックスパイプラインプロセスの使用をリクエストするためのAPI、他のオブジェクト、ソフトウェア、ファームウェア及び/又はハードウェアを利用し得るアプリケーションを含み得る。
また(110c)などのオブジェクトが、別の計算装置(10a)、(10b)その他又は(110a)、(110b)その他においてホスティングされ得ることも十分理解され得る。こうして表現された物理的な環境は、計算機などの接続装置を示し得るが、そのような図は単に例示的であって、物理的環境は、PDA、テレビ、MP3プレーヤその他のような様々なデジタル装置、インタフェース、COMオブジェクトやその他のようなソフトウェアを含み代替として描かれるか又は説明され得る。
分散計算環境を支援する様々なシステム、コンポーネント及びネットワーク構成が存在する。計算システムは、例えば有線又は無線システムによって、ローカルネットワーク又は広域分散ネットワークによって1つに接続され得る。現在、ネットワークの多くは、広域分散計算のための構造基盤を提供し、多くの異なるネットワークを包含するインターネットと結合される。構造基盤のいくつかは、本発明によるグラフィックスパイプラインに付随される例示的通信のために使用され得る。
家庭のネットワーク環境においては、電力線、データ(無線及び有線双方)、音声(例えば電話)及び娯楽メディアのようなそれぞれ固有のプロトコルを支援し得る少なくとも4つの異種ネットワーク輸送媒体がある。電灯スイッチ及び器具など、家庭の制御装置のほとんどは、接続性のために電力線を使用し得る。データサービスは、ブロードバンド(例えばDSL又はケーブルモデムのいずれか)として家庭に入力し得、無線(例えばHomeRF又は802.11B)又は有線接続性(例えばホームPNA、Cat5、イーサネット、電力線でさえ)いずれかを使用し家庭内でアクセスし得る。音声トラフィックは、有線(例えばCat3)又は無線(例えば携帯電話)として家庭に入力可能であって、Cat3配線を使用し家庭内で配布できる。娯楽メディア又は他のグラフィックスデータは、衛星又はケーブルを介し家庭に入力可能であって、通常同軸ケーブルを使用し家庭内で配信される。またIEEE1394及びDVIは、媒体装置クラスター用デジタル相互接続である。プロトコル標準として出現し得るこれらのネットワーク環境及び他のすべては相互接続されて、イントラネットなどのネットワークを形成し、インターネットを介し外部の世界に接続され得る。要約すると、様々な異種のソースは、データの記憶と伝送のために存在し、その結果として先に進めると、計算装置は、本発明によるグラフィックスパイプラインを利用するプログラムオブジェクトへのデータアクセス又は利用されるインシデントなどの、データを共有する方法を必要とする。
インターネットは、一般に当技術分野における計算機のネットワーク化で周知のTCP/IPのプロトコルスイートを利用するネットワーク及びゲートウェイの集合を参照している。TCP/IPは、「Transmission Control Protocol/Internet Protocol」に対する頭文字語である。インターネットは、ユーザがネットワーク(複数又は単数)を通して対話し、情報を共有するネットワークプロトコルを実行する計算機によって相互接続される地理的に分散したリモート計算機ネットワークのシステムとして記述され得る。そのような広範囲の情報共有のために、インターネットなどのリモートネットワークは、今までのところは一般に、開発者が本質的には制限しないで特化した作業又はサービスを実行するためのソフトウェアアプリケーションを設計できるオープンシステムに発展してきた。
従ってネットワーク基盤は、クライアント/サーバ、ピアツーピア又はハイブリッド構造などのネットワークトポロジーのホストを可能にする。「クライアント」は、関係付けられない別のクラス又はグループのサービスを利用するクラス又はグループのメンバーである。従って計算においては、クライアントは、別のプログラムによって提供されるサービスをリクエストするプロセス、すなわち概略、命令又はタスクセットであり得る。クライアントプロセスは、他のプログラム又はサービス自体に関する任意の動作の詳細を「知る」必要なく、リクエストされたサービスを利用する。クライアント/サーバアーキテクチャ、特にネットワーク化されたシステムにおいては、クライアントは通常、別の計算機、例えばサーバによって提供される共有ネットワークリソースにアクセスする計算機である。図1の例においては、計算機(110a)、(110b)その他は、クライアントとして考えられ得、計算機(10a)、(10b)その他は、サーバとして考えられ得、任意の計算機は、状況に従ってクライアント、サーバ又は双方と考えられ得るが、サーバ(10a)、(10b)その他は、次にクライアント計算機(110a)、(110b)その他において複製されるデータを維持する。これらの計算装置のいくつかは、データ処理し得又は本発明におけるグラフィックスパイプラインの実装に特定のグラフィックスプログラミング技術に関係していると見なし得るサービス又はタスクをリクエストできる。
サーバは通常、インターネットなどのリモート又はローカルネットワークにおいてアクセス可能なリモート計算機システムである。クライアントプロセスは、第1の計算機システムにおいて動作中であり得、サーバプロセスは、第2の計算機システムにおいて動作中であり得、通信媒体上で相互通信し、こうして分散機能性を提供し、複数のクライアントがサーバの情報収集能力を利用可能にする。グラフィックスパイプラインのグラフィックスプログラミング技術によって利用される任意のソフトウェアオブジェクトは、複数の計算装置又はオブジェクトに渡って分散され得る。
クライアント(単数又は複数)及びサーバ(単数又は複数)は、プロトコルレイヤ(単数又は複数)で提供される機能性を利用し相互通信する。例えば、ハイパーテキスト転送プロトコル(HTTP)は、WWW(WWW)又は「ウェブ」に関連し使用される一般的なプロトコルである。インターネットプロトコル(IP)アドレスなどの計算機ネットワークアドレス又はユニバーサルリソースロケータ(URL)などの他の参照は通常、サーバ又はクライアント計算機を相互に識別するために使用され得る。ネットワークアドレスは、URLアドレスとして参照され得る。通信が、通信媒体を通して提供され得、例えばクライアント(単数又は複数)及びサーバ(単数又は複数)は、大容量通信用のTCP/IP接続(単数又は複数)を介し相互接続され得る。
このように図1は、本発明が使用され得る、ネットワーク/バスを介してクライアント計算機と通信するサーバを用いた例示的なネットワーク化又は分散化した環境を示す。更に詳細には、複数のサーバ(10a)、(10b)その他は、LAN、WAN、イントラネット、インターネットであり得る通信ネットワーク/バス(14)を介し、携帯用計算機、ハンドヘルドコンピュータ、シンクライアント、ネットワーク化された電化製品、VCR、テレビ、オーブン、電灯、ヒーターやその他のような複数のクライアント又はリモート計算装置(110a)、(110b)、(110c)、(110d)、(110e)その他を有すると本発明により相互接続される。従って本発明は、本発明のグラフィックスパイプラインを使用するグラフィックスインタフェースを実施することが望まれる任意の計算装置に関連して適用できると想定される。
通信ネットワーク/バス(14)がインターネットであるネットワーク環境においては、例えばサーバ(10a)、(10b)その他は、クライアント(110a)、(110b)、(110c)、(110d)、(110e)その他が、HTTPなど知られている複数のプロトコルを介し通信するウェブサーバであり得る。またサーバ(10a)、(10b)その他は、クライアント(110a)、(110b)、(110c)、(110d)、(110e)その他としての役目をし得、分散計算環境の特徴であり得る。通信は、適切な有線又は無線であり得る。クライアント装置(110a)、(110b)、(110c)、(110d)、(110e)その他は、通信ネットワーク/バス(14)を介し通信し得るか又は通信し得ず、それらに関連し独立した通信を有し得る。例えばテレビ又はVCRの場合、そのコントロールに対してネットワーク化され得るか又はされ得ない。クライアント計算機(110a)、(110b)、(110c)、(110d)、(110e)その他及びサーバ計算機(10a)、(10b)その他それぞれは、様々なアプリケーションプログラムモジュール又はオブジェクト(135)と、ファイル又はデータストリームがストアされ得る又はファイルの一部(単数又は複数)又はデータストリームがダウンロード、送信又は移動され得る様々なタイプの記憶エレメント又はオブジェクトに対する接続又はアクセスと、を備え得る。1つ以上の任意の計算機(10a)、(10b)、(110a)、(110b)その他は、本発明に従って処理されるデータをストアするためのデータベース又はメモリ(20)などのデータベース(20)又は他の記憶エレメントを維持し、更新し得る。このように本発明は、計算機ネットワーク/バス(14)にアクセスし、対話し得るクライアント計算機(110a)、(110b)その他と、クライアント計算機(110a)、(110b)その他及びデータベース(20)及び他の装置その他と対話し得るサーバ計算機(10a)、(10b)その他と、を有する計算機ネットワーク環境において利用される。
例示的計算装置
図2及び以下の論述は、本発明に関連し実施され得る適切な計算環境の簡潔な概説を提供することを意図する。しかしながら、ハンドヘルド、携帯用及び他の計算装置及びすべての種類の計算オブジェクトが、すなわちそのGPUが計算環境どこでも存在する所において、本発明に関連した使用に対して想定されることを理解されたい。汎用計算機が以下に説明されるが、これは一例に過ぎず、本発明は、ネットワーク/バス相互運用性及び相互作用を有するシンクライアントを用いて実施され得る。このように本発明は、微小又は最小のクライアントリソースが関係していると見なされるネットワークに接続されたホストのサービス環境において実施され得、例えばそこではクライアント装置は、電化製品に置かれるオブジェクトのような単にネットワーク/バスにインタフェースとしての役目を果たす。本質的にデータがストアされ得るか又はデータがそこからリトリーブ又は別の計算機に送信され得る場所は、本発明に従ったグラフィックス最適化技法の操作のために望まれる又は適する環境である。
本発明は、必要ではないが装置又はオブジェクトに対するサービスの開発者による使用のためにオペレーティングシステムを介し実施され得、及び/又は本発明のグラフィックスパイプラインに対するグラフィックスプログラミング技術に関連して作動する、アプリケーションソフト内に含まれる。ソフトウェアは、クライアントワークステーション、サーバ又は他の装置などの1つ以上の計算機によって実行されるプログラムモジュールなどの計算機実行可能命令の一般的な文脈で記載され得る。一般にプログラムモジュールは、特定のタスクを実行するか、又は特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。プログラムモジュールの機能性は通常、様々な実施形態において所望によって結合又は分散され得る。当業者は更に、本発明が、他の計算機システムの構成及びプロトコルを用いて実施され得ることを理解されよう。本発明を用いて使用するのに適し得る他の周知の計算システム、環境及び/又は構成はパーソナルコンピュータ(PC)、現金自動預入支払機、サーバ計算機、携帯用又はラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースシステム、プログラマブル家電、ネットワークPC、電化製品、電灯、環境制御エレメント、ミニコンピュータ、メインフレームコンピュータ又はその他を含むが、これらに限定されない。本発明は、通信ネットワーク/バス又は他のデータ伝送媒体を介し接続されるリモート処理装置によるタスクが実行される分散計算環境においてもまた実施され得る。分散計算環境においては、プログラムモジュールは、メモリ記憶装置を含むローカル及びリモート双方の計算機記憶媒体に配置され得、クライアントノードは、サーバノードとして順に実行し得る。
このように図2は、本発明が実施され得る適応する計算システム環境(100)の一例を示すが、前述において明らかにしたように計算システム環境(100)は、適応する計算環境の一例に過ぎず、本請求項の使用又は機能性の範囲に関しいかなる制限を提示することも意図しない。計算環境(100)は、例示的な動作環境(100)において示されるコンポーネントの任意の1つ又は組み合わせに関していかなる依存関係も要求も有しないものとして解釈されるべきである。
本発明を実施するための例示的なシステムは、図2を参照して計算機(110)形式の汎用計算装置を含む。計算機(110)のコンポーネントは、処理ユニット(120)、システムメモリ(130)及びシステムメモリを含む多様なシステムコンポーネントを処理ユニット(120)に接続するシステムバス(121)を含むが、これに限定されない。システムバス(121)は、メモリバス又はメモリコントローラを含むいくつかの任意のタイプのバス構造、周辺機器用バス及び様々なバスアーキテクチャのうちいくつかを使用するローカルバスであり得る。制限ではなく例として、そのようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ機器に関する標準化団体(VESA)ローカルバス及び(メザニンバスとしても知られる)周辺機器相互接続(PCI)バスを含む。
計算機(110)は、一般に様々な計算機可読媒体を含む。計算機可読媒体は、計算機(110)によってアクセスされ得る使用可能な任意の媒体であり得、揮発性及び不揮発性双方の媒体及び取り外し可能及び取り外し不可能な双方の媒体を含む。制限ではなく例として、計算機可読媒体は、計算機記憶媒体及び通信媒体を含む。計算機記憶媒体は、計算機可読命令、データ構造、プログラムモジュール又は他のデータなどの情報の記憶に関する任意の方法又は技術にて実装される揮発性及び不揮発性双方の取り外し可能及び取り外し不可能な媒体を含む。計算機記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)又は他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶装置又は所望の情報をストアするために使用され得、計算機(110)によってアクセスされ得る他の任意の媒体を含むが、これらに限定されない。通信媒体は一般に、搬送波又は別の移送機構などの変調データ信号で計算機可読命令、データ構造、プログラムモジュール又は他のデータを具現化したものであって、任意の情報伝達媒体を含む。用語「変調データ信号」は、1つ以上の特徴の組を有する信号又は信号中の情報を符号化する方法によって変更された信号を意味する。通信媒体は、制限ではなく例として、有線ネットワーク又は直接有線接続のようなワイヤード媒体並びに音響、無線(RF)、赤外線及び他の無線媒体のようなワイヤレス媒体を含む。前述の任意の組み合わせもまた、計算機可読媒体の範囲内に含む必要がある。
システムメモリ(130)は、読み出し専用メモリ(ROM)(131)及びランダムアクセスメモリ(RAM)(132)などの揮発性及び/又は不揮発性メモリ形式の計算機記憶媒体を含む。基本入出力システム(BIOS)(133)は、通常、起動の間などに計算機(110)のエレメント間の情報送信を支援する基本ルーチンを含んでいて、ROM(131)にストアされる。RAM(132)は通常、処理ユニット(120)によって直接アクセス可能な及び/又は現在作動されているデータ及び/又はプログラムモジュールを含む。制限ではなく例として、図2は、オペレーティングシステム(134)、アプリケーションプログラム(135)、他のプログラムモジュール(136)及びプログラムデータ(137)を示す。
また計算機(110)は、別の取り外し可能/取り外し不可能、揮発性/不揮発性の計算機記憶媒体も含み得る。例に過ぎないが、図2は、取り外し不可能、不揮発性磁気媒体から読み出すか又は書き込むハードディスクドライブ(141)、取り外し可能、不揮発性磁気ディスク(152)から読み出すか又は書き込む磁気ディスクドライブ(151)、CD−ROM又は他の光媒体などの取り外し可能、不揮発性光ディスク(156)から読み出すか又は書き込む光ディスクドライブ(155)を示す。例示的な動作環境において使用され得る別の取り外し可能/取り外し不可能、揮発性/不揮発性計算機記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、半導体RAM、半導体ROM等を含むが、これに限定しない。ハードディスクドライブ(141)は通常、インタフェース(140)などの取り外し不可能メモリインタフェースを介し、システムバス(121)と接続され、磁気ディスクドライブ(151)及び光ディスクドライブ(155)は通常、インタフェース(150)などの取り外し可能メモリインタフェースによってシステムバス(121)と接続される。
前述の図2に例示されるドライブ及びそれらに関連する計算機記憶媒体は、計算機(110)に計算機可読命令、データ構造、プログラムモジュール及び他のデータの記憶装置を提供する。図2においては、例えばハードディスクドライブ(141)は、オペレーティングシステム(144)、アプリケーションプログラム(145)、他のプログラムモジュール(146)及びプログラムデータ(147)をストアするように示される。これらのコンポーネントは、オペレーティングシステム(134)、アプリケーションプログラム(135)、他のプログラムモジュール(136)及びプログラムデータ(137)と同等か又は異なるいずれかであり得ることに留意されたい。オペレーティングシステム(144)、アプリケーションプログラム(145)、他のプログラムモジュール(146)及びプログラムデータ(147)が、異なる複製物であることを最小限示すために、本明細書においては所与の異なる番号を付与する。ユーザは、キーボード(162)などの入力装置及びマウス、トラックボール又はタッチパッドとして一般に呼ばれるポインティング装置(161)を介し、計算機(110)にコマンド及び情報を入力できる。(示されない)別の入力装置は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ又はその他を含み得る。多くの場合、これら及び他の入力装置は、システムバス(121)に接続されるユーザ入力インタフェース(160)を介し処理ユニット(120)と接続されるが、パラレルポート、ゲームポート又はユニバーサルシリアルバス(USB)のような別のインタフェース及びバス構造によっても接続され得る。またノースブリッジなどのグラフィックスインタフェース(182)が、システムバス(121)に接続され得る。ノースブリッジは、CPU又はホスト処理装置(120)と通信し、アクセラレイティッドグラフィックスポート(AGP)通信用の責務を担うチップセットである。1つ以上のグラフィックスプロセッシングユニット(GPU)(184)は、グラフィックスインタフェース(182)と通信し得る。その際、GPU(複数)(184)は一般に、レジスタ記憶装置などのオンチップメモリ記憶装置を含み、GPU(複数)(184)は、ビデオメモリ(186)と通信し、そこにおいては本発明のアプリケーション変数が影響を与え得る。GPU(複数)(184)は、コプロセッサの一例に過ぎないが、しかし、このように様々なコプロセッシング装置は、計算機(110)に含まれ得、ピクセル及びバーテックスシェーダのような様々な手続き的なシェーダを含み得る。モニタ(191)又は別のタイプの表示装置もまた、ビデオメモリ(186)と次に通信するビデオインタフェース(190)などのインタフェースを介しシステムバス(121)に接続される。モニタ(191)に加えて計算機は、出力周辺インタフェース(195)介し接続され得るスピーカ(複数)(197)及びプリンタ(196)などの他の周辺出力装置もまた含み得る。
計算機(110)は、リモート計算機(180)などの1つ以上のリモート計算機との論理的な接続を使用するネットワーク化又は分散化環境において作動し得る。リモートコンピュータ(180)は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置又は一般的な他のネットワークノードであり得、図2にはメモリ記憶装置(181)だけが例示されているが、通常、前述の計算機(110)に関連するエレメントの多数又はすべてを含む。図2に示される論理的な接続は、ローカルエリアネットワーク(LAN)(171)及び広域ネットワーク(WAN)(173)を含むが、別のネットワーク(複数)/バス(複数)もまた含み得る。そのようなネットワーク環境は、家庭、オフィス、企業全体の計算機ネットワーク、イントラネット及びインターネットにおいて一般的である。
計算機(110)は、LANネットワーク環境において使用されるとき、ネットワークインターフェース又はアダプタ(170)を介しLAN(171)に接続される。計算機(110)は通常、WANネットワーク環境において使用されるとき、インターネットなどのWAN(173)において通信を確立するためのモデム(172)又は別の手段を含む。内蔵又は外付けであり得るモデム(172)は、ユーザ入力インタフェース(160)又は適切な別の装置を介し、システムバス(121)に接続され得る。ネットワーク化環境においては、計算機(110)又はその一部に関連し表示されるプログラムモジュールは、リモートのメモリ記憶装置にストアされ得る。図2は、制限ではなく例として、メモリ装置(181)に常駐するようなリモートアプリケーションプログラム(185)を示す。示されたネットワーク接続は、例示的であって、計算機の間の通信リンクを確立する他の手段が使用され得ることが十分理解されよう。
例示的分散計算フレームワーク又はアーキテクチャ
様々な分散計算フレームワークが、個人的な計算及びインターネットの集合の観点から開発されている。個人及びビジネスユーザは、一様にアプリケーション及び計算装置用の相互利用可能なウェブ対応できるインタフェースをシームレスに提供され、計算活動をますますウェブブラウザ又はネットワーク指向にする
例えば、マイクロソフト(登録商標)に管理されたコードプラットフォーム、すなわちドットネット(.NET)は、ウェブを基本とするデータ記憶装置及びダウンロード可能なデバイスソフトウェアなどのサーバ、ビルディングブロックサービスを含む。一般的に述べると、ドットネットのプラットフォームは、(1)計算装置の全体に渡って共に実行させ、それらすべてに対しユーザ情報を自動的に更新させ同期させる能力、(2)HTMLよりむしろXMLをより広範囲に使用することによって可能とされるウェブページに対し増大する対話能力、(3)例えば電子メールなどの様々なアプリケーション又はOffice NETのようなソフトウェア管理のための中心となる開始点からユーザにカスタマイズされた製品及びサービスのアクセス及び配布を特徴とするオンラインサービス、(4)情報へのアクセス効率及び容易さの他にユーザと装置との間の情報同期もまた増大させる中央データ記憶領域、(5)電子メール、ファックス及び電話などの様々な通信媒体統合化能力、(6)開発者に対する再利用モジュール生成能力及びそれによって生産性を増加しプログラミングエラー数を低減させる能力、(7)多くの他のクロスプラットフォーム及び言語統合機能など、を提供する。
本明細書においてはいくつかの例示的な実施形態が、計算装置上にあるソフトウェアに関連し説明されているが、本発明の1つ以上の部分はまた、オペレーティングシステム、アプリケーションプログラミングインタフェース(API)又は「middle man(仲介人)」オブジェクト、コントロールオブジェクト、ハードウェア、ファームウェア、中間言語の命令又はオブジェクトなどを介し実装され得、本方法は、他の分散計算フレームワークにおいても同様に含まれ得、支援され得、又はドットネットコードなどの管理コードによって使用可能な言語及びサービスすべてを介しアクセスされ得る。
例示的3次元グラフィックスシステムコンポーネント
図3は、グラフィックスプロセッシングユニット(GPU)(384’)を含むビデオカードなどのグラフィックスサブユニットを含む例示的なグラフィックスシステム(300)及び関連付けられるグラフィックスパイプライン(384’−1)用の例示的なハードウェア構成を示す。例示的な3次元グラフィックスシステム(300)は特に、中央処理ユニット(CPU)(320)と、(時として「レンダリングパイプライン」として呼ばれる)グラフィックスパイプライン(384’−1)を含む(時としてビジュアルプロセッシングユニット(VPU)と呼ばれる)グラフィックスプロセッシングユニット(GPU)(384’)を含むグラフィックスカードと、を含み得る。GPU(384’)は、例えばAGP又はPCI高速バスを介し、CPU(320)及びメインRAMと、接続され得る。
CPU(320)は一般に、シングルチップ、いくつか(例えば1つ以上)のスレッドを同時に処理又は実行可能な同時マルチスレッディング(SMT)プロセッサのようなマルチコア(例えばプロセッサ)を実行するマルチコアプロセッサなどの任意のプロセッサであり得る。本明細書において、用語「スレッド」は、個々の命令列を参照している。同時マルチスレッディングそれ自体は、単一のプロセッサが同時に数個のスレッドを処理するための能力を参照している。CPU(320)の各コアは、プロセッサの命令セットの拡張機能として単一命令複数データストリーム(SIMD)ユニットを有し得る。拡張機能は、特別にコード化されたとき、これらの命令セットをうまく利用するために、整数及び浮動小数点的に集中するアプリケーションを高速化するために役立つ特殊命令アプリケーションを含み得る。3次元グラフィックスをレンダリングする際に関与する計算は、数学的な集中をし得、むしろCPU(320)に重い負担をかけ得る。GPU(384’)は、CPU(320)への負担を軽減するために、計算機がより効率的な実行を支援するように提供され得る。
グラフィックスがラスター表示装置(例えば計算機モニタ(191))に出力される前に、それらのグラフィックスを生成するために使用される情報が、GPU(384’)及びそのグラフィックスパイプライン(384’−1)を介し通過する。GPU(384’)は、毎秒何十億の幾何学的図形計算を実行するためのハードウェアにおいて、グラフィックスパイプライン(384’−1)を実施する。
GPU(384’)は、グラフィックスを操作し表示する点で非常に効率的であって、高度な並列構造は、様々な複雑なアルゴリズムに関して、典型的なCPUよりも効果的にする。GPU(384’)は、ホストCPU(320)を用いて画面に直接描画するよりもそれらをはるかに速く実行することを可能にする方法によって、いくつかのグラフィックスプリミティブ動作を実施する。CPU(320)からこの負荷を軽減することは、計算機のCPU(320)が、グラフィックスデータを処理することを困難とする動作が必要ない(例えば他の仕事のために使用され得るサイクルを解放する)ことを意味する。グラフィックス機能の大部分をGPU(384’)にさせることによって、CPUは、ましてなおさら、没入する実時間グラフィックス環境を達成するための計算を実行できる。GPU(384’)は、ラスター表示装置(例えば計算機モニタ)上にグラフィックス要素(例えばそれらに適用されるテクスチャ及びシェーディングを有するポリゴン)表示を加速する。GPU(384’)は、最終的にモニタ(191)上にピクセルとしてその情報を表示するために、未加工の幾何学的図形データを処理する。グラフィックスパイプライン(384’−1)は、3次元シーン表示を受信し、いくつかの処理ステージを介する表示を実行することによって、その表示を効率的に処理し、モニタ(191)に2次元ラスター画像として3次元シーンをレンダリングする。
GPU(384’)は、実時間の2次元及び3次元グラフィックスを処理するように構成される1つ以上の単独で動作するマイクロプロセッサとして実装され得る。GPU(384’)は、2次元及び/又は3次元計算機グラフィックスを処理し、その後、2次元又は3次元画像をレンダリングするための(マザーボードから)分離されたグラフィックスカード上に置かれ得る。GPU(384’)は、グラフィックスカード上の高性能VRAMに直接にアクセスし得る。代替としてGPU(384’)は、PCマザーボード上のチップの1つにそれを統合化することによって実装され得、GPU(384’)は、フレームのレンダリングの際に支援するためのフレームバッファ及びCPUとして、メインメモリを使用できる。GPU(384’)は、例えばパーソナルコンピュータ又はゲームコンソール用の専用グラフィックス/映像レンダリング装置として使用され得る。
3次元グラフィックスレンダリングにおいては、グラフィックスパイプライン(384’−1)は、GPU(384’)が3次元画像データ(例えばバーテックス、テクスチャ及び他のデータ)をあるアプリケーションから2次元画面上に表示する実画像に変換するために実行する様々なステージ処理(例えばステップ列)を参照している。バーテックス単位で提供されるプロパティは、例えばx−y−z座標、RGB値、透光性、テクスチャ、反射率及び他の特性を含み得る。
グラフィックスパイプライン(384’−1)における異なるステージは、最終的にレンダリングされる画像を生成するためのエンドポイント(バーテックス)又はジオメトリックプリミティブのコントロールポイントにおける特性として、最初に提供される情報を処理する。本明細書において、用語「プリミティブ」は、単一の3次元実体を形成するバーテックス集合を参照し得る。最も単純なプリミティブは、3次元座標システムにおける点の集合であって、それはポイントリストと呼ばれる。3次元グラフィックスにおける典型的なプリミティブは、ライン及び三角形である。他のタイプのプリミティブは、例えばライン、ラインリスト、ラインストリップ、三角形、三角形リスト、三角形ストリップ及び三角形ファンを含み得る。多くの場合、3次元プリミティブはポリゴンである。ポリゴンは、少なくとも3つのバーテックスによって輪郭を描画された閉じた3次元図である。最も簡単なポリゴンは三角形である。三角形における3つのバーテックスすべてが、同一平面上にあることを保証されているため、三角形がほとんどのポリゴンを構成するために使用され得る。三角形は、大きくて複雑なポリゴン及びメッシュを形成するために使用され得る。
グラフィックスパイプライン(384’−1)内では、すべてのステージは、並列実行している。グラフィックスパイプライン(384’−1)の再構成によって、異なる視覚効果が達成され得る。例えばグラフィックスパイプラインは、(例えば三角形リスト)を表示するために幾何学的図形を受信し、その後、その上で必要な座標変換(例えば回転、変換など)を実行し、表示する幾何学的図形のための色を計算し、次に、表示される幾何学的図形をレンダリングし得る。
パイプラインステージ
グラフィックスパイプライン(384’−1)は一般に、以下論理的なステージであるインプットアセンブラ(IA)、バーテックスシェーダ(384’−1a)及び(384’−1a)、関連付けられたストリーム出力(384’−2)有するジオメトリシェーダ(384’−1a)、ラスタライザー(384’−1c)、ピクセルシェーダ(384’−1a)及びアウトプットマージャ(OM)を含み得る。グラフィックスパイプライン(384’−4)は、リソースの使用を最適化し、グラフィックスパイプライン(384’−1)における作業負荷の平衡をとり、IEEE準拠の整数又は浮動小数点値を用いて計算される情報にアクセス可能とし、更なるプログラム可能性を提供するように構成され得る。
グラフィックスパイプライン(384’−1)の例示的で非限定的な実施形態は、いくつかのユニットを含む動的構成が可能なコモンシェーダコア(単数又は複数)又は様々な構成において構成され得るプロセッシングコア(384’−1a)を使用する。コモンシェーダコアは、(異なるシェーダに対する)同一のハードウェアユニットが、シェーダの再構成による負荷平衡をとることを提供するか、又は、それが必要とされないとき、パイプラインの一部として無効にし、こうして動作を維持するステージのためのリソースをフリーにするように簡易化された最適化を可能にする。
これらのプロセッシングコア(384’−1a)は、実行されている特定の用途に従った様々なパターンでメモリに読み込まれ、メモリから書き出され得る。その構成に従ってユニット(384’−1a)それぞれは、バーテックスシェーダステージ、ジオメトリシェーダステージ及び/又はピクセルシェーダステージを実行するために使用され得る。これによって、コモンシェーダコアが、パイプライン(384’−1)のリクエストされたタスクのための最適な方法でピクセルシェーダ、ジオメトリシェーダ及びバーテックスシェーダを割り当てることをグラフィックスパイプライン(384’−1)の異なるステージ(又は機能ブロック)にオンデマンドでスケジューリングされることが可能になる。動作中のステージのためにリソースを解放し「再特化」され得ることによって、任意のステージが、動的に有効又は無効に構成又は再構成され得る。グラフィックスチップの基本的なリソースそれ自体は、グラフィックスチップに求められるタスクのために最適化され得る。
図3に示される特定のグラフィックスパイプライン(384’−1)の構成は、複数の共有されたプログラム可能なコア又はコモンコアエレメント(384’−1a)、バーテックスシェーダ(384’−1a)及び(384’−1a)及び関連付けられるストリーム出力(384’−2)を有するジオメトリシェーダ(384’−1a)及びピクセルシェーダ(384’−1a)を含む。これらの異なる機能的ステージは、個別の専用プロセッサとしての役目をして並列に作動する。特定の実装による図3に示される追加的又はより少数のパイプラインステージがあり得る。更に、一定のバーテックス及びプリミティブデータ処理の間、表示されるいくつかのパイプラインステージだけが、出力が計算機モニタ上に表示される前にそのデータを実際に処理できる。
インプットアセンブラ(IA)
グラフィックスパイプライン(384’−1)は、アプリケーションから着信するプリミティブデータ及びバーテックスデータを受信し、計算機モニタ又は画面上に出力を表示する前に、様々なパイプラインステージを介しそれを渡す。インプットアセンブラ(IA)は、ソースの幾何学的図形データをバーテックスメモリ及びインデックスメモリバッファから取り出すことによって、三角形、ライン又はポイントなどのバーテックスデータをグラフィックスパイプライン(384’−1)へ導く。
「非インデックス」又は「インデックス」レンダリングは、メモリのバーテックスデータをフェッチするためのアドレスを生成し、その後バーテックス及びプリミティブにその結果をアセンブルするために使用され得る。
「非インデックス」レンダリングは、バーテックスデータを含むバーテックスバッファ(単数又は複数)の逐次的なトラバースを参照していて、バッファ結合それぞれにおける開始オフセットで開始する。(図3に表示されない)バーテックスメモリバッファは、アプリケーションから未変換のモデルバーテックスを受信し得、バーテックスデータとしてそれらをストアし得る。バッファは、個々の入力スロットそれぞれに結合される。バッファすべてに渡ったデータ割り付けは、各エントリーが、入力スロット、構造オフセット、データタイプ及び(パイプラインにおける第1の動作中のシェーダのための)目標レジスタを用いた「要素」を定義している入力宣言によって指定されている。バーテックスメモリバッファは、任意のバーテックスタイプを含み得る。バーテックスデータは、各バッファから「アレイ構造」形式でアクセスされ、複数のバッファから着信し得る。所与のバーテックス列は、バッファからフェッチされたデータから構成される。様々なプリミティブトポロジーは、バーテックスデータ列にプリミティブ列を表示可能にするために使用できる。例的トポロジーは、例えばポイントリスト、ラインリスト、三角形リスト、三角形ストリップである。
「インデックス」レンダリングは、スカラ整数のインデックスリストを含む単一バッファの逐次的なトラバースを参照していて、バッファへの開始オフセットで開始する。またグラフィックスパイプラインの(384’−1)によって処理されるデータは、インデックスを割り当てられ得る。(図3に表示されない)インデックスメモリバッファは、アプリケーションからポイント、ライン、三角形及びポリゴンを含む未加工のジオメトリプリミティブインデックスデータを受信する。これらのジオメトリプリミティブは、インデックスメモリバッファを用いてバーテックスデータにおいて参照され得る。各インデックスは、バーテックスデータを含むバッファ(単数又は複数)からデータをフェッチする場所を示す。インデックスメモリバッファは、インデックスデータ又はインデックス(複数)を含んでいて、バーテックスメモリバッファへの整数オフセットであって、現在のデータ入力ストリームセットからインデックスプリミティブを描画する技法を使用し、プリミティブをレンダリングするために使用される。インデックスバッファは、インデックス(複数)を含むためにインデックスバッファは、対応するバーテックスバッファなしに使用され得ない。インデックス化は、いくつかの状況において有用であり得る。(例えばインデックスは、処理のための映像メモリの一部をどこでいつリトリーブ(及び/又は書く)するかを意味する)インデックス値は、例えばデータを処理している間、例えば映像メモリアドレッシングの仕組みの一部として使用され得る。従ってシェーダにダウンロードされるプログラムは、映像メモリのリトリーブ又は書き込みが、グラフィックスデータに関連付けられたインデックス値をプログラムで使用し、グラフィックスデータを処理する間もまた使用できる。
バーテックスシェーダステージ
インプットアセンブラ(IA)は、第1のコモンコア(384’−1a)にデータを送信する。この実施形態においては、第1のコモンコア(384’−1a)は、バーテックスシェーダステージとして構成される。バーテックスシェーダステージは、ホストからプログラムを介しアルゴリズム変換用に指定される(グラフィックスパイプラインの映像メモリから)バーテックスストリームを操作又は処理する。特に、バーテックスシェーダは、一定の変数及びバーテックス属性などの様々な入力を受信できる。一定の変数は、シェーダ呼び出しそれぞれのための定数値である。対照的にバーテックス属性は、バーテックス位置などのバーテックス毎の(特別な場合の変数値)データである。
バーテックスシェーダは一般に、単一の入力バーテックスに影響し、単一の出力バーテックスを生成し、そこでは、「バーテックス」は、通常、x、y及びz座標を使用し、位置によって定義される3次元空間の交差ポイントを参照している。バーテックスシェーダステージは、幾何学的図形バーテックスが画面に映し出される前に、幾何学的図形バーテックスそれぞれがショートプログラムによって処理され得ることが可能になる。例えばバーテックスシェーダステージは、ベクトル空間変換及び他の線形化計算を計算する技法を定義することによって、3次元空間のオブジェクトの位置を操作できる。例えばバーテックスシェーダステージは、位置、色及びテクスチャ座標計算を個別のバーテックスへ適用可能であって、変換、スキニング及び明るさなどの操作を実行できる。バーテックスシェーダの機能例の中には、一般にテクスチャ座標変換など、後のピクセルシェーダのための線形化属性を計算する任意のメッシュ変形及びバーテックス置換を含むものもある。
テッセレータステージ
データはその後、データに対するテセレーションを実行するテッセレータ(384’−1b)に送信され得る。テセレーションステップは、(破線の長方形で示されるように)任意であって、実用的な実装の中には全く発生しないものもあることを当業者には十分に理解されよう。テッセレーションは、一般に1つのタイプ又は数タイプの適合する平面図形によるギャップ又はオーバラップをせずに区分けされる幾何学的図形領域のカバリングに関連する処理を参照している。テッセレータ(384’−1b)に続いて、パイプラインに別のコモンコアが存在し、データに対するポストテセレーションのバーテックスシェーディングを実行するために使用され得る。この実施形態においては、テッセレータステップは任意である。
ジオメトリシェーダステージ
第2のコモンコアは、ジオメトリシェーダ(384’−1a)として構成される第3のコモンコアの後に続く。ジオメトリシェーダ(384’−1a)は、プログラミングプリミティブの他に新しい幾何学的図形の生成もまた可能にする。ジオメトリシェーダ(384’−1a)は、バーテックス(複数)/ポイント(複数)、ライン(複数)(2つのバーテックスセット)及び三角形(複数)(3つのラインセット)を含む異なるタイプの「プリミティブ」入力に影響し、入力されるプリミティブに基づいてパイプライン内部に新しい幾何学的図形を生成し得る。ジオメトリシェーダの入力は、完全プリミティブ用バーテックス(ライン用の2つのバーテックス、三角形用の3つのバーテックス又はポイント用の単一バーテックス)及びエッジ隣接プリミティブ用バーテックス(ライン用の更なる2つのバーテックス、三角形用の更なる3つのバーテックス)データである。ジオメトリシェーダの(384’−1a)は、例えば1つのプリミティブを受信し得、0、1又は複数のプリミティブのいずれかを出力できる。ジオメトリシェーダ(384’−1a)は、選択された単一のトポロジーを形成する複数バーテックスを出力できる。出力例の中には、三角形ストリップのようなトポロジー、ラインストリップ又はポイントリストを含む。エミットされたプリミティブの数は、任意のジオメトリシェーダ(384’−1a)呼び出しの内部で変更できる。
ジオメトリシェーダ(384’−1a)は、1つのプリミティブを取り得、隣接バーテックスなどの任意の隣接プリミティブを処理する複数のプリミティブを出力し得る。言い換えると、ジオメトリシェーダ(384’−1a)は、それ自体だけによるものではなく、更なるいくつかのバーテックス近くの文脈においては、プリミティブ全体に対する操作もまた可能にする。ポリラインにおける一ラインセグメントは、例えばそのセグメントの前後のバーテックスを読み込む能力を用いて処理され得る。この能力の一アプリケーション(例えば隣接バーテックスプリミティブ処理)は、ジオメトリシェーダ(384’−1a)が、現在の計算に3次元幾何学的図形空間の隣接ポイントに関する情報を勘案する能力である。
ジオメトリシェーダ(384’−1a)において実装され得るアルゴリズムは、ポイントスプライト又はワイドラインテセレーション、ファー/フィン生成、シャドウボリューム生成、複数テクスチャ立方体表面に対する単一パスレンダリングを含み得、ピクセルシェーダが、カスタム属性の挿入を実行可能にするプリミティブデータとしての重心座標を設定する。
シェーダは、ポイントスプライトテセレーションを実行するために、単一のバーテックスを受け取り、4つのバーテックス又は四辺形の全領域を表す2つの出力三角形を生成し、ワイドラインテセレーションを実行する間、シェーダは、ワイドライン化を示す四辺形用に2つのラインバーテックスを受信し、4つのバーテックスを生成する。ジオメトリシェーダは更に、ラインエンドポイントにおいてマイタを実行するために隣接ラインバーテックスを利用できる。
ジオメトリシェーダは、ファー又はフィンを生成するためにもまた使用され得、これはファー又はフィンの生成に限定されないが、単一位相の第3の方向に追加される任意の追加バーテックスを包囲する。例はヘア、スケール、グラスなどを含んでいて、そこでは、幾何学的図形を記述するプリミティブは、ジオメトリシェーダに入力され、ジオメトリシェーダは、形状を任意に補完するために、幾何学的図形を育てる。こうして、例えばジオメトリシェーダへの入力三角形に基づくファーを用いて、ジオメトリシェーダは、各バーテックスにおいてヘアを表すいくつかのバーテックスを追加し得る。有利なこととして、ジオメトリシェーダへの三角形ストリームは、バーテックスの隣接情報を含むため、バーテックスに隣接の幾何学的図形の近接及び特性(色、深さなど)は、処理の間、勘案され得る。別のジオメトリシェーダの例示的で非限定的な使用は、シャドウボリューム生成を含んでいて、押出すか否か決定するために、隣接情報が使用される。アプリケーションは更に、フィン又はファーのようないくつかの幾何学的図形を生成し、それからシャドウボリュームを押出すことを所望し得る。そのような場合、ジオメトリシェーダのマルチパス機能性が、データストリームの出力能力を使用し採用され、ストリーム出力の使用を介しそれを逆に循環する。
この例示的で非限定的な実施形態においては、ジオメトリシェーダ(384’−1a)からの出力は、レンダリングのためにラスタライザー(384’−1c)及び/又はストリーム出力(SO)(384’−2)を介するバッファのいずれかに進む。ストリーム出力(SO)(384’−2)を「起動」することは、グラフィックスパイプライン(384’−1)のラスター化機能を停止せずに、開発者によるプログラムに従った権限を提供することによって、グラフィックスパイプライン(384’−1)能力を増幅するに過ぎない。
ストリーム出力
ストリーム出力(SO)(384’−2)は、ラスタライザー(384’−1c)に流し続けるデータとして起動及び停止可能なグラフィックスパイプライン(384’−1)の「蛇口」のような役目をする。ストリーム出力(SO)(384’−2)は、データがラスター化のためのフレームバッファに達する前に、グラフィックスパイプライン(384’−1)内部のどこにおいてもタップされ得る。
ストリーム出力(SO)(384’−2)が停止しているときは、ストリーム出力(SO)(384’−2)は、パイプライン上にいかなるエフェクトも有しない。言い換えれば、ストリーム出力(SO)は任意であって、アプリケーションは、パイプラインがストリーム出力バッファにデータ読み込みをせずに単にデータを送信終了可能にする。ストリーム出力バッファは更に、ストリームデータをストアするために使用され得るメモリタイプの一例である。異なるタイプのメモリが、マイクロプロセッサにおけるキャッシュメモリのような機能性のために使用され得る時があり得る。
起動されたとき、データがパイプライン内部にあって、データが別の位置に提供する間、ストリーム出力(SO)(384’−2)は、プログラマがパイプラインに向かって「タップ」可能にする。
ストリーム出力(SO)(384’−2)は、例えばパイプラインにおける他の場所で再使用するために1つ以上の出力バッファにプリミティブをストリーミング可能であって、パイプライン内部で再帰的なプログラムアルゴリズムのアプリケーションを利用可能にする。ストリーム出力(SO)(384’−2)を介し送出されたデータは、バッファ(単数又は複数)に連結され得る。次にバッファ(単数又は複数)におけるデータは、その後続くパス上のグラフィックスパイプライン(384’−1)の入力に再循環され得る。ストリーム出力(SO)(384’−2)において受信されたデータは、例えばホスト又は他の操作によってリトリーブするためのバッファ又はメモリに記述され得る。
代替として、ストリーム出力(SO)(384’−2)において受信されたデータは、再帰的又は循環機能性を実行するために、インプットアセンブラ(IA)、バーテックスシェーダ(384’−1a)及び(384−1a)、ジオメトリシェーダ(384’−1a)又はピクセルシェーダ(384’ −1a)などのパイプライン内部の別の実体に再循環され得る(例えばフィードバック又はフィードフォワードされる)。ストリーム出力(SO)(384’−2)は、データが、(例えばプログラマは、(同一アルゴリズムを介しデータを再帰的に再循環する)データに再帰的な操作を実行するGPUにプログラムをダウンロードし得るか、又はそうでなければ前もって固定した回数分繰り返し得る)グラフィックスパイプライン(384’−1)の他の一部にデータをプログラムで再循環可能にできる。ストリーム出力(SO)(384’−2)は、例えばシェーダ自体にデータを再循環するために使用され得、それによってマルチパス操作が、所与のデータに対し実行され得ることを可能にする。これは、グラフィックスデータに対しプログラムに従った再帰的及び循環アルゴリズムを可能にする。データを再循環する別の方法は、パイプラインを介しそれを再送信することであって、インプットアセンブラ(IA)にデータを再入力することである。
必要な場合、更に同一データがラスタライザーに進むが、情報がストリーミングされ得、こうしてデータに影響する再帰的なアルゴリズム要素に基づいた変換を実行するときにデータのレンダリングを減速させず又は画像表示を可能にする。
ラスタライザー
グラフィックスパイプライン(384’−1)の次のコンポーネントは、ラスタライザー(384’−1c)である。ラスタライザー(384’−1c)は、必ずしもグラフィックスパイプライン(384’−1)においてステージではないが、むしろ様々なパイプライン(384’−1)のステージ間のインタフェースである。ラスタライザー(384’−1c)は、入力位置がクリップ空間において提供されると見なし、クリッピング、透視図分割、ビューポート又はシサーズ選択、プリミティブセットアップ及びピクセルシェーダ(384’−1a)の呼び出し方法の決定を含む重要な固定の機能操作セットを実行する。これらの機能の多くは、ソフトウェア開発者によって調整され得る。
ピクセルシェーダステージ
以下のラスタライザーは、4番目のコモンコア(384’−1a)であって、それは1つのピクセルを受け取り、ある位置でピクセルを出力するピクセルシェーダとして機能する。ピクセルシェーダは、各ピクセル単位で入力として例えば画像テクスチャ(又はテクスチャデータ)を含み得るショートプログラムによって処理されることを可能にする。ピクセルシェーダは、開発者がピクセルレベルで明るさ、色又は表面を変更することによって、色、テクスチャ又は形状でさえも操作可能にする。ピクセルシェーダは、各ピクセルの明るさ、色及び表面を変更するために使用され得る。これは、これらのピクセルから構築された3次元オブジェクトの色、テクスチャ及び形状すべてに対し順に影響する。
ピクセルシェーダ(384’−1a)に有効な入力データは、パースペクティブコレクションのあるなしに関わらず、1要素あたりを基本として補間されるように選択されるか又は定数のプリミティブ単位として処理され得るバーテックス属性を含む。ピクセルシェーダ(384’44)によって生成される出力は、(現在のピクセル位置に対して1つ以上の4ベクトルピクセルが捨てられる場合、)色のない出力データであり得る。ピクセルシェーダが可能な一部のエフェクトリストは、1ピクセルあたりの明るさ、ポン(Phong)−スタイルシェーディングを使用するピクセルの明るさ、DOT3エフェクト及び手続き型テクスチャを含む。
アウトプットマージャ
アウトプットマージャ(OM)においては、論理グラフィックスパイプライン(384’−1)の最終ステップ、他のピクセル処理機能が、最終的なピクセルをレンダリングするために実行され得る。これらの機能は、例えば出力リソース(レンダリング対象)の結合、シザーズ検査を用いたピクセルの色の値の変更、深さバイアスを介する視覚化決定及び/又はステンシルバッファ技法又はアルファブレンド又はフォグなどの機能の適用、シャドウイング、バンプマッピング、環境マッピング、アンチエイリアシング、対象(単数又は複数)をレンダリングするための書き出し又はブレンドを含み得、多くのリソースタイプ及びマルチエレメントテクスチャの1つであり得る。これらの機能をデータに対して実行後、データは、最後に更に処理されて最終的にはモニタ(191)上に表示される。
パイプラインにおけるシェーダ用コモンシェーダコア
図4は、コモンシェーダコア(384’−1a)のハードウェア及びソフトウェアコンポーネントの例示的で非限定的な実施形態を表すブロック図である。コモンシェーダコア(384’−1a)は、例えば図3に以前示されたバーテックスシェーダ(384’−1a)及び(384’−1a)、ジオメトリシェーダ(384’−1a)又はピクセルシェーダ(384’−1a)のいずれかを実施するために使用され得る。
コモンシェーダコア(384’−1a)は、インプットアセンブラ(IA)ユニット、グラフィックスパイプライン(384’−1)の任意の場所又は場合によっては特化した入力ソースからいずれかから、前のあり得るステージ入力データを受信する。
入力データは、その後、入力レジスタ(単数又は複数)(409)に一時的にストアされ得る。例えば入力レジスタ(単数又は複数)(409)は、動的インデックスアレイであり得る。ジオメトリシェーダの場合においては、入力レジスタ(単数又は複数)は、例えば [バーテックス][要素] ペアの入力を配置する2次元(2D)のアレイであり得る、
入力データは、その後、シェーダコード(410)に送信される。シェーダコード(410)は、フロー制御機構、ベクトル浮動小数点及び整数演算を処理する演算論理ユニット(ALU)、メモリフェッチ又はサンプル操作及びシェーダ機能又は入力データに対して実行される特定の変換を指定するプログラムを提供する。またシェーダコード(410)は、サンプラー(413)、テクスチャ(414)及び定数バッファ(415)からの情報などの他のいくつかの入力又はリソースを受信し得る。シェーダコード(410)は、一時レジスタ(複数)(411)及びサブルーチンリターンアドレススタック(412)を用いた双方向通信もまた有する。
シェーダコード(410)は、テクスチャのサンプリング方法を定義するサンプラー(413)からサンプルを受信する。しかし、またメモリは、フィルタリングせずに読み込まれ得、サンプラーが、あらゆる実施形態において必要とは限らない。サンプラーオブジェクトが静的に作成されるため、(サンプラーオブジェクトは、それらの定義を維持していて、変更されないので)パイプライン変更を追跡又は一気に消去する必要はなく、ハードウェアは、一連のパイプラインにおける複数サンプラーの参照を維持可能にする。
シェーダコード(410)は、テクスチャ(414)からテクスチャ情報を受信する。テクスチャ(414)は、テクスチャのサンプリングを提供するためにシェーダコードを用いて動作する。
CPUは、特定のシェーダプログラムを再構成するために使用され得るシェーダ定数を生成する。シェーダコード(410)は、定数バッファ(415)からシェーダ定数を受信する。定数バッファ(415)は、GPU上のメモリにおいて一定の変数(又は「シェーダ定数」)を統合又は分類するために提供される。言い換えると、定数入力値をストアするための定数レジスタアレイ(c0...cN)を使用する代わりに定数バッファ(415)が、数値のシェーダ定数値を1つに分類するために使用され得る。定数バッファは、テクスチャ(414)よりも少ない待ち時間アクセス及び頻繁な更新のために最適化される。定数バッファ(415)は、開発者が同時に特定の定数グループすべてを設定可能し得る。定数は、開発者が所望する任意の特定の順に配置され得る。定数バッファのシェーダ定数を分類することは、一定の性能利点をもたらし得る。例えば2つのシェーダ定数は、通常同時に一緒に変更され使用され(例えば各シナリオにおいて同一のステートを有する)場合、それらのシェーダ定数は、特定の定数バッファに投入され得る。
特定のシェーダプログラムは、特定のスロットに結合されるいくつかの定数バッファを必要とし得る。一実装においては、グラフィックスパイプラインの各ステージに対し、動作中であり得る定数バッファ用の15のスロットが存在する。シェーダコードにおいては、cb#レジスタは、「スロット」#における定数バッファのためのプレースホルダである。定数バッファは、シェーダ命令オペランドとしてcb#[index]を使用し、シェーダにおいてアクセスされ、ここでは「index」は、非インデックス(r#)又は32ビット符号なし整数、32ビット符号なし即値整数定数又はその2つを1つに加えられた組み合わせを含む静的インデックス(x#)のいずれかであり得る(例えば「mov r0, cb3[x3[0].x+6]」 は、x3[0].xが1を含むと仮定し、スロット3に割り当てられた定数バッファからエレメント7をr0へ移動する)。異なるハードウェアが、依然として可能な限り最も良い性能を実現することを可能にする一方、アプリケーションは、どのようなパターン及び数が望まれても定数を読むシェーダコードを記述できる。
一時レジスタ(411)は、一時的な記憶領域としての役目をする。例示的で非限定的な実施形態においては、一時レジスタ(411)は、一時記憶領域の限界まで必要とされる任意のサイズ及び数のいくつかの「非インデックス」又は「インデックス」アレイを保持し得る。
非限定で例示的なこの特定の実施形態においては、サブルーチンリターンスタック(412)は固定長である。更にスタックは、シェーダの直接アクセスから隠されていて、リターンアドレスだけを透過的にストアする。それは再帰的アルゴリズムの定義もまた可能にする。
コードがシェーダコード(410)を介し通過した後、データは、出力レジスタ(520)に進む。例示的で非限定的なこの実施形態においては、出力レジスタ(520)は、4つのベクトル出力の動的「インデックス」アレイからなる。更に、ステージの中には、追加的で特化された出力を有し得るものもある。
コモンシェーダコア(384’−1a)ステージが、グラフィックスパイプライン(384’−1)において実施されるに従って出力データは、その後、次のシェーダステージに存在する場合、出力ストリーム(SO)としてメモリ又は他の位置又はアウトプットマージャ(OM)又はレンダリングステージに出力され得る。
リストされたデータ構造は、1次元アレイから2次元アレイ又はリストへ変更できる。データ構造すべては、その大きさに従ってGPU能力を蓄えながら変化し得る。GPU内部では、記憶領域の限界及び固定された大きさへの変更が、情報に対する動的割当て及び圧縮アルゴリズムアプリケーションによる空間保存のために発生し得る。サンプラー及び定数バッファは、テクスチャのように反応し得るが、リソースが変わるにつれてこれらのコンポーネントの定義は、変更され得る。テクスチャが再定義される場合、サンプラー及び定数バッファ双方が変化し得、テクスチャ機能に全く限定されない。すべてのデータ構造は更に、速度及びユーティリティ目的のための新しい最適化アルゴリズムを実施し得る。本明細書に記載された様々な実施形態は、コモンコアを使用するグラフィックスパイプラインの例に過ぎず、バーテックスシェーダ、ピクセルシェーダ及びジオメトリシェーダの機能性を提供するために動的に構成され得る。
前述のように、異なるステートの組み合わせが、様々な視覚効果を可能にする。パイプラインにおけるステート管理システムは、デバイスステートを追跡し、デバイスステートを複雑な相互依存関係を有する複数のエレメントで構成される上位レベルの「エフェクト」に抽象化する。エフェクトは、一連の「技法」として定義され、技法は「パス」に従っており、パスは、ステートオブジェクト及びシェーダに従っており、ステートオブジェクト及びシェーダは、定数バッファ及びテクスチャに従う。エフェクトは、パイプラインにおける(結合ポイントとも呼ばれる)特定の入力スロットに結合される入力として、特定のテクスチャを用いた特定の定数セット上で実行するための一定のシェーダプログラムを必要とする。ステート管理システムは、異なる様々なタイプのシェーダリソース間の関係又は依存関係の経過を保持するための「依存ツリー」を利用し得る。特定のリソース(例えば定数バッファ、テクスチャ、サンプラー)それぞれは、依存ツリーにおける親オブジェクトのスロットに結合される。この文脈においては、「スロット」は、特定のシェーダに対する依存ツリーのスロットを参照している。各シェーダは、異なる依存関係を有していて、従って独立したスロットを有するツリーに分離する。
図5Aは、1つのエフェクトファイル(530)に対応する依存ツリーの例示的で非限定的なブロック図を示す。図5Aは、エフェクト(530)及びパス(520)におけるエフェクト(530)の依存関係、ステートオブジェクト(506)、シェーダ(510)、テクスチャ(514)及び定数バッファ(515)の概念を示す。定数バッファ(515)は、いくつかのシェーダ定数(502)、(504)を受信する。ワールドビュープロジェクション行列(502)は、ワールド空間から画面空間に変換するために使用されるマトリクス内に4つの定数を定義するシェーダ定数である。これは1つのオブジェクト毎に実行される。このように50個のオブジェクトが画面に存在する場合、そのマトリクスは、1シーン毎に50回設定され得る。Vlight(504)は、光が来る方向を指定する光ベクトルである。Vlight(504)は、例えば太陽の方向を指定するために使用され得、全フレームに対し定数であり得る。シェーダ(510)は、それに関連付けられるいくつかのリソースを有する。この特定の例においては、リソースは、定数バッファ(515)及びテクスチャ0(514)を含み得る。これらのリソースは、シェーダ(510)によって「消費」される。図5Aに示されないが、シェーダA(510)に加えて、並列に動作する他のいくつかのシェーダプログラム(例えばシェーダB、シェーダC、シェーダDなど)がある。これらのシェーダプログラムそれぞれは、同様の依存関係セットを有する。パス(520)は、これらの異なるシェーダ及びステートA(506)の出力を含む。エフェクトファイル(530)は、パス(520)を含む。
再び図4を参照し、またコモンシェーダコア(384’−1a)は、(表示されない)いくつかの入力スロットもまた有する。シェーダ(384’−1a)によって使用されるリソース(個々の定数、定数バッファ、テクスチャ及びサンプラーなど)は、シェーダ(384’−1a)の特定の入力スロットに結合され得る。特定の一実装においては、シェーダは、例えばそれに関連付けられる128個の入力リソーススロット、それに関連付けられる16個の異なる定数バッファスロット及びそれに関連付けられる16個のサンプラースロットを有し得る。例えば特定のシェーダは、16個の異なる定数バッファ、16個の異なるテクスチャ及び16個の異なるサンプラーでスロットが一杯になり得る。特定のリソースが、各シェーダの特定のスロットに割り当て又は結合される順序は、必ずしも特定のパターンに従うとは限らず、コンパイラによって決定され得る。シェーダプログラムは、これらの特定のリソースそれぞれに関する異なるものを処理する。例えばシェーダプログラムは、入力定数バッファ2、別の入力サンプラー0及び別の入力テクスチャ5などを受理し、これらの入力に従って次に特定の出力を生成し得る。
図5Bは、例示的で非限定的なグラフィックスパイプラインのいくつかの異なるシェーダプログラム(584’aA−N)にいくつかの定数バッファ(515A〜515E)割り当てることを示す例示的で非限定的なブロック図である。シェーダプログラム(584’−1a−N)それぞれは、異なる入力スロットにおいて異なる順序で割り当てられたいくつかの定数バッファ(CB1 515A...CB5 515E)を有する。例えばシェーダ(584’−1aA)は、スロット1にCB1を、スロット2にCB2を、スロット3にCB3を、スロット4にCB4を、スロット5にCB5を配置し得、シェーダ(584’−1a)は、スロット1にCB2を、スロット2にCB1をスロット3にCB4を、スロット4にCB5を、スロット5にCB3を配置し得、シェーダ(584’−1aC)は、スロット1にCB5を、スロット2にCB2を、スロット3にCB1を、スロット4にCB3を、スロット5にCB4を配置し得、シェーダ(584−1aN)は、スロット1にCB3を、スロット2にCB2を、スロット3にCB5を、スロット4にCB4を、CB1にスロット5を配置し得る。
図の簡潔化のために、図5Bにおいて提供される例は、特定のシェーダ(584’−1aA〜N)それぞれと関係する4(4つ)のシェーダプログラム(584’−1aA〜N)及び5(5つ)の可能な定数バッファ(CB1 515A...CB5 515E)を示す。しかし、実用的なパイプライン大部分の実装においては、パイプラインに多くのシェーダが存在し得、特定のシェーダ(584’−1aA〜N)それぞれが、図5に通常、示されるより多くの定数バッファを有することを十分に理解されよう。特定のアプリケーションの複雑性に従って、例えば何百もの異なるシェーダがあり得、アプリケーション開発者は、実質的には無制限数の定数バッファを指定し得る。実用的な一実装においては、これらの最大16の定数バッファが所与の時間にシェーダそれぞれの異なるスロットで結合され得る。重要なことには、特定の定数バッファの順序は、シェーダ(584’−1a)それぞれにおいて、必ずしも特定のスロットに割り当て又は結合される特定のパターンに従う必要はなく、コンパイラによって決定され得る。
2つのシェーダプログラムが相互に独立してコンパイルされるとき、特定のスロットに結合されるリソースの順序は、異なり得る。例えばシェーダ(584’−1aA)が実行されるとき、定数バッファ(CB1〜CB5)は、シェーダ(584’−1aA)をレンダリングするために、スロット(1〜5)に設定される。しかし、シェーダ(584’−1aB)が実行されるとき、同一の定数バッファ(CB1〜CB5)は、シェーダ(584’−1aB)を実行するために異なるスロットに結合又は再割り当てられ得る。例えばシェーダ(584’−1aA)が実行するとき、CB1はスロット1に結合され、CB2はスロット2に結合され、CB3はスロット3に結合され、CB4はスロット4に結合され、CB5はスロット5に結合されるが、次のシェーダ(584’−1aB)が実行するとき、同一の5つの定数バッファもまた再び使用され得るが、今度は異なるスロット(例えばスロット1にはCB2、スロット2にはCB1、スロット3にはCB4、スロット4にはCB5、スロット5にはCB3)において再び使用され得る。そのような場合、定数バッファは、実行しているシェーダ(584’−1aA)とシェーダ(584’−1)aB)と間の遷移の間、1つのスロットから結合が解除され、新しいスロットに再結合される必要がある。同一の5つの定数バッファそれ自体は、異なる順序で再結合される必要がある。ビデオカードなどをセットアップするドライバーが呼び出される必要があるので、毎回結合が再調整される必要がある度に、性能コストが存在する。シェーダ間のこの「disagreement(不調和)」を緩和するための自動的な仕組みは存在せず、従ってシェーダ間の遷移が発生するとき、不要なパイプライン再構成をもたらし、結合サイクルが浪費される。
シェーダ間の切り換え時、グラフィックスカードにおいて必要とされる再構成数を低減及び/又は最小化(例えばスロットを再結合する際、通常、発生するステート変更を低減及び/又は最小化)することが望まれる。例えば異なるスロットに特定のリソースを再び割り当てる必要性を回避又は低減するための方法を提供することが望まれる。同一スロットにリソースを一貫し配置することによって、より少ない結合サイクルが浪費され及び/又は結合サイクルが節約される。
スロット/リソース結合最適化技法
シェーダ間の切り換え時、グラフィックスカードにおいて必要とされる結合の再構成数を低減/最小化する(例えばスロット再結合の際、通常発生するステート変更を低減及び/又は最小化する)ために、一定のスロットにリソース(例えば定数バッファ、テクスチャ及びサンプラー)を最適に結合するための技法を提供する。これらの技法によってシェーダプログラムそれぞれの間の一般的な依存関係が決定され得、この決定に基づいて特定のスロットが特定のリソースに結合され得る。依存ツリーは、異なるシェーダリソース間の関係又は依存関係の経過を保持する。特定のリソースそれぞれは、依存ツリーにおける親オブジェクトのスロットに結合される。開示されたこれらの技法は、依存関係走査及び依存ツリー再構成を含んでいて、シェーダがリソース結合される所において、それらの期待値を変更し得る。その結果、現在ロードされたシェーダ間を遷移するために再結合される必要があるスロット数が低減及び/又は最小化され得る。
これらの技法の一実施形態に従って依存ツリー内の依存関係それぞれが走査され、関連付けのコストは、依存ツリーの異なる再構成(シェーダの再配置又は再構築)それぞれに対して計算され得る。依存ツリーの再構成それぞれは、結合されている一定のリソースの特定スロットを変更する。依存ツリーの特定の再構成は、これらのコストを使用し、その後、より上位レベルのステート間を遷移するために装置の再構成数を低減又は最小化するものが選択され得る。言い換えると、現在ロードされたシェーダ間を遷移/切り替えるために再結合される必要があるスロット数を最小化する依存ツリーの特定の再構成が、次に選択され得る。一実装においては、これらの技法は、オフラインコンテンツの生成及び記憶領域のために実行され得る(例えば設定されるシェーダが前もって知られている場合、シェーダは分析され、依存関係が再配置され、次にシェーダはディスクに逆に保存される)。代替の実装においては、本方法は(例えば設定されるシェーダが前もって知られていない場合)、アプリケーションの実行時/ロード時、動的に実行され得る。
それに応じて特定のシェーダプログラムが、一定のリソースを同一の順序で期待するために変更される。これによって、例えば定数バッファが特定のスロットに関連付けられる方法の最適化する効果がある。これは、異なるシェーダ間を切り換えるときに発生する再構成数を低減することによって、実行させる必要がある仕事量を減らす。
図6は、グラフィックスパイプラインにおいてシェーダに関連付けられる特定のスロットにリソースを最適に結合するための例示的で非限定的な流れ図(600)を示す。特定のアプリケーション実行の間、シェーダは、シェーダの特定のスロットに結合されるために、一定数のリソース(例えば定数バッファ、テクスチャ及びサンプラーなど)を要求し得る。
ステップ(610)においては、各シェーダによって利用されているリソース間のリソースの依存関係が決定され得る。一実施形態においては、ステップ(610)は、2つのサブステップ(615)、(620)を含み得る。サブステップ(615)においては、各シェーダに対する特定のリソース/スロット割り振りが決定され得る。各シェーダに対する特定のリソース/スロット割り振りは、どのリソースが各シェーダの特定のスロットそれぞれにおいて使用されるかを指定する。サブステップ(620)においては、特定のリソース/スロット割り振りに基づいて、各シェーダによって利用されているリソース間の(例えば異なる/コモン)リソースの依存関係が決定され得る。
ステップ(630)においては、リソース依存関係に基づいて、コモンリソース/スロット関連付けが計算され得る。コモンリソース/スロット関連付けそれぞれは、シェーダ間切り換え時、リソース再構成の複数の遷移/ステート変更/数が低減/最小化するように、特定のスロットの1つに関連付けられる特定のリソースの1つを指定する。ステップ(640)において、各スロットに結合されるリソースはその後、シェーダそれぞれにおいてコモンリソース/スロット関連付けに従って再構成され得る。この点においては、各シェーダは、同一のコモンリソース/スロット関連付けを有し、各シェーダにおいて、特定の同一のリソースは、特定の同一のスロットの1つに関連付けられる。ステップ(650)においては、特定のリソースそれぞれは、コモンリソース/スロット関連付けによって指定される特定のスロットに結合され得る。
図7は、コモンリソース/スロット関連付けを計算するための例示的で非限定的な流れ図(630)を示す。ステップ(710)においては、第1のスロットに結合される特定のリソースの1つが決定され得る。第1のスロットに結合されるリソースを決定した後、ステップ(720)において、第1のスロットに結合されるこのリソースが、プール又はリスト又は利用可能リソースから除外され得る。ステップ(730)においては、プロセスは、各シェーダに対して結合されるスロットが満たされたか決定し得る。残りの結合されるスロット(例えば結合されるリソースをまだ有していないスロット)が存在する場合、ステップ(740)においては、残りのリソースの1つが、第2のスロットに結合することを決定され得る。ステップ(720)〜(740)は、所定のスロット数まで繰り返されて、結合されるスロットの大部分又はスロットすべては、それと関連付けられる特定のリソースを有する。一実施形態においては、特定のコストの測定基準が満たされるまで本アルゴリズムは、適用され得る。例えばコスト測定基準は、本アルゴリズムがシェーダ間の例えばリソース変更又は相違点の60パーセントよりも少数になるとき、停止することがあり得る。一旦、結合されたスロットすべてがリソース/スロット結合を有すると、その後、プロセスは、図6のステップ(640)に続く。
図8は、特定のリソース/スロット結合を決定するための例示的で非限定的な流れ図(710)/(740)を示す。ステップ(810)においては、第1のスロットに結合される第1のリソースを決定するために、第1のスロットに依存ツリー内の各リソースを結合するためのコストが、各シェーダによって利用されているリソース間の依存関係に基づいて計算され得る。ステップ(820)においては、最小コストを有する特定のリソースの1つが、第1のスロットに結合するために選択され得、ステップ(830)においては、この(最小コストを有するものとして選択される)リソースが、第1のリソースとして指定され得る。ステップ(810〜830)が、図7のステップ(740)中に組み込まれているので、ステップ(810〜830)が、結合されるスロットそれぞれが特定のリソース/スロット結合を有するまで繰り返されることを十分に理解されよう。
図9は、第1のスロットに各リソースを結合するためのコストを計算するための例示的で非限定的な流れ図(810)を示す。
ステップ(910)においては、特定のリソースの1つが第1のスロットに結合される場合、各シェーダをレンダリングするために要求されるステート変更数が決定され得る。この決定は、シェーダプログラムそれぞれによって利用されているリソース間のリソース依存関係を使用することによって実行され得る。ステップ(920)においては、特定のリソースの1つが第1のスロットに結合される場合、各シェーダをレンダリングするために要求されるwasted(浪費)スロット数が決定され得る。前述のようにこの決定は、シェーダプログラムそれぞれによって利用されているリソース間のリソース依存関係を使用することによって実行され得る。ステップ(930)においては、ステート変更数及び浪費スロット数を使用し、第1のコストが計算され得る。この第1のコストは、第1のスロットに特定のリソースの1つを結合することに関連するコストである。
この計算(例えば第1のスロットにリソースそれぞれの1つを結合することに関連するコスト)は、各リソースに対して繰り返され得る。ステップ(940)においては、第1のスロットにリソースそれぞれを結合するためのコストが計算された場合、それが決定され得る。そうでなければ、その後プロセスは、リソースリスト又は依存ツリー内の次の特定のリソースの1つが選択されるステップ(950)に進む。その後、ステップ(910〜930)は、次のリソース(例えば第1のスロットに次のリソースを結合することに関連するコスト)に対して繰り返され得る。ステップ(940)においては、第1のスロットにリソースそれぞれを結合するための計算されたコストが決定されるまで、プロセス(810)が繰り返される。この時点でプロセスは、終了するか又はステップ(820)に戻る。ステップ(910〜950)が図8のステップ(810)に組み込まれているので、ステップ(910〜950)が、結合されるスロットそれぞれに各リソースを結合するためのコストが決定されるまで繰り返されることを十分に理解されよう。
このように図5Bに示される例においては、前述の技法は、シェーダ(584’−1aB)に使用される定数バッファのレイアウトを再配置するために使用され得る。例えば、依存関係すべてが走査され、最適の定数バッファ割り付けがシェーダ(584’−1aA)に示されるものであることが決定された場合、シェーダ(584’−1aB)においては、それぞれCB2及びCB3がスロット2及び3に結合されるように再配置され、一方、CB1がスロット1に再配置され得、CB4及びCB5がスロット4及び5に再配置され得る。シェーダ(584’−1aA)と(584’−1aB)との間の切り替えの間、この方法は、シェーダ(584’−1aA)に示されるスロットにCBすべての初期結合を超えたいかなる追加作業も要求しない。同様の再配置もまた、シェーダ(584’−1aC)及びシェーダ(584’−1aN)において起こり得る。現在ロードされたシェーダ間の切り換えのために、再結合される必要があるスロット数それ自体が最小化される。
本発明の方法を実装する複数の方法、アプリケーション及びサービスが、強化されたグラフィックスパイプライン発明のシステム及び方法を使用可能にするような、例えば適切なAPI、ツールキット、ドライバーコード、オペレーティングシステム、コントロール、単独動作又はダウンロード可能なソフトウェアオブジェクトなどが存在する。本発明は、API(又は他のソフトウェアオブジェクト)の見地からの他に、本発明によるコモンコア、ジオメトリシェーダ又はストリーム出力技法を含む前述の任意の技法の受信するソフトウェア又はハードウェアオブジェクトもまた本発明の使用を想定する。このように本明細書に記載された発明の様々な実装は、ハードウェア全体、ハードウェアの一部及びソフトウェアの一部の他に、ソフトウェアにもまた存在する特徴を有し得る。
前述のように様々な計算装置及びネットワークアーキテクチャに関連し本発明の例示的な実施形態を説明してきたが、基本的な概念が、強化されたグラフィックスパイプラインを用いてGPUを使うことが望まれる任意の計算装置又はシステムに適用され得る。例えば、本発明のアルゴリズム(単数又は複数)及びハードウェア実装は、計算装置のオペレーティングシステムに適用され得、装置上の個別のオブジェクトとして、別のオブジェクトの一部として、再利用可能なコントロールとして、サーバからダウンロード可能オブジェクトとして、装置又はオブジェクトとネットワークとの間の「仲介人」として、分散オブジェクトとして、メモリ中のハードウェアとして、前述の任意の組み合わせその他として提供される。例示的なプログラミング言語、名称及び例が様々な選択肢の代表として本明細書において選択されているが、これらの言語、名称及び例が限定されることを意図しない。当業者は、本発明の様々な実施形態によって達成される同一の、同様の又は同等の機能性を実現するオブジェクトコード及び用語体系を提供する多くの方法が存在することを理解されよう。
言及したように、本明細書に記載の様々な技法は、ハードウェア又はソフトウェア又は適切な所においては双方の組み合わせと関連して実装され得る。このように本発明の方法及び装置又は一定の特徴又はその一部は、プログラムコード(すなわち命令)の実体のある媒体に具現化されたフロッピー(登録商標)ディスク、CD−ROM、ハードドライブ又は他の任意の機械可読記憶媒体などの形式を取り得、そのプログラムコードが計算機などのマシンによってロードされ実行されるとき、そのマシンが本発明を実施するための装置になる。プログラム可能な計算機上でプログラムコードを実行する場合には、計算装置は一般に、プロセッサ、そのプロセッサによって読み出し可能な(揮発性及び不揮発性メモリ及び/又は記憶装置エレメントを含む)記憶媒体、少なくとも1つの入力装置及び少なくとも1つの出力装置を含む。強化された本発明のグラフィックスパイプライン技法を例えばデータ処理API、再利用可能コントロール又はその他の使用を介し実施又は利用できる1つ以上のプログラムが、計算機システムと通信するための高水準手続き型又はオブジェクト指向プログラミング言語で望ましくは実装される。しかし、所望であれば、プログラム(単数又は複数)は、アセンブリ言語又は機械語で実装され得る。どのような場合においても、言語は、コンパイルされ得るか又はインタプリタ言語であり得、ハードウェアの実装に結合され得る。
また本発明の方法及び装置は、電気配線又はケーブル上、光ファイバを介するようないくつかの伝送媒体を通して送信されるプログラムコード形式で具現化される通信を介するか又は他の任意形式の伝送を介し実施され得、そのプログラムコードは、EPROM、ゲートアレイ、プログラム可能な論理回路(PLD)、クライアント計算機その他のようなマシンによって受信され、ロードされ、実行され、そのマシンは、本発明を実施するための装置になる。汎用プロセッサ上で実装されるとき、プログラムコードは、本発明の機能性を呼び出すために作動する固有の装置を提供するプロセッサと結合する。本発明に関連して使用される任意の記憶装置技術は更に、不変的なハードウェアとソフトウェアとの組み合わせであり得る。
本発明が様々な図の好ましい実施例に関連し説明されたが、他の同様な実施形態が使用又は修正され得、追加のものは、それらから逸脱せずに本発明の同一の機能を実行するための記載の実施形態として説明され得ることを理解されよう。例えば本発明の例示的なネットワーク化された環境は、ピアツーピアネットワーク環境のようなネットワーク環境の文脈で記載されているが、当業者は、本発明がそれに限定されないこと、本願に記載されているような方法が、ゲームコンソール、ハンドヘルド計算機、携帯用計算機その他のような任意の計算装置又は有線か無線かに関わらない環境に対して適用可能であって、通信ネットワークを介し接続されたそのような様々な計算装置に適用され得、ネットワークを横断して対話することを認識されよう。更に、ハンドヘルドデバイスオペレーティングシステム及び他のアプリケーションスペシフィックオペレーティングシステムを含む様々な計算機プラットフォームは特に、無線ネットワーク化された装置の数が増殖し続けているとして想定される。
例示的な実施形態は、グラフィックスパイプラインの文脈で本発明を利用することを参照するが、本発明はそれに限定されず、むしろ第2の処理ユニットを提供するように実施され得る。例えばCPUを使用し別の機能を実行する間、プログラマが、画面に表示のレンダリング及び計算数学処理を所望する場合、処理ユニットは、グラフィックス表示が最終的な出力に含まれるか否かに関係なく最大限に利用される必要があり得る。それでも更に本発明は、複数のプロセッシングチップ又は装置内部又はそれらを横断して実装され得、記憶装置は、複数の装置を横断して同様に作用され得る。従って本発明は、任意の単一の実施形態に制限される必要はないがむしろ添付の請求に従った大きさ及び範囲に解釈されるべきである。
本発明が実施され得る様々な計算装置を有する例示的なネットワーク環境を表すブロック図である。 本発明が実施され得る例示的で非限定的な計算装置を表すブロック図である。 グラフィックスプロセッシングユニット(GPU)と、関連する例示的なグラフィックスパイプライン用ハードウェア構成を含むグラフィックスサブユニットと、を含む例示的なグラフィックスシステムを示す。 コモンシェーダコアのハードウェア及びソフトウェアコンポーネントの例示的で非限定的な実施形態を表すブロック図である。 依存ツリーの例示的で非限定的なブロック図を示す。 例示的で非限定的なグラフィックスパイプラインにおけるいくつかの異なるシェーダプログラムにいくつかの定数バッファの配分を示す例示的で非限定的なブロック図である。 グラフィックスパイプラインにおけるシェーダに関連する特定のスロットにリソースを最適に結合するための例示的で非限定的な流れ図を示す。 コモンリソース/スロット関連付けを計算するための例示的で非限定的な流れ図を示す。 リソース/スロット結合を決定するための例示的で非限定的な流れ図を示す。 第1のスロットに各リソースを結合するためのコストを計算するための例示的で非限定的な流れ図を示す。

Claims (20)

  1. グラフィックスパイプライン(384’−1)において、シェーダ(584’−1)に関連付けられる特定のスロットにリソースを結合するための方法(600)であって、
    各シェーダによって利用されているリソース間のリソース(413〜415)依存関係を決定するステップ(620)と、
    コモンリソース/スロット関連付けを前記リソース(413〜415)依存関係に基づいて計算するステップ(630)であって、コモンリソース/スロットそれぞれの関連付けが、前記特定のスロットの1つに関連付けられるべき前記特定のリソース(413〜415)の1つを指定するものと、を含む方法。
  2. 各シェーダによって利用されているリソース間のリソース依存関係を決定するステップが、
    各シェーダに対する特定のリソース/スロット割り振りを各シェーダにおいて決定するステップであって、各シェーダに対する前記特定のリソース/スロット割り振りが、各リソースの特定のスロットそれぞれにおいて、どのリソースが使用されるかを指定するものと、
    各シェーダによって利用されているリソース間のリソース依存関係を前記特定のリソース/スロット割り振りに基づいて決定するステップと、を含む請求項1記載の方法。
  3. コモンリソース/スロット関連付けを計算するステップが、
    コモンリソース/スロット関連付けを前記リソースの依存関係に基づいて計算するステップであって、コモンリソース/スロット関連付けそれぞれが、シェーダ間の切り換え時、リソース再構成コストが低減されるように、前記特定のスロットの1つに関連付けられる前記特定のリソースの1つを指定するもの、を含むことを特徴とする請求項2記載の方法。
  4. 更に、
    前記コモンリソース/スロット関連付けに従って、各スロットに結合される前記リソースを前記シェーダそれぞれにおいて再構成するステップを含む請求項3記載の方法。
  5. コモンリソース/スロット関連付けを計算するステップが、
    (a)第1のスロットに結合される前記リソースのうち特定の1つを決定するステップと、
    (b)第2のスロットに結合される前記残りのリソースのうち特定の1つを決定するステップと、
    所定数の前記スロットがそれと関連付けられる前記リソースの1つを有するまで残りのスロットそれぞれに対し、ステップ(b)を繰り返すステップと、を含むことを特徴とする請求項3記載の方法。
  6. 第1のスロットに結合される第1のリソースを決定するステップが、
    各シェーダによって利用されているリソース間の前記リソース依存関係に基づいて、前記第1のスロットに各リソースを結合するためのコストを計算するステップと、
    最小コストを有する特定のリソースの1つを選択するステップと、
    前記第1のリソースとして、前記最小コストを有するものとして選択されるリソースを指定するステップと、を含むことを特徴とする請求項5記載の方法。
  7. 第2のスロットに結合される第2のリソースを決定するステップが、
    前記第2のスロットに前記残りのリソースそれぞれを結合するためのコストを計算するステップと、
    最小コストを有する前記残りのリソースを選択するステップと、
    前記第2のリソースとして、前記最小コストを有するものとして選択される前記残りのリソースを指定するステップと、を含むことを特徴とする請求項6記載の方法。
  8. 前記第1のスロットに各リソースを結合するためのコストを計算するステップが、
    (a)前記特定のリソースの1つが、前記第1のスロットに結合される場合、各シェーダプログラムによって利用されているリソース間の前記リソース依存関係に基づいて、各シェーダをレンダリングするために要求されるステート変更の数を決定するステップと、
    (b)前記特定のリソースの1つが、前記第1のスロットに結合される場合、各シェーダプログラムによって利用されているリソース間の前記リソース依存関係に基づいて、要求される浪費スロットの数を決定するステップと、
    (c)前記ステート変更数及び前記浪費スロット数に基づいて、前記第1のスロットに前記特定のリソースの1つを結合することに関連する第1のコストを計算するステップと、
    前記第1のスロットに前記リソースそれぞれを結合するためのコストが計算されるまで、ステップ(a)から(c)を繰り返すステップと、を含むことを特徴とする請求項6記載の方法。
  9. 更に、
    コモンリソース/スロット関連付けによって指定された前記特定のスロットに前記特定のリソースそれぞれを結合するステップを含む請求項1記載の方法。
  10. 各シェーダが、同一の前記コモンリソース/スロット関連付けを有していて、各シェーダにおいて前記特定の同一リソースが、前記特定の同一スロットの1つに関連付けられることを特徴とする請求項1記載の方法。
  11. 前記リソースが、定数バッファを含むことを特徴とする請求項1記載の方法。
  12. 前記リソースが、定数バッファ、少なくとも1つのテクスチャ及びサンプラーを含むことを特徴とする請求項1記載の方法。
  13. 請求項1記載の方法を実行するための計算機実行可能命令を含む計算機可読媒体。
  14. 請求項1のステップを実行するための計算機実行可能モジュールを含むグラフィックスアプリケーションプログラミングインタフェース。
  15. 請求項1記載の方法を実行するためにグラフィックスプロセッシングユニットに命令するためのアプリケーションプログラミングインタフェース。
  16. 複数のリソースを含む依存ツリーを再構成する方法であって、特定のリソースそれぞれが、前記依存ツリーの親オブジェクトのスロットに結合されることを特徴とするものが、
    前記依存ツリーの前記リソース依存関係それぞれを走査するステップと、
    前記依存ツリーの複数の異なるリソース構成それぞれに関連付けられるコストを計算するステップと、
    異なるシェーダ間の切り換え時、デバイス再構成数を最小化する前記依存ツリーの特定のリソース再構成を選択するステップと、を含むことを特徴とする方法。
  17. 前記依存ツリーのリソース再構成それぞれが、一定のリソースが結合されている特定のスロットを変更することを特徴とする請求項16記載の方法。
  18. 異なるシェーダ間の切り換えのために、再結合される必要があるスロット数を最小化する前記依存ツリーの特定のリソース再構成を選択するステップを含むことを特徴とする請求項16記載の方法。
  19. 前記方法がオフラインコンテンツ生成のために実行され、更に、前記依存ツリーの特定のリソース再構成をストアするステップを含むことを特徴とする請求項16記載の方法。
  20. 前記方法がアプリケーション実行時/ロード時に動的に実行されることを特徴とする請求項16記載の方法。
JP2009518138A 2006-06-28 2007-06-07 グラフィックスパイプラインステートの高速再構成 Active JP5154551B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/477,272 US8111260B2 (en) 2006-06-28 2006-06-28 Fast reconfiguration of graphics pipeline state
US11/477,272 2006-06-28
PCT/US2007/013410 WO2008002384A2 (en) 2006-06-28 2007-06-07 Fast reconfiguration of graphics pipeline state

Publications (3)

Publication Number Publication Date
JP2009543195A true JP2009543195A (ja) 2009-12-03
JP2009543195A5 JP2009543195A5 (ja) 2010-07-08
JP5154551B2 JP5154551B2 (ja) 2013-02-27

Family

ID=38846159

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009518138A Active JP5154551B2 (ja) 2006-06-28 2007-06-07 グラフィックスパイプラインステートの高速再構成

Country Status (7)

Country Link
US (2) US8111260B2 (ja)
EP (1) EP2033085B1 (ja)
JP (1) JP5154551B2 (ja)
KR (1) KR101231291B1 (ja)
CN (2) CN102982504B (ja)
MX (1) MX2008015162A (ja)
WO (1) WO2008002384A2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012137984A (ja) * 2010-12-27 2012-07-19 Digital Media Professional:Kk 画像処理装置
JP2013218527A (ja) * 2012-04-09 2013-10-24 Mitsubishi Electric Corp グラフィックス描画装置
KR20170005823A (ko) * 2014-06-30 2017-01-16 인텔 코포레이션 필터링된 코어스 픽셀 쉐이딩을 위한 방법 및 장치
JP7490791B2 (ja) 2020-02-28 2024-05-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド マルチテナントグラフィック処理ユニットの動的透過再構成

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7948495B1 (en) * 2006-02-02 2011-05-24 Nvidia Corporation Linking texture headers and texture samplers
US8154554B1 (en) 2006-07-28 2012-04-10 Nvidia Corporation Unified assembly instruction set for graphics processing
US20080252652A1 (en) * 2007-04-13 2008-10-16 Guofang Jiao Programmable graphics processing element
US8610725B2 (en) * 2007-10-10 2013-12-17 Apple Inc. Framework for dynamic configuration of hardware resources
US8836700B2 (en) * 2008-05-29 2014-09-16 Advanced Micro Devices, Inc. System, method, and computer program product for a tessellation engine using a geometry shader
US8854379B2 (en) * 2009-02-25 2014-10-07 Empire Technology Development Llc Routing across multicore networks using real world or modeled data
US8749562B1 (en) * 2009-09-23 2014-06-10 Nvidia Corporation Sharing binding groups between shaders
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US8786618B2 (en) * 2009-10-08 2014-07-22 Nvidia Corporation Shader program headers
US8766988B2 (en) * 2009-10-09 2014-07-01 Nvidia Corporation Providing pipeline state through constant buffers
US8872823B2 (en) * 2009-10-09 2014-10-28 Microsoft Corporation Automatic real-time shader modification for texture fetch instrumentation
US9582919B2 (en) * 2009-10-09 2017-02-28 Microsoft Technology Licensing, Llc Automatic run-time identification of textures
US9390539B2 (en) * 2009-11-04 2016-07-12 Intel Corporation Performing parallel shading operations
US8432398B2 (en) * 2009-11-05 2013-04-30 Microsoft Corporation Characteristic determination for an output node
US8756590B2 (en) 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
WO2012054089A2 (en) * 2010-10-21 2012-04-26 Net Power And Light Inc. Distributed processing pipeline and distributed layered application processing
CN102496169A (zh) * 2011-11-30 2012-06-13 威盛电子股份有限公司 重迭对象的绘制方法及装置
US20130342535A1 (en) * 2012-06-20 2013-12-26 Microsoft Corporation Hierarchical Tree Traversal in Graphics Pipeline Stages
US9830741B2 (en) * 2012-11-07 2017-11-28 Nvidia Corporation Setting downstream render state in an upstream shader
KR101695013B1 (ko) * 2012-12-14 2017-01-10 한국전자통신연구원 적응형 자원 할당 및 관리 방법
US20140267327A1 (en) 2013-03-14 2014-09-18 Microsoft Corporation Graphics Processing using Multiple Primitives
US9384589B2 (en) 2013-04-29 2016-07-05 Microsoft Technology Licensing, Llc Anti-aliasing for geometries
US20140354658A1 (en) * 2013-05-31 2014-12-04 Microsoft Corporation Shader Function Linking Graph
US10013732B2 (en) * 2013-06-28 2018-07-03 Lockheed Martin Corporation Externally directed GPU data
US9747658B2 (en) 2013-09-06 2017-08-29 Apple Inc. Arbitration method for multi-request display pipeline
US9292903B2 (en) * 2013-10-03 2016-03-22 Google Inc. Overlap aware reordering of rendering operations for efficiency
US9766954B2 (en) 2014-09-08 2017-09-19 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US9779535B2 (en) 2014-03-19 2017-10-03 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US10430169B2 (en) * 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US20150348224A1 (en) * 2014-05-30 2015-12-03 Apple Inc. Graphics Pipeline State Object And Model
CN104616327B (zh) * 2014-07-31 2017-07-14 浙江大学 一种基于曲面细分的着色器简化方法、装置及图形渲染方法
CN104183008B (zh) * 2014-07-31 2017-01-18 浙江大学 一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法
US9779528B2 (en) 2014-09-12 2017-10-03 Microsoft Technology Licensing, Llc Text realization
US10417990B2 (en) * 2014-10-16 2019-09-17 Nvidia Corporation Efficient binding of resource groups in a graphics application programming interface
US10108321B2 (en) * 2015-08-31 2018-10-23 Microsoft Technology Licensing, Llc Interface for defining user directed partial graph execution
US9881352B2 (en) * 2015-11-13 2018-01-30 Intel Corporation Facilitating efficient graphics commands processing for bundled states at computing devices
US10460513B2 (en) 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11080927B2 (en) * 2017-11-30 2021-08-03 Advanced Micro Devices, Inc. Method and apparatus of cross shader compilation
GB2570304B (en) 2018-01-18 2022-06-01 Imagination Tech Ltd Topology preservation in a graphics pipeline
US10430367B1 (en) * 2018-07-12 2019-10-01 Dell Products L.P. Systems and methods for optimal placement of information handling resource

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003515853A (ja) * 1999-12-06 2003-05-07 エヌヴィディア 単一の半導体プラットフォームで支持される変換、ライティング、ラスター化システム
JP2005322224A (ja) * 2004-05-03 2005-11-17 Microsoft Corp 拡張グラフィックスパイプラインを提供するシステムおよび方法

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6295608B1 (en) 1998-02-17 2001-09-25 Microsoft Corporation Optimized allocation of data elements among cache lines
US6189105B1 (en) 1998-02-20 2001-02-13 Lucent Technologies, Inc. Proximity detection of valid computer user
US6631423B1 (en) 1998-03-31 2003-10-07 Hewlett-Packard Development Company, L.P. System and method for assessing performance optimizations in a graphics system
US6070202A (en) 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6243107B1 (en) 1998-08-10 2001-06-05 3D Labs Inc., Ltd. Optimization of a graphics processor system when rendering images
US6374145B1 (en) 1998-12-14 2002-04-16 Mark Lignoul Proximity sensor for screen saver and password delay
US6560711B1 (en) 1999-05-24 2003-05-06 Paul Given Activity sensing interface between a computer and an input peripheral
US20020021307A1 (en) 2000-04-24 2002-02-21 Steve Glenn Method and apparatus for utilizing online presence information
US7546602B2 (en) 2001-07-10 2009-06-09 Microsoft Corporation Application program interface for network software platform
US6943800B2 (en) 2001-08-13 2005-09-13 Ati Technologies, Inc. Method and apparatus for updating state data
US6784888B2 (en) 2001-10-03 2004-08-31 Ati Technologies, Inc. Method and apparatus for executing a predefined instruction set
US20030084322A1 (en) 2001-10-31 2003-05-01 Schertz Richard L. System and method of an OS-integrated intrusion detection and anti-virus system
US6828978B2 (en) 2002-02-28 2004-12-07 David B. Buehler Bucket-sorting graphical rendering apparatus and method
US7159212B2 (en) 2002-03-08 2007-01-02 Electronic Arts Inc. Systems and methods for implementing shader-driven compilation of rendering assets
CA2483304A1 (en) 2002-05-03 2003-11-13 Roger Alyn Payne Information security
US6980209B1 (en) 2002-06-14 2005-12-27 Nvidia Corporation Method and system for scalable, dataflow-based, programmable processing of graphics data
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
US7530062B2 (en) 2003-05-23 2009-05-05 Microsoft Corporation Optimizing compiler transforms for a high level shader language
US20050097595A1 (en) 2003-11-05 2005-05-05 Matti Lipsanen Method and system for controlling access to content
US7123286B2 (en) 2003-11-14 2006-10-17 Lucent Technologies Inc. Presence detection for IP telephony
US20050182962A1 (en) 2004-02-17 2005-08-18 Paul Given Computer security peripheral
US7385607B2 (en) 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7154500B2 (en) * 2004-04-20 2006-12-26 The Chinese University Of Hong Kong Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
NO20042409L (no) 2004-06-09 2005-12-12 Tandberg Telecom As System og metode for detektering av tilstedevaerelse.
US7218291B2 (en) 2004-09-13 2007-05-15 Nvidia Corporation Increased scalability in the fragment shading pipeline
US7451432B2 (en) 2004-10-01 2008-11-11 Microsoft Corporation Transformation of componentized and extensible workflow to a declarative format
US7464366B2 (en) 2004-10-01 2008-12-09 Microsoft Corporation Programming interface for a componentized and extensible workflow model
US20070234308A1 (en) 2006-03-07 2007-10-04 Feigenbaum Barry A Non-invasive automated accessibility validation
CA2707680A1 (en) * 2006-03-14 2007-09-20 Transgaming Inc. General purpose software parallel task engine

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003515853A (ja) * 1999-12-06 2003-05-07 エヌヴィディア 単一の半導体プラットフォームで支持される変換、ライティング、ラスター化システム
JP2005322224A (ja) * 2004-05-03 2005-11-17 Microsoft Corp 拡張グラフィックスパイプラインを提供するシステムおよび方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012137984A (ja) * 2010-12-27 2012-07-19 Digital Media Professional:Kk 画像処理装置
JP2013218527A (ja) * 2012-04-09 2013-10-24 Mitsubishi Electric Corp グラフィックス描画装置
KR20170005823A (ko) * 2014-06-30 2017-01-16 인텔 코포레이션 필터링된 코어스 픽셀 쉐이딩을 위한 방법 및 장치
JP2017521750A (ja) * 2014-06-30 2017-08-03 インテル・コーポレーション フィルタリングされた粗ピクセルシェーディングのための方法および装置
US10242493B2 (en) 2014-06-30 2019-03-26 Intel Corporation Method and apparatus for filtered coarse pixel shading
JP7490791B2 (ja) 2020-02-28 2024-05-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド マルチテナントグラフィック処理ユニットの動的透過再構成

Also Published As

Publication number Publication date
US20080001952A1 (en) 2008-01-03
EP2033085A2 (en) 2009-03-11
CN101479701B (zh) 2012-11-14
WO2008002384A2 (en) 2008-01-03
CN102982504B (zh) 2016-01-20
CN102982504A (zh) 2013-03-20
JP5154551B2 (ja) 2013-02-27
EP2033085A4 (en) 2014-10-08
KR20090024178A (ko) 2009-03-06
US20110316871A1 (en) 2011-12-29
US8319784B2 (en) 2012-11-27
US8111260B2 (en) 2012-02-07
KR101231291B1 (ko) 2013-02-15
CN101479701A (zh) 2009-07-08
MX2008015162A (es) 2008-12-12
WO2008002384A3 (en) 2008-02-14
EP2033085B1 (en) 2017-11-22

Similar Documents

Publication Publication Date Title
JP5154551B2 (ja) グラフィックスパイプラインステートの高速再構成
US7692660B2 (en) Guided performance optimization for graphics pipeline state management
EP1594091B1 (en) System and method for providing an enhanced graphics pipeline
US7671862B1 (en) Systems and methods for providing an enhanced graphics pipeline
CN108701368B (zh) 用于经实施例化的几何结构的更有效的光线跟踪方法和装置
JP4922367B2 (ja) グラフィックス・システム内で中間ターゲットを提供するためのシステムおよび方法
TWI632524B (zh) 以邊緣爲基礎之覆蓋遮罩壓縮技術
CN113253979A (zh) 用于云游戏的系统架构
CN111402389A (zh) 自底至顶的加速数据结构修整中的早期终止
CN114028804A (zh) 流式传输压缩光场
CN113393564A (zh) 利用全局照明数据结构的基于水塘的时空重要性重采样
US10395423B2 (en) Apparatus and method for rendering adaptive mesh refinement (AMR) data
CN111986279A (zh) 有效访问存储器和避免不必要的计算的技术
CN109791527A (zh) 延迟丢弃
Ioannidis et al. Multithreaded rendering for cross-platform 3D visualization based on Vulkan Api
Dong Scalable Real-Time Rendering for Extremely Complex 3D Environments Using Multiple GPUs

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100510

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100510

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120305

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120604

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120611

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120705

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120712

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120803

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120810

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120905

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121205

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151214

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5154551

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250