JP6108670B2 - グラフィックス処理 - Google Patents

グラフィックス処理 Download PDF

Info

Publication number
JP6108670B2
JP6108670B2 JP2012046402A JP2012046402A JP6108670B2 JP 6108670 B2 JP6108670 B2 JP 6108670B2 JP 2012046402 A JP2012046402 A JP 2012046402A JP 2012046402 A JP2012046402 A JP 2012046402A JP 6108670 B2 JP6108670 B2 JP 6108670B2
Authority
JP
Japan
Prior art keywords
attribute
vertex shader
vertex
attribute value
value
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.)
Active
Application number
JP2012046402A
Other languages
English (en)
Other versions
JP2012185820A (ja
Inventor
ヨーン・ニスタッド
アスキー・サイモン・クリステンゼン
Original Assignee
アーム・リミテッド
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 アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2012185820A publication Critical patent/JP2012185820A/ja
Application granted granted Critical
Publication of JP6108670B2 publication Critical patent/JP6108670B2/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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)

Description

本発明はグラフィックス処理に関し、具体的には、頂点シェーディング段階(stage)を含むグラフィックス処理システムの動作に関する。
当技術分野で知られているように、グラフィックス処理は通常パイプライン方式で実行され、1つまたは複数のパイプラインの段階がデータに加えられて表示される最終的な画像を生成する。この処理の2つの重要な段階は通常、表示されることになる画像を表すプリミティブ(ポリゴン)の頂点上で実行される変換およびライティングのような、いわゆる頂点シェーディング動作と、表示されることになる画像を構成する個々のフラグメント(ピクセル)をシェーディング(色付け)する、後続のフラグメント(ピクセル)シェーディング動作である。
頂点変換および頂点ライティングのような頂点シェーディング動作は、通常、グラフィックス処理のいわゆる「頂点シェーダ」段階で実行される。頂点シェーダは、通常、入力データ値に対して頂点シェーダプログラムを実行して、グラフィックスパイプラインの残りによる処理のための所望の出力データ(例えば、適切に変換されライティングされた頂点データ)のセットを生成する、プログラム可能な処理ユニットである。(当技術分野で知られているように、あるシーンの各プリミティブ(ポリゴン)は通常、頂点のセットとして定義かつ表現され、各頂点は、自身を頂点のデータ値のセットと関連付けている。頂点シェーディング処理は、例えば、頂点に関連するプリミティブに加えるべき任意の変換またはライティングに基づいて、頂点の最初に定義されたデータ値を修正する。)
あるシーンに対する入力データ値が頂点「シェーディング」されると、次いでそのシーンを表すプリミティブは通常ラスタライズされ、そのシーンのために処理されることになる複数の「フラグメント」を生成する。(当技術分野で知られているように、「フラグメント」は、グラフィックス処理動作(例えばレンダリング)が実行される個別のグラフィカルエンティティである。各フラグメントは、シーンの1つまたは複数のサンプリング点に対応し、サンプリング点を表示できるように、自身と必要なデータとを、例えば、赤、緑、青(RGB)の明度、アルファ(透明度)値、および深度値とを関連付けている。(フラグメントはピクセルとも呼ばれることがあるが、所与のフラグメントが最終的な表示での単一のピクセル(ピクセル要素)と完全に対応するとは必ずしも限らない。それは、ダウンスケーリングのような後処理が、グラフィックス処理の動作の対象のエンティティ(フラグメント)と表示ピクセルの間に、1対1の対応が存在しないことを意味しうるためである。))
グラフィックスフラグメントは、生成されると、自身をシェーディングする複数の処理を経て、最終的な出力などの明度、例えば適用されるテクスチャ、ブレンディングなどを生成する。出力データ値などを導出するためのそのような処理、例えば、フラグメントが表すサンプル点を表示するのに必要な処理は、「フラグメントシェーディング」または「ピクセルシェーディング」と呼ばれることがあり、処理パイプラインのフラグメントシェーディング(ピクセルシェーディングとも呼ばれる)段階で実行される。フラグメントシェーディング処理は、フラグメントの最初に定義されたフラグメントデータ値を処理して、フラグメントの出力データ(フラグメントが表すサンプル点を表示するのに必要なデータ)を正確に導出する。フラグメントシェーダはやはり、1つまたは複数のフラグメントシェーダプログラムを実行してフラグメントを適切にシェーディング(色付け)する、プログラム可能ユニットであってよい。
当技術分野で知られているように、頂点シェーディング動作およびフラグメントシェーディング動作は通常、いわゆる「属性」に対して動作する。属性は、シェーダプログラムにおける入力変数または出力変数であり、例えば、位置、色、またはテクスチャ座標などを表しうる。
頂点シェーダへの入力属性は、プライマリ属性とも呼ばれることがあり、頂点シェーダの出力属性(フラグメントシェーダの入力属性でもある)は、セカンダリ属性と呼ばれることがある。通常、(頂点シェーダおよびフラグメントシェーダとリンクされた)所与のシェーダプログラムに対して、一定数のプライマリ属性(頂点シェーダ入力変数)および一定数のセカンダリ属性(頂点シェーダ出力変数/フラグメントシェーダ入力変数)が存在する。
ある特定の描画呼び出しについて、インスタンス化されていない描画では、各々のプライマリ属性(頂点シェーダ入力変数)が、描画呼び出しの各頂点に対し、定義されたある値を有する。インスタンス化された描画の場合、各々のプライマリ属性(頂点シェーダ入力変数)は、各頂点または各インスタンスのいずれかに対し、定義されたある値を有する。したがって、インスタンス化されたモードの動作では、一部のプライマリ属性は、頂点毎に定義された値を有するので、「頂点毎」の属性であると考えることができる。同様に、値がインスタンス毎に定義されたプライマリ属性が存在することがあり、そうした属性はそれ故「インスタンス毎」の属性であると考えることができる。
当技術分野で知られているように、グラフィックスプロセッサがいわゆる「インスタンス化された」モードで動作している場合、同じ入力ジオメトリの複数の「インスタンス」が(例えば毎回わずかに異なる位置において)描画される。この場合、頂点シェーダは、頂点毎に1回だけではなく、頂点毎およびインスタンス毎に1回実行される(すなわち、実行される回数は頂点の数とインスタンスの数の積に等しい)。したがって、通常、異なる頂点とインスタンスとの組合せの各々に対する、各々のセカンダリ属性(頂点シェーダ出力変数)のために生成された、頂点シェーダ出力(セカンダリ属性値)が存在する。
プライマリ属性値は通常、頂点シェーダが用いるメモリに格納される。(これは通常グラフィックスAPIで指定される。)グラフィックス処理を必要とするホストシステム上のアプリケーションは、通常、頂点シェーダ入力属性のメモリレイアウトおよび入力属性値を指定する。
従来のイミディエイトモードのグラフィックス処理ユニットの場合に、フラグメントシェーダのような、頂点シェーディングされたセカンダリ属性値という出力を次の処理段階へ与えるために、頂点シェーダの出力は通常、チップ内部の内部パイプラインを通じて導かれる。遅延レンダリンググラフィックスプロセッサ(例えばタイルベースグラフィックスプロセッサ)の場合、頂点シェーダの出力(頂点シェーディングされた属性値)は、通常メモリに書き込まれ、メモリにおいて、頂点シェーダの出力は必要に応じてフラグメントシェーダなどによりアクセスされる。
属性値がメモリに格納される場合、頂点シェーダおよびフラグメントシェーダなどは通常、適切なメモリアドレスを備えてそれを使用し、適切な属性値を、そうした属性値が格納されるべき、または格納されているメモリに、格納し、かつそうしたメモリから取り出す。
例えば、頂点シェーダは、処理のために特定の入力属性値をロードするという命令を実行し、その命令は、頂点シェーダが、入力属性値が格納されるメモリから適切な属性値を取り出すことを可能にするための、メモリアドレスを含み、または示す。同様に、フラグメントシェーダは、処理のために特定の頂点シェーディングされた出力属性値をロードするという命令を実行し、その命令は、フラグメントシェーダが、対象のポリゴン(プリミティブ)の各コーナ頂点について、出力属性値(頂点シェーダの出力)が格納されるメモリから適切な出力属性値を取り出すことを可能にするための、メモリアドレスを含み、または示す。
出願人らは、頂点シェーディング段階を含むグラフィックスプロセッサの動作について、改善の余地があると考える。
本発明の第1の態様によれば、入力属性値を処理して、グラフィックス処理システムの次の段階が使用する頂点シェーディングされた出力属性値を生成する、頂点シェーディング段階を含む、グラフィックス処理システムを動作させる方法が提供され、その方法は、
頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、頂点シェーダ出力属性値がそこから生成される頂点シェーダ入力属性値と、いつ同じになるかを認識するステップと、
頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、頂点シェーダ出力属性値がそこから生成される頂点シェーダ入力属性値と同じになると認識される時、
頂点シェーダ出力属性値を、頂点シェーダ入力属性値から生成しないように、頂点シェーダを制御するステップと、
頂点シェーダによって生成されていたであろう頂点シェーダ出力属性値を用いる必要がある次のグラフィックス処理段階に、代わりに対応する頂点シェーダ入力属性値を処理させるステップと
を含む。
本発明の第2の態様によれば、グラフィックスを処理するためのシステムが提供され、そのシステムは、
頂点シェーディング段階と、頂点シェーディング段階の次の少なくとも1つの処理段階とを含む、複数のグラフィックス処理段階を含むグラフィックスプロセッサであって、頂点シェーディング段階が、入力属性値を処理し、グラフィックスプロセッサの少なくとも1つの次の処理段階が用いる頂点シェーディングされた出力属性値を生成する、グラフィックプロセッサと、
頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、頂点シェーダ出力属性値がそこから生成される頂点シェーダ入力属性値と、いつ同じになるかを認識し、
頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、頂点シェーダ出力属性値がそこから生成される頂点シェーダ入力属性値と同じになると認識される時、頂点シェーダに、頂点シェーダ出力属性値を、頂点シェーダ入力属性値から生成させないようにし、
頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、頂点シェーダ出力属性値がそこから生成される頂点シェーダ入力属性値と同じになると認識された場合、頂点シェーディング段階の出力を処理する少なくとも1つの次のグラフィックス処理段階に、本来頂点シェーダによって生成されていたであろう頂点シェーダ出力属性値の代わりに、対応する頂点シェーダ入力属性値を処理させる
ように構成されたプロセッサとを含む。
本発明では、グラフィックス処理動作は、頂点シェーダの出力が頂点シェーダの入力属性値といつ同じになるか(すなわち、いつ頂点シェーダ出力が単に頂点シェーダ入力属性のコピーになるか)を、認識するように構成される。
出願人らは、いくつかの場合には、所与の頂点シェーダ入力属性への頂点シェーダ動作が、実際には頂点シェーダ入力属性値を変えないままにすることがあり、したがって実質的に、頂点シェーダの動作は、入力値を変えずに頂点シェーダの出力に単に渡すものになることを認識した。このことは、例えば、頂点シェーダ入力属性が、頂点のテクスチャ座標である場合に起こりうる。
そのような「通りぬけ」の状況が認識されると、本発明では、頂点シェーダは出力値を生成しない(すなわち、入力のコピーを生成しない)ように制御され、代わりに、その出力を用いる必要がある任意のグラフィックス処理段階は、代わりに対応する頂点シェーダ入力属性値を処理するように制御される。
この構成にはいくつかの利点がある。第1に、グラフィックス処理の後段階が頂点シェーダ入力を直接用いることができるようにすることで、頂点シェーダが、グラフィックス処理の後段階が用いる「コピー」の出力値を格納する必要がなくなる。したがって、これにより、実質的に不要な「コピー」の出力値の書き込みが避けられ、さらに、第1の場所におけるそうした「コピー」の発生が避けられる。
さらに、コピーの「通りぬけ」の出力値を生成しないように頂点シェーダを制御することで、頂点シェーダにおいてコピーの出力値を生成し、次のグラフィックス処理段階が用いるために出力値を格納するための、メモリトラフィック、メモリ使用量、帯域幅および実行時間が、回避される。
したがって、本発明は、グラフィックス処理システムにおける頂点シェーダ動作において、フラグメントシェーダにより必要とされる全ての頂点シェーダ出力をメモリに単に書き込む構成と例えば比較して、メモリトラフィックおよび使用量を低減し、したがって消費電力を低減することができる。これは一般的に有益であるが、低電力で持ち運び可能なデバイスで用いられるグラフィックス処理システムでは特に有利でありうる。
頂点シェーダが処理する入力属性値(すなわち、上で論じられたように入力変数値)(および対応する出力属性値(出力変数値))は、頂点シェーダが動作対象にしうる(かつ生成しうる)任意の適切な属性値であってよい。当技術分野で知られているように、上記の適切な属性値は通常、かつ好ましい実施形態では、位置、色などのような属性の値である。
マルチコアシステムでありうるように、グラフィックス処理システムが複数の頂点シェーダを含む場合、本発明は同様に適用可能であることに、ここで留意されたい。この場合、頂点シェーディング段階は、例えば並列に動作する、複数の個別の頂点シェーダを含む。そのような構成では、各頂点シェーダは、好ましくは、本発明による方式で、すなわち「通りぬけ」の属性の出力値を格納しないように動作する。
頂点シェーダの出力を用いることになる次のグラフィックス処理段階は、任意の適切で所望される、そのようなグラフィックス処理段階であってよい。次のグラフィックス処理段階は、好ましくは、グラフィックス処理システムの次のシェーダ段階である。特に好ましい実施形態では、次のグラフィックス処理段階は、フラグメントシェーダであり、例えばジオメトリシェーダであってもよい。
頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる状況は、任意の適切な所望の方式で、任意の適切な段階およびシステムのプロセッサにおいて認識することができる。このことは、好ましくは、頂点シェーダ入力属性から直接コピーされる頂点シェーダ出力属性を識別することによって、行われる。最も好ましくは、システムは、特定の描画呼び出しに対して、出力属性の値が、入力値とは無関係に、全ての頂点に対する入力値と同一になる状況を、認識しようとする(および認識する)。
特に好ましい実施形態では、頂点シェーダコンパイラがこれを行う。したがって、好ましい実施形態では、頂点シェーダコンパイラは、頂点シェーダコードをコンパイルする時に、各々の頂点シェーダ出力属性に対して、頂点シェーダ出力属性の値が、頂点シェーダ入力属性の値から直接コピーされるべきかどうか(すなわち、出力属性が「通りぬけ」の属性であるかどうか)を、検出するように構成される。このことは、これを行うのに適した任意の所望のコンパイラ技術を用いて行われうる。
この点において、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーである全ての場合が、本発明において適切に認識され処置されることが好ましいが、出願人らは、頂点シェーダ出力属性値がいつ頂点シェーダ入力属性値のコピーになるかを、動作の際に完全に正確にかつ信頼性を伴って識別する機構が、常に可能ではない場合があることを認識した、ということに留意されたい。例えば、頂点シェーダコンパイラがこれを行うために用いられている場合、コンパイラが、全てのシェーダプログラムに対してこの性質を完全に識別することはできないことがある(そして実際には通常は識別することができないだろう)。
このことを説明すると、特に好ましい実施形態では、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる状況を識別するための機構は、慎重な結果を与えるように、すなわち、「誤りが起きても安全な側に起こす」ように、構成および構築される。したがって、特に好ましい実施形態では、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる状況を認識する際のあらゆる誤りが、実際には「通りぬけ」の状況が存在しない場合に「通りぬけ」の状況が存在すると判定するのではなく、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる場合にそれをシステムが検出しないようなものとなるような、構成になる。
したがって、システムは好ましくは、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる状況を認識する際のあらゆる誤りが、実際には頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる場合に、それを検出しない誤りとなるように、構成される。このことは、全ての状況において正しくシステムが挙動するという効果を有する(しかし、場合によっては、本発明の方式での最適化および好ましい動作のための一部の機会を失う)。
したがって、「通りぬけ」の属性または状況が識別された(すなわち、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなると判定された)場合の、本発明の動作への具体的な言及は、システム、例えばコンパイラが、「通りぬけ」の状況を識別したという状況を指すことにも、ここで留意されたい。
頂点シェーダは、「通りぬけ」の入力が、任意の適切な所望の方式で、任意の適切な段階およびシステムのプロセッサにおいて認識される場合、出力値を生成しないように制御されうる。また、特に好ましい実施形態では、頂点シェーダコンパイラがこれを行う。したがって、好ましい実施形態では、頂点シェーダコンパイラは、「通りぬけ」の入力(例えば「通りぬけ」の属性)が検出されると、本来は、頂点シェーダに、入力属性値を処理させてコピーの出力属性値を生成させていたであろうコードを、省略するように構成される。また、このことは、これを行うのに適した任意の所望のコンパイラ技術によって行われうる。
次のグラフィックス処理段階は、同様に、「通りぬけ」の入力が任意の適切な所望の方式で識別された場合に、頂点シェーダ入力属性値を用いるようになされうる。好ましくは、処理段階(例えばフラグメントシェーダ)は、頂点シェーダ出力値ではなく、頂点シェーダ入力属性値をロードするようになされる。
特に好ましい実施形態では、グラフィックス処理段階のロード命令は、段階に、頂点シェーダ出力属性値ではなく、頂点シェーダ入力属性値から、処理すべき値をロードさせるように、構成される。したがって、特に好ましい実施形態では、フラグメントシェーダのような、かつ好ましくはフラグメントシェーダである、グラフィックス処理段階のロード命令は、グラフィックス処理段階に、頂点シェーダ入力属性値と頂点シェーダ出力属性値のいずれかをロードさせることができる。このことは、好ましくは、値が処理のためにロードされる属性が、頂点シェーダ入力属性である(したがってその値は頂点シェーダ入力属性値から取り出さなければならない)か、頂点シェーダ出力属性である(したがってその値は頂点シェーダ出力属性値から取り出さなければならない)かを特定する、ロード命令によって実現する。
例えばロード命令のそのような構成は、対象のグラフィックス処理段階のコンパイラにより(したがって、例えばフラグメントシェーダコンパイラにより)行われうる。しかし、このことは、フラグメントシェーダのような他のグラフィックス処理段階がコンパイルされる前に頂点シェーダがコンパイルされることを必要としうるので、特に好ましい実施形態では、(複数の段階を一緒に1つのシェーダプログラムにリンクする)シェーダリンカが、「通りぬけ」の状況が識別されると、対象の段階が適切な頂点シェーダ入力属性(値)を読み取るように、段階のコード(例えばロード命令)を修正するように構成される。
(当技術分野で知られているように、例えばシェーダリンカ動作は、通常、フラグメントシェーダへの各々の入力属性を、対応する頂点シェーダ出力属性と一致させる。本発明では、「通りぬけ」の属性が存在する場合、この動作は好ましくは、適切なフラグメントシェーダ入力属性を、代わりに頂点シェーダ入力属性にリンクするように修正される。)
適切なグラフィックス処理段階のコード(例えばロード命令)を生成および/または修正する必要性は、任意の所望の適切な方式で認識されうる。特に好ましい実施形態では、頂点シェーダ出力属性の値が頂点シェーダ入力属性の直接のコピーになることを示し、頂点シェーダ出力属性の値はどの入力属性の値のコピーになるのかを示す、メタ情報が生成され、このメタ情報は好ましくは、対象の出力属性に頂点シェーダ入力値を用いる(頂点シェーダ出力属性値を探す代わりに)、フラグメントシェーダのような1つまたは複数の次のグラフィックス処理段階を、始動させるのに用いられる。
メタ情報は好ましくは、(上で論じられたように)好ましくは頂点シェーダコンパイラが「通りぬけ」の属性の存在を認識した時に、頂点シェーダコンパイラにより生成される。したがって、好ましい実施形態では、頂点シェーダコンパイラは、対象の頂点シェーダ出力属性が頂点シェーダ入力属性のコピーであることと、頂点シェーダ出力属性がどの入力属性のコピーであるかということとを、シェーダコードと関連付けられたメタ情報内に記録するように構成される。同様に、特に好ましい実施形態では、シェーダリンカは、このメタ情報を認識するように構成され、メタ情報の認識に応答して、段階が対応する頂点シェーダ入力属性(値)を読み取るように、対象の段階のコード(例えばロード命令)を修正するように構成される。
通りぬけの属性が識別された場合に、フラグメントシェーダのような次のグラフィックス処理段階を制御して、頂点シェーダ入力属性値を読み取るステップとともに、次のグラフィックス処理段階は、好ましくは、必要とする頂点シェーダ入力属性の具体的な値にアクセスしそれを読み取ることを可能にするための、データも備える。このことは、任意の所望の適切な方式で行われうる。
特に好ましい実施形態では、インデックス付け機構が、適切な属性値を取り出すのに用いられる。
最も好ましくは、グラフィックスプロセッサの全てのシェーダ段階は、属性値をどこから読み取るべきか(および好ましくはどこに格納すべきか)を識別するための、インデックス付けの取り決めを用いる。したがって、頂点シェーダおよびフラグメントシェーダなどは、好ましくは、属性値が格納されているメモリから適切な属性値を取り出すために、適切なインデックスを含みかつ用いる。
例えば、頂点シェーダは、処理のための特定の入力属性値をロードするための命令を実行し、その命令は、頂点シェーダがメモリから適切な属性値を取り出せるようにするための、インデックスを含みまたは示す。同様に、フラグメントシェーダは、特定の、例えば処理のための頂点シェーディングされた出力属性値をロードするための命令を実行し、その命令は、フラグメントシェーダがメモリから適切な出力属性値を取り出せるようにするための、対象のプリミティブの各コーナ頂点のためのインデックスを含みまたは示す。
入力属性値(頂点シェーダ入力属性値)は、好ましくは、自身が関連する頂点またはインスタンス(インスタンス化されたモードが使用される場合)に基づいて、インデックスを付けられる。したがって、頂点毎に定義される頂点シェーダ入力属性値は、好ましくは、自身が関連する頂点に関して(すなわち、(入力)頂点インデックスを用いて)メモリ内でインデックスを付けられる。同様に、インスタンス毎に定義される頂点シェーダ入力属性値は、好ましくは、自身が関連するインスタンスに関して(すなわち、(入力)インスタンスインデックスを用いて)インデックスを付けられる。インスタンス毎の属性はまた、定義されたインスタンス除数によりインスタンスインデックスを割り、(除数が1よりも大きい場合)属性値を除数の数のインスタンスについて繰り返させることができる。
頂点シェーダの出力属性値は、好ましくは「折りたたまれていない(unfolded)」出力インデックスを用いて、インデックスを付けることができる。この理由は、頂点に依存する入力属性の各々の各頂点に対し、頂点シェーダ入力属性値は通常1つだけ存在し、インスタンスに依存する入力属性の各々の各インスタンスに対し、頂点シェーダ入力属性値は通常1つだけ存在するが、頂点シェーダの出力は、各インスタンスの各頂点の(別々の頂点およびインスタンスの組合せの各々の)各出力属性に対して別々の出力属性値を与えるように、通例「折りたたまれていない」かまたは「引き伸ばされている(blown-up)」。したがって、頂点シェーダ出力属性値は、好ましくは、頂点シェーダ入力属性値に用いられる頂点インデックスおよびインスタンスインデックスに対し、異なるインデックスの取り決めを用いることができる。
頂点シェーダにより(頂点シェーダの出力である頂点シェーディングされた属性値を格納する際に)用いられる出力インデックスおよび、頂点シェーダにより用いられる入力インデックスは、例えば、頂点/インスタンスの組合せ毎に1つの頂点シェーダスレッドを起動することによって、頂点シェーダ実行機能の一部として生成されうる。
したがって、通例、フラグメントシェーダのような次のグラフィックス処理段階は、処理のために頂点シェーダの出力属性値を取り出す時、好ましくは「折りたたまれていない」出力インデックスを用いる。しかし、本発明では、「通りぬけ」の状況が識別された場合、上で論じられたように、次のグラフィックス処理段階は、頂点シェーダ出力属性値ではなく頂点シェーダ入力属性値にアクセスする。したがってこの場合、フラグメントシェーダのような次のグラフィックス処理段階は、適切な頂点シェーダ入力属性値(複数可)を取り出し用いることを可能にする、1つまたは複数の適切なインデックスを好ましくは備える。
上記のことが成り立つ場合には、グラフィックス処理システムを、フラグメントシェーダのような次のグラフィックス処理段階に、および必要に応じて、入力属性値の適切な頂点インデックスまたはインスタンスインデックスを直接用いる、次のグラフィックス処理段階に提供できるように構成することが可能である。
しかし、特に好ましい実施形態では、グラフィックス処理システムは、単一の形態の出力インデックス、好ましくは上で論じられたようなセカンダリ(頂点シェーダ出力の)属性値を取り出すのに用いることができる「折りたたまれていない」形態の出力インデックスを、必要な場合に出力インデックスから導出可能であり導出される入力属性値のために用いられる、任意の他の形態のインデックス(例えば、好ましくは上で論じられたように頂点インデックスまたはインスタンスインデックス)とともに、次のグラフィックス処理段階に提供するように構成される。
したがって、特に好ましい実施形態では、フラグメントシェーダのような次のグラフィックス処理段階は、入力属性値(すなわち、好ましくは頂点インデックスまたはインスタンスインデックス)がそこから導かれうる「折りたたまれていない」出力インデックスを、必要であれば備える。このことは、単一の形態のインデックス(すなわち出力の「折りたたまれていない」インデックス)が、次のグラフィックス処理段階に提供されなければならない(グラフィックス処理段階が複数の形態のインデックスをサポートし場合によっては備えることは必要とされない)ということを意味する。さらに、出力を用いて、用いられるインデックスの形態として折りたたまれていないインデックスが有利である。それは、一般にそうした形態のインデックスは、例えば頂点インデックスとインスタンスインデックスの両方を提供するよりも、記憶スペースの使用量が少ないためである。
「折りたたまれていない」出力インデックスは、好ましくは、グラフィックス処理段階が実行することになる、属性ロード(または格納)命令により提供されかつ/または示される。
これらの構成では、入力属性値が用いるインデックスが、次のグラフィックス処理段階に提供される出力インデックスから、任意の適切で所望される方式で導出されうる。出力属性値の単一の格納された組が用いるインデックスは好ましくは、出力インデックスから所定の方式で導出可能である(かつ導出される)。
特に好ましい実施形態では、次のグラフィックス処理段階に提供される出力の「折りたたまれていない」インデックスから導かれうるインデックスは、上で論じられたように、頂点インデックスおよびインスタンスインデックスを含む。
最も好ましくは、次のグラフィックス処理段階に提供される出力の「折りたたまれていない」インデックスは、所定の方式で、頂点シェーディングされた出力属性値という関連する出力を生成するために頂点シェーダが処理する(または処理するであろう)、入力属性値のインスタンスインデックスおよび/または頂点インデックスから導出される。このことは、出力インデックス生成動作を逆にすることで、対応する頂点インデックスまたはインスタンスインデックスを取り出すことができるということを意味する。(言い換えると、出力である折りたたまれていないインデックスが、定義された入力属性値インデックスから適切な方式で導出され、出力インデックスは対応する入力属性値インデックスを得るために分解することができ、これにより、入力属性値インデックスを、それらを直接規定する必要なく取り出すための機構が得られるということを、出願人らは認識した。)
したがって、特に好ましい実施形態では、次のグラフィックス処理段階が頂点シェーダにより生成された出力属性値を処理しようとする時に次のグラフィックス処理段階に提供されるインデックスは、所定の方式で、対応する頂点シェーダ入力属性値が定義される頂点およびインスタンスの頂点インデックスおよびインスタンスインデックスから生成される。
特に好ましい実施形態では、頂点インデックスおよびインスタンスインデックスの一方(好ましくは頂点インデックス)は、出力インデックス値に対するモジュロ演算によって出力インデックスから導出することができ、頂点インデックスおよびインスタンスインデックスの他方(好ましくはインスタンスインデックス)は、出力インデックス値に対する除算を実行することにより出力インデックスから導出されうる。
最も好ましくは、用いられることになる出力インデックス値(フラグメントシェーダなどに提供されるインデックス)は、以下のように導出される。
出力インデックス値 = (頂点インデックス) + (インスタンスインデックス) × (詰め込まれたインスタンスサイズ)
ここで、「詰め込まれたインスタンスサイズ」は、インスタンス当たりの頂点の数に等しいかそれよりも大きい、設定された(選択された)値である。
このことは、(入力)頂点インデックスが、モジュロ演算により出力インデックス値から得られるということを意味し、
頂点インデックス = (出力インデックス値) modulo (詰め込まれたインスタンスサイズ)
であり、また(入力)インスタンスインデックスは、除算により出力インデックス値から得られるということを意味し、
インスタンスインデックス = floor((出力インデックス値) / (詰め込まれたインスタンスサイズ))
である。
このことの効果は、所与の入力頂点の各インスタンスのために生成される各出力インデックスは、例えば、上記のようにモジュロ演算されると同じ頂点インデックスを返し、所与の入力インスタンスの各頂点のために生成される各出力インデックスは、上記のように除算されると同じインスタンスインデックスを返す。したがって、フラグメントシェーダは、例えば、(異なる「コピー」の出力属性値の各々が異なる「出力インデックス」値を有しても)入力属性値のコピーとなる各出力属性値に対する適切な入力属性値を(必要に応じて)取り出すための、同一のインデックス(頂点インデックスまたはインスタンスインデックス)を導出することができる。
「詰め込まれた(padded)インスタンスサイズ」は、インスタンス当たりの頂点の数(例えば対象の描画呼び出しに対して定義される)に少なくとも等しくなければならないが、この数と完全に一致しなくてもよい。好ましくは、ハードウェアでモジュロ演算を実行する時に用いるのに十分な値に設定される(これにより、完全に汎用的なモジュロ演算が必要とする回路よりも簡易的なモジュロ回路が可能になるため)。最も好ましくは、モジュロ演算が(比較的)行いやすい、次に大きい値または等しい値(インスタンス毎の頂点の数よりも大きい)に丸められる。
グラフィックス処理システムが、インスタンス毎の入力値が特定の属性のインスタンスインデックスに対するさらなる除数値を有することを可能にする、インスタンス化のためのAPI機構を用いる場合、それに応じて、そのようなさらなる除数機構が、除数機構が適用されるインスタンス毎のあらゆる入力属性値にインデックスを付ける時に、好ましくは用いられる(さらなる除数は好ましくは、例えばフラグメントシェーダに提供される出力である折りたたまれていない出力から、属性値を取り出すのに用いられることになるインスタンスインデックスを導出する際に、除数値(詰め込まれたインスタンスサイズ)に単純に乗算される)。
したがって、フラグメントシェーダ(または他の次のグラフィックス処理段階)が、頂点シェーダ入力属性値を処理する(すなわち「通りぬけ」の状況が存在する)時、例えばフラグメントシェーダは、頂点シェーダ入力属性値をロードするように指示されるとともに出力インデックス値を備え、この出力インデックス値から、所望の頂点シェーダ入力属性値を取り出すのに用いられるインデックスを導出する。異なる操作を用いて、提供される出力インデックスから所望のインデックスを導出することができる、上で論じられた構成では、グラフィックス処理段階はまた、どのインデックス導出動作を用いるべきか(およびその動作で用いられることになるあらゆる値)を与えられなければならない。
この点において、フラグメントシェーダのようなグラフィックス処理段階へのロード命令が、関連する頂点シェーダ入力属性値を取り出すのに用いられることになるインデックスを導出するのに必要な全ての情報を含むことは可能だが、特に好ましい実施形態では、実行されるべきインデックス導出動作および、好ましくはその動作に必要なあらゆるデータ(値)は、ロード命令自体とは別のメタ情報により好ましくは示され、かつ/またはメタ情報として提供される。このメタ情報は、好ましくは、フラグメントシェーダなどに提供される出力インデックスが、上で論じられたように、モジュロ演算または除算を受け、属性値を取り出す際に用いる頂点インデックスまたはインスタンスインデックスを導出すべきかどうかを示す。最も好ましくは、このメタ情報はまた、所望のインデックスを導出するのに用いられることになる、適切なモジュロ値または除数値(すなわち、詰め込まれたインスタンスサイズおよび、必要であればインスタンス除数)を示し、または含む。
特に好ましい実施形態では、メタ情報は対象の属性と関連する。そして、属性の値が処理されることになる場合は常に、属性に関連するメタ情報は、好ましくは、属性値自体を取り出すのに用いられることになるインデックスを決定するのに用いられることになるインデックス導出方法がもしあれば、それを決定するように読み取られる。
特に好ましい実施形態では、このメタ情報は属性記述子の形態であってよく、属性記述子はとりわけ、対応する属性が「除数(divisor)」属性(すなわち「折りたたまれていない」出力インデックスに除算を適用して、使用するインデックスを導出しなければならない)であるか、「モジュロ」属性(すなわち「折りたたまれていない」出力インデックスに除算を適用して、使用するインデックスを導出しなければならない)であるか、または「通常の」または「線形の」属性(すなわち「折りたたまれていない」出力インデックスを直接用いなければならない)であるかどうか、および必要に応じて、対応する除数値またはモジュロ値(詰め込まれたインスタンスサイズ(および必要ならばインスタンス除数))であるかどうかを、示す。
上で論じられた好ましい構成では、頂点毎に定義された属性は、詰め込まれたインスタンスサイズに等しいモジュロ値を有するモジュロ属性として定義され、インスタンス毎に定義された属性は、詰め込まれたインスタンスサイズ(必要ならば、あらゆる必要なインスタンス除数により乗算される)に等しい除数値を有する除数属性として定義される。
したがって、特に好ましい実施形態では、所望の入力属性値を取り出すことを可能にするための正確なインデックスをどのように導出するかを示す、好ましくは属性記述子の形態にあるメタ情報が、1つの頂点シェーダ入力属性、好ましくは各々の頂点シェーダ入力属性に対して、生成され格納される。次のグラフィックス処理段階(例えばフラグメントシェーダ)は、好ましくはそのメタ情報を用いて、格納された頂点シェーダ入力属性値への所望のインデックスを導出する。
特に好ましい実施形態では、この機構はまた、頂点シェーダの入力属性値にアクセスするために、頂点シェーダにより用いられる。したがって、頂点シェーダへの属性ロード命令は、好ましくは、属性の対象の値に関連して用いられる折りたたまれていない出力インデックスを含みまたは示し、次いで頂点シェーダは、そのインデックスをどのように処理して、処理される入力属性の値を取り出すのに用いられる実際のインデックス(頂点インデックスまたはインスタンスインデックス)を導出するかを、属性に関連するメタ情報から決定する。
特に好ましい実施形態では、各々の頂点シェーダ入力属性は、対応する入力属性記述子を有し、各頂点シェーダ出力属性はまた、対応する出力属性記述子を有する。
そして入力属性記述子は、好ましくは、入力属性値に正しくアクセスするために、頂点シェーダにより用いられ、頂点シェーダ入力属性値にアクセスする「通りぬけ」の状況が存在する場合、フラグメントシェーダのような他のグラフィックス処理段階により用いられる。セカンダリ(頂点シェーダ出力)属性記述子は、好ましくは、自身の出力属性値をどこに書き込むかを決定するために頂点シェーダにより用いられ、出力属性値をどこで読み取るかを決定するために、フラグメントシェーダのような次のグラフィックス処理段階により用いられる。
したがって、特に好ましい実施形態では、頂点シェーダのそれぞれの入力属性に各々関連し対応する、複数の属性記述子を含む、メタ情報のアレイが存在し、その属性記述子はとりわけ、フラグメントシェーダのようなグラフィックス処理段階が、その頂点シェーダ入力属性を用いようとする時にそれぞれの入力属性の適切な格納された値を取り出すことを可能にするための、情報を含む。
同様に、頂点シェーダのそれぞれの出力属性に各々関連し対応する、複数の属性記述子を含む、メタ情報のアレイが好ましくは存在する。
属性記述子は好ましくは、描画呼び出し時にグラフィックスプロセッサドライバにより生成される。
グラフィックス処理段階が属性値を処理しようとする時に読み取る(用いる)ことになる関連するメタ情報、例えば属性記述子は、任意の所望される適切な方式で示されうる。特に好ましい実施形態では、各属性は属性インデックスに割り当てられ、これらの属性インデックスは次いで、用いるべきメタ情報(属性記述子)を示すために用いられる。好都合なことに、属性インデックスは、例えば頂点シェーダコンパイラによって、割り当てられうる。
したがって、特に好ましい実施形態では、メタ情報(属性記述子)は、対象の属性に割り当てられる属性インデックスを用いて、識別され読み取られる。最も好ましくは、属性記述子は、属性記述子アレイ(または複数のアレイ)に格納され、その中で、対象の属性に割り当てられた属性インデックスを用いてインデックスが付けられる。(ここで、属性記述子は特定の属性に関連する(特定の属性値には関連しない)ので、特定のシェーダプログラムについて、任意の特定の描画呼び出しで描かれる頂点およびインスタンスの数に関係なく、一定数の属性記述子が存在することに留意されたい。)
用いられることになるメタ情報(属性記述子)の属性インデックスは、好ましくは、対応するロード命令(または格納命令)において、グラフィックス処理段階に提供される。
したがって、定義された属性インデックスを用いてインデックスが付けられたメタ情報アレイが好ましくは存在する。そして、フラグメントシェーダのようなグラフィックス処理段階は、(例えば、かつ好ましくは、ロード命令または格納命令中の)受け取った属性インデックスを用いてメタ情報を探し、メタ情報がそのような情報を示す場合には、処理すべき属性値を提供された出力インデックスに適切な方式でそこから取り出すのに用いられることになる、実際のインデックスを導出する。
特に好ましい実施形態では、上で論じられたように、属性値を取り出すのに用いられる、インスタンスインデックス、頂点インデックス、または「折りたたまれていない」インデックスのような特定のインデックスが、関連するインデックスが付けられた属性値の開始(基本)アドレスを定める基本メモリ(バッファ)アドレスに関して用いられる。これは、例えば、属性値が関連するインスタンスを参照することでインデックスが付けられる全ての属性値が、メモリ内の単一の共通の基本バッファアドレスと関連してそのようにインデックスが付けられうるということを意味する。このことは、属性値が例えば、属性値に関する頂点、インスタンスまたは頂点/インスタンスの組合せに関連してインデックスを付けることができる時、メモリ内での属性値のローディングおよび格納、ならびに属性値の編成を単純化する。
特に好ましい実施形態では、適切なインデックスおよびバッファ基本アドレスに加えて、属性値を取り出すときに、および取り出すために、さらなる情報が用いられる。特に好ましい実施形態では、このさらなる情報は、メモリ内(バッファ内)の属性値のレイアウトに関するさらなるパラメータまたは情報を含む。メモリ内での属性値のレイアウトに関するこのさらなる情報は、好ましくは、メモリ内の属性値の間隔の表示(好ましくは「ストライド」値の形態)、対象の属性の基本メモリアドレスに対する相対的な位置の表示(好ましくは「オフセット」値の形態)、ならびに/または、属性のコンポーネントデータの種類およびコンポーネントの数を示す、属性値の「タイプ」インジケータのうちの1つまたは複数、好ましくは全てを含む(好ましい実施形態では、属性ロード命令および属性格納命令は、規定されたデータタイプに基づいてデータフォーマット変換を実行する)。
これらの構成では、それに応じて、グラフィックス処理段階は、属性値を取り出すための適切なバッファ基本アドレス(および必要な場合には他の情報)とともに、所望の属性値を取り出す(または格納する)のに用いられることになるインデックスを導出するのに用いる技術を示すもの、および導出に必要な任意のデータを、好ましくは備える。したがって、特に好ましい実施形態では、グラフィックス処理段階は、インデックスおよび基本メモリアドレスを、好ましくはストライド、オフセット、および/またはデータタイプのような他のデータとともに備え、それらのデータから、必要とする属性値を取り出すのに用いるメモリアドレスを導出する。
バッファ基本アドレスなどの情報は、ロード(または格納)命令により直接提供されまたは示されうる。しかし、特に好ましい実施形態では、バッファ基本アドレスは、好ましくは属性記述子の形態にあるメタ情報として提供され、メタ情報は、好ましくは上で論じられた方式で、対象の属性と関連付けられる。ストライド、オフセットおよびデータタイプ(用いられる場合)のような他の情報も、好ましくはこの形態で提供される。
したがって、特に好ましい実施形態では、(上で論じられたような)各属性記述子は、好ましくは、バッファ基本アドレス(メモリ基本アドレス)を、好ましくはその属性の値を取り出すまたは格納する際に用いられることになるストライド、オフセット、データタイプのような他の情報とともに、さらにまたは代わりに(好ましくは同様に)示す。したがって、特に好ましい実施形態では、1つの、好ましくは各々の属性記述子は、とりわけ、関連する属性の値がロードされ格納される時に用いられることになる、基本バッファアドレスおよびインデックス導出機構(および好ましくは、ストライド、オフセット、データタイプのような、他の情報)を示す。
したがって、特に好ましい実施形態では、所望の入力属性値を取り出しできるようにするための適切なインデックス、およびインデックスに関連する基本メモリアドレスとともに、好ましくは、ストライド、オフセット、データタイプのような他の情報を、どのように導出するかを示す、好ましくは属性記述子の形態にあるメタ情報が、1つの、好ましくはいくつかまたは各々の頂点シェーダ出力属性に対して生成され格納される。次いで、グラフィックス処理段階(例えばフラグメントシェーダ)は好ましくは、そのメタ情報を用いて、格納された頂点シェーダ入力属性値のメモリアドレスを導出する。
セカンダリ属性(頂点シェーダ出力属性)は、好ましくは同じ方法で構成される。すなわち、頂点シェーダ出力属性は、対応する関連するメタ情報を、好ましくは属性記述子の形態で有し、メタ情報は、上で論じられた頂点シェーダ入力属性と同じ方式で、インデックスを導出し基本メモリアドレス情報などを提供する。
特に好ましい実施形態では、(属性)ロード命令および(属性)格納命令の両方が、上で論じられた方式で動作する。
上で論じられた方式で、メタ情報、例えば属性記述子を用いて、所望の属性値を取り出す(または格納する)ためのインデックスを導出するのに用いられることになるインデックス導出処理を示すこと、および/または所望の属性値を取り出す(または格納する)際に用いられることになる基本メモリアドレスなどを示すことは、特に有利である。それは、そのようにすることは、例えば、上記のような情報がシェーダコードとは別であり独立であるということを意味するためである。このことはまた、例えば同じシェーダコードをメタ情報(属性記述子)の異なるセットとともに用いることを可能にし、メタ情報により制御されるパラメータ(例えばメモリ内の属性値の編成)が変化した時にシェーダコードを変化させる必要をなくす。また、頂点シェーダからの入力と出力の両方を制御するのに同じ機構を用いること、および頂点シェーダと、フラグメントシェーダのような次のグラフィックス処理段階が同じ機構を用いることも可能にする。
したがって、グラフィックス処理システムにおいて所望の属性値を取り出すために、頂点シェーダ属性に関連するメタ情報をそのように用いて、例えば、インデックスを導出するのに用いられることになるインデックス導出処理を示し、および/または用いられることになる基本メモリアドレスを示すことは、「通りぬけ」の属性が識別された場合に新規かつ有利であるだけではなく、それ自体が新規かつ有利でありうる。
したがって、本発明の第3の態様によれば、頂点シェーディング段階への入力属性の値を処理して、グラフィックス処理システムの次の段階が用いる頂点シェーディング段階の出力属性の値を生成する、頂点シェーディング段階を含む、グラフィックス処理システムを動作させる方法が提供され、その方法が、
対象の属性の値をロードおよび/または格納する時に用いられることになるメタ情報を、頂点シェーディング段階の1つまたは複数の属性と関連付けるステップと、
頂点シェーディング段階の属性の値をロードおよび/または格納しようとする時に、その属性と関連する任意のメタ情報をまず読み取り、次に、属性の値をロードまたは格納する時に、メタ情報を用いる、グラフィックス処理段階とを含む。
本発明の第4の態様によれば、
頂点シェーディング段階および頂点シェーディング段階の次の少なくとも1つの処理段階を含み、頂点シェーディング段階の出力を処理する、複数のグラフィックス処理段階を含む、グラフィックス処理システムが提供され、
頂点シェーディング段階が、頂点シェーディング段階への入力属性の値を処理し、グラフィックス処理システムの次の段階が用いる頂点シェーディング段階の出力属性の値を生成し、
グラフィックス処理システムが、対象の属性の値をロードおよび/または格納する時に用いられることになるメタ情報を、頂点シェーディング段階の1つまたは複数の属性と関連付けるように構成され、
グラフィックス処理段階のうちの1つまたは複数が、頂点シェーディング段階の属性の値をロードおよび/または格納しようとする時に、その属性と関連する任意のメタ情報をまず読み取り、次に、属性の値をロードまたは格納する時に、メタ情報を用いるように構成される。
当業者により理解されるように、本発明のこれらの態様は、必要に応じて、本明細書で説明される本発明の好適な特徴および任意選択の特徴のうちの任意の1つまたは複数または全てを含んでもよく、好ましくは含む。
したがって、例えば、メタ情報は好ましくは、上で論じられたような属性記述子の形態であり、頂点シェーダ属性の少なくとも一部および/または全ては、好ましくは対応する属性記述子を有する。同様に、メタ情報(属性記述子)は、グラフィックスプロセッサドライバにより好ましくは生成され、描画呼び出し時に好ましくは生成される。メタ情報は、属性の値をどのように、ならびに/またはどこに格納するか、および/もしくはどこからロードするかを示す情報を、好ましくは含む。
それに応じて、メタ情報は、属性値が格納される(または格納されることになる)メモリアドレスを決定することを可能にするための情報を、好ましくは含みまたは示す。したがって、メタ情報は好ましくは、属性の値をロードする(または格納する)時に用いられることになるインデックスを決定することを、好ましくは、属性の値をロードする(または格納する)時に用いられることになるインデックスを導出するのに用いられることになる処理を示すことによって、可能にする。最も好ましくは、メタ情報は、属性の値をロードする(または格納する)時に用いられることになる基本メモリアドレスを、さらにまたは代わりに示す。
上で論じられたように、特に好ましい実施形態では、メタ情報は、メモリ内での属性値のレイアウトについてのさらなる情報を示してもよく、好ましくは示す。さらなる情報は、例えば、メモリ内での属性値の間隔の表示(「ストライド」)、対象の属性の基本メモリアドレスに対する相対的な位置(「オフセット」)などを含んでもよく、好ましくは含む。
上で論じられたように、グラフィックス処理システムの少なくとも1つの次の段階は、頂点シェーディング段階の属性を処理しようとする時に、属性に関連するメタ情報を読み取り、メタ情報がそのような情報を示す場合、メタ情報にしたがって属性の値を、好ましくはメタ情報により示される任意の基本メモリアドレスに対して、取り出すのに用いられることになる、インデックスを導出するように構成される。
最も好ましくは、グラフィックスシステムのある段階は、処理されるべき属性を示す属性ロード命令を実行し、次いでその属性ロード命令に応じて、対象の属性に関連するメタ情報を読み取り、必要な属性値を取り出すのに用いられることになるインデックス、および/または必要な属性値を取り出す時に用いられることになる基本メモリアドレスを導出するかどうか、およびどのように導出するかを、そのメタ情報から決定する。
メタ情報は、好ましくは、少なくとも頂点シェーダ属性値がロードされることになる時に用いられる。メタ情報は、好ましくは、頂点シェーダ属性値をロードする時と格納する時の両方で用いられる(したがって、頂点シェーダ入力属性および頂点シェーダ出力属性の両方が、好ましくは自身に関連するメタ情報を有しうる)。
同様に、好ましくは少なくとも1つの次のグラフィックス処理段階、好ましくはフラグメントシェーダは、メタ情報を用いる。最も好ましくは、頂点シェーダもメタ情報を用いる。
本発明はまた、メタデータの生成にまで拡張する。
したがって、本発明の第5の態様によれば、頂点シェーディング段階への入力属性の値を処理してグラフィックス処理システムの次の段階が用いる頂点シェーディング段階の出力属性の値を生成する、頂点シェーディング段階を含む、グラフィックス処理システムを動作させる方法が提供され、その方法が、
対象の属性の値をロードおよび/または格納する時に用いられることになるメタ情報を、頂点シェーディング段階の1つまたは複数の属性と関連付けるステップを含む。
本発明の第6の態様によれば、
頂点シェーディング段階および頂点シェーディング段階の次の少なくとも1つの処理段階を含み頂点シェーディング段階の出力を処理する、複数のグラフィックス処理段階を含む、グラフィックス処理システムが提供され、
頂点シェーディング段階が、頂点シェーディング段階への入力属性の値を処理し、グラフィックス処理システムの次の段階が用いる頂点シェーディング段階の出力属性の値を生成し、
グラフィックス処理システムが、対象の属性の値をロードおよび/または格納する時に用いられることになるメタ情報を、頂点シェーディング段階の1つまたは複数の属性と関連付けるように構成される。
当業者により理解されるように、本発明のこれらの態様は、必要に応じて、本明細書で説明される本発明の好適な特徴および任意選択の特徴のうちの任意の1つまたは複数または全てを含んでもよく、好ましくは含む。したがって、メタ情報は好ましくは上で説明された形態であり、好ましくはグラフィックス処理システムのグラフィックスプロセッサのドライバにより、好ましくは描画呼び出し時に生成される。
当業者により理解されるように、フラグメントシェーダのような次のグラフィックス処理段階は、通常の処理のためにその属性値(頂点シェーダ入力属性値および/または頂点シェーダ出力属性値)を、通常の方式で(本発明で加えられた変化は除き)、用いることができ用いることになる。例えば、フラグメントシェーダの場合、フラグメントシェーダは、属性値を用いて1つまたは複数のプリミティブをレンダリングし、例えば表示のためのフレームを表すレンダリング出力値のセットを生成する。これらの出力値は、次いで、表示のためのフレームバッファなどに格納して用いるために、外部のメモリにエクスポートされうる。
したがって、本発明は好ましくは、頂点シェーダ出力属性値または対応する頂点シェーダ入力属性値を必要に応じて用いて、グラフィックス処理システムの所望の出力、例えば表示のためのフレームを表す出力値のセットを生成するために、属性値が関連する1つまたは複数のプリミティブをレンダリングすることを、さらに含む。当技術分野で知られているように、レンダリング処理は、例えば、属性値のブレンディング、フラグメントシェーディング、テクスチャリングなどを含みうる。
同様に、本発明は好ましくは、頂点シェーダ出力属性値または対応する頂点シェーダ入力属性値を必要に応じて用いて、グラフィックス処理システムからの出力のために出力データ値のセットを生成する、1つまたは複数の次のグラフィックス処理段階をさらに含む。
好ましい実施形態では、次のグラフィックス処理段階は、フラグメントシェーダを含む。この場合、本発明は好ましくは、頂点シェーダ出力属性値または対応する頂点シェーダ入力属性値を必要に応じて用いて、例えばおよび好ましくは、表示されるべきフレームのような、グラフィックス処理システムにより生成されることになる出力のサンプリング位置のための、フラグメントシェーディングされた出力データ値のセットを生成する、グラフィックス処理システムのフラグメントシェーダをさらに含む。
次いで、出力、例えばフラグメントシェーディングされたデータ値は、表示のためのフレームバッファなどに格納して用いるために、外部のメモリ、例えばメインメモリに好ましくはエクスポートされる。当技術分野で知られているように、出力は、例えばグラフィックス処理システムの性質および構成に応じて、メインメモリにエクスポートされる前に、一時的にグラフィックスプロセッサのローカルに、例えば1つまたは複数のタイルバッファに格納されうる。
本発明は、生成するのにグラフィックス処理パイプラインが用いられうる出力の全ての形態、例えば表示のためのフレーム、テクスチャへのレンダリングの出力などに用いられうる。
グラフィックス処理パイプラインで生成される(レンダリングされる)ことになる出力は通常、複数のプリミティブ(およびタイルベースのシステムでは複数のタイル)で作られているので、実際には、本発明は出力を構成する各プリミティブ(およびタイル)に対して繰り返され、したがって最終的には、レンダリングされたフラグメントデータの適切なセットが、必要とされる出力の各サンプリング点に対して生成されている、ということが理解されるだろう。
特に好ましい実施形態では、本発明の様々な機能は、例えば表示デバイスのフレームバッファに書き込まれるレンダリングされたフラグメントデータを生成して出力する、単一のグラフィックス処理プラットフォームにおいて実行される。
本発明は、適切に構成されたマイクロプロセッサベースのシステムのような、任意の適切なシステムで実施されうる。好ましい実施形態では、本発明は、コンピュータベースおよび/またはマイクロプロセッサベースのシステムで実施される。
本発明の様々な機能は、任意の所望される適切な方式で実行することができる。例えば、本発明の機能は、所望される通りに、ハードウェアまたはソフトウェアで実装されうる。したがって、例えば、本発明の様々な機能的な要素および「手段」は、様々な機能などを実行するように動作可能な、適切な1つまたは複数のプロセッサ、1つまたは複数のコントローラ、機能ユニット、回路、処理論理回路、マイクロプロセッサ配列など、例えば、適切な専用のハードウェア要素および/または所望の方式で動作するようにプログラムされうるプログラム可能なハードウェア要素を含んでもよい。
頂点シェーダ、フラグメントシェーダ、および任意の他のグラフィックス処理段階は、それに応じて所望されるように任意の適切な方式で実装することができ、任意の所望のかつ適切な頂点シェーディングまたはフラグメントシェーディングなどの機能をそれぞれ実行することができる。
同様に、様々な入力属性値、出力属性値、メタ情報、属性記述子などは、任意の適切で所望される方式で、定義され格納されうる。
当業者により理解されるように、本発明の様々な機能などは、所与のプロセッサにおいて重複していてもよく、および/または並列に実行されてもよいことにも留意されたい。したがって、例えば、上で論じられたように、頂点シェーディング段階は、並列に動作する複数の別々の頂点シェーダを含みうる。
本発明は、好ましくは「パイプライン化された」レンダリング構成を有するプロセッサのような、任意の適切な形態または構成のグラフィックスプロセッサおよびレンダラに適用可能である。本発明は特に、タイルベースのグラフィックスプロセッサおよびグラフィックス処理システムに適用可能である。
したがって、本発明は、本明細書で説明される本発明の態様の任意の1つまたは複数による装置、またはその方法にしたがって動作する装置を含む、グラフィックスプロセッサおよびグラフィックス処理プラットフォームにまで拡張する。上で論じられた具体的な機能を実行するのに必要な任意のハードウェアがある状態で、そのようなグラフィックスプロセッサは、グラフィックスプロセッサが含む通常の機能ユニットなどの任意の1つまたは複数または全てを他に含みうる。
本発明の全ての説明された態様および実施形態は、必要に応じて、本明細書で説明された好適な特徴および任意選択の特徴のうちの任意の1つまたは複数または全てを含んでもよいことも、当業者は理解するだろう。
本発明による方法は、ソフトウェア、例えばコンピュータプログラムを少なくとも部分的に用いて、実施されうる。したがって、さらなる態様から見ると、本発明は、データ処理手段にインストールされると本明細書で説明された手段を実行するように具体的になされたコンピュータソフトウェアと、データ処理手段上で実行されると本明細書で説明された方法を実行するコンピュータソフトウェアコード部分を含むコンピュータプログラム要素と、データ処理システム上で実行されると本明細書で説明された1つまたは複数の方法の全てのステップを実行するようになされたコード手段を含むコンピュータプログラムとを提供することが、理解されるだろう。データ処理システムは、マイクロプロセッサ、プログラム可能なFPGA(フィールドプログラマブルゲートアレイ)などであってよい。
本発明はまた、データ処理手段を含むグラフィックスプロセッサ、レンダラまたはマイクロプロセッサのシステムを動作させるのに用いられると、前記データ処理手段および前記プロセッサとともに、レンダラまたはシステムに本発明の方法のステップを実行させるような、ソフトウェアを含むコンピュータソフトウェア担体にまで拡張する。そのようなコンピュータソフトウェア担体は、ROMチップ、CD ROMまたはディスクのような物理的な記憶媒体であってもよく、または、配線を介した電気信号、光信号、または衛星などへの無線信号のような、信号でもあってよい。
本発明の方法のステップの全てが、コンピュータソフトウェアにより実行される必要はなく、したがって、さらに広い態様からは、本発明はコンピュータソフトウェアを提供し、そのようなソフトウェアは、本明細書で述べられる方法のステップの少なくとも1つを担持するためのコンピュータソフトウェア担体にインストールされるということが、さらに理解されるだろう。
したがって、本発明は、コンピュータシステムとともに用いるためのコンピュータプログラム製品として、適切に具現化されうる。そのような実装形態は、非一時的なコンピュータ可読媒体、例えばディスケット、CD ROM、ROM、またはハードディスクのような、有形媒体にいずれかが固定された、一連のコンピュータ可読命令を含みうる。実装形態は、光通信線またはアナログ通信線を含むが限定はされない有形媒体を通じて、またはマイクロ波、赤外線または他の伝送技術を含むが限定はされないワイヤレス技術を用いて無形に、モデムまたは他のインターフェースデバイスを介し、コンピュータシステムに送信可能な、一連のコンピュータ可読命令も含みうる。一連のコンピュータ可読命令は、本明細書で前に説明された機能の全てまたは一部を具現化する。
そのようなコンピュータ可読命令は、多くのコンピュータアーキテクチャまたはオペレーティングシステムとともに用いられる複数のプログラミング言語で書かれうることを、当業者は理解するだろう。さらに、そのような命令は、半導体技術、磁気技術、光学技術を含むが限定はされない、現在または未来の任意のメモリ技術を用いて格納することができ、また、光学技術、赤外線技術、マイクロ波技術を含むが限定はされない、現在または未来の任意の通信技術を用いて送信されうる。そのようなコンピュータプログラム製品は、添付の印刷された文書または電子文書とともに取り外し可能媒体として、例えば、システムROMまたは固定ディスク上にコンピュータシステムにより事前にロードされた、例えば市販ソフトウェアとして配布することができ、または、ネットワーク、例えばインターネットまたはワールドワイドウェブを介してサーバまたは電子掲示板から配布することができることが考えられる。
ここで、本発明のいくつかの好ましい実施形態が、添付の図面を参照して、単なる例として説明される。
本発明によるグラフィックス処理システムのある実施形態を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。 本発明のある実施形態の動作を概略的に示す図である。
図1は、本発明の方式で動作しうるタイルベースのグラフィックス処理システムを概略的に示す。この図は、本実施形態の動作に関連するグラフィックス処理システムの主要な要素を示す。当業者により理解されるように、図1に示されていないグラフィックス処理システムの他の要素が存在してもよい。
図1に示されるように、グラフィックス処理システムは、頂点シェーダ20、タイラ21、ラスタライザおよびフラグメントシェーダ22という、3つの主要な機能ユニット(処理段階)を含む。これらの処理段階は、インデックスバッファ23、描画呼び出し記述子24、プライマリ属性記述子アレイ25、頂点バッファ(プライマリ属性アレイ)26、セカンダリ属性記述子アレイ27、変数バッファ(セカンダリ属性アレイ28)、位置バッファ29、およびポリゴンリストアレイ30を含む、様々なデータアレイ、バッファに格納されるデータを、用い処理する。
(図1では、角が丸い箱はグラフィックス処理システムのハードウェアユニット(処理段階)を表し、長方形の箱はメモリバッファまたはデータ構造を表す。実線の矢印は、処理段階からメモリバッファおよびデータ構造へのデータフローを示し、点線の矢印は、メモリバッファとデータ構造との間のポインタである(すなわち、1つのデータ構造は異なるメモリアレイへの1つのエントリに対するポインタを含む)。ここで、図1は単なる概略図であり、例えば実際には、頂点シェーダおよびフラグメントシェーダのような示された機能ユニットは、図1で別の段階として概略的に示されていても、重要なハードウェア回路を共有しうることに留意されたい。)
描画呼び出し記述子は、1つの描画呼び出しを定義する。(当技術分野で知られているように、表示のための画像をレンダリングするためのグラフィックスプロセッサへの「命令」は、グラフィックス表示のためのホストシステム上で実行されるアプリケーションからのコマンドに応答して生成される描画呼び出し記述子の形態で、グラフィックスプロセッサに提供される。簡単にするために、図1は、単一の描画呼び出しのみに対する動作を示す。実際には、当技術分野で知られているように、各々が対応する描画呼び出し記述子を含む、実行される描画呼び出しが複数存在する。複数の描画呼び出しが実行されることになる場合、各描画呼び出しは1つの記述子を有し、描画呼び出し記述子は、描画呼び出し記述子のリンクされたリストとして格納される。各々の別の描画呼び出しは、本実施形態の方式で扱われ処理される。)
当技術分野で知られているように、原則的に、描画呼び出し記述子が、頂点シェーダ20およびタイラ21の動作の開始点である。グラフィックス処理ユニットは、コマンドを受信して適切な描画呼び出し記述子により規定されるような描画呼び出しを実行し、次いで頂点シェーダおよびタイラは、そのコマンドを実行するように動作する。
ラスタライザ/フラグメントシェーダ22の動作について、タイラ21は、各描画呼び出しに対し、描画呼び出し記述子へのポインタをポリゴンリスト30に書き込む。次いで、ラスタライザ/フラグメントシェーダ22は、ポリゴンリストアレイ30内のポインタを読み取ることで、どの描画呼び出し記述子が、ラスタライザ/フラグメントシェーダ22がラスタライズおよびシェーディングする各三角形と関連しているかを知る。
インデックスバッファ23は、各ポリゴン(プリミティブ)の各コーナ頂点の頂点インデックスを格納する。位置バッファ29は、変換された位置を、頂点シェーダ20からの出力(すなわち、グラフィックスを見る側から見て、ポリゴン(グラフィックスプリミティブ)を描くべき位置)として含む。
当技術分野で知られているように、頂点シェーダ20は、表示すべき画像に対して定義された頂点などに関連する入力データ値をとり、そのようなデータ値を処理して、グラフィックス処理システムの次の段階が用いる対応する「頂点シェーディングされた」出力データ値のセットを生成する。頂点シェーティングは例えば、画像のライティングの効果を考慮するように、入力データを修正する。
当技術分野で知られているように、タイラ21は、シーンの各タイルに対する適切なポリゴンリスト内に、表示されている画像のポリゴン(プリミティブ)をソートするように動作するので、ラスタライザ/フラグメントシェーダ22は、現在動作の対象になっているタイルのために、どのポリゴンを処理すべきかが分かる。タイラ21は、描画呼び出し記述子24、インデックスバッファ23からのインデックス、および位置バッファ29からの位置情報を読み、ポリゴンリストのセットをポリゴンリストアレイ30に格納し、ポリゴンリストのセットは、以下でさらに論じられるように、リスト中のポリゴンの頂点に関連する関係のあるデータを取り出すことができるようにするための、適切なインデックスを含む。
当技術分野で知られているように、ラスタライザ/フラグメントシェーダ22は、まず、表示すべき画像の中のポリゴンを、画像を表示するために次にシェーディングされるグラフィックスエンティティである個別のグラフィックスフラグメントにラスタライズし、次いで、ラスタライズされたフラグメントに対して様々なフラグメントシェーディング動作を実行し、最終的な表示されるべきバージョンのフラグメントを生成し、さらにこのフラグメントを、例えば出力のための適切なタイルバッファ、例えば表示のためのフレームバッファに格納する。
当技術分野で知られているように、頂点シェーダ20は、複数の入力変数を有し出力変数のセットを生成する、頂点シェーダプログラムを実行する。入力変数および出力変数は属性として知られており、処理されている画像の頂点などの、色、位置、テクスチャ座標などのような変数(属性)を表す。頂点シェーダ20の各出力属性は、フラグメントシェーダ22への入力属性(変数)であり、各シェーダプログラム(頂点シェーダおよびフラグメントシェーダとリンクされている)に対し、一定数の頂点シェーダ入力属性(変数)および一定数の頂点シェーダ出力/フラグメントシェーダ入力属性(変数)が存在する。
本実施形態では、頂点シェーダの入力属性は「プライマリ属性」と呼ばれ、それに応じて頂点シェーダの出力属性は「セカンダリ属性」と呼ばれることになり、または呼ばれる。(頂点シェーダ出力属性値は、(図1に示されるように)「変数(varyings)」とも呼ばれる。)
本実施形態では、各属性は、シェーダコンパイラにより頂点インデックスを割り当てられる。
頂点シェーダ20は、描画呼び出し記述子24に基づいて、入力であるプライマリ属性値を処理して、出力である頂点シェーティングされた所望のセカンダリ属性値を生成する。当技術分野で知られているように、各頂点シェーダ出力の(セカンダリ)属性は、1つまたは複数の頂点シェーダ入力の(プライマリ)属性に依存しうる。各頂点シェーダ出力の(セカンダリ)属性は、1つまたは複数の描画呼び出し毎の入力(所与の描画呼び出しに対し一定になる)にも依存しうる。
特定の描画呼び出しに対し、各々のプライマリ(頂点シェーダ入力)属性は、描画呼び出しの各頂点に対し1つの値を有し、または、インスタンス化された描画の場合、各頂点または各インスタンスのいずれかに対して1つの値を有する。セカンダリ属性(頂点シェーダ出力属性)は、各々の別の頂点/インスタンスの組合せに対し、1つの値を有する。
(当技術分野で知られているように、「インスタンス化されたモード」の動作の場合、所与の頂点が、その頂点の各々の必要な「インスタンス」について1回、複数回処理されてもよい。この場合、例えば、対象の頂点の特定のインスタンスに対して、頂点シェーダが、頂点属性を処理する時に、そのインスタンスに関連する入力属性値を用いることがありうる。)
したがって、値が特定の「インスタンス」について定義される、頂点シェーダへのいくつかの入力変数(プライマリ属性)とともに、値が「頂点毎」に定義されるプライマリ属性が存在しうる。
頂点シェーダの所与の出力属性(セカンダリ属性)は、値が各頂点に対して定義される(頂点毎に定義される)1つまたは複数の入力属性(プライマリ属性)にのみ依存してもよく、または、値が各インスタンスに対して定義される(インスタンス毎に定義される)1つまたは複数の入力属性(プライマリ属性)にのみ依存してもよく、または、値が各頂点に対して定義される1つまたは複数の頂点毎の入力属性(プライマリ属性)と、値が各インスタンスに対して定義される1つまたは複数のインスタンス毎の入力属性(プライマリ属性)との両方に依存してもよい。上で論じられたように、1つまたは複数の頂点シェーダ入力属性(プライマリ属性)への依存性に加えて、頂点シェーダ出力属性(セカンダリ属性)は、1つまたは複数の描画呼び出し毎の入力にも依存しうる。セカンダリ属性も、一定でありうる(一定値を有しうる)。
属性値は、属性アレイと呼ばれるメモリバッファに格納され、属性アレイは、本実施形態において、頂点インデックスとインスタンスインデックスのいずれかにより、または、出力である折りたたまれていないインデックスにより、インデックスを付けられる(このことは以下でさらに論じられる)。
したがって、図1で示されるように、入力の(プライマリ)属性値(対象の描画呼び出しの各頂点シェーダ入力属性に対する値)は、プライマリ属性アレイ(頂点バッファ)26に格納される。
当技術分野で知られているように、プライマリ属性値(頂点シェーダの入力属性に対する値)は、グラフィックス処理を必要とするアプリケーションにより生成され、かつそれに由来し、グラフィックス処理システムが用いるプライマリ属性アレイ(頂点バッファ)26内に適切に格納される。
プライマリ属性アレイにおけるプライマリ属性値(頂点シェーダ入力属性値)のレイアウトと、プライマリ属性値がどのように1つまたは複数のメモリバッファに分布しているかは、(グラフィックス処理を動作させている)アプリケーションにより決定され制御される。本実施形態では、プライマリ属性値は、頂点毎またはインスタンス毎に定義されているかどうかにしたがって、例えば以下のように、例えば2つのバッファにインターリーブすることができる。
プライマリ属性バッファ1:
-頂点0に対する属性0の値
-頂点0に対する属性1の値
-頂点1に対する属性0の値
-頂点1に対する属性1の値
など。
プライマリ属性バッファ2:
-インスタンス0に対する属性2の値
-インスタンス0に対する属性3の値
-インスタンス1に対する属性2の値
-インスタンス1に対する属性3の値
など。
このアレイの中の値を読み取るために、頂点毎に定義された値またはインスタンス毎に定義された値の開始位置を表すバッファ基本アドレスが用いられ(属性が頂点に対して定義されるかインスタンスに対して定義されるかどうかに応じて)、関連する頂点インデックスまたはインスタンスインデックスが、その基本アドレスから所望の属性値にインデックスを付けるのに用いられる。(この処理は以下でより詳細に論じられる。)
各属性に異なるメモリバッファを用いること(すなわち、各属性が他の属性とは別の固有のメモリバッファを有するように)などの、他の構成が所望ならば可能である。本発明は、全てのそのような構成をサポートする。
したがって、頂点シェーダ20の出力(頂点シェーディングされた出力の(セカンダリ)属性値)は、出力のセカンダリ属性アレイ28に格納される。
セカンダリ属性アレイ28内のセカンダリ属性値(頂点シェーダの出力の値)のレイアウトは、グラフィックスプロセッサのためのドライバにより決定され制御される。やはりこの実施形態でも、キャッシュ性能の向上を実現するために、属性値は、1つのメモリバッファ(セカンダリ属性アレイ28)にインターリーブされる。
以下でさらに論じられるように、本実施形態では、セカンダリ属性値は、自身が依存する頂点シェーダ入力の(プライマリ)属性の性質(および具体的には、セカンダリ属性値が頂点毎に決まる入力属性にのみ依存するか、インスタンス毎に決まる入力属性にのみ依存するか、または、頂点毎とインスタンス毎の両方に決まる頂点シェーダ入力属性に依存するか)にしたがって、セカンダリ属性アレイ28内でグループ化される。
したがって、頂点毎にのみ決まるプライマリ属性のみに依存する全てのセカンダリ属性値は、ある特定のバッファ基本アドレスで開始し、対応する入力属性値の頂点インデックスによりそのアドレスに関してインデックスが付けられた状態で、一緒にグループ化され、インスタンス毎にのみ決まるプライマリ属性のみに依存する全てのセカンダリ属性値は、ある特定のバッファ基本アドレスで開始し、対応する入力属性値のインスタンスインデックスによりそのアドレスに関してインデックスが付けられた状態で、一緒にグループ化され、頂点毎とインスタンス毎の両方に決まるプライマリ属性に依存する全てのセカンダリ属性値は、ある特定のバッファ基本アドレスで開始し、対応する入力属性値の頂点/インスタンスの組合せにより(以下でさらに論じられるように、「折りたたまれていない」インデックスにより)そのアドレスに関してインデックスが付けられた状態で、一緒にグループ化される。
また、このアレイ内の値を読み取るために、頂点毎にインデックスが付けられた値のセット、またはインスタンス毎にインデックスが付けられた値のセット、または頂点/インスタンスの組合せにインデックスが付けられた値のセットの開始位置を表す適切なバッファ基本アドレスが用いられ(属性が頂点に対して定義されるか、インスタンスに対して定義されるか、または頂点/インスタンスの組合せに対して定義されるかに応じて)、関連する頂点インデックス、インスタンスインデックス、または組み合わされた頂点/インスタンスインデックスが、その基本アドレスから所望の属性値にインデックスを付けるのに用いられる。(この処理は以下でより詳細に論じられる。)
本実施形態では、頂点シェーダ20の各属性(プライマリおよびセカンダリ属性)は、関連する「属性記述子」を有する。
各属性記述子は以下のフィールドを含む。
-属性の値を含んでいる、バッファのメモリアドレス。(全てのインターリーブされ共通にインデックスが付けられた属性値のバッファアドレスが、同じメモリバッファを指すように設定される。これが上で言及されたバッファ基本アドレスである。)
-バッファ内への第1の「インデックス」エントリの属性の値に対する、バッファへのオフセット。(すなわち、第1の頂点に対し、属性値が頂点毎にインターリーブされる場合(この場合、各属性に対するオフセットは、対象の頂点のその属性の値(データ)を見つけるべき各頂点のデータブロックへの、オフセットである)には頂点0であり、第1のインスタンスに対し、属性値がインスタンス毎にインターリーブされる場合、インスタンス0である、などである。)
-あるインデックスが付けられたエントリ(例えば頂点)の属性の値から次のインデックスが付けられたエントリ(例えば頂点)の属性の値へのメモリ内の距離である、ストライド。(インターリーブされた属性値のストライドは、したがって、所与のインデックスが付けられたエントリ(頂点またはインスタンスまたは頂点/インスタンスの組合せ)の全ての属性値のサイズの合計(すなわち各属性のデータのサイズの合計)に設定される。このことは、以下で説明される格納タイプフィールドから推測されうる。)
-属性値に対する格納タイプ(コンポーネントのデータタイプおよびコンポーネントの数を示す)。ロード命令および格納命令が、属性記述子で規定されるデータタイプに基づいて、データフォーマット変換を好ましくは実行する。
-属性アレイタイプ(線形、除数またはモジュロ)。以下でさらに説明される。
-除数属性アレイタイプ(除数属性)の場合、除数値。
-モジュロ属性アレイタイプ(モジュロ属性)の場合、モジュロ値
-除数属性またはモジュロ属性の場合、書き込み削減フラグ。
(除数属性およびモジュロ属性は以下でさらに論じられる。)
属性記述子は、対応する属性インデックスによりインデックスが付けられる、属性記述子アレイにグループ化される。頂点シェーダ入力の(プライマリ)属性の属性記述子は、プライマリ属性記述子アレイ25に格納され、頂点シェーダ出力の(セカンダリ)属性の属性記述子は、セカンダリ属性記述子アレイ27に格納される。属性記述子は、描画呼び出し時にグラフィックスプロセッサドライバにより生成される。
任意の所与のシェーダプログラムに関して、一定数の頂点シェーダ入力の(プライマリ)属性および出力の(セカンダリ)属性(変数)が存在し、それに応じて、任意の特定のシェーダプログラムに対して、所与の描画呼び出しに対して描かれる頂点およびインスタンスの数とは独立にかつ関係なく、一定数の属性記述子が存在する(したがって属性記述子アレイは一定のサイズを有する)。
本実施形態の動作において、グラフィックス処理を必要とするアプリケーションが開始されると、関連するシェーダプログラムが最初にコンパイルされる。
したがって、頂点シェーダコンパイラは、頂点シェーダ20のための適切なコマンドのセットを生成し、頂点シェーダ20に所望の方式でプライマリ属性値を処理させるように、実行される。この処理の一部として、頂点シェーダコンパイラは頂点シェーダ20のための適切な属性ロード命令および属性格納命令を生成し、頂点シェーダにそれぞれ、処理のための関連するプライマリ属性値を、プライマリ属性アレイ26からロードさせ、生成されたセカンダリ属性値をセカンダリ属性アレイ28内に格納させる。
同様に、フラグメントシェーダなどもコンパイルすることになるので、それにしたがって、属性(変数)ロード命令はとりわけ、フラグメントシェーダ22のために生成される。
本実施形態では、同様の形態の属性ロード命令および属性格納命令が、頂点シェーダ20とフラグメントシェーダ22の両方に用いられる。シェーダに提供されるそのような属性ロード命令および属性格納命令の各々は、関連する属性記述子がどの(プライマリまたはセカンダリ)属性記述子アレイから読み取られるべきかということと、関連する属性記述子を取り出すことを可能にするインデックスと、属性値自体のためのメモリアドレスを決定する際に用いられることになる1つまたは複数のインデックスとを、以下の複数の情報へのアクセスを有することによって、示す。
-プライマリ属性記述子アレイを用いるか、セカンダリ属性記述子アレイを用いるかを示す、アレイセレクタ。これは、命令に符号化される。
-属性インデックス(すなわち上で論じられるように、対象の属性のインデックス)。これは、命令に符号化されてもよく、または命令に符号化された値でもよく、さらにはレジスタ内の値であってもよい。
-折りたたまれていない1つまたは複数のインデックス。
属性ロード命令および属性格納命令に用いられる折りたたまれていないインデックスは、対象の属性値が関連するそれぞれの頂点およびインスタンスの頂点インデックスおよびインスタンスインデックス(もしあれば)から、以下のように導出される。
折りたたまれていないインデックス = (頂点インデックス) + (インスタンスインデックス) × (詰め込まれたインスタンスサイズ)
この式における詰め込まれたインスタンスサイズは、インスタンス毎の頂点の数よりも大きいかそれと等しい値であるが、以下でさらに論じられるように、詰め込まれたインスタンスサイズについてのモジュロ演算をハードウェアで実行するのを効率的にするような、ある値にも設定される。
頂点シェーダ20は上の式を用いて、自身が直接用いることになる折りたたまれていないインデックスを、対象の頂点シェーダスレッドの頂点インデックスおよびインスタンスインデックスから、導出する。(頂点シェーダ動作について、描画呼び出し記述子は、シェーディングおよびタイルすべき頂点およびインスタンスの数を含み、頂点シェーダスレッドは、各頂点/インスタンスの組合せに対して実行され、各スレッドは、その頂点インデックスおよびインスタンスインデックスを内部で知る。)
フラグメントシェーダの動作の場合、以下でさらに論じられるように、タイラ21が、上の式を用いて折りたたまれていないインデックスを計算し、そのインデックスを(対象の頂点の)ポリゴンリスト30に書き込む。そして、フラグメントシェーダは、ポリゴンリスト30から直接折りたたまれていないインデックスを読み取る。
この形態の折りたたまれていないインデックスを用いることで、以下の事実を簡単に考慮することができる、インデックスの形態が得られる。その事実とは、インスタンス化されたモードの動作は事実上、頂点毎の各属性に対して1つの値またはインスタンス毎の各属性に対して1つの値を含む入力属性値(プライマリ属性アレイ)を、頂点毎およびインスタンス毎に(すなわち異なる頂点とインスタンスの組合せの各々に対して)1つの属性値(セカンダリ属性値)を含まなければならない、出力である頂点シェーディングされた属性値アレイ(セカンダリ属性アレイ)に、「分解し」または「展開する」ということである。
さらに、この折りたたまれていないインデックス値を用いて、詰め込まれたインスタンスサイズに等しいモジュロ値によるモジュロ演算を実行することで、入力属性値の元の入力頂点インデックスを導出することができる。同様に、入力属性値の元の入力インスタンスインデックスは、詰め込まれたインスタンスサイズに等しい除数値を用いて除算を実行することによって、導出されうる。したがって、このことは、入力頂点インデックスまたはインスタンスインデックスを、属性ロード命令または属性格納命令に用いられる折りたたまれていないインデックスから比較的簡単に導出できるということを意味する。したがって、この構成は、フラグメントシェーダ22に提供される出力インデックス22もまた、フラグメントシェーダにより用いられ、(以下でさらに論じられるように)必要な場合には適切な入力頂点インデックスまたはインスタンスインデックスに戻ることができるという利点を有する。
折りたたまれていないインデックスからの、適切な入力頂点インデックスまたはインスタンスインデックスの導出が必要である時に、それを開始するために、(上で言及されたような)2つの特別な種類の属性記述子が用いられる。
i)属性アレイにインデックス付ける前に、折りたたまれたインデックスを、属性記述子で与えられる値により割る、除数属性。除数値dは、3つの数r、p、およびqにより表され、以下のように計算される。
r = floor(log2(d))
f0 = 2r+32 + floor(d/2)
fi = floor(f0/d)
ff = f0 - fi*d
p = fi - 231
q = (ff > floor(d/2)) ? 1 : 0
であり、インデックスuに対する除算は以下のように計算される。
i = (u + q) * (p + 231) / 2r+32
(この形態の除数値を用いることで、完全に汎用的な除算よりも簡単な除算回路を用いることが可能になる。)
ii)属性アレイにインデックス付ける前に、折りたたまれたインデックスのモジュロ演算を、属性記述子で与えられる値により実行する、モジュロ属性。モジュロ値(すなわち詰め込まれたインスタンスサイズ、Spi)は、以下の形態を有する。
Spi = (2p+1) * 2r ここでpは0、1、2、3または4
(この形態のモジュロ値を用いることで、完全に汎用的なモジュロ演算よりも簡単なモジュロ演算回路を用いることが可能になる。)
上で論じられたように、属性が除算属性であるか(この場合、属性アレイにインデックス付ける前に、折りたたまれたインデックスを、属性記述子で与えられる値により割らなければならない)、またはモジュロ属性であるか(この場合、属性アレイにインデックス付ける前に、提供される折りたたまれたインデックス値のモジュロ演算を、属性記述子で与えられる値により実行しなければならない)の表示が、対象の属性の関連する属性記述子に、関連する除数値またはモジュロ値(すなわち、この場合詰め込まれたインスタンスサイズ)とともに含まれる。
インスタンス化のためのAPI機構により、インスタンス毎の入力が、特定の属性のインスタンスインデックスに対するさらなる除数値を有することができるようになる場合、そのさらなる除数は、それらの属性の除数値に単に乗算されうる。その場合、属性記述子は、用いられることになる適切な除数値を示さなければならない。
そのような属性ロード命令または属性格納命令に応答して、シェーダはまず、命令により示される属性インデックスにより示されるインデックスにおいて、命令内のアレイセレクタで示される(プライマリまたはセカンダリ)アレイから属性記述子を読み取る。
そしてシェーダは、(ロード命令に対しては)用いることになる属性値を読み取るべきメモリの位置(アドレス)を、または、(格納命令に対しては)生成された属性値を格納すべきメモリの位置(アドレス)を決定する。このことは、命令により示される折りたたまれていないインデックスと、読み取られた属性記述子の中の、バッファアドレスと、属性アレイタイプと、オフセットおよびストライドと、(関連があれば)除数値またはモジュロ値とを用いて行われる。
そして、ロードすべき属性値(データ)のメモリアドレスは、以下のように導出される。
属性値のアドレス = (バッファアドレス) + オフセット + (ストライド×インデックス)
上の式のバッファアドレス、ストライドおよびオフセットは、上で論じられたように、関連する属性記述子で与えられる。
上で論じられたように、インデックスは、必要に応じて、折りたたまれていないインデックス、頂点インデックス、またはインスタンスインデックスであり、属性記述子で示される属性アレイタイプにしたがって決定される。線形属性については、用いるべきインデックスは折りたたまれていないインデックスであるが、除数属性については、上の除算は、折りたたまれていないインデックスからインスタンスインデックスを導出するために用いられ、モジュロ属性については、上のモジュロ演算は、折りたたまれていないインデックスから頂点インデックスを導出するために用いられる。
属性格納命令は同じように動作するが、シェーダは、決定されたアドレスにデータを格納するように動作する。
したがって、例えば、頂点シェーダ20が適切な属性ロード命令を実行して頂点シェーダ入力属性値を処理する場合、頂点シェーダは、属性ロード命令のアレイセレクタフィールドから読み取られることになる属性記述子アレイを識別する(この場合、アレイセレクタフィールドはプライマリ属性記述子アレイを示す)。次いで、頂点シェーダは、属性ロード命令中の属性インデックスを用いて、プライマリ属性記述子アレイ25から、対応するプライマリ属性記述子を読み取る。そして、頂点シェーダは、プライマリ属性記述子内の関連する情報を折りたたまれていないインデックスとともに用いて、処理されることになる適切な頂点シェーダ入力の(プライマリ)属性値を取り出す。
(上で論じられたように、プライマリ属性アレイ中の入力の(プライマリ)属性値は、頂点インデックスまたはインスタンスインデックスのいずれかを用いて、頂点シェーダ20によりアクセスされる。インスタンスインデックスは、インスタンス毎に定義される入力の(プライマリ)属性値を取り出すために用いられ、頂点インデックスは、頂点毎に定義される入力の(プライマリ)属性値を取り出すために用いられる。)
同様に、以下でより詳細に論じられる特定の場合を除き、頂点シェーダ20が入力の(プライマリ)属性値を処理すると、頂点シェーダは、対応する属性格納命令(およびセカンダリ属性記述子アレイ27の中の関連するセカンダリ属性記述子内の情報)により示されるセカンダリ属性アレイ28に、自身の出力、すなわち生成されたセカンダリ属性値を格納する。
本実施形態において、グラフィックス処理システムの基本的なコンパイル動作は、2つの特別な場合の頂点シェーディング動作を考慮するように調整される。
第1に、頂点シェーダコンパイラは、頂点シェーダコードをコンパイルする時に、出力属性が頂点シェーダ入力属性からの直接のコピーであるかどうかを、各頂点シェーダ出力属性(セカンダリ属性)に対して判定する(すなわち、頂点シェーダ出力属性の値が入力属性の値の直接のコピーになる「通りぬけ」の状況を識別する)ように構成される。このことは、例えば、頂点シェーダ入力属性(第1の属性)がテクスチャ座標である場合に起こりうる。
出力属性が頂点シェーダ入力属性からの直接のコピーであると判定された場合、頂点シェーダコンパイラは、コピー動作を行うためのコードを省略し、代わりに、特定の頂点シェーダ出力の(セカンダリ)属性が特定の頂点シェーダ入力の(プライマリ)属性の直接のコピーであるということと、どの頂点シェーダ入力の(プライマリ)属性のコピーであるかということとを、頂点シェーダコードと関連するメタ情報に記録する。
上で論じられたように、本実施形態において、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる状況を識別するための機構は、慎重な結果を与えるように、すなわち「誤りが起きても安全な側に起こす」ように構成され構築される。したがって、本実施形態における構成では、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなる状況を認識する際のあらゆる誤りが、システムが、実際には「通りぬけ」の状況ではない場合に「通りぬけ」の状況が存在すると判定するのではなく、実際には「通りぬけ」の状況である場合にそのように判定しないような誤りとなるべきである。
したがって上で論じられたように、「通りぬけ」の属性または状況が識別された(すなわち、頂点シェーダ出力属性値が頂点シェーダ入力属性値のコピーとなると判定された)場合に、本実施形態の動作に具体的に言及することは、システム、例えばコンパイラが、「通りぬけ」の状況を識別したという状況を指す。
第2に、頂点シェーダコンパイラは、頂点シェーダの各出力属性(各々のセカンダリ属性)がどの頂点シェーダ入力の(プライマリ)属性に依存するかも、メタ情報に記録する。
本実施形態では、頂点シェーダ出力属性が依存する頂点シェーダ入力属性を識別するための機構は、慎重な結果を与えるように、すなわち「誤りが起きても安全な側に起こす」ように構成され構築される。したがって、その構成では、頂点シェーダ出力属性が依存する頂点シェーダ入力属性を識別する際のあらゆる誤りが、システムが、出力属性が実際に入力属性に依存している場合にその依存性を見逃すのではなく、実際には頂点シェーダ出力属性が頂点シェーダ入力属性に依存していない場合に、何らかの頂点シェーダ入力属性に依存するものと結論付ける(判定する)(すなわち、実際の依存性の上位集合である入力属性の依存性の所定のセットを与える)ようなものでなければならない。
したがって、頂点シェーダ出力属性が頂点毎またはインスタンス毎に定義される頂点シェーダ入力属性にのみ依存するものとして識別された場合に、本実施形態の動作に具体的に言及することは、システムがそのような状況(そのような頂点シェーダ出力属性)を識別したという状況を指すことに、ここで留意されたい。同様に、所与の頂点シェーダ出力属性の、所与の頂点シェーダ入力属性への依存性の言及は、別段文脈から要求されない限り、本実施形態のシステム(例えばコンパイラ)により識別されたような依存性を指す。
第3に、シェーダリンカ動作は、特定の頂点シェーダ出力の(セカンダリ)属性が特定の頂点シェーダ入力の(プライマリ)属性である(すなわち「通りぬけ」属性が存在する)ことを示す、頂点シェーダコードに関連するメタ情報を見た時に、ラスタライザ/フラグメントシェーダ22にセカンダリ(頂点シェーダ出力)属性値を読み取らせる代わりに適切なプライマリ(頂点シェーダ入力)属性値を読み取らせるように、フラグメントシェーダのコードを修正するように、構成される。(当技術分野で知られているように、シェーダリンカは事実上、頂点シェーダの全ての出力をフラグメントシェーダの対応する入力と適合させるように動作する。この動作は、本実施形態では、頂点シェーダからのメタ情報が「通りぬけ」の属性が存在することを示す場合、代わりに、フラグメントシェーダ入力を頂点シェーダ入力(すなわち、「通りぬけ」メタ情報により規定される頂点シェーダ入力)に接続するように修正される。)
これを行うために、シェーダリンカは、「通りぬけ」属性が存在することを示す頂点シェーダコンパイラからのメタ情報を見ると、ラスタライザ/フラグメントシェーダ22のための適切なロード命令内にアレイセレクタフィールドを設定し、ラスタライザ/フラグメントシェーダ22が、セカンダリ属性記述子アレイ27(すなわち、頂点シェーダの出力属性記述子アレイ)からではなくプライマリ属性記述子アレイ25(すなわち、頂点シェーダの入力属性記述子)から読み取るべきであるということを示すように、フラグメントシェーダのコードを修正し、通りぬけ属性のコピー元のプライマリ(入力)属性を示すように、命令中の属性インデックスを変更する。
言い換えると、シェーダリンカは、属性ロード命令中にアレイセレクタフィールドおよび属性インデックスを適宜設定することによって、(すなわち、「通りぬけ」属性のコピー元のプライマリ属性記述子アレイおよびプライマリ(入力の)属性を示すために)、関連するプライマリ属性記述子をフラグメントシェーダに読み取らせるように、フラグメントシェーダ属性ロード(変数ロード)命令を修正する(これにより、プライマリ属性アレイ中の関連するプライマリ属性値を読み取るようにフラグメントシェーダが動作させられる)。
シェーダプログラムがコンパイルされる(必要ならばリンカによって修正される)と、グラフィックス処理を必要とするアプリケーションは、適切なインデックスをインデックスバッファ23にロードし、頂点属性値を頂点バッファ(プライマリ属性アレイ)26にロードする。これは、必ずしも各描画呼び出しの直前ではないが、対象のインデックスおよび属性値を用いて、任意の描画呼び出しよりも前に行われる。アプリケーションはまた、どのバッファから描くべきか、どのシェーダをどれだけ用いるかなどのような、描画呼び出しの全てのパラメータを、グラフィックスAPIを介して規定する。
次いで、グラフィックスプロセッサのドライバは、対象の描画呼び出しのための描画呼び出し記述子および関連する属性記述子(これは以下でより詳細に論じられる)を生成し、これらをグラフィックスプロセッサに渡す。
上で論じられたように、本実施形態では処理の一部として、グラフィックス処理のためのドライバが、対象の描画呼び出しの描画呼び出し記述子に基づいて、必要なプライマリおよびセカンダリ属性記述子を生成し格納する。このことは、入力の(プライマリ)属性の頂点毎またはインスタンス毎の依存性状態が各描画呼び出しのためのアプリケーションにより特定されるので、描画呼び出し時に行われる。
したがって、プライマリ属性について、ドライバは、描画呼び出しの各々のプライマリ属性に対し属性記述子を生成し、頂点シェーダおよび他のグラフィックス処理段階(シェーダなど)が、上で説明された機構を用いて関連するプライマリ属性値にアクセスできるようにする。
頂点毎に決まるプライマリ(入力の)属性(すなわち、値が頂点毎に定義されるプライマリ属性)は、ドライバによって(関連する属性記述子において)モジュロ属性として定義され、この時モジュロ値は詰め込まれたインスタンスサイズに等しく、インスタンス毎に決まるプライマリ(入力の)属性(すなわち、値がインスタンス毎に定義されるプライマリ属性)は除数属性として定義され、この時除数値は詰め込まれたインスタンスサイズに等しい。(所望ならば、インスタンス毎に決まるプライマリ属性は除数属性として定義されてもよく、この時除数値は、任意の定義されたインスタンス除数により乗算された詰め込まれたインスタンスサイズに等しい。この場合、インスタンス除数毎に1つのプライマリ属性値バッファが必要とされる(一方、詰め込まれたインスタンスサイズのみが用いられる場合、全てのインスタンス毎の入力に対して1つのバッファのみで十分である)。)
同様に、ドライバは、描画呼び出しに対して生成されることになる各々のセカンダリ属性について、セカンダリ属性記述子を生成し、頂点シェーダがセカンダリ属性値を格納できるようにして、他のシェーダなどが、上で説明された機構を用いて、セカンダリ属性値にアクセスできるようにする。
これを行うために、生成されることになるそれぞれの頂点シェーダ出力の(セカンダリ)属性の各々に対して、ドライバは、描画呼び出し時にその出力属性に影響する頂点シェーダ入力の(プライマリ)属性(頂点シェーダコンパイラにより記録されている)を調べ、出力の(セカンダリ)属性に対する全ての頂点シェーダ入力の(プライマリ)属性が、頂点毎に定義されるのか、インスタンス毎に定義されるのか、またはこれら2つの混合なのかを判定する。(言い換えると、ドライバは、描画呼び出し時に全ての頂点シェーダ出力属性を調べ、頂点シェーダ出力属性がどのような種類の頂点シェーダ入力の(プライマリ)属性に依存するかに基づいて、すなわち、頂点シェーダ出力属性が頂点毎に定義された入力属性にのみに依存するか、インスタンス毎に定義された入力属性にのみ依存するか、頂点毎とインスタンス毎の両方で定義された入力属性に依存するか、または頂点シェーダ入力属性に全く依存しない(すなわち定数である)かに基づいて、各々の出力の(セカンダリ)属性を分類する。)
次いで、ドライバはそれにしたがって、各々のセカンダリ属性(頂点シェーダ出力属性)について、適切なセカンダリ属性記述子をセカンダリ属性記述子アレイ27に書き込む(格納する)。
頂点シェーダ出力属性(セカンダリ属性)が、頂点毎とインスタンス毎の両方で定義された頂点シェーダ入力属性に依存する場合、ドライバは、セカンダリ属性記述子アレイ27にセカンダリ属性記述子を格納し、このセカンダリ属性記述子は、線形属性を示し、(すなわち、頂点シェーダ出力属性が依存する入力の頂点/インスタンスの組合せに基づいて)折りたたまれていない出力インデックスを用いてインデックスが付けられたセカンダリ属性アレイ28内の属性値(すなわちそのバッファアドレスを含む)をポイントする。
頂点シェーダ出力属性(セカンダリ属性)が、頂点毎にのみ決まる(定義される)頂点シェーダ入力の(プライマリ)属性に依存する場合、ドライバは、セカンダリ属性記述子アレイ27にセカンダリ属性記述子を格納し、このセカンダリ属性記述子は、詰め込まれたインスタンスサイズに等しいモジュロ値を有するモジュロ属性を示し、頂点毎にインデックスが付けられたセカンダリ属性アレイ28の一部(すなわちそのバッファアドレスを含む)をポイントする。
頂点シェーダ出力属性(セカンダリ属性)が、インスタンス毎にのみ決まる(定義される)頂点シェーダ入力の(プライマリ)属性に依存する場合、ドライバは、セカンダリ属性記述子アレイ27にセカンダリ属性記述子を格納し、このセカンダリ属性記述子は、詰め込まれたインスタンスサイズに等しい除数値を有する除数属性を示し、インスタンス毎にインデックスが付けられたセカンダリ属性アレイ28の一部(すなわちそのバッファアドレスを含む)をポイントする。(やはり、所望ならば、インスタンス毎にのみ定義される頂点シェーダ入力属性に依存するセカンダリ属性は、任意の定義されたインスタンス除数により乗算された詰め込まれたインスタンスサイズに等しい除数値を有する除数属性を用いることができる。この場合、インスタンス除数毎に1つの第2のバッファが必要とされる(一方、詰め込まれたインスタンスサイズのみが用いられる場合、全てのインスタンス毎の出力に対して1つのバッファのみで十分である)。)
したがって、頂点毎にのみ定義される頂点シェーダ入力属性にのみ依存する出力の(セカンダリ)属性はモジュロ属性として定義され、インスタンス毎にのみ定義される頂点シェーダ入力属性にのみ依存する出力の(セカンダリ)属性は除数属性として定義される。
当技術分野で知られているように、所与の頂点シェーダ出力属性は、1つまたは複数の頂点シェーダ入力属性に依存するとともに、1つまたは複数の描画呼び出し毎の入力にも依存してもよく、この入力は所与の描画呼び出しに対して一定であることにここで留意されたい。本発明は、頂点シェーダ出力属性が、頂点毎またはインスタンス毎に定義される頂点シェーダ入力属性に加えて、描画呼び出し毎の入力(描画呼び出しに対して定義される一定値)に依存する場合に、同様に用いることができる。したがって、本明細書で、頂点シェーダ出力属性が、頂点毎またはインスタンス毎に定義される入力属性にのみ依存すると言及することは、頂点シェーダ出力属性の依存する全ての頂点シェーダ入力属性が、頂点毎またはインスタンス毎にのみ定義される状況をそれぞれ指すことを意図しており、出力属性が、頂点毎またはインスタンス毎に定義される頂点シェーダ入力属性にのみ依存し他の何物にも依存しないことを要求することは意図されない(すなわち、頂点シェーダ出力属性が、描画呼び出し毎に定義される入力のような、頂点シェーダ入力属性ではない他の入力にも依存することを排除しない)。
ドライバはまた、モジュロおよび除数のセカンダリ属性記述子の中に、以下の動作により「書き込み削減」フラグも含める。
モジュロ属性は、モジュロ値により除算された折りたたまれていないインデックス(丸め済み)が0である場合のみ、書き込みを実行する。これは、
u < Spi
と等価であり(Spiは詰め込まれたインスタンスサイズ)、折りたたまれていないインデックスがモジュロ値よりも大きくまたはそれと等しい場合、モジュロ属性は出力値を格納しないことを意味する。
除数属性は、折りたたまれていないインデックスの除数値に対する剰余が0である場合にのみ、書き込みを実行する。これは、
rem = 除算における最後のシフトからのシフトされたビット
lz = count_leading_zeros(rem)
condition : lz > r OR (lz == r AND q == 1)
と等価であり、折りたたまれていないインデックスが除数により除算できない場合、除数属性は出力値を格納しないことを意味する。
動作において、頂点シェーダが属性格納命令を実行する時、上で論じられたように、頂点シェーダは、属性格納命令で示された対応するセカンダリ属性記述子を確認し、書き込み削減フラグが存在する場合は、上記のテストのうちの適切な1つを実行し(属性がモジュロ属性か除数属性かに応じて)、テストに通ると、適切な出力値を格納するが、テストに通らないと、格納動作を中止する。
この結果、頂点毎のみの頂点シェーダ入力属性に依存する出力属性値は、インスタンス0に対してのみ書き込まれ、インスタンス毎のみの頂点シェーダ入力属性に依存する出力属性値は、頂点0に対してのみ書き込まれる。
この効果として、頂点毎に定義される、またはインスタンス毎に定義される頂点シェーダ入力属性にのみ依存する、頂点シェーダ出力属性(セカンダリ属性)が識別される場合(すなわち、出力属性が依存する頂点シェーダ入力属性は、頂点毎にのみまたはインスタンス毎にのみ定義され、頂点シェーダ入力属性はまた、上で論じられたように、例えば描画呼び出し毎の入力に依存してもよい)(また上で論じられたように、「通りぬけ」の状況は存在しない)、頂点シェーダ20は、生成されることになる出力の(セカンダリ)属性値の各々の異なるバージョンの1つのみのコピーを格納するように動作する(すなわち、頂点シェーダは、出力の(セカンダリ)属性値が実際にどれだけのインスタンスまたは頂点にそれぞれ適用されるかに関係なく、必要に応じて、各々の異なる入力頂点または各々の異なる入力インスタンスについて、出力値の1つのコピーを格納する)。したがって、例えば、頂点毎のみの頂点シェーダ入力属性に依存する所与の頂点シェーダ出力値(セカンダリ属性値)を、複数のインスタンスに対して生成しなければならない場合でも、頂点シェーダ20は、頂点毎にその出力値(セカンダリ属性値)の1つのコピーのみを格納する。
したがって、そのような出力値の各々は、セカンダリ属性アレイ28に一度だけ書き込まれる。
頂点毎のみまたはインスタンス毎のみの頂点シェーダ入力属性に依存する出力属性値が、各頂点または各インスタンスに対してそれぞれ単一のコピーとして、セカンダリ属性アレイ28に格納されるという事実を考慮して、セカンダリ属性アレイ中のセカンダリ属性値は、上で論じられたように、依存関係(頂点毎、インスタンス毎、またはその両方)にしたがってグループ化される(そのような属性は(属性毎に)異なる数の属性値を有するため)。
したがって、頂点毎のみの頂点シェーダ入力属性に依存する出力の(セカンダリ)属性値は、関連する頂点の頂点インデックスにしたがって、一緒にグループ化され((関連するセカンダリ属性記述子に含まれる)基本バッファアドレスに対して)インデックスが付けられる。同様に、インスタンス毎のみの頂点シェーダ入力属性に依存する出力の(セカンダリ)属性値は、関連するインスタンスのインスタンスインデックスにしたがって、一緒にグループ化され(基本バッファアドレスに対して)インデックスが付けられる。インスタンス毎および頂点毎の頂点シェーダ入力属性に依存する任意の出力の(セカンダリ)属性値も、上で論じられた折りたたまれていないインデックスにしたがって、一緒にグループ化され(基本バッファアドレスに対して)インデックスが付けられる。
それにしたがって、セカンダリ属性記述子は、上で論じられた方式で(すなわち、各々のセカンダリ属性を、対応するバッファ基本アドレスを有する、線形属性、モジュロ属性または除数属性として定義するように)、グラフィックプロセッサドライバにより構成され、頂点シェーダが、自身が生成するセカンダリ属性値を適切な場所に格納し、フラグメントシェーダのような次のグラフィックス処理段階が、セカンダリ属性を処理しようとする時に、適切なセカンダリ属性値をロードすることを、確実にする。
ドライバが適切な属性記述子を生成すると、次いで描画呼び出しを処理することができる。したがって、頂点シェーダは、上で論じられた手順に続き、頂点/インスタンスの各組合せに対するスレッドを起動し、適切な属性ロード命令を実行して処理のためのプライマリ属性値をロードし、属性格納命令にしたがって、生成されたセカンダリ属性を格納する。
したがって、上で論じられたように、例えば、頂点シェーダ20が適切な属性ロード命令を実行して頂点シェーダ入力属性値を処理すると、頂点シェーダは、属性ロード命令中のアレイセレクタフィールドから読み取るべき属性記述子アレイを識別する(この場合、属性ロード命令はプライマリ属性記述子アレイを示す)。次いで、頂点シェーダは、属性ロード命令中の属性インデックスを用いて、対応するプライマリ属性記述子を、プライマリ属性記述子アレイ25から読み取る。そして、頂点シェーダは、プライマリ属性記述子中の関連する情報を折りたたまれていないインデックスとともに用いて、処理されるべき適切な頂点シェーダ入力の(プライマリ)属性値を取り出す。
同様に、頂点シェーダ20が入力の(プライマリ)属性値を処理すると、頂点シェーダはその出力、すなわち生成されたセカンダリ属性値を、対応する属性格納命令(およびセカンダリ属性記述子アレイ27中の関連するセカンダリ属性記述子中の情報)で示される通りにセカンダリ属性アレイ28に格納する。
頂点シェーダ20が全ての頂点を適切に頂点シェーディングすると、次いで、タイラ21が必要なポリゴンリストを生成し、ラスタライザ/フラグメントシェーダ22が用いる準備のできているポリゴンリストアレイ30にポリゴンリストを格納する。
この処理の一部として、タイラ21は、各コーナ頂点に対して折りたたまれていないインデックスをポリゴンリスト30内に含める。
上で論じられたように、ラスタライザ/フラグメントシェーダ22に提供するためのポリゴンリスト30に含まれるこの折りたたまれていないインデックスは、頂点シェーダ20への対応する頂点シェーダ入力の(プライマリ)属性値のためのプライマリ属性アレイ26内にインデックスを付けるのに用いられる、頂点インデックスおよびインスタンスインデックス(もしあれば)から(すなわち、プライマリ属性値が頂点シェーディングされた頂点のセカンダリ属性値を生成するのに用いられた、頂点およびインスタンスの頂点インデックスおよびインスタンスインデックスから)、タイラ21により導出(計算)される。
インスタンス化されていないモードで実行することは、単にインスタンス「0」を描くこと(およびインスタンス毎の属性を全く有さないこと)と本質的に等価なので、グラフィックス処理システムがインスタンス化されたモードで動作していない場合でも、タイラ21は、上記のようにポリゴンリスト30に含まれる折りたたまれていないインデックスを生成するように動作し、したがって同じ出力インデックス生成機構を用いることができる(この場合、入力頂点インデックスに等しい折りたたまれていないインデックスを生成する)。
タイラ21がポリゴンリスト30を準備すると、ラスタライザ/フラグメントシェーダ22は、適切にシェーディングされたフラグメントを生成して画像を表示できるようにするために、ポリゴンリストに対する操作を進める。
これを行うために、通常の動作では、ラスタライザ/フラグメントシェーダ22は、受け取った属性(変数)ロード命令にしたがって、適切な頂点シェーディングされた出力の(セカンダリ)属性値を、セカンダリ属性値アレイ28からロードする。
したがって、上で論じられたように、フラグメントシェーダ22が適切な属性ロード命令を実行して適切な属性値を処理すると、フラグメントシェーダ22は、属性ロード命令中の属性アレイ指示を用いて、プライマリ属性記述子アレイから読み取るか、またはセカンダリ属性記述子アレイから読み取るかを決定する。そして、フラグメントシェーダは、ロード命令中の属性インデックスを用いて、関連する属性記述子アレイ中の属性記述子を識別する。
セカンダリ属性の場合、フラグメントシェーダ22はそれに応じて、提供された属性インデックスを用いて、適切なセカンダリ属性記述子をセカンダリ属性記述子アレイ27から取り出し、次いでセカンダリ属性記述子からの情報をポリゴンリスト中の関連する折りたたまれていないインデックスとともに用いて、適切な属性値(頂点シェーディングされた属性値)をセカンダリ属性アレイ28から取り出す。
(当業者により理解されるように、フラグメントシェーダ22は、3つの頂点により定義されるポリゴン(ポリゴンは三角形である)内での具体的な位置を表すフラグメントを処理するので、フラグメントシェーダ22は、実際には、受け取った各々の属性ロード命令に対して、関連する属性記述子を1回読み取るが、残りのステップ(属性アレイ内にインデックスを付けるために用いるインデックスを導出し、属性値のアドレスを計算し、メモリから属性値をロードするステップ)は3回、すなわち現在のポリゴンの各頂点に対して1回実行し、3つのロードされた属性値(すなわち3つの頂点に対して格納された属性値)の間の補間を実行して、フラグメントシェーディング動作で用いられることになる実際の属性値を導出する。)
「線形の」セカンダリ属性が存在する場合、ラスタライザ/フラグメントシェーダ22はそれに応じて、対象のセカンダリ属性が線形の属性であるということをセカンダリ属性記述子から判定し、ポリゴンリスト30からの関連する折りたたまれていないインデックス、ならびに属性記述子中のバッファアドレス、オフセットおよびストライドを用いて、適切なセカンダリ属性値をセカンダリ属性アレイ28から識別して取り出す。
頂点毎またはインスタンス毎のみの定義された頂点シェーダ入力属性に依存するセカンダリ属性が存在する場合、ラスタライザ/フラグメントシェーダ22はそれに応じて、対象のセカンダリ属性が除数属性であるかモジュロ属性であるかをセカンダリ属性記述子から判定し、セカンダリ属性記述子により示される関連する除算またはモジュロ演算を、ポリゴンリスト30からの折りたたまれていないインデックス、ならびに属性記述子中のバッファアドレス、オフセットおよびストライドとともに用いて、適切なセカンダリ属性値をセカンダリ属性アレイ28から識別して取り出す。
このようにして、ラスタライザ/フラグメントシェーダ22が、頂点毎またはインスタンス毎のみの頂点シェーダ入力属性に依存する適切な出力の(セカンダリ)属性値のコピーを用いる必要がある度に、ラスタライザ/フラグメントシェーダ22は、その出力の(セカンダリ)属性値の単一のコピーをセカンダリ属性アレイ28から取り出すように指示され、またそのようにすることができる。
ロード命令が、プライマリ属性(頂点シェーダ入力属性)値がロードされるべきであることを示す(すなわち「通りぬけ」の状況が存在する)場合、フラグメントシェーダ22は属性インデックスを用いて、プライマリ属性記述子アレイ25内の対応する属性記述子を検索する。次いで、フラグメントシェーダは、属性が除数属性であるかモジュロ属性であるかということと、用いるべき適切な除数値またはモジュロ値を、その属性記述子から決定する。そして、フラグメントシェーダは、除数値またはモジュロ値を、(ポリゴンリスト30から)提供された折りたたまれていないインデックスとともに用いて、属性記述子中のバッファアドレス、オフセットおよびストライドとともに用いるべき頂点インデックスまたはインスタンスインデックスを計算し、関連する属性値をプライマリ属性(頂点シェーダ入力属性値)アレイ26から取り出す。
当技術分野で知られているように、フラグメントシェーダ22は次いで、ロードした属性値を適切に処理し、対象の各フラグメントのための適切なフラグメントシェーディングされたデータ値を生成し、適切な場合には、例えば次に表示のためのフレームバッファへエクスポートするために、例えばタイルバッファ内にそのデータ値を格納する。
上記のことから分かるように、本実施形態の属性記述子の機構は、シェーダコードと独立した属性値について、インデックス計算を表すこととメモリレイアウトを表すことの両方に用いられ、同じ機構が頂点シェーダからの入力および出力を制御するために用いられ、頂点シェーダおよびフラグメントシェーダの両方が、(描画時に何ら関わることなく通りぬけの属性が動作することを可能にする)同じ記述子へのアクセスを有する。
さらに、本実施形態の方式のシェーダコードとは別の属性記述子を用いることで、同じシェーダコードを、属性記述子の異なるセットと用いることができるようにし、属性記述子により制御されるパラメータが変化する時にシェーダコードを変化させる必要のない手段を可能にする。
図2から7は、本実施形態の動作を例示する。
これらの図面において、長方形の箱はメモリ内のデータのアレイを示す。複数の箱が点線でつながれている場合、それらは同じアレイの一部である。複数の箱の間に空間がある場合、それらは異なるアレイである。
角が丸い箱は、シェーダコードの実行を示す。頂点シェーディングについては、箱1つ当たり1つの実行が存在する。図の右側にあるシェーダ(これは通常フラグメントシェーダであるが、他の種類でもよい)については、頂点を2つ以上のポリゴンにより読み取ることができ、1つのポリゴンが多くのフラグメントを含みうるので、各箱に対して多くの実行が存在する。矢印は、シェーダによるデータの読み取りまたは書き込みを示す。
図2は、インスタンス化されていない動作のための実施形態の動作を示す。図2Aは、「通りぬけ」の場合が識別されない状況を示し、図2Bは、「通りぬけ」の入力属性が識別された動作を示す。
図2Aで示されるように、頂点シェーダ20は、各頂点の入力属性値をプライマリ属性アレイ26から読み取り、それらの属性値を処理して、出力である頂点シェーディングされた属性値としてセカンダリ属性アレイ28に格納し、各頂点の入力属性値は、セカンダリ属性アレイ28からフラグメントシェーダ22により読み取られ処理される。
図2Bは、出力属性が「通りぬけ」の属性として識別された状況を示す。この場合、図2Bに示されるように、頂点シェーダ20はその「通りぬけ」の出力属性を処理しない。代わりに、フラグメントシェーダ22は、矢印35で示されるように、関連する属性値をプライマリ属性アレイ26から直接読み取る。(ここで、通りぬけの出力の(セカンダリ)属性のコピー元である入力の(プライマリ)属性は、他の出力の(セカンダリ)属性のために、すなわち、そのプライマリ属性も1つまたは複数の他の(通り抜けではない)セカンダリ属性の計算で必要とされる場合に、頂点シェーダによって読み取られ処理されうる。)
図3から7は、インスタンス化されたモードで動作する時の本実施形態の動作を例示する。
まず、図3は、「通りぬけ」または「頂点毎」または「インスタンス毎」の入力のみの場合が識別されない、インスタンス化されたモードの動作を例示する。(したがって、これは事実上、「通常の」インスタンス化されたモードの動作を示す。)
この場合、図3に示されるように、入力の(プライマリ)属性アレイ26は2つのバッファとして編成され、1つは、値がインスタンス毎に定義された属性に対するバッファ40であり、もう1つは、値が頂点毎に定義された属性に対するバッファ41である。頂点シェーダ20は、これらの属性値バッファの両方から読み取り、事実上、両方の値を組み合わせて、各々の属性のためのセカンダリ(出力の)属性アレイ28内の各々の異なる頂点およびインスタンスの組合せに対する出力値を提供する。次いで、フラグメントシェーダ22は、必要に応じて、関連する頂点およびインスタンスの組合せの属性値を、セカンダリ属性アレイ28から読み取る。
図4は、インスタンス毎の入力属性からの「通りぬけ」が存在する状況を示す。この場合、図4の矢印50により示されるように、識別された「通りぬけ」のインスタンス毎の属性は、頂点シェーダ20によっては処理されず、代わりに、フラグメントシェーダ22が、インスタンス毎の属性値を、必要になると、入力のインスタンス毎の属性バッファ40から(上で説明された除数属性の機構を用いて)直接読み取る。
図5は、頂点毎の属性からの「通りぬけ」が存在する、対応する場合を示す。この場合、図5の矢印60により示されるように、識別された「通りぬけ」の頂点毎の属性は、頂点シェーダ20によっては処理されず、代わりに、フラグメントシェーダ22が、頂点毎の属性値を、必要になると、入力の頂点毎の属性バッファ41から(上で説明されたモジュロ属性の機構を用いて)直接読み取る。
図6は、インスタンス毎に定義された頂点シェーダ入力属性にのみ依存する頂点シェーダ出力の(セカンダリ)属性が存在する状況を示す。この場合、図6に示されるように、頂点シェーダ20は、頂点0に対しては、矢印70で示されるように、関連する出力属性値のコピーを、セカンダリ属性アレイ28の適切なバッファ71に書き込み、インスタンス毎の入力にのみ依存する属性も処理されることになる他の頂点に対しては、頂点シェーダ20は、(図6の点線72で示されるように)対応する出力値をセカンダリ属性バッファ71に格納しない。こうして、セカンダリ属性値の1つだけのコピーが、セカンダリ属性アレイ28に格納される。
そして、フラグメントシェーダ22がそのインスタンス毎の入力にのみ依存する出力属性を必要とする場合は常に、フラグメントシェーダは、矢印73により示されるように(上で説明された除数属性の機構を用いて)、適切なセカンダリ属性記述子を用いることによって、セカンダリ属性アレイ28のバッファ71内の関連する出力の(セカンダリ)属性値の適切な単一のコピーを読み取るように指示される。
図7は、頂点毎に定義される頂点シェーダ入力属性にのみ依存する頂点シェーダ出力の(セカンダリ)属性が存在する、対応する状況を示す。この場合、図7に示されるように、頂点シェーダ20は、インスタンス0に対しては、矢印80で示されるように、関連する出力属性値のコピーを、セカンダリ属性アレイ28の適切なバッファ71に書き込み、頂点毎の入力にのみ依存する属性も処理されることになる他のインスタンスに対しては、頂点シェーダ20は、(図7の点線82で示されるように)対応する出力値をセカンダリ属性バッファ71に格納しない。こうして、セカンダリ属性値の1つだけのコピーが、セカンダリ属性アレイ28に格納される。
そして、フラグメントシェーダ22がその頂点毎の入力にのみ依存する出力属性を必要とする場合は常に、フラグメントシェーダは、矢印83により示されるように(上で説明されたモジュロ属性の機構を用いて)、適切なセカンダリ属性記述子を用いることによって、セカンダリ属性アレイ28のバッファ71内の関連する出力の(セカンダリ)属性値の適切な単一のコピーを読み取るように指示される。
上の図2から7は、本実施形態の基本的な動作のモードを示す。一般に、頂点シェーダ出力の(セカンダリ)属性は、上で示された異なる5つの場合(通常、頂点毎の通りぬけ、インスタンス毎の通りぬけ、頂点毎の書き込み削減、またはインスタンス毎の書き込み削減)の任意の組合せであってよい。
出力の(セカンダリ)属性が一定である、第6の場合も存在する。この場合、一定であるセカンダリ属性の必要とされるコピーの各々が、別のセカンダリ属性値として格納されうる。代替として、1つの値だけのためのスペースを有するバッファ、およびモジュロ値が1である(書き込み削減を有する)モジュロ属性タイプを用いて、一定であるセカンダリ属性値の1つのみのコピーを格納できる(および格納させる)ようにすることができる(この場合、頂点0/インスタンス0のスレッドのみが一定値を格納する)。
本実施形態では、プライマリならびにセカンダリ属性および属性記述子アレイなどが、別々のアレイであるものとして示されてきたが、そのような構成は必須ではなく、適切な属性記述子および属性値が使用の際に識別され取り出されることが可能であれば、そうしたデータ要素をメモリに格納するための実際の構成は、所望の通りであってよいことを、当業者は理解するだろう。例えば、入力および出力の(プライマリおよびセカンダリ)属性記述子の両方を格納する、単一の属性記述子アレイが存在してもよい。同様に、所望ならば、様々な属性記述子および属性値およびアレイは全て、同じメモリに格納されても異なるメモリに格納されてもよく、少なくとも一部などがキャッシュされてもよい。
上記から、本発明は、少なくとも好ましい実施形態において、グラフィックス処理システムにおける頂点シェーダコアのメモリトラフィックおよびメモリ使用量(および、したがって消費電力)を低減する機構を提供することが理解されうる。
このことは少なくとも、本発明の好ましい実施形態において、頂点シェーダ出力がいつ頂点シェーダ入力から直接コピーされるかを検出し、その状況では、コピーの出力値を生成してメモリに格納するのではなく、代わりに、フラグメントシェーダのようなグラフィックスパイプラインのさらなる段階が、頂点シェーダ入力値に直接アクセスできるようにすることで、実現される。
好ましい実施形態では、自身が依存する頂点シェーダ入力属性が、頂点毎にのみまたはインスタンス毎にのみ定義される、頂点シェーダ出力(すなわち、頂点毎にのみ定義される頂点シェーダ入力属性またはインスタンス毎にのみ定義される頂点シェーダ入力属性に依存する頂点シェーダ出力)も識別され、そのような出力が識別される場合、そうした出力の各値の1つのコピーのみが格納され、フラグメントシェーダのような次のグラフィックス処理段階が、出力値が必要とされる各々の異なる時点で、出力値の単一のコピーを再利用するように、システムが構成される。
20 頂点シェーダ
21 タイラ
22 ラスタライザおよびフラグメントシェーダ
23 インデックスバッファ
24 描画呼び出し記述子
25 プライマリ属性記述子アレイ
26 頂点バッファ
27 セカンダリ属性記述子アレイ
28 変数バッファ
29 位置バッファ
30 ポリゴンリストアレイ

Claims (15)

  1. 頂点シェーディングステージを含むグラフィックス処理を処理する、グラフィックス処理システムを動作させる方法であって、前記頂点シェーディングステージは、プライマリ属性アレイから頂点シェーダ入力属性値を読み出し、前記プライマリ属性アレイから読み出された前記頂点シェーダ入力属性値を処理して、前記頂点シェーディングステージに続くグラフィックス処理のステージが使用する頂点シェーダ出力属性値を生成し、前記方法は、
    頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値が生成される前記頂点シェーダ入力属性値と、いつ同じになるかを認識するステップと、
    前記頂点シェーダ入力属性値から前記頂点シェーダにより生成される前記頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値が生成される前記頂点シェーダ入力属性値と同じになると認識される場合に、
    前記頂点シェーダ出力属性値を、前記頂点シェーダ入力属性値から生成しないように、前記頂点シェーダを制御するステップと、
    前記頂点シェーダによって生成されていたであろう前記頂点シェーダ出力属性値を用いる必要がある前記頂点シェーディングステージに続くグラフィックス処理システムのグラフィックス処理ステージに、
    プライマリ属性アレイから対応する頂点シェーダ入力属性値を読み出し、
    代わりに前記プライマリ属性アレイから読み出された対応する頂点シェーダ入力属性値を処理する、
    ことをさせるステップと、
    を含むことを特徴とする方法。
  2. 頂点シェーダコンパイラは、頂点シェーダ入力属性値から前記頂点シェーダにより生成される頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値がそこから生成される前記頂点シェーダ入力属性値と同じになると認識される場合に、本来前記頂点シェーダに前記頂点シェーダ入力属性値を処理させて前記頂点シェーダ出力属性値を生成させていたであろうコードを、省略するように構成されることを特徴とする請求項1に記載の方法。
  3. 頂点シェーダ入力属性値から前記頂点シェーダにより生成される頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値がそこから生成される前記頂点シェーダ入力属性値と同じになると認識される場合に、前記続くグラフィックス処理ステージに、前記頂点シェーダ出力属性値ではなく、前記頂点シェーダ入力属性値から、処理される値をロードさせるように構成される、前記続くグラフィックス処理ステージのためのロード命令を用いることで、前記続くグラフィックス処理ステージに、前記頂点シェーダ入力属性値を使用させるステップを含むことを特徴とする請求項1から請求項2のいずれか一項に記載の方法。
  4. 適切な属性値を取り出すためにインデックス付け機構が用いられ、
    続くグラフィックス処理ステージが頂点シェーダ入力属性値を処理する時に、自身に提供されている出力インデックス値から、前記頂点シェーダ入力属性値を取り出すのに用いられるインデックスを導出する、前記続くグラフィックス処理ステージをさらに含むことを特徴とする請求項1から請求項3のいずれか一項に記載の方法。
  5. 前記続くグラフィックス処理ステージが、前記頂点シェーダ入力属性値を取り出すのに用いられるインデックスを導出するのに用いるべき、インデックス導出動作を決定することを特徴とする請求項1から請求項4のいずれか一項に記載の方法。
  6. 実行される前記インデックス導出動作が、対象の属性に関連するメタ情報により示されることを特徴とする請求項5に記載の方法。
  7. 対象の属性の値をロードおよび/または格納する時に用いられるメタ情報を、前記頂点シェーディングステージの1つまたは複数の属性と関連付けるステップと、
    頂点シェーディングステージの属性の値をロードおよび/または格納する時に、前記属性と関連する任意のメタ情報をまず読み取り、次に、前記属性の値をロードまたは格納する時に、前記メタ情報を用いる、グラフィックス処理ステージと、
    を含むことを特徴とする請求項1から請求項6のいずれか一項に記載の方法。
  8. グラフィックスを処理するためのシステムであって、
    頂点シェーディングステージと、前記頂点シェーディングステージの続く少なくとも1つの処理ステージと、を含む、複数のグラフィックス処理を処理するグラフィックスプロセッサと、
    プロセッサと、
    を備え、
    前記頂点シェーディングステージは、プライマリ属性アレイから頂点シェーダ入力属性値を読み出し、前記プライマリ属性アレイから読み出された前記頂点シェーダ入力属性値を処理して、前記グラフィックスプロセッサにより処理される少なくとも1つの続く処理ステージが用いる頂点シェーダ出力属性値を生成し、
    前記プロセッサは、
    頂点シェーダ入力属性値から頂点シェーダにより生成される頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値が生成される前記頂点シェーダ入力属性値と、いつ同じになるかを認識し、
    前記頂点シェーダ入力属性値から前記頂点シェーダにより生成される前記頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値が生成される前記頂点シェーダ入力属性値と同じになると認識される時、前記頂点シェーダに、前記頂点シェーダ出力属性値を、前記頂点シェーダ入力属性値から生成させないようにし、
    前記頂点シェーダ入力属性値から前記頂点シェーダにより生成される前記頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値がそこから生成される前記頂点シェーダ入力属性値と同じになると認識された場合、前記頂点シェーディングステージの出力を処理する少なくとも1つの続くグラフィックス処理ステージに、
    プライマリ属性アレイから対応する頂点シェーダ入力属性値を読み出させ、
    本来前記頂点シェーダによって生成されていたであろう前記頂点シェーダ出力属性値の代わりに、前記プライマリ属性アレイから読み出された対応する頂点シェーダ入力属性値を処理させるように構成されていることを特徴とするシステム。
  9. 頂点シェーダコンパイラは、頂点シェーダ入力属性値から前記頂点シェーダにより生成される頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値がそこから生成される前記頂点シェーダ入力属性値と同じになると認識される場合に、本来前記頂点シェーダに前記頂点シェーダ入力属性値を処理させて前記頂点シェーダ出力属性値を生成させていたであろうコードを、省略するように構成されることを特徴とする請求項8に記載のシステム。
  10. 頂点シェーダ入力属性値から前記頂点シェーダにより生成される頂点シェーダ出力属性値が、前記頂点シェーダ出力属性値がそこから生成される前記頂点シェーダ入力属性値と同じになると認識される時、前記続くグラフィックス処理ステージに前記頂点シェーダ入力属性値を使用させるために、前記グラフィックス処理ステージに、前記頂点シェーダ出力属性値ではなく、前記頂点シェーダ入力属性値から、処理される値をロードさせるように構成される、前記グラフィックス処理ステージのためのロード命令を使用するように前記プロセッサが構成されることを特徴とする請求項8または請求項9に記載のシステム。
  11. 適切な属性値を取り出すためにインデックス付け機構が用いられ、
    少なくとも1つの続くグラフィックス処理ステージが頂点シェーダ入力属性値を処理する時に、前記少なくとも1つの続くグラフィックス処理ステージが、自身に提供されている出力インデックス値から、前記頂点シェーダ入力属性値を取り出すのに用いられるインデックスを、導出するための手段を含むことを特徴とする請求項8から10のいずれか一項に記載のシステム。
  12. 前記少なくとも1つの続くグラフィックス処理ステージが、頂点シェーダ入力属性値を取り出すのに用いられるインデックスを導出するのに用いるべき、インデックス導出動作を決定するための手段を含むことを特徴とする請求項8から請求項11のいずれか一項に記載のシステム。
  13. 実行される前記インデックス導出動作が、対象の属性に関連するメタ情報により示されることを特徴とする請求項12に記載のシステム。
  14. 対象の属性の値をロードおよび/または格納する時に用いられるメタ情報を、前記頂点シェーディングステージの1つまたは複数の属性と関連付けるように構成されたプロセッサを含み、
    前記グラフィックス処理ステージの1つまたは複数が、頂点シェーディングステージの属性の値をロードおよび/または格納する場合に、前記属性と関連する任意のメタ情報をまず読み取り、次に、前記属性の値をロードまたは格納する時に、前記メタ情報を用いるように構成されていることを特徴とする請求項8から請求項13のいずれか一項に記載のシステム。
  15. データ処理手段上で実行されると、請求項1から請求項7のいずれか一項に記載の方法を実行するためのコンピュータソフトウェアコード部分を含むことを特徴とするコンピュータプログラム。
JP2012046402A 2011-03-03 2012-03-02 グラフィックス処理 Active JP6108670B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB1103698.5A GB201103698D0 (en) 2011-03-03 2011-03-03 Graphics processing
GB1103698.5 2011-03-03

Publications (2)

Publication Number Publication Date
JP2012185820A JP2012185820A (ja) 2012-09-27
JP6108670B2 true JP6108670B2 (ja) 2017-04-05

Family

ID=43923196

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012046402A Active JP6108670B2 (ja) 2011-03-03 2012-03-02 グラフィックス処理

Country Status (4)

Country Link
US (1) US9818218B2 (ja)
JP (1) JP6108670B2 (ja)
CN (1) CN102708533B (ja)
GB (3) GB201103698D0 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing
GB2527822B (en) * 2014-07-03 2020-10-07 Advanced Risc Mach Ltd Graphics processing
US9799091B2 (en) * 2014-11-20 2017-10-24 Intel Corporation Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures
KR20160074154A (ko) 2014-12-18 2016-06-28 삼성전자주식회사 컴파일러
CN104881836A (zh) * 2015-05-21 2015-09-02 广东广宇科技发展有限公司 气象预警信息发布系统
US10192280B2 (en) 2016-04-08 2019-01-29 Qualcomm Incorporated Per-vertex variable rate shading
US10062139B2 (en) 2016-07-25 2018-08-28 Qualcomm Incorporated Vertex shaders for binning based graphics processing
US10726605B2 (en) * 2017-09-15 2020-07-28 Intel Corporation Method and apparatus for efficient processing of derived uniform values in a graphics processor
US10600142B2 (en) * 2017-11-02 2020-03-24 Advanced Micro Devices, Inc. Compression and decompression of indices in a graphics pipeline
CN110390709B (zh) * 2019-06-19 2023-01-03 北京巴别时代科技股份有限公司 卡通渲染勾边圆滑方法
GB2592604B (en) * 2020-03-03 2023-10-18 Sony Interactive Entertainment Inc Image generation system and method

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2271260A (en) * 1992-10-02 1994-04-06 Canon Res Ct Europe Ltd Processing image data
US6417858B1 (en) * 1998-12-23 2002-07-09 Microsoft Corporation Processor for geometry transformations and lighting calculations
US6717577B1 (en) 1999-10-28 2004-04-06 Nintendo Co., Ltd. Vertex cache for 3D computer graphics
US6697074B2 (en) 2000-11-28 2004-02-24 Nintendo Co., Ltd. Graphics system interface
US8274517B2 (en) 2003-11-14 2012-09-25 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US6975325B2 (en) * 2004-01-23 2005-12-13 Ati Technologies Inc. Method and apparatus for graphics processing using state and shader management
US7426724B2 (en) * 2004-07-02 2008-09-16 Nvidia Corporation Optimized chaining of vertex and fragment programs
US7750914B2 (en) * 2004-08-26 2010-07-06 Intel Corporation Subdividing geometry images in graphics hardware
US7733347B2 (en) * 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US7439983B2 (en) * 2005-02-10 2008-10-21 Sony Computer Entertainment Inc. Method and apparatus for de-indexing geometry
WO2006112508A1 (ja) * 2005-04-20 2006-10-26 Matsushita Electric Industrial Co., Ltd. ストリームデータ記録装置、ストリームデータ編集装置、ストリームデータ再生装置、ストリームデータ記録方法、及びストリームデータ再生方法
US7830390B2 (en) 2005-07-19 2010-11-09 Graphics Properties Holdings, Inc. Color computation of pixels using a plurality of vertex or fragment shader programs
US7898543B1 (en) * 2006-04-10 2011-03-01 Nvidia Corporation System and method for optimizing texture retrieval operations
US20080024510A1 (en) * 2006-07-27 2008-01-31 Via Technologies, Inc. Texture engine, graphics processing unit and video processing method thereof
US8009172B2 (en) * 2006-08-03 2011-08-30 Qualcomm Incorporated Graphics processing unit with shared arithmetic logic unit
US20080094408A1 (en) * 2006-10-24 2008-04-24 Xiaoqin Yin System and Method for Geometry Graphics Processing
KR100882842B1 (ko) * 2007-02-26 2009-02-17 삼성전자주식회사 피포를 포스트 버텍스 캐쉬처럼 사용하기 위한 기하학 처리장치와 그 방법
US8355028B2 (en) 2007-07-30 2013-01-15 Qualcomm Incorporated Scheme for varying packing and linking in graphics systems
US8325184B2 (en) * 2007-09-14 2012-12-04 Qualcomm Incorporated Fragment shader bypass in a graphics processing unit, and apparatus and method thereof
US8698825B1 (en) * 2007-11-21 2014-04-15 Nvidia Corporation System, method, and computer program product for optimizing use of a vertex cache
US9214007B2 (en) * 2008-01-25 2015-12-15 Via Technologies, Inc. Graphics processor having unified cache system
US8284197B2 (en) 2008-07-11 2012-10-09 Advanced Micro Devices, Inc. Method and apparatus for rendering instance geometry
US8269775B2 (en) 2008-12-09 2012-09-18 Qualcomm Incorporated Discarding of vertex points during two-dimensional graphics rendering using three-dimensional graphics hardware
US8436854B2 (en) * 2009-05-29 2013-05-07 Qualcomm Incorporated Graphics processing unit with deferred vertex shading
US9324175B2 (en) * 2009-09-11 2016-04-26 Nvidia Corporation Memory coherency in graphics command streams and shaders
GB2474114B (en) * 2009-09-25 2012-02-15 Advanced Risc Mach Ltd Graphics processing systems
US8326820B2 (en) * 2009-09-30 2012-12-04 Microsoft Corporation Long-query retrieval
US8692829B2 (en) * 2009-10-05 2014-04-08 Nvidia Corporation Calculation of plane equations after determination of Z-buffer visibility
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US8558842B1 (en) * 2009-10-14 2013-10-15 Nvidia Corporation Parallel duplicate primitive vertex detection and batching
US8669990B2 (en) * 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
JP5465145B2 (ja) * 2010-10-05 2014-04-09 キヤノン株式会社 画像処理装置、画像処理方法、および画像記録装置
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing

Also Published As

Publication number Publication date
GB201203675D0 (en) 2012-04-18
JP2012185820A (ja) 2012-09-27
GB2504814B (en) 2015-03-11
US20120223946A1 (en) 2012-09-06
GB201309684D0 (en) 2013-07-17
GB2488668B (en) 2015-03-11
CN102708533B (zh) 2018-09-14
GB201103698D0 (en) 2011-04-20
GB2488668A (en) 2012-09-05
GB2504814A (en) 2014-02-12
US9818218B2 (en) 2017-11-14
CN102708533A (zh) 2012-10-03

Similar Documents

Publication Publication Date Title
JP6008515B2 (ja) グラフィックス処理
JP6108670B2 (ja) グラフィックス処理
US11676321B2 (en) Graphics library extensions
Sellers et al. Vulkan programming guide: The official guide to learning vulkan
CN106233326B (zh) 图形处理中基于显现目标的灵活显现
JP6403436B2 (ja) データ処理システム
CN108701366B (zh) 用于图形处理中的阴影光线的树遍历的开始节点确定的方法、设备及可读存储媒体
US9449421B2 (en) Method and apparatus for rendering image data
US9251551B2 (en) Bindless memory access in direct 3D
KR20160004963A (ko) 그래픽 처리
KR20150002742A (ko) 그래픽스 프로세싱에서의 패치된 쉐이딩
KR20170015232A (ko) 그래픽 처리 시스템
US10432914B2 (en) Graphics processing systems and graphics processors
US20150015574A1 (en) System, method, and computer program product for optimizing a three-dimensional texture workflow
US10593093B2 (en) Data processing systems
CN110738593A (zh) 纹理在图形处理系统中的使用
US11107264B2 (en) Graphics processing systems for determining blending operations
US20230401667A1 (en) Graphics processing systems
KR102676410B1 (ko) 그래픽 처리 시스템
CN118052694A (zh) 图形处理器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150220

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151214

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160310

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160516

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160614

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160815

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161215

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20161226

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: 20170206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170307

R150 Certificate of patent or registration of utility model

Ref document number: 6108670

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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