JP2017530444A - グラフィックス処理におけるレンダリング対象コマンドの並べ替え - Google Patents

グラフィックス処理におけるレンダリング対象コマンドの並べ替え Download PDF

Info

Publication number
JP2017530444A
JP2017530444A JP2017508972A JP2017508972A JP2017530444A JP 2017530444 A JP2017530444 A JP 2017530444A JP 2017508972 A JP2017508972 A JP 2017508972A JP 2017508972 A JP2017508972 A JP 2017508972A JP 2017530444 A JP2017530444 A JP 2017530444A
Authority
JP
Japan
Prior art keywords
command
commands
rendering
gpu
order
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017508972A
Other languages
English (en)
Other versions
JP2017530444A5 (ja
JP6310151B2 (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 JP2017530444A publication Critical patent/JP2017530444A/ja
Publication of JP2017530444A5 publication Critical patent/JP2017530444A5/ja
Application granted granted Critical
Publication of JP6310151B2 publication Critical patent/JP6310151B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • Human Computer Interaction (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Image Generation (AREA)

Abstract

ある例では、グラフィックスデータをレンダリングするための方法は、複数のレンダリング対象と関連付けられる複数のコマンドを受信するステップを含み、複数のコマンドは初期の順序で受信される。方法はまた、コマンド間のデータ依存関係に基づいて、初期の順序と異なる順序で複数のコマンドの1つまたは複数を並べ替えることを含む、複数のコマンドの実行順序を決定するステップを含む。方法はまた、決定された実行順序で複数のコマンドを実行するステップを含む。

Description

本開示は、グラフィックス処理をレンダリングすることに関する。
電子ディスプレイ上での視覚的提示のためのコンテンツを提供するデバイスは、一般にグラフィックス処理装置(GPU)を含む。GPUは、ディスプレイ上にコンテンツを表現するピクセルをレンダリングする。GPUは、ディスプレイ上の各ピクセルに対して1つまたは複数のピクセル値を生成し、ディスプレイ上の各ピクセルのピクセル値に対してグラフィックス処理を実行して提示のための各ピクセルをレンダリングする。
本開示の技法は全般に、グラフィックスデータをレンダリングすることに関する。グラフィックス処理装置(GPU)は、レンダリングの間にレンダリング対象を変更することがある。レンダリング対象を変更することは、レンダリング対象の変更と関連付けられるロード動作(たとえば、GPUメモリへのデータのロード)および記憶動作(たとえば、GPUメモリから外部メモリへのデータの記憶)が原因で、相対的に計算集約的であり、かつ/または時間集約的であることがある。本開示の技法は、ロード動作および記憶動作を減らし得るような方法で、レンダリング対象と関連付けられるコマンドをコマンド間の依存関係に基づいて並べ替えることを含む。
ある例では、グラフィックスデータをレンダリングするための方法は、複数のレンダリング対象と関連付けられる複数のコマンドを受信するステップであって、複数のコマンドが初期の順序で受信される、ステップと、コマンド間のデータ依存関係に基づいて初期の順序と異なる順序で複数のコマンドの1つまたは複数を並べ替えることを含む、複数のコマンドの実行順序を決定するステップと、決定された実行順序で複数のコマンドを実行するステップとを含む。
別の例では、グラフィックスデータをレンダリングするためのデバイスは、複数のレンダリング対象と関連付けられる複数のコマンドを記憶するように構成されるメモリを含む。デバイスはまた、複数のレンダリング対象と関連付けられる複数のコマンドを受信し、ここで複数のコマンドが初期の順序で受信され、コマンド間のデータ依存関係に基づいて初期の順序と異なる順序で複数のコマンドの1つまたは複数を並べ替えることを含めて、複数のコマンドの実行順序を決定し、決定された実行順序で複数のコマンドを実行するように構成される、1つまたは複数のプロセッサを含む。
別の例では、グラフィックスデータをレンダリングするためのデバイスは、複数のレンダリング対象と関連付けられる複数のコマンドを受信するための手段であって、複数のコマンドが初期の順序で受信される、手段と、コマンド間のデータ依存関係に基づいて初期の順序と異なる順序で複数のコマンドの1つまたは複数を並べ替えることを含めて、複数のコマンドの実行順序を決定するための手段と、決定された実行順序で複数のコマンドを実行するための手段とを含む。
別の例では、非一時的コンピュータ可読媒体は、実行されると、1つまたは複数のプロセッサに、複数のレンダリング対象と関連付けられる複数のコマンドを受信させ、ここで複数のコマンドが初期の順序で受信され、コマンド間のデータ依存関係に基づいて初期の順序と異なる順序で複数のコマンドの1つまたは複数を並べ替えることを含めて、複数のコマンドの実行順序を決定させ、決定された実行順序で複数のコマンドを実行させる、命令を記憶している。
本開示の1つまたは複数の例の詳細が、添付の図面および以下の説明に記載される。他の特徴、目的、および利点は、その説明および図面、ならびに特許請求の範囲から明らかになろう。
本開示の態様を実装するように構成され得るコンピューティングデバイスを示すブロック図である。 図1からのコンピューティングデバイスをより詳細に示すブロック図である。 本開示の技法による、例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。 本開示の態様による、コマンドを並べ替えるための例示的なプロセスを示す流れ図である。
従来のグラフィックス処理装置(GPU)のアーキテクチャは、グラフィックスデータのフレーム(画像と呼ばれ得る)をレンダリングするときに比較的大量のデータがシステムメモリから読み取られること、およびシステムメモリに書き込まれることを必要とし得る。モバイルアーキテクチャ(すなわち、モバイルデバイス上のGPU)は、データのフレーム全体を処理するために必要とされるメモリ帯域幅の容量を欠いていることがある。したがって、画像を複数のタイルへと分割するタイルベースのアーキテクチャが開発されてきた。タイルは、比較的少量(たとえば、256kB)の高帯域幅のオンチップグラフィックスメモリ(グラフィックスメモリまたはGMEMと呼ばれることがある)を使用して処理され得るように、サイズ決定される。すなわち、各タイルのサイズは、利用可能なオンチップグラフィックスメモリの量に依存し得る。画像は次いで、各タイルを個々に処理した後で再構築される。
タイルベースのレンダリングは、いくつかの処理パスに関して説明され得る。たとえば、タイルベースのレンダリングを実行するとき、GPUはビニングパスおよびレンダリングパスを実行することができる。ビニングパスに関して、GPUは、画像全体を処理し、ラスタライズされたプリミティブ(三角形など)を、ビンと呼ばれるタイルサイズのエリアへと区分することができる。たとえば、GPUは、画像全体に対するコマンドストリームを処理し、画像のラスタライズされたプリミティブをビンに割り当てる。
いくつかの例では、GPUは、ビニングパスの間に1つまたは複数の可視性ストリームを生成する。可視性ストリームは、最終的な画像において可視であるプリミティブと、最終的な画像において不可視であるプリミティブとを示す。たとえば、あるプリミティブは、1つまたは複数の他のプリミティブによって遮られることでシェーディングされた完成画像において見えない場合、不可視であり得る。
可視性ストリームは、画像全体のために生成されることがあり、または、ビンごとに生成されることがある(たとえば、各ビンに対して1つの可視性ストリーム)。一般に、可視性ストリームは、1と0の列を含んでよく、各々の「1」または「0」がある特定のプリミティブと関連付けられる。各々の「1」は、プリミティブが最終的な画像において可視であることを示す。各々の「0」は、プリミティブが最終的な画像において不可視であることを示す。可視性ストリームは、(以下で説明される)レンダリングパスを制御することができる。たとえば、可視性ストリームは、不可視のプリミティブのレンダリングをスキップするために使用され得る。したがって、実際にビンに寄与する、すなわち、最終的な画像において可視であるプリミティブだけがレンダリングおよびシェーディングされ、それにより、レンダリングおよびシェーディングの動作を減らす。
他の例では、GPUは、異なるプロセス(たとえば、上で説明された可視性ストリーム以外の、またはそれに加えて)を使用して、特定のビンに位置するものとしてプリミティブを分類することができる。別の例では、GPUは、所与のビンの中に存在するプリミティブだけを表現する「インデックス」のビンごとに、別々のリストを出力することができる。たとえば、GPUは最初、1つのデータ構造の中のすべてのプリミティブ(すなわち、頂点)を含み得る。GPUは、各ビンにおいて可視であるプリミティブだけを指し示す、各ビンの構造の中へのポインタのセットを生成することができる。したがって、可視のインデックスに対するポインタだけが、ビンごとのインデックスリストに含まれる。そのようなポインタは、上で説明された可視性ストリームと同様の目的を果たすことができ、ポインタは、ある特定のビンにおいてどのプリミティブ(およびプリミティブと関連付けられるピクセル)が含まれ可視であるかを示す。
いずれの場合も、各レンダリングパスは、クリア/アンリゾルブ段階、レンダリング段階、およびリゾルブ段階を含み得る。クリア/アンリゾルブ段階の間、GPUは、レンダリングされるべき新たなタイルのためのオンチップメモリを初期化することができる。たとえば、GPUは、オンチップメモリをある値に初期化し(クリア)、または、外部メモリからオンチップメモリへと値を読み込むことができる(アンリゾルブ)。レンダリング段階の間、GPUは、タイルを処理し、処理されたタイルをオンチップメモリに記憶することができる。すなわち、GPUは、ピクセル値を決定してピクセル値をオンチップメモリに書き込むために、グラフィックス処理パイプラインを実装することができる。リゾルブ段階の間、GPUは、オンチップメモリからフレームバッファと呼ばれ得る外部メモリにタイルの完成したピクセル値を移送することができる。画像のタイルのすべてについて終了した後で、たとえば、画像のタイルのすべてをフレームバッファに記憶した後で、画像は出力(たとえば、表示)の準備ができる。
GPUは、1つまたは複数のレンダリング対象を使用して、グラフィックスデータをレンダリングすることができる。一般に、レンダリング対象は、レンダリングされている画像のためのピクセルをGPUがその中で描画する、バッファである。レンダリング対象を作成することは、メモリ中の特定の領域を描画のために確保することを伴い得る。いくつかの事例では、画像は、複数のレンダリング対象からのコンテンツから構成され得る。たとえば、GPUは、いくつかのレンダリング対象に対するコンテンツをレンダリングし(たとえば、オフスクリーンレンダリング)、コンテンツを組み立てて最終的な画像(シーンとも呼ばれる)を生成することができる。
レンダリング対象は、いくつかのコマンドと関連付けられ得る。たとえば、レンダリング対象は通常、ある幅とある高さを有する。レンダリング対象は表面フォーマットも有することがあり、これは、どれだけのビットが各ピクセルに割り振られるか、および、ビットが赤、緑、青、およびアルファ(または別のカラーフォーマット)の間でどのように分けられるかを記述する。レンダリング対象のコンテンツは、フラグメントシェーダと関連付けられるコマンドなどの、1つまたは複数のレンダリングコマンドによって修正され得る。レンダリング対象はまた、深度ステンシルバッファとともに機能し得る。
プログラム開発者は、Microsoft Incによって開発されたDirectXなどのアプリケーションプログラミングインターフェース(API)を使用して、レンダリング対象および関連するコマンドを定義することができる。いくつかの例では、レンダリング対象は、Open Graphics Library (「OpenGL」) APIにおいて定義されるような、Frame Buffer Object (FBO)と同義であり得る。本開示の技法は全般にレンダリング対象に関して説明されるが、本明細書で説明される技法は、FBOまたは任意の他の同様の構造に適用され得る。
いくつかの事例では、GPUは、レンダリングの間にレンダリング対象を変更することがある。たとえば、(たとえば開発者によって決定されるような)コマンドの初期の実行順序は、GPUに、画像のレンダリングの間にレンダリング対象を切り替えさせ得る。レンダリング対象を変更することは、相対的に計算集約的であり、かつ/または時間集約的であり得る。たとえば、上で述べられたように、各レンダリングパスは、クリア/アンリゾルブ段階、レンダリング段階、およびリゾルブ段階を含む、3つの付随する段階を有する。レンダリング対象を変更するとき、GPUは、画像のすべてのタイルに対して3つすべての段階を実行する。たとえば、GPUは、すべてのタイルを処理し、次のレンダリング対象に移る前に、現在のレンダリング対象のためのメモリにすべての関連するデータをフラッシュする。
説明を目的とする例では、GPUは、いくつかの定められたレンダリング対象および関連するコマンドを有する、コマンドストリームを受信することができる。GPUは、第1のレンダリング対象と関連付けられるレンダリングコマンドを実行することができる。GPUは次いで、第2のレンダリング対象に切り替え、第2のレンダリング対象と関連付けられるレンダリングコマンドを実行することができる。GPUは次いで、第1のレンダリング対象に戻り、第1のレンダリング対象と関連付けられる別のレンダリングコマンドを実行することができる。この例では、GPUは、第1のレンダリング対象と関連付けられるデータを、第2のレンダリング対象に切り替える前に、外部メモリにフラッシュすることができる。加えて、(たとえば、第2のレンダリング対象の後で)第1のレンダリング対象に戻るとき、GPUは、第1のレンダリング対象の適切な状態が維持されることを確実にするために、第1のレンダリング対象と関連付けられるデータをGPUメモリへ戻すようにロードすることができる。このデータのフラッシュおよびデータのリロードは、レンダリングプロセスにおけるボトルネックとなり得る。
本開示の技法は、上で説明された非効率性を減らし得るような方法で、レンダリング対象と関連付けられるコマンドをコマンド間の依存関係に基づいて並べ替えることを含む。たとえば、本開示の態様によれば、GPUは、データをレンダリングする前に、データをレンダリングすることと関連付けられるロード動作(たとえば、外部メモリからGPUメモリへのデータのロード)および記憶動作(たとえば、GPUメモリから外部メモリへのデータの記憶)の数を減らすために、レンダリング対象と関連付けられるコマンドの実行順序を決定することができる。GPUは、(たとえば、APIを介して)コマンドが受信および/または定義される初期の順序と異なる順序の実行順序で、コマンドを並べ替えることができる。
説明を目的とする例では、GPU(および/またはGPUドライバ)は、レンダリングの前にレンダリング対象ごとのコマンドリストを生成することができる。たとえば、GPUは、特定のレンダリング対象と関連付けられるものとしてコマンドを特定し、そのコマンドをその特定のレンダリング対象のためのコマンドリストに追加することができる。GPUは、コマンド間のデータ依存関係を特定するまで(たとえば、以前に処理されたコマンドが依存するコマンドを特定するまで)、コマンドリストの各々にコマンドを追加し続けることができる。データ依存関係を特定すると、GPUは、コマンドリストに含まれるコマンドを実行することができる。GPUは次いで、レンダリング対象ごとのコマンドリストを組み立てるプロセスを再開することができる。
本開示の技法は、GPU(および/またはGPUドライバ)が、コマンドを並べ替えてロード動作および記憶動作を除去することを可能にし得る。たとえば、上で与えられた例に関して、レンダリングの前に、GPUは、第1のコマンドおよび第3のコマンドを含む第1のレンダリング対象のための第1のコマンドリストと、第2のコマンドを含む第2のレンダリング対象のための第2のコマンドリストとを生成することができる。レンダリングの間、GPUは、第2のレンダリング対象に切り替える前に、第1のレンダリング対象と関連付けられる第1のコマンドと第3のコマンドの両方を実行することができる。この方法では、GPUは、第2のコマンドを実行した後で、第1のレンダリング対象に戻る必要がない。
以下でより詳細に説明されるように、実行順序は、GPU、GPUドライバ(たとえば、中央処理装置(CPU)によって実行されるような)、またはこれらの組合せによって決定され得る。一例として、GPUドライバは、コマンドストリーム、ならびに、コマンドストリームに基づくレンダリング対象ごとのコマンドリストを生成することができる。別の例では、GPUは、GPUドライバからコマンドストリームを受信し、コマンドストリームに基づいてレンダリング対象ごとのコマンドリストを生成することができる。さらに別の例では、GPUドライバおよびGPUは、コマンドの実行順序を決定する責任を共有し得る。
図1は、グラフィックスデータをレンダリングするための、本開示の技法を実装し得るコンピューティングデバイス30を示すブロック図である。コンピューティングデバイス30の例は、限定はされないが、ワイヤレスデバイス、いわゆるスマートフォンを含む携帯電話またはセルラー電話、携帯情報端末(PDA)、ビデオディスプレイを含むビデオゲームコンソール、モバイルビデオゲームデバイス、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、テレビのセットトップボックス、タブレットコンピューティングデバイス、電子書籍リーダ、固定式の、またはモバイルのメディアプレーヤーなどを含む。
図1の例では、コンピューティングデバイス30は、CPUメモリ34を有する中央処理装置(CPU)32と、GPUメモリ38および1つまたは複数のシェーディングユニット40を有するグラフィックス処理装置(GPU)36と、ディスプレイユニット42と、レンダリングされたデータ45(「ren.data」)を記憶するディスプレイバッファユニット44と、ユーザインターフェース46と、データ記憶ユニット48とを含む。加えて、記憶ユニット48は、コンパイラ54を有するGPUドライバ50と、GPUプログラム52と、ローカルにコンパイルされるGPUプログラム56とを記憶し得る。
CPU32の例は、限定はされないが、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の集積論理回路もしくはディスクリート論理回路を含む。CPU32およびGPU36は図1の例では別々のユニットとして示されているが、いくつかの例では、CPU32およびGPU36は単一のユニットに統合され得る。CPU32は、1つまたは複数のアプリケーションを実行し得る。アプリケーションの例は、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、オーディオおよび/もしくはビデオキャプチャ、再生もしくは編集アプリケーション、ディスプレイユニット42を介して提示されるべき画像データの生成を開始する他のアプリケーションを含み得る。
図1に示される例では、CPU32はCPUメモリ34を含む。CPUメモリ34は、マシンコードまたはオブジェクトコードを実行する際に使用される、オンチップ記憶装置またはメモリを表し得る。CPUメモリ34は各々、一定の数のデジタルビットを記憶することが可能なハードウェアメモリレジスタを備え得る。CPU32は、たとえばシステムバスを通じてアクセスされ得る記憶ユニット48から値を読み取ること、またはそれに値を書き込むことよりも高速に、ローカルのCPUメモリ34から値を読取り、またはそれに値を書き込むことが可能であり得る。
GPU36は、グラフィカルな動作を実行するための1つまたは複数の専用プロセッサを表す。すなわち、たとえば、GPU36は、固定された機能を有する専用ハードウェア、および、グラフィックスをレンダリングしてGPUアプリケーションを実行するためのプログラム可能なコンポーネントであり得る。GPU36はまた、DSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の等価な集積論理回路もしくはディスクリート論理回路を含み得る。
GPU36はまた、マシンコードまたはオブジェクトコードを実行する際に使用されるオンチップ記憶装置またはメモリを表し得る、GPUメモリ38を含む。GPUメモリ38は各々、一定の数のデジタルビットを記憶することが可能なハードウェアメモリレジスタを備え得る。GPU36は、たとえばシステムバスを通じてアクセスされ得る記憶ユニット48から値を読み取ること、またはそれに値を書き込むことよりも高速に、ローカルのGPUメモリ38から値を読取り、またはそれに値を書き込むことが可能であり得る。
ディスプレイユニット42は、ビデオデータ、画像、テキスト、または見る者が利用するための任意の他のタイプのデータを表示することが可能なユニットを表す。ディスプレイユニット42は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、有機LED(OLED)、アクティブマトリックスOLED(AMOLED)ディスプレイなどを含み得る。
ディスプレイバッファユニット44は、ディスプレイユニット42のための、コンピュータにより生成されたグラフィックス、静止画像、ビデオフレームなど(レンダリングされたデータ45)のような、画像の提示のためのデータを記憶することに専用の、メモリまたは記憶デバイスを表す。ディスプレイバッファユニット44は、複数の記憶位置を含む2次元バッファを表し得る。ディスプレイバッファユニット44内の記憶位置の数は、ディスプレイユニット42上で表示されるべきピクセルの数と実質的に同様であり得る。たとえば、ディスプレイユニット42が640×480ピクセルを含むように構成される場合、ディスプレイバッファユニット44は、赤、緑、および青のピクセル値、または他の色値などの、ピクセルの色と強度の情報を記憶する、640×480の記憶位置を含み得る。
ディスプレイバッファユニット44は、GPU36によって処理されたピクセルの各々の最終的なピクセル値を記憶することができる。ディスプレイユニット42は、ディスプレイバッファユニット44から最終的なピクセル値を取り出し、ディスプレイバッファユニット44に記憶されているピクセル値に基づいて最終的な画像を表示することができる。
ユーザインターフェースユニット46は、ユーザが関わり得るユニット、またはそうでなければ、CPU32などのコンピューティングデバイス30の他のユニットと通信するためのインターフェースを表す。ユーザインターフェースユニット46の例は、限定はされないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含む。ユーザインターフェースユニット46はまた、タッチスクリーンであってよく、またはタッチスクリーンを含んでよく、タッチスクリーンは、ディスプレイユニット42の一部として組み込まれてよい。
記憶ユニット48は、1つまたは複数のコンピュータ可読記憶媒体を備え得る。記憶ユニット48の例は、限定はされないが、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、CD-ROMもしくは他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、フラッシュメモリ、または、所望のプログラムコードを命令もしくはデータ構造の形で記憶するために使用され、かつコンピュータもしくはプロセッサによってアクセスされ得る任意の他の媒体を含む。
いくつかの例示的な実装形態では、記憶ユニット48は、CPU32および/またはGPU36に、本開示ではCPU32およびGPU36に帰する機能を実行させる命令を含み得る。記憶ユニット48は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が搬送波または伝搬信号において具現化されないことを示し得る。しかしながら、「非一時的」という用語は、記憶ユニット48が可動ではないことを意味すると解釈されるべきではない。一例として、記憶ユニット48は、コンピューティングデバイス30から取り除かれてよく、別のデバイスに移されてよい。別の例として、記憶ユニット48と実質的に同様の記憶ユニットは、コンピューティングデバイス30に挿入され得る。いくつかの例では、非一時的記憶媒体は、経時的に変化し得るデータを(たとえば、RAM内に)記憶することができる。
記憶ユニット48は、GPUドライバ50およびコンパイラ54と、GPUプログラム52と、ローカルにコンパイルされるGPUプログラム56とを記憶する。GPUドライバ50は、GPU36にアクセスするためのインターフェースを提供するコンピュータプログラムまたは実行可能コードを表す。CPU32は、GPU36とインターフェースするために、GPUドライバ50またはその一部を実行し、この理由で、図1の例では、GPUドライバ50は、CPU32内の「GPUドライバ50」と名付けられた破線のボックスとして示されている。GPUドライバ50は、GPUプログラム52を含むCPU32によって実行されるプログラムまたは他の実行可能ファイルにアクセス可能である。
GPUプログラム52は、たとえばアプリケーションプログラミングインターフェース(API)を使用して、高水準(HL)プログラミング言語で書かれたコードを含み得る。APIの例は、Open-Computing Language (「OpenCL」)、Open Graphics Library (「OpenGL」)、およびMicrosoft Incによって開発されたようなDirectXを含む。一般に、APIは、関連するハードウェアによって実行される、所定の標準化されたコマンドのセットを含む。APIコマンドは、ハードウェアコンポーネントの仕様に関するユーザの知識を伴わずに、ユーザがGPUのハードウェアコンポーネントに対してコマンドを実行するように命令することを可能にする。
GPUプログラム52は、GPUドライバ50によって提供される1つまたは複数の機能を呼び出し、またはそうでなければ含み得る。CPU32は一般に、GPUプログラム52が埋め込まれるプログラムを実行し、GPUプログラム52に遭遇すると、GPUプログラム52をGPUドライバ50に渡す。CPU32は、この状況においてGPUドライバ50を実行して、GPUプログラム52を処理する。すなわち、たとえば、GPUドライバ50は、GPUプログラム52をGPU36によって実行可能なオブジェクトコードまたはマシンコードへとコンパイルすることによって、GPUプログラム52を処理することができる。このオブジェクトコードは、ローカルにコンパイルされるGPUプログラム56として、図1の例では示されている。
いくつかの例では、コンパイラ54は、GPUプログラム52が埋め込まれるプログラムの実行の間、GPUプログラム52をコンパイルするためにリアルタイムまたはほぼリアルタイムで動作することができる。たとえば、コンパイラ54は一般に、HLプログラミング言語に従って定義されたHL命令を低水準(LL)プログラミング言語のLL命令に変えるユニットを表す。コンパイルの後、これらのLL命令は、FPGA、ASICなど(たとえば、CPU32およびGPU36を含む)のような、特定のタイプのプロセッサまたは他のタイプのハードウェアによって実行されることが可能である。
図1の例では、コンパイラ54は、GPUプログラム52を含むHLコードを実行するとき、CPU32からGPUプログラム52を受信することができる。コンパイラ54は、GPUプログラム52をコンパイルして、LLプログラミング言語に適合するローカルにコンパイルされたGPUプログラム56を生成することができる。コンパイラ54は次いで、LL命令を含むローカルにコンパイルされたGPUプログラム56を出力する。
GPU36は一般に、ローカルにコンパイルされるGPUプログラム56(GPU36内で「ローカルにコンパイルされるGPUプログラム56」と名付けられた破線のボックスによって示されている)を受信し、その後、いくつかの事例では、GPU36は、1つまたは複数の画像をレンダリングし、レンダリングされた画像をディスプレイバッファユニット44に出力する。たとえば、GPU36は、ディスプレイユニット42において表示されるべきいくつかのプリミティブを生成することができる。プリミティブは、線(曲線、スプラインなどを含む)、点、円、楕円、多角形(ここで通常、多角形は1つまたは複数のプリミティブの集合として定義される)、または任意の他の2次元(2D)のプリミティブの1つまたは複数を含み得る。「プリミティブ」という用語はまた、立方体、円筒、球、円錐、三角錐、円環面などの、3次元(3D)のプリミティブを指すことがある。一般に、「プリミティブ」という用語は、ディスプレイユニット42を介して画像(またはビデオデータの文脈ではフレーム)として表示するためにGPU36によってレンダリングされることが可能な、任意の基本的な幾何学的な形状または要素を指す。
GPU36は、プリミティブと、プリミティブの(たとえば、色、テクスチャ、照明、カメラ構成、または他の態様を定義する)他の属性とを、(状態データにおいても規定され得る)1つまたは複数のモデル変換を適用することによって、いわゆる「ワールド空間」へと変換することができる。変換されると、GPU36は、アクティブカメラ(やはりカメラを定義する状態データにおいても規定され得る)のためのビュー変換を適用して、プリミティブおよび照明の座標をカメラ空間または視点空間へと変換することができる。GPU36はまた、頂点シェーディングを実行して、任意のアクティブな照明のビューにおけるプリミティブの外観をレンダリングすることができる。GPU36は、上のモデル空間、ワールド空間、またはビュー空間の1つまたは複数において、頂点シェーディングを実行し得る(しかし、これは一般にワールド空間において実行される)。
プリミティブがシェーディングされると、GPU36は、投影を実行して、一例として(-1, -1, -1)および(1, 1, 1)にある極点を有する単位立方体へと画像を投影することができる。この単位立方体は一般に、標準ビューボリュームと呼ばれる。モデルを視点空間から標準ビューボリュームに変換した後で、GPU36は、クリッピングを実行して、ビューボリューム内に少なくとも部分的に存在しないあらゆるプリミティブを除去することができる。言い換えると、GPU36は、カメラのフレーム内にないあらゆるプリミティブを除去することができる。GPU36は次いで、プリミティブの座標をビューボリュームからスクリーン空間にマッピングすることができ、プリミティブの3D座標をスクリーンの2D座標へと実質的に変える。
関連するシェーディングデータを有するプリミティブを画定する変換され投影された頂点が与えられると、GPU36は次いで、プリミティブをラスタライズすることができる。ラスタライズの間、GPU36は、プリミティブと関連付けられる任意のテクスチャを適用することができる(ここでテクスチャは状態データを備え得る)。GPU36はまた、ラスタライズの間に、深度テストとも呼ばれるZバッファアルゴリズムを実行して、プリミティブおよび/またはオブジェクトのいずれかが任意の他のオブジェクトによって閉塞されるかどうかを決定することができる。Zバッファアルゴリズムは、各プリミティブをスクリーンに描画する順序をGPU36が知るように、深度に従ってプリミティブを分類する。(たとえば、タイルベースのレンダリングのための)ビニングのとき、シェーディングはラスタライズの間は実行されないことがある。しかしながら、プリミティブをレンダリングするとき、GPU36は、プリミティブによってカバーされるスクリーンのピクセルの色を計算して設定することができる。GPU36は次いで、レンダリングされたピクセルをディスプレイバッファユニット44に出力する。
ディスプレイバッファユニット44は、画像全体がレンダリングされるまで、レンダリングされた画像のレンダリングされたピクセルを一時的に記憶することができる。ディスプレイバッファユニット44は、この文脈では画像フレームバッファと見なされ得る。ディスプレイバッファユニット44は、ディスプレイユニット42上に表示されるべきレンダリングされた画像を送信することができる。別々に示され説明されているが、いくつかの事例では、ディスプレイバッファユニット44は、記憶ユニット48の一部分を形成し得る。
いくつかの例では、GPU36は、タイルベースのレンダリングを実施して画像をレンダリングすることができる。たとえば、GPU36は、画像をタイルと呼ばれる複数の部分に分割することによって画像をレンダリングする、タイルベースのアーキテクチャを実装し得る。タイルは、GPUメモリ38のサイズに基づいてサイズ決定され得る。
タイルベースのレンダリングを実施するとき、GPU36は、ビニングパスおよび1つまたは複数のレンダリングパスを実行し得る。たとえば、ビニングパスに関して、GPU36は、画像全体を処理して、ラスタライズされたプリミティブを(GPUドライバ50によって設定される)初期ビニング構成のビンへと区分することができる。GPU36はまた、ビニングパスの間に可視性ストリームを生成することができ、これはビンに従って分離され得る。たとえば、各ビンは、画像のための可視性ストリームの対応する部分を割り当てられ得る。GPUドライバ50は、可視性ストリームにアクセスし、各ビンをレンダリングするためのコマンドストリームを生成することができる。
各レンダリングパスに関して、GPU36は、クリア/アンリゾルブ段階、レンダリング段階、およびリゾルブ段階を実行し得る。クリア/アンリゾルブ段階の間、GPU36は、レンダリングされるべき新たなタイルのためのGPUメモリ38を初期化する。レンダリング段階の間、GPU36は、タイルをレンダリングし、レンダリングされたタイルをGPUメモリ38に記憶することができる。すなわち、GPU36は、ピクセルシェーディングおよび他の動作を実行して、タイルの各ピクセルのピクセル値を決定し、ピクセル値をGPUメモリ38に書き込むことができる。リゾルブ段階の間、GPU36は、タイルの完成したピクセル値をGPUメモリ38からディスプレイバッファユニット44(または記憶ユニット48)に移送することができる。GPU36がこのようにしてフレームと関連付けられるタイルのすべてをレンダリングした後で、ディスプレイバッファユニット44は、完成した画像をディスプレイユニット42に出力することができる。
いくつかの事例では、GPU36は、ピクセル値をGPUメモリ38に記憶するのではなく、レンダリングの後にピクセル値をディスプレイバッファユニット44(または記憶ユニット48)に記憶することによって、データを直接レンダリングすることができる。直接のレンダリングにより、GPUドライバ50は、最終的な画像において可視ではないプリミティブを特定してスキップするために、可視性ストリームを使用しない。むしろ、プリミティブが可視であるかどうかにかかわらず、コマンドストリームは、すべてのプリミティブをレンダリングするための命令を含む。したがって、記憶ユニット48および/またはディスプレイバッファユニット44における不可視のプリミティブは、最終的に、1つまたは複数の他のプリミティブと関連付けられるピクセル値によって上書きされ得る。
上で説明されたレンダリングの前に、GPUドライバ50は、GPUプログラム52を使用してコマンドストリームを生成する。たとえば、コマンドストリームは、GPUプログラム52からの画像をレンダリングするための命令を含み得る。GPUドライバ50は、命令をコマンドストリームに追加することができ、それらの命令は、それらがストリームにおいて現れる順序でGPU36によって実行される。コマンドストリームは、GPUプログラム52からの画像を構成するプリミティブを定義することができる。
上で述べられたように、コマンドストリームは、画像に対する1つまたは複数のレンダリング対象を定義する命令を含み得る。レンダリング対象を作成すると、メモリ中のある特定の領域(たとえば、ディスプレイバッファユニット44または記憶ユニット48など)が描画のために確保され得る。いくつかの事例では、画像は、複数のレンダリング対象からのコンテンツから構成され得る。各レンダリング対象は、レンダリングコマンドを含む複数の関連するコマンドを有し得る。レンダリング対象はまた、深度ステンシルバッファとともに機能し得る。
いくつかの事例では、GPU36は、レンダリングの間にレンダリング対象を変更することがある。たとえば、GPUプログラム52は、コマンドストリームを生成するときにGPUドライバ50によって維持される初期の実行順序でコマンドを含み得る。GPU36がローカルにコンパイルされるGPUプログラム56を実行するときにレンダリング対象を切り替えるように、異なるレンダリング対象のためのコマンドがコマンドストリームにおいてインターリーブされ得る。
上で述べられたように、レンダリング対象を変更することは、レンダリング対象と関連付けられるロード動作および記憶動作が原因で、相対的に計算集約的かつ/または時間集約的であることがある。たとえば、レンダリング対象と関連付けられるコマンドを実行する前に、GPU36は、レンダリングされている各タイルに対して、必要なデータを記憶ユニット48またはディスプレイバッファユニット44からGPUメモリ38にロードすることができる。加えて、特定のレンダリング対象と関連付けられるコマンドを実行した後に、かつ新たなレンダリング対象に切り替える前に、GPU36は、レンダリングされている各タイルのために、その特定のレンダリング対象と関連付けられるデータをGPUメモリ38から記憶ユニット48またはディスプレイバッファユニット44にフラッシュすることができる。
本開示の態様によれば、GPU36(および/またはGPUドライバ50)は、複数の第1のコマンドを有する第1のレンダリング対象と複数の第2のコマンドを有する第2のレンダリング対象とを含む、複数のレンダリング対象と関連付けられるコマンドを受信することができる。GPU36(および/またはGPUドライバ50)は、コマンド間のデータ依存関係に基づいて、複数の第1のコマンドと複数の第2のコマンドとを含む複数のレンダリング対象のコマンドの実行順序を決定することができる。GPU36(および/またはGPUドライバ50)は次いで、決定された実行順序で複数のレンダリング対象のコマンドを実行することができる。いくつかの例では、決定された実行順序は、データをレンダリングすることと関連付けられるロード動作および記憶動作の数を減らすことができる。
いくつかの例では、GPU36(および/またはGPUドライバ50)は、コマンドが初期のコマンドストリームの初期順序と異なる順序となるように、実行順序を決定するときにコマンドを並べ替えることができる。説明を目的とする例では、コマンドストリームが第1のレンダリング対象Aおよび第2のレンダリング対象Bのための命令を含むと仮定する。加えて、コマンドストリームが、レンダリング対象Aと関連付けられる第1のコマンドと、レンダリング対象Bと関連付けられる第1のコマンドと、レンダリング対象Aと関連付けられる第2のコマンドと、レンダリング対象Bと関連付けられる第2のコマンドとを含む、コマンドの初期の実行順序を含むと仮定する。
上の例では、GPU36(および/またはGPUドライバ50)は、レンダリング対象Aおよびレンダリング対象Bのコマンドの実行順序を決定することができ、これは、コマンドストリームによって規定される初期の順序と異なり得る。たとえば、GPU36(および/またはGPUドライバ50)は、レンダリングの前にレンダリング対象ごとのコマンドリストを生成することができる。そのような例では、GPU36(および/またはGPUドライバ50)は、レンダリング対象Aのための第1のコマンドを用いてレンダリング対象コマンドリストAを構築し始めることができる。GPU36(および/またはGPUドライバ50)は次いで、レンダリング対象Bを特定し、レンダリング対象Bのための第1のコマンドを用いてレンダリング対象コマンドリストBを構築し始めることができる。GPU36(および/またはGPUドライバ50)は次いで、レンダリング対象Aのための第2のコマンドがレンダリング対象Bのためのコマンドに依存するかどうかを決定することができる。データの依存関係がない場合、GPU36(および/またはGPUドライバ50)は、レンダリング対象Aのための第2のコマンドをレンダリング対象コマンドリストAに追加することができる。同様に、データの依存関係がない場合、GPU36(および/またはGPUドライバ50)は、レンダリング対象Bのための第2のコマンドをレンダリング対象コマンドリストBに追加することができる。
したがって、この例では、レンダリング対象Aのためのコマンドを実行し、レンダリング対象Bに切り替え、レンダリング対象Bのためのコマンドを実行し、レンダリング対象Aに切り替えるのではなく、かつ、レンダリング対象Aのためのコマンドを実行し、レンダリング対象Bに切り替え、レンダリング対象Bのためのコマンドを実行するのではなく、GPU36は、決定された実行順序に従ってコマンドを実行することができる。たとえば、GPU36は、コマンドリストに基づいてコマンドを実行することができ、これにより、GPU36は、レンダリング対象コマンドリストAと関連付けられるすべてのコマンドを実行し、それに続いてレンダリング対象コマンドリストBと関連付けられるすべてのコマンドを実行することが可能になる。そうする際に、GPU36は、レンダリング対象Aとレンダリング対象Bとの間の単一の遷移しか行わず、このことは、レンダリング対象を切り替えることと関連付けられるロード動作および記憶動作の数を減らすことができる。
コンピューティングデバイス30は単なる例として与えられ、本開示の技法を実行する他のコンピューティングデバイス30は異なるように構成され得ることを理解されたい。たとえば、ディスプレイバッファユニット44は記憶ユニット48とは別に示され記述されているが、他の例では、ディスプレイバッファユニット44および記憶ユニット48は、同じコンポーネントに組み込まれ得る。
その上、コンピューティングデバイス30は、明快にするために、図1には示されない追加のモジュールまたはユニットを含み得ることを理解されたい。たとえば、コンピューティングデバイス30は、データを送信して受信するための送受信機ユニットを含んでよく、コンピューティングデバイス30と別のデバイスまたはネットワークとの間のワイヤレス通信または有線通信を可能にするための回路を含んでよい。コンピューティングデバイス30はまた、コンピューティングデバイス30がスマートフォンなどのモバイルワイヤレス電話である例では電話通信を実現するために図1にはいずれも示されていないスピーカーおよびマイクロフォンを含んでよく、または、コンピューティングデバイス30がメディアプレーヤーもしくはタブレットコンピュータである場合にスピーカーおよび/もしくはマイクロフォンを含んでよい。いくつかの事例では、ユーザインターフェースユニット46およびディスプレイユニット42は、コンピューティングデバイス30が、デスクトップコンピュータ、または外部のユーザインターフェースもしくはディスプレイとインターフェースするために装備された他のデバイスである例では、コンピューティングデバイス30の外部にあることがある。
図2は、コンピューティングデバイス30の複数の部分をより詳細に示すブロック図である。図2の例では、GPU36は、GPUメモリ38と、コマンドプロセッサ60と、1つまたは複数の処理ユニット64と、ラスタライザ68と、可視性ストリーム72とを含む。加えて、CPU32は、CPUメモリ34と、GPUドライバ50と、コンパイラ54と、コマンド組立ユニット76とを含む。図2のいくつかのユニットは高度に集積され得るが、概念的な目的のために別々に示されていることを理解されたい。その上、いくつかのユニットは、概念的な目的で単一のユニットに関して説明され得るが、1つまたは複数の機能ユニットを含み得る。
図2は、グラフィックスデータをレンダリングするための、本開示の技法を利用できるGPUの単なる一例として与えられる。他の例では、グラフィックスデータをレンダリングするための技法は、他のコンポーネントを有する様々な他のGPUによって実行され得る。たとえば、GPU36はまた、入力組立ユニット、テクスチャユニット、スケジューリングユニット、算術論理装置(ALU)、または他の機能固定のもしくはプログラム可能なGPUコンポーネントなどの、画像を分析してレンダリングすることに関する様々な他のコンポーネントおよびユニットを含み得る。
GPU36のコンポーネントは、記憶ユニット48(図1)などの外部メモリにアクセスするよりも比較的小さなレイテンシで、GPUメモリ38にアクセスすることができる。たとえば、GPUメモリ38は、GPU36とともにオンチップでありGPUコンポーネントに比較的近接しているオンチップメモリであってよく、GPU36内の専用のメモリバスと関連付けられてよい。記憶ユニット48に記憶されているデータにアクセスするために、対照的に、GPU36は、コンピューティングデバイス30の他のコンポーネント(CPU32など)とメモリバスを共有しなければならない可能性があり、これにより、利用可能な帯域幅がより限られたものになり得る。
上で説明されたような、高帯域幅で低レイテンシのGPUメモリ38を利用するために、GPU36は、タイルベースのレンダリングアーキテクチャを使用してグラフィックスをレンダリングすることができる。GPU36は、より小さな部分(たとえば、タイル)へと画像(シーンとも呼ばれ得る)を分割することができる。GPUメモリ38は、GPU36がタイルをレンダリングする間に、タイルと関連付けられるデータを記憶することができる。タイルをレンダリングした後で、GPU36は、メモリバスを介して、GPUメモリ38からディスプレイバッファユニット44に、レンダリングされたピクセルデータをリゾルブまたはコピーすることができる。
コマンドプロセッサ60は、GPUドライバ50からコマンドストリームを読み取ることを担い得る。たとえば、図1に関して上で説明されたように、GPUドライバ50は、コマンドストリームと呼ばれ得る、GPU36による実行のための命令を出すことができる。コマンドプロセッサ60は、コマンドストリームの命令を読み取り、かつ/または復号することができる。いくつかの例では、コマンドプロセッサ60は、コマンドストリームの命令を含むバッファから読み取ることができる。コマンドプロセッサ60はまた、GPU36において命令の実行を開始することができる。たとえば、コマンドプロセッサ60は、処理ユニット64によって実行されるべき命令をスケジューリングするスレッドスケジューラに命令を与えることができる。
処理ユニット64は、各々がプログラム可能な処理ユニットまたは機能固定の処理ユニットであり得る、1つまたは複数の処理ユニットを含み得る。いくつかの例では、プログラム可能なシェーダユニットは、並列に動作するように構成される複数の処理ユニット、たとえばSIMDパイプラインを含み得る。プログラム可能なシェーダユニットは、シェーダプログラム命令および実行状態レジスタ、たとえば、実行されているプログラム命令中の現在の命令またはフェッチされることになる次の命令を示すプログラムカウンタレジスタを記憶する、プログラムメモリを有し得る。処理ユニット64中のプログラム可能なシェーダユニットは、たとえば、頂点シェーダユニット、ピクセルシェーダユニット、ジオメトリシェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、テッセレーション制御シェーダユニット、テッセレーション評価シェーダユニット、計算シェーダユニット、および/または統合シェーダユニットを含み得る。
処理ユニット64は、命令を実行することを担い得る。たとえば、処理ユニット64は、1つまたは複数のシェーダプログラムを実行することを担い得る。シェーダプログラムは、いくつかの例では、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語などの高水準シェーディング言語で書かれるプログラムのコンパイルされたバージョンであり得る。いくつかの例では、シェーダプログラムはシェーダカーネルと呼ばれ得る。一般に、カーネルは、GPU36によって実行されるべきタスクまたは機能を定義するプログラムコードを含み得る。
したがって、処理ユニット64は、頂点シェーディング動作、ジオメトリシェーディング動作、およびピクセルシェーディング動作を担う、プログラム可能なシェーディングユニットであり得る。たとえば、処理ユニット64の1つまたは複数は、シーンの三角形のメッシュを生成するために、シーンを構成するプリミティブ(たとえば、三角形)の頂点の位置を決定することを担い得る。加えて、処理ユニット64の1つまたは複数は、三角形のメッシュからプリミティブを生成すること、ならびに、ピクセル充填動作およびシェーディング動作を担い得る。
複数の処理ユニット64は、同一に構成されてよく、または、特定のタスクを実行するように個別に構成されてよい。たとえば、処理ユニット64の1つは、ビニング動作を担う「ビニングシェーダ」として指定され得るが、残りの処理ユニット64は、上で説明された頂点シェーディング動作、ジオメトリシェーディング動作、またはピクセルシェーディング動作を実行することを担い得る。
ラスタライザ68は、いくつかの機能を実行するためにハードワイヤリングされる1つまたは複数の機能固定の処理ユニットを含み得る。機能固定のハードウェアは、たとえば1つまたは複数の制御信号を介して、異なる機能を実行するように構成可能であり得るが、機能固定のハードウェアは通常、ユーザによりコンパイルされるプログラムを受け入れることが可能なプログラムメモリを含まない。いくつかの例では、ラスタライザ68は、たとえば、深度テスト、シザーテスト、アルファブレンドなどの、ラスタ動作を実行するように構成され得る。
加えて、ラスタライザ68は、頂点情報を受信することができ、シーンのプリミティブの表現を生成することができる。いくつかの例では、ラスタライザ68は、受信された頂点情報に事前に定められた規則を適用して、どのプリミティブが最終的なシーンにおいて可視であるかを決定する。ラスタライザ68は、シーンの任意の不可視のプリミティブを間引き、または除去することができる。たとえば、ラスタライザ68は、zバッファリング(深度テストとも呼ばれ得る)を実行して、他のプリミティブによってカバーされるプリミティブを、したがって最終的なシーンにおいて可視ではないプリミティブを特定することができる。
可視性ユニット72は、機能固定のハードウェアコンポーネントおよび/またはプログラム可能な処理ユニットの任意の組合せを含み得る。可視性ユニット72は、ラスタライザ68からラスタライズされたデータを受信し、1つまたは複数の可視性ストリームを生成することができる。可視性ストリームを生成するために、可視性ユニット72は、ラスタライザ68によって決定されるように、可視のプリミティブの各々をビンに分配することができる。各ビンは、完成したシーンのタイルを表し得る。
いくつかの例では、可視性ユニット72は、ビンの各々のために別々の可視性ストリームを生成することができる。たとえば、可視性ユニット72は、ある特定のビンのための可視性ストリームを、その特定のビンのプリミティブのどのピクセルが可視であるかということと、その特定のビンのプリミティブのどのピクセルが不可視であるかということとを示すようにフラグを設定することによって、生成することができる。いくつかの態様によれば、可視性ユニット72は、最終的なシーンにおいてプリミティブが可視であることを示すために「1」というフラグ値を、および、最終的なシーンにおいてプリミティブが不可視であることを示すために「0」というフラグ値を設定することができる。いくつかの例では、可視性ユニット72は、画像の粗いラスタライズに従って動作し得る。すなわち、各ピクセルの可視性状態を示すのではなく、可視性ユニット72は、より粗い単位で(たとえば、4ピクセルのブロックに対して)可視性情報を決定することができる。
他の例では、可視性ユニット72は、特定のビンの中に位置しているものとしてプリミティブを分類するために、異なるプロセスを使用し得る。別の例では、可視性ユニット72は、所与のビンの中に存在するプリミティブだけを表現する「インデックス」のビンごとに、別々のリストを出力することができる。たとえば、可視性ユニット72は、最初、1つのデータ構造の中のすべてのプリミティブ(すなわち、頂点)を含み得る。可視性ユニット72は、各ビンにおいて可視であるプリミティブだけを指し示す、各ビンの構造の中へのポインタのセットを生成することができる。したがって、可視のインデックスに対するポインタだけが、ビンごとのインデックスリストに含まれる。
本開示の態様によれば、コマンド組立ユニット76は、コマンドストリームに含まれるコマンドの実行順序を決定することを担い得る。たとえば、コマンド組立ユニット76は、1つまたは複数のレンダリング対象と関連付けられる複数のコマンドを有するコマンドストリームを受信するように構成され得る。コマンドストリームは、初期の実行順序で複数のコマンドを含み得る。
コマンド組立ユニット76は、コマンド間にデータ依存関係が存在することまたは存在しないことに基づいて、コマンドストリームのコマンドの実行順序を決定することができる。いくつかの例では、コマンド組立ユニット76は、いくつかのレンダリング対象コマンドリストを使用して実行順序を決定することができ、レンダリング対象コマンドリストの各々が、それぞれのレンダリング対象と関連付けられるコマンドのリストを含む。コマンド組立ユニット76は、データ依存関係および/またはレンダリングモード(たとえば、直接レンダリングモード、ビニングされたレンダリングなど)の変化を特定するまで、コマンドリストにコマンドを追加することができる。
本開示の態様によれば、レンダリング対象コマンドリストはバケットと呼ばれ得る。たとえば、コマンド組立ユニット76は、レンダリング対象ごとにバケットを生成することができる。バケットは、FBO構成へのレンダリングの結果としての、単一のレンダリング対象のためのレンダリングコマンドの参照のチェーン(たとえば、FBO構成とも呼ばれる)として、表現され得る。このチェーンは、レンダリングのためにGPU36を準備するためのプリアンブルコマンド、実際のレンダリングコマンド(たとえば、描画)、および状態復元コマンド(たとえば、GPU36を描画のための特定の状態に復元するための)を含む、コマンドの混合物を含み得る。一般に、バケットは、特定のレンダリング対象のために出されたすべてのレンダリングコマンドを含む。バケットは、本明細書ではコマンドリストとも呼ばれ得る。
コマンド組立ユニット76は、レンダリングの前に2つ以上のバケットを生成することができる。GPU36は次いで、各バケットと関連付けられるコマンドを順番にレンダリングすることができる。一般に、GPU36は、バケットN+1のレンダリングコマンドの前に、バケットNのレンダリングコマンドを実行することができる。
いくつかの例では、以下でより詳細に説明されるように、GPU36およびコマンド組立ユニット76は、第1のコマンドバッファおよび第2のコマンドバッファを使用してレンダリングを制御することができる。たとえば、コマンド組立ユニット76は、第2のバッファを参照する第1のバッファのためのコマンドを決定することができる。第1のバッファは通常、描画コマンドまたはコピーコマンドなどのレンダリングコマンドを含まない。
第2のコマンドバッファは、レンダリングコマンド(たとえば、プリアンブルコマンド、描画コマンド、コピーコマンド、状態復元コマンドなどを含む)に対する参照を含み得る。この例では、コマンド組立ユニット76は、第2のコマンドバッファ中のレンダリングコマンドへの参照を組み立てる(および並べ替える)ことによって、実行順序を生成することができる。レンダリングすると、GPU36は第1のコマンドバッファを実行することができ、第1のコマンドバッファは、第2のコマンドバッファのコマンドへの参照を適切な順序で含む。
説明を目的としてGPUドライバ50とは別に示されているが、GPUドライバ50が本開示においてコマンド組立ユニット76に帰する技法を実行するように、コマンド組立ユニット76がGPUドライバ50と統合され得ることを理解されたい。しかしながら、上の技法はGPUドライバ50のコマンド組立ユニット76によって実行されるものとして説明されるが、コマンド組立ユニット76は、GPU36がコマンドをレンダリングするための実行順序を決定することを担うように、GPU36と統合され得ることを理解されたい。この例では、GPU36は、GPUドライバ50からコマンドストリームを受信し、コマンドストリームのコマンドをレンダリングする前に実行順序を決定することができる。
図3A〜図3Dは、本開示の技法による、例示的なコマンド組立プロセスを示す流れ図である。たとえば、図3A〜図3Dの一番左の列は、第1のレンダリング対象(レンダリング対象A)および第2のレンダリング対象(レンダリング対象B)と関連付けられるいくつかのレンダリングコマンドを示す。図3A〜図3Dのレンダリングコマンドは、(丸で囲まれた数字によって示されるように)1から6と名付けられる。図3A〜図3Dにおいて右にある列は、レンダリング対象Aおよびレンダリング対象Bと関連付けられるコマンドを実行順序で組み立てることを示す。すなわち、図3A〜図3Dは、レンダリング対象ごとのバケットを生成することを示し、各バケットはコマンドへの参照のリストを含む。
たとえば、上で述べられたように、いくつかの事例では、GPU(GPU36など)またはGPUドライバ(GPUドライバ50など)は、IB1と呼ばれ得る第1のバッファと、IB2と呼ばれ得る第2のバッファとを使用して、実行するコマンドを順序付けることができる。IB1は間接バッファ1と呼ばれ得るが、IB2は間接バッファ2と呼ばれ得る。IB1およびIB2は階層的であり得る。たとえば、IB1の中のコマンドは、IB2の中のコマンドストリーム全体を呼び出し得る。したがって、IB1は通常、IB2への参照を含み、レンダリングの間に使用され得る。IB2は、レンダリングコマンド(プリアンブルコマンド、描画コマンド、コピーコマンド、状態復元コマンドなどを含む)に対する参照を含み得る。このようにして、GPU36は、IB2においてコマンドのリストを構築し、コマンドの決定されたリストを実行のためにIB1にフラッシュすることができる。
したがって、図3A〜図3Dの例では、バケットは、FBO構成へのレンダリングの結果としての、単一のレンダリング対象のためのIB2参照のチェーン(たとえば、FBO構成)であり得る。このチェーンは、以下でより詳細に説明されるように、プリアンブルIB2、レンダリングIB2、および状態復元IB2(たとえば、プリアンブルIB2のサブセット)からのコマンドの混合物を含み得る。したがって、各バケットは、特定のレンダリング対象のために出されたレンダリングコマンドのすべてを含む。上で述べられたように、IB1に送られるのを待機している複数のバケットが存在し得る。一般に、GPU36は、バケットN+1のレンダリングコマンドの前に、バケットNの中のレンダリングコマンドを実行することができる。
GPU36が特定のレンダリング対象へとレンダリングするにつれて、GPU36はレンダリングIB2において蓄積し得る。あるレンダリング対象から別のレンダリング対象に切り替えるとき(またはIB1へのコマンドのフラッシュがあるとき)、GPU36は、現在のレンダリング対象のための既存のバケットへの蓄積されたレンダリングを保存することができ、または、新たなバケットエントリを生成することができる。各レンダリング対象は、レンダリングバケットIDに対応付けられてよく、レンダリングバケットIDはバケットの各々を識別する。
本開示の態様によれば、および以下でより詳細に説明されるように、GPU36は、レンダリング対象Aおよびレンダリング対象Bのコマンド間のデータ依存関係に基づいて、レンダリング対象Aおよびレンダリング対象Bのためのコマンドを初期の順序から並べ替えることができる。たとえば、動作の初期の順序は、レンダリング対象Aへのレンダリング、レンダリング対象Bへのレンダリング、レンダリング対象Aへのレンダリング、およびレンダリング対象Bへのレンダリングを含むと仮定する。本開示の態様によれば、レンダリング対象Aとレンダリング対象Bとの間にデータ依存関係がないとき、GPU36は、レンダリング対象Bからレンダリング対象Aへと戻るように切り替えて、GPU36は、レンダリング対象Aのための以前のコマンドが蓄積されたのと同じバケットに、レンダリング対象Aのためのコマンドを蓄積し続けることができる。同様に、GPU36は、レンダリング対象Bのためのコマンドを蓄積するために単一のバケットを使用することができる。GPU36は次いで、バケットをフラッシュすることができ、レンダリング対象Bのためのコマンドがレンダリング対象Aのためのコマンドに後続する。
本開示のいくつかの態様によれば、GPU36は、レンダリングコマンドと関連付けられるタイムスタンプに少なくとも部分的に基づいて、データ依存関係を決定することができる。たとえば、GPUドライバ50は、レンダリングコマンドが実行されることが意図される順序に基づいて、コマンドストリームの各レンダリングコマンドにタイムスタンプを発行することができる。したがって、GPU36は、現在のコマンドと関連付けられるいずれかのコマンドが現在のコマンドのタイムスタンプよりも早いタイムスタンプを有するかどうかを特定することによって、現在のコマンドに対するデータ依存関係を決定することができる。いくつかの例では、GPU36は加えて、または代替的に、GPU36がコマンドバッファにアクセスする方式に基づいて、データ依存関係を決定することができる。たとえば、GPU36は、ソースバッファ(データの読取り元)または宛先バッファ(データの書込み先)として、コマンドバッファを指定することができる。GPU36が以前のコマンドバッファの命令を実行するときのソースとして特定のコマンドバッファを参照した場合、GPU36は、後続のコマンドバッファにおいてその特定のコマンドバッファだけに書き込むことができる(たとえば、GPU36は読取りの前に書込みを並べ替えなくてよい)。同様に、GPU36がその特定のコマンドバッファを参照した場合、GPU36は、後続のコマンドバッファにおいてその特定のコマンドバッファだけから読み取ることができる(たとえば、GPU36は書込みの前に読取りを並べ替えなくてよい)。
上で説明された並べ替えは、レンダリング対象Aおよびレンダリング対象Bと関連付けられるロード動作および記憶動作の数を減らすのを助けることができ、それは、上で述べられたように、GPU36がレンダリング対象Aとレンダリング対象Bとの間で2回以上の遷移を行う必要がないからである。GPU36がレンダリングのバッチを終了するとき(たとえば、バケットに追加されるべき追加のコマンドがないとき)、GPU36は、バケットのためのレンダリングモードを決定することができる。例示的なレンダリングモードは、直接レンダリングモード、ソフトウェアを使用するビニングレンダリングモード、GPU36のハードウェアを使用するビニングレンダリングモード、または他のレンダリングモードを含む。GPU36は、バケットをIB1へとフラッシュするとき、決定されたレンダリングモードを使用することができる。いくつかの事例では、レンダリングモードは、バケットの一部であると見なされることがあり、バケットエントリが作成されるときに決定され、指定後は変化しないことがある。
バケットプロセスの例として、図3Aのステップ1に関して、GPU36は、レンダリング対象Aのためのカラーバッファを設定する命令を受信する(カラーバッファAを設定する)ことができ(90)、それに続いてレンダリング対象Aのための第1の描画コマンド(描画1-A)を受信することができる(92)。それに応答して、GPU36は、レンダリング対象AのためのバケットIDを生成する(AのレンダリングバケットIDを得る)ことによってレンダリング対象Aのためのバケットを構築し(94)、レンダリングされている画像のビンレイアウトを更新する(ビンレイアウトを更新する)(96)ことを開始し得る。GPU36は次いで、プリアンブルコマンドをバケットに追加する(プリアンブルを生成する)(98)ことができ、このプリアンブルコマンドは、GPU36に、描画のために既知の状態(たとえば、GPUメモリ38の状態を含む)に入るように指示し得る。GPU36は次いで、レンダリングIB2コマンド(レンダリングIB2-0)を追加し(100)、描画コマンド(描画1-A)を追加することができる(102)。
ステップ2において、GPU36は、レンダリング対象Aのための第2の描画コマンド(描画2-A)を受信することができる(104)。GPU36は、ステップ1の間に以前に生成された第2の描画コマンドをIB2に追加することができる。すなわち、GPU36は、第2のコマンド(描画2-A)をレンダリング対象AのためのIB2の終わりに追加する(レンダリングIB2-0 (106)、描画1-A (108)、描画2-A (110))。
図3Bはステップ3において処理を続け、ステップ3において、GPU36は、レンダリング対象Bとして特定される新たなレンダリング対象を受信する。たとえば、GPU36は、レンダリング対象Bのためのカラーバッファを設定する(カラーバッファBを設定する)命令を受信し(112)、それに続いて、レンダリング対象Bのための第1の描画コマンド(描画1-B)を受信する(114)。それに応答して、GPU36は、Aのレンダリングを処理し(Aのレンダリングを処理し)(116)、フラッシュモードを決定し(Aのフラッシュモードを決定し)(118)、このフラッシュモードは、レンダリング対象Aのためのバケットのためのレンダリングモードとも呼ばれ得る。図3Bに示される例では、GPU36は、レンダリング対象Aのためのビニングモード(現在のバケットID(A-ビニング))を決定し(120)、これは、プリアンブルコマンド(プリアンブルIB2)(122)およびレンダリング対象Aのためのバケットの中に現在あるコマンド(レンダリングIB2-0 (124)、描画1-A (126)、描画2-A (128))と関連付けられる。
加えて、GPU36は、レンダリング対象BのためのバケットIDを生成する(BのレンダリングバケットIDを得る)ことによってレンダリング対象Bのための新たなバケットを構築し(130)、レンダリングされている画像のビンレイアウトを更新する(ビンレイアウトを更新する)(132)ことを開始し得る。GPU36はまた、レンダリングのための適切な状態へとGPU36を戻すために、復元状態を生成する(134)ためのコマンドを含み得る。たとえば、コマンドを並べ替えるとき、GPU36は、新たなレンダリングコマンドを実行する前に、予想される状態(たとえば、GPUメモリ38に記憶されている適切なデータを有すること)に戻される。GPU36は次いで、レンダリングIB2コマンド(レンダリングIB2-0)を追加することができ(136)、このレンダリングIB2コマンドは今、レンダリング対象Aのための第1の描画コマンド(描画1-A)(138)、レンダリング対象Aのための第2の描画コマンド(描画2-A)(140)、およびレンダリング対象Bのための第1の描画コマンド(描画1-B)(142)を含む。
図3Bはステップ4において処理を続け、ステップ4において、GPU36は、レンダリング対象Bのための第2の描画コマンド(描画2-B)を受信する(144)。GPU36は、ステップ3の間に以前に生成された第2の描画コマンドをIB2に追加することができる。すなわち、GPU36は、レンダリング対象Bのための第2のコマンド(描画2-B)をIB2の終わりに追加するので、IB2は今、レンダリング対象Aのための第1の描画コマンド(描画1-A)(148)、レンダリング対象Aのための第2の描画コマンド(描画2-A)(150)、レンダリング対象Bのための第1の描画コマンド(描画1-B)(152)、およびレンダリング対象Bのための第2の描画コマンド(描画2-B)(154)を含む。
図3Cはステップ5において処理を続け、ステップ5において、GPU36は、レンダリング対象Aのための第3の描画コマンド(描画3-A)(158)のためにレンダリング対象Aに戻すように切り替える(カラーバッファAを設定する)(156)。レンダリング対象を切り替えるとき、GPU36は、先行するレンダリング対象のためにまとめられたあらゆる作業を処理する。したがって、GPU36は、Bのレンダリングを処理し(Bのレンダリングを処理し)(160)、レンダリング対象Bのためのバケットのフラッシュモードを決定する(Bのフラッシュモードを決定する)(162)。図3Bに関して説明されたように、(レンダリング対象Aと関連付けられる)バケットID0に対して(164)、GPU36は、レンダリング対象Aのためのプリアンブルコマンド(プリアンブルIB2)(166)と、レンダリングIB2-0 (168)、描画1-A(170)、描画2-A(172)を含むレンダリング対象Aのためのバケット中に現在あるコマンドとを含む。(レンダリング対象Bと関連付けられる)バケットID1に対する新たな追加として(174)、GPU36は、状態復元コマンド(状態復元IB2)(176)と、レンダリングIB2-0 (178)、描画1-B (180)、および描画2-B (182)を含む、レンダリング対象Bのためのバケット中に現在あるコマンドとを含む。
加えて、図3Cの例では、GPU36は、レンダリング対象Aのための最初の2つの描画コマンドとは別のIB2に、レンダリング対象Aのための第3の描画コマンドを含める。たとえば、GPU36は、レンダリング対象Aのための以前に生成されたバケットIDを得て(AのレンダリングバケットIDを得て)(184)、レンダリングされている画像のビンレイアウトを更新する(ビンレイアウトを更新する)(186)。GPU36はまた、レンダリングのための適切な状態へとGPU36を戻すために復元状態を生成するためのコマンド(復元状態生成)を含み得る(188)。GPU36は次いで、レンダリングIB2コマンド(レンダリングIB2-1)を追加することができ(190)、レンダリングIB2コマンドは今、レンダリング対象Aのための第3の描画コマンド(描画3-A)を含む(192)。図3Cは別のIB2(IB2-1)に含まれるものとしてレンダリング対象Aのための第3の描画コマンドを示すが、他の例では、レンダリング対象Aのための第3の描画コマンドは、レンダリング対象Aのための第1の2つの描画コマンド(IB2-0)とともにIB2に追加され得る。
図3Dはステップ6において処理を続け、ステップ6において、GPU36は、レンダリング対象Cとして特定される新たなレンダリング対象を受信する。たとえば、GPU36は、レンダリング対象Cのためのカラーバッファを設定する(カラーバッファCを設定する)命令を受信し(194)、それに続いて、レンダリング対象Cのための第1の描画コマンド(描画1-C)を受信する(196)。レンダリング対象Cがレンダリング対象Aまたはレンダリング対象Bのいずれかとデータ依存関係を有すると、説明を目的として仮定する。この例では、GPU36は、レンダリングコマンドを、レンダリングのためのコマンドバッファ(たとえば、IB1バッファ)にフラッシュすることができる。
別の例では、たとえばディスプレイユニット42においてレンダリングされるべきデータを提示するために、アプリケーションはIB2をフラッシュすることができる(198)。すなわち、GPU36は、データが出力される準備ができているとき、後続のコマンドにかかわらずIB2のフラッシュを強いることができる。いずれの場合も、上で述べられたように、レンダリング対象を切り替える(またはフラッシュする)前に、GPU36は、先行するレンダリング対象のためにまとめられたあらゆる作業を処理する。
したがって、GPU36は、レンダリング対象Aのレンダリングコマンドを処理することができる(200)。たとえば、GPU36は、レンダリング対象Aのためのバケットのフラッシュモードを決定する(Aのフラッシュモードを決定する)(202)。上で説明されたように、(レンダリング対象Aと関連付けられる)バケットID0に対して(204)、GPU36は、レンダリング対象Aのためのプリアンブルコマンド(プリアンブルIB2)(206)と、レンダリングIB2-0 (208)、描画1-A(210)、描画2-A(212)を含むレンダリング対象Aのためのバケット中に現在あるコマンドとを含む。(レンダリング対象Aと関連付けられる)バケットID0に対する新たな追加として、GPU36はまた、状態復元コマンド(状態復元IB2)(214)と、第2のIB2(レンダリングIB2-1)(216)および描画3-A(218)のレンダリング対象Aのためのバケット中に現在あるコマンドとを含む。加えて、(レンダリング対象Bと関連付けられる)バケットID1に対して(220)、GPU36は、状態復元コマンド(状態復元IB2)(222)と、レンダリングIB2-0 (224)、描画1-B (226)、および描画2-B (228)を含む、レンダリング対象Bのためのバケット中に現在あるコマンドとを含む。
このようにして、GPU36は、コマンドの初期の順序と異なる順序でコマンドをレンダリングするための実行順序を決定することができる。たとえば、GPU36は、図3A〜図3Dに関して説明された、順序付けられたIB2の参照を使用して、レンダリングのためのコマンドバッファを構築することができる。
図4は、本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。たとえば、本開示の態様によれば、GPU(GPU36など)は、「並べ替えオン」モードおよび「並べ替えオフ」モードを含む、2つの並べ替えモードで動作することができる。GPU36は、並べ替え機能が明示的に無効にされない限り、デフォルトで並べ替えオンモードで動作することができる。
並べ替えがオンにされるとき、各レンダリング対象がレンダリング対象へのレンダリングのためのバケットおよびコマンドと対応付けるGPU36が、バケットにおいて蓄積される。蓄積は、蓄積されたレンダリングコマンドのフラッシュモード(たとえば、直接レンダリングまたはビニングなどのレンダリングモード)が入来するレンダリングコマンドと一致する限り、以前に充填されたバケットにおいて継続し得る。図4に示される例では、レンダリング対象Aは、直接レンダリングモードおよびレンダリングコマンド240の第1のIB2チェーンと関連付けられる。レンダリング対象Bは、ハードウェアビニングレンダリングモードおよびレンダリングコマンド242の第2のIB2チェーンと関連付けられる。レンダリング対象Cは、直接レンダリングモードおよびレンダリングコマンド244の第3のIB2チェーンと関連付けられる。
すでにバケットと関連付けられているコマンド(たとえば、チェーン240〜244などのIB2チェーン)と異なるフラッシュモード(たとえば、レンダリングモード)と関連付けられるレンダリングコマンドに遭遇すると、GPU36は、並べ替えをオフにする(並べ替えオフモードに切り替える)ことができる。図4の例では、すでに定められているバケットと同じフラッシュモードを有しない例示的なコマンドは、ビニングモードを有するレンダリング対象Aのためのレンダリングコマンド、直接モードを有するレンダリング対象Bのためのレンダリングコマンド、ソフトウェアビニングモードを有するレンダリング対象Bのためのレンダリングコマンド、または、ビニングモードを有するレンダリング対象Cのためのレンダリングコマンドを含む。上で述べられたように、GPU36はまた、確立されているバケットのレンダリングコマンド間のデータ依存関係に遭遇するとき、並べ替えをオフにすることができる。データ依存関係の例は、レンダリング対象Aのためのテクスチャとして使用されているレンダリング対象Bのデータを用いて、レンダリング対象Aへとレンダリングすることであり得る。
並べ替えがオフにされた後で、GPU36はレンダリング対象のために新たなバケットを生成することができる。すなわち、GPU36は、バケットがある特定のレンダリング対象のためにすでに確立されている場合であっても、レンダリング対象のための以前に定められたバケットのコマンドと、レンダリング対象のコマンドを組み合わせなくてよい。図4に示される例では、GPU36は、レンダリング対象A(直接レンダリングモード)、レンダリング対象B(ハードウェアビニングレンダリングモード)、およびレンダリング対象C(直接レンダリングモード)のための、新たなバケットを生成することができる。
GPU36がレンダリングのためのハードウェアにレンダリングコマンドをフラッシュするとき、GPU36は、バケットと関連付けられるレンダリングモード(たとえば、直接レンダリングとビニングのいずれか)に従ってバケットの各々を処理し、バケットのコマンドをIB1に挿入し、IB1をレンダリングのために出す。各バケットエントリは、IB1に追加される作業の簡潔なバージョンとして概念化され得る。
図4の例は、並べ替えがオンまたはオフのいずれかであることに関して説明されたが、他の例では、GPU36は、並べ替えがバケットごとにオンまたはオフへと切り替えられ得るようなさらなる精緻な手法を使用することができる。そのような精緻化は、依存関係をさらに追跡することと引き換えに実現され得る。
図5A〜図5Bは、本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。いくつかの事例では、図5Aおよび図5Bに示される例示的なコマンドは、上の図3A〜図3Dに関して説明されたものと同様の方式の、実行順序の並べ替えであり得る。しかしながら、図5A〜図5Bの例は、いくつかのブロック移送(BLT)コマンドを含む。
一般に、BLTコマンドを実行することで、ソース位置から宛先位置にデータがコピーされる。ソース位置からコピーされるデータは、宛先位置のデータと組み合わされ得る。BLTコマンドは、現在のレンダリング対象と関連付けられることがあり、または関連付けられないことがある。BLTコマンドは、インラインで、または非同期的に実行され得る。たとえば、インラインBLTは、レンダリングコマンドとともに実行されてよく、BLTの宛先は、実行されているレンダリングコマンドのバッチのレンダリング対象と同じであり得る。非同期BLTは、レンダリング対象(またはソーステクスチャ)に対する依存関係を有しない。いくつかの例では、非同期BLTは、実行されているコマンドの第1のバッチへと並べ替えられ得る。
本開示の態様によれば、BLTコマンドは、他のレンダリングコマンドと同じ方式で扱われ得る。たとえば、BLTコマンドに遭遇すると、GPU(GPU36など)は、BLTコマンドが他のレンダリング対象とのデータ依存関係を有するかどうかを決定することができる。BLTコマンドが1つまたは複数の以前のコマンドの結果に依存する場合、GPU36は、上で説明されたように、他のレンダリングコマンドと同じ方式でBLTを扱うことができる。たとえば、GPU36は、現在のバケットをフラッシュし、または(フラッシュすることなく)新たなバケットを作成してコマンドの並べ替えをオフに切り替えることができる。
図5Aに示される例に関して、GPU36は、レンダリング対象Aのための第1のレンダリングコマンド(FBO A-描画0)と、レンダリング対象Aのための第2のレンダリングコマンド(FBO A-描画1)とを受信することができる。コマンドを受信したことに応答して、GPU36は、新たなバケット(バケットA)を生成し(260)、第1および第2のレンダリングコマンド(描画0、描画1)をバケットに追加することができる(262)。
GPU36は次いで、Y(例として任意の位置)のコンテンツをZ(別の任意の位置)にコピーするBLTコマンド(非同期BLT)を受信する。BLTコマンドを受信したことに応答して、GPU36は、新たなBLTバケット(非同期BLT IB2チェーン)を生成し(264)、YからZ BLTを追加することができる(266)。いくつかの例では、GPU36は、他のレンダリングコマンドとは別に非同期BLTコマンドを実行することができる。上で述べられたように、非同期BLTは、レンダリング対象に対する依存関係を有せず、GPU36は、実行されているコマンドの第1のバッチへと非同期BLTを並べ替えることができる。GPU36は一般に、実行されているコマンドの第1のバッチにおいて非同期BLTを実行し得るが、いくつかの例では、GPU36は、新たなバケットを作成し、新たなバケットが新たなレンダリング対象への新たな描画と関連付けられているかのように、新たなバケットを処理することができる。
GPU36は次いで、レンダリング対象Bのための第1のレンダリングコマンド(FBO B-描画0)を受信する。コマンドを受信したことに応答して、GPU36は、新たなバケット(バケットB)を生成し(268)、第1のレンダリングコマンド(描画0)をバケットに追加することができる(270)。
GPU36は次いで、W(任意の位置)のコンテンツをX(別の任意の位置)にコピーする追加の非同期BLTコマンドを受信する。BLTコマンドを受信したことに応答して、GPU36は、BLTコマンドを非同期BLT IB2チェーンに追加することができる(272)。
GPU36は次いで、レンダリング対象Aのための第3のレンダリングコマンド(FBO A-描画2)を受信する。コマンドを受信したことに応答して、GPU36は、レンダリング対象Aのための以前に生成されたバケットAにレンダリングコマンドを追加することができる(274)。いくつかの事例では、GPU36は、第3のレンダリングコマンド(描画2)が関連するデータ依存関係を有するかどうかを、コマンドをバケットAに追加する前に決定することができる。
GPU36は次いで、C(任意の位置)のコンテンツをレンダリング対象AにコピーするインラインBLTコマンドを受信する。BLTコマンドを受信したことに応答して、GPU36は、レンダリング対象Aのための以前に生成されたバケットAにBLTコマンドを追加することができる(276)。やはり、GPU36は、BLTコマンド(CからA)が関連するデータ依存関係を有するかどうかを、コマンドをバケットAに追加する前に決定することができる。
GPU36は次いで、レンダリング対象Bのための第2のレンダリングコマンド(FBO B-描画1)を受信する。コマンドを受信したことに応答して、GPU36は、レンダリング対象Bのための以前に生成されたバケットBに第2のレンダリングコマンドを追加することができる(278)。
GPU36は次いで、レンダリング対象Aから位置DへのBLTを受信し、これはデータ依存関係を含む。この時点で、GPU36は、データ依存関係が原因で、生成されたコマンドリストをフラッシュすることができる(280)。別の例では、GPU36は、コマンドの並べ替えをオフにすることができ、新たなBLTバケット(バケットBLT)を生成し(282)、BLTコマンドを新たなBLTバケットに追加することができる(284)。
並べ替えがオフにされると、GPU36は、入来するコマンドが以前に確立されたバケットを有するレンダリング対象と関連付けられる場合であっても、以前に生成されたバケットにコマンドを追加しなくてよい。したがって、GPU36がレンダリング対象Bのための第3のレンダリングコマンド(FBO-描画2)を受信するとき、GPU36は、新たなバケット(バケットB')を生成し、第3の並べ替えコマンドを新たなバケットに追加することができる(288)。他の例では、並べ替えはオフにされないことがある。たとえば、並べ替えをオフにすることは、追跡される依存関係の数を減らすのを助け得る。しかしながら、並べ替えがオフにされないと、レンダリング対象Bのための第3のレンダリングコマンド(FBO-描画2)がレンダリング対象Aまたは位置Dに対する依存関係を有しないとすれば、GPU36はレンダリング対象Bのための第3のレンダリングコマンド(FBO-描画2)を並べ替えることができる。この例では、GPU36は、レンダリング対象Bのための第2のレンダリングコマンド(描画1)に後続するように、レンダリング対象Bのための第3のレンダリングコマンド(FBO-描画2)を並べ替えることができる。
GPU36は次いで、レンダリングされたコンテンツを外部メモリにフラッシュするためのコマンド(フラッシュ)を受信することができる。フラッシュコマンドを受信したことに応答して、GPU36は、並べ替えられたレンダリングコマンドを使用してコマンドバッファ(IB1)を構築することができる。すなわち、GPU36は、バケットA、バケットB、バケットBLT、およびバケットB'のための決定されたコマンドリストを、順番にコマンドバッファに追加することができる。このようにして、GPU36は、コマンドバッファのレンダリングコマンドを受信して柔軟に並べ替えるまで、コマンドバッファの構築を延期する。
図6は、本開示の技法による、別の例示的なコマンド並べ替えのプロセスを示す流れ図である。具体的には、図6の例は、レンダリング対象の間に依存関係が存在する例を示す。たとえば、GPU36は、レンダリング対象Aのための第1のレンダリングコマンド(FBO A-描画0)と、レンダリング対象Aのための第2のレンダリングコマンド(FBO A-描画1)とを受信することができる。コマンドを受信したことに応答して、GPU36は、新たなバケット(バケットA)を生成し(300)、第1および第2のレンダリングコマンド(描画0、描画1)をバケットに追加することができる(302)。
GPU36は次いで、レンダリング対象Bのための第1のレンダリングコマンド(FBO B-描画0)を受信することができる。コマンドを受信したことに応答して、GPU36は、新たなバケット(バケットB)を生成し(304)、第1のレンダリングコマンド(描画0)をバケットに追加することができる(306)。
GPU36は次いで、テクスチャとしてレンダリング対象Bを使用するレンダリング対象Aのための第3のレンダリングコマンド(FBO A-描画2)を受信することができる。この例では、レンダリング対象Aのための第3のレンダリングコマンドはレンダリング対象Bに依存する。上で述べられたように、並べ替えの後で、現在のコマンドと関連付けられる読取りタイムスタンプが、現在のコマンドが依存するコマンドと関連付けられる書込みタイムスタンプよりも後にある場合、依存関係が特定され得る。
説明を目的とする例では、レンダリング対象Aの第3のレンダリングコマンド(FBO A-描画2)を並べ替えることで、レンダリング対象Aの第3のレンダリングコマンドがバケットAに追加される。しかしながら、レンダリング対象Aの第3のレンダリングコマンド(FBO A-描画2)は、レンダリング対象Bに依存する。すなわち、レンダリング対象Aの第3のレンダリングコマンド(FBO A-描画2)と関連付けられる読取りタイムスタンプは、レンダリング対象Bと関連付けられる書込みタイムスタンプの後にあり、それは、レンダリング対象Aの第3のレンダリングコマンドが適切に計算されるには、レンダリング対象Bのコンテンツが利用可能でなければならないからである。したがって、GPU36は、タイムスタンプに基づいてこの依存関係を特定し、並べ替えをオフにすることができる。
並べ替えをオフにした後で、GPU36は、コマンドリストをフラッシュし、または、レンダリング対象Aの第3のレンダリングコマンド(FBO A-描画2)(310)を含む新たなバケット(バケットA')を生成することができる(308)。
図7は、本開示の態様による、コマンドを並べ替えるための例示的なプロセスを示す流れ図である。図7(および本開示の他の箇所)に示されるプロセスは、CPU32および/またはGPU36(図1および図2)によって実行されるものとして説明されているが、本技法は、様々な他の処理ユニットによって実施され得る。
GPU36は、コマンドを初期の順序で受信する(320)。たとえば、GPU36は、コマンドがGPUプログラム52によって規定される順序で、GPUドライバ50からコマンドを受信することができる。コマンドは、複数のレンダリング対象のための複数のレンダリングコマンドを含み得る。
本開示の態様によれば、GPU36は、コマンドの実行順序を決定することができる(322)。実行順序を決定する際、GPU36は、コマンド間のデータ依存関係に基づいて、初期の順序と異なる順序でコマンドの1つまたは複数を並べ替えることができる。たとえば、本明細書で説明されるように、GPU36は、レンダリング対象ごとのコマンドリストを生成することができ、追加されるコマンドが別のコマンドの結果に依存しないとすれば、レンダリングコマンドをリストに追加することができる。そのような独立のコマンド(依存関係のないコマンド)は、より複雑な依存関係の追跡を伴わずに不要なレンダリング対象の切替えをなくすために並べ替えられてよく、これにより、GPU36によって実行されるロード動作および記憶動作の数を減らす。
GPU36は次いで、決定された実行順序を使用してコマンドを実行することができる(324)。たとえば、GPU36は、決定された実行順序で、生成されたレンダリングコマンドリストをコマンドバッファにフラッシュすることができる。GPU36は次いで、GPU36によって通常実行されるように、コマンドバッファからコマンドを実行することができる。
例に応じて、本明細書で説明される方法のいずれかのいくつかの行為またはイベントは、異なる順序で実行されてよく、一緒に追加され、統合され、または省略されてよい(たとえば、すべての説明された行為またはイベントが方法の実施のために必要であるとは限らない)ことも理解されたい。その上、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理または複数のプロセッサを通じて同時に実行されてもよい。
1つまたは複数の例において、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読媒体を備える製造品に1つまたは複数の命令またはコードとして記憶され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明される技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを搬送もしくは記憶するために使用されコンピュータによってアクセスされ得る、任意の他の媒体を備え得る。ディスク(disk)およびディスク(disc)は、本明細書において使用されるとき、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、一方、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に同じく含まれるものとする。
コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。加えて、いくつかの態様では、本明細書で説明される機能は、専用のハードウェアモジュールおよび/またはソフトウェアモジュール内で提供され得る。また、技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために、様々なコンポーネント、モジュール、またはユニットが説明されたが、それらのコンポーネント、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされてよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つもしくは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてよい。
様々な例が説明されてきた。これらの例および他の例は、以下の特許請求の範囲内に入る。
30 コンピューティングデバイス
32 中央処理装置
34 CPUメモリ
36 グラフィックス処理装置
38 GPUメモリ
42 ディスプレイユニット
44 ディスプレイバッファユニット
45 レンダリングされたデータ
46 ユーザインターフェースユニット
48 記憶ユニット
50 GPUドライバ
52 GPUプログラム
54 コンパイラ
56 ローカルにコンパイルされるGPUプログラム
60 コマンドプロセッサ
64 シェーダプロセッサ
68 ラスタライザ
72 可視性ユニット
76 コマンドストリーム再構成ユニット
92 描画1-A
100 レンダリングIB2-0
102 描画1-A
104 描画2-A
106 レンダリングIB2-0
108 描画1-A
110 描画2-A
114 描画1-B
120 現在のバケットID(A-ビニング)
122 プリアンブルIB2
124 レンダリングIB2-0
126 描画1-A
128 描画2-A
134 復元状態生成
136 レンダリングIB2-0
138 描画1-A
140 描画2-A
142 描画1-B
144 描画2-B
146 レンダリングIB2-0
148 描画1-A
150 描画2-A
152 描画1-B
154 描画2-B
158 描画3-A
164 バケットID0(A-ビニング)
166 プリアンブルIB2
168 レンダリングIB2-0
170 描画1-A
172 描画2-A
174 バケットID1(B-直接)
176 状態復元IB2
178 レンダリングIB2-0
180 描画1-B
182 描画2-B
188 復元状態生成
190 レンダリングIB2-1
192 描画3-A
196 描画1-C
198 フラッシュ
204 バケットID0(A-ビニング)
206 プリアンブルIB2
208 レンダリングIB2-0
210 描画1-A
212 描画2-A
214 状態復元IB2
216 レンダリングIB2-1
218 描画3-A
220 バケットID1(B-直接)
222 状態復元IB2
224 レンダリングIB2-0
226 描画1-B
228 描画2-B
240 IB2チェーン
242 IB2チェーン
244 IB2チェーン
260 バケットA
262 描画0、描画1
264 同期BLT IB2チェーン
266 YからZ
268 バケットB
270 描画0
272 WからX
274 描画2
276 インラインBLT CからA
278 描画1
280 フラッシュ
282 バケットBLT
284 AからD
286 バケットB'
288 描画2
300 バケットA
302 描画0、描画1
304 バケットB
306 描画0
308 バケットA'
310 描画2

Claims (30)

  1. グラフィックスデータをレンダリングするための方法であって、
    複数のレンダリング対象と関連付けられる複数のコマンドを受信するステップであって、前記複数のコマンドが初期の順序で受信される、ステップと、
    コマンド間のデータ依存関係に基づいて、前記初期の順序と異なる順序で前記複数のコマンドの1つまたは複数を並べ替えることを含む、前記複数のコマンドの実行順序を決定するステップと、
    前記決定された実行順序で前記複数のコマンドを実行するステップとを備える、方法。
  2. 前記複数のコマンドのそれぞれのコマンドに対して、前記実行順序を決定するステップが、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定するステップと、
    前記それぞれのコマンドがデータ依存関係を有しないとき、前記それぞれのコマンドと関連付けられるレンダリング対象のためのコマンドリストに前記それぞれのコマンドを追加するステップとを備える、請求項1に記載の方法。
  3. 前記複数のコマンドのそれぞれのコマンドに対して、前記実行順序を決定するステップが、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定するステップと、
    前記それぞれのコマンドがデータ依存関係を有するとき、前記初期の順序において前記それぞれのコマンドに後続するコマンドを並べ替えることなく、前記実行順序を決定するステップとを備える、請求項1に記載の方法。
  4. 前記複数のコマンドのそれぞれのコマンドに対して、前記実行順序を決定するステップが、
    前記それぞれのコマンドの同じレンダリング対象の前記初期の順序における前のコマンドと異なる関連するレンダリングモードを前記それぞれのコマンドが有するかどうかを決定するステップと、
    前記それぞれのコマンドが異なる関連するレンダリングモードを有するとき、前記初期の順序において前記それぞれのコマンドに後続する前記複数のコマンドを並べ替えることなく、前記実行順序を決定するステップとを備える、請求項1に記載の方法。
  5. 前記実行順序を決定するステップが、前記複数のレンダリング対象の各レンダリング対象のためのレンダリング対象ごとのコマンドリストを生成するステップと、前記レンダリング対象ごとのコマンドリストをコマンドバッファに追加するステップとを備える、請求項1に記載の方法。
  6. 前記レンダリング対象ごとのコマンドリストの各々にレンダリングモードを割り当てるステップをさらに備える、請求項5に記載の方法。
  7. 前記複数のコマンドと関連付けられる1つまたは複数のタイムスタンプに基づいて、前記複数のコマンド間の依存関係を決定するステップをさらに備える、請求項1に記載の方法。
  8. 前記複数のコマンドを受信するステップが、第1のレンダリング対象の第1のコマンドを受信するステップと、第2のレンダリング対象の第2のコマンドを受信するステップと、第1のレンダリング対象の第3のコマンドを受信するステップとを備え、
    データ依存関係に基づいて前記実行順序を決定するステップが、前記第1のレンダリング対象の前記第3のコマンドが前記第2のレンダリング対象の前記第2のコマンドの結果に依存するかどうかを決定するステップを備え、
    前記第3のコマンドが前記第2のコマンドに依存しないとき、前記コマンドの前記並べ替えが、前記コマンドを実行するステップが前記第2のコマンドの前に前記第3のコマンドを実行するステップを備えるように、前記第3のコマンドおよび前記第2のコマンドを並べ替えるステップを備える、請求項1に記載の方法。
  9. グラフィックスデータをレンダリングするためのデバイスであって、
    複数のレンダリング対象と関連付けられる複数のコマンドを記憶するように構成されるメモリと、
    1つまたは複数のプロセッサとを備え、前記1つまたは複数のプロセッサが、
    前記複数のレンダリング対象と関連付けられる前記複数のコマンドを受信することであって、前記複数のコマンドが初期の順序で受信される、ことと、
    コマンド間のデータ依存関係に基づいて、前記初期の順序と異なる順序で前記複数のコマンドの1つまたは複数を並べ替えることを含めて、前記複数のコマンドの実行順序を決定することと、
    前記決定された実行順序で前記複数のコマンドを実行することと
    を行うように構成される、デバイス。
  10. 前記実行順序を決定するために、前記複数のコマンドのそれぞれのコマンドに対して、前記1つまたは複数のプロセッサが、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定し、
    前記それぞれのコマンドがデータ依存関係を有しないとき、前記それぞれのコマンドと関連付けられるレンダリング対象のためのコマンドリストに前記それぞれのコマンドを追加するように構成される、請求項9に記載のデバイス。
  11. 前記実行順序を決定するために、前記複数のコマンドのそれぞれのコマンドに対して、前記1つまたは複数のプロセッサが、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定し、
    前記それぞれのコマンドがデータ依存関係を有するとき、前記初期の順序において前記それぞれのコマンドに後続するコマンドを並べ替えることなく、前記実行順序を決定するように構成される、請求項9に記載のデバイス。
  12. 前記実行順序を決定するために、前記複数のコマンドのそれぞれのコマンドに対して、前記1つまたは複数のプロセッサが、
    前記それぞれのコマンドの同じレンダリング対象の前記初期の順序における前のコマンドと異なる関連するレンダリングモードを前記それぞれのコマンドが有するかどうかを決定し、
    前記それぞれのコマンドが異なる関連するレンダリングモードを有するとき、前記初期の順序において前記それぞれのコマンドに後続する前記複数のコマンドを並べ替えることなく、前記実行順序を決定するように構成される、請求項9に記載のデバイス。
  13. 前記実行順序を決定するために、前記1つまたは複数のプロセッサが、前記複数のレンダリング対象の各レンダリング対象のためのレンダリング対象ごとのコマンドリストを生成し、前記レンダリング対象ごとのコマンドリストをコマンドバッファに追加するように構成される、請求項9に記載のデバイス。
  14. 前記1つまたは複数のプロセッサがさらに、前記レンダリング対象ごとのコマンドリストの各々にレンダリングモードを割り当てるように構成される、請求項13に記載のデバイス。
  15. 前記1つまたは複数のプロセッサがさらに、前記複数のコマンドと関連付けられる1つまたは複数のタイムスタンプに基づいて、前記複数のコマンド間の依存関係を決定するように構成される、請求項9に記載のデバイス。
  16. 前記複数のコマンドを受信するために、前記1つまたは複数のプロセッサが、第1のレンダリング対象の第1のコマンドを受信し、第2のレンダリング対象の第2のコマンドを受信し、第1のレンダリング対象の第3のコマンドを受信するように構成され、
    データ依存関係に基づいて前記実行順序を決定するために、前記1つまたは複数のプロセッサが、前記第1のレンダリング対象の前記第3のコマンドが前記第2のレンダリング対象の前記第2のコマンドの結果に依存するかどうかを決定するように構成され、
    前記第3のコマンドが前記第2のコマンドに依存しないとき、前記コマンドを並べ替えるために、前記1つまたは複数のプロセッサは、前記コマンドを実行するために前記1つまたは複数のプロセッサが前記第2のコマンドの前に前記第3のコマンドを実行するように構成されるように、前記第3のコマンドおよび前記第2のコマンドを並べ替えるように構成される、請求項9に記載のデバイス。
  17. 前記1つまたは複数のプロセッサがグラフィックス処理装置(GPU)に含まれる、請求項9に記載のデバイス。
  18. グラフィックスデータをレンダリングするためのデバイスであって、
    複数のレンダリング対象と関連付けられる複数のコマンドを受信するための手段であって、前記複数のコマンドが初期の順序で受信される、手段と、
    コマンド間のデータ依存関係に基づいて、前記初期の順序と異なる順序で前記複数のコマンドの1つまたは複数を並べ替えることを含めて、前記複数のコマンドの実行順序を決定するための手段と、
    前記決定された実行順序で前記複数のコマンドを実行するための手段とを備える、デバイス。
  19. 前記複数のコマンドのそれぞれのコマンドに対して、前記実行順序を決定するための前記手段が、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定するための手段と、
    前記それぞれのコマンドがデータ依存関係を有しないとき、前記それぞれのコマンドと関連付けられるレンダリング対象のためのコマンドリストに前記それぞれのコマンドを追加するための手段とを備える、請求項18に記載のデバイス。
  20. 前記複数のコマンドのそれぞれのコマンドに対して、前記実行順序を決定するための前記手段が、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定するための手段と、
    前記それぞれのコマンドがデータ依存関係を有するとき、前記初期の順序において前記それぞれのコマンドに後続するコマンドを並べ替えることなく、前記実行順序を決定するための手段とを備える、請求項18に記載のデバイス。
  21. 前記複数のコマンドのそれぞれのコマンドに対して、前記実行順序を決定するための前記手段が、
    前記それぞれのコマンドの同じレンダリング対象の前記初期の順序における前のコマンドと異なる関連するレンダリングモードを前記それぞれのコマンドが有するかどうかを決定するための手段と、
    前記それぞれのコマンドが異なる関連するレンダリングモードを有するとき、前記初期の順序において前記それぞれのコマンドに後続する前記複数のコマンドを並べ替えることなく、前記実行順序を決定するための手段とを備える、請求項18に記載のデバイス。
  22. 前記実行順序を決定するための前記手段が、前記複数のレンダリング対象の各レンダリング対象のためのレンダリング対象ごとのコマンドリストを生成するための手段と、前記レンダリング対象ごとのコマンドリストをコマンドバッファに追加するための手段とを備える、請求項18に記載のデバイス。
  23. 前記レンダリング対象ごとのコマンドリストの各々にレンダリングモードを割り当てるための手段をさらに備える、請求項22に記載のデバイス。
  24. 前記複数のコマンドと関連付けられる1つまたは複数のタイムスタンプに基づいて、前記複数のコマンド間の依存関係を決定するための手段をさらに備える、請求項18に記載のデバイス。
  25. 命令を記憶した非一時的コンピュータ可読媒体であって、前記命令が、実行されると、1つまたは複数のプロセッサに、
    複数のレンダリング対象と関連付けられる複数のコマンドを受信することであって、前記複数のコマンドが初期の順序で受信される、ことと、
    コマンド間のデータ依存関係に基づいて前記複数のコマンドの実行順序を決定することであって、前記実行順序を決定することが、前記初期の順序と異なる順序で前記複数のコマンドの1つまたは複数を並べ替えることを含む、ことと、
    前記決定された実行順序で前記複数のコマンドを実行することと
    を行わせる、非一時的コンピュータ可読媒体。
  26. 前記実行順序を決定するために、前記複数のコマンドのそれぞれのコマンドに対して、前記命令が、前記1つまたは複数のプロセッサに、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定させ、
    前記それぞれのコマンドがデータ依存関係を有しないとき、前記それぞれのコマンドと関連付けられるレンダリング対象のためのコマンドリストへ前記それぞれのコマンドを追加させる、請求項25に記載の非一時的コンピュータ可読媒体。
  27. 前記実行順序を決定するために、前記複数のコマンドのそれぞれのコマンドに対して、前記命令が、前記1つまたは複数のプロセッサに、
    前記それぞれのコマンドが前記複数のコマンドの別のコマンドとのデータ依存関係を有するかどうかを決定させ、
    前記それぞれのコマンドがデータ依存関係を有するとき、前記初期の順序において前記それぞれのコマンドに後続するコマンドを並べ替えることなく、前記実行順序を決定させる、請求項25に記載の非一時的コンピュータ可読媒体。
  28. 前記実行順序を決定するために、前記複数のコマンドのそれぞれのコマンドに対して、前記命令が、前記1つまたは複数のプロセッサに、
    前記それぞれのコマンドの同じレンダリング対象の前記初期の順序における前のコマンドと異なる関連するレンダリングモードを前記それぞれのコマンドが有するかどうかを決定させ、
    前記それぞれのコマンドが異なる関連するレンダリングモードを有するとき、前記初期の順序において前記それぞれのコマンドに後続する前記複数のコマンドを並べ替えることなく、前記実行順序を決定させる、請求項25に記載の非一時的コンピュータ可読媒体。
  29. 前記実行順序を決定するために、前記命令が、前記1つまたは複数のプロセッサに、前記複数のレンダリング対象の各レンダリング対象のためのレンダリング対象ごとのコマンドリストを生成させ、前記レンダリング対象ごとのコマンドリストをコマンドバッファへ追加させる、請求項25に記載の非一時的コンピュータ可読媒体。
  30. 前記命令がさらに、前記1つまたは複数のプロセッサに、前記レンダリング対象ごとのコマンドリストの各々へレンダリングモードを割り当てさせる、請求項29に記載の非一時的コンピュータ可読媒体。
JP2017508972A 2014-08-21 2015-08-03 グラフィックス処理におけるレンダリング対象コマンドの並べ替え Expired - Fee Related JP6310151B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/465,371 US9799088B2 (en) 2014-08-21 2014-08-21 Render target command reordering in graphics processing
US14/465,371 2014-08-21
PCT/US2015/043466 WO2016028482A1 (en) 2014-08-21 2015-08-03 Render target command reordering in graphics processing

Publications (3)

Publication Number Publication Date
JP2017530444A true JP2017530444A (ja) 2017-10-12
JP2017530444A5 JP2017530444A5 (ja) 2018-02-08
JP6310151B2 JP6310151B2 (ja) 2018-04-11

Family

ID=53879796

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017508972A Expired - Fee Related JP6310151B2 (ja) 2014-08-21 2015-08-03 グラフィックス処理におけるレンダリング対象コマンドの並べ替え

Country Status (5)

Country Link
US (1) US9799088B2 (ja)
EP (1) EP3183713B1 (ja)
JP (1) JP6310151B2 (ja)
CN (1) CN106575228B (ja)
WO (1) WO2016028482A1 (ja)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US10521874B2 (en) * 2014-09-26 2019-12-31 Intel Corporation Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
US10796397B2 (en) * 2015-06-12 2020-10-06 Intel Corporation Facilitating dynamic runtime transformation of graphics processing commands for improved graphics performance at computing devices
US9916634B2 (en) * 2015-06-12 2018-03-13 Intel Corporation Facilitating efficient graphics command generation and execution for improved graphics performance at computing devices
US10535114B2 (en) * 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US10614614B2 (en) 2015-09-29 2020-04-07 Adshir Ltd. Path tracing system employing distributed accelerating structures
US10297068B2 (en) 2017-06-06 2019-05-21 Adshir Ltd. Method for ray tracing augmented objects
US10565776B2 (en) 2015-12-12 2020-02-18 Adshir Ltd. Method for fast generation of path traced reflections on a semi-reflective surface
US12008704B2 (en) 2016-01-28 2024-06-11 Snap Inc. System for photo-realistic reflections in augmented reality
US10614612B2 (en) 2018-06-09 2020-04-07 Adshir Ltd. Fast path traced reflections for augmented reality
US11244482B2 (en) * 2017-01-27 2022-02-08 Mitsubishi Electric Corporation Image drawing device, image drawing method, and image drawing program
US10672175B2 (en) * 2017-04-17 2020-06-02 Intel Corporation Order independent asynchronous compute and streaming for graphics
KR102569086B1 (ko) * 2017-11-20 2023-08-22 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 태스크 병렬 처리 방법, 장치, 시스템, 기억 매체 및 컴퓨터 기기
CN108089958B (zh) * 2017-12-29 2021-06-08 珠海市君天电子科技有限公司 Gpu测试方法、终端设备和计算机可读存储介质
US10475152B1 (en) 2018-02-14 2019-11-12 Apple Inc. Dependency handling for set-aside of compute control stream commands
CN108305316A (zh) * 2018-03-08 2018-07-20 网易(杭州)网络有限公司 基于ar场景的渲染方法、装置、介质和计算设备
US10733690B2 (en) * 2018-05-17 2020-08-04 Intel Corporation GPU mixed primitive topology type processing
US10269167B1 (en) * 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
US10699468B2 (en) 2018-06-09 2020-06-30 Adshir Ltd. Method for non-planar specular reflections in hybrid ray tracing
CN110825467B (zh) * 2018-08-09 2023-10-24 北京微播视界科技有限公司 渲染方法、装置、硬件装置和计算机可读存储介质
US11017581B1 (en) 2020-01-04 2021-05-25 Adshir Ltd. Method for constructing and traversing accelerating structures
US20210287418A1 (en) * 2020-03-10 2021-09-16 Advanced Micro Devices, Inc. Graphics processing unit render mode selection system
CN111179151B (zh) * 2020-04-13 2020-07-10 南京芯瞳半导体技术有限公司 一种提高图形渲染效率的方法、装置及计算机存储介质
US11538221B2 (en) 2020-05-21 2022-12-27 Samsung Electronics Co., Ltd. Re-reference aware tile walk order for primitive binner
US11055812B1 (en) * 2020-05-26 2021-07-06 Apple Inc. Opportunistic launch of idempotent geometry stage render operations
CN114697621B (zh) * 2020-12-14 2024-06-18 安霸国际有限合伙企业 使用反指数函数优化的边缘保留噪声降低算法
KR20220123883A (ko) 2021-03-02 2022-09-13 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템의 동작 방법
US11880924B2 (en) * 2021-03-26 2024-01-23 Advanced Micro Devices, Inc. Synchronization free cross pass binning through subpass interleaving
US11615504B2 (en) * 2021-04-13 2023-03-28 Qualcomm Incorporated Methods and apparatus for scalable primitive rate architecture for geometry processing
US11657471B2 (en) * 2021-06-23 2023-05-23 Qualcomm Incorporated Methods and apparatus for constant data storage
US11734787B2 (en) * 2021-09-17 2023-08-22 Qualcomm Incorporated Foveated binned rendering associated with sample spaces
CN113827965B (zh) * 2021-09-28 2022-09-13 完美世界(北京)软件科技发展有限公司 游戏场景中样条线的渲染方法、装置及设备
US11983809B2 (en) * 2022-05-23 2024-05-14 Rockwell Collins, Inc. A-Buffer dynamic allocation
CN116185640B (zh) * 2023-04-20 2023-08-08 上海励驰半导体有限公司 基于多gpu的图像命令处理方法、装置、存储介质及芯片

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006123547A1 (ja) * 2005-05-20 2006-11-23 Sony Computer Entertainment Inc. 情報処理装置、システム、方法およびプロセッサ
US20120017069A1 (en) * 2010-07-16 2012-01-19 Qualcomm Incorporated Out-of-order command execution
US20130127891A1 (en) * 2011-08-31 2013-05-23 Byungmoon Kim Ordering and Rendering Buffers for Complex Scenes with Cyclic Dependency
US20140118362A1 (en) * 2012-10-26 2014-05-01 Nvidia Corporation Barrier commands in a cache tiling architecture
US20140184623A1 (en) * 2012-12-28 2014-07-03 Qualcomm Incorporated REORDERING OF COMMAND STREAMS FOR GRAPHICAL PROCESSING UNITS (GPUs)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7489318B1 (en) 2004-05-20 2009-02-10 Nvidia Corporation Apparatus and method for managing memory to generate a texture from a render target when forming graphical images
US8232991B1 (en) 2006-11-03 2012-07-31 Nvidia Corporation Z-test result reconciliation with multiple partitions
US8448067B2 (en) * 2006-12-07 2013-05-21 Sony Computer Entertainment America, LLC Graphics command management tool and methods for analyzing performance for command changes before application modification
US8269780B2 (en) * 2007-06-07 2012-09-18 Apple Inc. Batching graphics operations with time stamp tracking
WO2011065929A1 (en) 2007-11-23 2011-06-03 Mercury Computer Systems, Inc. Multi-user multi-gpu render server apparatus and methods
US8509569B2 (en) * 2008-02-11 2013-08-13 Apple Inc. Optimization of image processing using multiple processing units
US8325177B2 (en) 2008-12-29 2012-12-04 Microsoft Corporation Leveraging graphics processors to optimize rendering 2-D objects
US9324175B2 (en) * 2009-09-11 2016-04-26 Nvidia Corporation Memory coherency in graphics command streams and shaders
US9117302B2 (en) * 2011-11-30 2015-08-25 Qualcomm Incorporated Switching between direct rendering and binning in graphics processing using an overdraw tracker
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006123547A1 (ja) * 2005-05-20 2006-11-23 Sony Computer Entertainment Inc. 情報処理装置、システム、方法およびプロセッサ
US20120017069A1 (en) * 2010-07-16 2012-01-19 Qualcomm Incorporated Out-of-order command execution
US20130127891A1 (en) * 2011-08-31 2013-05-23 Byungmoon Kim Ordering and Rendering Buffers for Complex Scenes with Cyclic Dependency
US20140118362A1 (en) * 2012-10-26 2014-05-01 Nvidia Corporation Barrier commands in a cache tiling architecture
US20140184623A1 (en) * 2012-12-28 2014-07-03 Qualcomm Incorporated REORDERING OF COMMAND STREAMS FOR GRAPHICAL PROCESSING UNITS (GPUs)

Also Published As

Publication number Publication date
US20160055608A1 (en) 2016-02-25
EP3183713B1 (en) 2019-09-18
US9799088B2 (en) 2017-10-24
JP6310151B2 (ja) 2018-04-11
CN106575228B (zh) 2019-11-08
CN106575228A (zh) 2017-04-19
WO2016028482A1 (en) 2016-02-25
EP3183713A1 (en) 2017-06-28

Similar Documents

Publication Publication Date Title
JP6310151B2 (ja) グラフィックス処理におけるレンダリング対象コマンドの並べ替え
JP6709038B2 (ja) グラフィックス・パイプラインを遂行する方法及びコンピューティング装置
JP6162215B2 (ja) グラフィックス処理におけるパッチされたシェーディング
JP5960368B2 (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
US9836810B2 (en) Optimized multi-pass rendering on tiled base architectures
KR101563098B1 (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
KR102003655B1 (ko) 그래픽 프로세싱에서 셰도우 레이들에 대한 트리 횡단을 위한 시작 노드 결정
US9569811B2 (en) Rendering graphics to overlapping bins
JP6042584B2 (ja) 加えられたインライン動作とともに、ビン毎の可視情報に基づくレンダリングコマンドの条件付き実行
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
KR20190093579A (ko) z-컬링 후 중첩 단편들 식별 또는 제거
KR20230048441A (ko) 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법
EP3427229B1 (en) Visibility information modification
JP2018510416A (ja) 単一パスの表面スプラッティング

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171218

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171218

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20171218

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20180129

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180315

R150 Certificate of patent or registration of utility model

Ref document number: 6310151

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees