JP5770375B2 - シェーダ動作の同期化 - Google Patents

シェーダ動作の同期化 Download PDF

Info

Publication number
JP5770375B2
JP5770375B2 JP2014521633A JP2014521633A JP5770375B2 JP 5770375 B2 JP5770375 B2 JP 5770375B2 JP 2014521633 A JP2014521633 A JP 2014521633A JP 2014521633 A JP2014521633 A JP 2014521633A JP 5770375 B2 JP5770375 B2 JP 5770375B2
Authority
JP
Japan
Prior art keywords
graphics data
shader
producer
buffer
producer shader
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.)
Expired - Fee Related
Application number
JP2014521633A
Other languages
English (en)
Other versions
JP2014521183A (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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2014521183A publication Critical patent/JP2014521183A/ja
Application granted granted Critical
Publication of JP5770375B2 publication Critical patent/JP5770375B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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
    • 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

Landscapes

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

Description

本開示は、グラフィックスシェーダに関し、より詳細には、グラフィックス処理ユニット(GPU)での1つまたは複数のグラフィックスシェーダの実行に関する。
閲覧可能なコンテンツを生成するデバイスは、一般にグラフィックス処理ユニット(GPU)を含む。GPUは、グラフィックスデータを処理して、ディスプレイ上のピクセルのピクセル値を生成し得る。グラフィックスデータを処理するために、GPUは、シェーダと呼ばれることが多い、1つまたは複数のシェーダプログラムを実行し得る。シェーダプログラムは、GPUがシェーダプログラムを実行するときに、シェーダプログラムによって定義された機能をGPUに実行させるソフトウェアプログラムであり得る。たとえば、シェーダプログラムは、GPUがグラフィックスデータを処理して、ディスプレイ上のピクセルのピクセル値を生成すべきである方法を定義し得る。
一般に、本開示は、グラフィックス処理ユニット(GPU)上での1つまたは複数のシェーダプログラムの実行を同期化するための技法について説明する。いくつかの例では、1つのシェーダプログラムは、別のシェーダプログラムによって使用または利用されるグラフィックスデータを生成し得る。グラフィックスデータを生成するシェーダプログラムをプロデューサシェーダ(producer shader)と呼ぶことができ、生成されたグラフィックスデータを使用するシェーダプログラムをコンシューマシェーダ(consumer shader)と呼ぶことができる。本開示で説明する例示的な技法のいくつかは、GPUに、プロデューサシェーダおよびコンシューマシェーダの実行を同期化させることができ、その結果として、プロデューサシェーダがコンシューマシェーダによって使用されるべきグラフィックスデータを生成するまで、GPUはコンシューマシェーダを実行しない。
一例では、本開示は、グラフィックス処理ユニット(GPU)を用いて、グラフィックスデータを作成するプロデューサシェーダを実行することと、GPUを用いて、プロデューサシェーダによって作成されたグラフィックスデータを第1のバッファの記憶ロケーションに記憶することとを含む方法について説明する。この方法は、グラフィックスデータの作成が完了すると、GPU上で実行されるプロデューサシェーダを用いて、プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶することをさらに含む。
別の例では、本開示は、第1のバッファと、第2のバッファと、グラフィックス処理ユニット(GPU)とを含む装置について説明する。GPUは、グラフィックスデータを作成するプロデューサシェーダを実行し、プロデューサシェーダによって作成されたグラフィックスデータを第1のバッファの記憶ロケーションに記憶するように動作可能である。GPUはまた、グラフィックスデータの作成が完了すると、GPU上で実行されるプロデューサシェーダを用いて、プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶するように動作可能である。
別の例では、本開示は、第1のバッファと、第2のバッファと、グラフィックス処理ユニット(GPU)とを含む装置について説明する。GPUは、グラフィックスデータを作成するプロデューサシェーダを実行するための手段と、プロデューサシェーダによって作成されたグラフィックスデータを第1のバッファの記憶ロケーションに記憶するための手段とを含む。GPUはまた、グラフィックスデータの作成が完了すると、GPU上で実行されるプロデューサシェーダを用いて、プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶するための手段を含む。
別の例では、本開示は、非一時的なコンピュータ可読記憶媒体について説明する。非一時的なコンピュータ可読記憶媒体は、1つまたは複数のプロセッサに、グラフィックス処理ユニット(GPU)を用いて、グラフィックスデータを作成するプロデューサシェーダを実行させ、GPUを用いて、プロデューサシェーダによって作成されたグラフィックスデータを第1のバッファの記憶ロケーションに記憶させる命令を含む。命令はまた、グラフィックスデータの作成が完了すると、GPU上で実行されるプロデューサシェーダを用いて、プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶する命令を含む。
1つまたは複数の例の詳細は、添付の図面および以下の説明に記載されている。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
本開示の1つまたは複数の態様を実施するように動作可能であり得るグラフィックス処理ユニット(GPU)の一例を示すブロック図。 本開示の1つまたは複数の態様を実施するために図1のGPUを組み込むことができるコンピューティングデバイスの一例を示すブロック図。 図1に示す、本開示の1つまたは複数の態様によるGPUの例示的な動作を示すフローチャート。
一般に、本開示は、グラフィックス処理ユニット(GPU)の様々な処理の同期化に関する。本開示の技法は、一般に、メディアプレーヤなどのビデオデバイス、セットトップボックス、携帯電話などのワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ディスプレイデバイス、テレビジョンなどに適用可能である。
グラフィックスデータを処理するために、GPUは、様々なシェーダプログラムを起動、たとえば、実行する。場合によっては、1つのシェーダプログラムによって作成されたグラフィックスデータは、別のシェーダプログラムによって使用される。たとえば、ジオメトリシェーダは、グラフィックスデータを受け取り、プリミティブの頂点の座標ならびにプリミティブの頂点の色値および他の属性などの、複数のプリミティブに対するグラフィックスデータを作成することができる。ピクセルシェーダは、複数のプリミティブに対するグラフィックスデータを受け取り、シェーディング、イルミネーティング、およびブレンディングなどの、複数のプリミティブに対するグラフィックス処理を実行して、ディスプレイ上で表示するピクセルをレンダリングすることができる。
前出の例では、ジオメトリシェーダを「プロデューサ」シェーダの一例と見なすことができ、ピクセルシェーダを「コンシューマ」シェーダの一例と見なすことができる。いくつかの例では、プロデューサシェーダがグラフィックスデータを作成する前に、コンシューマシェーダがグラフィックスデータを使用しようとしないように、GPUは、プロデューサシェーダとコンシューマシェーダとを同期化する必要がある場合がある。たとえば、場合によっては、GPUは、いつプロデューサシェーダを実行するかを前もって知っていてもよいが、プロデューサシェーダがどのくらいのグラフィックスデータを作成するかを前もって知っていなくてもよい。プロデューサシェーダが作成するグラフィックスデータの量は可変であるので、GPUは、いつプロデューサシェーダがグラフィックスデータの作成を完了するかを前もって知っていなくてもよい。
さらに、いくつかの例では、複数のプロデューサシェーダ、および複数のコンシューマシェーダが存在し得る。これらの例のいくつかでは、グラフィックスデータに基づいて、コンシューマシェーダは、別のプロデューサシェーダがグラフィックスデータの作成を完了するまで、プロデューサシェーダのうちの1つからのグラフィックスデータを使用することができない場合がある。たとえば、GPUが第1のプロデューサシェーダを実行し、その後に、第2のプロデューサシェーダを実行すると仮定する。各プロデューサシェーダが作成するデータ量の可変性により、第1のプロデューサシェーダがグラフィックスデータの作成を完了する前に第2のプロデューサシェーダがグラフィックスデータの作成を完了する可能性があり得る。しかしながら、プロデューサシェーダの各々によって作成されたグラフィックスデータに基づいて、第2のコンシューマシェーダが第2のプロデューサシェーダからのグラフィックスデータを使用する前に、第1のコンシューマシェーダが第1のプロデューサシェーダからのグラフィックスデータを使用する必要がある場合がある。
いくつかの例では、GPUを含むデバイスはまた、プロデューサシェーダ記憶バッファと、プロデューサシェーダカウントバッファとを含み得る。プロデューサシェーダ記憶バッファおよびプロデューサシェーダカウントバッファは、同じメモリデバイスまたは異なるメモリデバイス内で形成され得る。
いくつかの例では、プロデューサシェーダ記憶バッファは、複数の記憶ロケーションを含み得る。GPUは、各記憶ロケーションを1つのプロデューサシェーダに割り当て得る。各プロデューサシェーダは、作成されたそのグラフィックスデータを、プロデューサシェーダ記憶バッファ内のそれに割り当てられた記憶ロケーションに記憶し得る。たとえば、第1のプロデューサシェーダによって作成されたグラフィックスデータを第1の記憶ロケーションに記憶することができ、第2のプロデューサシェーダによって作成されたグラフィックスデータを第2の記憶ロケーションに記憶することができる、などである。この例では、GPUは、第1の記憶ロケーションを第1のプロデューサシェーダに割り当てることができ、第2の記憶ロケーションを第2のプロデューサシェーダに割り当てることができる、などである(追加のプロデューサシェーダについても同様である)。
記憶ロケーションの各々のサイズ、たとえば、各記憶ロケーションが記憶することができるグラフィックスデータの量は、プロデューサシェーダが作成することができるグラフィックスデータの最大量に基づき得る。たとえば、GPUは、プロデューサシェーダがどのくらいのグラフィックスデータを作成するかを前もって知らなくてもよいが、GPUは、プロデューサシェーダが作成するグラフィックスデータの最大量を前もって知っていてもよい。一例として、任意のプロデューサシェーダが作成し得るグラフィックスデータの最大量は、4キロバイト(KB)である。したがって、この例では、GPUが実行するプロデューサシェーダごとに、GPUは、そのプロデューサシェーダにプロデューサシェーダ記憶バッファ内の4KBの記憶ロケーションを割り当てて、そのプロデューサシェーダによって作成されたグラフィックスデータを記憶することができる。
プロデューサシェーダカウントバッファは、複数の記憶ロケーションも含み得る。GPUは、プロデューサシェーダカウントバッファ内の各記憶ロケーションを各プロデューサシェーダに割り当てることができる。GPUは、プロデューサシェーダカウントバッファ内の記憶ロケーションと、プロデューサシェーダ記憶バッファ内の記憶ロケーションとを、プロデューサシェーダに割り当てるので、同じプロデューサシェーダに割り当てられるプロデューサシェーダカウントバッファ内の各記憶ロケーションおよびプロデューサシェーダ記憶バッファ内の各記憶ロケーションは、互いに対応するものと見なされ得る。
プロデューサシェーダカウントバッファ内の記憶ロケーションの各々は、プロデューサシェーダ記憶バッファ内のそれに対応する記憶ロケーションに記憶されたグラフィックスデータの量を示す値を記憶し得る。言い換えれば、プロデューサシェーダカウントバッファ内の記憶ロケーションは、プロデューサシェーダカウントバッファ内のその記憶ロケーションに割り当てられたプロデューサシェーダによって作成されたグラフィックスデータの量を示す値を記憶し得る。
一例として、プロデューサシェーダカウントバッファ内の記憶ロケーションは、プロデューサシェーダによって作成されたプリミティブの数を示す値を記憶し得る。たとえば、上記で説明したように、ジオメトリシェーダは、複数のプリミティブに対するグラフィックスデータを作成し得る。この例では、ジオメトリシェーダに割り当てられたプロデューサシェーダカウントバッファ内の記憶ロケーションは、ジオメトリシェーダによって作成されたプリミティブの数を示す値を記憶し得る。したがって、プロデューサシェーダカウントバッファ内の割り当てられた記憶ロケーションに、ジオメトリシェーダによって作成されたプリミティブの数を示す値を記憶することは、ジオメトリシェーダがグラフィックスデータの作成を完了したことを示し得る。
いくつかの例では、各プリミティブに対するジオメトリシェーダによって作成されたグラフィックスデータのバイト数は一定であり得るが、ジオメトリシェーダによって作成されたプリミティブの数は可変であり得る。たとえば、ジオメトリシェーダによって作成された各プリミティブは100バイトで定義され得るが、ジオメトリシェーダによって作成されたプリミティブの数は可変であり得る。
説明のために、一例として、第1のプロデューサシェーダ、たとえば、第1のジオメトリシェーダが5個のプリミティブのデータを作成し、かつ第2のプロデューサシェーダが10個のプリミティブのデータを作成すると仮定する。また、各プリミティブが100バイトで定義されると仮定する。この例では、第1のプロデューサシェーダに割り当てられたプロデューサシェーダカウントバッファ内の記憶ロケーションは5の値を記憶することができ、かつ第2のプロデューサシェーダに割り当てられたプロデューサシェーダカウントバッファ内の記憶ロケーションは10の値を記憶することができる。また、この例では、第1のプロデューサシェーダに割り当てられたプロデューサシェーダ記憶バッファ内の記憶ロケーションは、500バイトのグラフィックスデータ、たとえば、5個のプリミティブ*プリミティブ当たり100バイトを記憶することができ、かつ第2のプロデューサシェーダに割り当てられたプロデューサシェーダ記憶バッファ内の記憶ロケーションは、1キロバイトのグラフィックスデータ、たとえば、10個のプリミティブ*プリミティブ当たり100バイトを記憶し得る。
例示的な実装形態のいくつかでは、プロデューサシェーダは、各プロデューサシェーダがグラフィックスデータの作成を完了した後、プロデューサシェーダ記憶バッファ内のそれに割り当てられた記憶ロケーションに記憶されたグラフィックスデータの量を示す値を出力することができる。たとえば、プロデューサシェーダがグラフィックスデータを作成しているとき、GPUは作成されたグラフィックスデータを、そのプロデューサシェーダに割り当てられたプロデューサシェーダ記憶バッファ内の記憶ロケーションに、記憶のために出力することができる。プロデューサシェーダがグラフィックスデータの作成を完了した後、プロデューサシェーダは次いで、そのプロデューサシェーダによって作成されたグラフィックスデータの量を示す値を、そのプロデューサシェーダに割り当てられたプロデューサシェーダカウントバッファの記憶ロケーション内に記憶することができる。
プロデューサシェーダがグラフィックスデータの作成を完了するまで、プロデューサシェーダに、プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を出力させる、少なくとも2つの異なる技法があり得る。一例として、プロデューサシェーダは、プロデューサシェーダが作成したプリミティブの量を示すカウンタ値を維持するように設計され得る。たとえば、プロデューサシェーダのプログラマは、プロデューサシェーダ用のソースコードを書くことができ、そのソースコードの一部は、プロデューサシェーダに、プロデューサシェーダが作成したプリミティブの量を示すカウンタ値を維持させる命令であってもよい。
コンパイラは、カウンタ値に対する命令を含むソースコードをコンパイルして、オブジェクトコードを生成し得る。コンパイルされたオブジェクトコードとして適用されるソースコードの命令は、実行されると、プロデューサシェーダに、プロデューサシェーダが作成する毎回のプリミティブの後でそのカウンタ値を増分させることができる。プロデューサシェーダがグラフィックスデータの作成を完了した後、プロデューサシェーダはカウンタ値を、そのプロデューサシェーダに割り当てられたカウントバッファ内の記憶ロケーションに出力することができる。たとえば、ソースコードは、GPUによって実行されると、プロデューサシェーダがグラフィックスデータの作成を完了した後に、プロデューサシェーダに、カウンタ値をそのプロデューサシェーダに割り当てられたカウントバッファ内の記憶ロケーションに出力させる命令を含み得る。
別の例として、プロデューサシェーダプログラムが、カウンタに対する命令をソースコード内に含めないことが考えられ得る。たとえば、いくつかのレガシーなプロデューサシェーダプログラムのソースコードは、カウンタ値に対する命令、またはグラフィックスデータの作成の完了後にカウンタ値を出力する命令を含まない場合がある。そのような例では、コンパイラは、コンパイル中に、プロデューサシェーダにカウンタ値を維持させ、プロデューサシェーダがグラフィックスデータの作成を完了した後に、作成されたグラフィックスデータの量を示すカウンタ値を出力させるオブジェクトコード命令を挿入することが可能であるように開発され得る。
たとえば、GPU以外のプロセッサ上で実行されるコンパイラは、各プロデューサシェーダのソースコードをコンパイルするように構成することができ、また、GPUによって実行可能である命令、たとえば、プロデューサシェーダのオブジェクトコードを生成し、GPUにプロデューサシェーダの機能を実行させるように構成することができる。プロデューサシェーダの命令、たとえば、プロデューサシェーダのオブジェクトコードを生成する際、コンパイラは、実行されると、プロデューサシェーダに、プロデューサシェーダの機能を実行させる命令に加えて、実行されると、プロデューサシェーダに、プロデューサシェーダが作成したプリミティブの量を示すカウンタ値を維持させる命令を含み得る。コンパイラは、プロデューサシェーダがグラフィックスデータの作成を完了した後に、プロデューサシェーダに、プロデューサシェーダに含まれるカウンタ値をそのプロデューサシェーダに割り当てられたカウントバッファ内の記憶ロケーションに出力させる命令もプロデューサシェーダのオブジェクトコード内に含み得る。
このようにして、プロデューサシェーダのソースコードがカウンタ値(たとえば、カウンタ値に対する命令)を含まない例においてさえ、本開示の態様は、コンパイラがカウンタ値を生成するための命令をプロデューサシェーダのオブジェクトコード内に含むことを可能にし得る。たとえば、コンパイラは、プロデューサシェーダのソースコードをコンパイルして、オブジェクトコードを生成し得る。オブジェクトコードを生成するプロセスにおいて、コンパイラはカウンタ値に対する命令をオブジェクトコード内に含み得る。上記のように、カウンタ値は、プロデューサシェーダがグラフィックスデータを作成している間に、プロデューサシェーダによって作成されたグラフィックスデータの量をカウントし得る。
GPUは、プロデューサシェーダカウントバッファの記憶ロケーションの各々に記憶されたカウント値に基づいて、コンシューマシェーダを実行し得る。いくつかの例では、GPUは、各カウント値に対して1つのコンシューマシェーダを実行し得る。たとえば、プロデューサシェーダカウントバッファ内の記憶ロケーションが5のカウント値を記憶した場合、GPUは5つのコンシューマシェーダを実行して、プロデューサシェーダ記憶バッファ内の対応する記憶ロケーションに記憶されたグラフィックスデータを処理し得る。
いくつかの例では、プロデューサシェーダカウントバッファは、順序付きプロデューサシェーダカウントバッファと見なされ得る。たとえば、GPUは、プロデューサシェーダカウントバッファ内の第1の記憶ロケーションを第1のプロデューサシェーダに割り当てることができ、第1のプロデューサシェーダのグラフィックスデータは、任意の他のプロデューサシェーダからのグラフィックスデータが使用される前に、使用されるべきである。GPUは、プロデューサシェーダカウントバッファ内の第2の記憶ロケーションを第2のプロデューサシェーダに割り当てることができ、第2のプロデューサシェーダのグラフィックスデータは、第1のプロデューサシェーダの後にかつ他のプロデューサシェーダからのグラフィックスデータが使用される前に、使用されるべきである、などである。
このようにして、GPUは、グラフィックスデータが使用される準備ができる前にコンシューマシェーダを実行するのではなく、グラフィックスデータが使用される準備ができたときにコンシューマシェーダを実行することが可能であり得る。一例として、説明のために、GPUが第1のプロデューサシェーダを実行し、その後に、第2のプロデューサシェーダを実行すると仮定する。この例では、第1のプロデューサシェーダは、カウントバッファ内の第1の記憶ロケーションに割り当てられ、第2のプロデューサシェーダは、カウントバッファ内の第2の記憶ロケーションに割り当てられる。さらに、第1のプロデューサシェーダからのグラフィックスデータは、第2のプロデューサシェーダからのグラフィックスデータの前に使用されるべきであると仮定する。
この例では、第2のプロデューサシェーダは、第1のプロデューサシェーダの前に、グラフィックスデータの作成を完了した。したがって、プロデューサシェーダカウントバッファ内の第2の記憶ロケーションは、プロデューサシェーダカウントバッファ内の第1の記憶ロケーションの前に、値を記憶した。GPUは、たとえば、GPUが第1のプロデューサシェーダと第2のプロデューサシェーダとを実行した順序に基づいて、第1のプロデューサシェーダによって作成されたグラフィックスデータが、第2のプロデューサシェーダによって作成されたグラフィックスデータの前に使用されるべきであることを知ることができるので、この例では、GPUは、プロデューサシェーダカウントバッファ内の第1の記憶ロケーションが値を記憶するまで、コンシューマシェーダの実行を保留することができる。上記で説明したように、カウント値、たとえば、作成されたグラフィックスデータの量を示す値をプロデューサシェーダカウントバッファの記憶ロケーション内に記憶することは、その記憶ロケーションに割り当てられたプロデューサシェーダがグラフィックスデータの作成を完了したことを示す。
図1は、本開示の1つまたは複数の態様を実施するように動作可能であり得るグラフィックス処理ユニット(GPU)10の一例を示すブロック図である。GPU10は、グラフィックスパイプラインを実施して、ディスプレイ上のピクセルのピクセル値などのグラフィックスデータを生成し得る。たとえば、GPU10は、Khronos Groupによって2008年4月24日に発表された、公開されているOpenGL ES 2.0仕様に記載されたグラフィックスパイプラインに類似したグラフィックスパイプラインを実施し得る。別の例として、本開示の態様は、グラフィックスパイプラインを定義するMicrosoft(登録商標)DirectX(DX)10および11アプリケーションプログラミングインターフェース(API)で実施され得る。グラフィックスパイプラインは、GPU10上で実行されるソフトウェア、GPU10上で実行されるファームウェア、GPU10上に形成された1つまたは複数のハードウェアユニット、またはそれらの組合せとして実施され得る。GPU10は、他のグラフィックスパイプラインも実施することができ、本開示の態様は、OpenGL ES 2.0仕様のグラフィックスパイプライン、またはDX10および11 APIに限定されるものと見なされるべきではない。
GPU10の例には、限定はしないが、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路がある。図1に示すように、GPU10は、コントローラ12と、ジオメトリシェーダカウントバッファ18と、ジオメトリシェーダバッファ20と、使用カウントバッファ22とを含み得る。また、図1に示すように、GPU10は、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24の1つまたは複数のインスタンスを実行し得る。
GPU10は、グラフィックスパイプラインを形成する追加のユニットまたはモジュールを含み得る。ただし、明快のために、そのような追加のユニットまたはモジュールは図1に示されていない。さらに、ジオメトリシェーダカウントバッファ18、ジオメトリシェーダバッファ20、および使用カウントバッファ22は、GPU10の内部にあるものとして示されているが、本開示の態様はそのように限定されない。代替例では、ジオメトリシェーダカウントバッファ18、ジオメトリシェーダバッファ20、および使用カウントバッファ22のうちの1つまたは複数は、GPU10の外部にあってもよい。たとえば、ジオメトリシェーダバッファ20に記憶されるべきグラフィックスデータの量は、GPU10上で利用可能な記憶スペースの量よりも大きいことが考えられ得る。これらの例では、ジオメトリシェーダバッファ20は、GPU10の外部にあってもよい。代替として、いくつかの例では、ジオメトリシェーダカウントバッファ18およびジオメトリシェーダバッファ20は共通バッファの一部である、たとえば、1つのバッファがジオメトリシェーダカウントバッファ18とジオメトリシェーダバッファ20の両方を含むことが考えられ得る。さらに、使用カウントバッファ22は、以下で説明するように、さらなる同期化支援をコントローラ12に潜在的に与え得るが、GPU10のすべての例で必要でなくてもよい。
GPU10のコントローラ12は、ハードウェアユニットまたはGPU10上で実行されるソフトウェアユニットであってもよい。説明のために、コントローラ12については、ハードウェアユニットであるという文脈で説明する。コントローラ12は、いつGPU10が1つまたは複数の頂点シェーダ14と、ジオメトリシェーダ16と、ピクセルシェーダ24とを実行すべきかを決定し得る。コントローラ12はまた、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24の何個のインスタンシエーションをGPU10が実行すべきかを決定し得る。
頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24は、GPU10上で実行されるソフトウェアユニットであってもよい。説明のために、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24は、GPU10内に常駐するものとして示されている。ただし、これは、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24がGPU10によって実行されることを説明するためである。頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24に対する命令は、GPU10の外部にある記憶デバイスに記憶され得る。たとえば、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24に対するコンパイルされたオブジェクトコードまたはソースコードは、GPU10の外部にある記憶デバイスに記憶され得る。
本開示で説明するように、頂点シェーダ14、ジオメトリシェーダ18、およびピクセルシェーダ24は一般にGPU10によって実行される機能ユニットの形態をとり得ることを理解されたい。そのような機能ユニットは、シェーダの特定の機能的態様を強調するために別々に説明され、必ずしもそのような態様を別々に構造化し、構成し、またはコード化しなければならないことを暗示するとは限らない。したがって、そのような機能的態様を一体にまたは別々に形成し、1つのGPUもしくは複数のGPU、または複数のGPUコア上で実行してもよく、本明細書はそのような機能的態様の実施に関して限定するものと見なされるべきではない。
いくつかの例では、コントローラ12は、ディスプレイ上で表示されるべき画像の属性を受け取り得る。たとえば、GPU10の外部にあるプロセッサ(図示せず)は、ディスプレイ上で表示されるべき画像を生成し得る。プロセッサは、画像を1つまたは複数のプリミティブに分割することができ、1つまたは複数のプリミティブは、一例として、三角形などの多角形であってもよい。プロセッサは、多角形の頂点の各々の頂点属性を決定し得る。たとえば、プロセッサは、頂点の各々の頂点座標と、色値、たとえば、赤緑青(RGB)色値またはルーマ値およびクロマ値とを決定し得る。プロセッサは、頂点の各々の頂点属性をGPU10のコントローラ12に送信し得る。
コントローラ12は、たとえば、プロセッサから受け取った属性に基づいて、頂点シェーダ14の何個のインスタンシエーションがGPU10によって実行されるべきかを決定し得る。たとえば、図1に示すように、GPU10は頂点シェーダ14A〜14Nを実行し得る。頂点シェーダ14A〜14Nの各々は、グラフィックスデータの異なるセットに対して、同様の機能を実行し得る。たとえば、GPU10の外部にある記憶デバイスは、頂点シェーダに対する命令を記憶し得る。GPU10は、頂点シェーダ14A〜14Nとして表されている、コントローラ12によって決定された頂点シェーダの命令の複数のインスタンスを実行し得る。
いくつかの例では、コントローラ12は、GPU10に、各プリミティブに対して頂点シェーダ14のうちの1つを実行させることができる。たとえば、コントローラ12は、GPU10に頂点シェーダ14Aを実行させて、第1のプリミティブを処理することができ、GPU10に頂点シェーダ14Bを実行させて、第2のプリミティブを処理することができる、などである。このようにして、GPU10は、頂点シェーダ14の複数のインスタンスを並列に実行することが可能であり得る。ただし、本開示の態様はそのように限定されない。コントローラ12は、必ずしも、GPU10に、各プリミティブに対して頂点シェーダ14のうちの1つを実行させなくてもよい。
頂点シェーダ14は、実行されると、多角形の頂点の受け取った座標をディスプレイの座標に変換することができ、かつ頂点の光値を決定することができる。たとえば、頂点シェーダ14は、受け取った多角形を回転させ、スケーリングして、プリミティブを生成することができる。頂点シェーダ14の出力は、プリミティブの頂点の属性とすることができる。頂点シェーダ14は、頂点シェーダ14によって決定された頂点の属性をジオメトリシェーダ16に送信することができる。
頂点シェーダ14と同様に、GPU10の外部にある記憶デバイスは、ジオメトリシェーダに対する命令を記憶し得る。コントローラ12は、たとえば、頂点シェーダ14によって生成されたプリミティブの数に基づいて、ジオメトリシェーダ16A〜16Mとして表される、ジオメトリシェーダ16の何個のインスタンシエーションをGPU10が実行すべきかを決定し得る。いくつかの例では、GPU10が実行すべきジオメトリシェーダ16の数は、GPU10が実行した頂点シェーダ14の数と同じであってもよい。ただし、本開示の態様はそのように限定されない。ジオメトリシェーダ16A〜16Mは、異なるデータに対して同様の機能を実行し得る。
ジオメトリシェーダ16の各々は、頂点シェーダ14のうちの1つから単一のプリミティブに関する頂点の頂点属性を受け取り得る。いくつかの例では、ジオメトリシェーダ16は、単一のプリミティブを1つまたは複数のプリミティブにさらに分割し得る。たとえば、ジオメトリシェーダ16Aは、単一の三角形の頂点を受け取ることができ、単一の三角形を分割して5つの三角形を作成することができる。ジオメトリシェーダ16は、ジオメトリシェーダ16によって作成されたプリミティブの頂点の各々について、属性、たとえば、色と座標とを決定することもできる。頂点およびそれに対応する属性を含む、ジオメトリシェーダ16によって作成されたプリミティブは、ジオメトリシェーダ16によって作成されたグラフィックスデータと呼ばれ得る。
いくつかの例では、ジオメトリシェーダ16の各々が作成し得るプリミティブの数は未知であってもよい。また、いつジオメトリシェーダ16の各々がプリミティブの作成を終了するかは未知であってもよい。たとえば、コントローラ12は、GPU10が2つのジオメトリシェーダ16、たとえば、ジオメトリシェーダ16Aとジオメトリシェーダ16Bとを実行すべきであると判定することができ、GPU10にジオメトリシェーダ16Aとジオメトリシェーダ16Bとを実行させることができる。この例では、コントローラ12は、ジオメトリシェーダ16Aが何個のプリミティブを作成するか、およびジオメトリシェーダ16Bが何個のプリミティブを作成するかを知らなくてもよい。
コントローラ12は、ジオメトリシェーダ16のプログラミングに基づいて、プリミティブを表すために何個のバイトが使用されるかを知っていてもよい。たとえば、ジオメトリシェーダ16によって生成されたプリミティブの各々を100バイトで表すことができ、たとえば、100バイトは、ジオメトリシェーダ16のうちの1つによって生成されたプリミティブの頂点と属性とを表す。ただし、コントローラ12は、ジオメトリシェーダ16が何個のプリミティブを作成し得るかを知らなくてもよいので、コントローラ12は、ジオメトリシェーダ16が作成し得るバイト総数を知らなくてもよい。
また、コントローラ12は、いつジオメトリシェーダ16の各々がプリミティブの作成を完了するかを知らなくてもよい。たとえば、コントローラ12は、GPU10に、最初にジオメトリシェーダ16Aを実行させ、次いでジオメトリシェーダ16Bを実行させ得る。この例では、ジオメトリシェーダ16Aがそのプリミティブの作成を完了する前に、ジオメトリシェーダ16Bがそのプリミティブの作成を完了することが考えられ得る。
これらの不確実性、たとえば、ジオメトリシェーダ16が作成するグラフィックスデータの量、およびいつジオメトリシェーダ16がグラフィックスデータの作成を完了するかは、いつ1つまたは複数のピクセルシェーダ24を実行するかをコントローラ12が決定するのを困難にする場合がある。ピクセルシェーダ24は、ジオメトリシェーダ16によって作成されたグラフィックスデータ、たとえば、プリミティブと対応する属性とを使用し得る。したがって、ジオメトリシェーダ16のうちの1つまたは複数は「プロデューサ」シェーダの例とすることができ、1つまたは複数のピクセルシェーダ24は「コンシューマ」シェーダの例とすることができる。
言い換えれば、1つまたは複数のプロデューサシェーダは、1つまたは複数のコンシューマシェーダによって使用されるグラフィックスデータを作成することができる。プロデューサシェーダの1つの非限定的な例はジオメトリシェーダ16であり、コンシューマシェーダの1つの非限定的な例はピクセルシェーダ24である。本開示で説明する例は、ジオメトリシェーダ16をプロデューサシェーダであるものとして、ピクセルシェーダ24をコンシューマシェーダであるものとして説明しているが、本開示の態様はそのように限定されない。一般に、本開示で説明する例示的な技法は、可変量のグラフィックスデータを作成する任意のシェーダに拡張可能であってもよく、かつ作成された可変量のグラフィックスデータを使用すべきである任意のシェーダに拡張可能であってもよい。本開示で説明する例示的な技法は、プロデューサシェーダおよびコンシューマシェーダの実行の同期化が望ましい場合がある任意のグラフィックスシステムに拡張可能であってもよい。
1つまたは複数のピクセルシェーダ24の各々によって使用されるべきデータが利用可能になった後に、GPU10が1つまたは複数のピクセルシェーダ24を実行することが有利であり得る。たとえば、実行されたピクセルシェーダ24によって使用されるべきグラフィックスデータが利用可能になる前に、コントローラ12がGPU10に1つまたは複数のピクセルシェーダ24を実行させた場合、使用されるべきグラフィックスデータが利用可能になるまで、これらの実行されたピクセルシェーダ24は、アイドル状態、たとえば、「ビジーウェイト」状態のままであり得る。「ビジーウェイト」状態では、実行されたピクセルシェーダ24は、使用されるべきグラフィックスデータを待機しながらループ内に留まり、グラフィックスデータが利用可能になると「ビジーウェイト」状態を出てから、グラフィックスデータを使用する。グラフィックスデータを使用する際に実行されたピクセルシェーダ24によって使用されることになるレジスタまたは割り当てられたメモリなどの、GPU10のハードウェアユニットは、実行されたピクセルシェーダ24がグラフィックスデータを使用するのを待機している間は他のタスクに利用できないので、「ビジーウェイト」状態は望ましくない場合がある。
本開示で説明する例示的な技法のいくつかは、1つまたは複数のピクセルシェーダ24によって使用されるべきグラフィックスデータが利用可能になった後に、GPU10が1つまたは複数のピクセルシェーダ24を実行するように、コントローラ12が1つまたは複数のピクセルシェーダ24の実行を同期化するのを可能にし得る。図1に示すように、GPU10は、ジオメトリシェーダカウントバッファ18を含み得る。ジオメトリシェーダカウントバッファ18は、複数の記憶ロケーションを含み得る。たとえば、ジオメトリシェーダカウントバッファ18は、GPU10のレジスタまたはローカルメモリの一部、たとえば、内部キャッシュであってもよい。いくつかの例では、コントローラ12およびGPU10は、外部システムバスを介したアクセスを必要とすることなく、ジオメトリシェーダカウントバッファ18のコンテンツに比較的迅速にアクセスすることが可能であってもよい。上記で説明したように、いくつかの例では、ジオメトリシェーダ16はプロデューサシェーダの例とすることができる。したがって、ジオメトリシェーダカウントバッファ18は、プロデューサシェーダカウントバッファと呼ばれ得る。
コントローラ12は、ジオメトリシェーダカウントバッファ18の複数の記憶ロケーションの各々を、実行されたジオメトリシェーダ16の各々に割り当てることができる。たとえば、コントローラ12は、ジオメトリシェーダカウントバッファ18の第1の記憶ロケーションを実行されたジオメトリシェーダ16のうちの1つに割り当てることができ、ジオメトリシェーダカウントバッファ18の第2の記憶ロケーションを実行されたジオメトリシェーダ16のうちの別の1つに割り当てることができる、などである。実行されたジオメトリシェーダ16の各々は、それが作成したグラフィックスデータの量を示す値を、ジオメトリシェーダカウントバッファ18のそれに割り当てられた記憶ロケーションに記憶し得る。一例として、実行されたジオメトリシェーダ16のうちの1つによって作成されたグラフィックスデータの量を示す値は、ジオメトリシェーダ16のうちのその1つによって作成されたプリミティブの量の値であってもよい。
いくつかの例では、実行されたジオメトリシェーダ16の各々は、それがグラフィックスデータの作成を完了した後に、ジオメトリシェーダ16のうちのその1つによって作成されたグラフィックスデータの量を示す値を記憶することができる。たとえば、図1に示すように、ジオメトリシェーダ16は、それが作成したグラフィックスデータを、グラフィックスデータが作成されているときに、ジオメトリシェーダバッファ20に出力することができる。たとえば、ジオメトリシェーダ16Aは、3つのプリミティブを作成することができ、ジオメトリシェーダ16Aが各プリミティブに対するグラフィックスデータの作成を完了した後に、各プリミティブのグラフィックスデータをジオメトリシェーダバッファ20に出力することができる。次いで、ジオメトリシェーダ16Aは、ジオメトリシェーダ16Aが第3のプリミティブに対するグラフィックスデータの作成を完了した後に、(出力データとしての3つのプリミティブを示す)3の値を、ジオメトリシェーダ16Aに割り当てられたジオメトリシェーダカウントバッファ18の記憶ロケーションに記憶することができる。
いくつかの例では、ジオメトリシェーダ16は、作成されたグラフィックスデータの量をカウントする、たとえば、作成されたプリミティブの数をカウントするように動作可能であり得るので、ジオメトリシェーダ16に、作成されたグラフィックスデータの量を示す値を記憶するタスクを課すことができる。そうでない場合は、コントローラ12などの別のユニットが、ジオメトリシェーダ16によって作成されたプリミティブの量を追跡する必要があり得るが、このことは非効率的である場合があり、処理能力を不必要に使用する場合がある。
また、上記のように、コントローラ12は、何個のプリミティブをジオメトリシェーダ16が作成し得るかを知らなくてもよい。したがって、いくつかの例では、ジオメトリシェーダ16は、いつそれがグラフィックスデータの作成を完了したかを知るので、ジオメトリシェーダ16は、作成されたグラフィックスデータの量を示す値を記憶するように好適なものとすることができる。
たとえば、この例では、ジオメトリシェーダ16Aが第1のプリミティブまたは第2のプリミティブのグラフィックスデータの作成を完了した後に、ジオメトリシェーダ16が、ジオメトリシェーダ16によって作成されたグラフィックスデータの量を示す値をまだ記憶していない場合がある。むしろ、ジオメトリシェーダ16Aは、それが3つすべてのプリミティブに対するグラフィックスデータの作成を完了するまで待機してから、ジオメトリシェーダ16Aによって作成されたグラフィックスデータの量を示す値を記憶し得る。したがって、作成されたグラフィックスデータの量を示す値をジオメトリシェーダカウントバッファ18の記憶ロケーションに記憶することは、ジオメトリシェーダカウントバッファ18のその記憶ロケーションに割り当てられた、ジオメトリシェーダ16のうちのジオメトリシェーダが、そのグラフィックスデータの作成を完了したことを示し得る。
グラフィックスデータの作成を完了するまで、実行されたジオメトリシェーダ16が、作成されたグラフィックスデータの量を示す値を記憶しないことを保証する、少なくとも2つの技法が存在し得る。1つの例示的な技法として、ジオメトリシェーダ16はカウンタを用いて設計され得る。たとえば、ジオメトリシェーダ16に対するソースコードを書くプログラマは、カウンタを維持するために、ジオメトリシェーダ16に対するソースコード内に命令を含めることができる。
コンパイルされたバージョンのソースコードは、ジオメトリシェーダ16に、各プリミティブを作成した後にそのカウンタ値を増分させて、ジオメトリシェーダ16によって作成されたグラフィックスデータの量、たとえば、作成されたプリミティブの数を示すことができる。ソースコードは、ジオメトリシェーダ16がグラフィックスデータの作成を完了した後に、ジオメトリシェーダ16に、カウンタ値を、ジオメトリシェーダカウントバッファ18内のそれに割り当てられた記憶ロケーションに出力させる命令を含むこともできる。
ただし、いくつかの例では、ジオメトリシェーダ16がカウンタを用いて設計されていなかったこと、たとえば、カウンタがジオメトリシェーダ16のソースコードの一部ではないことが考えられ得る。たとえば、レガシーなジオメトリシェーダ16に対するソースコードは、カウンタを用いて設計されていない場合がある。これらの事例では、コンパイラがジオメトリシェーダ16内にカウンタを含むように設計され得る。たとえば、プロセッサ(図示せず)は、ジオメトリシェーダに対するソースコードをコンパイルして、GPU10によって実行可能なオブジェクトコードを生成するコンパイラを実行中であり得る。コンパイルされたジオメトリシェーダのインスタンシエーション(instantiation)は、ジオメトリシェーダ16であり得る。コンパイル中に、コンパイラは、実行されたジオメトリシェーダがプリミティブを作成した後に増分するカウンタを維持する命令をジオメトリシェーダ16のオブジェクトコード内に含み得る。コンパイラはまた、グラフィックスデータの作成が完了した後に、カウンタ値を、ジオメトリシェーダカウントバッファ18内の割り当てられた記憶ロケーションに記憶する命令をジオメトリシェーダのオブジェクトコード内に含み得る。このようにして、ジオメトリシェーダ16がカウンタを用いて設計されていなかったときでも、たとえば、カウンタ値がジオメトリシェーダ16に対するソースコードの一部ではない場合でも、実行されたジオメトリシェーダ16は、作成されたグラフィックスデータの量を示す値を記憶することが可能であり得る。
上記の例示的な技法のいずれにおいても、コンパイラは、ソースコードをコンパイルして、GPU10によって実行可能な、ジオメトリシェーダ16に対するオブジェクトコードを生成することができる。第1の例示的な技法では、ジオメトリシェーダ16に対するソースコードは、カウンタ値を維持する命令をすでに含むことができ、グラフィックスデータの作成の完了時に、ジオメトリシェーダ16にカウンタ値を出力させる命令を含むこともできる。コンパイラは、カウンタに対するソースコード命令と、グラフィックスデータの作成の完了時に、ジオメトリシェーダ16にカウンタ値を出力させる命令とをコンパイルして、実行可能なオブジェクトコードを生成することができる。
第2の例示的な技法では、ジオメトリシェーダ16に対するソースコードは、カウンタ値を維持する命令を含まなくてもよく、グラフィックスデータの作成の完了時に、ジオメトリシェーダ16にカウンタ値を出力させる命令を含まなくてもよい。この例では、コンパイラは、カウンタに対する、オブジェクトコードへのアドインとしてのオブジェクトコード命令と、グラフィックスデータの作成の完了時に、ジオメトリシェーダ16にカウンタ値を出力させるオブジェクトコード命令とをプロアクティブに(proactively)含むように設計され得る。このようにして、レガシーなジオメトリシェーダ16の場合でも、コンパイラは、ジオメトリシェーダ16にカウンタ値を維持させ、グラフィックスデータの作成の完了時に、カウンタ値を出力させる、GPU10によって実行可能なオブジェクトコードを生成することが可能であり得る。
コントローラ12は、ジオメトリシェーダカウントバッファ18に記憶された値に基づいて、何個のピクセルシェーダ24を実行するかを決定することができる。たとえば、頂点シェーダ14およびジオメトリシェーダ16と同様に、GPU10の外部にある記憶デバイスは、ピクセルシェーダに対する命令、たとえば、ピクセルシェーダに対するオブジェクトコードまたはソースコードを記憶することができる。コントローラ12は、ピクセルシェーダ24A〜24Xとして表される、ピクセルシェーダ24の1つまたは複数のインスタンスを実行し得る。ピクセルシェーダ24は、異なるグラフィックスデータに対して同様の機能を実行し得る。ピクセルシェーダ24は、ジオメトリシェーダ16によって作成されたプリミティブを受け取り、受け取ったプリミティブに対して、ラスタライジング、シェーディング、ブレンディング、イルミネーティング、および他のグラフィックス関連の機能などの、1つまたは複数の機能を実行し得る。ピクセルシェーダ24の出力は、ディスプレイに表示されるべきピクセルのピクセル値であり得る。
コントローラ12は、ジオメトリシェーダカウントバッファ18に記憶された値に基づいて、ピクセルシェーダ24の何個のインスタンスを実行するかを決定することができる。一例として、コントローラ12は、ジオメトリシェーダ16の各々によって生成された各プリミティブに対して、ピクセルシェーダ24のうちの1つを実行し得る。たとえば、ジオメトリシェーダカウントバッファ18の第1の記憶ロケーションが5の値を記憶し、ジオメトリシェーダカウントバッファ18の第2の記憶ロケーションが6の値を記憶し、ジオメトリシェーダカウントバッファ18の第3の記憶ロケーションが10の値を記憶し、ジオメトリシェーダカウントバッファ18の第4の記憶ロケーションが1の値を記憶したと仮定する。また、ジオメトリシェーダカウントバッファ18の第1から第4の記憶ロケーションがそれぞれ、ジオメトリシェーダ16A〜16Dに割り当てられると仮定する。
この例では、コントローラ12は、それぞれがジオメトリシェーダ16Aによって作成された5つのプリミティブのうちの1つのグラフィックスデータを使用する、ピクセルシェーダ24の5つのインスタンスを実行し得る。次いで、コントローラ12は、それぞれがジオメトリシェーダ16Bによって作成された6つのプリミティブのうちの1つのグラフィックスデータを使用する、ピクセルシェーダ24の6つのインスタンスを実行し、次いで、それぞれがジオメトリシェーダ16Cによって作成された10個のプリミティブのうちの1つのグラフィックスデータを使用する、ピクセルシェーダ24の10個のインスタンスを実行し、それに続いて、ジオメトリシェーダ16Dによって作成された1つのプリミティブのグラフィックスデータを使用する、ピクセルシェーダ24の1つのインスタンスを実行し得る。
コントローラ12は、必ずしも、ピクセルシェーダ24の第1のインスタンスの実行が完了するまで待機してから、ピクセルシェーダ24の次のインスタンスの実行を開始する必要はない。たとえば、前の例では、コントローラ12は、ピクセルシェーダ24の第1の5つのインスタンスの実行が完了するまで待機してから、ピクセルシェーダ24の次の6つのインスタンスの実行を開始しなくてもよい。コントローラ12は、ピクセルシェーダ24の第1のインスタンスを実行してもよく、いくつかの例では、ピクセルシェーダ24の第1のインスタンスが実行中である間に、ピクセルシェーダ24の次のインスタンスの実行を開始してもよい。言い換えれば、いくつかの例では、GPU10は、ピクセルシェーダ24の複数のインスタンスを並行して実行し得る。
いくつかの例では、ジオメトリシェーダ16のうちの1つによって生成されたグラフィックスデータは、ジオメトリシェーダ16のうちの別の1つからのグラフィックスデータの前に使用される必要があり得る。たとえば、ジオメトリシェーダ16のうちの2つのジオメトリシェーダは、重複するプリミティブに対するグラフィックスデータを作成する場合がある。この例では、重複されるプリミティブに対するグラフィックスデータは、ピクセルシェーダ24が、重複するプリミティブの色と重複されるプリミティブの色とを適切にブレンドすることができるように、重複するプリミティブに対するグラフィックスデータの前に使用される必要があり得る。しかしながら、重複されるプリミティブを作成したジオメトリシェーダ16のうちのジオメトリシェーダが、そのプリミティブの作成を完了する前に、重複するプリミティブを作成したジオメトリシェーダ16のうちのジオメトリシェーダが、そのプリミティブの作成を完了したことが考えられ得る。
ジオメトリシェーダ16によって作成されたグラフィックスデータが適切な順序で使用されることを保証するために、ジオメトリシェーダカウントバッファ18は順序付きカウントバッファとして機能し得る。たとえば、コントローラ12は、ジオメトリシェーダカウントバッファ18内の記憶ロケーション、たとえば、第1の記憶ロケーションを、ジオメトリシェーダ16の第1のジオメトリシェーダに割り当てることができ、第1のジオメトリシェーダのグラフィックスデータは、任意の他のジオメトリシェーダ16からのグラフィックスデータが使用される前に使用されるべきである。コントローラ12は、ジオメトリシェーダカウントバッファ18内の別の記憶ロケーション、たとえば、第2の記憶ロケーションを、ジオメトリシェーダ16の第2のジオメトリシェーダに割り当てることができ、第2のジオメトリシェーダのグラフィックスデータは、ジオメトリシェーダ16の第1のジオメトリシェーダの後、かつ任意の他のジオメトリシェーダ16からのグラフィックスデータが使用される前に使用されるべきである、などである。
順序付きカウントバッファを用いると、コントローラ12は、コントローラ12がピクセルシェーダ24を実行して、使用されるべき順序でグラフィックスデータを使用することを保証することができる。たとえば、コントローラ12は、ジオメトリシェーダカウントバッファ18内の記憶ロケーションに記憶された値を監視し得る。コントローラ12は、グラフィックスデータが最初に使用されるべきであるジオメトリシェーダ16のうちのジオメトリシェーダに割り当てられた、ジオメトリシェーダカウントバッファ18内の記憶ロケーションが、作成されたグラフィックスデータを示す値を記憶するまで、1つまたは複数のピクセルシェーダ24を実行するのを待機し得る。
いくつかの事例では、グラフィックスデータが最初に使用されるべきであるジオメトリシェーダ16のうちのジオメトリシェーダに割り当てられた、ジオメトリシェーダカウントバッファ18内の記憶ロケーションが、作成されたグラフィックスデータの量を示す値を記憶する前に、ジオメトリシェーダカウントバッファ18内の記憶ロケーションが、作成されたグラフィックスデータの量を示す値を記憶することが考えられ得る。これらの事例では、コントローラ12は、グラフィックスデータが最初に使用されるべきであるジオメトリシェーダ16のうちのジオメトリシェーダに割り当てられた、ジオメトリシェーダカウントバッファ18内の記憶ロケーションが、作成されたグラフィックスデータの量を示す値を記憶するまで、1つまたは複数のピクセルシェーダ24を実行しない場合がある。
例示的な例として、GPU10がジオメトリシェーダ16Aと16Bとを実行すると仮定する。また、ジオメトリシェーダ16Aによって作成されたグラフィックスデータが、ジオメトリシェーダ16Bによって作成されたグラフィックスデータの前に使用されるべきであると仮定する。コントローラ12は、ジオメトリシェーダカウントバッファ18内の第1の記憶ロケーションをジオメトリシェーダ16Aに割り当てることができ、ジオメトリシェーダカウントバッファ18内の第2の記憶ロケーションをジオメトリシェーダ16Bに割り当てることができる。
この例示的な例では、ジオメトリシェーダ16Bは、ジオメトリシェーダ16Aの前にグラフィックスデータの作成を完了した。したがって、ジオメトリシェーダカウントバッファ18内の第1の記憶ロケーションが、ジオメトリシェーダ16Aによって作成されたグラフィックスデータの量を示す値を記憶する前に、ジオメトリシェーダカウントバッファ18内の第2の記憶ロケーションは、ジオメトリシェーダ16Bによって作成されたグラフィックスデータの量を示す値を記憶することができる。ジオメトリシェーダカウントバッファ18の第2の記憶ロケーションは値を記憶することができるが、ジオメトリシェーダ16Aによって作成されたグラフィックスデータが最初に使用されるべきであり、ジオメトリシェーダ16Aがグラフィックスデータの作成をまだ完了していないので、コントローラ12は、1つまたは複数のピクセルシェーダ24をまだ実行していない場合がある。ジオメトリシェーダカウントバッファ18内の第1の記憶ロケーションが、ジオメトリシェーダ16Aによって作成されたグラフィックスデータの量を示す値をこれから記憶しなければならないので、コントローラ12は、ジオメトリシェーダ16Aがグラフィックスデータの作成をまだ完了していないことを知ることができる。上記で説明したように、ジオメトリシェーダカウントバッファ18内の記憶ロケーションは、それに割り当てられたジオメトリシェーダ16がグラフィックスデータの作成を完了した後に、値を記憶する。
このようにして、コントローラ12は、1つまたは複数のピクセルシェーダ24およびジオメトリシェーダ16の実行を同期化することができる。たとえば、本開示で説明する例示的な技法のいくつかを利用して、コントローラ12は、グラフィックスデータが使用のために利用可能であるときに、GPU10が1つまたは複数のピクセルシェーダ24を実行することを保証し得る。また、本開示で説明する例示的な技法のいくつかを利用して、コントローラ12は、ピクセルシェーダ24が、利用可能であるときにグラフィックスデータを使用するだけでなく、グラフィックスデータが使用されるべき順序でグラフィックスデータを使用することも保証し得る。
使用カウントバッファ22は、1つまたは複数のピクセルシェーダ24の実行を同期化する際にコントローラ12をさらに支援し得る。ジオメトリシェーダカウントバッファ18と同様に、使用カウントバッファ22は、GPU10のレジスタまたはローカルメモリの一部、たとえば、内部キャッシュであってもよい。使用カウントバッファ22は、GPU10のすべての例において必要であるとは限らない。
使用カウントバッファ22は、カウンタ用カウンタ(counter-of-counters)として機能し得る。たとえば、使用カウントバッファ22は、いくつかの事例では、何個のジオメトリシェーダ16が、まだ使用されていないグラフィックスデータを作成したかを示す値を記憶することができる。使用カウントバッファ22の値は、最初はゼロであってもよい。コントローラ12は、ジオメトリシェーダ16のうちのジオメトリシェーダが、作成されたグラフィックスデータの量を示す値を、ジオメトリシェーダカウントバッファ18内のそれに割り当てられた記憶ロケーションに記憶したときに、使用カウントバッファ22の値を増分することができる。コントローラ12は、ジオメトリシェーダ16のうちのジオメトリシェーダによって作成されたグラフィックスデータが使用された後に、使用カウントバッファ22の値を減分することができる。
いくつかの例では、コントローラ12は、グラフィックスデータが最初に使用されるべきであるジオメトリシェーダ16のうちのジオメトリシェーダが、作成されたグラフィックスデータの量を示す値を、ジオメトリシェーダカウントバッファ18内のそれに割り当てられた記憶ロケーションに記憶した後に、使用カウントバッファ22の値を増分することができる。たとえば、上記の例示的な例を用いて続けると、ジオメトリシェーダ16Bが、ジオメトリシェーダ16Aの前に、値をジオメトリシェーダカウントバッファ18に記憶する場合、コントローラ12は、使用カウントバッファ22の値をまだ増分しなくてもよい。次いで、ジオメトリシェーダ16Aが値をジオメトリシェーダカウントバッファ18に記憶すると、コントローラ12は、使用カウントバッファ22の値をゼロから2に増分することができる。
コントローラ12は、使用カウントバッファ22に記憶された値を監視して、順序付きジオメトリシェーダカウントバッファ18のどの記憶ロケーションが、作成されたグラフィックスデータを示す値を記憶するかを判定することができる。たとえば、使用カウントバッファ22が6の値を記憶した場合、コントローラ12は、ジオメトリシェーダカウントバッファ18の最初の6つの記憶ロケーションが値を記憶することを知ることができる。次いで、コントローラ12は、今度はコントローラ12が、6つのジオメトリシェーダ16によって作成されたグラフィックスデータを使用するのに十分なピクセルシェーダ24の実行を開始すべきであることを知ることができる。
図1に示すように、ジオメトリシェーダ16は、それが作成したグラフィックスデータをジオメトリシェーダバッファ20に出力することができる。ジオメトリシェーダ16をプロデューサシェーダの例とすることができるので、ジオメトリシェーダバッファ20は、プロデューサシェーダバッファと呼ばれ得る。図1は、ジオメトリシェーダバッファ20をGPU10の一部であるものとして示しているが、本開示の態様はそのように限定されない。いくつかの例では、ジオメトリシェーダバッファ20が記憶すべきグラフィックスデータの量は、GPU10上で利用可能な記憶スペースの量よりも大きくてもよい。これらの例では、ジオメトリシェーダバッファ20はGPU10の外部にあってもよく、システムバスを用いてGPU10がアクセスすることができる記憶デバイスに常駐してもよい。
ジオメトリシェーダバッファ20は、複数の記憶ロケーションを含み得る。記憶ロケーションの各々は、実行されたジオメトリシェーダ16の各々によって作成されたグラフィックスデータを記憶し得る。たとえば、コントローラ12は、ジオメトリシェーダバッファ20の第1の記憶ロケーションをジオメトリシェーダ16Aに割り当てることができ、ジオメトリシェーダバッファ20の第2の記憶ロケーションをジオメトリシェーダ16Bに割り当てることができる、などである。ジオメトリシェーダ16の各々は、グラフィックスデータを作成しているときに、それが作成したグラフィックスデータを、ジオメトリシェーダバッファ20内のそれに割り当てられた記憶ロケーションに出力することができる。
たとえば、ジオメトリシェーダ16Aが5つのプリミティブを作成する場合、ジオメトリシェーダ16Aは、ジオメトリシェーダ16Aが第1のプリミティブに対するグラフィックスデータを作成した後に、第1のプリミティブに対するグラフィックスデータをジオメトリシェーダバッファ20の第1の記憶ロケーションに出力し、それに続いて、第2のプリミティブに対するグラフィックスデータをジオメトリシェーダバッファ20の第1の記憶ロケーションに記憶することができる、などである。上記で説明したように、ジオメトリシェーダ16Aは、グラフィックスデータを作成しているときに、それが作成したグラフィックスデータをジオメトリシェーダバッファ20の第1の記憶ロケーションに出力することができるが、ジオメトリシェーダ16Aは、ジオメトリシェーダ16Aが5つのプリミティブすべてに対するグラフィックスデータの作成を完了するまで、作成されたデータの量を示す値を、ジオメトリシェーダカウントバッファ18内のそれに割り当てられた記憶ロケーションに出力しない場合がある。
いくつかの例では、コントローラ12は、ジオメトリシェーダ16の各々がどのくらいのグラフィックスデータを作成し得るかを知らなくてもよいが、コントローラ12は、各ジオメトリシェーダ16が作成し得るグラフィックスデータの最大量を前もって知ることができる。たとえば、ジオメトリシェーダ16の各々は、ジオメトリシェーダ16が作成することができるグラフィックスデータの総量においてジオメトリシェーダ16が限定されるように設計され得る。ジオメトリシェーダバッファ20の記憶ロケーションのサイズ、たとえば、ジオメトリシェーダバッファ20の各記憶ロケーションが記憶することができるグラフィックスデータの量は、ジオメトリシェーダ16の各々が作成することができるグラフィックスデータの最大量と等しくてもよい。
一例として、ジオメトリシェーダ16の各々が作成することができるグラフィックスデータの最大量は4キロバイト(KB)とすることができるが、本開示の態様はそのように限定されない。この例では、ジオメトリシェーダバッファ20の記憶ロケーションのサイズは、4KBとすることができる。
いくつかの例では、ジオメトリシェーダバッファ20の記憶ロケーションに記憶されたグラフィックスデータは、「疎にポピュレートされ(sparsely populated)」得る。たとえば、いくつかの例では、ジオメトリシェーダの各々によって生成された各プリミティブは、100バイトで表され得る。ジオメトリシェーダ16のうちの1つが5つのプリミティブを作成する場合、ジオメトリシェーダ16のうちのその1つに割り当てられたジオメトリシェーダバッファ20の記憶ロケーションは、500バイト、たとえば、5個のプリミティブ*プリミティブ当たり100バイトを記憶し得る。したがって、この例では、ジオメトリシェーダ16のうちの1つは、4KBまで記憶することができるジオメトリシェーダバッファ20の記憶ロケーションに500バイトを記憶した。ジオメトリシェーダバッファ20の記憶ロケーションは、それが記憶することができるデータの総量の8分の1(たとえば、4KBを500バイトで除算)を記憶するので、ジオメトリシェーダバッファ20の記憶ロケーション内のデータは、この例では、疎にポピュレートされていると見なされ得る。
ピクセルシェーダ24の各々は、ジオメトリシェーダバッファ20の記憶ロケーションに記憶されたグラフィックスデータを使用し得る。たとえば、ジオメトリシェーダ16Aによって作成されたグラフィックスデータが、ジオメトリシェーダ16の任意の他の1つからのグラフィックスデータの前に使用されるべきであると仮定する。また、コントローラ12が、ジオメトリシェーダ16Aによって作成されたグラフィックスデータの量を示す値を記憶するために、ジオメトリシェーダカウントバッファ18の第1の記憶ロケーションを割り当てたと仮定する。この例では、ジオメトリシェーダ16Aが作成されたグラフィックスデータの量を示す値をジオメトリシェーダカウントバッファ18の第1の記憶ロケーションに記憶した後、コントローラ12は、GPU10に、ジオメトリシェーダ16Aに割り当てられたジオメトリシェーダカウントバッファ18の記憶ロケーションからのグラフィックスデータを使用する1つまたは複数のピクセルシェーダ24を実行させることができる。
図2は、本開示の1つまたは複数の態様を実施するように動作可能であり得るデバイス26の一例を示すブロック図である。デバイス26の例には、限定はしないが、メディアプレーヤなどのビデオデバイス、セットトップボックス、携帯電話などのワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどがある。デバイス26は、プロセッサ28と、グラフィックス処理ユニット(GPU)10と、記憶デバイス32と、トランシーバモジュール34と、ユーザインターフェース36と、ディスプレイバッファ38と、ディスプレイ40とを含み得る。図2に示すように、デバイス26のGPU10は、図1のGPU10と同一または実質的に同様であってもよい。したがって、図2の例では、GPU10の例示的な機能についてさらに論じない。
プロセッサ28およびGPU10は別個のユニットとして示されているが、本開示の態様はそのように限定されない。いくつかの例では、プロセッサ28およびGPU10は、共通の集積回路(IC)内に形成され得る。プロセッサ28およびGPU10はそれぞれ、単一のプロセッサコアまたは複数のプロセッサコアを含み得る。
デバイス26は、明快のために図2に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス26は、デバイス26がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図2に示されていないスピーカおよびマイクロフォン、またはデバイス26がメディアプレーヤである場合にスピーカを含み得る。さらに、デバイス26に示す様々なモジュールおよびユニットは、デバイス26のすべての例において必要であるとは限らない。たとえば、ユーザインターフェース36およびディスプレイ40は、デバイス26がデスクトップコンピュータ、または外部ユーザインターフェースまたはディスプレイとインターフェースするように備えられた他のデバイスである例において、デバイス26の外部にあってもよい。
プロセッサ28の例には、限定はしないが、DSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の等価な集積回路もしくはディスクリート論理回路がある。記憶デバイス32は1つまたは複数のコンピュータ可読記憶媒体を備え得る。記憶デバイス32の例には、限定はしないが、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気記憶デバイス、フラッシュメモリ、または命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータ、プロセッサ、またはGPUによってアクセスされ得る、任意の他の媒体がある。いくつかの例示的な実装形態では、記憶デバイス32は、本開示においてプロセッサ28およびGPU10に起因する機能をプロセッサ28および/またはGPU10に実行させる命令を含み得る。
記憶デバイス32は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示し得る。ただし、「非一時的」という用語は、記憶デバイス32が非可動であることを意味するものと解釈されるべきでない。一例として、記憶デバイス32は、デバイス26から取り外され、別のデバイスに移され得る。別の例として、記憶デバイス32と実質的に同様の記憶デバイスが、デバイス26中に挿入され得る。いくつかの例では、非一時的記憶媒体は、時間経過に伴って変動し得るデータを(たとえば、RAMに)記憶し得る。
ユーザインターフェース36の例には、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース36はまた、タッチスクリーンであり得、ディスプレイ40の一部として組み込まれ得る。トランシーバモジュール34は、デバイス26と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール34は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。
図2に示すように、記憶デバイス32は、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24に対する命令、たとえば、ソースコードおよび/オブジェクトコードを記憶し得る。図1に示すように、GPU10は、頂点シェーダ14A〜14N、ジオメトリシェーダ16A〜16M、およびピクセルシェーダ24A〜24Xのインスタンシエーションに対して、頂点シェーダ14、ジオメトリシェーダ16、およびピクセルシェーダ24の命令の複数のインスタンスを実行し得る。
また、いくつかの例では、記憶デバイス32はジオメトリシェーダバッファ20を含み得る。上記で説明したように、ジオメトリシェーダバッファ20は、ジオメトリシェーダ16A〜16Mのうちの1つまたは複数によって作成されたグラフィックスデータを記憶し得る。いくつかの例では、ジオメトリシェーダバッファ20に記憶されるべきグラフィックスデータの量が、GPU10上で利用可能な記憶スペースの量よりも大きいことが考えられ得るので、記憶デバイス32はジオメトリシェーダバッファ20を含み得る。
記憶デバイス32は、いくつかの例では、コンパイラ30に対する命令を記憶し得る。ただし、コンパイラ30に対する命令を記憶することは、デバイス26のすべての例において必要であるとは限らない。コンパイラ30は、いくつかの例示的な実装形態では、実行されると、プロセッサ28にジオメトリシェーダ16の命令内にカウンタを含ませる命令を含み得る。たとえば、図2に示すように、プロセッサ28は、コンパイラ30の命令を実行して、ジオメトリシェーダ16をコンパイルし得る、たとえば、ジオメトリシェーダ16に対するソースコードを受け取り、ジオメトリシェーダ16に対するオブジェクトコードを生成し得る。次いで、プロセッサ28は、コンパイルされたジオメトリシェーダ16を記憶デバイス32に記憶し得る。GPU10が、ジオメトリシェーダ16の1つまたは複数のインスタンス、たとえば、ジオメトリシェーダ16A〜16Mを実行すると、ジオメトリシェーダ16A〜16Mの各々は、ジオメトリシェーダ16A〜16Mの各々によって作成されたグラフィックスデータの量を示す、そのそれぞれのカウンタを増分し得る。
GPU10は、1つまたは複数のピクセルシェーダ24を介して、ディスプレイ40に表示されるべき画像のピクセル値を出力し得る。いくつかの例では、GPU10はピクセル値をディスプレイ40に直接出力し得る。いくつかの代替例では、GPU10は画像のピクセル値をディスプレイバッファ38に出力し得る。ディスプレイバッファ38は、画像全体がレンダリングされるまで、画像のピクセル値を一時的に記憶し得る。ディスプレイバッファ38は画像フレームバッファと見なされ得る。ディスプレイバッファ38は、次いで、ディスプレイ40上に表示されるべきレンダリングされた画像を送信し得る。ディスプレイ40は、液晶ディスプレイ(LCD)、有機発光ダイオードディスプレイ(OLED)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスを備え得る。
図3は、本開示の1つまたは複数の態様によるGPU10の例示的な動作を示すフローチャートである。単に説明のために、図1および図2への参照を行う。
GPU10は、グラフィックスデータを作成するプロデューサシェーダを実行し得る(42)。プロデューサシェーダの例としては、1つまたは複数のジオメトリシェーダ16がある。上記で説明したように、1つまたは複数のジオメトリシェーダ14はそれぞれ、1つまたは複数の頂点シェーダから1つのプリミティブを受け取り、その1つのプリミティブを1つまたは複数のプリミティブに分割し得る。プロデューサシェーダによって作成されたグラフィックスデータは、作成された1つまたは複数のプリミティブの頂点の属性、たとえば、作成された1つまたは複数のプリミティブの頂点の色および座標値とすることができる。
GPU10は、作成されたグラフィックスデータを、第1のバッファの記憶ロケーションに記憶し得る(44)。第1のバッファの記憶ロケーションの一例は、プロデューサシェーダバッファ内の記憶ロケーションとすることができる。プロデューサシェーダバッファの例は、ジオメトリシェーダバッファ20とすることができる。ジオメトリシェーダバッファ20が記憶デバイス32の一部である例では、GPU10はシステムバスを介してジオメトリシェーダバッファ20にアクセスし得る。
グラフィックスデータの作成が完了すると、プロデューサシェーダは、プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶し得る(46)。第2のバッファ内の記憶ロケーションの例は、プロデューサシェーダカウントバッファ内の記憶ロケーションとすることができる。プロデューサシェーダカウントバッファの一例は、ジオメトリシェーダカウントバッファ18とすることができる。プロデューサシェーダによって作成されたグラフィックスデータの量を示す値の一例は、プロデューサシェーダによって作成されたプリミティブの量とすることができる。いくつかの例では、プロデューサシェーダは、いつそれがグラフィックスデータの作成を完了したかを知ることができるので、プロデューサシェーダは、作成されたプリミティブの数を記憶するのに適切であり得る。ただし、コントローラ12などの他のユニットは、いつプロデューサシェーダがグラフィックスデータの作成を完了したかを知らなくてもよい。
プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を記憶した後、GPU10は1つまたは複数のコンシューマシェーダを実行し得る(48)。プロデューサシェーダによって作成されたグラフィックスデータの量を示す値を記憶した後に1つまたは複数のコンシューマシェーダを実行することによって、コントローラ12は、1つまたは複数のコンシューマシェーダによって使用されるべきグラフィックスデータが利用可能になる前に、1つまたは複数のコンシューマシェーダが実行されないことを保証し得る。コンシューマシェーダの例としては、1つまたは複数のピクセルシェーダ24がある。
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つまたは複数のプロセッサを含めて、ハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
以下に、本願の出願当初請求項に記載された発明を付記する。
[1]方法であって、
グラフィックス処理ユニット(GPU)を用いて、グラフィックスデータを作成するプロデューサシェーダを実行することと、
前記GPUを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータを第1のバッファの記憶ロケーションに記憶することと、
前記グラフィックスデータの前記作成が完了すると、前記GPU上で実行される前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶することと
を備える前記方法。
[2]前記第1のバッファおよび前記第2のバッファが共通のバッファの一部である、[1]に記載の方法。
[3]前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行することをさらに備える、[1]に記載の方法。
[4]前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記方法が、
第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行することと、
前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶することと、
前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成されたグラフィックスデータの量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶することと
をさらに備える、[1]に記載の方法。
[5]前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記方法が、
前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行しないことをさらに備える、[4]に記載の方法。
[6]前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行することと、
前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行することと
をさらに備える、[5]に記載の方法。
[7]コンパイラを用いて、前記プロデューサシェーダにカウンタを生成させる前記コンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令を含めることをさらに備え、
前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントし、
前記GPU上で実行される前記プロデューサシェーダを用いて、グラフィックスデータの前記量を示す前記値を記憶することが、前記グラフィックスデータの前記作成が完了すると、前記カウンタの値を記憶することを備える、
[1]に記載の方法。
[8]前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成されたプリミティブの量をカウントすることをさらに備え、
グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、
[1]に記載の方法。
[9]前記プロデューサシェーダが、プリミティブを受け取り、前記プリミティブを分割して1つまたは複数のプリミティブを作成するように動作可能なジオメトリシェーダを備え、前記コンシューマシェーダが、前記ジオメトリシェーダによって作成された前記1つまたは複数のプリミティブのうちの少なくとも1つのプリミティブを受け取るように動作可能なピクセルシェーダを備える、[1]に記載の方法。
[10]グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶することであって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、記憶することと、
前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない前記複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定することと
をさらに備える、[1]に記載の方法。
[11]装置であって、
第1のバッファと、
第2のバッファと、
グラフィックス処理ユニット(GPU)と
を備え、前記GPUが、
グラフィックスデータを作成するプロデューサシェーダを実行し、
前記プロデューサシェーダによって作成された前記グラフィックスデータを前記第1のバッファの記憶ロケーションに記憶し、
前記グラフィックスデータの前記作成が完了すると、前記GPU上で実行される前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータの量を示す値を前記第2のバッファの記憶ロケーションに記憶するように動作可能である、前記装置。
[12]前記第1のバッファおよび前記第2のバッファが共通のバッファの一部である、[11]に記載の装置。
[13]前記GPUが前記第2のバッファを含む、[11]に記載の装置。
[14]前記GPUが、前記プロデューサシェーダが前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行するようにさらに動作可能である、[11]に記載の装置。
[15]前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記GPUが、
第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行し、
前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶し、
前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成されたグラフィックスデータの量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶するようにさらに動作可能である、[11]に記載の装置。
[16]前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記GPUが、
前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行しないようにさらに動作可能である、[15]に記載の装置。
[17]前記GPUが、
前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行し、
前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行するようにさらに動作可能である、[16]に記載の装置。
[18]コンパイラを実行するプロセッサであって、前記プロデューサシェーダをコンパイルして、前記プロデューサシェーダにカウンタを生成させる前記コンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令を含めるように動作可能なプロセッサをさらに備え、
前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントし、
前記プロデューサシェーダが、前記グラフィックスデータの前記作成が完了すると、前記カウンタの値を記憶して、前記プロデューサシェーダによって作成された前記グラフィックスデータの前記量を示す前記値を記憶する、
[11]に記載の装置。
[19]前記プロデューサシェーダが、前記プロデューサシェーダによって作成されたプリミティブの量をカウントし、グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、[11]に記載の装置。
[20]前記プロデューサシェーダが、プリミティブを受け取り、前記プリミティブを分割して1つまたは複数のプリミティブを作成するように動作可能なジオメトリシェーダを備え、前記コンシューマシェーダが、前記ジオメトリシェーダによって作成された前記1つまたは複数のプリミティブのうちの少なくとも1つのプリミティブを受け取るように動作可能なピクセルシェーダを備える、[11]に記載の装置。
[21]グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶するように動作可能な第3のバッファであって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、第3のバッファと、
前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定するように動作可能なコントローラと
をさらに備える、[11]に記載の装置。
[22]メディアプレーヤ、セットトップボックス、ワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、およびタブレットコンピューティングデバイスのうちの少なくとも1つを備える、[11]に記載の装置。
[23]装置であって、
第1のバッファと、
第2のバッファと、
グラフィックス処理ユニット(GPU)と
を備え、前記GPUが、
グラフィックスデータを作成するプロデューサシェーダを実行するための手段と、
前記プロデューサシェーダによって作成された前記グラフィックスデータを前記第1のバッファの記憶ロケーションに記憶するための手段と、
前記グラフィックスデータの前記作成が完了すると、前記GPU上で実行される前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータの量を示す値を前記第2のバッファの記憶ロケーションに記憶するための手段と
を備える、前記装置。
[24]前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行するための手段をさらに備える、[23]に記載の装置。
[25]前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記GPUが、
第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行するための手段と、
前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶するための手段と、
前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成されたグラフィックスデータの量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶するための手段と
をさらに備える、[23]に記載の装置。
[26]前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記GPUが、
前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行しないための手段をさらに備える、[25]に記載の装置。
[27]前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行するための手段と、
前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行するための手段と
をさらに備える、[26]に記載の装置。
[28]前記プロデューサシェーダにカウンタを生成させるコンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令を含めるように動作可能なコンパイルするための手段をさらに備え、
前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントし、
前記GPU上で実行される前記プロデューサシェーダを用いて、グラフィックスデータの前記量を示す前記値を記憶するための前記手段が、前記グラフィックスデータの前記作成が完了すると、前記カウンタの値を記憶するための手段を備える、
[23]に記載の装置。
[29]前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成されたプリミティブの量をカウントするための手段をさらに備え、
グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、
[23]に記載の装置。
[30]前記プロデューサシェーダが、プリミティブを受け取り、前記プリミティブを分割して1つまたは複数のプリミティブを作成するように動作可能なジオメトリシェーダを備え、前記コンシューマシェーダが、前記ジオメトリシェーダによって作成された前記1つまたは複数のプリミティブのうちの少なくとも1つのプリミティブを受け取るように動作可能なピクセルシェーダを備える、[23]に記載の装置。
[31]グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶するための手段であって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、手段と、
前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない前記複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定するための手段と
をさらに備える、[23]に記載の装置。
[32]メディアプレーヤ、セットトップボックス、ワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、およびタブレットコンピューティングデバイスのうちの少なくとも1つを備える、[23]に記載の装置。
[33]非一時的なコンピュータ可読記憶媒体であって、
1つまたは複数のプロセッサに、
グラフィックス処理ユニット(GPU)を用いて、グラフィックスデータを作成するプロデューサシェーダを実行させ、
前記GPUを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータを第1のバッファの記憶ロケーションに記憶させ、
前記グラフィックスデータの前記作成が完了すると、前記GPU上で実行される前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータの量を示す値を第2のバッファの記憶ロケーションに記憶させる
命令を備える前記非一時的なコンピュータ可読記憶媒体。
[34]前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行する命令をさらに備える、[33]に記載の非一時的なコンピュータ可読記憶媒体。
[35]前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記命令が、
第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行し、
前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶し、
前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成されたグラフィックスデータの量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶する
命令をさらに備える、[33]に記載の非一時的なコンピュータ可読記憶媒体。
[36]前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記命令が、
前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行しない命令をさらに備える、[35]に記載の非一時的なコンピュータ可読記憶媒体。
[37]前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行し、
前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行する
命令をさらに備える、[36]に記載の非一時的なコンピュータ可読記憶媒体。
[38]コンパイラを用いて、前記プロデューサシェーダにカウンタを生成させる前記コンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令を含める命令をさらに備え、
前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントし、
前記GPU上で実行される前記プロデューサシェーダを用いて、グラフィックスデータの前記量を示す前記値を記憶する前記命令が、前記グラフィックスデータの前記作成が完了すると、前記カウンタの値を記憶する命令を備える、
[33]に記載の非一時的なコンピュータ可読記憶媒体。
[39]前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成されたプリミティブの量をカウントする命令をさらに備え、
グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、
[33]に記載の非一時的なコンピュータ可読記憶媒体。
[40]前記プロデューサシェーダが、プリミティブを受け取り、前記プリミティブを分割して1つまたは複数のプリミティブを作成するように動作可能なジオメトリシェーダを備え、前記コンシューマシェーダが、前記ジオメトリシェーダによって作成された前記1つまたは複数のプリミティブのうちの少なくとも1つのプリミティブを受け取るように動作可能なピクセルシェーダを備える、[33]に記載の非一時的なコンピュータ可読記憶媒体。
[41]グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶することであって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つであることと、
前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない前記複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定することとを行う
命令をさらに備える、[33]に記載の非一時的なコンピュータ可読記憶媒体。

Claims (40)

  1. 方法であって、
    グラフィックス処理ユニット(GPU)を用いて、グラフィックスデータを作成するプロデューサシェーダを実行することと、
    前記GPUを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータを第1のバッファの記憶ロケーションに記憶することと、
    前記プロデューサシェーダによる前記グラフィックスデータの作成中に、前記プロデューサシェーダによって作成されている前記グラフィックスデータの量をカウントすることと、
    前記グラフィックスデータの前記作成が完了すると、前記GPU上で実行される前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータの前記量を示す値を第2のバッファの記憶ロケーションに記憶することと、
    前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行することとを備える前記方法。
  2. 前記第1のバッファおよび前記第2のバッファが共通のバッファの一部である、請求項1に記載の方法。
  3. 1つまたは複数のコンシューマシェーダを実行することが、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するためにピクセルシェーダを実行することを備える、請求項1に記載の方法。
  4. 前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記方法が、
    第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行することと、
    前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶することと、
    前記第2のプロデューサシェーダによる前記第2のグラフィックスデータの作成中に、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの量をカウントすることと、
    前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの前記量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶することとをさらに備える、請求項1に記載の方法。
  5. 前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記方法が、
    前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダを実行しないことをさらに備える、請求項4に記載の方法。
  6. 前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行することと、
    前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行することとをさらに備える、請求項5に記載の方法。
  7. コンパイラを用いて、前記プロデューサシェーダにカウンタを生成させる前記コンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令を含めることをさらに備え、
    前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
    前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントする、請求項1に記載の方法。
  8. 前記グラフィックスデータの前記量をカウントすることが、前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成されたプリミティブの量をカウントすることを備え、
    グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、請求項1に記載の方法。
  9. 前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、前記1つまたは複数のコンシューマシェーダの何個のインスタンスを実行するかを決定することをさらに備え、
    前記1つまたは複数のコンシューマシェーダを実行することが、前記1つまたは複数のコンシューマシェーダの前記決定された数のインスタンスを実行することを備える、請求項1に記載の方法。
  10. グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶することであって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、記憶することと、
    前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない前記複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定することとをさらに備える、請求項1に記載の方法。
  11. 装置であって、
    第1のバッファと、
    第2のバッファと、
    グラフィックス処理ユニット(GPU)とを備え、前記GPUが、
    グラフィックスデータを作成するプロデューサシェーダを実行し、
    前記プロデューサシェーダによって作成された前記グラフィックスデータを前記第1のバッファの記憶ロケーションに記憶し、
    前記プロデューサシェーダによる前記グラフィックスデータの作成中に、前記プロデューサシェーダによって作成されているグラフィックスデータの量をカウントし、
    前記グラフィックスデータの前記作成が完了すると、前記GPU上で実行される前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成された前記グラフィックスデータの前記量を示す値を前記第2のバッファの記憶ロケーションに記憶し、および
    前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、かつ前記プロデューサシェーダが前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行するように構成される、前記装置。
  12. 前記第1のバッファおよび前記第2のバッファが共通のバッファの一部である、請求項11に記載の装置。
  13. 前記GPUが前記第2のバッファを含む、請求項11に記載の装置。
  14. 前記1つまたは複数のコンシューマシェーダを実行するために、前記GPUが、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するためにピクセルシェーダを実行するように構成される、請求項11に記載の装置。
  15. 前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記GPUが、
    第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行し、
    前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶し、
    前記第2のプロデューサシェーダによる前記第2のグラフィックスデータの作成中に、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの量をカウントし、
    前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの前記量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶するようにさらに構成される、請求項11に記載の装置。
  16. 前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記GPUが、
    前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダを実行しないようにさらに構成される、請求項15に記載の装置。
  17. 前記GPUが、
    前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行し、
    前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行するようにさらに構成される、請求項16に記載の装置。
  18. コンパイラを実行するプロセッサであって、前記プロデューサシェーダをコンパイルして、前記プロデューサシェーダにカウンタを生成させる前記コンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令を含めるように構成されるプロセッサをさらに備え、
    前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
    前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントする、請求項11に記載の装置。
  19. 前記グラフィックスデータの前記量をカウントするために、前記プロデューサシェーダが、前記プロデューサシェーダによって作成されたプリミティブの量をカウントし、グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、請求項11に記載の装置。
  20. 前記GPUが、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、前記1つまたは複数のコンシューマシェーダの何個のインスタンスを実行するかを決定するように構成され、前記1つまたは複数のコンシューマシェーダを実行するために、前記GPUが、前記1つまたは複数のコンシューマシェーダの前記決定された数のインスタンスを実行するように構成される、請求項11に記載の装置。
  21. グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶するように構成される第3のバッファであって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、第3のバッファと、
    前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定するように構成されるコントローラとをさらに備える、請求項11に記載の装置。
  22. メディアプレーヤ、セットトップボックス、ワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、およびタブレットコンピューティングデバイスのうちの少なくとも1つを備える、請求項11に記載の装置。
  23. 装置であって、
    第1のバッファと、
    第2のバッファと、
    グラフィックス処理ユニット(GPU)とを備え、前記GPUが、
    グラフィックスデータを作成するプロデューサシェーダを実行するための手段と、
    前記プロデューサシェーダによって作成された前記グラフィックスデータを前記第1のバッファの記憶ロケーションに記憶するための手段と、
    前記プロデューサシェーダによる前記グラフィックスデータの作成中に、前記プロデューサシェーダによって作成されている前記グラフィックスデータの量をカウントするための手段と、
    記GPU上で実行される前記プロデューサシェーダを用いて、かつ前記グラフィックスデータの前記作成が完了すると、前記プロデューサシェーダによって作成された前記グラフィックスデータの前記量を示す値を前記第2のバッファの記憶ロケーションに記憶するための手段と、および
    前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、かつ前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行するための手段とを備える、前記装置。
  24. 1つまたは複数のコンシューマシェーダを実行するための前記手段が、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するためにピクセルシェーダを実行するための手段を備える、請求項23に記載の装置。
  25. 前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記GPUが、
    第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行するための手段と、
    前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶するための手段と、
    前記第2のプロデューサシェーダによる前記第2のグラフィックスデータの作成中に、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの量をカウントするための手段と、
    前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの前記量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶するための手段とをさらに備える、請求項23に記載の装置。
  26. 前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記GPUが、
    前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダを実行しないための手段をさらに備える、請求項25に記載の装置。
  27. 前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行するための手段と、
    前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行するための手段とをさらに備える、請求項26に記載の装置。
  28. 前記プロデューサシェーダにカウンタを生成させるコンパイラによって生成された、前記プロデューサシェーダのオブジェクトコードに命令をコンパイルするための手段をさらに備え、
    前記カウンタが前記プロデューサシェーダのソースコードの一部ではなく、
    前記カウンタが、前記プロデューサシェーダが前記グラフィックスデータを作成している間に、前記プロデューサシェーダによって作成されたグラフィックスデータの前記量をカウントする、請求項23に記載の装置。
  29. 前記グラフィックスデータの前記量をカウントするための手段は、前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成されたプリミティブの量をカウントするための手段を備え、
    グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、請求項23に記載の装置。
  30. 前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、前記1つまたは複数のコンシューマシェーダの何個のインスタンスを実行するかを決定するための手段をさらに備え、
    前記1つまたは複数のコンシューマシェーダを実行するための前記手段が、前記1つまたは複数のコンシューマシェーダの前記決定された数のインスタンスを実行するための手段を備える、請求項23に記載の装置。
  31. グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶するための手段であって、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、手段と、
    前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない前記複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定するための手段とをさらに備える、請求項23に記載の装置。
  32. メディアプレーヤ、セットトップボックス、ワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、およびタブレットコンピューティングデバイスのうちの少なくとも1つを備える、請求項23に記載の装置。
  33. 非一時的なコンピュータ可読記憶媒体であって、
    グラフィックス処理ユニット(GPU)に、
    ラフィックスデータを作成するプロデューサシェーダを実行させ、
    記プロデューサシェーダによって作成された前記グラフィックスデータを第1のバッファの記憶ロケーションに記憶させ、
    前記プロデューサシェーダによる前記グラフィックスデータの作成中に、前記プロデューサシェーダによって作成されているグラフィックスデータの量をカウントさせ、
    前記グラフィックスデータの前記作成が完了すると、前記プロデューサシェーダによって作成された前記グラフィックスデータの前記量を示す値を第2のバッファの記憶ロケーションに記憶させ、および
    前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、かつ前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記記憶ロケーションに記憶した後に、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行させる命令を備える前記非一時的なコンピュータ可読記憶媒体。
  34. 前記GPUに前記1つまたは複数のコンシューマシェーダを実行させる前記命令が、前記GPUに、前記第1のバッファの前記記憶ロケーションに記憶された前記グラフィックスデータを使用するためにピクセルシェーダを実行させる命令を備える、請求項33に記載の非一時的なコンピュータ可読記憶媒体。
  35. 前記プロデューサシェーダが第1のプロデューサシェーダを備え、前記グラフィックスデータが第1のグラフィックスデータを備え、前記第2のバッファが第1の記憶ロケーションと第2の記憶ロケーションとを備え、前記値が前記第2のバッファの前記第1の記憶ロケーションに記憶され、前記命令が、前記GPUに、
    第2のグラフィックスデータを作成する第2のプロデューサシェーダを実行させ
    前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータを前記第1のバッファの別の異なる記憶ロケーションに記憶させ
    前記第2のプロデューサシェーダによる前記第2のグラフィックスデータの作成中に、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの量をカウントさせ、
    前記第2のグラフィックスデータの前記作成が完了すると、前記第2のプロデューサシェーダを用いて、前記第2のプロデューサシェーダによって作成された前記第2のグラフィックスデータの前記量を示す値を前記第2のバッファの前記第2の記憶ロケーションに記憶させる命令をさらに備える、請求項33に記載の非一時的なコンピュータ可読記憶媒体。
  36. 前記第1のプロデューサシェーダが前記第1のグラフィックスデータの前記作成を完了する前に、前記第2のプロデューサシェーダが前記第2のグラフィックスデータの前記作成を完了し、前記命令が、前記GPUに、
    前記第1のプロデューサシェーダが前記第1のグラフィックスデータの作成を完了するまで、かつ前記第1のプロデューサシェーダが前記第1のプロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値を前記第2のバッファの前記第1の記憶ロケーションに記憶するまで、前記第1のバッファの前記別の異なる記憶ロケーションに記憶された前記第2のグラフィックスデータを使用するために1つまたは複数のコンシューマシェーダを実行させない命令をさらに備える、請求項35に記載の非一時的なコンピュータ可読記憶媒体。
  37. 前記GPUに、
    前記第1のバッファの前記記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第1のプロデューサシェーダが記憶した後に、前記第1のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第1のコンシューマシェーダを実行させ
    前記第1のコンシューマシェーダの前記実行の後で、前記第1のバッファの前記別の異なる記憶ロケーションに記憶されたグラフィックスデータの前記量を示す前記値を前記第2のプロデューサシェーダが記憶した後に、前記第2のグラフィックスデータを使用するために前記1つまたは複数のコンシューマシェーダのうちの第2のコンシューマシェーダを実行させる命令をさらに備える、請求項36に記載の非一時的なコンピュータ可読記憶媒体。
  38. 前記GPUに、前記グラフィックスデータの前記量をカウントさせる前記命令が、前記GPUに、前記プロデューサシェーダを用いて、前記プロデューサシェーダによって作成されたプリミティブの量をカウントさせる命令を備え、
    グラフィックスデータの前記量を示す前記値が、前記グラフィックスデータの前記作成の前記完了のときに、前記プロデューサシェーダによって作成されたプリミティブの前記量を備える、請求項33に記載の非一時的なコンピュータ可読記憶媒体。
  39. 前記GPUに、
    前記プロデューサシェーダによって作成されたグラフィックスデータの前記量を示す前記値に基づいて、前記1つまたは複数のコンシューマシェーダの何個のインスタンスを実行するかを決定させる命令をさらに備え、
    前記1つまたは複数のコンシューマシェーダを実行する前記命令が、前記1つまたは複数のコンシューマシェーダの前記決定された数のインスタンスを実行する命令を備える、請求項33に記載の非一時的なコンピュータ可読記憶媒体。
  40. 前記GPUに、
    グラフィックスデータがまだ使用されていない複数のプロデューサシェーダの数を示す値を記憶させ、前記プロデューサシェーダが前記複数のプロデューサシェーダのうちの1つである、
    前記第2のバッファのどの記憶ロケーションが作成されたグラフィックスデータを示す値を記憶するかを、グラフィックスデータがまだ使用されていない前記複数のプロデューサシェーダの前記数を示す前記記憶された値に基づいて判定させる命令をさらに備える、請求項33に記載の非一時的なコンピュータ可読記憶媒体。
JP2014521633A 2011-07-19 2012-06-25 シェーダ動作の同期化 Expired - Fee Related JP5770375B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/186,236 2011-07-19
US13/186,236 US9442780B2 (en) 2011-07-19 2011-07-19 Synchronization of shader operation
PCT/US2012/044008 WO2013012524A1 (en) 2011-07-19 2012-06-25 Synchronization of shader operation

Publications (2)

Publication Number Publication Date
JP2014521183A JP2014521183A (ja) 2014-08-25
JP5770375B2 true JP5770375B2 (ja) 2015-08-26

Family

ID=46548804

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014521633A Expired - Fee Related JP5770375B2 (ja) 2011-07-19 2012-06-25 シェーダ動作の同期化

Country Status (6)

Country Link
US (1) US9442780B2 (ja)
EP (1) EP2734923B1 (ja)
JP (1) JP5770375B2 (ja)
KR (1) KR101630996B1 (ja)
CN (1) CN103649922B (ja)
WO (1) WO2013012524A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9269179B2 (en) * 2013-03-15 2016-02-23 Nvidia Corporation System, method, and computer program product for generating primitive specific attributes
US9633408B2 (en) 2013-06-14 2017-04-25 Microsoft Technology Licensing, Llc Coalescing graphics operations
US9430808B2 (en) * 2013-06-19 2016-08-30 Microsoft Technology Licensing, Llc Synchronization points for state information
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
KR102263326B1 (ko) 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
CN105118089B (zh) * 2015-08-19 2018-03-20 上海兆芯集成电路有限公司 三维图形管道中的可程序化像素设定方法及使用其的装置
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
EP3591199A1 (en) * 2016-11-08 2020-01-08 C.R.F. Società Consortile per Azioni A unit for conversion of thermal energy
US10726605B2 (en) * 2017-09-15 2020-07-28 Intel Corporation Method and apparatus for efficient processing of derived uniform values in a graphics processor
CN110580238A (zh) * 2018-06-11 2019-12-17 Arm有限公司 数据处理系统中的硬件单元的同步
FR3101460B1 (fr) * 2019-09-27 2021-09-03 Continental Automotive Procédé et calculateur de gestion d’échanges de données entre une pluralité de tâches
US11508124B2 (en) 2020-12-15 2022-11-22 Advanced Micro Devices, Inc. Throttling hull shaders based on tessellation factors in a graphics pipeline
US11776085B2 (en) * 2020-12-16 2023-10-03 Advanced Micro Devices, Inc. Throttling shaders based on resource usage in a graphics pipeline
US11710207B2 (en) * 2021-03-30 2023-07-25 Advanced Micro Devices, Inc. Wave throttling based on a parameter buffer
US12062126B2 (en) 2021-09-29 2024-08-13 Advanced Micro Devices, Inc. Load multiple primitives per thread in a graphics pipeline
US20230097097A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. Graphics primitives and positions through memory buffers
US11755336B2 (en) * 2021-09-29 2023-09-12 Advanced Micro Devices, Inc. Distributed geometry

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001016741A2 (en) 1999-08-31 2001-03-08 Times N Systems, Inc. Semaphore control of shared-memory
US7671862B1 (en) * 2004-05-03 2010-03-02 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7570267B2 (en) 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7747842B1 (en) 2005-12-19 2010-06-29 Nvidia Corporation Configurable output buffer ganging for a parallel processor
US8081181B2 (en) 2007-06-20 2011-12-20 Microsoft Corporation Prefix sum pass to linearize A-buffer storage
US20090160863A1 (en) 2007-12-21 2009-06-25 Michael Frank Unified Processor Architecture For Processing General and Graphics Workload
CN101271584B (zh) 2008-04-11 2010-11-10 威盛电子股份有限公司 可编程图形处理单元计算核心的常量缓冲的方法和系统
JP5275673B2 (ja) 2008-04-23 2013-08-28 トヨタ自動車株式会社 マルチコアシステム、車両用ゲートウェイ装置
US8259111B2 (en) * 2008-05-30 2012-09-04 Advanced Micro Devices, Inc. Merged shader for primitive amplification
GB2466078B (en) * 2008-12-15 2013-11-13 Advanced Risc Mach Ltd Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus
US20110043518A1 (en) 2009-08-21 2011-02-24 Nicolas Galoppo Von Borries Techniques to store and retrieve image data
US9142057B2 (en) * 2009-09-03 2015-09-22 Advanced Micro Devices, Inc. Processing unit with a plurality of shader engines

Also Published As

Publication number Publication date
KR101630996B1 (ko) 2016-06-15
WO2013012524A1 (en) 2013-01-24
US20130021360A1 (en) 2013-01-24
CN103649922A (zh) 2014-03-19
JP2014521183A (ja) 2014-08-25
EP2734923A1 (en) 2014-05-28
US9442780B2 (en) 2016-09-13
KR20140039076A (ko) 2014-03-31
CN103649922B (zh) 2017-02-15
EP2734923B1 (en) 2018-01-03

Similar Documents

Publication Publication Date Title
JP5770375B2 (ja) シェーダ動作の同期化
JP6273380B2 (ja) レイトレーシングアプリケーションにおけるツリー横断のための開始ノード決定
KR102327144B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
US8341611B2 (en) Application interface on multiple processors
JP6467062B2 (ja) スプーフクロック及び細粒度周波数制御を使用する下位互換性
EP2820540B1 (en) Execution model for heterogeneous cpu-gpu computing
US10553024B2 (en) Tile-based rendering method and apparatus
US9799094B1 (en) Per-instance preamble for graphics processing
EP3137985B1 (en) Method and system to create a rendering pipeline
KR101563070B1 (ko) 그래픽 프로세싱을 위한 데이터 저장 어드레스 할당
JP2018510405A (ja) グラフィックス処理におけるハイブリッドレンダリング
KR20140109431A (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
JP2016509718A (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
US9633411B2 (en) Load scheme for shared register in GPU
US9165337B2 (en) Command instruction management
JP2018514855A (ja) ハイブリッド2d/3dグラフィックスレンダリング
KR20130122657A (ko) 범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝
TW201926239A (zh) 以微磚為基礎之低解析度深度儲存
TW202341063A (zh) 動態波配對

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150105

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150120

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150417

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150624

R150 Certificate of patent or registration of utility model

Ref document number: 5770375

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees