(57)【要約】プロセッサ（１００）は、ペンディング状態の複数のグラフィックスコンテキスト（１０２，１０３，１０４）のうち何れがプロセッサのグラフィックスパイプラインでの実行のために選択されるかを管理するスケジューラ（１０５）を含む。プロセッサは、ディスプレイデバイスでレンダリングされる準備ができたデータを記憶する複数のフリップキュー（１１５，１１６，１１７）を含む。実行中のグラフィックスコンテキストは、１つのフリップキューに記憶されたデータを変更するフリップリクエストを発行することができる。スケジューラは、フリップリクエストが、ディスプレイデバイスでのレンダリングに使用されているフリップキューをターゲットとしていると判定したことに応じて、グラフィックスパイプラインで実行される異なるグラフィックスコンテキストをスケジューリングするように、コンテキストの切り替えを実行する。【選択図】図２
2019505864.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ（１００）において、第１のフレームバッファ（２２１）をレンダリングする要求を示す第１のフリップリクエストを、前記プロセッサで実行されている第１のグラフィックスコンテキスト（１０２）から受信したことに応じて、前記第１のフレームバッファが使用中であることを示すように第１の記憶位置（１１１）に第１の値を記憶することと、
前記第１のフレームバッファの内容を変更する要求を受信したことに応じて、前記第１の値を記憶する前記第１の記憶位置に応じて、前記第１のグラフィックスコンテキストの実行を保留する（２０２）ことと、前記プロセッサで実行するための第２のグラフィックスコンテキスト（１０３）をスケジューリングすることと、を含む、
方法。
【請求項２】
前記第１のフリップリクエストが完了したことに応じて、前記第１の記憶位置に第２の値を記憶することを含む、請求項１の方法。
【請求項３】
前記第２の値が前記第１の記憶位置に記憶されているのを識別したことに応じて、前記第１のグラフィックスコンテキストの実行を再開すること（３０４）を含む、請求項２の方法。
【請求項４】
ディスプレイデバイスの同期信号に応じて、前記第２の値が前記第１の記憶位置に記憶されているのを識別すること（３０３）を含む、請求項３の方法。
【請求項５】
表示のための使用を待機している第２のフレームバッファ（２２２）の内容の変更に関連する前記第２のグラフィックスコンテキストに基づいて、ペンディング状態の複数のグラフィックスコンテキストから前記第２のグラフィックスコンテキストを選択することを含む、請求項２の方法。
【請求項６】
前記プロセッサでの第２のフリップリクエストを前記第２のグラフィックスコンテキストから受信したことに応じて、前記第２のグラフィックスコンテキストが、表示のための使用を待機している間に、前記第２のフレームバッファにおけるデータの変更に関連していることに応じて、前記第２のグラフィックスコンテキストの実行を維持することを含む、請求項５の方法。
【請求項７】
表示のためにディスプレイコントローラ（１１８）によって選択可能な複数のフレームバッファ（１１９）を備えるプロセッサ（１００）において、
前記複数のフレームバッファのレンダリングを要求する前記複数のグラフィックスコンテキストからのフリップリクエストと、前記複数のフレームバッファのうち何れのフレームバッファが表示のために前記ディスプレイコントローラによって選択されたかを示す、記憶された値（１１１）と、に基づいて、複数のグラフィックスコンテキスト（１０２，１０３，１０４）の実行をスケジューリングすることを含む、
方法。
【請求項８】
前記実行をスケジューリングすることは、
前記ディスプレイコントローラによる表示のために選択されたと前記記憶された値によって示された第１のフレームバッファの変更を、前記複数のグラフィックスコンテキストのうち第１のグラフィックスコンテキスト（１０２）が要求したことに応じて、前記第１のグラフィックスコンテキストの実行を保留すること（２０２）を含む、請求項７の方法。
【請求項９】
前記実行をスケジューリングすることは、
前記第１のグラフィックスコンテキストの実行が保留されたことと、前記複数のグラフィックスコンテキストのうち第２のグラフィックスコンテキスト（１０３）が、前記ディスプレイコントローラによる表示のために選択されていないと前記記憶された値によって示された第２のフレームバッファの変更に関連していることと、に応じて、前記第２のグラフィックスコンテキストを実行すること（２０２）を含む、請求項８の方法。
【請求項１０】
第１のフレームバッファ（２２１）を含む複数のフレームバッファ（１１９）と、
グラフィックスパイプライン（１１０）と、
第１の記憶位置（１１１）を含む複数の記憶位置と、
第１のフリップリクエストに応じて前記第１のフレームバッファにおいてデータをレンダリングするディスプレイコントローラ（１１８）と、
スケジューラ（１０５）と、を備え、
前記スケジューラは、
前記グラフィックスパイプラインにおいて実行される第１のグラフィックスコンテキスト（１０２）が、前記第１のフレームバッファの内容を変更する要求を示すことに応じて、
前記第１のグラフィックスコンテキストの実行を保留すること（２０２）と、
前記第１の記憶位置に、前記第１のグラフィックスコンテキストが保留されたことを示す値を記憶することと、
前記グラフィックスパイプラインで実行される第２のグラフィックスコンテキスト（１０３）をスケジューリングすること（２０２）と、を行う、
プロセッサ。
【請求項１１】
前記スケジューラは、前記第１のフリップリクエストが完了したことに応じて、前記第１の記憶位置に第２の値を記憶する、請求項１０のプロセッサ。
【請求項１２】
前記スケジューラは、前記第２の値が前記第１の記憶位置に記憶されているのを識別したことに応じて、前記グラフィックスパイプラインで実行を再開するために前記第１のグラフィックスコンテキストをスケジューリングする（３０４）、請求項１１のプロセッサ。
【請求項１３】
前記スケジューラは、前記ディスプレイコントローラからの同期信号に応じて、前記第１の記憶位置に前記第２の値が記憶されていることを識別する（３０３）、請求項１２のプロセッサ。
【請求項１４】
前記スケジューラは、表示のための使用を待機している前記複数のフリップキューのうち第２のフレームバッファの内容の変更に関連する前記第２のグラフィックスコンテキストに基づいて、ペンディング状態の複数のグラフィックスコンテキストから前記第２のグラフィックスコンテキストを選択する、請求項１１のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１５年１２月１８日に出願された米国特許出願第１４／９７４，５８５号の利益を主張し、この内容は、参照することによって本明細書に組み込まれる。
【０００２】
本発明は、概してプロセッサに関し、より詳細には、プロセッサにおけるグラフィックスコンテキストのスケジューリングに関する。
【背景技術】
【０００３】
プロセッサは、処理効率を向上させるために、専用のグラフィックスパイプラインを使用して、ディスプレイデバイスで表示するためのデータを生成する。プロセッサは、専用のグラフィックスパイプラインを使用することにより、その中央処理ユニットから表示データの生成及び管理のタスクを取り除き、このユニットが、システム管理と、ユーザが開始したアプリケーションの実行とに関する動作を行うことを可能にしている。プロセッサは、これらの操作に基づいて、様々なグラフィックスコンテキストを生成する。各グラフィックスコンテキストは、グラフィックスコンテキストに関連する１つ以上のオブジェクトを表示するために、グラフィックスパイプラインによって使用される命令及び状態データを表している。
【０００４】
グラフィックスコンテキストは、グラフィックスパイプラインでの実行中、表示されたフレームバッファを変更するために、フリップリクエストと呼ばれる要求を生成する場合がある。場合によっては、バッファの内容を変更するコマンドの実行は、ディスプレイハードウェアが要求を実行する準備が整うまで遅らせる必要がある。たとえば、フリップリクエストの対象となるフレームバッファは、フレームバッファの内容を変更するコマンドが生成されたときに使用されているため、当該コマンドの即時実行によってティアリングしたり、他の表示エラーが生じる可能性がある。これらのエラーを防止するために、グラフィックスパイプラインにおける動作の実行は、フレームバッファがコマンドを実行するために利用可能になるまで停止されるが、かかる遅延は、処理効率に悪影響を与える可能性がある。
【０００５】
本発明は、添付の図面を参照することによって、よりよく理解され、その多くの特徴及び利点が当業者には明らかとなるであろう。異なる図において同じ参照符号を使用することは、類似又は同一のアイテムを示している。
【図面の簡単な説明】
【０００６】
【図１】いくつかの実施形態による、フリップキューの管理に基づいて、グラフィックスパイプラインにおけるグラフィックスコンテキストの実行をスケジューリングするプロセッサのブロック図である。
【図２】いくつかの実施形態による、フレームバッファの利用可能性に基づいて、図１のプロセッサにおけるグラフィックスコンテキストのスケジューリングを示すブロック図である。
【図３】いくつかの実施形態による、以前に利用不可能であったフレームバッファが利用可能になることに基づいて、図１のプロセッサにおけるグラフィックスコンテキストの実行の再開を示すブロック図である。
【図４】いくつかの実施形態による、フリップキューの管理に基づいて、実行用のグラフィックスコンテキストをスケジューリングする、図１のプロセッサのスケジューラのブロック図である。
【図５】いくつかの実施形態による、フレームバッファの利用可能性に基づいて、プロセッサで実行されるグラフィックスコンテキストのスケジューリングの方法を示すフロー図である。
【図６】いくつかの実施形態による、フレームバッファが利用可能になることに基づいて、グラフィックスコンテキストを実行可能状態に配置する方法のフロー図である。
【発明を実施するための形態】
【０００７】
図１〜図６は、フリップキューの管理に基づいて、プロセッサにおけるグラフィックスコンテキストの実行をスケジューリングするための技術を示す図である。プロセッサは、複数のペンディング状態のグラフィックスコンテキストのうち何れのグラフィックスコンテキストが、プロセッサのグラフィックスパイプラインにおける実行のために選択されるかを管理するスケジューラを含む。また、プロセッサは、ディスプレイデバイスにレンダリングされるデータを記憶するフレームバッファのセットと、フレームバッファのセットにおいてデータを変更するためにフリップリクエストを記憶する複数のフリップキューと、を含む。スケジューラは、実行中のグラフィックスコンテキストによって発行されたコマンドが、前のフリップリクエストのために、ディスプレイデバイスでのレンダリングに使用されるフレームバッファをターゲットとしていると判定したことに応じて、グラフィックスパイプラインにおける実行について異なるグラフィックスコンテキストをスケジューリングするように、コンテキストの切り替えを実行する。これにより、スケジューラは、グラフィックスパイプラインでの動作がフリップリクエストの結果として停止しないようにして、処理効率を向上させる。
【０００８】
図１は、いくつかの実施形態による、１つ以上のフレームバッファの利用可能性に基づいて、複数のペンディング状態のグラフィックスコンテキストの実行をスケジューリングすることの可能なプロセッサ１００を示す図である。プロセッサ１００は、概して、電子デバイスに代わって動作を実行するために、１つ以上のコンピュータプログラムの形態で構成された命令のセットを実行するように構成されたデバイスである。したがって、プロセッサ１００は、デスクトップコンピュータ、ラップトップ、サーバ、ゲームコンソール、タブレット、スマートフォン等の任意の他の様々な電子デバイスに含まれ得る。ユーザとのやり取りを容易にするために、プロセッサ１００は、有線又は無線プロトコルを介して、ディスプレイスクリーン等のディスプレイデバイス（図１では省略）に接続することができる。
【０００９】
ディスプレイデバイスでの情報の表示をサポートするために、プロセッサ１００は、グラフィックスパイプライン１１０と、スケジューラ１０５と、フリップキュー１１５，１１６，１１７と、ディスプレイコントローラ１１８と、を含む。本明細書でさらに記載するように、プロセッサ１００のこれらの機能は、概して、ディスプレイデバイスに情報を表示するために、グラフィックスコンテキスト（例えば、グラフィックスコンテキスト１０２，１０３，１０４）の管理及び実行をサポートするように構成されている。本明細書で使用されるグラフィックスコンテキストは、表示されるオブジェクトに対応する命令のセット及び関連する状態の情報に関する。したがって、グラフィックスコンテキストは、ウィンドウ、アイコン、デスクトップの背景、グラフィックオブジェクト（例えば、スプライトや、コンピュータゲームに表示される他のオブジェクト）等のように、コンピュータデバイスによって表示することの可能な任意のオブジェクトに関連付けることができる。よって、例えば、コンピュータウィンドウに対応するグラフィックスコンテキストは、ウィンドウサイズ、タイトル、メニューアイテム、ボタン等のグラフィックスコンテキストに含まれる状態の情報に基づいて、ウィンドウを表示するためのデータを生成する命令を含む。
【００１０】
説明のために、グラフィックスコンテキストは、プロセッサ１００のＣＰＵ（図示省略）によって実行される１つ以上のコンピュータプログラムによって生成されると想定する。例えば、ＣＰＵによって実行されるアプリケーションプログラムは、アプリケーションプログラムによって情報を表示するための１つ以上のウィンドウに対応するグラフィックスコンテキストを生成することができる。
【００１１】
スケジューラ１０５は、概して、グラフィックスパイプライン１１０における実行に関するグラフィックスコンテキストをスケジューリングするように構成されたハードウェアモジュールである。例示のために、いくつかの実施形態では、ＣＰＵは、ディスプレイデバイスで同時に表示するために、グラフィックスコンテキスト１０２〜１０４として示される複数のグラフィックスコンテキストを生成することができる。これらの複数のグラフィックスコンテキストは、これらがグラフィックスパイプライン１１０で実行する準備ができていることを反映するために、「ペンディング状態（pending）」のグラフィックスコンテキストと呼ばれる。ペンディング状態のグラフィックスコンテキストは、対応する表示オブジェクトの変化を反映するように、ＣＰＵ又はプロセッサ１００の他のモジュールによって経時的に変化させることができる。例えば、ウィンドウオブジェクトに対応するグラフィックスコンテキストは、ウィンドウデータがディスプレイ上で更新されることを示す入力情報をユーザが提供したことに応じて、ＣＰＵによって更新され得る。ＣＰＵは、グラフィックスコンテキストを更新して、ウィンドウデータの更新を反映し、新たな又は異なる実行命令を含むグラフィックスコンテキストをもたらす。いくつかの実施形態では、グラフィックスコンテキストは、ＣＰＵが、例えばユーザによってウィンドウが閉じられたことを示すアクション等のように、対応するオブジェクトがもはや表示されないことを示すアクションを識別するまで、ペンディング状態のままである。
【００１２】
ペンディング状態のグラフィックスコンテキストの各々は、所与の時点においては、実行可能状態及び実行不可能状態と呼ばれる少なくとも２つの異なる状態の１つであり、グラフィックスコンテキストが、グラフィックスパイプライン１１０での実行のためにスケジューリングされるように利用可能であるか否かを反映している。グラフィックスコンテキストの状態は、グラフィックスパイプライン１１０においてグラフィックスコンテキストのスケジューリングを効率的に管理するために、グラフィックスパイプライン１１０、スケジューラ１０５、ＣＰＵ、又は、プロセッサ１００の別のモジュールによって、実行可能状態から実行不可能状態又はその逆に変化させることができる。例えば、本明細書でさらに説明するように、スケジューラ１０５は、グラフィックスコンテキストを実行するのに必要とされる特定のリソース（例えば、フリップキュー等）が一時的に利用不可能であると判定したことに応じて、実行するグラフィックスコンテキストの状態を、実行可能状態から実行不可能状態に変化させることができる。スケジューラ１０５は、リソースが利用可能になると、グラフィックスコンテキストの状態を、実行不可能状態から実行可能状態に変更し、これにより、グラフィックスコンテキストの実行を再開することができる。
【００１３】
スケジューラ１０５は、特定のスケジューリングスキームと、プロセッサ１００で検出された状況との組み合わせに基づいて、実行可能状態にあるペンディング状態のグラフィックスコンテキストをスケジューリングする。例示のために、いくつかの実施形態では、スケジューラ１０５は、グラフィックスパイプライン１１０における状況と、プロセッサ１００の他のモジュールにおける状況と、を検出する１つ以上のモジュールを含む。スケジューラ１０５は、これらの検出された状況に基づいて、グラフィックスパイプライン１１０で実行されるペンディング状態の１つのグラフィックスコンテキストを選択する。検出された状況が、２つ以上のペンディング状態のグラフィックスコンテキストを実行のために選択され得ることを示す場合に、スケジューラ１０５は、ラウンドロビン方式等の特定の選択スキームに基づいて、コンテキストの中から選択することができる。例えば、スケジューラ１０５は、実行可能なグラフィックスコンテキストの各々に対して、実行のための特定の持続時間の一部の時間を割り当て、割り当てられた一部の時間の間に、実行可能なグラフィックスコンテキストの各々を実行することができる。スケジューラ１０５は、検出された状況に基づいてペンディング状態のコンテキストの中から選択することによって、プロセッサ１００における処理効率を向上させることができる。
【００１４】
グラフィックスパイプライン１１０は、概して、スケジューリングされたグラフィックスコンテキストの命令を実行するように構成されたステージのセットである。したがって、いくつかの実施形態では、グラフィックスパイプライン１１０は、フェッチステージと、ディスパッチステージと、１つ以上の実行ステージと、リタイアメントステージと、を含む。グラフィックスパイプライン１１０は、異なるグラフィックスコンテキストを実行する（「コンテキストスイッチ」と呼ばれる）ためのスケジューラ１０５からの要求に応じて、現在実行中のグラフィックスコンテキストの状態情報を保存し、要求されたグラフィックスコンテキストの保存された状態情報をロードし、次いで、スケジューラ１０５が別のコンテキストスイッチ要求を発行するまで、要求されたグラフィックスコンテキストの命令のフェッチ、ディスパッチ、実行及びリタイアを開始することができる。
【００１５】
グラフィックスパイプライン１１０は、命令を実行する過程において、ディスプレイデバイスに表示されるデータを変更する要求を生成する。例示のために、プロセッサ１００は、ディスプレイデバイスでの表示のためにデータを変更又はフリップするように要求するフリップキュー１１５，１１６，１１７を含む。いくつかの実施形態では、グラフィックスコンテキスト１０２〜１０４の各々は、フリップキュー１１５〜１１７の異なる１つに割り当てられている。したがって、例えば、グラフィックスコンテキスト１０２をフリップキュー１１５に割り当てることができ、グラフィックスコンテキスト１０３をフリップキュー１１６に割り当てることができ、グラフィックスコンテキスト１０４をフリップキュー１１７に割り当てることができる。いくつかの実施形態では、１つのグラフィックスコンテキストを複数のフリップキューに割り当てることができるが、各フリップキューは、１つのグラフィックスコンテキストにのみ関連付けられる。表示用のデータを変更するには、グラフィックスコンテキストがフリップリクエストをそのキューに発行する。
【００１６】
ディスプレイコントローラ１１８は、概して、フリップキュー１１５〜１１７からのフリップリクエストを読み出し、フリップリクエストに基づいて、ディスプレイデバイスのレンダリング用のデータを変更するように構成されたハードウェアモジュールである。例示のために、ディスプレイコントローラ１１８は、フレームバッファ１１９と接続されている。フレームバッファ１１９の各々は、ディスプレイデバイスでレンダリングされるデータを記憶する。個々のフレームバッファ１１９に記憶されたデータは、「フレーム」と呼ばれる。ディスプレイコントローラ１１８は、ディスプレイのスループットを向上させるために、例えばディスプレイデバイスの垂直同期間隔等の同期間隔の間にフレームバッファを変更して、フレームバッファ１１９を介して対応するフレームを順次表示させる。これにより、以下に説明するように、レンダリングされていないフレームがコマンドによって変更され、ディスプレイコントローラのスループットが向上する。例示のために、いくつかの実施形態では、フレームバッファ１１９は、バッファＡ、バッファＢ及びバッファＣとそれぞれ示された３つの異なるフレームバッファを含む。ディスプレイコントローラ１１８は、最初に、バッファＡのフレームをレンダリングし、その間に、バッファＢ及びバッファＣの各々のフレームを、視覚的なディスプレイエラーを生じることなく変更することができる。グラフィックスコンテキストからのフリップリクエストに応じて、ディスプレイデバイスの垂直同期期間によって示されるようにバッファＡのレンダリングが完了すると、ディスプレイコントローラ１１８は、バッファＢに記憶されたフレームをレンダリングし、バッファＡ及びバッファＣのフレームを変更することができる。ディスプレイコントローラ１１８は、バッファＢのフレームをレンダリングした後に、グラフィックスコンテキストからの別のフリップリクエストに応じて、バッファＣのフレームをレンダリングする。さらに別のフリップリクエストに応じてバッファＣのフレームが完了すると、ディスプレイコントローラ１１８は、バッファＡに戻る。したがって、ディスプレイコントローラ１１８は、グラフィックスコンテキストを実行することによって発行されたフリップリクエストに基づいて、各フレームバッファを進む。
【００１７】
上述したように、フリップキュー１１５〜１１７に記憶された各フリップリクエストは、フレームバッファ１１９の１つに切り替える要求を表している。したがって、各フリップリクエストは、フリップリクエストによってターゲットとされるフレームバッファのインジケータを含む。いくつかの実施形態では、フリップキュー１１５〜１１７は、集合的に、ディスプレイデバイスをターゲットとする複数のフリップリクエストを含んでもよい。ディスプレイコントローラ１１８は、要求された変更を調整し、ターゲットとされたディスプレイデバイスの複数のフレームバッファから合成フレームを構成するための合成器を含むことができる。
【００１８】
上述したように、ディスプレイコントローラ１１８は、フレームバッファ１１９からのフレームをレンダリングする。フレームバッファがレンダリングされている間に当該フレームバッファが変更されると、例えば、ティアリング、ゴースト又は他の視覚的エラー等の視覚的エラーがディスプレイに生じることになる。したがって、ディスプレイコントローラ１１８は、ディスプレイデバイスでレンダリングされているフレームバッファの変更を防止する。議論の目的のために、レンダリングのためにデータを提供するプロセスにあるフレームバッファは、利用不可能と呼ばれる。ディスプレイデバイスでのレンダリングのためにデータを提供するプロセスにないフレームバッファは、利用可能と呼ばれ、その記憶されたデータは、表示用の使用を待機していると呼ばれる。
【００１９】
レンダリング中のフレームバッファのフレームデータを変更すると、ティアリング又は他の表示エラーが生じる可能性がある。かかるエラーを防止するために、ディスプレイコントローラ１１８は、データが、ディスプレイデバイスでのレンダリングのためにデータが提供されるフリップキューの変更を防止する。例えば、いくつかの実施形態では、グラフィックスコンテキストからのフリップリクエストを開始したことに応じて、フレームバッファに関連付けられたステータスレジスタ１１１に特定の値が書き込まれる。ディスプレイコントローラは、レンダリングのためのフレームバッファからのデータの取り出しが完了すると、この値をステータスレジスタ１１１から消去する。グラフィックスパイプライン１１０は、フレームバッファ内のデータを更新する前に、当該フレームバッファに関するステータスレジスタをチェックする。グラフィックスパイプライン１１０は、ステータスレジスタが特定の値を記憶している場合、フレームバッファ内のデータの更新を停止して保留する。
【００２０】
スケジューラ１０５は、プロセッサ１００の性能に対するこのような停止の影響を低減するために、フリップリクエストによってターゲットとされるフレームバッファの利用可能性に基づいて、グラフィックスコンテキスト１０２〜１０４の実行をスケジューリングすることができる。例示すると、スケジューラ１０５は、フレームバッファでデータを変更するように要求するコマンドについてグラフィックスパイプライン１１０を監視し、何れのフレームバッファ１１９が利用可能であるかを同時に監視する。スケジューラ１０５は、データを変更するように要求するコマンドが利用不可能なフレームバッファをターゲットとし、これにより、対応するグラフィックスコンテキストを停止させることを識別したことに応じて、グラフィックスパイプライン１１０で実行するための異なるグラフィックスコンテキストを選択する。スケジューラ１０５は、フレームバッファがレンダリングを完了すると、直ちに又は都合のよい後の時点で、以前にスケジューリングされたグラフィックスコンテキストの実行を再開することができる。
【００２１】
スケジューラ１０５は、フレームバッファ１１９の利用可能性に基づいてグラフィックスコンテキストの実行をスケジューリングすることで、１つのグラフィックスコンテキストに関する停止が全てのペンディング状態のグラフィックスコンテキストの停止を生じないことを確実にすることによって、プロセッサの性能を向上させることができる。例示すると、従来のプロセッサでは、レンダリング中のフレームバッファでデータを変更するように要求するコマンドは、コマンドを発行したグラフィックスコンテキストの実行を停止させる。プロセッサは、フレームバッファのレンダリングが完了するまで待機し、次に、停止したグラフィックスコンテキストの実行を再開する。フレームバッファが利用可能になるのをプロセッサが待つ間、他の全てのペンディング状態のグラフィックスコンテキストも停止する。本明細書で説明する技術を使用することによって、スケジューラ１０５は、レンダリング中のフレームバッファを変更するように要求するコマンドをグラフィックスコンテキストが発行したことに応じて、実行のために異なるグラフィックスコンテキストをスケジューリングする。これにより、１つ以上のグラフィックスコンテキストがフレームバッファの利用可能性を待機している間に、グラフィックスパイプライン１１０が有用な作業を行うことが可能になる。
【００２２】
図２は、いくつかの実施形態による、フレームバッファの利用可能性に基づいて、グラフィックスパイプライン１１０でグラフィックスコンテキストをスケジューリングする図１のスケジューラ１０５の一例を示す図である。図示した例では、時間２０１において、グラフィックスコンテキスト１０２がグラフィックスパイプライン１１０で実行されている間、グラフィックスコンテキスト１０３は、ペンディング状態であり実行を待機している。また、図示した例では、ディスプレイコントローラ１１８は、３つのフレームバッファ、すなわち、所定のフレームバッファ２２１と、フレームバッファ２２２と、フレームバッファ２２３とを含む。フレームバッファ２２１は、レンダリング中の所定のフレームを記憶しており、これにより、フレームバッファ２２１は利用不可能である。フレームバッファ２２２及びフレームバッファ２２３の両方は利用可能である。
【００２３】
時間２０１において、グラフィックスコンテキスト１０３は、その次のコマンドがフレームバッファ２２１内のデータを更新するコマンドであることを識別する。グラフィックスコンテキスト１０３は、データの更新を行う前に、先ず、フレームバッファ２２１が利用可能であるか否かをチェックする。これに応じて、スケジューラ１０５は、フレームバッファ２２１がディスプレイコントローラによってレンダリングされているため、ターゲットとなるフレームバッファ２２１が利用不可能であることを識別する。したがって、時間２０２において、スケジューラ１０５は、グラフィックスコンテキスト１０２の実行を保留し、グラフィックスコンテキスト１０３の実行をスケジューリングすることによってコンテキストの切り替えを実行する。よって、グラフィックスパイプライン１１０は、グラフィックスコンテキスト１０２がフレームバッファ２２１の利用可能性を待機している間、グラフィックスコンテキスト１０３を実行し、プロセッサ１００における処理効率を向上させる。いくつかの実施形態では、スケジューラ１０５は、コンテキストの切り替えのオーバーヘッドを回避するためにフレームバッファが直後に利用可能になった場合に、待機しているグラフィックスコンテキストが停止したままにされ保留されないようにするタイムアウト期間を採用することができる。
【００２４】
図３は、いくつかの実施形態による、グラフィックスパイプライン１１０において以前に保留されたグラフィックスコンテキストの実行を再開するスケジューラ１０５の一例を示す図である。図３の例は、図２の例の続きであり、グラフィックスコンテキスト１０３は、フレームバッファ２２１がグラフィックスコンテキスト１０２による更新に利用不可能であるため、グラフィックスコンテキスト１０２の実行が保留されたことに応じて、グラフィックスパイプライン１１０での実行のためにスケジューリングされている。図２の時間２０２の後に生じる時間３０３では、スケジューラ１０５は、ディスプレイコントローラ１１８から同期信号を受信する。これに応じて、グラフィックスパイプライン１１０は、ステータスレジスタ１１１をチェックし、そこに記憶された値に基づいて、フレームバッファ２２１におけるフレームデータのレンダリングが完了したことを判定する。したがって、時間３０４において、スケジューラ１０５は、グラフィックスコンテキスト１０３の実行を保留してグラフィックスコンテキスト１０２の実行を再開するために、コンテキストの切り替えを実行する。いくつかの実施形態では、スケジューラ１０５は、同期信号に応じてステータスレジスタを直ちにチェックするのではなく、より都合のよい時間か有効な時間を待っている。この時間は、例えば、グラフィックスコンテキスト１０３が、利用不可能なフレームバッファ上で停止しているときや、そうでなければ、プロセッサ１００の別のモジュールからの応答を待機しているポイントに達しているとき等である。
【００２５】
図４は、いくつかの実施形態による、スケジューラ１０５の一例のブロック図である。図示した例では、スケジューラ１０５は、スケジュールコントローラ４２０と、実行不可能コンテキストトークンストア４２５と、実行可能コンテキストトークンストア４２６と、を含む。実行不可能コンテキストトークンストア４２５は、例えば、実行不可能な状態にある、実行に関してペンディング状態のコンテキストの識別値（例えば、トークン４２８）を記憶するレジスタのセット等の記憶構造である。いくつかの実施形態では、ＣＰＵがコンテキストを生成する場合、当該ＣＰＵは、他のペンディング状態のグラフィックスコンテキストのトークン値とは異なるコンテキスト用のトークン値も生成する。ＣＰＵは、トークン値をスケジューラ１０５に提供する。スケジューラ１０５は、コンテキストの切り替え及び他の管理操作のためのグラフィックスコンテキストを識別するために、トークン値を使用する。
【００２６】
実行可能コンテキストストア４２６は、例えば、実行可能な状態にあるコンテキストのトークン値（例えば、トークン４２９）を記憶するレジスタのセット等の記憶構造である。実行不可能コンテキストストア４２５に記憶された値と、実行可能コンテキストストア４２６に記憶された値とは、グラフィックスコンテキストの実行可能な状態を変更するように、スケジューラ１０５又は別のモジュールによって更新することができる。例えば、スケジューラ１０５は、グラフィックスコンテキストが実行可能な状態にあることを示すために、グラフィックスコンテキストのトークン値を、実行可能コンテキストストア４２６に書き込むことができる。スケジューラ１０５は、（例えば、コンテキストが、レンダリング中のフリップキューに対するフリップリクエストを発行したために）グラフィックスコンテキストが実行可能でないと判定したことに応じて、グラフィックスコンテキストのトークン値を、実行可能コンテキストストア４２６から消去して、実行不可能コンテキストストア４２５に書き込む。このプロセスは、グラフィックスコンテキストの状態を実行不可能状態から実行可能状態に変更するように、逆に行うことができる。
【００２７】
スケジュールコントローラ４２０は、コンテキストの切り替えの状況を識別し、そのような状況を識別したことに応じて、コンテキストの切り替えの要求をグラフィックスパイプライン１１０に発行するように構成されたモジュールである。スケジュールコントローラ４２０は、動作中、レンダリング処理中のフレームバッファに対してフリップリクエストが発行されたとのディスプレイコントローラ１１８からの通知を受信したことに応じて、実行されているグラフィックスコンテキストのコンテキストトークン値を実行可能コンテキストストア４２６から消去して、当該グラフィックスコンテキストが停止し、これにより実行可能ではないことを示す。次に、スケジュールコントローラは、実行可能なコンテキストトークン値ストア４２６から別のトークン値を選択する。いくつかの実施形態では、トークン値は、トークン値に関連付けられた優先度の値に基づいて、プロセッサ１００における１つ以上の検出された状況に基づいて、例えばＦＩＦＯ順やラウンドロビン順等の定義された選択順序に基づいて、選択される。スケジュールコントローラ４２０は、選択されたトークン値、又は、選択されたトークン値に関連する値（例えば、実行されるグラフィックスコンテキストの次の命令を示す命令ポインタ値等）をグラフィックスパイプライン１１０に提供する。次いで、グラフィックスパイプライン１１０は、選択されたトークン値に対応するグラフィックスコンテキストの実行を開始又は再開する。
【００２８】
また、スケジュールコントローラ４２０は、フレームバッファでのフレームのレンダリングが完了したとの通知をディスプレイコントローラ１１８から受信することができる。スケジュールコントローラ４２０は、この通知に応じて、フレームバッファの利用可能性を待機しているグラフィックスコンテキストのトークン値を識別することができる。次に、スケジュールコントローラ４２０は、これらのトークン値を実行可能コンテキストストア４２６に転送し、これにより、スレッドに対応するグラフィックスコンテキストが次のコンテキストの切り替えでの選択に利用できるようにする。いくつかの実施形態では、ディスプレイコントローラ１１８からの通知自体が、スケジュールコントローラ４２０によるコンテキストの切り替えをトリガすることができる。
【００２９】
図５は、いくつかの実施形態による、フリップキューの利用可能性に基づいて、グラフィックスパイプラインでグラフィックスコンテキストをスケジューリングする方法５００のブロック図である。説明の目的のために、方法５００は、図１のプロセッサ１００における例示的な実施態様に関して説明する。ブロック５０２において、グラフィックスパイプライン１１０で実行されるグラフィックスコンテキストは、フレームバッファに記憶されたデータの少なくとも一部を変更するように要求する。ブロック５０４において、スケジューラ１０５及びグラフィックスパイプライン１１０は、フリップリクエストによってターゲットとされるフレームバッファが利用可能であるか否かを判定する。すなわち、スケジューラ１０５は、ターゲットとなるフレームバッファがディスプレイコントローラ１１８によるレンダリングのために使用されるプロセスにあり、したがって、利用可能ではないか否かを判定する。
【００３０】
フリップリクエストによってターゲットとされたフレームバッファが利用可能である場合には本方法のフローがブロック５０８に移行し、グラフィックスパイプライン１１０は、ターゲットとされたフレームバッファでデータ更新要求を実行する。ブロック５０４に戻ると、データ更新要求の対象となるフレームバッファが利用可能でない場合には本方法のフローがブロック５０６に移行し、スケジューラ１０５は、コンテキストの切り替えを実行する。具体的には、スケジューラ１０５は、現在実行中のグラフィックスコンテキストを実行不可能状態にし、現在実行可能状態にあるグラフィックスコンテキストのセットから異なるグラフィックスコンテキストを選択する。次に、スケジューラ１０５は、グラフィックスパイプライン１１０に対して、コンテキストの切り替え要求を発行する。これに応じて、グラフィックスパイプライン１１０は、グラフィックスコンテキストが後で再開できるように、現在実行中のグラフィックスコンテキストの状態の情報を保存し、選択されたグラフィックスコンテキストの以前に保存された状態の情報をロードし、選択されたグラフィックスコンテキストの命令の実行に移行する。
【００３１】
図６は、いくつかの実施形態による、フリップリクエストに基づいて、以前に保留されたグラフィックスコンテキストの実行を再開する方法６００のフロー図である。説明の目的のために、方法６００は、図１のプロセッサ１００における例示的な実施態様に関して説明する。ブロック６０２において、スケジューラ１０５は、垂直同期信号又は水平同期信号等のディスプレイデバイスにおける同期信号の通知を受信する。同期信号は、フレームバッファが利用可能になったか否かを判定するためにグラフィックスコンテキストのステータスレジスタをチェックするのに適切な時間を示す。ブロック６０４において、スケジューラ１０５は、新たに利用可能なフレームバッファをターゲットとするフリップリクエストのために、実行不可能状態に置かれた、実行不可能状態のグラフィックスコンテキストを識別する。すなわち、スケジューラ１０５は、フリップキューが利用可能になるのを待機していたグラフィックスコンテキストを識別する。ブロック６０６において、スケジューラ１０５は、識別されたグラフィックスコンテキストを実行可能状態にする。ブロック６０８において、スケジューラ１０５は、次のコンテキストの切り替えに応じて、実行可能状態にあるグラフィックスコンテキストの中からブロック６０６で実行可能状態に置かれたグラフィックスコンテキストを選択し、選択されたグラフィックスコンテキストがフリップリクエストを完了して実行を再開するのを可能にする。
【００３２】
いくつかの実施形態では、上述したデバイス及び技術は、図１〜図６を参照して上述したプロセッサ等の１つ以上の集積回路（ＩＣ）デバイス（集積回路パッケージ又はマイクロチップとも呼ばれる）を備えるシステムにおいて実装される。電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールを用いて、これらのＩＣデバイスの設計及び製造を行うことができる。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、１つ以上のＩＣデバイスの回路を表すコード上で動作するようにコンピュータシステムを操作するコンピュータシステムによって実行可能なコードを備え、これにより、回路を製造するように製造システムを設計又は適合させるプロセスの少なくとも一部を実行するようになっている。このコードは、命令、データ、又は、命令とデータとの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピュータシステムにアクセス可能なコンピュータ可読記憶媒体に記憶されている。同様に、ＩＣデバイスの設計又は製造の１つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されアクセスされてもよい。
【００３３】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供するように、使用中にコンピュータシステムによってアクセス可能な任意の記憶媒体又は記憶媒体の組み合わせを含むことができる。かかる記憶媒体には、限定はしないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタルビデオディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ、磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）若しくはキャッシュ）、不揮発性メモリ（例えば、リードオンリメモリ（ＲＯＭ）若しくはフラッシュメモリ）、又は、微少電気機械システム（ＭＥＭＳ）ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステム（例えば、システムＲＡＭ又はＲＯＭ）に組み込まれてもよいし、コンピュータシステム（例えば、磁気ハードドライブ）に固定的に取り付けられてもよいし、コンピュータシステム（例えば、光ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）に着脱可能に取り付けられてもよいし、有線又は無線のネットワークを介してコンピュータシステム（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））に接続されてもよい。
【００３４】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、有形に実装された１つ以上の実行可能命令のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行された場合に、１つ以上のプロセッサを操作して、上述した技術の１つ以上の態様を実行する命令又は特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、又は、他の不揮発性メモリデバイス等の固体記憶デバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって読み取られ若しくは実行可能な他の命令フォーマットであってもよい。
【００３５】
全体的な記載において、上述した動作又は要素の全てが必要であるとは限らず、特定の動作又はデバイスの一部が必要でなくてもよいこと、及び、上述したものに加えて、１つ以上のさらなる動作が実行されてもよいこと、１つ以上のさらなる要素が含まれてもよいことに留意されたい。さらに、動作を列挙した順番は、必ずしもこれらの動作が実行される順番ではない。また、これらの概念は、特定の実施形態に言及して説明されている。しかし、当業者であれば、添付の特許請求の範囲に記載された本発明の範囲を逸脱することなく、様々な修正及び変更を行うことができることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味として解釈され、かかる変更の全ては、本発明の範囲内に含まれることが意図されている。
【００３６】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある機能は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な機能と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【図１】
2019505864.tif 000003
【図２】
2019505864.tif 000004
【図３】
2019505864.tif 000005
【図４】
2019505864.tif 000006
【図５】
2019505864.tif 000007
【図６】
2019505864.tif 000008
【国際調査報告】
2019505864.tif 000009
2019505864.tif 000010