(57)【特許請求の範囲】
【請求項１】
コマンドを記憶するための方法であって、前記方法は、
プロセッサを用いて、コマンドバッファ中のメモリユニットのチェーンのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むことと、ここにおいてメモリユニットの前記チェーンは、前記プロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
前記プロセッサを用いて、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、または
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかのうちの少なくとも１つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前記前に確認されたコマンドをサブミットすることとを備える、方法。
【請求項２】
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することをさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定することは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定することを備える、請求項１に記載の方法。
【請求項３】
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとをさらに備える、請求項１に記載の方法。
【請求項４】
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振ることとをさらに備える、請求項１に記載の方法。
【請求項５】
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることをさらに備える、請求項１に記載の方法。
【請求項６】
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、請求項１に記載の方法。
【請求項７】
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、請求項１に記載の方法。
【請求項８】
前記プロセッサが第１のプロセッサを備え、コマンドの前記現在セットは、第２の異なるプロセッサが実行するためのものである、請求項１に記載の方法。
【請求項９】
前記第１のプロセッサが中央処理ユニット（ＣＰＵ）を備え、前記第２のプロセッサがグラフィックス処理ユニット（ＧＰＵ）を備える、請求項８に記載の方法。
【請求項１０】
コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのチェーンのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むことと、ここにおいてメモリユニットの前記チェーンは、前記プロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、または
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかのうちの少なくとも１つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前記前に確認されたコマンドをサブミットすることとを行うように構成された、デバイス。
【請求項１１】
前記プロセッサが、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するように構成され、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するために、前記プロセッサは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するように構成された、請求項１０に記載のデバイス。
【請求項１２】
前記プロセッサは、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行うように構成された、請求項１０に記載のデバイス。
【請求項１３】
前記プロセッサは、
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振ることとを行うように構成された、請求項１０に記載のデバイス。
【請求項１４】
前記プロセッサは、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするように構成された、請求項１０に記載のデバイス。
【請求項１５】
前記プロセッサは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、請求項１０に記載のデバイス。
【請求項１６】
前記プロセッサは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、請求項１０に記載のデバイス。
【請求項１７】
前記プロセッサが第１のプロセッサを備え、前記デバイスが、第２の異なるプロセッサをさらに備え、コマンドの前記現在セットは、前記第２のプロセッサが実行するためのものである、請求項１０に記載のデバイス。
【請求項１８】
前記第１のプロセッサが中央処理ユニット（ＣＰＵ）を備え、前記第２のプロセッサがグラフィックス処理ユニット（ＧＰＵ）を備える、請求項１７に記載のデバイス。
【請求項１９】
実行されたとき、１つまたは複数のプロセッサに、
コマンドバッファ中のメモリユニットのチェーンのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むことと、ここにおいてメモリユニットの前記チェーンは、前記１つまたは複数のプロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも１つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに前記１つまたは複数のプロセッサによって記憶された前記前に確認されたコマンドをサブミットすることとを行わせる、その上に記憶された命令を有する非一時的なコンピュータ可読記憶媒体。
【請求項２０】
前記１つまたは複数のプロセッサに、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することを行わせる命令をさらに備え、
ここにおいて、前記１つまたは複数のプロセッサに、十分な空間が前記割振りリスト中にあるかどうかを決定させる前記命令は、前記１つまたは複数のプロセッサに、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定させる命令を備える、請求項１９に記載のコンピュータ可読記憶媒体。
【請求項２１】
前記１つまたは複数のプロセッサに、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行わせる命令をさらに備える、請求項１９に記載のコンピュータ可読記憶媒体。
【請求項２２】
前記１つまたは複数のプロセッサに、
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振ることとを行わせる命令をさらに備える、請求項１９に記載のコンピュータ可読記憶媒体。
【請求項２３】
前記１つまたは複数のプロセッサに、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることを行わせる命令をさらに備える、請求項１９に記載のコンピュータ可読記憶媒体。
【請求項２４】
前記１つまたは複数のプロセッサに、前記１つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記１つまたは複数のプロセッサに、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、請求項１９に記載のコンピュータ可読記憶媒体。
【請求項２５】
前記１つまたは複数のプロセッサに、前記１つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記１つまたは複数のプロセッサに、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、請求項１９に記載のコンピュータ可読記憶媒体。
【請求項２６】
コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのチェーンのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットの前記チェーンに書き込むための手段と、ここにおいてメモリユニットの前記チェーンは、前記プロセッサがコマンドの前記現在のセットの書込み前にメモリユニットの前記チェーン中に記憶した前に確認されたコマンドを記憶し、前記前に確認されたコマンドは、割振りリスト中に記憶されるハンドルを有する、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、または
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかのうちの少なくとも１つを決定するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、またはコマンドの前記現在セットに関連付けられたハンドルを記憶するための十分でない空間が前記割振りリスト中にある場合、最終的な実行のために、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前記前に確認されたコマンドをサブミットするための手段とを備える、デバイス。
【請求項２７】
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するための手段をさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するための前記手段は、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するための手段を備える、請求項２６に記載のデバイス。
【請求項２８】
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶するための手段と、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動するための手段とをさらに備える、請求項２６に記載のデバイス。
【請求項２９】
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振るための手段とをさらに備える、請求項２６に記載のデバイス。
【請求項３０】
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするための手段をさらに備える、請求項２６に記載のデバイス。
【請求項３１】
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、請求項２６に記載のデバイス。
【請求項３２】
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、請求項２６に記載のデバイス。
【発明の詳細な説明】
【関連出願】
【０００１】
[0001]本出願は、その内容全体が参照により本明細書に組み込まれる、２０１３年５月３１日に出願された米国仮出願第６１／８２９，４８７号の利益を主張する。
【技術分野】
【０００２】
[0002]本開示は、グラフィックス処理のための技法に関し、より詳細には、グラフィックス処理のためのコマンドを記憶するための技法に関する。
【背景技術】
【０００３】
[0003]グラフィカルユーザインターフェースおよびビデオゲームのためのコンテンツなど、表示のための視覚コンテンツは、グラフィックス処理ユニット（ＧＰＵ：graphics processing unit）によって生成され得る。ＧＰＵは、２次元（２Ｄ：two-dimensional）または３次元（３Ｄ：three-dimensional）グラフィカルオブジェクトを、ディスプレイデバイス上に表示され得る２Ｄピクセル表現に変換し得る。それの機能を実行するために、ＧＰＵは、中央処理ユニット（ＣＰＵ：central processing unit）などのアプリケーションプロセッサによって発行されるコマンドを実行する。概して、ＣＰＵはコマンドをコマンドバッファ（command buffer）に記憶し、ＧＰＵは、実行のためにコマンドバッファからコマンドを取り出す。
【発明の概要】
【０００４】
[0004]概して、本開示は、確認ベースコマンドバッファキュー生成技法について説明する。たとえば、本技法は、書込みの後にコマンドを確認することについて説明する。コマンドを確認することによって、コマンドの次のセットが書き込まれ得ないか、またはコマンドの次のセットに関連付けられたハンドルのための十分な空間が割振りリスト（allocation list）中にないとコマンドの次のセットの書込み中に決定された場合、プロセッサは、追加のメモリユニットが利用され得るか、または割振りリストがリセットされ得るように、確認されたコマンドをサブミット（submit）し得る。
【０００５】
[0005]たとえば、プロセッサがコマンドのセットをコマンドバッファのメモリユニットに書き込むことが可能である場合、プロセッサは、プロセッサがコマンドセットを書き込み終えたメモリユニット中のロケーション（たとえば、メモリユニット中のコマンドのセットの終端のロケーション）を識別する確認ポイント（confirm point）を識別し得る。プロセッサは、次いで、確認ポイントからスターしてコマンドの次のセットを書き込み得る。しかしながら、プロセッサが、書込み中に、コマンドのセット全体がメモリユニットに書き込まれ得ないと決定したか、または、コマンドの書込みの後に、コマンドのセットに関連付けられたハンドルの十分な割振りリスト空間がないと決定した場合、プロセッサは、確認ポイントより前のコマンドをサブミットし得る。確認ポイントより前のコマンドをサブミットすることは、プロセッサが、コマンドのセットのうちの残りのコマンドを追加のメモリユニットに書き込むこと、または確認ポイントの後のコマンドに関連付けられたハンドルのための十分な空間を作成することを可能にし得る。
【０００６】
[0006]一例では、本開示は、コマンドを記憶するための方法について説明し、本方法は、プロセッサを用いて、コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込むことを備える。本方法は、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも１つを決定することを含む。本方法はまた、決定に基づいて、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、または決定に基づいて、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、プロセッサを用いて、コマンドの現在セットの書込みの前にメモリユニットのチェーンに、プロセッサによって記憶された前に確認されたコマンドをサブミットすることを含む。
【０００７】
[0007]一例では、本開示は、コマンドバッファを備えるシステムメモリと、プロセッサとを備えるデバイスについて説明する。プロセッサは、コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込むように構成される。プロセッサはまた、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも１つを決定するように構成される。プロセッサは、決定に基づいて、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、または決定に基づいて、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、コマンドの現在セットの書込みの前にメモリユニットのチェーンに、プロセッサによって記憶された前に確認されたコマンドをサブミットするようにさらに構成される。
【０００８】
[0008]一例では、本開示は、実行されたとき、１つまたは複数のプロセッサに、コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込ませる、その上に記憶された命令を有するコンピュータ可読記憶媒体について説明する。命令はまた、１つまたは複数のプロセッサに、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも１つを決定させる。命令はまた、１つまたは複数のプロセッサに、決定に基づいて、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、または決定に基づいて、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、コマンドの現在セットの書込みの前にメモリユニットのチェーンに１つまたは複数のプロセッサによって記憶された前に確認されたコマンドをサブミットさせる。
【０００９】
[0009]一例では、本開示は、コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットをメモリユニットのチェーンに書き込むための手段を備えるデバイスについて説明する。デバイスはまた、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかと、コマンドの現在セットの書込みの後に、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかとのうちの少なくとも１つを決定するための手段を含む。デバイスは、メモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合、またはコマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にない場合、コマンドの現在セットの書込みの前にメモリユニットのチェーンに、プロセッサによって記憶された前に確認されたコマンドをサブミットするための手段をさらに含む。
【００１０】
[0010]１つまたは複数の例の詳細が以下の添付の図面および説明において記載されている。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]本開示で説明する１つまたは複数の例示的な技法を実装するように構成され得るデバイスを示すブロック図。
【図２】[0012]本開示で説明する１つまたは複数の例示的な技法による、コマンドバッファに記憶された、確認されたコマンドと確認されていないコマンドとを示す概念図。
【図３】[0013]本開示で説明する１つまたは複数の例示的な技法による、コマンドバッファに記憶された、確認されたコマンドと確認されていないコマンドとを示す別の概念図。
【図４】[0014]本開示で説明する１つまたは複数の例示的な技法による例示的な動作を示すフローチャート。
【図５】[0015]本開示で説明する１つまたは複数の例示的な技法を実装するように構成され得るデバイスを示すブロック図。
【発明を実施するための形態】
【００１２】
[0016]本開示で説明する技法は、コマンド命令をコマンドバッファに記憶することを対象とする。説明の目的で、本開示の技法は、プロセッサがグラフィックス処理ユニット（ＧＰＵ）のためのコマンド命令をコマンドバッファに記憶する様式に関して説明する。
【００１３】
[0017]たとえば、プロセッサ（たとえば、中央処理ユニット（ＣＰＵ））上で実行されるアプリケーションは、プロセッサに、グラフィックスデータ、ならびにグラフィックスデータなどのデータが処理されるべき様式に関して別のプロセッサ（たとえば、ＧＰＵ）に命令する命令を生成させる。同じくプロセッサ上で実行されるグラフィックスドライバは、命令を、ＧＰＵが処理することができるコマンドに変換し、グラフィックスデータを、ＧＰＵが処理することができるデータパケット（たとえば、ｐｍ４データパケット）に変換する。「ｐｍ４データパケット」という用語は、概して、コマンドまたはデータのパケットなど、ＧＰＵが処理することができるデータパケットを指す。プロセッサは、グラフィックスドライバを介して、コマンドと生成されたグラフィックスデータとを、システムメモリ（たとえば、プロセッサとＧＰＵとを含むデバイスのメモリ）に記憶する。概して、プロセッサは、グラフィックスドライバを介して、コマンドをシステムメモリ内の専用コマンドバッファに記憶する。プロセッサのオペレーティングシステムはコマンドバッファとしてシステムメモリの一部分を専用化し得る。
【００１４】
[0018]本開示で説明する技法によれば、プロセッサは、コマンドを記憶するための十分な空間がコマンドバッファ中にあるかどうか、またはコマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを最初に決定することなしに、コマンドのセットをコマンドバッファのメモリユニットに書き込むことを試み得る。コマンドバッファは、各ユニットが複数のコマンドを記憶することができる、複数のメモリユニットのチェーンと見なされ得る。プロセッサが、コマンドのセットをメモリユニットのチェーンに書き込むことが可能であり、コマンドに関連付けられた（以下でより詳細に説明する）ハンドルのための十分な空間が割振りリスト中にある場合、プロセッサは、プロセッサがコマンドのセットを書き込み終えた、メモリユニットのうちの１つのメモリユニット中のロケーションを識別し得る。プロセッサがコマンドのセットを書き込み終えた１つのメモリユニット中のロケーションは確認ポイントと呼ばれ、確認ポイントの前に記憶されたコマンドは、確認されたコマンドと呼ばれる。プロセッサは、次いで、確認ポイントから開始してコマンドの次のセットを書き込み得る。
【００１５】
[0019]コマンドの次のセットの書込み中に、プロセッサが、コマンドの次のセットのうちのコマンドのすべてを書き込むための十分な空間がメモリユニットのチェーン中にないと決定した場合、プロセッサは、ＧＰＵによる最終的な実行のためにすべての確認されたコマンドをＧＰＵにサブミットするためにフラッシュをトリガし得る。コマンドの次のセットの書込みの後に、プロセッサが、コマンドの次のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にないと決定した場合、プロセッサは、ＧＰＵによる最終的な実行のためにすべての確認されたコマンドをＧＰＵにサブミットするためにフラッシュをトリガし得る。
【００１６】
[0020]最終的な実行（すなわち、フラッシュ）のためのＧＰＵへのコマンドのサブミッションは、プロセッサが、フラッシュより前に記憶されなかったコマンドの次のセットからの残りのコマンドを記憶するためにメモリユニットのチェーンにメモリユニットを追加することを可能にする。また、コマンドのサブミッションは割振りリストをクリアし、これは、コマンドの次のセットに関連付けられたハンドルのための割振りリスト空間を解放する。
【００１７】
[0021]概して、プロセッサが、ＧＰＵによる最終的な実行のために、確認されたコマンドをＧＰＵにサブミットしたとき、プロセッサは、コマンドを実行のために利用可能にするために何らかの技法を利用するものと見なされ得る。一例として、プロセッサは、コマンドをＧＰＵのためのコマンドバッファに転送し得る。別の例として、確認されたコマンドをサブミットすることの一部として、プロセッサは、ＧＰＵが確認されたコマンドを実行すべきであるとき、ＧＰＵが、どこからコマンドにアクセスすべきかを決定することができるように、確認されたコマンドと確認ポイントのロケーションとを記憶するメモリユニットのためのメモリアドレスをＧＰＵに示し得る。ＧＰＵに確認されたコマンドをサブミットすることの他の例が可能であり、本技法は、確認されたコマンドをサブミットする上記の例に限定されると見なされるべきではない。
【００１８】
[0022]いくつかの他の技法では、コマンドバッファに書き込むことより前に、プロセッサは、コマンドを記憶するための十分な空間がメモリユニットの現在のチェーン中にあるかどうかと、コマンドに関連付けられたハンドルのための十分な空間が割振りリストにあるかどうかとを決定することになる。たとえば、プロセッサは、記憶される必要があるコマンドのためにどのくらいのメモリ空間が必要とされるかを決定し、メモリユニットのチェーン中でどのくらいの空間が現在利用可能であるかを決定することになる。また、プロセッサは、コマンドに関連付けられたハンドルのためにどのくらいの空間が必要とされるかと、ハンドルのためにどのくらいの空間が割振りリスト中で現在利用可能であるかとを決定することになる。十分な空間がない場合、プロセッサはフラッシュ動作を実行することになる。
【００１９】
[0023]たとえば、これらの他の技法では、十分な空間がメモリユニット中にないか、または十分な空間が割振りリスト中にないと書込みより前に決定された場合、プロセッサは、メモリユニットおよび割振りリスト中のコマンドをサブミットし、割振りリストをクリアし、チェーンから、サブミットされたコマンドをもつメモリユニットを削除し、必要に応じて（たとえば、フラッシュ動作の一部として）チェーンにより多くのメモリユニットを追加することになる。しかしながら、コマンドを記憶するためにどのくらいのメモリが必要であるかと、メモリユニットの現在のチェーン中でどのくらいのメモリが現在利用可能であるかと、ハンドルのために割振りリスト中のどのくらいの空間が必要とされるかと、ハンドルのために割振りリスト中でどのくらいの空間が現在利用可能であるかとを前もってを決定することは、かなりの処理リソースを消費し、処理時間を増加させる。
【００２０】
[0024]本開示で説明する技法によれば、プロセッサは、コマンドのための十分な空間がメモリユニットのチェーン中にない場合、またはコマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にない場合、メモリユニットのチェーンを前もってフラッシュする必要がないことがある。そうではなく、プロセッサは、最初に、コマンドを書き込むことを試み得、書込み中に、または書込みの直後に、プロセッサが、メモリユニットのチェーンがフラッシュされるべきであると決定した場合、プロセッサがメモリユニットのチェーンをフラッシュするのはそのときである。
【００２１】
[0025]本開示で説明する技法について、ＧＰＵ（たとえば、ＧＰＵコマンド生成）によって実行されるコマンドに関して説明するが、本技法はそのように限定されないことを理解されたい。本技法は、非ＧＰＵ関係コマンド生成に拡張され得、（たとえば、プロセッサが、別の処理ユニットによって実行されるべきコマンドを生成する場合）複数の依存性をもつコマンドの任意のストリーム生成器に適用可能であると見なされ得る。
【００２２】
[0026]図１は、本開示で説明する１つまたは複数の例示的な技法を実装するように構成され得るデバイスを示すブロック図である。たとえば、図１にデバイス１０を示す。デバイス１０の例としては、限定はしないが、ビデオデバイス、メディアプレーヤ、セットトップボックス、携帯電話およびいわゆるスマートフォンなどのワイヤレスハンドセット、携帯情報端末（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどがある。
【００２３】
[0027]デバイス１０は、プロセッサ１２と、グラフィックス処理ユニット（ＧＰＵ）１４と、システムメモリ１６とを含む。プロセッサ１２は中央処理ユニット（ＣＰＵ）であり得る。ＧＰＵ１４は、ディスプレイでのプレゼンテーションのためにグラフィックスデータを生成し、出力するなど、グラフィックス関係関数を実行すること、ならびにＧＰＵ１４によって与えられる超並列処理（massive processing parallelism）を活用する非グラフィックス関係関数を実行することを行うように構成された処理ユニットであり得る。たとえば、ＧＰＵ１４は、グラフィックスアプリケーションと非グラフィックスアプリケーションの両方を実行し得る。ＧＰＵ１４は、グラフィックス処理能力に加えて汎用処理能力を与え得るので、ＧＰＵ１４は汎用ＧＰＵ（ＧＰ−ＧＰＵ）と呼ばれることがある。
【００２４】
[0028]プロセッサ１２およびＧＰＵ１４の例には、限定はしないが、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路がある。いくつかの例では、ＧＰＵ１４は、グラフィックスを処理するために、ならびに非グラフィックス関係アプリケーションを実行するために超並列処理を行うことなど、特定の使用のために設計されたマイクロプロセッサであり得る。さらに、プロセッサ１２およびＧＰＵ１４は別個の構成要素として示されているが、本開示の態様はそのように限定されない。たとえば、プロセッサ１２およびＧＰＵ１４は共通の集積回路（ＩＣ）中に常駐し得る。
【００２５】
[0029]システムメモリ１６は、デバイス１０のシステムメモリであり、プロセッサ１２とＧＰＵ１４との外部に常駐し得る（すなわち、プロセッサ１２に対してオフチップであり、ＧＰＵ１４に対してオフチップであり得る）。システムメモリ１６の例としては、限定はしないが、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。たとえば、システムメモリ１６は、実行されたとき、１つまたは複数のプロセッサ（たとえば、プロセッサ１２またはＧＰＵ１４）に本開示で説明する技法を実装させる、その上に記憶された命令を有するコンピュータ可読記憶媒体と見なされ得る。いくつかの例では、システムメモリ１６は、デバイス１０から取り外され、別のデバイスに移され得る。いくつかの例では、システムメモリ１６と実質的に同様のストレージデバイスが、デバイス１０中に挿入され得る。
【００２６】
[0030]システムメモリ１６は、プロセッサ１２とＧＰＵ１４とによって実行されるアプリケーションを記憶し得る。たとえば、プロセッサ１２は、アプリケーション１８と、オペレーティングシステム２０と、グラフィックスドライバ２２とを実行し得る。システムメモリ１６は、プロセッサ１２が実行のために取り出す、アプリケーション１８とオペレーティングシステム２０とグラフィックスドライバ２２とのためのオブジェクトコードを記憶し得る。また、図示されていないが、ＧＰＵ１４は、頂点シェーダ（vertex shaders）、フラグメントシェーダ、ジオメトリシェーダなどのグラフィックス関係シェーダアプリケーションを実行し得、また、カーネルと呼ばれる非グラフィックス関係シェーダアプリケーションを潜在的に実行するか、またはシェーダを計算し得る。システムメモリ１６は、そのようなグラフィックおよび非グラフィックス関係シェーダアプリケーションのオブジェクトコード、および場合によってはソースコードをも記憶し得る。
【００２７】
[0031]いくつかの例では、システムメモリ１６は、コマンドを実行するとき、ＧＰＵ１４が作用すべきであるデータを記憶し得る。たとえば、データは、グラフィックスプリミティブ（たとえば、点、線、三角形、四角形、三角形ストリップなど）のリストを含み得るが、他のタイプのデータも存在し得る。システムメモリ１６はまた、ＧＰＵ１４によるコマンドまたはアプリケーションの実行から生じるデータを記憶し得る。たとえば、システムメモリ１６は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。
【００２８】
[0032]さらに、システムメモリ１６は、ＧＰＵ１４によって実行されるべきであるコマンド、ならびにＧＰＵ１４が利用すべきであるデータを記憶し得る。たとえば、図示のように、プロセッサ１２はアプリケーション１８を実行し得る。アプリケーション１８の例としては、ビデオゲーム、ウェブブラウザ、電子メール、および一般的に、表示のための閲覧可能コンテンツを生成する任意のアプリケーションがある。ＧＰＵ１４のグラフィックス処理を活用するために、アプリケーション１８は、ＧＰＵ１４が実行すべきであるコマンド、ならびにＧＰＵ１４がコマンドの実行の一部として作用すべきであるデータを生成し得る。
【００２９】
[0033]プロセッサ１２上で実行されるグラフィックスドライバ２２は、コマンドを、ＧＰＵ１４によって実行可能であるコマンドに変換し得る。たとえば、グラフィックスドライバ２２は、たとえば、オープングラフィックスライブラリ（ＯｐｅｎＧＬ（登録商標）：Open Graphics Library）アプリケーションプログラミングインターフェース（ＡＰＩ）、オープングラフィックスライブラリエンベッディドシステムズ（ＯｐｅｎＧＬ  ＥＳ：Open Graphics Library Embedded Systems）ＡＰＩ、ＤｉｒｅｃｔＸ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、あるいは他の公開またはプロプライエタリ規格グラフィックスＡＰＩなどのグラフィックスＡＰＩに準拠するようにコマンドを変換し得る。
【００３０】
[0034]図１に示されているように、システムメモリ１６はバッファ２４とバッファ２６とを含む。バッファ２４とバッファ２６とは、グラフィックスドライバ２２がＧＰＵ１４によって実行されるべきであるコマンドをそこに記憶するコマンドバッファを一緒に形成し得る。たとえば、バッファ２４は第１の間接的バッファ（ＩＢ１）と呼ばれることがあり、バッファ２６は第２の間接的バッファ（ＩＢ２）と呼ばれることがある。コマンドバッファを一緒に形成するためにバッファ２４とバッファ２６とを利用することは、プロセッサ１２上で実行されるオペレーティングシステム２０の機能であり得る。たとえば、オペレーティングシステム２０などのいくつかのオペレーティングシステムは、情報がＩＢ１（たとえば、バッファ２４）記憶され得る様式を制限し得る。
【００３１】
[0035]オペレーティングシステム２０によってＩＢ１に課される制限を克服するために、いくつかの技法は、オペレーティングシステム２０がＩＢ１を可能にしないという方法で情報を記憶するためにＩＢ２（たとえば、バッファ２６）を利用する。そのような技法では、ＩＢ１は、情報がＩＢ２に記憶されたところへのポインタなどの参照を記憶し、ＩＢ２は実際の情報を記憶する。本開示で説明する技法について、ＩＢ１（たとえば、バッファ２４）とＩＢ２（たとえば、バッファ２６）とがコマンドバッファを一緒に形成することに関して説明する。しかしながら、バッファ２４とバッファ２６の両方にコマンドバッファを形成するように要求することはオペレーティングシステム２０の制限であり得る。オペレーティングシステム２０とは異なるオペレーティングシステムの場合、単一のバッファ中で（たとえば、バッファ２４またはバッファ２６のうちの１つの中で）コマンドバッファを形成することが可能であり得る。
【００３２】
[0036]したがって、バッファ２４とバッファ２６とがコマンドバッファを一緒に形成することは、説明の目的で説明され、限定的であると見なされるべきでない。説明の目的で、プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドをバッファ２６に記憶し、コマンドがバッファ２６中のどこにあるかを示す情報をバッファ２４に記憶する技法について説明する。
【００３３】
[0037]上記で説明したように、本開示で説明する技法は、コマンドをコマンドバッファ（たとえば、バッファ２４とバッファ２６と）に記憶することに関する。コマンドの一例はアトミック（atomic）コマンドである。アトミックコマンドは、一緒に実行される必要があるコマンドのセットである。たとえば、ＧＰＵ１４は、実行のためにアトミックコマンドを一緒に取り出し得る。アトミックコマンドの実行中に、ＧＰＵ１４は他のコマンドを実行しないことがある。たとえば、ＧＰＵ１４は、アトミックコマンドのうちのコマンドの実行を休止せず、コマンドの別のセットを実行せず、アトミックコマンドのうちの残りのコマンドを実行しないことがある。ＧＰＵ１４はアトミックコマンドを一緒に実行し得るので、アトミックコマンドを一緒に記憶し、ＧＰＵ１４が実行のためにアトミックコマンドを一緒に取り出すことを可能にすることが望ましいことがある。
【００３４】
[0038]説明の目的で、本開示の技法について、一緒に実行される必要があるコマンドのセットに関して説明する。たとえば、コマンドのセットはアトミックコマンドを形成する。「アトミック操作」という用語は、アトミックコマンドと同義の別の用語である。しかしながら、本開示で説明する技法は、アトミックコマンドまたは操作に限定されると見なされるべきでなく、概して、コマンドをコマンドバッファに記憶するために適用可能である。
【００３５】
[0039]コマンドをバッファ２６に記憶するために、オペレーティングシステム２０は、バッファ２６中のメモリ空間を割り振り得、グラフィックスドライバ２２は、コマンドをバッファ２６中の割り振られたメモリ空間に記憶し得る。本開示で説明する技法では、バッファ２６中の割り振られたメモリ空間は複数のメモリユニットの形態であり得る。各メモリユニットは、ある量のコマンドを記憶することが可能であり得る。
【００３６】
[0040]いくつかの例では、プロセッサ１２は、オペレーティングシステム２０を介して、バッファ２６中の第１のメモリユニットを割り振り得、プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドのセットのうちのコマンドを第１のメモリユニットに書き込み得る。コマンドのセット中に書き込まれる必要がある追加のコマンドがある場合、プロセッサ１２は、オペレーティングシステム２０を介して、バッファ２６中の第２のメモリユニットを割り振り得、プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドのセットの書込みを完了するまで、プロセッサ１２は、グラフィックスドライバ２２を介して、第２のメモリユニットなどにコマンドのセットのうちの追加のコマンドを書き込み得る。
【００３７】
[0041]これらの例では、グラフィックスドライバ２２は、第１のメモリユニット、第２のメモリユニットなどがバッファ２６中のどこにあるかを示すポインタ情報をバッファ２４に記憶し得る。たとえば、ポインタ情報は４バイトであり得る。この意味で、コマンドのセットをバッファ２６に記憶するために必要される第１のメモリユニット、第２のメモリユニット、および追加のメモリユニットは、概念的に、メモリユニットのチェーンを形成するものと見なされ得る。第１のメモリユニットと第２のメモリユニットとは、必ずしもバッファ２６内の隣接ロケーションに記憶される必要があるとは限らないことを理解されたい。そうではなく、バッファ２４中のポインタ情報を用いて、ＧＰＵ１４は、バッファ２６中の異なるメモリユニットにわたって記憶されたコマンドのセットを一緒に取り出すことが可能であり得る。
【００３８】
[0042]グラフィックスドライバ２２は、一緒に連結され得るメモリユニットの最大数を定義し得る（たとえば、チェーンサイズを定義し得る）。チェーンサイズは、システムメモリ１６の記憶能力、コマンドのセット中のコマンドの最大数に関する仮定など、様々なファクタに基づいてユーザ構成可能であり得る。たとえば、アプリケーション１８は、アプリケーション１８が発行することができるアトミックコマンドの最大数または最小数で構成され得、グラフィックスドライバ２２は、アプリケーション１８が発行することができるアトミックコマンドの最大数または最小数に基づいてチェーンサイズを定義し得る。一例として、アプリケーション１８は、少なくとも２つのメモリユニットを必要とするアトミックコマンドを発行し得、これは、最小チェーンサイズが２つのメモリユニットであり得ることを意味する。説明の目的で、本開示は、４つのメモリユニットのチェーンサイズについて説明する。しかしながら、チェーンサイズは、４つのメモリユニットよりも大きいまたは小さいことがある。
【００３９】
[0043]コマンドのセットのうちのコマンドはハンドルに関連付けられ得る。ハンドルは、関連付けられたコマンドを処理するために必要とされるメモリの割振りへの参照である。概して、ハンドルは、コマンドによって作用されるデータのための記述子と見なされ得る。たとえば、コマンドのセットのうちのコマンドは入力グラフィックスデータのセットに作用し得、入力グラフィックスデータに対する操作の結果は出力グラフィックスデータのセットであり得る。コマンドに関連付けられたハンドルは、入力グラフィックスデータと出力グラフィックスデータとのために割り振られる必要があるメモリの量を示し得る。一例として、コマンドは、テクスチャデータに対して操作を実行するようにＧＰＵ１４に命令し得る。この例では、テクスチャデータは、コマンドに関連付けられたハンドルであり得る。
【００４０】
[0044]プロセッサ１２は、オペレーティングシステム２０を介して、コマンドのセットのためのハンドルの割振りリストを維持するように構成され得る。いくつかの例では、システムメモリ１６は、コマンドのセットに関連付けられたハンドルを記憶するオペレーティングシステム（ＯＳ）バッファ２７を含み得る。ＯＳバッファ２７は、あらゆる例において必要であるとは限らず、プロセッサ１２は、ハンドルの割振りリストを維持するための何らかの技法を実装し得る。
【００４１】
[0045]プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドのセットを書き込むべきであるとき、プロセッサ１２は、オペレーティングシステム２０を介して、コマンドのセットに関連付けられたハンドルのための割振りリストを作成し得る。割振りリストは、コマンドに関連付けられたハンドルを示す固定サイズのアレイであり得る。プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドのセットをメモリユニットのチェーン中のメモリユニットに書き込むとき、プロセッサ１２はまた、グラフィックスドライバ２２を介して、コマンドのセットのうちのコマンドに関連付けられたハンドルで割振りリストを更新し得る。
【００４２】
[0046]グラフィックスドライバ２２がコマンドをメモリユニットのチェーンのメモリユニットに書き込み、関連するハンドルを割振りリストに書き込むと、メモリユニットのチェーンのメモリユニットと割振りリストとは、いっぱいになり始め、追加のコマンドまたはハンドルを記憶することが可能でないことがある。一例として、グラフィックスドライバ２２は、コマンドの第１のセットをメモリユニットのチェーンのメモリユニットに書き込み得る。コマンドの第１のセットをチェーンのメモリユニットに書き込んだ後に、グラフィックスドライバ２２がコマンドの第２のセットのうちのコマンドをメモリユニットに書き込むべき場合、チェーンのすべての４つのメモリユニットはいっぱいであり、書き込まれる必要があるコマンドの第２のセットのうちのコマンドが依然としてあることになる。この場合、チェーンのチェーンサイズが４つのメモリユニットであるので、オペレーティングシステム２０は、別のメモリユニットを割り振ることが可能でないことがある。
【００４３】
[0047]別の例として、グラフィックスドライバ２２は、コマンドの第１のセットをメモリユニットのチェーンのメモリユニットに書き込み、コマンドの第１のセットに関連付けられたハンドルの情報を割振りリストに記憶し得る。この例では、コマンドの第２のセットを記憶するための十分な空間がメモリユニット中にあり得る。しかしながら、コマンドの第２のセットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にないことがある。
【００４４】
[0048]いくつかの他の技法では、グラフィックスドライバは、グラフィックスドライバ２２とは異なり、最初に、コマンドのセットをチェーンのメモリユニットに書き込むために必要とされる空間の量を決定し、コマンドのセットに関連付けられたハンドルのために必要とされる空間の量を決定し、メモリユニットのチェーンのメモリユニット中の利用可能な空間の量を決定し、割振りリスト中の利用可能な空間の量を決定し得る。たとえば、グラフィックスドライバは、これらの他の技法では、コマンドのセットをチェーンのメモリユニットに書き込むために必要とされる空間の量を決定することと、コマンドのセットに関連付けられたハンドルのために必要とされる空間の量を決定することと、メモリユニットのチェーンのメモリユニット中の利用可能な空間の量を決定することと、割振りリスト中の利用可能な空間の量を決定することとを行うためにＶｅｒｉｆｙＳｐａｃｅ／ＶｅｒｉｆｙＨａｎｄｌｅＳｐａｃｅ関数を呼び得る。
【００４５】
[0049] これらの他の例では、グラフィックスドライバは、十分な空間がメモリユニットおよび割振りリスト中にあるとき、単にコマンドをメモリユニットに書き込むことになる。十分な空間がメモリユニットまたは割振りリスト中にない場合、グラフィックスドライバは、これらの他の技法では、フラッシュ呼（flush call）を実行し得る。フラッシュ呼については、以下でより詳細に説明する。
【００４６】
[0050]グラフィックスドライバが、コマンドの書込みより前に、コマンドのセットをチェーンのメモリユニットに書き込むために必要とされる空間の量と、コマンドのセットに関連付けられたハンドルのために必要とされる空間の量と、メモリユニットのチェーンのメモリユニット中の利用可能な空間の量と、割振りリスト中の利用可能な空間の量とを決定する場合の制限があり得る。たとえば、アプリケーション１８のいくつかのタイプの場合、およびいくつかのシナリオの場合、プロセッサ１２が、ＶｅｒｉｆｙＳｐａｃｅ／ＶｅｒｉｆｙＨａｎｄｌｅＳｐａｃｅ関数を実行するために望ましくない量の処理リソースを消耗する必要があることが起こり得る。
【００４７】
[0051]ＶｅｒｉｆｙＳｐａｃｅ／ＶｅｒｉｆｙＨａｎｄｌｅＳｐａｃｅ関数の実行は小さいバッチ問題と見なされ得る。たとえば、書き込まれる必要があるコマンドとハンドルとの量は、コマンドとハンドルとを記憶するための十分な空間があるかどうかを決定するためにプロセッサ１２が検査する必要がある記憶領域の莫大な量と比較して、比較的小さくなり得る。言い換えれば、ＶｅｒｉｆｙＳｐａｃｅ／ＶｅｒｉｆｙＨａｎｄｌｅＳｐａｃｅ関数は、少量のデータが書き込まれ得ることを保証するために比較的大量の記憶領域を検査し得、それにより処理非効率性が生じ得る。
【００４８】
[0052]本開示で説明する技法は、プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドのセットをバッファ２６に書き込むことを試み得る確認ベースコマンドバッファキュー生成技法について説明する。コマンドのセットの書込み中に、プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドのセットを記憶するための十分な空間がメモリユニットのチェーンのメモリユニット中にないと決定した場合、プロセッサ１２は、グラフィックスドライバ２２を介して、フラッシュ呼を実行し得る。
【００４９】
[0053]このようにして、グラフィックスドライバ２２は、コマンドのセットのうちのコマンドを記憶するための十分な空間がメモリユニットのチェーンのメモリユニット中にあるかどうかを前もって決定するためにＶｅｒｉｆｙＳｐａｃｅ関数を実行する必要がないことがある。言い換えれば、十分な空間がコマンドバッファ（たとえば、バッファ２６）中のメモリユニットのチェーンのメモリユニット中にあるかどうかを事前に決定することなしにコマンドのセットのうちのコマンドを書き込むことによって、本開示で説明する技法は、プロセッサ１２が、コマンドのセットを記憶するための十分な空間がメモリユニットのチェーンのメモリユニット中にあるかどうかを決定する処理リソースを浪費する必要がないことがあるので、処理効率を促進し得る。
【００５０】
[0054]また、本開示で説明する技法では、プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドのセットの書込みの後に、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを決定し得る。コマンドのセットの書込みの後に十分な空間が割振りリスト中にない場合、プロセッサ１２は、グラフィックスドライバ２２を介して、フラッシュ呼を実行し得る。
【００５１】
[0055]このようにして、グラフィックスドライバ２２は、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを前もって決定するためにＶｅｒｉｆｙＨａｎｄｌｅ関数を実行する必要がないことがある。言い換えれば、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを事前に決定することなしにコマンドのセットのうちのコマンドを書き込むことによって、本開示で説明する技法は、プロセッサ１２が、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを決定する処理リソースを浪費する必要がないことがあるので、処理効率を促進し得る。
【００５２】
[0056]上記で説明したように、コマンドのセットの書込み中に、グラフィックスドライバ２２が、十分な空間がコマンドバッファ中のメモリユニットのチェーンのメモリユニット中にないと決定した場合、またはコマンドのセットの書込みの後に、グラフィックスドライバ２２が、コマンドのセットに関連付けられたハンドルのための十分な空間が割振りリスト中にないと決定した場合、グラフィックスドライバ２２はフラッシュ呼を実行し得る。フラッシュ呼は、グラフィックスドライバ２２がコマンドをメモリユニットに書き込むための空間を解放するか、またはコマンドに関連付けられたハンドルのための割振りリスト中の空間を解放する機構であり得る。
【００５３】
[0057]たとえば、フラッシュ呼の実行の結果は、グラフィックスドライバ２２が、最終的な実行のために、それのための十分な空間が割振りリスト中にあるすでに書き込まれたコマンドをＧＰＵ１４にサブミットするということであり得る。たとえば、コマンドのサブミッションは、ＧＰＵ１４がコマンドを実行することが可能であり得ることを意味する。一例として、グラフィックスドライバ２２は、コマンドをＧＰＵ１４にサブミットする方法として、ＧＰＵ１４が最終的な実行のためにコマンドを取り出すことができるように、コマンドを記憶するメモリユニットについてのメモリアドレスをＧＰＵ１４に示し得る。概して、コマンドをサブミットすることは、グラフィックスドライバ２２が、最終的な実行のためにコマンドをＧＰＵ１４にとって利用可能にするための何らかの技法を利用することと見なされ得る。ＧＰＵ１４は、ＧＰＵ１４がいつコマンドを実行すべきであるかに基づいて、直ちにコマンドを実行するか、または少し後の時間にコマンドを実行し得る。
【００５４】
[0058]さらに、フラッシュ呼の実行の結果は、グラフィックスドライバ２２が、すでに書き込まれたコマンドを記憶するメモリユニットのチェーンからメモリユニットを解放することであり得る。たとえば、プロセッサ１２が、グラフィックスドライバ２２を介して、第１のメモリユニットと第２のメモリユニットとを満たし、第３のメモリユニットを部分的に満たすコマンドの第１のセットを書き込んだと仮定する。同じく、この例では、コマンドの第１のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあったと仮定する。
【００５５】
[0059]この例では、プロセッサ１２は、グラフィックスドライバ２２を介して、プロセッサ１２がコマンドの第１のセットを第３のメモリユニットに書き込み終えたところから開始してコマンドの第２のセットを書き込み始め得る。たとえば、コマンドの第１のセットはコマンドの前のセットと見なされ得、コマンドの第２のセットはコマンドの現在セットと見なされ得る。しかしながら、この例では、プロセッサ１２は、コマンドの第２の（たとえば、現在）セットのうちのコマンドのすべてを第３のメモリユニットと第４のメモリユニットとの残りに書き込むことが可能でないことがある。この例では、チェーンサイズは４つのメモリユニットであり得、したがって、グラフィックスドライバ２２は、メモリユニットのチェーン中の第４のメモリユニットの後に１つのメモリユニットをリンクすることが可能でないことがある。
【００５６】
[0060]グラフィックスドライバ２２がコマンドの第２のセットからのコマンドで第４のメモリユニットを満たした後、プロセッサ１２は、グラフィックスドライバ２２を介して、フラッシュ呼を実行し得る。それに応答して、プロセッサ１２は、グラフィックスドライバ２２を介して、最終的な実行のためにコマンドの第１のセットをＧＰＵ１４にサブミットし得る（たとえば、コマンドの第１のセットが記憶されたロケーションを示すことによって利用可能にし得る）。プロセッサ１２が、グラフィックスドライバ２２を介して、メモリユニットに書き込むことが可能であったコマンドの第２のセットのうちのコマンドは、メモリユニット中に残っており、ＧＰＵ１４にまだサブミットされない。
【００５７】
[0061]また、フラッシュ呼の実行に応答して、プロセッサ１２は、第１のメモリユニットと第２のメモリユニットとがコマンドの第１のセットのうちのコマンドのみを記憶したので、グラフィックスドライバ２２を介して、メモリユニットのチェーンから第１のメモリユニットと第２のメモリユニットとを解放し得る。メモリユニットのチェーンから１つのメモリユニットを解放することは、チェーン中の他のメモリユニットとのそのメモリユニットのリンクを破壊することを意味し得る。第３のメモリユニットの少なくとも一部がメモリユニットの第２のセットのうちのコマンドを記憶するので、プロセッサ１２は、グラフィックスドライバ２２を介して、メモリユニットのチェーンから第３のメモリユニットを解放することが可能でないことがある。
【００５８】
[0062]メモリユニットのチェーンからの第１のメモリユニットと第２のメモリユニットとの解放がある場合、メモリユニットのチェーンは２つのメモリユニット（たとえば、第３のメモリユニットおよび第４のメモリユニット）を含み得る。チェーンサイズが４つのメモリユニットであるので、この例では、オペレーティングシステム２０はバッファ２６中の別のメモリユニットを割り振り得、グラフィックスドライバ２２は、この新しいメモリユニットを前の第４のメモリユニットの終端にリンクし得る。
【００５９】
[0063]この接合において、３つのメモリユニットが、メモリユニット（すなわち、前の第３および第４のメモリユニット、ならびに新たにリンクされたメモリユニット）のチェーン中にあり得る。グラフィックスドライバ２２は、次いで、コマンドの第２のセットのうちの残りのコマンド（すなわち、グラフィックスドライバ２２が第４のメモリユニットを満たした後の残っているコマンド）を、新たにリンクされたメモリユニットに書き込み得る。グラフィックスドライバ２２が、コマンドの第２のセットのうちの残りのコマンドのすべてを、新たにリンクされたメモリユニットに書き込むことが可能でない場合、オペレーティングシステム２０は、バッファ２６中の別のメモリユニットを割り振り得、グラフィックスドライバ２２は、この新しいメモリユニットをメモリユニットのチェーンの３つのメモリユニットにリンクし、これは、チェーンサイズである４つのメモリユニットをもつメモリユニットのチェーンを生じ得る。
【００６０】
[0064]その上、フラッシュ呼の実行は、ハンドルのために割振りリストをリセットすることを生じる。たとえば、ＧＰＵ１４による最終的な実行のためにコマンドの第１のセットをサブミットすることに加えて、プロセッサ１２は、グラフィックスドライバ２２を介して、割振りリストをクリアし、コマンドの第２のセットに関連付けられたハンドルを割振りリストに記憶し得る。
【００６１】
[0065]上記の例では、コマンドの第１のセットを書き込んだ後に、コマンドの第１のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあったと仮定された。また、上記の例では、プロセッサ１２は、グラフィックスドライバ２２を介して、フラッシュ呼の一部としてどのコマンドをサブミットすべきかを決定した。以下で、プロセッサ１２が、グラフィックスドライバ２２を介して、関連するハンドルのための十分な空間が割振りリスト中にあるかを決定し得る様式、ならびにプロセッサ１２が、グラフィックスドライバ２２を介して、フラッシュ呼の一部としてどのコマンドをサブミットすべきかを決定し得る様式について説明する。
【００６２】
[0066]たとえば、コマンドのセットの書込み中に、グラフィックスドライバ２２は、コマンドのセットのための十分な空間がメモリユニット中にあるかどうかの前の検証なしに、ＧｅｔＣｍｄＳｐａｃｅ関数を周期的にトリガし得る。ＧｅｔＣｍｄＳｐａｃｅ関数は、グラフィックスドライバ２２が、メモリユニットのチェーンの終端にある１つのメモリユニットの終端に達したかどうか（すなわち、グラフィックスドライバ２２が４つのメモリユニットのチェーンサイズをもつメモリユニットのチェーンの第４のメモリユニットに達したかどうか）を示し得る。ＧｅｔＣｍｄＳｐａｃｅ関数が、グラフィックスドライバ２２がメモリユニットのチェーンの終端にまだ達していないことを示す場合、グラフィックスドライバ２２はコマンドの第１のセットのうちのコマンドを書き込み続け得る。
【００６３】
[0067]ＧｅｔＣｍｄＳｐａｃｅ関数が、グラフィックスドライバ２２がメモリユニットのチェーンの終端に達したことを示す場合、グラフィックスドライバ２２は上記で説明したようにフラッシュ呼を実行し得る。また、グラフィックスドライバ２２は、次いで、ＧｅｔＣｍｄＳｐａｃｅ関数を再試行し得る。たとえば、フラッシュ呼は、オペレーティングシステム２０が割り振る追加のメモリユニットをリンクするために空間を解放し得、次いで、グラフィックスドライバ２２はＧｅｔＣｍｄＳｐａｃｅ関数を再試行し得、それにより、グラフィックスドライバ２２がメモリユニットのチェーンの終端にまだ達していないことを示すことになる。
【００６４】
[0068]しかしながら、場合によっては、グラフィックスドライバ２２は、コマンドのセットのうちのコマンドを書き込み終え得、コマンドの後続のセットからの追加のコマンドのための利用可能な空間がメモリユニット中に依然としてあり得る。この場合、プロセッサ１２は、グラフィックスドライバ２２を介して、（ＣｏｎｆｉｒｍＷｒｉｔｅと呼ばれる）「書込み確認」コマンドを実行し得る。概して、プロセッサ１２は、コマンドのセットのうちのコマンドをコマンドバッファに書き込んだ後に、グラフィックスドライバ２２を介して、書込み確認コマンドを実行し得る。書込み確認コマンドの実行は１つまたは複数の目的を果たし得る。
【００６５】
[0069]グラフィックスドライバ２２がコマンドのセットを書き込み終えたメモリユニット中のポイントから開始して、グラフィックスドライバ２２が、コマンドの次のセットのためのコマンドを書き込み始めることができるように、グラフィックスドライバ２２は、書込み確認コマンドの実行を用いて、グラフィックスドライバ２２がコマンドのセットを書き込み終えたメモリユニット中のポイントを示し得る。メモリユニット中のコマンドのセットの終端のロケーションは「確認ポイント」と呼ばれる。
【００６６】
[0070]たとえば、プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドの第１のセットのうちのコマンドを第１のメモリユニット、第２のメモリユニット、および部分的に第３のメモリユニットに書き込んだと仮定する。この例では、プロセッサ１２は、グラフィックスドライバ２２を介して、グラフィックスドライバ２２がコマンドの第１のセット（たとえば、コマンドの前のセット）を書き込み終えた第３のメモリユニット中の確認ポイントを識別し得る。たとえば、グラフィックスドライバ２２がコマンドの第１のセットを第３のメモリユニットに書き込み終えたところは、第３のメモリユニット中のコマンドの第１のセットの終端のロケーションである。この場合、確認ポイントを識別した後に、コマンドの第１のセットは、前に確認されたコマンドと見なされ得る。（今、コマンドの現在セットである）コマンドの第２のセットを書き込むと、プロセッサ１２は、グラフィックスドライバ２２を介して、第３のメモリユニット中の確認ポイントから開始してコマンドの第２のセットを書き込み始め得る。
【００６７】
[0071]さらに、グラフィックスドライバ２２は、書込み確認コマンドの実行を用いて、コマンドのセットのうちのコマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にあるかどうかを決定し得る。たとえば、グラフィックスドライバ２２がコマンドのセットのうちのコマンドを書き込んでいるとき、プロセッサ１２は、グラフィックスドライバ２２を介して、ＡｄｄＰｅｎｄｉｎｇＨａｎｄｌｅ（）関数を実行し得る。ＡｄｄＰｅｎｄｉｎｇＨａｎｄｌｅ関数を用いて、グラフィックスドライバ２２は、コマンドのセットに関連付けられたハンドルを、確認されていないハンドルリストとも呼ばれる一時的割振りリストに追加し得る。
【００６８】
[0072]コマンドのセットを書き込んだ後に、確認されていないハンドルリストは、コマンドのセットに関連付けられたハンドルを含む。グラフィックスドライバ２２は、次いで、確認されていないハンドルリスト中のハンドルをオペレーティングシステム２０にサブミットすることを試み得る。たとえば、プロセッサ１２は、グラフィックスドライバ２２を介して、ＡｄｄＨａｎｄｌｅ（）関数を実行し得る。ＡｄｄＨａｎｄｌｅ（）関数を用いて、グラフィックスドライバ２２は、確認されていないハンドルリスト中のハンドルをオペレーティングシステム２０にサブミットし得る。それに応答して、プロセッサ１２は、オペレーティングシステム２０を介して、確認されていないハンドルリストのハンドルのための十分な空間が割振りリスト中にあるかどうかを決定し得る。
【００６９】
[0073]たとえば、割振りリストはコマンドの前のセットのハンドルを含み得、コマンドの前のセットのハンドルが割振りリストのアレイのうちの９０％を使用すると仮定する。この例では、グラフィックスドライバ２２は、確認されていないハンドルリスト中のハンドルをサブミットし得、確認されていないハンドルリスト中のハンドルが割振りリストのうちの１０％未満を必要とする場合、グラフィックスドライバ２２は、確認されていないハンドルリスト中のハンドルを割振りリストに記憶し得る。いくつかの例では、グラフィックスドライバ２２は、確認されていないハンドルリストを形成するハンドルのための十分な空間が割振りリスト中にあるかどうかを最初に決定することなしに、確認されていないハンドルリスト中のハンドルを割振りリストに記憶することを試み得る。
【００７０】
[0074]しかしながら、確認されていないハンドルリスト中のハンドルが割振りリストのうちの１０％以上を必要とする（たとえば、確認されていないハンドルリスト中のハンドルを割振りリスト中に記憶する試みが失敗した）場合、グラフィックスドライバ２２はフラッシュ呼を実行し得る。フラッシュ呼に応答して、プロセッサ１２は、グラフィックスドライバ２２を介して、最終的な実行のために、割振りリストがそれのために関連ハンドルと関連するハンドルとを割振りリストに現在記憶するコマンドバッファに記憶されたコマンドをＧＰＵ１４にサブミットし得る。また、フラッシュ呼に応答して、プロセッサ１２は、オペレーティングシステム２０を介して、割振りリストをリセットし得（すなわち、ハンドルをもつ割振りリストを空にし得）、それにより、グラフィックスドライバ２２が、ちょうど書き込まれたコマンドのセットに関連付けられたハンドルを割振りリストに記憶することを可能にする。
【００７１】
[0075]このようにして、書込み確認コマンドの実行は、フラッシュ呼に応答してどのコマンドと関連するハンドルとがＧＰＵ１４にサブミットされ得るかを示すことと見なされ得る。たとえば、グラフィックスドライバ２２がコマンドの第１のセットを書き込んでいるとき、グラフィックスドライバ２２は、（たとえば、ＡｄｄＰｅｎｄｉｎｇＨａｎｄｌｅ（）関数を介して）ハンドルの確認されていないリストを維持していると仮定する。また、グラフィックスドライバ２２が、コマンドの第１のセットのすべてのコマンドをメモリユニットのチェーンのメモリユニット内に書き込むことが可能であると仮定する。
【００７２】
[0076]この例では、コマンドの第１のセットを書き込んだ後に、グラフィックスドライバ２２は、書込み確認（ＣｏｎｆｉｒｍＷｒｉｔｅ）コマンドを実行し得る。書込み確認コマンドの一部として、グラフィックスドライバ２２は、（たとえば、ＡｄｄＨａｎｄｌｅ（）関数を介して）ハンドルの確認されていないリストをオペレーティングシステム２０にサブミットし得る。この例では、ハンドルの確認されていないリストのハンドルのための十分な空間が割振りリスト中にあると仮定する。したがって、グラフィックスドライバ２２は、ハンドルの確認されていないリストのハンドルを割振りリストに追加し、ハンドルの確認されていないリストをクリアし得る。グラフィックスドライバ２２がハンドルの確認されていないリストのハンドルを割振りリストに追加することが可能であったので、書込み確認コマンドの一部として、グラフィックスドライバ２２は、グラフィックスドライバ２２がコマンドの第１のセットを書き込み終えたポイント（すなわち、確認ポイント）を識別し得る。たとえば、グラフィックスドライバ２２は、メモリユニット中のコマンドの第１のセットの終端のロケーションにおける確認ポイントを識別し得る。プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドの第１のセットをまだサブミットしないことがあり、フラッシュ呼まで待ち得る。
【００７３】
[0077]この接合において、プロセッサ１２は、フレームを書き込んだと見なされ得る。本開示で使用するフレームという用語は、コマンドのセットと同義で使用される。フレームという用語は、同じくフレームと呼ばれることがあるレンダリングされた画像と混同されるべきでない。
【００７４】
[0078]本開示で説明する技法では、プロセッサ１２が、グラフィックスドライバ２２を介して、書込み確認コマンドを実行し、書込み確認コマンドの実行が成功した（すなわち、十分な空間が割振りリスト中にある）後、プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドの第１のセットが「確認されたコマンド」であることを示し得る。プロセッサ１２はまた、グラフィックスドライバ２２を介して、どのメモリユニットが確認されたコマンドのみを記憶するかを識別し得る。
【００７５】
[0079]たとえば、プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドの第１のセットでメモリユニットのチェーンの第１のメモリユニットと第２のメモリユニットとを満たし、第３のメモリユニットを部分的に満たしたと仮定する。この例では、第１のメモリユニットと第２のメモリユニットとは、確認されたコマンドのみを記憶し、グラフィックスドライバ２２は、第１のメモリユニットと第２のメモリユニットとが確認されたコマンドのみを含むことを示し得る。たとえば、グラフィックスドライバ２２は、メモリユニットのチェーンの各メモリユニットについての変数ｕｓｅｄＥｎｔｒｉｅｓを維持し得る。
【００７６】
[0080]確認されたコマンドのみを記憶するメモリユニットについて、グラフィックスドライバ２２は、それらのメモリユニットのために、変数ｕｓｅｄＥｎｔｒｉｅｓをｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓに等しく設定し得る。この例では、第１のメモリユニットと第２のメモリユニットとについて、グラフィックスドライバ２２は、第１のメモリユニットと第２のメモリユニットとが確認されたコマンドのみを記憶することを示すために、変数ｕｓｅｄＥｎｔｒｉｅｓをｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓに等しく設定し得る。第３のメモリユニットに関して、グラフィックスドライバ２２は、変数ｕｓｅｄＥｎｔｒｉｅｓをｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓでないように設定し得る（すなわち、ｕｓｅｄＥｎｔｒｉｅｓ！＝ｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓ）。これは、第３のメモリユニットが確認されたコマンドを部分的にのみ含むからであり得る。
【００７７】
[0081]プロセッサ１２は、次いで、グラフィックドライバ２２を介して、確認ポイントから開始してコマンドの第２のセットをメモリユニットのチェーンのメモリユニットに書き込み得る。たとえば、コマンドの第１のセットがフレーム０である場合、プロセッサ１２は、グラフィックスドライバ２２を介して、フレーム１を書き込み得、フレーム１は、確認ポイントから開始するメモリユニットのチェーンのメモリユニットへのコマンドの第２のセットである。
【００７８】
[0082]コマンドの第２のセットの書込み中に、グラフィックスドライバ２２は、コマンドの第２のセットに関連付けられたハンドルをハンドルの確認されていないリストに記憶し得る。コマンドの第２のセットの書込み中に、グラフィックスドライバ２２がメモリユニットのチェーンの終端に達し、まだ書き込まれていないコマンドの第２のセットのうちのコマンドがある場合、グラフィックスドライバ２２はフラッシュ呼を実行し得る。
【００７９】
[0083]それに応答して、グラフィックスドライバ２２は、すべての確認されたコマンドと、確認されたコマンドに関連付けられたハンドルとをサブミットし得る（たとえば、コマンドの第１のセットと、コマンドの第１のセットに関連付けられた割振りリスト中のハンドルとをサブミットし得る）。言い換えれば、グラフィックスドライバ２２は、確認ポイントより前のすべてのコマンドとそれらの関連するハンドルとをサブミットし得る。たとえば、前の例に沿って、グラフィックスドライバ２２は、第１および第２のメモリユニット中のすべてのコマンドと、確認ポイントまでの第３のメモリユニットを部分的に満たす確認されたコマンドとをサブミットし得る。グラフィックスドライバ２２はまた、割振りリスト中のハンドルをサブミットし、割振りリストをクリアし得る。
【００８０】
[0084]グラフィックスドライバ２２はまた、メモリユニットのチェーンから第１および第２のメモリユニットを解放し、コマンドの第２のセットのうちの残りのコマンドを、オペレーティングシステム２０によって割り振られた追加のメモリユニットに書き込み得る。確認されたコマンドを記憶しないメモリユニットの場合、グラフィックスドライバ２２は、それらのメモリユニットについて、変数ｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓを０に等しく設定し得る。グラフィックスドライバ２２は、次いで、コマンドの第２のセットを書き込んだ後に、書込み確認コマンドを実行し得る。この場合、グラフィックスドライバ２２は、コマンドの第１のセットをフラッシュした後に割振りリストをクリアしたので、一時的にハンドルの確認されていないリストに記憶されたコマンドの第２のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にあることになる。また、書込み確認コマンドに応答して、コマンドの第２のセットは、確認されたコマンドと見なされ得、グラフィックスドライバ２２は、グラフィックスドライバ２２がコマンドの第２のセットを書き込み終えたところの終端に確認ポイントを移動し得る。
【００８１】
[0085]上記の場合では、コマンドの第２のセットの書込み中に、グラフィックスドライバ２２は、メモリユニットのチェーンにまだ書き込まれていないコマンドの第２のセットのうちのコマンドでメモリユニットのチェーンの終端に達した。いくつかの例では、グラフィックスドライバ２２は、コマンドの第２のセットのすべてのコマンドを書き込み、依然としてメモリユニットのチェーンの終端に達していないことがある。これらの例では、グラフィックスドライバ２２は、コマンドの第２のセットのすべてのコマンドを書き込むことと、依然としてメモリユニットのチェーンの終端に達しないこととが可能であるので、グラフィックスドライバ２２はフラッシュ呼を実行しないことがあり、したがって、コマンドの第１のセット（すなわち、確認されたコマンド）をサブミットしないことがあり、コマンドの第１のセットに関連付けられたハンドルの割振りリストをクリアしないことがある。
【００８２】
[0086]また、これらの例では、コマンドの第２のセットのすべてのコマンドを書き込んだ後に、プロセッサ１２は、グラフィックスドライバ２２を介して、書込み確認コマンドを実行し得る。書込み確認コマンドの一部として、グラフィックスドライバ２２は、ハンドルの確認されていないリスト中のハンドルを割振りリストに追加することを試み得る。この場合、割振りリストは、コマンドの第１のセットに関連付けられたハンドルを含み得る。ハンドルの確認されていないリスト中のコマンドの第２のセットのハンドルを追加することが、割振りリストが、それの固定サイズが許すハンドルよりも多くのハンドルを記憶することを必要としない場合、グラフィックスドライバ２２は、割振りリストにコマンドの第２のセットのハンドルを追加し、ハンドルの確認されていないリストをクリアし、確認ポイントをコマンドの第２のセットの終端に移動する。
【００８３】
[0087]ハンドルの確認されていないリスト中のコマンドの第２のセットのハンドルを追加することが、割振りリストが、それの固定サイズが許すハンドルよりも多くのハンドルを記憶することを必要とする場合、グラフィックスドライバ２２はフラッシュ呼を実行し得る。それに応答して、グラフィックスドライバ２２は、すべての確認されたコマンド（たとえば、コマンドの第１のセット）と、関連するハンドルとをサブミットし、割振りリストをクリアし、確認されたコマンドのみを記憶するメモリユニットを解放し得る。グラフィックスドライバ２２は、次いで、コマンドの第２のセットのハンドルを、ハンドルのちょうどクリアされた割振りリストに記憶し、確認ポイントをコマンドの第２のセットの終端に移動し、コマンドの第２のセットが確認されたコマンドであることを示し得る。
【００８４】
[0088]図２は、本開示で説明する１つまたは複数の例示的な技法による、コマンドバッファに記憶された、確認されたコマンドと確認されていないコマンドとを示す概念図である。図３は、本開示で説明する１つまたは複数の例示的な技法による、コマンドバッファに記憶された、確認されたコマンドと確認されていないコマンドとを示す別の概念図である。図２は、グラフィックスドライバ２２がメモリユニットのチェーンのメモリユニットを満たし、追加のコマンドが、まだ書き込まれていないコマンドのセット中にあるので、グラフィックスドライバ２２がフラッシュ呼を実行する例示的な場合を示している。図３は、グラフィックスドライバ２２は、コマンドのセットのすべてのコマンドを書き込むが、割振りリスト中の空間の欠如のためにフラッシュ呼を実行する例示的な場合を示している。
【００８５】
[0089]たとえば、図２および図３では、メモリユニットのチェーンは、メモリユニットＡとメモリユニットＢとメモリユニットＣとメモリユニットＤとを含む。グラフィックスドライバ２２は、メモリユニットＡ、Ｂ、Ｃ、およびＤが常駐するバッファ２６中のロケーションを識別するそれらのそれぞれのポインタを介して、メモリユニットＡ、Ｂ、Ｃ、およびＤを参照し得る。たとえば、図２および図３は、メモリユニットのチェーン中の第１のメモリユニット（たとえば、メモリユニットＡ）を指すＩＢ２チェーンヘッドポインタを示す。オペレーティングシステム２０は、ＩＢ２チェーンヘッドポインタについての情報をバッファ２４（たとえば、ＩＢ１バッファ）に記憶し得、メモリユニットＡ、Ｂ、Ｃ、およびＤはバッファ２６中に常駐し得る。
【００８６】
[0090]図２および図３では、グラフィックスドライバ２２は、コマンドの第１のセットをメモリユニットＡとメモリユニットＢとに書き込み、（Ｃｐａｒｔｉａｌによって示された）メモリユニットＣに部分的に書き込み得る。コマンドの第１のセットの書込みの後に、グラフィックスドライバ２２は書込み確認コマンドを実行し得る。図２および図３の例では、グラフィックスドライバ２２は、コマンドの第１のセットに関連付けられたハンドルを割振りリストに記憶することが可能であった。図２および図３の例では、グラフィックスドライバ２２は、メモリユニットＣの中央の（たとえば、Ｃｐａｒｔｉａｌの終端における）確認ポイントを識別し得る。
【００８７】
[0091]グラフィックスドライバ２２がコマンドの第１のセットのすべてのコマンドをメモリユニットのチェーンのメモリユニットに書き込むことが可能であり、コマンドの第１のセットに関連付けられたハンドルを割振りリストに記憶することが可能であったので、コマンドの第１のセットは、グレーシェーディングで示される確認されたコマンドと見なされ得る。また、図示のように、メモリユニットＡおよびＢが確認されたコマンドのみを記憶するので、グラフィックスドライバ２２はｕｓｅｄＥｎｔｒｉｅｓ変数をｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓに等しく設定し得る。メモリユニットＣが確認されたコマンドを部分的にのみ記憶するので、グラフィックスドライバ２２はｕｓｅｄＥｎｔｒｉｅｓ変数をｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓに等しくなく設定し得る。
【００８８】
[0092]図２および図３では、グラフィックスドライバ２２は、次いで、確認ポイントから開始してコマンドの第２のセットをメモリユニットのチェーンに書き込み得る。たとえば、グラフィックスドライバ２２は、グラフィックスドライバ２２がコマンドのセットを書き込み始めるべきであるところを示す（開始ポインタと呼ばれる）ポインタを維持し得る。最初に、開始ポインタはＩＢ２チェーンヘッドポインタを指す。書込み確認コマンドの実行の成功の後に、グラフィックスドライバ２２は開始ポインタを確認ポイントに移動し得る。たとえば、図２および図３では、グラフィックスドライバ２２は開始ポインタをＣｐａｒｔｉａｌの終端においてに移動し得る。
【００８９】
[0093]図２および図３では、コマンドの第２のセットの書込みは、確認されていないコマンドで示されている。コマンドの第２のセットは、グラフィックスドライバ２２が書込み確認コマンドをまだ正常に実行していなかったので確認されていないコマンドである。図２および図３では、グラフィックスドライバ２２は、メモリユニットＣ（Ｃｎｅｘｔ）を満たし、メモリユニットＤを（図２では）満たすか、または（図３では）部分的に満たすコマンドの第２のセットのうちのコマンドを書き込む必要がある。メモリユニットＤが確認されていないコマンドのみを記憶するので、メモリユニットＤのためのｃｏｎｆｉｒｍｅｄＥｎｔｒｉｅｓは０に等しく設定される。
【００９０】
[0094]図２では、グラフィックスドライバ２２は、コマンドの第２のセットを書き込み、メモリユニットのチェーンの終端に達し得、まだ書き込まれていないコマンドのセット中のコマンドが依然としてある。この場合、グラフィックスドライバ２２は、フラッシュ呼を実行し得、最終的な実行のために、すべての確認されたコマンドをＧＰＵ１４にサブミットし得る。
【００９１】
[0095]図３では、グラフィックスドライバ２２は、コマンドの第２のセットのすべてのコマンドをメモリユニットのチェーン内に書き込むことが可能であった（すなわち、メモリユニットＤは、Ｄｐａｒｔｉａｌまでのみ満たされる）。図３では、グラフィックスドライバ２２は、書込み確認呼を実行し得るが、この場合、コマンドの第２のセットに関連付けられたハンドルのための十分な空間が割振りリスト中にないことがある。たとえば、コマンドの第２のセットの書込み中に、グラフィックスドライバ２２は、コマンドの第２のセットに関連付けられたハンドルをハンドルの確認されていないリストに一時的に記憶し得る。書込み確認コマンドの実行を用いて、グラフィックスドライバ２２は、確認されていないハンドルリスト中のハンドルを割振りリストに追加することを試み得る。しかしながら、割振りリストは、コマンドの第１のセット（すなわち、確認されたコマンド）に関連付けられたハンドルをすでに含み得、コマンドの第２のセットに関連付けられたハンドルを割振りリストに追加するための十分な空間がグラフィックスドライバ２２のための割振りリスト中にないことがある。この場合、グラフィックスドライバ２２はフラッシュ呼を実行し得、最終的な実行のために、すべての確認されたコマンドと関連するハンドルとをＧＰＵ１４にサブミットし得る。
【００９２】
[0096]いくつかの例では、確認されたコマンドをサブミットすることの一部として、グラフィックスドライバ２２は、開始ポインタのロケーションと、確認されたコマンドを記憶するメモリユニットのためのそれぞれのポインタとをＧＰＵ１４に示し得る。さらに、グラフィックスドライバ２２は、確認ポイントを指すポインタをＧＰＵ１４に示し得る。ＧＰＵ１４は、次いで、示されたポインタに基づいてコマンドバッファ（たとえば、バッファ２６）から確認されたコマンドのすべてを一緒に取り出すことが可能であり得る。グラフィックスドライバ２２がコマンドの次のセットを確認した後、現在確認ポイントを指すポインタは、コマンドの次のセットのための開始ポインタになり、新たに決定された確認ポイント（すなわち、グラフィックスドライバ２２がコマンドの第２のセットを書き込み終えたところ）は、確認されたコマンドのエンドポイントになる。
【００９３】
[0097]このようにして、本技法は、最終的な実行のためにどのコマンドがＧＰＵ１４にサブミットされる準備ができているかを示すために確認ベース方法を利用する。確認ベース方法は、グラフィックスドライバ２２が、コマンドを記憶するための十分な空間がメモリユニット中にあるかどうか、またはハンドルのための十分な空間が割振りリスト中にあるかどうかを前もって決定する必要なしに、コマンドをコマンドバッファに書き込むことを可能にする。グラフィックスドライバ２２がフラッシュ呼を実行するのは、コマンドを書き込むことより前にフラッシュ呼を発行することではなく、グラフィックスドライバ２２が、コマンドの書込み中に十分な空間がメモリユニット中にないと決定したときである。同じく、グラフィックスドライバ２２がフラッシュ呼を実行するのは、コマンドを書き込むことより前にフラッシュ呼を発行することではなく、グラフィックスドライバ２２が、コマンドの書込みの後に、コマンドに関連付けられたハンドルのための十分な空間が割振りリスト中にないと決定したときである。
【００９４】
[0098]図４は、本開示で説明する１つまたは複数の例示的な技法による例示的な動作を示すフローチャートである。説明の目的で、本技法について図１に関して説明する。
【００９５】
[0099]プロセッサ１２は、グラフィックスドライバ２２を介して、現在確認ポイントから開始してコマンドの現在セットをコマンドバッファのメモリユニットのチェーンのメモリユニットに書き込む（４０）。たとえば、コマンドの現在セットを書き込むことより前に、プロセッサ１２は、コマンドの前のセットをメモリユニットのチェーンに書き込んでいることがあり、同じく、コマンドの前のセットに関連付けられたハンドルを（たとえば、確認されていないハンドルリスト中の）一時リストに書き込んでいることがある。
【００９６】
[0100]コマンドの前のセットを書き込んだ後に、プロセッサ１２は、書込み確認（たとえば、ＣｏｎｆｉｒｍＷｒｉｔｅ）コマンドを実行していることがある。この例では、コマンドの前のセットの書込み中に、メモリユニットのチェーンの終端に達することなしにコマンドの前のセットのすべてを記憶するための十分な空間がメモリユニットのチェーンにあった（たとえば、メモリユニットのチェーンに書き込まれなかったコマンドの前のセットのうちのコマンドがない）と仮定する。書込み確認コマンドの実行の一部として、プロセッサ１２は、一時リスト中のハンドルを割振りリスト中に記憶していることがある（たとえば、コマンドの前のセットのハンドルのための十分な空間が割振りリスト中にあった）。この例では、書込み確認コマンドの実行の一部として、プロセッサ１２は、プロセッサ１２がコマンドの前のセットを書き込み終えた１つのメモリユニット中のポイントである現在確認ポイントを識別し得る。したがって、コマンドの現在セットのために、プロセッサ１２は、現在確認ポイントからコマンドの現在セットのうちのコマンドを書き込み始め得る。
【００９７】
[0101]プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドの現在セットの書込み中に、コマンドの現在セットに関連付けられたハンドルを（たとえば、確認されていないハンドルリスト中の）一時リストに記憶する（４２）。たとえば、プロセッサ１２は新しい一時リストを作成し、コマンドの現在セットに関連付けられたハンドルをこの新たに作成された一時リストに記憶し得る。別の例として、プロセッサ１２は前の一時リストをクリアし、コマンドの現在セットに関連付けられたハンドルをこの今クリアされた一時リストに記憶し得る。たとえば、一時リストからのコマンドの前のセットに関連付けられたハンドルを割振りリストに記憶した後に、プロセッサ１２は一時リストをクリアし、プロセッサ１２がコマンドの現在セットに関連付けられたハンドルを一時リストに記憶することを可能にし得る。
【００９８】
[0102]図示のように、プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドの現在セットの書込み中にメモリユニットのチェーンにまだ書き込まれていないコマンドの現在セットのうちのコマンドで、メモリユニットのチェーンの終端に達したかどうかを決定する（４４）。プロセッサ１２は、グラフィックスドライバ２２を介して、まだ書き込まれていないコマンドの現在セットのうちのコマンドでメモリユニットのチェーンの終端に達した場合（４４のはい）、プロセッサ１２は、グラフィックスドライバ２２を介して、最終的な実行のために前に確認されたコマンドをサブミットする（４６）。
【００９９】
[0103]たとえば、前に確認されたコマンドは、プロセッサ１２によってメモリユニットのチェーンに前に記憶された、現在確認ポイントより前のコマンド（たとえば、コマンドの前のセット）であり得る。たとえば、前に確認されたコマンドは、コマンドの現在セットの書込みの前にプロセッサ１２によってメモリユニットのチェーンに記憶されたコマンドの前のセットであり得、コマンドの現在のセットのために、プロセッサ１２は、十分な空間がメモリユニットのチェーン中にあったことと、コマンドの前のセットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあったこととを確認することが可能であった。
【０１００】
[0104]プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドの現在セットを書き込んだ後にメモリユニットのチェーンの終端に達しない場合（４４のいいえ）、プロセッサ１２は、グラフィックスドライバ２２を介して、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかを決定する（４８）。たとえば、プロセッサ１２は、グラフィックスドライバ２２を介して、割振りリストに一時リスト中のハンドルを追加することが、利用可能である空間よりも多くの空間を割振りリスト中に必要とするかどうかを決定し得る。
【０１０１】
[0105]一例として、プロセッサ１２は、実行の一部として書込み確認コマンドを実行し得、プロセッサ１２は、割振りリストに一時リスト中のハンドルを追加することを試み得る。ハンドルの追加が失敗した場合、プロセッサ１２は、割振りリストに一時リスト中のハンドルを追加することが、利用可能である空間よりも多くの空間を割振り中に必要とすると決定し得る。ハンドルの追加が成功した場合、プロセッサ１２は、割振りリストに一時リスト中のハンドルを追加することが、利用可能である空間よりも多くの空間を割振りリスト中に必要としないと決定し得る。このようにして、プロセッサ１２は、ハンドルを一時リストに記憶するための十分な空間が割振りリスト中にあるかどうかを前もって決定する必要がないことがあり、代わりに、十分な空間が割振りリスト中にあるかどうかを最初に検査することなしに、割振りリストに一時リスト中のハンドルを追加することを試み得る。
【０１０２】
[0106]プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にないと決定した場合（４８のいいえ）、プロセッサ１２は、上記で説明したように、グラフィックスドライバ２２を介して、最終的な実行のために、前に確認されたコマンドをサブミットする（４６）。プロセッサ１２が、グラフィックスドライバ２２を介して、コマンドの現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあると決定した場合（４８のはい）、プロセッサ１２は、グラフィックスドライバ２２を介して、確認ポイントをコマンドの現在セットの終端に移動する（５０）。さらに、グラフィックスドライバ２２は、コマンドの現在セットに関連付けられたハンドルを割振りリストに記憶し得る。
【０１０３】
[0107]プロセッサ１２は、コマンドバッファに書き込まれる必要があるコマンドの追加のセットがあるかどうかを決定する（５２）。書き込まれる必要がある追加のコマンドのセットがある場合（５２のはい）、コマンドの追加のセットはコマンドの現在セットと見なされ得、コマンドの現在セットは、前に確認されたコマンドと見なされ得、プロセッサ１２が確認ポイントを移動したポイントは、現在確認ポイントと見なされ得る。プロセッサ１２は、次いで、（たとえば、確認ポイントに新たに移動された）現在確認ポイントからコマンドの現在セットをメモリユニットのチェーンのメモリユニットに書き込む（４０）。プロセッサ１２は、次いで、図４に示されている例示的なステップを繰り返し得る。書き込まれる必要がある追加のコマンドのセットがない場合（５２のいいえ）、プロセッサ１２は、書き込まれる必要があるコマンドのセットがあるまで、コマンドのセットの書込みを終了し得る。
【０１０４】
[0108]図５は、本開示で説明する１つまたは複数の例示的な技法を実装するように構成され得るデバイスを示すブロック図である。たとえば、図５に例示的なデバイス５８を示す。デバイス５８は、図５でより詳細に示される図１のデバイス１０の１つの例であり得る。図５の例では、デバイス５８は、プロセッサ１２と、ＧＰＵ１４と、システムメモリ１６とを含み得る。簡潔のために、プロセッサ１２、ＧＰＵ１４、およびシステムメモリ１６については、図１に関して前に説明しているので、これらの構成要素は、さらに図５に関して説明しない。デバイス５８はまた、ディスプレイプロセッサ６０と、トランシーバモジュール６２と、ユーザインターフェース６４と、ディスプレイ６６とを含み得る。トランシーバモジュール６２とディスプレイプロセッサ６０とは両方とも、プロセッサ１２および／またはＧＰＵ１４と同じ集積回路（ＩＣ）の一部であり得るか、両方ともプロセッサ１２および／またはＧＰＵ１４を含む１つまたは複数のＩＣの外部にあり得るか、あるいはプロセッサ１２および／またはＧＰＵ１４を含むＩＣの外部にあるＩＣ中に形成され得る。
【０１０５】
[0109]デバイス５８は、明快のために図５に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス５８は、デバイス５８がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図５に示されていないスピーカーおよびマイクロフォンを含み、またはデバイス５８がメディアプレーヤである例においてスピーカーを含み得る。デバイス５８はまた、ビデオカメラを含み得る。さらに、デバイス５８に示された様々なモジュールおよびユニットは、デバイス５８のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース６４およびディスプレイ６６は、デバイス５８が、デスクトップコンピュータ、あるいは外部ユーザインターフェースまたはディスプレイとインターフェースする能力がある他のデバイスである例において、デバイス５８の外部にあり得る。
【０１０６】
[0110]ユーザインターフェース６４の例には、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース６４はまた、タッチスクリーンであり得、ディスプレイ６６の一部として組み込まれ得る。トランシーバモジュール６２は、デバイス５８と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール６２は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。
【０１０７】
[0111]いくつかの例では、ＧＰＵ１４は、十分に形成された画像をシステムメモリ１６に記憶し得る。ディスプレイプロセッサ６０はシステムメモリ１６から画像を取り出し、ディスプレイ６６のピクセルに画像を表示するために照明させる値を出力し得る。ディスプレイ６６は、ＧＰＵ１４によって生成された画像コンテンツを表示するデバイス１０のディスプレイであり得る。ディスプレイ６６は、液晶ディスプレイ（ＬＣＤ）、有機発光ダイオードディスプレイ（ＯＬＥＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスであり得る。
【０１０８】
[0112]１つまたは複数の例において、前述の機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能はコンピュータ可読媒体上に記憶され得る。コンピュータ可読媒体はコンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび／またはデータ構造を取り出すために１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気記憶デバイスを備えることができる。本明細書で使用するディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびＢｌｕ−ｒａｙ（登録商標）ディスク（disc）を含み、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【０１０９】
[0113]コードは、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）などの１つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に好適な他の構造のいずれかを指す。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【０１１０】
[0114]本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）、またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明した１つまたは複数のプロセッサを含めて、ハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【０１１１】
[0115]様々な例について説明した。これらの例および他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
コマンドを記憶するための方法であって、前記方法は、
プロセッサを用いて、コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
前記プロセッサを用いて、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも１つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記プロセッサを用いて、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットすることとを備える、方法。
［Ｃ２］
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することをさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定することは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定することを備える、Ｃ１に記載の方法。
［Ｃ３］
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとをさらに備える、Ｃ１に記載の方法。
［Ｃ４］
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振ることとをさらに備える、Ｃ１に記載の方法。
［Ｃ５］
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることをさらに備える、Ｃ１に記載の方法。
［Ｃ６］
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、Ｃ１に記載の方法。
［Ｃ７］
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むことを備える、Ｃ１に記載の方法。
［Ｃ８］
前記プロセッサが第１のプロセッサを備え、コマンドの前記現在セットは、第２の異なるプロセッサが実行するためのものである、Ｃ１に記載の方法。
［Ｃ９］
前記第１のプロセッサが中央処理ユニット（ＣＰＵ）を備え、前記第２のプロセッサがグラフィックス処理ユニット（ＧＰＵ）を備える、Ｃ８に記載の方法。
［Ｃ１０］
コマンドバッファを備えるシステムメモリと、
プロセッサとを備え、前記プロセッサは、
前記コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも１つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットすることとを行うように構成された、デバイス。
［Ｃ１１］
前記プロセッサが、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するように構成され、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するために、前記プロセッサは、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するように構成された、Ｃ１０に記載のデバイス。
［Ｃ１２］
前記プロセッサは、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行うように構成された、Ｃ１０に記載のデバイス。
［Ｃ１３］
前記プロセッサは、
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振ることとを行うように構成された、Ｃ１０に記載のデバイス。
［Ｃ１４］
前記プロセッサは、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするように構成された、Ｃ１０に記載のデバイス。
［Ｃ１５］
前記プロセッサは、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、Ｃ１０に記載のデバイス。
［Ｃ１６］
前記プロセッサは、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むように構成された、Ｃ１０に記載のデバイス。
［Ｃ１７］
前記プロセッサが第１のプロセッサを備え、前記デバイスが、第２の異なるプロセッサをさらに備え、コマンドの前記現在セットは、前記第２のプロセッサが実行するためのものである、Ｃ１０に記載のデバイス。
［Ｃ１８］
前記第１のプロセッサが中央処理ユニット（ＣＰＵ）を備え、前記第２のプロセッサがグラフィックス処理ユニット（ＧＰＵ）を備える、Ｃ１７に記載のデバイス。
［Ｃ１９］
実行されたとき、１つまたは複数のプロセッサに、
コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むことと、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも１つを決定することと、
前記決定に基づいて、メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、または前記決定に基づいて、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに前記１つまたは複数のプロセッサによって記憶された前に確認されたコマンドをサブミットすることとを行わせる、その上に記憶された命令を有するコンピュータ可読記憶媒体。
［Ｃ２０］
前記１つまたは複数のプロセッサに、
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶することを行わせる命令をさらに備え、
ここにおいて、前記１つまたは複数のプロセッサに、十分な空間が前記割振りリスト中にあるかどうかを決定させる前記命令は、前記１つまたは複数のプロセッサに、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定させる命令を備える、Ｃ１９に記載のコンピュータ可読記憶媒体。
［Ｃ２１］
前記１つまたは複数のプロセッサに、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶することと、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動することとを行わせる命令をさらに備える、Ｃ１９に記載のコンピュータ可読記憶媒体。
［Ｃ２２］
前記１つまたは複数のプロセッサに、
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放することと、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振ることとを行わせる命令をさらに備える、Ｃ１９に記載のコンピュータ可読記憶媒体。
［Ｃ２３］
前記１つまたは複数のプロセッサに、
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアすることを行わせる命令をさらに備える、Ｃ１９に記載のコンピュータ可読記憶媒体。
［Ｃ２４］
前記１つまたは複数のプロセッサに、前記１つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記１つまたは複数のプロセッサに、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、Ｃ１９に記載のコンピュータ可読記憶媒体。
［Ｃ２５］
前記１つまたは複数のプロセッサに、前記１つのメモリユニット中の前記現在確認ポイントから開始してメモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる前記命令は、前記１つまたは複数のプロセッサに、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、メモリユニットの前記チェーンにコマンドの前記現在セットを書き込ませる命令を備える、Ｃ１９に記載のコンピュータ可読記憶媒体。
［Ｃ２６］
コマンドバッファ中のメモリユニットのうちの１つのメモリユニット中の現在確認ポイントから開始してコマンドの現在セットを前記メモリユニットのチェーンに書き込むための手段と、
コマンドの前記現在セットの前記書込み中にメモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの終端に達したかどうか、および
コマンドの前記現在セットの前記書込みの後に、コマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が割振りリスト中にあるかどうかのうちの少なくとも１つを決定するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドでメモリユニットの前記チェーンの前記終端に達した場合、またはコマンドの前記現在セットに関連付けられたハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、コマンドの前記現在セットの前記書込みの前にメモリユニットの前記チェーンに、前記プロセッサによって記憶された前に確認されたコマンドをサブミットするための手段とを備える、デバイス。
［Ｃ２７］
コマンドの前記現在セットの前記書込み中に、コマンドの前記現在セットに関連付けられた前記ハンドルを一時リストに記憶するための手段をさらに備え、
ここにおいて、十分な空間が前記割振りリスト中にあるかどうかを決定するための前記手段は、前記割振りリストに前記一時リスト中の前記ハンドルを追加することが、前記割振りリストに前記一時リスト中の前記ハンドルを追加することを試みることによって利用可能である空間よりも多くの空間を前記割振りリスト中に必要とするかどうかを決定するための手段を備える、Ｃ２６に記載のデバイス。
［Ｃ２８］
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、コマンドの前記現在セットに関連付けられた前記ハンドルを前記割振りリストに記憶するための手段と、
コマンドの前記現在セットを書き込んだ後に、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にある場合、前記現在確認ポイントを別のメモリユニットに移動するための手段とをさらに備える、Ｃ２６に記載のデバイス。
［Ｃ２９］
前記現在確認ポイントが識別された前記１つのメモリユニットより前のメモリユニットの前記チェーンからメモリユニットを解放するための手段と、
メモリユニットの前記チェーンにまだ書き込まれていないコマンドの前記現在セットのうちのコマンドで、メモリユニットの前記チェーンの前記終端に達した場合、メモリユニットの前記チェーンに１つまたは複数の追加のメモリユニットを割り振るための手段とをさらに備える、Ｃ２６に記載のデバイス。
［Ｃ３０］
コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にない場合、前記割振りリストをクリアするための手段をさらに備える、Ｃ２６に記載のデバイス。
［Ｃ３１］
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットを記憶するための十分な空間がメモリユニットの前記チェーン中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、Ｃ２６に記載のデバイス。
［Ｃ３２］
前記１つのメモリユニット中の前記現在確認ポイントから開始してコマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための前記手段は、コマンドの前記現在セットに関連付けられた前記ハンドルを記憶するための十分な空間が前記割振りリスト中にあるかどうかを決定することなしに、コマンドの前記現在セットをメモリユニットの前記チェーンに書き込むための手段を備える、Ｃ２６に記載のデバイス。
【要約】  コマンドバッファのメモリユニットのチェーンのメモリユニットにコマンドを書き込むための技法について説明する。本技法はコマンドを書き込み得、書込み中に、十分な空間がメモリユニットのチェーン中にないと決定された場合、本技法は、前に確認されたコマンドをフラッシュし得る。書込みの後に、本技法が、コマンドに関連付けられたハンドルのために十分な空間が割振りリスト中にないと決定した場合、本技法は、前に確認されたコマンドをフラッシュし得る。
【選択図】  図４【図１】
0005969145.tif 000002
【図２】
0005969145.tif 000003
【図３】
0005969145.tif 000004
【図４】
0005969145.tif 000005
【図５】
0005969145.tif 000006