JP6464538B2 - 粗い画素の遅延シェーディング - Google Patents

粗い画素の遅延シェーディング Download PDF

Info

Publication number
JP6464538B2
JP6464538B2 JP2017504751A JP2017504751A JP6464538B2 JP 6464538 B2 JP6464538 B2 JP 6464538B2 JP 2017504751 A JP2017504751 A JP 2017504751A JP 2017504751 A JP2017504751 A JP 2017504751A JP 6464538 B2 JP6464538 B2 JP 6464538B2
Authority
JP
Japan
Prior art keywords
shading
pixel
sample
region
processor
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
JP2017504751A
Other languages
English (en)
Other versions
JP2017531224A (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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2017531224A publication Critical patent/JP2017531224A/ja
Application granted granted Critical
Publication of JP6464538B2 publication Critical patent/JP6464538B2/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/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/46Descriptors for shape, contour or point-related descriptors, e.g. scale invariant feature transform [SIFT] or bags of words [BoW]; Salient regional features
    • G06V10/467Encoded features or binary features, e.g. local binary patterns [LBP]
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/18Timing circuits for raster scan displays
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2350/00Solving problems of bandwidth in display systems
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/08Power processing, i.e. workload management for processors involved in display operations, such as CPUs or GPUs
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/121Frame memory handling using a cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Description

本発明は、グラフィックス処理に関する。
シェーディングは、描画されるオブジェクトに照明効果を適用するプロセスである。遅延シェーディングは、可視性(カバレッジ)が解決された後でレンダリングが実行されるシーンをレンダリングする一般的な方法である。特に、シェーディングは、すべてのオクルージョンが解決されるまで遅延される。通常、これは2回のパスで行われる。最初のパスは、ジオメトリまたはGバッファと呼ばれるバッファにシェーディングに必要な入力(表面法線、深度、ビューベクトルなど)を書き出す。2番目のパスは、シェーディング計算が行われるフルスクリーンパス(または計算シェーダパス)である。
各Gバッファサンプルについて、シェーディングは、その時点のサンプルのGバッファを読み出し、すべての照明の寄与を累積して最終的な表面色を出力することによって行われる。
遅延シェーディングの利点の1つは、目に見える表面のフラグメントのみがシェーディングされることである。シェーディングは、すべてのジオメトリ処理が完了するまで遅延される。
視認率がシェーディング率と異なる場合(例えば、マルチサンプル方式のアンチエイリアシング(MSAA)または粗い画素シェーディング(CPS))、Gバッファは完全な視認率で利用可能であるため、実行されるシェーディングに必要なレートを(画素単位またはサンプル単位で)決めることは難しい。Gバッファを視認率でシェーディングするのは、安全ではあるが、非常に非効率的である(また、多くの場合、必要でない)。
いくつかの実施形態は、以下の図面に関して説明される。
スクリーン領域を解析し、サンプル、画素または粗い画素としてスクリーン領域を分類し、可能な限りシェーディング率を低減させるためのフローチャートである。 一実施形態によるデータ処理システムのブロック図である。 一実施形態による、図2に示すプロセッサのブロック図である。 一実施形態による、図2のグラフィックスプロセッサのブロック図である。 一実施形態によるグラフィックス処理エンジンのブロック図である。 別の実施形態によるグラフィックスプロセッサのブロック図である。 一実施形態のスレッド実行ロジックを示す図である。 一実施形態によるグラフィックスプロセッサ実行ユニットの命令フォーマットのブロック図である。 グラフィックスプロセッサの別の実施形態のブロック図である。 一実施形態によるグラフィックスプロセッサのコマンドフォーマットのブロック図である。 一実施形態によるグラフィックスプロセッサのコマンドシーケンスのブロック図である。 一実施形態のグラフィックス・ソフトウェア・アーキテクチャである。
シェーディング率を、スクリーンのある領域にわたってその領域内のサンプルを解析することによって、画素ごとに1回または画素ごとに1回未満(例えば、2×2画素ごとに1回)に低減することができる。レンダリング方程式の特定の成分を他の成分よりも低いレートでシェーディングすることを選択することが可能である。本明細書で説明される構想は、このようなマルチレート遅延シェーディングに等しく適用可能である。
MSAAが生成するシェーディング結果を複製するには、画素が単一のプリミティブで完全にカバーされているときに画素ごとに1回シェーディングし、複数のプリミティブがその画素をカバーしている場合は、プリミティブの数だけシェーディングすることになる。ただし、所与の画素をカバーするプリミティブの数とそれらのカバレッジに関する情報は、通常、Gバッファでは利用できない。
1つの技術は、画素内のサンプルが単一のプリミティブによってカバーされているか否かを、ビュー空間の深度、ビュー空間の深度の微分値、および法線の画素内での変化を解析することによって明らかにする。 Lauritzenらによる「Deferred Rendering for Current and Future Rendering Pipelines」,SIGGRAPH2010,Course:「Beyond Programmable Shading」,July 29,2010を参照。表面が局所的に滑らかであると決定された場合、シェーディング率を画素ごとに1回に減らし、その画素内のすべてのサンプルに対してシェーディング結果を再利用することができる。
1画素より大きな領域(例えば、2×2)を同様の方法で解析することができる。Gバッファ面が2x2領域またはタイル上で局所的に滑らかであると決定された場合、シェーディング率を2x2領域ごとに1回(または粗い画素ごとに1回)に減らすことができる。シェーディング方程式が低周波成分を有する場合、そのような成分のシェーディング率を2×2領域ごとに1回に減らし、関与する画素にわたってシェーディングを再利用することができる。
粗い画素を複数の粗さのレベルに識別し、階層的なシェーディング構造を構築するこの見解を拡張することができる。特定のレベルの子画素は、その後、親画素のシェーディング結果を再利用することができる。図1は、1つのアルゴリズムによるフローチャートを示している。
図1に示すシーケンスを、ソフトウェア、ファームウェア、および/またはハードウェアで実施することができる。ソフトウェアおよびファームウェアの実施形態では、磁気ストレージ、光学ストレージ、または半導体ストレージなどの1つまたは複数の非一時的なコンピュータ可読媒体に格納されたコンピュータ可読命令によって実行されてもよい。
図1のシーケンスは、最悪の場合に基準サンプルの値とどのくらい異なるかを調べるために、1画素位置、すなわちスクリーン位置u,v内のサンプルを解析することから開始する。つまり、領域がどのくらい局所的に滑らかであるかについての決定がなされる。一実施形態では、ビュー空間の深度、ビュー空間の深度の微分値、および法線の1つまたは複数が基準画素に対して画素ごとにどれだけ変化するかに関する決定を行うことができる。基準画素は、領域内の任意の画素とすることができ、例えば、左上の画素を基準画素とすることができる。 ここで重要なのは、ある画素が基準画素とあまりにも異なってはならないことである。すべての画素がチェックされるので、基準画素としてどの画素が選択されても問題ではない。この情報は、例えば深度バッファから取得することにより、Gバッファから利用可能になる。
菱形12のチェックは、平滑度の決定に基づいて、サンプルごとのシェーディング(MSAAなど)を使用すべきかどうかを決定する。サンプルごとのシェーディングを使用しない場合、ブロック14に示すように、2×2ブロックの画素の各画素からの代表サンプルを解析することができる。他のブロックサイズを使用することもできる。
菱形16のチェックは、平滑度の決定に基づいて、画素ごとのシェーディングを利用すべきかどうかを決定する。画素ごとのシェーディングを利用しない場合、ブロック20において粗い画素シェーディング成分についてブロックが解析される。機能的には、このブロックは、2x2ブロック内の各画素から代表サンプル(例えば、サンプル0)を読み取ることができる。次いで、画素1,2および3からのサンプルを画素0からのサンプルと比較して(サンプルがブロック12の基準サンプルと同じ画素内で比較されたのと同様)、画素ごとにシェーディングが必要かどうかを判断する。粗い画素シェーディングは、フレームまたは画像にわたって異なるレートでシェーディングする。画素ごとのシェーディングが必要な場合、ブロック18に示すように、ブロックは画素ごとのシェーディング成分について評価される。次に、ブロック22で最終シェーディング色が実現される。
サンプルごとのシェーディングについての最初のチェックで、シェーディングがサンプルごとに必要であると決定された場合、次に、ブロック24でサンプルごとの成分が評価され、ブロック22の最終シェーディング色に続く。このようにして、ブロックは、単純な画素シェーディングまたは粗い画素シェーディングの1つとして識別される。次に、この分類を用いてシェーディング率を得ることができる。シェーディング率は可能な限り低減されるのが好適である。
いくつかの実装形態では、ハードウェアアクセラレーションを使用してスクリーン空間の領域上の値の分散を計算するアルゴリズムの部分を実装することを選択できる。このような一実装形態では、マシンクリエーションサービス(Machine Creation Services,MCS)圧縮ビットおよび新しいサンプラコマンドsample_LoadDeltaが使用される。これと併せて、次の拡張を使用することができる: <T>LoadDelta(uint2 uv,uint refSample)
ユーザは、上記のコマンドを呼び出して、スクリーン空間位置uvの画素位置内の表面値を解析し、refSample(最悪の場合)の値とどのくらい異なるかを調べる。すべての値が同じであるため、すべてのビットが同じサンプルを指す場合、システムはMCSビットを利用して0を返すことができる。
そうでない場合、次に、実行ユニットはコマンド sample_LoadDeltaをサンプラに発行する。次に、サンプラはすべてのサンプルをロードし、refSampleで指定された基準サンプル値とのチャネルに関する差を計算する。
計算をサンプラにオフロードし、MCSを使用することにより、ソフトウェアで実行するよりも電力効率の高いアルゴリズムとすることができる。その結果、帯域幅はMCS==0の場合に保存されるが、テクスチャの読み込みはスキップされる。MCS!=0の場合、サンプラからEUへの帯域幅が保存される。
同様に、1つまたは複数の色圧縮方式(MCSに類似)を使用して、特定の位置の指定されたN×N領域(または粗い画素)上で動作するシェーダ命令の変形を考えることもできる。このような命令を使用して、シェーディング率を画素率よりも低いレートに低減することができる。
これらの技術は、遅延シェーディングに適用可能なだけでなく、例えば、色相回転、彩度、コントラスト調整などの色補正のようなローカルの後処理アルゴリズムにも適用可能である。通常、解決操作がアーチファクトを表示した後に、後処理アルゴリズムが適用される。この技術を用いて、可能な限り、画素率でのみ後処理パスを実行し、解決を行うことができる。深度や法線がユーザ定義の閾値を超えて変化するたびに、MSAAレートで後処理に戻ることができる。
Lauritzenは画素単位およびサンプル単位間のシェーディング率を制御することを提案した。Gバッファは、ビュー空間位置、ビュー空間の微分値Z、および表面法線を含むように作成される。lsPersample(..)関数は、以下で何かをシェーディングする必要がある場合を返す。
Figure 0006464538
この解析の結果を、perSample[]配列に集めることができる。各画素が画素率でシェーディングされていると決定された場合にのみ、同様の解析をスクリーン空間の2x2領域にわたって行うことができる。一実施形態では、寄与する画素を解析する間に許容される最大許容ビュー空間の深度―デルタが2倍である代表サンプル(例えば、サンプル0)を使用して、2x2領域にわたって解析を行うことができる。
領域のシェーディング率が識別されると、同時に同様のシェーディング率ですべての領域をシェーディングし、中間結果をメモリ(共有ローカルメモリ(SLM)またはグローバルメモリのいずれか)に格納することによって、シングル・インストラクション・マルチプル・データ(SIMD)効率を向上させるか、または最大化することができる。次のより高いレートの領域がシェーディングされるとき、親の出力データを読み取ることによって、その親からの寄与が加えられる。
テクスチャリングは、粗いレートでシェーディングしながら慎重に行われる必要がある。 通常、遅延シェーディングの場合、テクスチャリングはGバッファ生成パスで行われる。シェーディング周波数(2x2サイズの画素または1画素であり得る)をサンプリング周波数と一致させるには、(バイアスされたサンプラを使用して)ミップ(mip)レベルを調整する必要があるか、より高いミップ(mip)レベルのサンプルがフィルタリングされ得る。慎重に処理しないと、低周波シェーディング成分にエイリアシングが見られる。
図2は、一実施形態によるデータ処理システム100のブロック図である。データ処理システム100は、1つまたは複数のプロセッサ102および1つまたは複数のグラフィックスプロセッサ108を含み、単一プロセッサのデスクトップシステム、マルチ・プロセッサ・ワークステーション・システム、または多数のプロセッサ102もしくはプロセッサコア107を有するサーバシステムであってもよい。一実施形態では、データ処理システム100は、モバイル、ハンドヘルド、または埋め込みデバイスで使用するためのチップ集積回路(SOC)上のシステムである。
データ処理システム100の実施形態は、サーバベースのゲームプラットフォームや、ゲームおよびメディアコンソール、モバイル・ゲーム・コンソール、ハンドヘルド・ゲーム・コンソール、またはオンライン・ゲーム・コンソールを含む、ゲームコンソールを含むことができるか、またはこれらに組み込むことができる。一実施形態では、データ処理システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイスまたはモバイルインターネットデバイスである。データ処理システム100は、スマート・ウォッチ・ウェアラブル・デバイス、スマート・アイウェア・デバイス、拡張現実感デバイス、またはバーチャル・リアリティ・デバイスなどのウェアラブルデバイスを含むか、これと連結するか、またはこれに統合されることもできる。一実施形態では、データ処理システム100は、1つまたは複数のプロセッサ102と、1つまたは複数のグラフィックスプロセッサ108によって生成されたグラフィカルインタフェースとを有するテレビまたはセット・トップ・ボックス・デバイスである。
1つまたは複数のプロセッサ102は、それぞれ、実行されると、システムおよびユーザソフトウェアの操作を実行する命令を処理するための1つまたは複数のプロセッサコア107を含む。一実施形態では、1つまたは複数のプロセッサコア107のそれぞれは、特定の命令セット109を処理するように構成されている。命令セット109は、複雑な命令セット演算(CISC)、縮小命令セット演算(RISC)、または超長命令語(VLIW)による演算を容易にすることができる。複数のプロセッサコア107はそれぞれ、他の命令セットのエミュレーションを容易にする命令を含むことができる異なる命令セット109を処理することができる。プロセッサコア107は、デジタル信号プロセッサ(DSP)のような他の処理デバイスを含むこともできる。
一実施形態では、プロセッサ102はキャッシュメモリ104を含む。 アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数レベルの内部キャッシュを有することができる。一実施形態では、キャッシュメモリは、プロセッサ102のさまざまなコンポーネント間で共有される。また、一実施形態では、プロセッサ102は、既知のキャッシュコヒーレンシ技術を使用してプロセッサコア107間で共有され得る外部キャッシュ(例えば、レベル3(L3)キャッシュまたは最終レベルキャッシュ(LLC))(図示せず)を使用する。異なるタイプのデータ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ)を格納するための異なるタイプのレジスタを含み得るレジスタファイル106が、プロセッサ102に追加的に含まれる。いくつかのレジスタは汎用レジスタであってもよく、他のレジスタはプロセッサ102の設計に固有であってもよい。
プロセッサ102は、プロセッサ102とシステム100内の他のコンポーネントとの間でデータ信号を送信するために、プロセッサバス110に連結されている。システム100は、メモリ・コントローラ・ハブ116および入出力(I/O)コントローラハブ130を含む例示的な「ハブ」システムアーキテクチャを使用する。メモリ・コントローラ・ハブ116は、メモリデバイスとシステム100の他のコンポーネントとの間の通信を容易にし、I/Oコントローラハブ(ICH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
メモリデバイス120は、ダイナミック・ランダム・アクセス・メモリ(DRAM)デバイス、スタティック・ランダム・アクセス・メモリ(SRAM)デバイス、フラッシュ・メモリ・デバイス、またはプロセスメモリとして機能するのに適した性能を有する他の何らかのメモリデバイスであってもよい。メモリ120は、プロセッサ102がプロセスを実行するときに使用するためのデータ122および命令121を格納することができる。また、メモリ・コントローラ・ハブ116は、プロセッサ102内の1つまたは複数のグラフィックスプロセッサ108と通信してグラフィックスおよびメディア操作を実行することができる任意の外部グラフィックスプロセッサ112と連結する。
ICH130は、高速I/Oバスを介して周辺機器をメモリ120およびプロセッサ102に接続することを可能にする。I/O周辺機器は、オーディオコントローラ146、ファームウェアインタフェース128、無線トランシーバ126(例えば、Wi−Fi、Bluetooth(登録商標))、データ記憶デバイス124(例えば、ハードディスクドライブ、フラッシュメモリなど)、およびレガシ(例えば、パーソナルシステム2(PS/2))デバイスをシステムに連結するためのレガシI/Oコントローラを含む。1つまたは複数のユニバーサル・シリアル・バス(USB)コントローラ142は、キーボードおよびマウス144の組み合わせなどの入力デバイスを接続する。また、ネットワークコントローラ134は、ICH130に連結することができる。一実施形態では、高性能ネットワークコントローラ(図示せず)がプロセッサバス110に連結する。
図3は、1つまたは複数のプロセッサコア202A〜N、統合メモリコントローラ214、および統合グラフィックスプロセッサ208を有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線のボックスによって表される追加のコア202Nまでの追加のコアを含むことができる。コア202A〜Nのそれぞれは、1つまたは複数の内部キャッシュユニット204A〜Nを含む。また、一実施形態では、各コアは、1つまたは複数の共有キャッシュユニット206へのアクセスを有する。
内部キャッシュユニット204A〜Nおよび共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表している。キャッシュメモリ階層は、各コア内の命令およびデータキャッシュの少なくとも1つのレベル、ならびにレベル2(L2)、レベル3(L3)、レベル4(L4)のような共有中間レベルキャッシュの1つまたは複数のレベル、またはキャッシュの他のレベルを含むことができ、外部メモリより前の最高レベルのキャッシュが最終レベルキャッシュ(LLC)として分類される。一実施形態では、キャッシュ・コヒーレンシ・ロジックは、さまざまなキャッシュユニット206と204A〜Nとの間のコヒーレンシを維持する。
また、プロセッサ200は、1つまたは複数のバス・コントローラ・ユニット216およびシステムエージェント210のセットを含むことができる。1つまたは複数のバス・コントローラ・ユニットは、1つまたは複数の周辺機器相互接続バス(例えば、PCI、PCIエクスプレス)などの一連の周辺バスを管理する。システムエージェント210は、さまざまなプロセッサコンポーネントのための管理機能を提供する。一実施形態では、システムエージェント210は、さまざまな外部メモリデバイス(図示せず)へのアクセスを管理するための1つまたは複数の統合メモリコントローラ214を含む。
一実施形態では、1つまたは複数のコア202A〜Nは、同時マルチスレッディングのためのサポートを含む。このような実施形態では、システムエージェント210は、マルチスレッド処理中にコア202A〜Nを調整して動作させるためのコンポーネントを含む。システムエージェント210は、コア202A〜Nおよびグラフィックスプロセッサ208の電力状態を調整するロジックおよびコンポーネントを含む電力制御ユニット(PCU)をさらに含むことができる。
プロセッサ200は、グラフィックス処理操作を実行するためのグラフィックスプロセッサ208をさらに含む。一実施形態では、グラフィックスプロセッサ208は、1つまたは複数の統合メモリコントローラ214を含む、一連の共有キャッシュユニット206およびシステムエージェントユニット210と連結する。一実施形態では、ディスプレイコントローラ211がグラフィックスプロセッサ208に連結され、グラフィックスプロセッサの出力を1つまたは複数の連結されたディスプレイに駆動する。ディスプレイコントローラ211は、少なくとも1つの相互接続を介してグラフィックスプロセッサと連結された別個のモジュールであってもよく、グラフィックスプロセッサ208またはシステムエージェント210内に統合されてもよい。
一実施形態では、リングベースの相互接続ユニット212が、プロセッサ200の内部コンポーネントを連結するために使用されるが、ポイントツーポイント相互接続、交換相互接続、または当技術分野で公知の技術を含む他の技術などの代替の相互接続ユニットが使用されてもよい。一実施形態では、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続部212と連結する。
例示的なI/Oリンク213は、さまざまなプロセッサコンポーネントと、eDRAMモジュールなどの高性能組み込みメモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む、複数の種類のI/O相互接続のうちの少なくとも1つを表している。一実施形態では、コア202A〜Nおよびグラフィックスプロセッサ208のそれぞれは、共有された最終レベルキャッシュとして組み込みメモリモジュール218を使用する。
一実施形態では、コア202A〜Nは、同じ命令セットアーキテクチャを実行する同種コアである。別の実施形態では、コア202A〜Nは命令セットアーキテクチャ(ISA)の点で異種であり、1つまたは複数のコア202A〜Nが第1の命令セットを実行し、他のコアの少なくとも1つが第1の命令セットのサブセットまたは異なる命令セットを実行する。
プロセッサ200を、例えば、相補型金属酸化膜半導体(CMOS)、バイポーラ接合/相補型金属酸化膜半導体(BiCMOS)、またはN型金属酸化膜半導体ロジック(NMOS)のような、いくつかのプロセス技術のいずれかを使用して、1つまたは複数の基板の一部とすることができ、または、1つまたは複数の基板上に実装することができる。さらに、プロセッサ200を、他のコンポーネントに加えて、図示されたコンポーネントを有する1つまたは複数のチップにまたはシステム・オン・チップ(SOC)集積回路として実装することができる。
図4は、グラフィックスプロセッサ300の一実施形態のブロック図であり、このグラフィックスプロセッサ300は、ディスクリートなグラフィックス処理ユニットであってもよく、または複数の処理コアと統合されたグラフィックスプロセッサであってもよい。一実施形態では、グラフィックスプロセッサは、メモリマップI/Oインタフェースを介して、グラフィックスプロセッサ上のレジスタに、およびプロセッサメモリに配置されたコマンドを介して通信される。グラフィックスプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314を、ローカルメモリ、1つまたは複数の内部キャッシュ、1つまたは複数の共有外部キャッシュに、および/またはシステムメモリに対するインタフェースとすることができる。
また、グラフィックスプロセッサ300は、ディスプレイ出力データをディスプレイデバイス320に駆動するためのディスプレイコントローラ302を含む。ディスプレイコントローラ302は、ディスプレイのための1つまたは複数のオーバーレイプレーン、およびビデオまたはユーザインタフェース要素の複数層の構成のためのハードウェアを含む。一実施形態では、グラフィックスプロセッサ300は、1つまたは複数のメディア・エンコード・フォーマットに、1つまたは複数のメディア・エンコード・フォーマットから、または1つまたは複数のメディア・エンコード・フォーマット間で、メディアをエンコード、デコード、またはトランスコードするビデオ・コーデック・エンジン306を含み、フォーマットには、MPEG−2のようなMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG−4 AVCなどのAVC(Advanced Video Coding)フォーマットや米国映画テレビ技術者協会(SMPTE)の421M/VC−1規格、JPEGなどのJPEG(Joint Photographic Experts Group)フォーマット、およびMJPEG(Motion JPEG)フォーマットが含まれるが、これらに限定されるものではない。
一実施形態では、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ操作を実行するブロック画像転送(BLIT)エンジン304を含む。ただし、一実施形態では、グラフィックス処理エンジン(GPE)310の1つまたは複数のコンポーネントを使用して、2Dグラフィックス操作が実行される。グラフィック処理エンジン310は、3次元(3D)グラフィックス操作およびメディア操作を含むグラフィックス操作を実行するための計算エンジンである。
GPE310は、3Dプリミティブ形状(例えば、矩形、三角形など)に作用する処理機能を使用して3次元画像およびシーンをレンダリングするなどの、3D操作を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内でさまざまなタスクを実行する、および/または実行スレッドを3D/メディアサブシステム315に生成するプログラム可能な固定された機能要素を含む。3Dパイプライン312を、メディア操作を実行するために使用することができるが、GPE310の実施形態は、ビデオ後処理および画像強調などのメディア操作を実行するために特に使用されるメディアパイプライン316も含む。
一実施形態では、メディアパイプライン316は、ビデオ・コーデック・エンジン306の代わりに、またはビデオ・コーデック・エンジン306のために、ビデオデコードアクセラレーション、ビデオインタレース解除、およびビデオ・エンコード・アクセラレーションなどの1つまたは複数の特殊なメディア操作を実行する固定機能またはプログラム可能ロジックユニットを含む。一実施形態では、メディアパイプライン316は、3D/メディアサブシステム315上での実行のためにスレッドを生成するスレッド生成ユニットをさらに含む。生成されたスレッドは、3D/メディアサブシステムに含まれる1つまたは複数のグラフィックス実行ユニットでメディア操作のための計算を実行する。
3D/メディアサブシステム315は、3Dパイプライン312およびメディアパイプライン316によって生成されたスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を3D/メディアサブシステム315に送信し、この要求には、さまざまな要求を調停して利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ・ロジックが含まれる。実行リソースは、3Dおよびメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。一実施形態では、3D/メディアサブシステム315は、スレッド命令およびデータ用の1つまたは複数の内部キャッシュを含む。一実施形態では、サブシステムはまた、スレッド間でデータを共有し、出力データを格納するために、レジスタおよびアドレス可能なメモリを含む共有メモリを含む。
図5は、グラフィックスプロセッサ用のグラフィックス処理エンジン410の一実施形態のブロック図である。一実施形態では、グラフィックス処理エンジン(GPE)410は、図4に示すGPE310のバージョンである。GPE410は、3Dパイプライン412およびメディアパイプライン416を含み、それぞれ、図4の3Dパイプライン312およびメディアパイプライン316の実装と異なるかまたは類似することができる。
一実施形態では、GPE410は、コマンドストリームをGPEの3Dパイプライン412およびメディアパイプライン416に提供するコマンドストリーマ403と連結する。コマンドストリーマ403は、システムメモリ、または1つまたは複数の内部キャッシュメモリおよび共有キャッシュメモリとすることができるメモリに連結される。コマンドストリーマ403は、メモリからコマンドを受信し、コマンドを3Dパイプライン412および/またはメディアパイプライン416に送信する。3Dパイプラインおよびメディアパイプラインは、それぞれのパイプライン内のロジックを介して操作を実行することによって、または実行ユニットアレイ414に1つまたは複数の実行スレッドをディスパッチすることによってコマンドを処理する。一実施形態では、実行ユニットアレイ414は、アレイがGPE410の目標電力および性能レベルに基づいて可変数の実行ユニットを含むようにスケーラブルである。
サンプリングエンジン430は、メモリ(例えば、キャッシュメモリまたはシステムメモリ)および実行ユニットアレイ414と連結する。一実施形態では、サンプリングエンジン430は、実行ユニットアレイ414がメモリからグラフィックスおよびメディアデータを読み取ることを可能にする、スケーラブル実行ユニットアレイ414のためのメモリアクセス機構を提供する。一実施形態では、サンプリングエンジン430は、メディアに対する特殊な画像サンプリング操作を実行するロジックを含む。
サンプリングエンジン430内の特殊メディア・サンプリング・ロジックは、ノイズ除去/インタレース解除モジュール432、動き推定モジュール434、ならびに画像スケーリングおよびフィルタリングモジュール436を含む。ノイズ除去/インタレース解除モジュール432は、デコードされたビデオデータに対して1つまたは複数のノイズ除去またはインタレース解除アルゴリズムを実行するロジックを含む。インタレース解除ロジックは、インタレースされたビデオコンテンツの交番磁界をビデオの単一フレームに結合する。ノイズ除去ロジックは、ビデオおよび画像データからのデータノイズを低減または除去する。一実施形態では、ノイズ除去ロジックおよびインタレース除去ロジックは動き適応型であり、ビデオデータで検出された動きの量に基づいて空間的または時間的フィルタリングを使用する。一実施形態では、ノイズ除去/インタレース解除モジュール432は、(例えば、動き推定エンジン434内の)専用の動き検出ロジックを含む。
動き推定エンジン434は、動きベクトル推定およびビデオデータの予測などのビデオアクセラレーション機能を実行することによって、ビデオ操作のためのハードウェアアクセラレーションを提供する。動き推定エンジンは、連続するビデオフレーム間の画像データの変換を記述する動きベクトルを決定する。一実施形態では、グラフィックス・プロセッサ・メディア・コーデックは、ビデオ動き推定エンジン434を使用して、マクロブロックレベルでビデオに操作を実行し、そうでなければ汎用プロセッサを使用して実行するために計算的に集中的である可能性がある。一実施形態では、動き推定エンジン434は、ビデオデータ内の動きの方向または大きさに敏感なまたは適応するビデオデコードおよび処理機能を支援するために、グラフィックス・プロセッサ・コンポーネントに一般に利用可能である。
画像スケーリングおよびフィルタリングモジュール436は、生成された画像およびビデオの視覚的品質を向上させるために画像処理操作を実行する。一実施形態では、スケーリングおよびフィルタリングモジュール436は、データを実行ユニットアレイ414に提供する前に、サンプリング操作中に画像およびビデオデータを処理する。
一実施形態では、グラフィックス処理エンジン410は、メモリにアクセスするためにグラフィックスサブシステムに追加機構を提供するデータポート444を含む。データポート444は、レンダリングターゲット書き込み、定数バッファ読み出し、スクラッチメモリ空間読み出し/書き込み、およびメディア表面アクセスを含む操作のためのメモリアクセスを容易にする。一実施形態では、データポート444は、メモリへのアクセスをキャッシュするためのキャッシュメモリ空間を含む。キャッシュメモリは、データポートを介してメモリにアクセスする複数のサブシステムに対して、単一のデータキャッシュであってもよく、複数のキャッシュに分割されていてもよい(例えば、レンダリング・バッファ・キャッシュ、定数バッファキャッシュなど)。一実施形態では、実行ユニットアレイ414内の実行ユニット上で実行するスレッドは、グラフィックス処理エンジン410の各サブシステムを連結するデータ配信相互接続を介してメッセージを交換することによってデータポートと通信する。
図6は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態では、グラフィックスプロセッサは、リング相互接続部502、パイプラインフロントエンド504、メディアエンジン537、およびグラフィックスコア580A〜Nを含む。リング相互接続部502は、グラフィックスプロセッサを他のグラフィックスプロセッサまたは1つまたは複数の汎用プロセッサコアを含む他の処理ユニットに連結する。一実施形態では、グラフィックスプロセッサは、マルチコア処理システム内に統合された多くのプロセッサの1つである。
グラフィックスプロセッサは、リング相互接続部502を介してコマンドのバッチを受信する。受信コマンドは、パイプラインフロントエンド504内のコマンドストリーマ503によって解釈される。グラフィックスプロセッサは、グラフィックスコア580A〜Nを介して3Dジオメトリ処理およびメディア処理を実行するスケーラブルな実行ロジックを含む。3Dジオメトリ処理コマンドの場合、コマンドストリーマ503はコマンドをジオメトリパイプライン536に提供する。少なくともいくつかのメディア処理コマンドの場合、コマンドストリーマ503は、メディアエンジン537と連結するビデオ・フロント・エンド534にコマンドを提供する。メディアエンジン537は、ビデオおよび画像後処理のためのビデオクオリティエンジン(VQE)530と、ハードウェア加速のメディア・データ・エンコードおよびデコードを提供するマルチ・フォーマット・エンコード/デコード(MFX)533エンジンとを含む。ジオメトリパイプライン536およびメディアエンジン537はそれぞれ、少なくとも1つのグラフィックスコア580Aによって提供されるスレッド実行リソースのための実行スレッドを生成する。
グラフィックスプロセッサは、それぞれが複数のサブコア550A〜N、560A〜N(コアサブスライスと呼ばれることもある)を有するモジュラコア580A〜N(コアスライスと呼ばれることもある)を特徴とするスケーラブルなスレッド実行リソースを含む。グラフィックスプロセッサは、任意の数のグラフィックスコア580A〜580Nを有することができる。一実施形態では、グラフィックスプロセッサは、少なくとも第1のサブコア550Aおよび第2のサブコア560Aを有するグラフィックスコア580Aを含む。別の実施形態では、グラフィックスプロセッサは、単一のサブコア(例えば、550A)を有する低電力プロセッサである。一実施形態では、グラフィックスプロセッサは、それぞれ一連の第1のサブコア550A〜Nと一連の第2のサブコア560A〜Nを含む複数のグラフィックスコア580A〜Nを含む。一連の第1のサブコア550A〜N内の各サブコアは、少なくとも第1の一連の実行ユニット552A〜Nおよびメディア/テクスチャサンプラ554A〜Nを含む。一連の第2のサブコア560A〜N内の各サブコアは、少なくとも第2の一連の実行ユニット562A〜Nおよびサンプラ564A〜Nを含む。一実施形態では、各サブコア550A〜N、560A〜Nは、一連の共有リソース570A〜Nを共有する。一実施形態では、共有リソースは、共有キャッシュメモリおよび画素操作ロジックを含む。グラフィックスプロセッサのさまざまな実施形態には、他の共有リソースも含まれ得る。
図7は、グラフィックス処理エンジンの一実施形態で使用される処理要素のアレイを含むスレッド実行ロジック600を示している。一実施形態では、スレッド実行ロジック600は、画素シェーダ602、スレッドディスパッチャ604、命令キャッシュ606、複数の実行ユニット608A〜Nを含むスケーラブル実行ユニットアレイ、サンプラ610、データキャッシュ612、およびデータポート614を含む。一実施形態では、含まれるコンポーネントは、各コンポーネントにリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック600は、命令キャッシュ606、データポート614、サンプラ610、および実行ユニットアレイ608A〜Nのうちの1つまたは複数を介して、システムメモリまたはキャッシュメモリなどのメモリへの1つまたは複数の接続を含む。一実施形態では、各実行ユニット(例えば、608A)は、複数の同時スレッドを実行し、各スレッドに対して複数のデータ要素を並列に処理することができる個別のベクトルプロセッサである。実行ユニットアレイ608A〜Nは、任意の数の個別の実行ユニットを含む。
一実施形態では、実行ユニットアレイ608A〜Nは、主に、「シェーダ」プログラムを実行するために使用される。一実施形態では、アレイ608A〜N内の実行ユニットは、グラフィックライブラリ(例えば、Direct3DおよびOpenGL)からのシェーダプログラムが最小限の変換で実行されるように、多くの標準3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行する。実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、画素処理(例えば、画素シェーダ、フラグメントシェーダ)、および汎用処理(例えば、計算およびメディアシェーダ)をサポートする。
実行ユニットアレイ608A〜N内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」、すなわち命令用チャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および命令内でのフロー制御のための論理的な実行ユニットである。チャネルの数は、特定のグラフィックスプロセッサのための物理ALUまたはFPUの数とは無関係であってもよい。実行ユニット608A〜Nは、整数および浮動小数点データ型をサポートする。
実行ユニット命令セットは、単一命令複数データ(SIMD)命令を含む。さまざまなデータ要素を、パック化されたデータ型としてレジスタに格納することができ、実行ユニットは、要素のデータサイズに基づいてさまざまな要素を処理し得る。例えば、256ビット幅のベクトル上で動作する場合、256ビットのベクトルはレジスタに格納され、実行ユニットは、4つの別々の64ビットパックデータ要素(クワドワード(QW)サイズのデータ要素)、8つの別々の32ビットパックデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別々の16ビットパックデータ要素(ワード(W)サイズのデータ要素)、または32個の別々の8ビットデータ要素(バイト(B)サイズのデータ要素)として、ベクトル上で動作する。ただし、異なるベクトル幅およびレジスタサイズが可能である。
実行ユニットに対するスレッド命令をキャッシュするために、1つまたは複数の内部命令キャッシュ(例えば、606)がスレッド実行ロジック600に含まれる。一実施形態では、スレッド実行中にスレッドデータをキャッシュするために、1つまたは複数のデータキャッシュ(例えば、612)が含まれる。サンプラ610は、3D操作のためのテクスチャサンプリングとメディア操作のためのメディアサンプリングを提供するために含まれる。一実施形態では、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャまたはメディアデータを処理する特殊なテクスチャまたはメディアサンプリング機能を含む。
実行中、グラフィックスおよびメディアパイプラインは、スレッド生成およびディスパッチロジックを介してスレッド実行ロジック600にスレッド開始要求を送信する。スレッド実行ロジック600は、グラフィックスおよびメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを1つまたは複数の実行ユニット608A〜N上でインスタンス化するローカルスレッドディスパッチャ604を含む。例えば、ジオメトリパイプライン(例えば、図6の536)は、頂点処理、テッセレーション、またはジオメトリ処理スレッドをスレッド実行ロジック600にディスパッチする。スレッドディスパッチャ604は、実行中のシェーダプログラムからの実行時スレッド生成要求を処理することもできる。
幾何学的オブジェクトのグループが処理されて画素データにラスタライズされると、画素シェーダ602が呼び出されて、出力情報をさらに計算し、結果が出力面に書き込まれる(例えば、カラーバッファ、深度バッファ、ステンシルバッファなど)。一実施形態では、画素シェーダ602は、ラスタライズされたオブジェクトにわたって補間されるべきさまざまな頂点属性の値を計算する。次に、画素シェーダ602は、API提供の画素シェーダプログラムを実行する。画素シェーダプログラムを実行するために、画素シェーダ602は、スレッドディスパッチャ604を介して実行ユニット(例えば、608A)にスレッドをディスパッチする。画素シェーダ602は、サンプラ610内のテクスチャ・サンプリング・ロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータおよび入力ジオメトリデータの算術演算は、各幾何学的フラグメントについての画素カラーデータを計算するか、またはさらなる処理から1つまたは複数の画素を破棄する。
一実施形態では、データポート614は、スレッド実行ロジック600がグラフィックスプロセッサ出力パイプライン上での処理のための処理データをメモリに出力するためのメモリアクセス機構を提供する。一実施形態では、データポート614は、データポートを介してメモリアクセスのためのデータをキャッシュするために、1つまたは複数のキャッシュメモリ(例えば、データキャッシュ612)を含むか、またはそれに連結する。
図8は、一実施形態によるグラフィックスプロセッサ実行ユニットの命令フォーマットを示すブロック図である。一実施形態では、グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、一般に実行ユニット命令に含まれるコンポーネントを示し、破線は、任意であるか、または命令のサブセットにのみ含まれるコンポーネントを含む。説明され図示された命令フォーマットは、命令が処理された後に命令デコードから生じるマイクロオペレーションとは対照的に、実行ユニットに提供される命令であるというマクロ命令である。
一実施形態では、グラフィックスプロセッサ実行ユニットは、128ビットフォーマット710で命令をネイティブにサポートする。選択された命令、命令オプション、およびオペランドの数に基づいて、いくつかの命令に対して64ビットの圧縮された命令フォーマット730が利用可能である。ネイティブの128ビットフォーマット710は、すべての命令オプションへのアクセスを提供し、いくつかのオプションおよび操作は、64ビットフォーマット730に制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態によって異なる。一実施形態では、命令は、インデックスフィールド713内の一連のインデックス値を使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて一連の圧縮テーブルを参照し、コンパクションテーブル出力を使用して、128ビットフォーマット710のネイティブ命令を再構成する。
各フォーマットについて、命令オペコード712は、実行ユニットが実行すべき操作を画定する。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各カラーチャネルにわたって同時加算操作を実行する。デフォルトでは、実行ユニットは、各命令をオペランドのすべてのデータチャネルにわたって実行する。命令制御フィールド712は、チャネル選択(例えば、プレディケーション)およびデータチャネルオーダ(例えば、スウィズル)などの特定の実行オプションに対する制御を可能にする。128ビット命令710の場合、実行サイズフィールド716は、並列に実行され得るデータチャネルの数を制限する。実行サイズフィールド716は、64ビットコンパクト命令フォーマット730での使用に利用可能できない。
いくつかの実行ユニット命令は、2つのソースオペランドsrc0(720)およびsrc1(722)、ならびに1つのデスティネーション718を含む3つまでのオペランドを有する。一実施形態では、実行ユニットは、2つのデスティネーション命令をサポートし、デスティネーションのうちの1つは黙示されている。データ操作命令は、第3のソースオペランド(例えば、SRC2(724))を有することができ、命令オペコードJJ12は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される(例えば、ハードコードされた)即値であってもよい。
一実施形態では、オペコードビットフィールドに基づいて命令をグループ化し、オペコードデコード740を単純化する。8ビットのオペコードの場合、ビット4,5,および6は、実行ユニットがオペコードのタイプを決定することを可能にする。示された正確なオペコードグループは例示的なものである。一実施形態では、移動および論理オペコードグループ742は、データ移動および論理命令(例えば、mov、cmp)を含む。移動および論理グループ742は、5つの最上位ビット(MSB)を共有し、移動命令は0000xxxxb(例えば、0x0x)の形式であり、論理命令は0001xxxxb(例えば、0x01)の形式である。フロー制御命令グループ744(例えば、call、jmp)は、0010xxxxb(例えば、0x20)の形式の命令を含む。その他の命令グループ746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、wait、send)を含む命令の混合を含む。並列演算命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネントに関する算術命令(例えば、add、mul)を含む。並列演算グループ748は、データチャネルにわたって並列に算術演算を実行する。ベクトル演算グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル演算グループは、ベクトルオペランドにドット積演算などの演算を実行する。
図9は、グラフィックスパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、およびレンダリング出力パイプライン870を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態では、グラフィックスプロセッサは、1つまたは複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1つまたは複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、またはリング相互接続部802を介してグラフィックスプロセッサに発行されるコマンドによって制御される。リング相互接続部802は、グラフィックスプロセッサを他のグラフィックスプロセッサまたは汎用プロセッサなどの他の処理コンポーネントに連結する。リング相互接続部からのコマンドは、グラフィックスパイプライン820またはメディアパイプライン830の個々のコンポーネントに命令を提供するコマンドストリーマ803によって解釈される。
コマンドストリーマ803は、頂点データをメモリから読み出し、コマンドストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805コンポーネントの操作を指示する。頂点フェッチャ805は、頂点シェーダ807に頂点データを提供し、頂点シェーダ807は、各頂点に座標空間変換および照明操作を実行する。頂点フェッチャ805および頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A,852Bにディスパッチすることによって、頂点処理命令を実行する。
一実施形態では、実行ユニット852A,852Bは、グラフィックスおよびメディア操作を実行するための命令セットを有するベクトルプロセッサのアレイである。実行ユニット852A,852Bは、各アレイに特有の、またはアレイ間で共有される、取り付けられたL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティション内のデータおよび命令を含むように区分された単一のキャッシュとして構成され得る。
一実施形態では、グラフィックスパイプライン820は、3Dオブジェクトのハードウェア加速テッセレーションを実行するためのテッセレーションコンポーネントを含む。プログラム可能なハルシェーダ811は、テッセレーション操作を構成する。プログラム可能なドメインシェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダ811の方向に動作し、グラフィックスパイプライン820への入力として提供される粗い幾何学モデルに基づいて一連の詳細な幾何学的オブジェクトを生成する専用のロジックを含む。テッセレーションが使用されない場合、テッセレーションコンポーネント811,813,817はバイパスされ得る。
完全な幾何学的オブジェクトは、実行ユニット852A,852Bにディスパッチされる1つまたは複数のスレッドを介してジオメトリシェーダ819によって処理され得るか、またはクリッパ829に直接進むことができる。ジオメトリシェーダは、グラフィックスパイプラインの前のステージのように、頂点または頂点のパッチではなく、幾何学的オブジェクト全体に動作する。テッセレーションが無効にされている場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受け取る。ジオメトリシェーダ819はジオメトリシェーダプログラムによってプログラム可能であり、テッセレーションユニットが無効にされている場合、ジオメトリテッセレーションを実行する。
ラスタライゼーションの前に、頂点データはクリッパ829によって処理され、クリッパ829は、固定機能クリッパまたはクリッピングおよびジオメトリシェーダ機能を有するプログラム可能クリッパのいずれかである。一実施形態では、レンダリング出力パイプライン870内のラスタライザ873は、画素シェーダをディスパッチして、幾何学的オブジェクトを画素ごとの表現に変換する。一実施形態では、画素シェーダロジックがスレッド実行ロジック850に含まれる。
グラフィックスエンジンは、相互接続バス、相互接続ファブリック、またはグラフィックスエンジンの主要なコンポーネント間でデータおよびメッセージの受け渡しを可能にする他の何らかの相互接続機構を有する。一実施形態では、実行ユニット852A,852Bおよび関連するキャッシュ851、テクスチャおよびメディアサンプラ854、およびテクスチャ/サンプラキャッシュ858は、データポート856を介して相互接続し、メモリアクセスを実行し、グラフィックスエンジンのレンダリング出力パイプラインコンコンポーネントと通信する。一実施形態では、サンプラ854、キャッシュ851,858および実行ユニット852A,852Bはそれぞれ別々のメモリアクセス経路を有する。
一実施形態では、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連する画素ベースの表現に変換するラスタライザおよび深度テストコンポーネント873を含む。一実施形態では、ラスタライザロジックは、固定機能の三角形および線のラスタライズを実行するためのウインドウ/マスカユニットを含む。また、関連するレンダリングキャッシュ878および深度バッファキャッシュ879が、一実施形態において利用可能である。画素操作コンポーネント877は、データに画素ベースの操作を実行するが、いくつかの例では、2D操作に関連する画素操作(例えば、ブレンディングを伴うビットブロック画像転送)は、2Dエンジン841によって実行されるか、またはオーバーレイ表示面を使用してディスプレイコントローラ843によって表示時に置換される。一実施形態では、共有L3キャッシュ875がすべてのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを使用せずにデータの共有を可能にする。
グラフィックスプロセッサメディアパイプライン830は、メディアエンジン837およびビデオ・フロント・エンド834を含む。一実施形態では、ビデオ・フロント・エンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。ただし、一実施形態では、メディアパイプライン830は、別個のコマンドストリーマを含む。ビデオ・フロント・エンド834は、コマンドをメディアエンジン837に送信する前に、メディアコマンドを処理する。一実施形態では、メディアエンジンは、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするスレッドを生成するためのスレッド生成機能を含む。
一実施形態では、グラフィックスエンジンはディスプレイエンジン840を含む。一実施形態では、ディスプレイエンジン840は、グラフィックスプロセッサの外部にあり、リング相互接続部802または他の何らかの相互接続バスもしくはファブリックを介してグラフィックスプロセッサと連結する。ディスプレイエンジン840は、2Dエンジン841とディスプレイコントローラ843とを含む。ディスプレイエンジン840は、3Dパイプラインとは独立して動作することができる専用のロジックを含む。ディスプレイコントローラ843は、ラップトップコンピュータでのように、システム統合ディスプレイデバイスであってもよいディスプレイデバイス(図示せず)、またはディスプレイデバイスコネクタを介して取り付けられた外部ディスプレイデバイスと連結する。
グラフィックスパイプライン820およびメディアパイプライン830は、複数のグラフィックスおよびメディア・プログラミング・インタフェースに基づいて操作を実行するように構成可能であり、いずれか1つのアプリケーション・プログラミング・インタフェース(API)に固有ではない。一実施形態では、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに特有のAPIコールを、グラフィックスプロセッサによって処理され得るコマンドに変換する。さまざまな実施形態では、クロノスグループによってサポートされるOpen Graphics Library(OpenGL)およびOpen Computing Language(OpenCL)、マイクロソフト社のDirect3Dライブラリ、または一実施形態ではOpenGLおよびD3Dの両方に対するサポートが提供される。また、Open Source Computer Vision Library(OpenCV)に対するサポートも提供される。次世代のAPIのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングが可能な場合、互換性のある3Dパイプラインを備えた次世代のAPIもサポートされ得る。
図10Aは、一実施形態によるグラフィックス・プロセッサ・コマンド・フォーマットを示すブロック図であり、図10Bは、一実施形態によるグラフィックス・プロセッサ・コマンド・シーケンスを示すブロック図である。図10Aの実線のボックスは、一般にグラフィックスコマンドに含まれるコンポーネントを示し、破線は、任意であるか、またはグラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図10Aの例示的なグラフィックス・プロセッサ・コマンド・フォーマット900は、コマンドのターゲットクライアント902、コマンドオペレーションコード(オペコード)904、およびコマンドの関連データ906を識別するデータフィールドを含む。一部のコマンドにはサブオペコード905およびコマンドサイズ908も含まれる。
クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態では、グラフィックス・プロセッサ・コマンド・パーサは、各コマンドのクライアントフィールドを検査して、コマンドのさらなる処理を条件付けし、コマンドデータを適切なクライアントユニットにルーティングする。一実施形態では、グラフィックス・プロセッサ・クライアント・ユニットは、メモリ・インタフェース・ユニット、レンダリングユニット、2Dユニット、3Dユニット、およびメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受信されると、クライアントユニットは、オペコード904および、存在する場合、サブオペコード905を読み取り、実行する操作を決定する。クライアントユニットは、コマンドのデータ906フィールド内の情報を用いてコマンドを実行する。一部のコマンドでは、コマンドのサイズを指定するために明示的なコマンドサイズ908が期待される。一実施形態では、コマンドパーサは、コマンドオペコードに基づいて、少なくともいくつかのコマンドのサイズを自動的に決定する。一実施形態では、コマンドはダブルワードの倍数を介して整列される。
図10Bのフローチャートは、サンプル・コマンド・シーケンス910を示している。一実施形態では、グラフィックスプロセッサの一実施形態を特徴とするデータ処理システムのソフトウェアまたはファームウェアが、一連のグラフィックス操作をセットアップし、実行し、終了するために示されたコマンドシーケンスのバージョンを使用する。例示的な目的のために、サンプル・コマンド・シーケンスが示され、説明されるが、実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックスプロセッサが少なくとも部分的に並行してコマンドのシーケンスを処理し得るように、コマンドシーケンス内のコマンドのバッチとして発行されてもよい。
サンプル・コマンド・シーケンス910は、パイプライン・フラッシュ・コマンド912で始まり、任意のアクティブグラフィックスパイプラインにパイプラインのためのその時点での保留中のコマンドを完了させることができる。一実施形態では、3Dパイプライン922とメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、アクティブグラフィックスパイプラインに保留中の任意のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサのためのコマンドパーサは、アクティブな描画エンジンが保留中の操作を完了し、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止し得る。任意に、レンダリングキャッシュ内の「dirty」とマークされた任意のデータを、メモリにフラッシュすることができる。パイプライン・フラッシュ・コマンド912を、パイプライン同期のために、またはグラフィックスプロセッサを低電力状態に置く前に使用することができる。
パイプライン選択コマンド913は、コマンドシーケンスがグラフィックスプロセッサにパイプライン間を明示的に切り替えることが必要な場合に使用される。パイプライン選択コマンド913は、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプラインコマンドを発行する前に実行コンテキスト内で1回だけ必要とされる。一実施形態では、パイプライン選択コマンド913を介してパイプラインスイッチの直前にパイプライン・フラッシュ・コマンド912が必要とされる。
パイプライン制御コマンド914は、操作のためのグラフィックスパイプラインを構成し、3Dパイプライン922およびメディアパイプライン924をプログラムするために使用される。パイプライン制御コマンド914は、アクティブパイプラインのためのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期に使用され、コマンドのバッチを処理する前にアクティブパイプライン内の1つまたは複数のキャッシュメモリからデータをクリアする。
リターンバッファ状態コマンド916は、それぞれのパイプラインがデータを書き込むための一連のリターンバッファを構成するために使用される。いくつかのパイプライン操作では、1つまたは複数のリターンバッファの割り当て、選択、または構成が必要であり、その操作によりそこに処理中に中間データが書き込まれる。グラフィックスプロセッサはまた、出力データを格納し、クロススレッド通信を実行するために、1つまたは複数のリターンバッファを使用する。リターンバッファ状態916は、一連のパイプライン操作に使用するリターンバッファのサイズおよび数を選択することを含む。
コマンドシーケンスの残りのコマンドは、操作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922、またはメディアパイプライン状態940で始まるメディアパイプライン924に合わせて調整される。
3Dパイプライン状態930のためのコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態、および3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3DのAPIに少なくとも部分的に基づいて決定される。3Dパイプライン状態930のコマンドは、これらの要素が使用され得ない場合、特定のパイプライン要素を選択的に無効にするか、またはバイパスすることも可能である。
3Dプリミティブ932のコマンドは、3Dパイプラインによって処理される3Dプリミティブをサブミットするために使用される。3Dプリミティブ932のコマンドを介してグラフィックスプロセッサに渡されるコマンドおよび関連するパラメータは、グラフィックスパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932のコマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、1つまたは複数のリターンバッファに格納される。3Dプリミティブ932のコマンドは、頂点シェーダを介して3Dプリミティブ上で頂点操作を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
3Dパイプライン922は、実行934のコマンドまたはイベントを介してトリガされる。一実施形態では、レジスタ書き込みが、コマンド実行をトリガする。一実施形態では、コマンドシーケンス中の「go」または「kick」コマンドを介して実行がトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブのためのジオメトリ処理を実行し得る。操作が完了すると、結果として得られる幾何学的オブジェクトはラスタライズされ、画素エンジンは結果として生じる画素を色付けする。画素シェーディングおよび画素バックエンド操作を制御するための追加のコマンドも、これらの操作に含めることができる。
サンプル・コマンド・シーケンス910は、メディア操作を実行するときにメディアパイプライン924の経路に続く。一般に、メディアパイプライン924のためのプログラミングの特定の使用および方法は、実行されるメディアまたは計算操作に依存する。特定のメディアデコード操作は、メディアデコード中にメディアパイプラインにオフロードされてもよい。また、メディアパイプラインをバイパスすることができ、メディアデコードは、1つまたは複数の汎用処理コアによって提供されるリソースを使用して、全体にまたは部分的に実行され得る。一実施形態では、メディアパイプラインはまた、汎用グラフィックスプロセッサユニット(GPGPU)演算用の要素を含み、グラフィックスプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してSIMDベクトル演算を実行するためにグラフィックスプロセッサが使用される。
メディアパイプライン924は、3Dパイプライン922と同様に構成されている。一連のメディアパイプライン状態コマンド940が、メディア・オブジェクト・コマンド942の前にコマンドキューにディスパッチされるか、または配置される。メディアパイプライン状態コマンド940は、メディアオブジェクトを処理するために使用され得るメディアパイプライン要素を構成するためのデータを含む。これには、エンコードまたはデコードフォーマットなどの、メディアパイプライン内のビデオデコードおよびビデオ・エンコード・ロジックを構成するためのデータが含まれる。また、メディアパイプライン状態コマンド940は、状態設定のバッチを含む「間接」状態要素への1つまたは複数のポインタの使用をサポートする。
メディア・オブジェクト・コマンド942は、メディアパイプラインによる処理のためにメディアオブジェクトにポインタを提供する。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。一実施形態では、メディア・オブジェクト・コマンド942を発行する前に、すべてのメディアパイプライン状態が有効でなければならない。パイプライン状態が構成され、メディア・オブジェクト・コマンド942がキューに入れられると、メディアパイプライン924は、実行934のコマンドまたは同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。メディアパイプライン924からの出力は、その後、3Dパイプライン922またはメディアパイプライン924によって提供される操作によって後処理されてもよい。一実施形態では、GPGPU演算は、メディア操作と同様に構成され実行される。
図11は、一実施形態によるデータ処理システムのための例示的なグラフィックス・ソフトウェア・アーキテクチャを示している。ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010、オペレーティングシステム1020、および少なくとも1つのプロセッサ1030を含む。プロセッサ1030は、グラフィックスプロセッサ1032および1つまたは複数の汎用プロセッサコア1034を含む。グラフィックスアプリケーション1010およびオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050内で実行する。
一実施形態では、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1つまたは複数のシェーダプログラムを含む。シェーダ言語命令は、高水準シェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)などの高水準シェーダ言語であってもよい。アプリケーションはまた、汎用プロセッサコア1034による実行に適した機械語の実行可能命令1014を含む。アプリケーションはまた、頂点データによって画定されるグラフィックスオブジェクト1016を含む。
オペレーティングシステム1020は、マイクロソフト社のMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独自のUNIX(登録商標)ライクなオペレーティングシステム、またはLinux(登録商標)カーネルの変形を使用するオープンソースのUNIX(登録商標)ライクなオペレーティングシステムであってもよい。 Direct3DのAPIが使用されているとき、オペレーティングシステム1020は、フロントエンドシェーダコンパイラ1024を使用して、HLSLの任意のシェーダ命令1012を低水準シェーダ言語にコンパイルする。コンパイルはジャストインタイムコンパイルであってもよく、またはアプリケーションが共有プリコンパイルを実行することができる。一実施形態では、高水準シェーダは、3Dグラフィックスアプリケーション1010のコンパイル中に低水準シェーダにコンパイルされる。
ユーザ・モード・グラフィックス・ドライバ1026は、シェーダ命令1012をハードウェア特有の表現に変換するためのバックエンドシェーダコンパイラ1027を含むことができる。OpenGLのAPIが使用されているとき、GLSL高水準言語のシェーダ命令1012は、コンパイルのためにユーザ・モード・グラフィックス・ドライバ1026に渡される。ユーザ・モード・グラフィックス・ドライバは、オペレーティング・システム・カーネル・モード機能1028を使用してカーネル・モード・グラフィックス・ドライバ1029と通信する。カーネル・モード・グラフィックス・ドライバ1029はグラフィックスプロセッサ1032と通信し、コマンドおよび命令をディスパッチする。
本明細書で説明される範囲のさまざまな動作または機能を、ハードウェア回路、ソフトウェアコード、命令、構成、および/またはデータとして記述または画定することができる。コンテンツを、ハードウェアロジックに、または直接実行可能なソフトウェア(「オブジェクト」または「実行可能」形式)、ソースコード、グラフィックスエンジン上で実行するように設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックスコア用の命令セット内の低水準アセンブリ言語コードとして実現することができる。本明細書で説明される実施形態のソフトウェアコンテンツは、コンテンツが格納された製品によって、または通信インタフェース経由でデータを送信するために通信インタフェースを操作する方法によって提供され得る。
非一時的機械可読記憶媒体は、記述された機能または動作を機械に実行させることができ、機械(例えば、コンピューティングデバイス、電子システムなど)によってアクセス可能な形式で情報を記憶する任意の機構、例えば、記録可能/記録不可能な媒体(読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュ・メモリ・デバイスなど)を含むことができる。通信インタフェースは、メモリ・バス・インタフェース、プロセッサ・バス・インタフェース、インターネット接続、ディスクコントローラなどの、他のデバイスと通信するために、ハードワイヤード、ワイヤレス、光などの媒体のいずれかにインタフェースする任意の機構を含む。通信インタフェースは、ソフトウェアコンテンツを記述するデータ信号を提供するために、通信インタフェースを準備するための構成パラメータまたは送信信号を提供することによって構成される。通信インタフェースは、通信インタフェースに送信される1つまたは複数のコマンドまたは信号を介してアクセスされ得る。
説明されたさまざまコンポーネントを、記述された動作または機能を実行するための手段とすることができる。本明細書に記載される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。コンポーネントを、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア(例えば、特定用途向けハードウェア、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)など)、組み込みコントローラ、ハードワイヤード回路などとして実装することができる。本明細書に記載されたものに加えて、本発明の範囲から逸脱することなく、本発明の開示された実施形態および実装形態にさまざまな修正を行うことができる。したがって、本明細書における説明および例は、例示的なものであり、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の特許請求の範囲を参照することによってのみ判断されるべきである。
以下の項および/または例は、さらなる実施形態に関する。 例示的な一実施形態は、画素内のサンプルを解析すること、画素の領域(region of pixels)に対して粗い画素、画素またはサンプルシェーディングを使用するかどうかを決定する段階、および、決定されたシェーディングのタイプに基づいてシェーディング率を設定する段階を含む方法であってもよい。方法はまた、領域内でサンプルごとのシェーディングを使用するかどうかを決定する段階を含むことができる。方法はまた、領域内でサンプルごとのシェーディングを使用しない場合、画素の領域内の各画素について代表サンプルを解析する段階を含むことができる。方法はまた、画素ごとのサンプル成分を評価する段階を含むことができる。方法はまた、画素ごとのシェーディングを使用するかどうかを決定する段階を含むことができる。方法はまた、画素ごとのシェーディングを使用しない場合、画素ごとのシェーディング成分を評価する段階を含むことができる。方法はまた、画素ごとのシェーディングを使用する場合、粗い画素ごとのシェーディング成分を評価する段階を含むことができる。方法はまた、サンプルを解析する段階が、サンプルが基準サンプルとどのくらい異なるかを決定する段階を含むことができる。方法はまた、サンプルを解析する段階が、領域がどのくらい滑らかであるかを決定する段階を含むことができる。方法はまた、同時に同じシェーディング率ですべての領域をシェーディングする段階を含むことができる。
別の例示的な実施形態は、画素内のサンプルを解析すること、画素の領域に対して粗い画素、画素またはサンプルシェーディングを使用するかどうかを決定すること、および、決定されたシェーディングのタイプに基づいてシェーディング率を設定することを含むシーケンスを実行するために、プロセッサによって実行される命令を格納する1つまたは複数の非一時的なコンピュータ可読媒体であってもよい。媒体は、領域内でサンプルごとのシェーディングを使用するかどうかを決定することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、領域内でサンプルごとのシェーディングを使用しない場合、画素の領域内の各画素について代表サンプルを解析することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、領域内でサンプルごとのシェーディングを使用する場合、画素ごとのサンプル成分を評価することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、画素ごとのシェーディングを使用するかどうかを決定することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、画素ごとのシェーディングを使用しない場合、画素ごとのシェーディング成分を評価することを含む前記シーケンスを実行するための命令をさらに格納することができる。媒体は、画素ごとのシェーディングを使用する場合、粗い画素ごとのシェーディング成分を評価することを含む前記シーケンスを実行するための命令をさらに格納することができる。媒体は、サンプルを解析することが、サンプルが基準サンプルとどのくらい異なるかを決定することを含む、前記シーケンスを実行するための命令をさらに格納することができる。媒体は、サンプルを解析することが、領域がどのくらい滑らかであるかを決定することを含む、前記シーケンスを実行するための命令をさらに格納することができる。媒体は、同時に同じシェーディング率ですべての領域をシェーディングすることを含むシーケンスを実行するための命令をさらに格納することができる。
別の例示的な実施形態は、画素内のサンプルを解析し、画素の領域に対して粗い画素、画素またはサンプルシェーディングを使用するかどうかを決定し、決定されたシェーディングのタイプに基づいてシェーディング率を設定するためのプロセッサと、前記プロセッサに連結されたストレージとを含む装置であってもよい。装置は、領域内でサンプルごとのシェーディングを使用するかどうかを決定するための前記プロセッサを含むことができる。装置は、領域内でサンプルごとのシェーディングを使用しない場合、画素の領域内の各画素について代表サンプルを解析するための前記プロセッサを含むことができる。装置は、領域内でサンプルごとのシェーディングを使用する場合、画素ごとのサンプル成分を評価するための前記プロセッサを含むことができる。装置は、画素ごとのシェーディングを使用するかどうかを決定するための前記プロセッサを含むことができる。装置は、画素ごとのシェーディングを使用しない場合、画素ごとのシェーディング成分を評価するための前記プロセッサを含むことができる。装置は、画素ごとのシェーディングを使用する場合、粗い画素ごとのシェーディング成分を評価するための前記プロセッサを含むことができる。装置は、オペレーティングシステム、バッテリおよびファームウェア、ならびに前記ファームウェアを更新するためのモジュールを含むことができる。
本明細書で説明するグラフィックス処理技術は、さまざまなハードウェアアーキテクチャで実施され得る。例えば、グラフィックス機能がチップセット内に統合されてもよい。あるいは、別個のグラフィックスプロセッサを使用してもよい。さらに別の実施形態として、グラフィックス機能は、マルチコアプロセッサを含む汎用プロセッサによって実施されてもよい。
本明細書にわたる「一実施形態(one embodiment)」または「実施形態(an embodiment)」という言及は、実施形態に関連して説明される特定の特徴、構造、または特性が、本開示に包含される少なくとも1つの実装形態に含まれることを意味する。したがって、「一実施形態(one embodiment)」または「実施形態(an embodiment)」という表現の出現は、必ずしも同じ実施形態を指しているとは限らない。さらに、特定の特徴、構造、または特性は、図示の特定の実施形態以外の他の適切な形態で実施されてもよく、このような形態はすべて本出願の特許請求の範囲内に包含されてもよい。
限られた数の実施形態について説明してきたが、当業者であれば、多くの修正および変形が可能とされよう。添付の特許請求の範囲は、本開示の真の趣旨および範囲内にあるそのような修正および変形のすべてを含めることが意図されている。

Claims (16)

  1. プロセッサにより実行される方法であって、
    前記プロセッサにより、バッファから取得した複数の画素の領域内における1つの画素内の複数のサンプルを解析して、前記領域内でサンプルごとのシェーディングを使用するかどうかを決定する段階と、
    前記領域内で前記サンプルごとのシェーディングを使用しないと決定した場合、前記プロセッサにより、前記バッファから取得した前記複数の画素の前記領域内における各画素の代表サンプルを解析して、画素ごとのシェーディングを使用するかどうかを決定する段階と、
    前記画素ごとのシェーディングを使用しないと決定した場合、前記プロセッサにより、複数の画素の領域ごとのシェーディングを使用すると決定する段階と、
    を含む方法。
  2. 前記画素ごとのシェーディングを使用すると決定した場合、前記プロセッサにより、前記1つの画素内の前記複数のサンプルに対してシェーディング結果を再利用する段階を含む、請求項1に記載の方法。
  3. 前記複数の画素の領域ごとのシェーディングを使用すると決定した場合、前記プロセッサにより、前記領域内における前記複数の画素に対してシェーディング結果を再利用する段階を含む、請求項1または2に記載の方法。
  4. 前記サンプルを解析する段階が、サンプルが基準サンプルとどのくらい異なるかを決定する段階を含む、請求項1からのいずれか一項に記載の方法。
  5. 前記サンプルを解析する段階が、前記領域がどのくらい滑らかであるかを決定する段階を含む、請求項1からのいずれか一項に記載の方法。
  6. プロセッサにより実行されると、前記プロセッサの実行ロジックに、
    バッファから取得した複数の画素の領域内における1つの画素内の複数のサンプルを解析して、前記領域内でサンプルごとのシェーディングを使用するかどうかを決定すること、
    前記領域内で前記サンプルごとのシェーディングを使用しないと決定した場合、前記バッファから取得した前記複数の画素の前記領域内における各画素の代表サンプルを解析して、画素ごとのシェーディングを使用するかどうかを決定すること、
    前記画素ごとのシェーディングを使用しないと決定した場合、複数の画素の領域ごとのシェーディングを使用すると決定すること、
    を含むシーケンスを実行させる、コンピュータプログラム。
  7. 前記画素ごとのシェーディングを使用すると決定した場合、前記シーケンスが、前記1つの画素内の前記複数のサンプルに対してシェーディング結果を再利用することを含む、請求項6に記載のコンピュータプログラム。
  8. 前記複数の画素の領域ごとのシェーディングを使用すると決定した場合、前記シーケンスが、前記領域内における前記複数の画素に対してシェーディング結果を再利用することを含む、請求項6または7に記載のコンピュータプログラム。
  9. 前記サンプルを解析することが、サンプルが基準サンプルとどのくらい異なるかを決定することを含む、請求項からのいずれか一項に記載のコンピュータプログラム。
  10. 前記サンプルを解析することが、前記領域がどのくらい滑らかであるかを決定することを含む、請求項からのいずれか一項に記載のコンピュータプログラム。
  11. 複数の画素の領域内における1つの画素内の複数のサンプルを解析して、前記領域内でサンプルごとのシェーディングを使用するかどうかを決定し、
    前記領域内で前記サンプルごとのシェーディングを使用しないと決定した場合、前記複数の画素の前記領域内における各画素の代表サンプルを解析して、画素ごとのシェーディングを使用するかどうかを決定し、
    前記画素ごとのシェーディングを使用しないと決定した場合、複数の画素の領域ごとのシェーディングを使用すると決定する、
    プロセッサを含む装置。
  12. 前記画素ごとのシェーディングを使用すると決定した場合、前記プロセッサが、前記1つの画素内における前記複数のサンプルに対してシェーディング結果を再利用する、請求項11に記載の装置。
  13. 前記複数の画素の領域ごとのシェーディングを使用すると決定した場合、前記プロセッサが、前記領域内における前記複数の画素に対してシェーディング結果を再利用する、請求項11または12に記載の装置。
  14. 前記サンプルを解析することが、サンプルが基準サンプルとどのくらい異なるかを決定することを含む、請求項11から13のいずれか一項に記載の装置。
  15. 前記サンプルを解析することが、前記領域がどのくらい滑らかであるかを決定することを含む、請求項11から14のいずれか一項に記載の装置。
  16. 請求項から10のいずれか一項に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
JP2017504751A 2014-09-16 2015-08-19 粗い画素の遅延シェーディング Active JP6464538B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/487,432 2014-09-16
US14/487,432 US9934606B2 (en) 2014-09-16 2014-09-16 Deferred coarse pixel shading
PCT/US2015/045831 WO2016043909A1 (en) 2014-09-16 2015-08-19 Deferred coarse pixel shading

Publications (2)

Publication Number Publication Date
JP2017531224A JP2017531224A (ja) 2017-10-19
JP6464538B2 true JP6464538B2 (ja) 2019-02-06

Family

ID=55455236

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017504751A Active JP6464538B2 (ja) 2014-09-16 2015-08-19 粗い画素の遅延シェーディング

Country Status (6)

Country Link
US (1) US9934606B2 (ja)
EP (1) EP3195269A4 (ja)
JP (1) JP6464538B2 (ja)
KR (1) KR102241398B1 (ja)
CN (1) CN106575451B (ja)
WO (1) WO2016043909A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10152764B2 (en) * 2015-03-24 2018-12-11 Intel Corporation Hardware based free lists for multi-rate shader
US10257449B2 (en) * 2016-01-05 2019-04-09 Nvidia Corporation Pre-processing for video noise reduction
US10186076B2 (en) * 2016-03-29 2019-01-22 Intel Corporation Per-sample MSAA rendering using comprehension data
US10535186B2 (en) * 2016-08-30 2020-01-14 Intel Corporation Multi-resolution deferred shading using texel shaders in computing environments
US10109078B1 (en) 2017-04-10 2018-10-23 Intel Corporation Controlling coarse pixel size from a stencil buffer
US10235799B2 (en) 2017-06-30 2019-03-19 Microsoft Technology Licensing, Llc Variable rate deferred passes in graphics rendering
US10510185B2 (en) * 2017-08-25 2019-12-17 Advanced Micro Devices, Inc. Variable rate shading
JP7290852B2 (ja) * 2018-12-07 2023-06-14 国立大学法人東京工業大学 多コンテンツ描画システム及び多コンテンツ描画方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697063B1 (en) * 1997-01-03 2004-02-24 Nvidia U.S. Investment Company Rendering pipeline
JP3499541B2 (ja) 2001-07-25 2004-02-23 ザイオソフト株式会社 3次元画像表示方法、装置およびプログラム
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7496416B2 (en) * 2005-08-01 2009-02-24 Luxology, Llc Input/output curve editor
US7692659B1 (en) * 2006-11-06 2010-04-06 Nvidia Corporation Color-compression using automatic reduction of multi-sampled pixels
US7948500B2 (en) * 2007-06-07 2011-05-24 Nvidia Corporation Extrapolation of nonresident mipmap data using resident mipmap data
US8325184B2 (en) * 2007-09-14 2012-12-04 Qualcomm Incorporated Fragment shader bypass in a graphics processing unit, and apparatus and method thereof
TWI425440B (zh) * 2008-07-03 2014-02-01 Nvidia Corp 複合多重樣本/超樣本抗頻疊
US8605086B2 (en) 2008-07-03 2013-12-10 Nvidia Corporation Hybrid multisample/supersample antialiasing
US8823736B2 (en) * 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US9684997B2 (en) * 2012-06-27 2017-06-20 Pixar Efficient rendering of volumetric elements
US9082212B2 (en) 2012-12-21 2015-07-14 Nvidia Corporation Programmable blending via multiple pixel shader dispatches
US10733794B2 (en) * 2013-12-13 2020-08-04 Nvidia Corporation. Adaptive shading in a graphics processing pipeline

Also Published As

Publication number Publication date
EP3195269A1 (en) 2017-07-26
US20160078672A1 (en) 2016-03-17
KR20170033868A (ko) 2017-03-27
US9934606B2 (en) 2018-04-03
JP2017531224A (ja) 2017-10-19
CN106575451A (zh) 2017-04-19
WO2016043909A1 (en) 2016-03-24
KR102241398B1 (ko) 2021-04-16
CN106575451B (zh) 2019-12-10
EP3195269A4 (en) 2018-03-07

Similar Documents

Publication Publication Date Title
JP6377842B2 (ja) 位置限定シェーディングパイプライン
JP6464538B2 (ja) 粗い画素の遅延シェーディング
CN108369733B (zh) 使用三角形的属性的加权平均来合并粗像素着色的片段
US10565775B2 (en) Method and apparatus for load balancing in a ray tracing architecture
CN106796713B (zh) Msaa中使用索引位进行压缩
JP6379225B2 (ja) 効果的なテクスチャ圧縮のための方法および装置
EP3221850B1 (en) Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures
CN107004293B (zh) 仅位置流水线中的宽松拣分
US20160379400A1 (en) Three-Dimensional Renderer
US9412195B2 (en) Constant buffer size multi-sampled anti-aliasing depth compression
CN107077758B (zh) 零覆盖光栅化剔除
WO2017171982A1 (en) Per-sample msaa rendering using compression data
US9633452B2 (en) Resolving multi-sampled anti-aliasing buffers into single sampled buffers
US20160093102A1 (en) Efficient tessellation cache

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180522

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180817

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

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20181212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181221

R150 Certificate of patent or registration of utility model

Ref document number: 6464538

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