JP5969145B1 - コマンド命令管理 - Google Patents
コマンド命令管理 Download PDFInfo
- Publication number
- JP5969145B1 JP5969145B1 JP2015563145A JP2015563145A JP5969145B1 JP 5969145 B1 JP5969145 B1 JP 5969145B1 JP 2015563145 A JP2015563145 A JP 2015563145A JP 2015563145 A JP2015563145 A JP 2015563145A JP 5969145 B1 JP5969145 B1 JP 5969145B1
- Authority
- JP
- Japan
- Prior art keywords
- commands
- chain
- current set
- memory units
- allocation list
- 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
Links
- 238000000034 method Methods 0.000 claims abstract description 86
- 238000012790 confirmation Methods 0.000 claims description 98
- 238000012545 processing Methods 0.000 claims description 31
- 230000006870 function Effects 0.000 description 24
- 230000004044 response Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
- G06F9/3881—Arrangements for communication of instructions and data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Controls And Circuits For Display Device (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Image Generation (AREA)
- Memory System (AREA)
Abstract
コマンドバッファのメモリユニットのチェーンのメモリユニットにコマンドを書き込むための技法について説明する。本技法はコマンドを書き込み得、書込み中に、十分な空間がメモリユニットのチェーン中にないと決定された場合、本技法は、前に確認されたコマンドをフラッシュし得る。書込みの後に、本技法が、コマンドに関連付けられたハンドルのために十分な空間が割振りリスト中にないと決定した場合、本技法は、前に確認されたコマンドをフラッシュし得る。【選択図】 図4
Description
[0001]本出願は、その内容全体が参照により本明細書に組み込まれる、2013年5月31日に出願された米国仮出願第61/829,487号の利益を主張する。
[0002]本開示は、グラフィックス処理のための技法に関し、より詳細には、グラフィックス処理のためのコマンドを記憶するための技法に関する。
[0003]グラフィカルユーザインターフェースおよびビデオゲームのためのコンテンツなど、表示のための視覚コンテンツは、グラフィックス処理ユニット(GPU:graphics processing unit)によって生成され得る。GPUは、2次元(2D:two-dimensional)または3次元(3D:three-dimensional)グラフィカルオブジェクトを、ディスプレイデバイス上に表示され得る2Dピクセル表現に変換し得る。それの機能を実行するために、GPUは、中央処理ユニット(CPU:central processing unit)などのアプリケーションプロセッサによって発行されるコマンドを実行する。概して、CPUはコマンドをコマンドバッファ(command buffer)に記憶し、GPUは、実行のためにコマンドバッファからコマンドを取り出す。
[0004]概して、本開示は、確認ベースコマンドバッファキュー生成技法について説明する。たとえば、本技法は、書込みの後にコマンドを確認することについて説明する。コマンドを確認することによって、コマンドの次のセットが書き込まれ得ないか、またはコマンドの次のセットに関連付けられたハンドルのための十分な空間が割振りリスト(allocation list)中にないとコマンドの次のセットの書込み中に決定された場合、プロセッサは、追加のメモリユニットが利用され得るか、または割振りリストがリセットされ得るように、確認されたコマンドをサブミット(submit)し得る。
[0005]たとえば、プロセッサがコマンドのセットをコマンドバッファのメモリユニットに書き込むことが可能である場合、プロセッサは、プロセッサがコマンドセットを書き込み終えたメモリユニット中のロケーション(たとえば、メモリユニット中のコマンドのセットの終端のロケーション)を識別する確認ポイント(confirm point)を識別し得る。プロセッサは、次いで、確認ポイントからスターしてコマンドの次のセットを書き込み得る。しかしながら、プロセッサが、書込み中に、コマンドのセット全体がメモリユニットに書き込まれ得ないと決定したか、または、コマンドの書込みの後に、コマンドのセットに関連付けられたハンドルの十分な割振りリスト空間がないと決定した場合、プロセッサは、確認ポイントより前のコマンドをサブミットし得る。確認ポイントより前のコマンドをサブミットすることは、プロセッサが、コマンドのセットのうちの残りのコマンドを追加のメモリユニットに書き込むこと、または確認ポイントの後のコマンドに関連付けられたハンドルのための十分な空間を作成することを可能にし得る。
[0006]一例では、本開示は、コマンドを記憶するための方法について説明し、本方法は、プロセッサを用いて、コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込むことを備える。本方法は、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも1つを決定することを含む。本方法はまた、決定に基づいて、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、または決定に基づいて、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、プロセッサを用いて、コマンドの現在セットの書込みの前にメモリユニットのチェーンに、プロセッサによって記憶された前に確認されたコマンドをサブミットすることを含む。
[0007]一例では、本開示は、コマンドバッファを備えるシステムメモリと、プロセッサとを備えるデバイスについて説明する。プロセッサは、コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込むように構成される。プロセッサはまた、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも1つを決定するように構成される。プロセッサは、決定に基づいて、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、または決定に基づいて、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、コマンドの現在セットの書込みの前にメモリユニットのチェーンに、プロセッサによって記憶された前に確認されたコマンドをサブミットするようにさらに構成される。
[0008]一例では、本開示は、実行されたとき、1つまたは複数のプロセッサに、コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込ませる、その上に記憶された命令を有するコンピュータ可読記憶媒体について説明する。命令はまた、1つまたは複数のプロセッサに、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも1つを決定させる。命令はまた、1つまたは複数のプロセッサに、決定に基づいて、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、または決定に基づいて、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、コマンドの現在セットの書込みの前にメモリユニットのチェーンに1つまたは複数のプロセッサによって記憶された前に確認されたコマンドをサブミットさせる。
[0009]一例では、本開示は、コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込むための手段を備えるデバイスについて説明する。デバイスはまた、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも1つを決定するための手段を含む。デバイスは、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、またはコマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、コマンドの現在セットの書込みの前にメモリユニットのチェーンに、プロセッサによって記憶された前に確認されたコマンドをサブミットするための手段をさらに含む。
[0010]1つまたは複数の例の詳細が以下の添付の図面および説明において記載されている。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
[0016]本開示で説明する技法は、コマンド命令をコマンドバッファに記憶することを対象とする。説明の目的で、本開示の技法は、プロセッサがグラフィックス処理ユニット(GPU)のためのコマンド命令をコマンドバッファに記憶する様式に関して説明する。
[0017]たとえば、プロセッサ(たとえば、中央処理ユニット(CPU))上で実行されるアプリケーションは、プロセッサに、グラフィックスデータ、ならびにグラフィックスデータなどのデータが処理されるべき様式に関して別のプロセッサ(たとえば、GPU)に命令する命令を生成させる。同じくプロセッサ上で実行されるグラフィックスドライバは、命令を、GPUが処理することができるコマンドに変換し、グラフィックスデータを、GPUが処理することができるデータパケット(たとえば、pm4データパケット)に変換する。「pm4データパケット」という用語は、概して、コマンドまたはデータのパケットなど、GPUが処理することができるデータパケットを指す。プロセッサは、グラフィックスドライバを介して、コマンドと生成されたグラフィックスデータとを、システムメモリ(たとえば、プロセッサとGPUとを含むデバイスのメモリ)に記憶する。概して、プロセッサは、グラフィックスドライバを介して、コマンドをシステムメモリ内の専用コマンドバッファに記憶する。プロセッサのオペレーティングシステムはコマンドバッファとしてシステムメモリの一部分を専用化し得る。
[0018]本開示で説明する技法によれば、プロセッサは、コマンドを記憶するための十分な空間がコマンドバッファ中にあるかどうか、またはコマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを最初に決定することなしに、コマンドのセットをコマンドバッファのメモリユニットに書き込むことを試み得る。コマンドバッファは、各ユニットが複数のコマンドを記憶することができる、複数のメモリユニットのチェーンと見なされ得る。プロセッサが、コマンドのセットをメモリユニットのチェーンに書き込むことが可能であり、コマンドに関連付けられた(以下でより詳細に説明する)ハンドルのための十分な空間が割振りリスト中にある場合、プロセッサは、プロセッサがコマンドのセットを書き込み終えた、メモリユニットのうちの1つのメモリユニット中のロケーションを識別し得る。プロセッサがコマンドのセットを書き込み終えた1つのメモリユニット中のロケーションは確認ポイントと呼ばれ、確認ポイントの前に記憶されたコマンドは、確認されたコマンドと呼ばれる。プロセッサは、次いで、確認ポイントから開始してコマンドの次のセットを書き込み得る。
[0019]コマンドの次のセットの書込み中に、プロセッサが、コマンドの次のセットのうちのコマンドのすべてを書き込むための十分な空間がメモリユニットのチェーン中にないと決定した場合、プロセッサは、GPUによる最終的な実行のためにすべての確認されたコマンドをGPUにサブミットするためにフラッシュをトリガし得る。コマンドの次のセットの書込みの後に、プロセッサが、コマンドの次のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にないと決定した場合、プロセッサは、GPUによる最終的な実行のためにすべての確認されたコマンドをGPUにサブミットするためにフラッシュをトリガし得る。
[0020]最終的な実行(すなわち、フラッシュ)のためのGPUへのコマンドのサブミッションは、プロセッサが、フラッシュより前に記憶されなかったコマンドの次のセットからの残りのコマンドを記憶するためにメモリユニットのチェーンにメモリユニットを追加することを可能にする。また、コマンドのサブミッションは割振りリストをクリアし、これは、コマンドの次のセットに関連付けられたハンドルのための割振りリスト空間を解放する。
[0021]概して、プロセッサが、GPUによる最終的な実行のために、確認されたコマンドをGPUにサブミットしたとき、プロセッサは、コマンドを実行のために利用可能にするために何らかの技法を利用するものと見なされ得る。一例として、プロセッサは、コマンドをGPUのためのコマンドバッファに転送し得る。別の例として、確認されたコマンドをサブミットすることの一部として、プロセッサは、GPUが確認されたコマンドを実行すべきであるとき、GPUが、どこからコマンドにアクセスすべきかを決定することができるように、確認されたコマンドと確認ポイントのロケーションとを記憶するメモリユニットのためのメモリアドレスをGPUに示し得る。GPUに確認されたコマンドをサブミットすることの他の例が可能であり、本技法は、確認されたコマンドをサブミットする上記の例に限定されると見なされるべきではない。
[0022]いくつかの他の技法では、コマンドバッファに書き込むことより前に、プロセッサは、コマンドを記憶するための十分な空間がメモリユニットの現在のチェーン中にあるかどうかと、コマンドに関連付けられたハンドルのための十分な空間が割振りリストにあるかどうかとを決定することになる。たとえば、プロセッサは、記憶される必要があるコマンドのためにどのくらいのメモリ空間が必要とされるかを決定し、メモリユニットのチェーン中でどのくらいの空間が現在利用可能であるかを決定することになる。また、プロセッサは、コマンドに関連付けられたハンドルのためにどのくらいの空間が必要とされるかと、ハンドルのためにどのくらいの空間が割振りリスト中で現在利用可能であるかとを決定することになる。十分な空間がない場合、プロセッサはフラッシュ動作を実行することになる。
[0023]たとえば、これらの他の技法では、十分な空間がメモリユニット中にないか、または十分な空間が割振りリスト中にないと書込みより前に決定された場合、プロセッサは、メモリユニットおよび割振りリスト中のコマンドをサブミットし、割振りリストをクリアし、チェーンから、サブミットされたコマンドをもつメモリユニットを削除し、必要に応じて(たとえば、フラッシュ動作の一部として)チェーンにより多くのメモリユニットを追加することになる。しかしながら、コマンドを記憶するためにどのくらいのメモリが必要であるかと、メモリユニットの現在のチェーン中でどのくらいのメモリが現在利用可能であるかと、ハンドルのために割振りリスト中のどのくらいの空間が必要とされるかと、ハンドルのために割振りリスト中でどのくらいの空間が現在利用可能であるかとを前もってを決定することは、かなりの処理リソースを消費し、処理時間を増加させる。
[0024]本開示で説明する技法によれば、プロセッサは、コマンドのための十分な空間がメモリユニットのチェーン中にない場合、またはコマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にない場合、メモリユニットのチェーンを前もってフラッシュする必要がないことがある。そうではなく、プロセッサは、最初に、コマンドを書き込むことを試み得、書込み中に、または書込みの直後に、プロセッサが、メモリユニットのチェーンがフラッシュされるべきであると決定した場合、プロセッサがメモリユニットのチェーンをフラッシュするのはそのときである。
[0025]本開示で説明する技法について、GPU(たとえば、GPUコマンド生成)によって実行されるコマンドに関して説明するが、本技法はそのように限定されないことを理解されたい。本技法は、非GPU関係コマンド生成に拡張され得、(たとえば、プロセッサが、別の処理ユニットによって実行されるべきコマンドを生成する場合)複数の依存性をもつコマンドの任意のストリーム生成器に適用可能であると見なされ得る。
[0026]図1は、本開示で説明する1つまたは複数の例示的な技法を実装するように構成され得るデバイスを示すブロック図である。たとえば、図1にデバイス10を示す。デバイス10の例としては、限定はしないが、ビデオデバイス、メディアプレーヤ、セットトップボックス、携帯電話およびいわゆるスマートフォンなどのワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどがある。
[0027]デバイス10は、プロセッサ12と、グラフィックス処理ユニット(GPU)14と、システムメモリ16とを含む。プロセッサ12は中央処理ユニット(CPU)であり得る。GPU14は、ディスプレイでのプレゼンテーションのためにグラフィックスデータを生成し、出力するなど、グラフィックス関係関数を実行すること、ならびにGPU14によって与えられる超並列処理(massive processing parallelism)を活用する非グラフィックス関係関数を実行することを行うように構成された処理ユニットであり得る。たとえば、GPU14は、グラフィックスアプリケーションと非グラフィックスアプリケーションの両方を実行し得る。GPU14は、グラフィックス処理能力に加えて汎用処理能力を与え得るので、GPU14は汎用GPU(GP−GPU)と呼ばれることがある。
[0028]プロセッサ12およびGPU14の例には、限定はしないが、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路がある。いくつかの例では、GPU14は、グラフィックスを処理するために、ならびに非グラフィックス関係アプリケーションを実行するために超並列処理を行うことなど、特定の使用のために設計されたマイクロプロセッサであり得る。さらに、プロセッサ12およびGPU14は別個の構成要素として示されているが、本開示の態様はそのように限定されない。たとえば、プロセッサ12およびGPU14は共通の集積回路(IC)中に常駐し得る。
[0029]システムメモリ16は、デバイス10のシステムメモリであり、プロセッサ12とGPU14との外部に常駐し得る(すなわち、プロセッサ12に対してオフチップであり、GPU14に対してオフチップであり得る)。システムメモリ16の例としては、限定はしないが、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM(登録商標))、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。たとえば、システムメモリ16は、実行されたとき、1つまたは複数のプロセッサ(たとえば、プロセッサ12またはGPU14)に本開示で説明する技法を実装させる、その上に記憶された命令を有するコンピュータ可読記憶媒体と見なされ得る。いくつかの例では、システムメモリ16は、デバイス10から取り外され、別のデバイスに移され得る。いくつかの例では、システムメモリ16と実質的に同様のストレージデバイスが、デバイス10中に挿入され得る。
[0030]システムメモリ16は、プロセッサ12とGPU14とによって実行されるアプリケーションを記憶し得る。たとえば、プロセッサ12は、アプリケーション18と、オペレーティングシステム20と、グラフィックスドライバ22とを実行し得る。システムメモリ16は、プロセッサ12が実行のために取り出す、アプリケーション18とオペレーティングシステム20とグラフィックスドライバ22とのためのオブジェクトコードを記憶し得る。また、図示されていないが、GPU14は、頂点シェーダ(vertex shaders)、フラグメントシェーダ、ジオメトリシェーダなどのグラフィックス関係シェーダアプリケーションを実行し得、また、カーネルと呼ばれる非グラフィックス関係シェーダアプリケーションを潜在的に実行するか、またはシェーダを計算し得る。システムメモリ16は、そのようなグラフィックおよび非グラフィックス関係シェーダアプリケーションのオブジェクトコード、および場合によってはソースコードをも記憶し得る。
[0031]いくつかの例では、システムメモリ16は、コマンドを実行するとき、GPU14が作用すべきであるデータを記憶し得る。たとえば、データは、グラフィックスプリミティブ(たとえば、点、線、三角形、四角形、三角形ストリップなど)のリストを含み得るが、他のタイプのデータも存在し得る。システムメモリ16はまた、GPU14によるコマンドまたはアプリケーションの実行から生じるデータを記憶し得る。たとえば、システムメモリ16は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。
[0032]さらに、システムメモリ16は、GPU14によって実行されるべきであるコマンド、ならびにGPU14が利用すべきであるデータを記憶し得る。たとえば、図示のように、プロセッサ12はアプリケーション18を実行し得る。アプリケーション18の例としては、ビデオゲーム、ウェブブラウザ、電子メール、および一般的に、表示のための閲覧可能コンテンツを生成する任意のアプリケーションがある。GPU14のグラフィックス処理を活用するために、アプリケーション18は、GPU14が実行すべきであるコマンド、ならびにGPU14がコマンドの実行の一部として作用すべきであるデータを生成し得る。
[0033]プロセッサ12上で実行されるグラフィックスドライバ22は、コマンドを、GPU14によって実行可能であるコマンドに変換し得る。たとえば、グラフィックスドライバ22は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標):Open Graphics Library)アプリケーションプログラミングインターフェース(API)、オープングラフィックスライブラリエンベッディドシステムズ(OpenGL ES:Open Graphics Library Embedded Systems)API、DirectX API、X3D API、RenderMan API、WebGL API、あるいは他の公開またはプロプライエタリ規格グラフィックスAPIなどのグラフィックスAPIに準拠するようにコマンドを変換し得る。
[0034]図1に示されているように、システムメモリ16はバッファ24とバッファ26とを含む。バッファ24とバッファ26とは、グラフィックスドライバ22がGPU14によって実行されるべきであるコマンドをそこに記憶するコマンドバッファを一緒に形成し得る。たとえば、バッファ24は第1の間接的バッファ(IB1)と呼ばれることがあり、バッファ26は第2の間接的バッファ(IB2)と呼ばれることがある。コマンドバッファを一緒に形成するためにバッファ24とバッファ26とを利用することは、プロセッサ12上で実行されるオペレーティングシステム20の機能であり得る。たとえば、オペレーティングシステム20などのいくつかのオペレーティングシステムは、情報がIB1(たとえば、バッファ24)記憶され得る様式を制限し得る。
[0035]オペレーティングシステム20によってIB1に課される制限を克服するために、いくつかの技法は、オペレーティングシステム20がIB1を可能にしないという方法で情報を記憶するためにIB2(たとえば、バッファ26)を利用する。そのような技法では、IB1は、情報がIB2に記憶されたところへのポインタなどの参照を記憶し、IB2は実際の情報を記憶する。本開示で説明する技法について、IB1(たとえば、バッファ24)とIB2(たとえば、バッファ26)とがコマンドバッファを一緒に形成することに関して説明する。しかしながら、バッファ24とバッファ26の両方にコマンドバッファを形成するように要求することはオペレーティングシステム20の制限であり得る。オペレーティングシステム20とは異なるオペレーティングシステムの場合、単一のバッファ中で(たとえば、バッファ24またはバッファ26のうちの1つの中で)コマンドバッファを形成することが可能であり得る。
[0036]したがって、バッファ24とバッファ26とがコマンドバッファを一緒に形成することは、説明の目的で説明され、限定的であると見なされるべきでない。説明の目的で、プロセッサ12が、グラフィックスドライバ22を介して、コマンドをバッファ26に記憶し、コマンドがバッファ26中のどこにあるかを示す情報をバッファ24に記憶する技法について説明する。
[0037]上記で説明したように、本開示で説明する技法は、コマンドをコマンドバッファ(たとえば、バッファ24とバッファ26と)に記憶することに関する。コマンドの一例はアトミック(atomic)コマンドである。アトミックコマンドは、一緒に実行される必要があるコマンドのセットである。たとえば、GPU14は、実行のためにアトミックコマンドを一緒に取り出し得る。アトミックコマンドの実行中に、GPU14は他のコマンドを実行しないことがある。たとえば、GPU14は、アトミックコマンドのうちのコマンドの実行を休止せず、コマンドの別のセットを実行せず、アトミックコマンドのうちの残りのコマンドを実行しないことがある。GPU14はアトミックコマンドを一緒に実行し得るので、アトミックコマンドを一緒に記憶し、GPU14が実行のためにアトミックコマンドを一緒に取り出すことを可能にすることが望ましいことがある。
[0038]説明の目的で、本開示の技法について、一緒に実行される必要があるコマンドのセットに関して説明する。たとえば、コマンドのセットはアトミックコマンドを形成する。「アトミック操作」という用語は、アトミックコマンドと同義の別の用語である。しかしながら、本開示で説明する技法は、アトミックコマンドまたは操作に限定されると見なされるべきでなく、概して、コマンドをコマンドバッファに記憶するために適用可能である。
[0039]コマンドをバッファ26に記憶するために、オペレーティングシステム20は、バッファ26中のメモリ空間を割り振り得、グラフィックスドライバ22は、コマンドをバッファ26中の割り振られたメモリ空間に記憶し得る。本開示で説明する技法では、バッファ26中の割り振られたメモリ空間は複数のメモリユニットの形態であり得る。各メモリユニットは、ある量のコマンドを記憶することが可能であり得る。
[0040]いくつかの例では、プロセッサ12は、オペレーティングシステム20を介して、バッファ26中の第1のメモリユニットを割り振り得、プロセッサ12は、グラフィックスドライバ22を介して、コマンドのセットのうちのコマンドを第1のメモリユニットに書き込み得る。コマンドのセット中に書き込まれる必要がある追加のコマンドがある場合、プロセッサ12は、オペレーティングシステム20を介して、バッファ26中の第2のメモリユニットを割り振り得、プロセッサ12が、グラフィックスドライバ22を介して、コマンドのセットの書込みを完了するまで、プロセッサ12は、グラフィックスドライバ22を介して、第2のメモリユニットなどにコマンドのセットのうちの追加のコマンドを書き込み得る。
[0041]これらの例では、グラフィックスドライバ22は、第1のメモリユニット、第2のメモリユニットなどがバッファ26中のどこにあるかを示すポインタ情報をバッファ24に記憶し得る。たとえば、ポインタ情報は4バイトであり得る。この意味で、コマンドのセットをバッファ26に記憶するために必要される第1のメモリユニット、第2のメモリユニット、および追加のメモリユニットは、概念的に、メモリユニットのチェーンを形成するものと見なされ得る。第1のメモリユニットと第2のメモリユニットとは、必ずしもバッファ26内の隣接ロケーションに記憶される必要があるとは限らないことを理解されたい。そうではなく、バッファ24中のポインタ情報を用いて、GPU14は、バッファ26中の異なるメモリユニットにわたって記憶されたコマンドのセットを一緒に取り出すことが可能であり得る。
[0042]グラフィックスドライバ22は、一緒に連結され得るメモリユニットの最大数を定義し得る(たとえば、チェーンサイズを定義し得る)。チェーンサイズは、システムメモリ16の記憶能力、コマンドのセット中のコマンドの最大数に関する仮定など、様々なファクタに基づいてユーザ構成可能であり得る。たとえば、アプリケーション18は、アプリケーション18が発行することができるアトミックコマンドの最大数または最小数で構成され得、グラフィックスドライバ22は、アプリケーション18が発行することができるアトミックコマンドの最大数または最小数に基づいてチェーンサイズを定義し得る。一例として、アプリケーション18は、少なくとも2つのメモリユニットを必要とするアトミックコマンドを発行し得、これは、最小チェーンサイズが2つのメモリユニットであり得ることを意味する。説明の目的で、本開示は、4つのメモリユニットのチェーンサイズについて説明する。しかしながら、チェーンサイズは、4つのメモリユニットよりも大きいまたは小さいことがある。
[0043]コマンドのセットのうちのコマンドはハンドルに関連付けられ得る。ハンドルは、関連付けられたコマンドを処理するために必要とされるメモリの割振りへの参照である。概して、ハンドルは、コマンドによって作用されるデータのための記述子と見なされ得る。たとえば、コマンドのセットのうちのコマンドは入力グラフィックスデータのセットに作用し得、入力グラフィックスデータに対する操作の結果は出力グラフィックスデータのセットであり得る。コマンドに関連付けられたハンドルは、入力グラフィックスデータと出力グラフィックスデータとのために割り振られる必要があるメモリの量を示し得る。一例として、コマンドは、テクスチャデータに対して操作を実行するようにGPU14に命令し得る。この例では、テクスチャデータは、コマンドに関連付けられたハンドルであり得る。
[0044]プロセッサ12は、オペレーティングシステム20を介して、コマンドのセットのためのハンドルの割振りリストを維持するように構成され得る。いくつかの例では、システムメモリ16は、コマンドのセットに関連付けられたハンドルを記憶するオペレーティングシステム(OS)バッファ27を含み得る。OSバッファ27は、あらゆる例において必要であるとは限らず、プロセッサ12は、ハンドルの割振りリストを維持するための何らかの技法を実装し得る。
[0045]プロセッサ12が、グラフィックスドライバ22を介して、コマンドのセットを書き込むべきであるとき、プロセッサ12は、オペレーティングシステム20を介して、コマンドのセットに関連付けられたハンドルのための割振りリストを作成し得る。割振りリストは、コマンドに関連付けられたハンドルを示す固定サイズのアレイであり得る。プロセッサ12が、グラフィックスドライバ22を介して、コマンドのセットをメモリユニットのチェーン中のメモリユニットに書き込むとき、プロセッサ12はまた、グラフィックスドライバ22を介して、コマンドのセットのうちのコマンドに関連付けられたハンドルで割振りリストを更新し得る。
[0046]グラフィックスドライバ22がコマンドをメモリユニットのチェーンのメモリユニットに書き込み、関連するハンドルを割振りリストに書き込むと、メモリユニットのチェーンのメモリユニットと割振りリストとは、いっぱいになり始め、追加のコマンドまたはハンドルを記憶することが可能でないことがある。一例として、グラフィックスドライバ22は、コマンドの第1のセットをメモリユニットのチェーンのメモリユニットに書き込み得る。コマンドの第1のセットをチェーンのメモリユニットに書き込んだ後に、グラフィックスドライバ22がコマンドの第2のセットのうちのコマンドをメモリユニットに書き込むべき場合、チェーンのすべての4つのメモリユニットはいっぱいであり、書き込まれる必要があるコマンドの第2のセットのうちのコマンドが依然としてあることになる。この場合、チェーンのチェーンサイズが4つのメモリユニットであるので、オペレーティングシステム20は、別のメモリユニットを割り振ることが可能でないことがある。
[0047]別の例として、グラフィックスドライバ22は、コマンドの第1のセットをメモリユニットのチェーンのメモリユニットに書き込み、コマンドの第1のセットに関連付けられたハンドルの情報を割振りリストに記憶し得る。この例では、コマンドの第2のセットを記憶するための十分な空間がメモリユニット中にあり得る。しかしながら、コマンドの第2のセットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にないことがある。
[0048]いくつかの他の技法では、グラフィックスドライバは、グラフィックスドライバ22とは異なり、最初に、コマンドのセットをチェーンのメモリユニットに書き込むために必要とされる空間の量を決定し、コマンドのセットに関連付けられたハンドルのために必要とされる空間の量を決定し、メモリユニットのチェーンのメモリユニット中の利用可能な空間の量を決定し、割振りリスト中の利用可能な空間の量を決定し得る。たとえば、グラフィックスドライバは、これらの他の技法では、コマンドのセットをチェーンのメモリユニットに書き込むために必要とされる空間の量を決定することと、コマンドのセットに関連付けられたハンドルのために必要とされる空間の量を決定することと、メモリユニットのチェーンのメモリユニット中の利用可能な空間の量を決定することと、割振りリスト中の利用可能な空間の量を決定することとを行うためにVerifySpace/VerifyHandleSpace関数を呼び得る。
[0049] これらの他の例では、グラフィックスドライバは、十分な空間がメモリユニットおよび割振りリスト中にあるとき、単にコマンドをメモリユニットに書き込むことになる。十分な空間がメモリユニットまたは割振りリスト中にない場合、グラフィックスドライバは、これらの他の技法では、フラッシュ呼(flush call)を実行し得る。フラッシュ呼については、以下でより詳細に説明する。
[0050]グラフィックスドライバが、コマンドの書込みより前に、コマンドのセットをチェーンのメモリユニットに書き込むために必要とされる空間の量と、コマンドのセットに関連付けられたハンドルのために必要とされる空間の量と、メモリユニットのチェーンのメモリユニット中の利用可能な空間の量と、割振りリスト中の利用可能な空間の量とを決定する場合の制限があり得る。たとえば、アプリケーション18のいくつかのタイプの場合、およびいくつかのシナリオの場合、プロセッサ12が、VerifySpace/VerifyHandleSpace関数を実行するために望ましくない量の処理リソースを消耗する必要があることが起こり得る。
[0051]VerifySpace/VerifyHandleSpace関数の実行は小さいバッチ問題と見なされ得る。たとえば、書き込まれる必要があるコマンドとハンドルとの量は、コマンドとハンドルとを記憶するための十分な空間があるかどうかを決定するためにプロセッサ12が検査する必要がある記憶領域の莫大な量と比較して、比較的小さくなり得る。言い換えれば、VerifySpace/VerifyHandleSpace関数は、少量のデータが書き込まれ得ることを保証するために比較的大量の記憶領域を検査し得、それにより処理非効率性が生じ得る。
[0052]本開示で説明する技法は、プロセッサ12が、グラフィックスドライバ22を介して、コマンドのセットをバッファ26に書き込むことを試み得る確認ベースコマンドバッファキュー生成技法について説明する。コマンドのセットの書込み中に、プロセッサ12が、グラフィックスドライバ22を介して、コマンドのセットを記憶するための十分な空間がメモリユニットのチェーンのメモリユニット中にないと決定した場合、プロセッサ12は、グラフィックスドライバ22を介して、フラッシュ呼を実行し得る。
[0053]このようにして、グラフィックスドライバ22は、コマンドのセットのうちのコマンドを記憶するための十分な空間がメモリユニットのチェーンのメモリユニット中にあるかどうかを前もって決定するためにVerifySpace関数を実行する必要がないことがある。言い換えれば、十分な空間がコマンドバッファ(たとえば、バッファ26)中のメモリユニットのチェーンのメモリユニット中にあるかどうかを事前に決定することなしにコマンドのセットのうちのコマンドを書き込むことによって、本開示で説明する技法は、プロセッサ12が、コマンドのセットを記憶するための十分な空間がメモリユニットのチェーンのメモリユニット中にあるかどうかを決定する処理リソースを浪費する必要がないことがあるので、処理効率を促進し得る。
[0054]また、本開示で説明する技法では、プロセッサ12は、グラフィックスドライバ22を介して、コマンドのセットの書込みの後に、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを決定し得る。コマンドのセットの書込みの後に十分な空間が割振りリスト中にない場合、プロセッサ12は、グラフィックスドライバ22を介して、フラッシュ呼を実行し得る。
[0055]このようにして、グラフィックスドライバ22は、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを前もって決定するためにVerifyHandle関数を実行する必要がないことがある。言い換えれば、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを事前に決定することなしにコマンドのセットのうちのコマンドを書き込むことによって、本開示で説明する技法は、プロセッサ12が、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを決定する処理リソースを浪費する必要がないことがあるので、処理効率を促進し得る。
[0056]上記で説明したように、コマンドのセットの書込み中に、グラフィックスドライバ22が、十分な空間がコマンドバッファ中のメモリユニットのチェーンのメモリユニット中にないと決定した場合、またはコマンドのセットの書込みの後に、グラフィックスドライバ22が、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にないと決定した場合、グラフィックスドライバ22はフラッシュ呼を実行し得る。フラッシュ呼は、グラフィックスドライバ22がコマンドをメモリユニットに書き込むための空間を解放するか、またはコマンドに関連付けられたハンドルのための割振りリスト中の空間を解放する機構であり得る。
[0057]たとえば、フラッシュ呼の実行の結果は、グラフィックスドライバ22が、最終的な実行のために、それのための十分な空間が割振りリスト中にあるすでに書き込まれたコマンドをGPU14にサブミットするということであり得る。たとえば、コマンドのサブミッションは、GPU14がコマンドを実行することが可能であり得ることを意味する。一例として、グラフィックスドライバ22は、コマンドをGPU14にサブミットする方法として、GPU14が最終的な実行のためにコマンドを取り出すことができるように、コマンドを記憶するメモリユニットについてのメモリアドレスをGPU14に示し得る。概して、コマンドをサブミットすることは、グラフィックスドライバ22が、最終的な実行のためにコマンドをGPU14にとって利用可能にするための何らかの技法を利用することと見なされ得る。GPU14は、GPU14がいつコマンドを実行すべきであるかに基づいて、直ちにコマンドを実行するか、または少し後の時間にコマンドを実行し得る。
[0058]さらに、フラッシュ呼の実行の結果は、グラフィックスドライバ22が、すでに書き込まれたコマンドを記憶するメモリユニットのチェーンからメモリユニットを解放することであり得る。たとえば、プロセッサ12が、グラフィックスドライバ22を介して、第1のメモリユニットと第2のメモリユニットとを満たし、第3のメモリユニットを部分的に満たすコマンドの第1のセットを書き込んだと仮定する。同じく、この例では、コマンドの第1のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあったと仮定する。
[0059]この例では、プロセッサ12は、グラフィックスドライバ22を介して、プロセッサ12がコマンドの第1のセットを第3のメモリユニットに書き込み終えたところから開始してコマンドの第2のセットを書き込み始め得る。たとえば、コマンドの第1のセットはコマンドの前のセットと見なされ得、コマンドの第2のセットはコマンドの現在セットと見なされ得る。しかしながら、この例では、プロセッサ12は、コマンドの第2の(たとえば、現在)セットのうちのコマンドのすべてを第3のメモリユニットと第4のメモリユニットとの残りに書き込むことが可能でないことがある。この例では、チェーンサイズは4つのメモリユニットであり得、したがって、グラフィックスドライバ22は、メモリユニットのチェーン中の第4のメモリユニットの後に1つのメモリユニットをリンクすることが可能でないことがある。
[0060]グラフィックスドライバ22がコマンドの第2のセットからのコマンドで第4のメモリユニットを満たした後、プロセッサ12は、グラフィックスドライバ22を介して、フラッシュ呼を実行し得る。それに応答して、プロセッサ12は、グラフィックスドライバ22を介して、最終的な実行のためにコマンドの第1のセットをGPU14にサブミットし得る(たとえば、コマンドの第1のセットが記憶されたロケーションを示すことによって利用可能にし得る)。プロセッサ12が、グラフィックスドライバ22を介して、メモリユニットに書き込むことが可能であったコマンドの第2のセットのうちのコマンドは、メモリユニット中に残っており、GPU14にまだサブミットされない。
[0061]また、フラッシュ呼の実行に応答して、プロセッサ12は、第1のメモリユニットと第2のメモリユニットとがコマンドの第1のセットのうちのコマンドのみを記憶したので、グラフィックスドライバ22を介して、メモリユニットのチェーンから第1のメモリユニットと第2のメモリユニットとを解放し得る。メモリユニットのチェーンから1つのメモリユニットを解放することは、チェーン中の他のメモリユニットとのそのメモリユニットのリンクを破壊することを意味し得る。第3のメモリユニットの少なくとも一部がメモリユニットの第2のセットのうちのコマンドを記憶するので、プロセッサ12は、グラフィックスドライバ22を介して、メモリユニットのチェーンから第3のメモリユニットを解放することが可能でないことがある。
[0062]メモリユニットのチェーンからの第1のメモリユニットと第2のメモリユニットとの解放がある場合、メモリユニットのチェーンは2つのメモリユニット(たとえば、第3のメモリユニットおよび第4のメモリユニット)を含み得る。チェーンサイズが4つのメモリユニットであるので、この例では、オペレーティングシステム20はバッファ26中の別のメモリユニットを割り振り得、グラフィックスドライバ22は、この新しいメモリユニットを前の第4のメモリユニットの終端にリンクし得る。
[0063]この接合において、3つのメモリユニットが、メモリユニット(すなわち、前の第3および第4のメモリユニット、ならびに新たにリンクされたメモリユニット)のチェーン中にあり得る。グラフィックスドライバ22は、次いで、コマンドの第2のセットのうちの残りのコマンド(すなわち、グラフィックスドライバ22が第4のメモリユニットを満たした後の残っているコマンド)を、新たにリンクされたメモリユニットに書き込み得る。グラフィックスドライバ22が、コマンドの第2のセットのうちの残りのコマンドのすべてを、新たにリンクされたメモリユニットに書き込むことが可能でない場合、オペレーティングシステム20は、バッファ26中の別のメモリユニットを割り振り得、グラフィックスドライバ22は、この新しいメモリユニットをメモリユニットのチェーンの3つのメモリユニットにリンクし、これは、チェーンサイズである4つのメモリユニットをもつメモリユニットのチェーンを生じ得る。
[0064]その上、フラッシュ呼の実行は、ハンドルのために割振りリストをリセットすることを生じる。たとえば、GPU14による最終的な実行のためにコマンドの第1のセットをサブミットすることに加えて、プロセッサ12は、グラフィックスドライバ22を介して、割振りリストをクリアし、コマンドの第2のセットに関連付けられたハンドルを割振りリストに記憶し得る。
[0065]上記の例では、コマンドの第1のセットを書き込んだ後に、コマンドの第1のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあったと仮定された。また、上記の例では、プロセッサ12は、グラフィックスドライバ22を介して、フラッシュ呼の一部としてどのコマンドをサブミットすべきかを決定した。以下で、プロセッサ12が、グラフィックスドライバ22を介して、関連するハンドルのための十分な空間が割振りリスト中にあるかを決定し得る様式、ならびにプロセッサ12が、グラフィックスドライバ22を介して、フラッシュ呼の一部としてどのコマンドをサブミットすべきかを決定し得る様式について説明する。
[0066]たとえば、コマンドのセットの書込み中に、グラフィックスドライバ22は、コマンドのセットのための十分な空間がメモリユニット中にあるかどうかの前の検証なしに、GetCmdSpace関数を周期的にトリガし得る。GetCmdSpace関数は、グラフィックスドライバ22が、メモリユニットのチェーンの終端にある1つのメモリユニットの終端に達したかどうか(すなわち、グラフィックスドライバ22が4つのメモリユニットのチェーンサイズをもつメモリユニットのチェーンの第4のメモリユニットに達したかどうか)を示し得る。GetCmdSpace関数が、グラフィックスドライバ22がメモリユニットのチェーンの終端にまだ達していないことを示す場合、グラフィックスドライバ22はコマンドの第1のセットのうちのコマンドを書き込み続け得る。
[0067]GetCmdSpace関数が、グラフィックスドライバ22がメモリユニットのチェーンの終端に達したことを示す場合、グラフィックスドライバ22は上記で説明したようにフラッシュ呼を実行し得る。また、グラフィックスドライバ22は、次いで、GetCmdSpace関数を再試行し得る。たとえば、フラッシュ呼は、オペレーティングシステム20が割り振る追加のメモリユニットをリンクするために空間を解放し得、次いで、グラフィックスドライバ22はGetCmdSpace関数を再試行し得、それにより、グラフィックスドライバ22がメモリユニットのチェーンの終端にまだ達していないことを示すことになる。
[0068]しかしながら、場合によっては、グラフィックスドライバ22は、コマンドのセットのうちのコマンドを書き込み終え得、コマンドの後続のセットからの追加のコマンドのための利用可能な空間がメモリユニット中に依然としてあり得る。この場合、プロセッサ12は、グラフィックスドライバ22を介して、(ConfirmWriteと呼ばれる)「書込み確認」コマンドを実行し得る。概して、プロセッサ12は、コマンドのセットのうちのコマンドをコマンドバッファに書き込んだ後に、グラフィックスドライバ22を介して、書込み確認コマンドを実行し得る。書込み確認コマンドの実行は1つまたは複数の目的を果たし得る。
[0069]グラフィックスドライバ22がコマンドのセットを書き込み終えたメモリユニット中のポイントから開始して、グラフィックスドライバ22が、コマンドの次のセットのためのコマンドを書き込み始めることができるように、グラフィックスドライバ22は、書込み確認コマンドの実行を用いて、グラフィックスドライバ22がコマンドのセットを書き込み終えたメモリユニット中のポイントを示し得る。メモリユニット中のコマンドのセットの終端のロケーションは「確認ポイント」と呼ばれる。
[0070]たとえば、プロセッサ12が、グラフィックスドライバ22を介して、コマンドの第1のセットのうちのコマンドを第1のメモリユニット、第2のメモリユニット、および部分的に第3のメモリユニットに書き込んだと仮定する。この例では、プロセッサ12は、グラフィックスドライバ22を介して、グラフィックスドライバ22がコマンドの第1のセット(たとえば、コマンドの前のセット)を書き込み終えた第3のメモリユニット中の確認ポイントを識別し得る。たとえば、グラフィックスドライバ22がコマンドの第1のセットを第3のメモリユニットに書き込み終えたところは、第3のメモリユニット中のコマンドの第1のセットの終端のロケーションである。この場合、確認ポイントを識別した後に、コマンドの第1のセットは、前に確認されたコマンドと見なされ得る。(今、コマンドの現在セットである)コマンドの第2のセットを書き込むと、プロセッサ12は、グラフィックスドライバ22を介して、第3のメモリユニット中の確認ポイントから開始してコマンドの第2のセットを書き込み始め得る。
[0071]さらに、グラフィックスドライバ22は、書込み確認コマンドの実行を用いて、コマンドのセットのうちのコマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを決定し得る。たとえば、グラフィックスドライバ22がコマンドのセットのうちのコマンドを書き込んでいるとき、プロセッサ12は、グラフィックスドライバ22を介して、AddPendingHandle()関数を実行し得る。AddPendingHandle関数を用いて、グラフィックスドライバ22は、コマンドのセットに関連付けられたハンドルを、確認されていないハンドルリストとも呼ばれる一時的割振りリストに追加し得る。
[0072]コマンドのセットを書き込んだ後に、確認されていないハンドルリストは、コマンドのセットに関連付けられたハンドルを含む。グラフィックスドライバ22は、次いで、確認されていないハンドルリスト中のハンドルをオペレーティングシステム20にサブミットすることを試み得る。たとえば、プロセッサ12は、グラフィックスドライバ22を介して、AddHandle()関数を実行し得る。AddHandle()関数を用いて、グラフィックスドライバ22は、確認されていないハンドルリスト中のハンドルをオペレーティングシステム20にサブミットし得る。それに応答して、プロセッサ12は、オペレーティングシステム20を介して、確認されていないハンドルリストのハンドルのための十分な空間が割振りリスト中にあるかどうかを決定し得る。
[0073]たとえば、割振りリストはコマンドの前のセットのハンドルを含み得、コマンドの前のセットのハンドルが割振りリストのアレイのうちの90%を使用すると仮定する。この例では、グラフィックスドライバ22は、確認されていないハンドルリスト中のハンドルをサブミットし得、確認されていないハンドルリスト中のハンドルが割振りリストのうちの10%未満を必要とする場合、グラフィックスドライバ22は、確認されていないハンドルリスト中のハンドルを割振りリストに記憶し得る。いくつかの例では、グラフィックスドライバ22は、確認されていないハンドルリストを形成するハンドルのための十分な空間が割振りリスト中にあるかどうかを最初に決定することなしに、確認されていないハンドルリスト中のハンドルを割振りリストに記憶することを試み得る。
[0074]しかしながら、確認されていないハンドルリスト中のハンドルが割振りリストのうちの10%以上を必要とする(たとえば、確認されていないハンドルリスト中のハンドルを割振りリスト中に記憶する試みが失敗した)場合、グラフィックスドライバ22はフラッシュ呼を実行し得る。フラッシュ呼に応答して、プロセッサ12は、グラフィックスドライバ22を介して、最終的な実行のために、割振りリストがそれのために関連ハンドルと関連するハンドルとを割振りリストに現在記憶するコマンドバッファに記憶されたコマンドをGPU14にサブミットし得る。また、フラッシュ呼に応答して、プロセッサ12は、オペレーティングシステム20を介して、割振りリストをリセットし得(すなわち、ハンドルをもつ割振りリストを空にし得)、それにより、グラフィックスドライバ22が、ちょうど書き込まれたコマンドのセットに関連付けられたハンドルを割振りリストに記憶することを可能にする。
[0075]このようにして、書込み確認コマンドの実行は、フラッシュ呼に応答してどのコマンドと関連するハンドルとがGPU14にサブミットされ得るかを示すことと見なされ得る。たとえば、グラフィックスドライバ22がコマンドの第1のセットを書き込んでいるとき、グラフィックスドライバ22は、(たとえば、AddPendingHandle()関数を介して)ハンドルの確認されていないリストを維持していると仮定する。また、グラフィックスドライバ22が、コマンドの第1のセットのすべてのコマンドをメモリユニットのチェーンのメモリユニット内に書き込むことが可能であると仮定する。
[0076]この例では、コマンドの第1のセットを書き込んだ後に、グラフィックスドライバ22は、書込み確認(ConfirmWrite)コマンドを実行し得る。書込み確認コマンドの一部として、グラフィックスドライバ22は、(たとえば、AddHandle()関数を介して)ハンドルの確認されていないリストをオペレーティングシステム20にサブミットし得る。この例では、ハンドルの確認されていないリストのハンドルのための十分な空間が割振りリスト中にあると仮定する。したがって、グラフィックスドライバ22は、ハンドルの確認されていないリストのハンドルを割振りリストに追加し、ハンドルの確認されていないリストをクリアし得る。グラフィックスドライバ22がハンドルの確認されていないリストのハンドルを割振りリストに追加することが可能であったので、書込み確認コマンドの一部として、グラフィックスドライバ22は、グラフィックスドライバ22がコマンドの第1のセットを書き込み終えたポイント(すなわち、確認ポイント)を識別し得る。たとえば、グラフィックスドライバ22は、メモリユニット中のコマンドの第1のセットの終端のロケーションにおける確認ポイントを識別し得る。プロセッサ12は、グラフィックスドライバ22を介して、コマンドの第1のセットをまだサブミットしないことがあり、フラッシュ呼まで待ち得る。
[0077]この接合において、プロセッサ12は、フレームを書き込んだと見なされ得る。本開示で使用するフレームという用語は、コマンドのセットと同義で使用される。フレームという用語は、同じくフレームと呼ばれることがあるレンダリングされた画像と混同されるべきでない。
[0078]本開示で説明する技法では、プロセッサ12が、グラフィックスドライバ22を介して、書込み確認コマンドを実行し、書込み確認コマンドの実行が成功した(すなわち、十分な空間が割振りリスト中にある)後、プロセッサ12は、グラフィックスドライバ22を介して、コマンドの第1のセットが「確認されたコマンド」であることを示し得る。プロセッサ12はまた、グラフィックスドライバ22を介して、どのメモリユニットが確認されたコマンドのみを記憶するかを識別し得る。
[0079]たとえば、プロセッサ12が、グラフィックスドライバ22を介して、コマンドの第1のセットでメモリユニットのチェーンの第1のメモリユニットと第2のメモリユニットとを満たし、第3のメモリユニットを部分的に満たしたと仮定する。この例では、第1のメモリユニットと第2のメモリユニットとは、確認されたコマンドのみを記憶し、グラフィックスドライバ22は、第1のメモリユニットと第2のメモリユニットとが確認されたコマンドのみを含むことを示し得る。たとえば、グラフィックスドライバ22は、メモリユニットのチェーンの各メモリユニットについての変数usedEntriesを維持し得る。
[0080]確認されたコマンドのみを記憶するメモリユニットについて、グラフィックスドライバ22は、それらのメモリユニットのために、変数usedEntriesをconfirmedEntriesに等しく設定し得る。この例では、第1のメモリユニットと第2のメモリユニットとについて、グラフィックスドライバ22は、第1のメモリユニットと第2のメモリユニットとが確認されたコマンドのみを記憶することを示すために、変数usedEntriesをconfirmedEntriesに等しく設定し得る。第3のメモリユニットに関して、グラフィックスドライバ22は、変数usedEntriesをconfirmedEntriesでないように設定し得る(すなわち、usedEntries!=confirmedEntries)。これは、第3のメモリユニットが確認されたコマンドを部分的にのみ含むからであり得る。
[0081]プロセッサ12は、次いで、グラフィックドライバ22を介して、確認ポイントから開始してコマンドの第2のセットをメモリユニットのチェーンのメモリユニットに書き込み得る。たとえば、コマンドの第1のセットがフレーム0である場合、プロセッサ12は、グラフィックスドライバ22を介して、フレーム1を書き込み得、フレーム1は、確認ポイントから開始するメモリユニットのチェーンのメモリユニットへのコマンドの第2のセットである。
[0082]コマンドの第2のセットの書込み中に、グラフィックスドライバ22は、コマンドの第2のセットに関連付けられたハンドルをハンドルの確認されていないリストに記憶し得る。コマンドの第2のセットの書込み中に、グラフィックスドライバ22がメモリユニットのチェーンの終端に達し、まだ書き込まれていないコマンドの第2のセットのうちのコマンドがある場合、グラフィックスドライバ22はフラッシュ呼を実行し得る。
[0083]それに応答して、グラフィックスドライバ22は、すべての確認されたコマンドと、確認されたコマンドに関連付けられたハンドルとをサブミットし得る(たとえば、コマンドの第1のセットと、コマンドの第1のセットに関連付けられた割振りリスト中のハンドルとをサブミットし得る)。言い換えれば、グラフィックスドライバ22は、確認ポイントより前のすべてのコマンドとそれらの関連するハンドルとをサブミットし得る。たとえば、前の例に沿って、グラフィックスドライバ22は、第1および第2のメモリユニット中のすべてのコマンドと、確認ポイントまでの第3のメモリユニットを部分的に満たす確認されたコマンドとをサブミットし得る。グラフィックスドライバ22はまた、割振りリスト中のハンドルをサブミットし、割振りリストをクリアし得る。
[0084]グラフィックスドライバ22はまた、メモリユニットのチェーンから第1および第2のメモリユニットを解放し、コマンドの第2のセットのうちの残りのコマンドを、オペレーティングシステム20によって割り振られた追加のメモリユニットに書き込み得る。確認されたコマンドを記憶しないメモリユニットの場合、グラフィックスドライバ22は、それらのメモリユニットについて、変数confirmedEntriesを0に等しく設定し得る。グラフィックスドライバ22は、次いで、コマンドの第2のセットを書き込んだ後に、書込み確認コマンドを実行し得る。この場合、グラフィックスドライバ22は、コマンドの第1のセットをフラッシュした後に割振りリストをクリアしたので、一時的にハンドルの確認されていないリストに記憶されたコマンドの第2のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあることになる。また、書込み確認コマンドに応答して、コマンドの第2のセットは、確認されたコマンドと見なされ得、グラフィックスドライバ22は、グラフィックスドライバ22がコマンドの第2のセットを書き込み終えたところの終端に確認ポイントを移動し得る。
[0085]上記の場合では、コマンドの第2のセットの書込み中に、グラフィックスドライバ22は、メモリユニットのチェーンにまだ書き込まれていないコマンドの第2のセットのうちのコマンドでメモリユニットのチェーンの終端に達した。いくつかの例では、グラフィックスドライバ22は、コマンドの第2のセットのすべてのコマンドを書き込み、依然としてメモリユニットのチェーンの終端に達していないことがある。これらの例では、グラフィックスドライバ22は、コマンドの第2のセットのすべてのコマンドを書き込むことと、依然としてメモリユニットのチェーンの終端に達しないこととが可能であるので、グラフィックスドライバ22はフラッシュ呼を実行しないことがあり、したがって、コマンドの第1のセット(すなわち、確認されたコマンド)をサブミットしないことがあり、コマンドの第1のセットに関連付けられたハンドルの割振りリストをクリアしないことがある。
[0086]また、これらの例では、コマンドの第2のセットのすべてのコマンドを書き込んだ後に、プロセッサ12は、グラフィックスドライバ22を介して、書込み確認コマンドを実行し得る。書込み確認コマンドの一部として、グラフィックスドライバ22は、ハンドルの確認されていないリスト中のハンドルを割振りリストに追加することを試み得る。この場合、割振りリストは、コマンドの第1のセットに関連付けられたハンドルを含み得る。ハンドルの確認されていないリスト中のコマンドの第2のセットのハンドルを追加することが、割振りリストが、それの固定サイズが許すハンドルよりも多くのハンドルを記憶することを必要としない場合、グラフィックスドライバ22は、割振りリストにコマンドの第2のセットのハンドルを追加し、ハンドルの確認されていないリストをクリアし、確認ポイントをコマンドの第2のセットの終端に移動する。
[0087]ハンドルの確認されていないリスト中のコマンドの第2のセットのハンドルを追加することが、割振りリストが、それの固定サイズが許すハンドルよりも多くのハンドルを記憶することを必要とする場合、グラフィックスドライバ22はフラッシュ呼を実行し得る。それに応答して、グラフィックスドライバ22は、すべての確認されたコマンド(たとえば、コマンドの第1のセット)と、関連するハンドルとをサブミットし、割振りリストをクリアし、確認されたコマンドのみを記憶するメモリユニットを解放し得る。グラフィックスドライバ22は、次いで、コマンドの第2のセットのハンドルを、ハンドルのちょうどクリアされた割振りリストに記憶し、確認ポイントをコマンドの第2のセットの終端に移動し、コマンドの第2のセットが確認されたコマンドであることを示し得る。
[0088]図2は、本開示で説明する1つまたは複数の例示的な技法による、コマンドバッファに記憶された、確認されたコマンドと確認されていないコマンドとを示す概念図である。図3は、本開示で説明する1つまたは複数の例示的な技法による、コマンドバッファに記憶された、確認されたコマンドと確認されていないコマンドとを示す別の概念図である。図2は、グラフィックスドライバ22がメモリユニットのチェーンのメモリユニットを満たし、追加のコマンドが、まだ書き込まれていないコマンドのセット中にあるので、グラフィックスドライバ22がフラッシュ呼を実行する例示的な場合を示している。図3は、グラフィックスドライバ22は、コマンドのセットのすべてのコマンドを書き込むが、割振りリスト中の空間の欠如のためにフラッシュ呼を実行する例示的な場合を示している。
[0089]たとえば、図2および図3では、メモリユニットのチェーンは、メモリユニットAとメモリユニットBとメモリユニットCとメモリユニットDとを含む。グラフィックスドライバ22は、メモリユニットA、B、C、およびDが常駐するバッファ26中のロケーションを識別するそれらのそれぞれのポインタを介して、メモリユニットA、B、C、およびDを参照し得る。たとえば、図2および図3は、メモリユニットのチェーン中の第1のメモリユニット(たとえば、メモリユニットA)を指すIB2チェーンヘッドポインタを示す。オペレーティングシステム20は、IB2チェーンヘッドポインタについての情報をバッファ24(たとえば、IB1バッファ)に記憶し得、メモリユニットA、B、C、およびDはバッファ26中に常駐し得る。
[0090]図2および図3では、グラフィックスドライバ22は、コマンドの第1のセットをメモリユニットAとメモリユニットBとに書き込み、(Cpartialによって示された)メモリユニットCに部分的に書き込み得る。コマンドの第1のセットの書込みの後に、グラフィックスドライバ22は書込み確認コマンドを実行し得る。図2および図3の例では、グラフィックスドライバ22は、コマンドの第1のセットに関連付けられたハンドルを割振りリストに記憶することが可能であった。図2および図3の例では、グラフィックスドライバ22は、メモリユニットCの中央の(たとえば、Cpartialの終端における)確認ポイントを識別し得る。
[0091]グラフィックスドライバ22がコマンドの第1のセットのすべてのコマンドをメモリユニットのチェーンのメモリユニットに書き込むことが可能であり、コマンドの第1のセットに関連付けられたハンドルを割振りリストに記憶することが可能であったので、コマンドの第1のセットは、グレーシェーディングで示される確認されたコマンドと見なされ得る。また、図示のように、メモリユニットAおよびBが確認されたコマンドのみを記憶するので、グラフィックスドライバ22はusedEntries変数をconfirmedEntriesに等しく設定し得る。メモリユニットCが確認されたコマンドを部分的にのみ記憶するので、グラフィックスドライバ22はusedEntries変数をconfirmedEntriesに等しくなく設定し得る。
[0092]図2および図3では、グラフィックスドライバ22は、次いで、確認ポイントから開始してコマンドの第2のセットをメモリユニットのチェーンに書き込み得る。たとえば、グラフィックスドライバ22は、グラフィックスドライバ22がコマンドのセットを書き込み始めるべきであるところを示す(開始ポインタと呼ばれる)ポインタを維持し得る。最初に、開始ポインタはIB2チェーンヘッドポインタを指す。書込み確認コマンドの実行の成功の後に、グラフィックスドライバ22は開始ポインタを確認ポイントに移動し得る。たとえば、図2および図3では、グラフィックスドライバ22は開始ポインタをCpartialの終端においてに移動し得る。
[0093]図2および図3では、コマンドの第2のセットの書込みは、確認されていないコマンドで示されている。コマンドの第2のセットは、グラフィックスドライバ22が書込み確認コマンドをまだ正常に実行していなかったので確認されていないコマンドである。図2および図3では、グラフィックスドライバ22は、メモリユニットC(Cnext)を満たし、メモリユニットDを(図2では)満たすか、または(図3では)部分的に満たすコマンドの第2のセットのうちのコマンドを書き込む必要がある。メモリユニットDが確認されていないコマンドのみを記憶するので、メモリユニットDのためのconfirmedEntriesは0に等しく設定される。
[0094]図2では、グラフィックスドライバ22は、コマンドの第2のセットを書き込み、メモリユニットのチェーンの終端に達し得、まだ書き込まれていないコマンドのセット中のコマンドが依然としてある。この場合、グラフィックスドライバ22は、フラッシュ呼を実行し得、最終的な実行のために、すべての確認されたコマンドをGPU14にサブミットし得る。
[0095]図3では、グラフィックスドライバ22は、コマンドの第2のセットのすべてのコマンドをメモリユニットのチェーン内に書き込むことが可能であった(すなわち、メモリユニットDは、Dpartialまでのみ満たされる)。図3では、グラフィックスドライバ22は、書込み確認呼を実行し得るが、この場合、コマンドの第2のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にないことがある。たとえば、コマンドの第2のセットの書込み中に、グラフィックスドライバ22は、コマンドの第2のセットに関連付けられたハンドルをハンドルの確認されていないリストに一時的に記憶し得る。書込み確認コマンドの実行を用いて、グラフィックスドライバ22は、確認されていないハンドルリスト中のハンドルを割振りリストに追加することを試み得る。しかしながら、割振りリストは、コマンドの第1のセット(すなわち、確認されたコマンド)に関連付けられたハンドルをすでに含み得、コマンドの第2のセットに関連付けられたハンドルを割振りリストに追加するための十分な空間がグラフィックスドライバ22のための割振りリスト中にないことがある。この場合、グラフィックスドライバ22はフラッシュ呼を実行し得、最終的な実行のために、すべての確認されたコマンドと関連するハンドルとをGPU14にサブミットし得る。
[0096]いくつかの例では、確認されたコマンドをサブミットすることの一部として、グラフィックスドライバ22は、開始ポインタのロケーションと、確認されたコマンドを記憶するメモリユニットのためのそれぞれのポインタとをGPU14に示し得る。さらに、グラフィックスドライバ22は、確認ポイントを指すポインタをGPU14に示し得る。GPU14は、次いで、示されたポインタに基づいてコマンドバッファ(たとえば、バッファ26)から確認されたコマンドのすべてを一緒に取り出すことが可能であり得る。グラフィックスドライバ22がコマンドの次のセットを確認した後、現在確認ポイントを指すポインタは、コマンドの次のセットのための開始ポインタになり、新たに決定された確認ポイント(すなわち、グラフィックスドライバ22がコマンドの第2のセットを書き込み終えたところ)は、確認されたコマンドのエンドポイントになる。
[0097]このようにして、本技法は、最終的な実行のためにどのコマンドがGPU14にサブミットされる準備ができているかを示すために確認ベース方法を利用する。確認ベース方法は、グラフィックスドライバ22が、コマンドを記憶するための十分な空間がメモリユニット中にあるかどうか、またはハンドルのための十分な空間が割振りリスト中にあるかどうかを前もって決定する必要なしに、コマンドをコマンドバッファに書き込むことを可能にする。グラフィックスドライバ22がフラッシュ呼を実行するのは、コマンドを書き込むことより前にフラッシュ呼を発行することではなく、グラフィックスドライバ22が、コマンドの書込み中に十分な空間がメモリユニット中にないと決定したときである。同じく、グラフィックスドライバ22がフラッシュ呼を実行するのは、コマンドを書き込むことより前にフラッシュ呼を発行することではなく、グラフィックスドライバ22が、コマンドの書込みの後に、コマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にないと決定したときである。
[0098]図4は、本開示で説明する1つまたは複数の例示的な技法による例示的な動作を示すフローチャートである。説明の目的で、本技法について図1に関して説明する。
[0099]プロセッサ12は、グラフィックスドライバ22を介して、現在確認ポイントから開始してコマンドの現在セットをコマンドバッファのメモリユニットのチェーンのメモリユニットに書き込む(40)。たとえば、コマンドの現在セットを書き込むことより前に、プロセッサ12は、コマンドの前のセットをメモリユニットのチェーンに書き込んでいることがあり、同じく、コマンドの前のセットに関連付けられたハンドルを(たとえば、確認されていないハンドルリスト中の)一時リストに書き込んでいることがある。
[0100]コマンドの前のセットを書き込んだ後に、プロセッサ12は、書込み確認(たとえば、ConfirmWrite)コマンドを実行していることがある。この例では、コマンドの前のセットの書込み中に、メモリユニットのチェーンの終端に達することなしにコマンドの前のセットのすべてを記憶するための十分な空間がメモリユニットのチェーンにあった(たとえば、メモリユニットのチェーンに書き込まれなかったコマンドの前のセットのうちのコマンドがない)と仮定する。書込み確認コマンドの実行の一部として、プロセッサ12は、一時リスト中のハンドルを割振りリスト中に記憶していることがある(たとえば、コマンドの前のセットのハンドルのための十分な空間が割振りリスト中にあった)。この例では、書込み確認コマンドの実行の一部として、プロセッサ12は、プロセッサ12がコマンドの前のセットを書き込み終えた1つのメモリユニット中のポイントである現在確認ポイントを識別し得る。したがって、コマンドの現在セットのために、プロセッサ12は、現在確認ポイントからコマンドの現在セットのうちのコマンドを書き込み始め得る。
[0101]プロセッサ12は、グラフィックスドライバ22を介して、コマンドの現在セットの書込み中に、コマンドの現在セットに関連付けられたハンドルを(たとえば、確認されていないハンドルリスト中の)一時リストに記憶する(42)。たとえば、プロセッサ12は新しい一時リストを作成し、コマンドの現在セットに関連付けられたハンドルをこの新たに作成された一時リストに記憶し得る。別の例として、プロセッサ12は前の一時リストをクリアし、コマンドの現在セットに関連付けられたハンドルをこの今クリアされた一時リストに記憶し得る。たとえば、一時リストからのコマンドの前のセットに関連付けられたハンドルを割振りリストに記憶した後に、プロセッサ12は一時リストをクリアし、プロセッサ12がコマンドの現在セットに関連付けられたハンドルを一時リストに記憶することを可能にし得る。
[0102]図示のように、プロセッサ12は、グラフィックスドライバ22を介して、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかを決定する(44)。プロセッサ12は、グラフィックスドライバ22を介して、まだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合(44のはい)、プロセッサ12は、グラフィックスドライバ22を介して、最終的な実行のために前に確認されたコマンドをサブミットする(46)。
[0103]たとえば、前に確認されたコマンドは、プロセッサ12によってメモリユニットのチェーンに前に記憶された、現在確認ポイントより前のコマンド(たとえば、コマンドの前のセット)であり得る。たとえば、前に確認されたコマンドは、コマンドの現在セットの書込みの前にプロセッサ12によってメモリユニットのチェーンに記憶されたコマンドの前のセットであり得、コマンドの現在のセットのために、プロセッサ12は、十分な空間がメモリユニットのチェーン中にあったことと、コマンドの前のセットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあったこととを確認することが可能であった。
[0104]プロセッサ12が、グラフィックスドライバ22を介して、コマンドの現在セットを書き込んだ後にメモリユニットのチェーンの終端に達しない場合(44のいいえ)、プロセッサ12は、グラフィックスドライバ22を介して、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかを決定する(48)。たとえば、プロセッサ12は、グラフィックスドライバ22を介して、割振りリストに一時リスト中のハンドルを追加することが、利用可能である空間よりも多くの空間を割振りリスト中に必要とするかどうかを決定し得る。
[0105]一例として、プロセッサ12は、実行の一部として書込み確認コマンドを実行し得、プロセッサ12は、割振りリストに一時リスト中のハンドルを追加することを試み得る。ハンドルの追加が失敗した場合、プロセッサ12は、割振りリストに一時リスト中のハンドルを追加することが、利用可能である空間よりも多くの空間を割振り中に必要とすると決定し得る。ハンドルの追加が成功した場合、プロセッサ12は、割振りリストに一時リスト中のハンドルを追加することが、利用可能である空間よりも多くの空間を割振りリスト中に必要としないと決定し得る。このようにして、プロセッサ12は、ハンドルを一時リストに記憶するための十分な空間が割振りリスト中にあるかどうかを前もって決定する必要がないことがあり、代わりに、十分な空間が割振りリスト中にあるかどうかを最初に検査することなしに、割振りリストに一時リスト中のハンドルを追加することを試み得る。
[0106]プロセッサ12が、グラフィックスドライバ22を介して、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にないと決定した場合(48のいいえ)、プロセッサ12は、上記で説明したように、グラフィックスドライバ22を介して、最終的な実行のために、前に確認されたコマンドをサブミットする(46)。プロセッサ12が、グラフィックスドライバ22を介して、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあると決定した場合(48のはい)、プロセッサ12は、グラフィックスドライバ22を介して、確認ポイントをコマンドの現在セットの終端に移動する(50)。さらに、グラフィックスドライバ22は、コマンドの現在セットに関連付けられたハンドルを割振りリストに記憶し得る。
[0107]プロセッサ12は、コマンドバッファに書き込まれる必要があるコマンドの追加のセットがあるかどうかを決定する(52)。書き込まれる必要がある追加のコマンドのセットがある場合(52のはい)、コマンドの追加のセットはコマンドの現在セットと見なされ得、コマンドの現在セットは、前に確認されたコマンドと見なされ得、プロセッサ12が確認ポイントを移動したポイントは、現在確認ポイントと見なされ得る。プロセッサ12は、次いで、(たとえば、確認ポイントに新たに移動された)現在確認ポイントからコマンドの現在セットをメモリユニットのチェーンのメモリユニットに書き込む(40)。プロセッサ12は、次いで、図4に示されている例示的なステップを繰り返し得る。書き込まれる必要がある追加のコマンドのセットがない場合(52のいいえ)、プロセッサ12は、書き込まれる必要があるコマンドのセットがあるまで、コマンドのセットの書込みを終了し得る。
[0108]図5は、本開示で説明する1つまたは複数の例示的な技法を実装するように構成され得るデバイスを示すブロック図である。たとえば、図5に例示的なデバイス58を示す。デバイス58は、図5でより詳細に示される図1のデバイス10の1つの例であり得る。図5の例では、デバイス58は、プロセッサ12と、GPU14と、システムメモリ16とを含み得る。簡潔のために、プロセッサ12、GPU14、およびシステムメモリ16については、図1に関して前に説明しているので、これらの構成要素は、さらに図5に関して説明しない。デバイス58はまた、ディスプレイプロセッサ60と、トランシーバモジュール62と、ユーザインターフェース64と、ディスプレイ66とを含み得る。トランシーバモジュール62とディスプレイプロセッサ60とは両方とも、プロセッサ12および/またはGPU14と同じ集積回路(IC)の一部であり得るか、両方ともプロセッサ12および/またはGPU14を含む1つまたは複数のICの外部にあり得るか、あるいはプロセッサ12および/またはGPU14を含むICの外部にあるIC中に形成され得る。
[0109]デバイス58は、明快のために図5に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス58は、デバイス58がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図5に示されていないスピーカーおよびマイクロフォンを含み、またはデバイス58がメディアプレーヤである例においてスピーカーを含み得る。デバイス58はまた、ビデオカメラを含み得る。さらに、デバイス58に示された様々なモジュールおよびユニットは、デバイス58のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース64およびディスプレイ66は、デバイス58が、デスクトップコンピュータ、あるいは外部ユーザインターフェースまたはディスプレイとインターフェースする能力がある他のデバイスである例において、デバイス58の外部にあり得る。
[0110]ユーザインターフェース64の例には、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース64はまた、タッチスクリーンであり得、ディスプレイ66の一部として組み込まれ得る。トランシーバモジュール62は、デバイス58と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール62は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。
[0111]いくつかの例では、GPU14は、十分に形成された画像をシステムメモリ16に記憶し得る。ディスプレイプロセッサ60はシステムメモリ16から画像を取り出し、ディスプレイ66のピクセルに画像を表示するために照明させる値を出力し得る。ディスプレイ66は、GPU14によって生成された画像コンテンツを表示するデバイス10のディスプレイであり得る。ディスプレイ66は、液晶ディスプレイ(LCD)、有機発光ダイオードディスプレイ(OLED)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスであり得る。
[0112]1つまたは複数の例において、前述の機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能はコンピュータ可読媒体上に記憶され得る。コンピュータ可読媒体はコンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気記憶デバイスを備えることができる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−ray(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
[0113]コードは、1つまたは複数のデジタル信号プロセッサ(DSP)などの1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に好適な他の構造のいずれかを指す。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
[0114]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、ハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
[0115]様々な例について説明した。これらの例および他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
コマンドを記憶するための方法であって、前記方法は、
プロセッサを用いて、コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
前記プロセッサを用いて、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記プロセッサを用いて、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットすることとを備える、方法。
[C2]
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することをさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定することは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定することを備える、C1に記載の方法。
[C3]
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとをさらに備える、C1に記載の方法。
[C4]
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとをさらに備える、C1に記載の方法。
[C5]
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることをさらに備える、C1に記載の方法。
[C6]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、C1に記載の方法。
[C7]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、C1に記載の方法。
[C8]
前記プロセッサが第1のプロセッサを備え、コマンドの前記現在セットは、第2の異なるプロセッサが実行するためのものである、C1に記載の方法。
[C9]
前記第1のプロセッサが中央処理ユニット(CPU)を備え、前記第2のプロセッサがグラフィックス処理ユニット(GPU)を備える、C8に記載の方法。
[C10]
コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットすることとを行うように構成された、デバイス。
[C11]
前記プロセッサが、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するように構成され、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するために、前記プロセッサは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するように構成された、C10に記載のデバイス。
[C12]
前記プロセッサは、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行うように構成された、C10に記載のデバイス。
[C13]
前記プロセッサは、
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとを行うように構成された、C10に記載のデバイス。
[C14]
前記プロセッサは、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするように構成された、C10に記載のデバイス。
[C15]
前記プロセッサは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、C10に記載のデバイス。
[C16]
前記プロセッサは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、C10に記載のデバイス。
[C17]
前記プロセッサが第1のプロセッサを備え、前記デバイスが、第2の異なるプロセッサをさらに備え、コマンドの前記現在セットは、前記第2のプロセッサが実行するためのものである、C10に記載のデバイス。
[C18]
前記第1のプロセッサが中央処理ユニット(CPU)を備え、前記第2のプロセッサがグラフィックス処理ユニット(GPU)を備える、C17に記載のデバイス。
[C19]
実行されたとき、1つまたは複数のプロセッサに、
コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに前記1つまたは複数のプロセッサによって記憶された前に確認されたコマンドをサブミットすることとを行わせる、その上に記憶された命令を有するコンピュータ可読記憶媒体。
[C20]
前記1つまたは複数のプロセッサに、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することを行わせる命令をさらに備え、
ここにおいて、前記1つまたは複数のプロセッサに、十分な空間が前記割振りリスト中にあるかどうかを決定させる前記命令は、前記1つまたは複数のプロセッサに、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定させる命令を備える、C19に記載のコンピュータ可読記憶媒体。
[C21]
前記1つまたは複数のプロセッサに、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行わせる命令をさらに備える、C19に記載のコンピュータ可読記憶媒体。
[C22]
前記1つまたは複数のプロセッサに、
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとを行わせる命令をさらに備える、C19に記載のコンピュータ可読記憶媒体。
[C23]
前記1つまたは複数のプロセッサに、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることを行わせる命令をさらに備える、C19に記載のコンピュータ可読記憶媒体。
[C24]
前記1つまたは複数のプロセッサに、前記1つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記1つまたは複数のプロセッサに、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、C19に記載のコンピュータ可読記憶媒体。
[C25]
前記1つまたは複数のプロセッサに、前記1つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記1つまたは複数のプロセッサに、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、C19に記載のコンピュータ可読記憶媒体。
[C26]
コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むための手段と、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、またはコマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットするための手段とを備える、デバイス。
[C27]
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するための手段をさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するための前記手段は、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するための手段を備える、C26に記載のデバイス。
[C28]
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶するための手段と、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動するための手段とをさらに備える、C26に記載のデバイス。
[C29]
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振るための手段とをさらに備える、C26に記載のデバイス。
[C30]
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするための手段をさらに備える、C26に記載のデバイス。
[C31]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、C26に記載のデバイス。
[C32]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、C26に記載のデバイス。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
コマンドを記憶するための方法であって、前記方法は、
プロセッサを用いて、コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
前記プロセッサを用いて、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記プロセッサを用いて、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットすることとを備える、方法。
[C2]
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することをさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定することは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定することを備える、C1に記載の方法。
[C3]
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとをさらに備える、C1に記載の方法。
[C4]
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとをさらに備える、C1に記載の方法。
[C5]
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることをさらに備える、C1に記載の方法。
[C6]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、C1に記載の方法。
[C7]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、C1に記載の方法。
[C8]
前記プロセッサが第1のプロセッサを備え、コマンドの前記現在セットは、第2の異なるプロセッサが実行するためのものである、C1に記載の方法。
[C9]
前記第1のプロセッサが中央処理ユニット(CPU)を備え、前記第2のプロセッサがグラフィックス処理ユニット(GPU)を備える、C8に記載の方法。
[C10]
コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットすることとを行うように構成された、デバイス。
[C11]
前記プロセッサが、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するように構成され、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するために、前記プロセッサは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するように構成された、C10に記載のデバイス。
[C12]
前記プロセッサは、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行うように構成された、C10に記載のデバイス。
[C13]
前記プロセッサは、
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとを行うように構成された、C10に記載のデバイス。
[C14]
前記プロセッサは、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするように構成された、C10に記載のデバイス。
[C15]
前記プロセッサは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、C10に記載のデバイス。
[C16]
前記プロセッサは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、C10に記載のデバイス。
[C17]
前記プロセッサが第1のプロセッサを備え、前記デバイスが、第2の異なるプロセッサをさらに備え、コマンドの前記現在セットは、前記第2のプロセッサが実行するためのものである、C10に記載のデバイス。
[C18]
前記第1のプロセッサが中央処理ユニット(CPU)を備え、前記第2のプロセッサがグラフィックス処理ユニット(GPU)を備える、C17に記載のデバイス。
[C19]
実行されたとき、1つまたは複数のプロセッサに、
コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに前記1つまたは複数のプロセッサによって記憶された前に確認されたコマンドをサブミットすることとを行わせる、その上に記憶された命令を有するコンピュータ可読記憶媒体。
[C20]
前記1つまたは複数のプロセッサに、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することを行わせる命令をさらに備え、
ここにおいて、前記1つまたは複数のプロセッサに、十分な空間が前記割振りリスト中にあるかどうかを決定させる前記命令は、前記1つまたは複数のプロセッサに、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定させる命令を備える、C19に記載のコンピュータ可読記憶媒体。
[C21]
前記1つまたは複数のプロセッサに、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行わせる命令をさらに備える、C19に記載のコンピュータ可読記憶媒体。
[C22]
前記1つまたは複数のプロセッサに、
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとを行わせる命令をさらに備える、C19に記載のコンピュータ可読記憶媒体。
[C23]
前記1つまたは複数のプロセッサに、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることを行わせる命令をさらに備える、C19に記載のコンピュータ可読記憶媒体。
[C24]
前記1つまたは複数のプロセッサに、前記1つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記1つまたは複数のプロセッサに、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、C19に記載のコンピュータ可読記憶媒体。
[C25]
前記1つまたは複数のプロセッサに、前記1つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記1つまたは複数のプロセッサに、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、C19に記載のコンピュータ可読記憶媒体。
[C26]
コマンドバッファ中のメモリユニットのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むための手段と、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、またはコマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットするための手段とを備える、デバイス。
[C27]
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するための手段をさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するための前記手段は、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するための手段を備える、C26に記載のデバイス。
[C28]
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶するための手段と、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動するための手段とをさらに備える、C26に記載のデバイス。
[C29]
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振るための手段とをさらに備える、C26に記載のデバイス。
[C30]
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするための手段をさらに備える、C26に記載のデバイス。
[C31]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、C26に記載のデバイス。
[C32]
前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、C26に記載のデバイス。
Claims (32)
- コマンドを記憶するための方法であって、前記方法は、
プロセッサを用いて、コマンドバッファ中のメモリユニットのチェーンのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むことと、ここにおいてメモリユニットの前記チェーンは、前記プロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
前記プロセッサを用いて、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、または
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前記前に確認されたコマンドをサブミットすることとを備える、方法。 - コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することをさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定することは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定することを備える、請求項1に記載の方法。 - コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとをさらに備える、請求項1に記載の方法。 - 前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとをさらに備える、請求項1に記載の方法。 - コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることをさらに備える、請求項1に記載の方法。
- 前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、請求項1に記載の方法。
- 前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、請求項1に記載の方法。
- 前記プロセッサが第1のプロセッサを備え、コマンドの前記現在セットは、第2の異なるプロセッサが実行するためのものである、請求項1に記載の方法。
- 前記第1のプロセッサが中央処理ユニット(CPU)を備え、前記第2のプロセッサがグラフィックス処理ユニット(GPU)を備える、請求項8に記載の方法。
- コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのチェーンのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むことと、ここにおいてメモリユニットの前記チェーンは、前記プロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、または
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前記前に確認されたコマンドをサブミットすることとを行うように構成された、デバイス。 - 前記プロセッサが、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するように構成され、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するために、前記プロセッサは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するように構成された、請求項10に記載のデバイス。 - 前記プロセッサは、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行うように構成された、請求項10に記載のデバイス。 - 前記プロセッサは、
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとを行うように構成された、請求項10に記載のデバイス。 - 前記プロセッサは、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするように構成された、請求項10に記載のデバイス。 - 前記プロセッサは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、請求項10に記載のデバイス。
- 前記プロセッサは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、請求項10に記載のデバイス。
- 前記プロセッサが第1のプロセッサを備え、前記デバイスが、第2の異なるプロセッサをさらに備え、コマンドの前記現在セットは、前記第2のプロセッサが実行するためのものである、請求項10に記載のデバイス。
- 前記第1のプロセッサが中央処理ユニット(CPU)を備え、前記第2のプロセッサがグラフィックス処理ユニット(GPU)を備える、請求項17に記載のデバイス。
- 実行されたとき、1つまたは複数のプロセッサに、
コマンドバッファ中のメモリユニットのチェーンのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むことと、ここにおいてメモリユニットの前記チェーンは、前記1つまたは複数のプロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも1つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに前記1つまたは複数のプロセッサによって記憶された前記前に確認されたコマンドをサブミットすることとを行わせる、その上に記憶された命令を有する非一時的なコンピュータ可読記憶媒体。 - 前記1つまたは複数のプロセッサに、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することを行わせる命令をさらに備え、
ここにおいて、前記1つまたは複数のプロセッサに、十分な空間が前記割振りリスト中にあるかどうかを決定させる前記命令は、前記1つまたは複数のプロセッサに、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定させる命令を備える、請求項19に記載のコンピュータ可読記憶媒体。 - 前記1つまたは複数のプロセッサに、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行わせる命令をさらに備える、請求項19に記載のコンピュータ可読記憶媒体。 - 前記1つまたは複数のプロセッサに、
前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振ることとを行わせる命令をさらに備える、請求項19に記載のコンピュータ可読記憶媒体。 - 前記1つまたは複数のプロセッサに、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることを行わせる命令をさらに備える、請求項19に記載のコンピュータ可読記憶媒体。 - 前記1つまたは複数のプロセッサに、前記1つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記1つまたは複数のプロセッサに、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、請求項19に記載のコンピュータ可読記憶媒体。
- 前記1つまたは複数のプロセッサに、前記1つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記1つまたは複数のプロセッサに、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、請求項19に記載のコンピュータ可読記憶媒体。
- コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのチェーンのうちの1つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むための手段と、ここにおいてメモリユニットの前記チェーンは、前記プロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、または
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかのうちの少なくとも1つを決定するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、またはコマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前記前に確認されたコマンドをサブミットするための手段とを備える、デバイス。 - コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するための手段をさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するための前記手段は、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するための手段を備える、請求項26に記載のデバイス。 - コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶するための手段と、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動するための手段とをさらに備える、請求項26に記載のデバイス。 - 前記現在確認ポイントが識別された前記1つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに1つまたは複数の追加のメモリユニットを割り振るための手段とをさらに備える、請求項26に記載のデバイス。 - コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするための手段をさらに備える、請求項26に記載のデバイス。
- 前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、請求項26に記載のデバイス。
- 前記1つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、請求項26に記載のデバイス。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361829487P | 2013-05-31 | 2013-05-31 | |
US61/829,487 | 2013-05-31 | ||
US14/027,816 | 2013-09-16 | ||
US14/027,816 US9165337B2 (en) | 2013-05-31 | 2013-09-16 | Command instruction management |
PCT/US2014/036239 WO2014193591A1 (en) | 2013-05-31 | 2014-04-30 | Command instruction management |
Publications (2)
Publication Number | Publication Date |
---|---|
JP5969145B1 true JP5969145B1 (ja) | 2016-08-17 |
JP2016528566A JP2016528566A (ja) | 2016-09-15 |
Family
ID=51984586
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015563145A Expired - Fee Related JP5969145B1 (ja) | 2013-05-31 | 2014-04-30 | コマンド命令管理 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9165337B2 (ja) |
EP (1) | EP3005304A1 (ja) |
JP (1) | JP5969145B1 (ja) |
KR (1) | KR101676990B1 (ja) |
CN (1) | CN105247478B (ja) |
WO (1) | WO2014193591A1 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9804900B2 (en) * | 2014-05-30 | 2017-10-31 | Apple Inc. | Manipulating shaders with object-oriented programming |
US20160077545A1 (en) * | 2014-09-17 | 2016-03-17 | Advanced Micro Devices, Inc. | Power and performance management of asynchronous timing domains in a processing device |
WO2016197341A1 (en) * | 2015-06-10 | 2016-12-15 | Intel Corporation | Webgl application analyzer |
US10204396B2 (en) * | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
US10685473B2 (en) * | 2017-05-31 | 2020-06-16 | Vmware, Inc. | Emulation of geometry shaders and stream output using compute shaders |
US10269167B1 (en) | 2018-05-21 | 2019-04-23 | Apple Inc. | Indirect command buffers for graphics processing |
TWI660346B (zh) * | 2018-09-07 | 2019-05-21 | 大陸商深圳大心電子科技有限公司 | 記憶體管理方法以及儲存控制器 |
US11113198B2 (en) * | 2019-05-06 | 2021-09-07 | Micron Technology, Inc. | Timed data transfer between a host system and a memory sub-system |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000269986A (ja) * | 1999-03-18 | 2000-09-29 | Fujitsu Ltd | データパケット交換機 |
JP2004252983A (ja) * | 2003-02-18 | 2004-09-09 | Microsoft Corp | コプロセッサの性能を強化するシステムおよび方法 |
US20050052463A1 (en) * | 2003-09-04 | 2005-03-10 | Ching-Yu Hung | Sliding data buffering for image processing |
JP2007179085A (ja) * | 2005-12-26 | 2007-07-12 | Fujitsu Ltd | ディスク装置、ディスク書込データ選択方法およびディスク書込データ選択プログラム |
US7327755B2 (en) * | 2001-04-23 | 2008-02-05 | Infineon Technologies Ag | Method and device for storing data packets |
US20080109810A1 (en) * | 2006-11-07 | 2008-05-08 | Microsoft Corporation | Parallel engine support in display driver model |
JP2010182288A (ja) * | 2009-02-09 | 2010-08-19 | Toshiba Corp | フラッシュキャッシュコマンドでキャッシュデータの完全性を保全する方法およびシステム |
US20110099338A1 (en) * | 2007-08-29 | 2011-04-28 | Life Scan Scotland Ltd. | Data management system and method |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1307558C (zh) * | 2001-12-29 | 2007-03-28 | 中兴通讯股份有限公司 | 通信系统中分系统间的虚拟内存分配管理方法 |
US7234144B2 (en) | 2002-01-04 | 2007-06-19 | Microsoft Corporation | Methods and system for managing computational resources of a coprocessor in a computing system |
US6947051B2 (en) | 2003-02-18 | 2005-09-20 | Microsoft Corporation | Video memory management |
US8595394B1 (en) * | 2003-06-26 | 2013-11-26 | Nvidia Corporation | Method and system for dynamic buffering of disk I/O command chains |
JP4144609B2 (ja) * | 2004-09-29 | 2008-09-03 | ソニー株式会社 | 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム |
US8269780B2 (en) | 2007-06-07 | 2012-09-18 | Apple Inc. | Batching graphics operations with time stamp tracking |
CN100511158C (zh) * | 2007-08-28 | 2009-07-08 | 中兴通讯股份有限公司 | 一种内存监控管理的方法及系统 |
US8120608B2 (en) | 2008-04-04 | 2012-02-21 | Via Technologies, Inc. | Constant buffering for a computational core of a programmable graphics processing unit |
US8719455B2 (en) | 2010-06-28 | 2014-05-06 | International Business Machines Corporation | DMA-based acceleration of command push buffer between host and target devices |
-
2013
- 2013-09-16 US US14/027,816 patent/US9165337B2/en active Active
-
2014
- 2014-04-30 JP JP2015563145A patent/JP5969145B1/ja not_active Expired - Fee Related
- 2014-04-30 KR KR1020157036965A patent/KR101676990B1/ko active IP Right Grant
- 2014-04-30 EP EP14728037.4A patent/EP3005304A1/en not_active Withdrawn
- 2014-04-30 CN CN201480029283.0A patent/CN105247478B/zh not_active Expired - Fee Related
- 2014-04-30 WO PCT/US2014/036239 patent/WO2014193591A1/en active Application Filing
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000269986A (ja) * | 1999-03-18 | 2000-09-29 | Fujitsu Ltd | データパケット交換機 |
US7327755B2 (en) * | 2001-04-23 | 2008-02-05 | Infineon Technologies Ag | Method and device for storing data packets |
JP2004252983A (ja) * | 2003-02-18 | 2004-09-09 | Microsoft Corp | コプロセッサの性能を強化するシステムおよび方法 |
US20050052463A1 (en) * | 2003-09-04 | 2005-03-10 | Ching-Yu Hung | Sliding data buffering for image processing |
JP2007179085A (ja) * | 2005-12-26 | 2007-07-12 | Fujitsu Ltd | ディスク装置、ディスク書込データ選択方法およびディスク書込データ選択プログラム |
US20080109810A1 (en) * | 2006-11-07 | 2008-05-08 | Microsoft Corporation | Parallel engine support in display driver model |
US20110099338A1 (en) * | 2007-08-29 | 2011-04-28 | Life Scan Scotland Ltd. | Data management system and method |
JP2010182288A (ja) * | 2009-02-09 | 2010-08-19 | Toshiba Corp | フラッシュキャッシュコマンドでキャッシュデータの完全性を保全する方法およびシステム |
Also Published As
Publication number | Publication date |
---|---|
KR101676990B1 (ko) | 2016-11-16 |
CN105247478A (zh) | 2016-01-13 |
US20140354660A1 (en) | 2014-12-04 |
WO2014193591A1 (en) | 2014-12-04 |
KR20160005144A (ko) | 2016-01-13 |
EP3005304A1 (en) | 2016-04-13 |
US9165337B2 (en) | 2015-10-20 |
CN105247478B (zh) | 2018-02-06 |
JP2016528566A (ja) | 2016-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5969145B1 (ja) | コマンド命令管理 | |
JP6073533B1 (ja) | タイルベースのアーキテクチャ上での最適化されたマルチパスレンダリング | |
JP6271768B2 (ja) | 共有されるデータチャネルを用いるシェーダパイプライン | |
JP6001221B1 (ja) | グラフィックス処理のための任意の制御ポイントでのフォールトトレラントプリエンプションメカニズム | |
JP6309620B2 (ja) | 頂点シェーダのフロント・エンドとしてコンピュート・シェーダを使用すること | |
JP6352546B2 (ja) | 非整列ブロック転送動作の処理 | |
US9715750B2 (en) | System and method for layering using tile-based renderers | |
JP6185211B1 (ja) | 適応的シェーディングによるテクスチャルックアップを使用した帯域幅低減 | |
JP2018060556A (ja) | グラフィック処理ユニットにおける視界ベースの状態更新 | |
JP5960368B2 (ja) | ビジビリティ情報を用いたグラフィックスデータのレンダリング | |
JP2017530444A (ja) | グラフィックス処理におけるレンダリング対象コマンドの並べ替え | |
EP2880539B1 (en) | Cache data migration in a multicore processing system | |
JP6884766B2 (ja) | 帯域幅圧縮グラフィックスデータの記憶 | |
KR102381945B1 (ko) | 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법 | |
EP4231242A1 (en) | Graphics rendering method and related device thereof | |
US10319068B2 (en) | Texture not backed by real mapping | |
CN110554976B (zh) | 用于图形处理的存储器高速缓存管理 | |
US7685370B1 (en) | Data synchronization with multiple producers | |
JP2018533137A (ja) | ピクセルタイルレベルグラニュラリティをもつグラフィックス処理ユニットプリエンプション | |
JP2016520909A (ja) | タイルベースレンダラに関するクエリ処理 | |
JP2019509555A (ja) | テクスチャユニットにおけるフィードバックを伴うマルチステップテクスチャ処理 | |
US10346943B2 (en) | Prefetching for a graphics shader |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20160526 |
|
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: 20160607 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160706 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5969145 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |