(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-07
(45)【発行日】2024-03-15
(54)【発明の名称】低レイテンシ組成器
(51)【国際特許分類】
G09G 5/00 20060101AFI20240308BHJP
G09G 5/377 20060101ALI20240308BHJP
G09G 5/393 20060101ALI20240308BHJP
G09G 5/42 20060101ALI20240308BHJP
【FI】
G09G5/00 530M
G09G5/00 550A
G09G5/00 550P
G09G5/377 100
G09G5/393
G09G5/42 200
(21)【出願番号】P 2023547881
(86)(22)【出願日】2022-01-18
(86)【国際出願番号】 US2022070234
(87)【国際公開番号】W WO2022178471
(87)【国際公開日】2022-08-25
【審査請求日】2023-08-08
(32)【優先日】2021-02-16
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】595020643
【氏名又は名称】クゥアルコム・インコーポレイテッド
【氏名又は名称原語表記】QUALCOMM INCORPORATED
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】マルチャ、ディリープ
(72)【発明者】
【氏名】コッティリンガル、スディープ・ラビ
(72)【発明者】
【氏名】プラカビ、スリニバス
(72)【発明者】
【氏名】パテル、ダバル・カヌブハイ
(72)【発明者】
【氏名】ヌカラ、プラシャント
(72)【発明者】
【氏名】ガンジ、ナガマレスワララオ
(72)【発明者】
【氏名】アハメド、モハメド・ナシール
(72)【発明者】
【氏名】アイア、マヘシュ
(72)【発明者】
【氏名】トータ、カリアン
(72)【発明者】
【氏名】チャウハン、スシル
【審査官】中村 直行
(56)【参考文献】
【文献】米国特許出願公開第2018/0189922(US,A1)
【文献】米国特許出願公開第2019/0043249(US,A1)
【文献】国際公開第2021/000220(WO,A1)
【文献】特開2012-177958(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G09G 3/00 - 5/42
(57)【特許請求の範囲】
【請求項1】
フレームを生成するための方法であって、
ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することと、
前記第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることと、前記複数の層が第2のフレームに対応する、
前記第2のフレームの合成のために前記複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することと、
前記複数の層を処理するために前記DPUと前記GPUとを使用するという前記決定に基づいて、
前記DPUバッファから前記第1のフェンスをフェッチすること、および
第2のフェンスを生成することと、
前記複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することと、前記GPUプロセスが、前記第2のフェンスを生成することに応答して始動される、
前記第2のフレームを生成するために、前記複数の層のうちの残りの層と前記1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することと、前記DPUプロセスが、前記第1のフェンスをフェッチすることに応答して始動される、
前記1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することと、
前記第3のフェンスを受信することに応答して、
前記DPUプロセスによって、前記1つまたは複数の合成された層をフェッチすること、および
DPUプロセスによって、前記1つまたは複数の合成された層と前記残りの層とに基づいて、前記第2のフレームを生成することと、
前記第2のフレームを前記ハードウェア構成要素に提供することと
を備える、方法。
【請求項2】
前記GPUプロセスを始動することが、前記GPUプロセスより前に、前記1つまたは複数の層を合成するためのGPUパラメータを構成することを備え、前記DPUプロセスを始動することが、前記DPUプロセスより前に、前記複数の層のうちの前記残りの層と前記1つまたは複数の合成された層とを合成するためのDPUパラメータを構成することを備える、請求項1に記載の方法。
【請求項3】
前記第2のフェンスは、前記1つまたは複数の層を前記合成することが保留中である期間を指示する持続時間を備え、前記第3のフェンスが、前記期間を中断することと、前記1つまたは複数の層を前記合成することを始動することとを行うように構成された、請求項1に記載の方法。
【請求項4】
前記第2のフレームの合成のために前記複数の層を処理するために前記DPUと前記GPUの両方を使用することを決定することは、前記複数の層のうちのどれが前記複数の層の前記サブセットを形成するかを決定することをさらに備える、請求項1に記載の方法。
【請求項5】
前記第2のフレームを生成することが、
前記第2のフレームを前記DPUバッファに記憶することと、
前記DPUによる前記第2のフレームの解放を指示する第4のフェンスを設定することと
をさらに備える、請求項1に記載の方法。
【請求項6】
前記第1のフェンスが、前記DPUによる前記第1のフレームの解放を指示する、前記DPUによって設定されたメモリ値である、請求項1に記載の方法。
【請求項7】
前記第3のフェンスが、前記DPUプロセスを始動する間に受信される、請求項1に記載の方法。
【請求項8】
前記1つまたは複数の合成された層の完了を指示する前記第3のフェンスを受信することが、前記1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信することをさらに備え、前記1つまたは複数の合成された層をフェッチすることが、前記1つまたは複数のGPUバッファから前記1つまたは複数の合成された層をフェッチすることをさらに備える、請求項1に記載の方法。
【請求項9】
フレームを生成するために構成された装置であって、前記装置が、
メモリと、
前記メモリに結合されたプロセッサと
を備え、前記プロセッサおよび前記メモリは、
ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することと、
前記第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることと、前記複数の層が第2のフレームに対応する、
前記第2のフレームの合成のために前記複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することと、
前記複数の層を処理するために前記DPUと前記GPUとを使用するという前記決定に基づいて、
前記DPUバッファから前記第1のフェンスをフェッチすること、および
第2のフェンスを生成することと、
前記複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することと、前記GPUプロセスが、前記第2のフェンスを生成することに応答して始動される、
前記第2のフレームを生成するために、前記複数の層のうちの残りの層と前記1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することと、前記DPUプロセスが、前記第1のフェンスをフェッチすることに応答して始動される、
前記1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することと、
前記第3のフェンスを受信することに応答して、
前記DPUプロセスによって、前記1つまたは複数の合成された層をフェッチすること、および
DPUプロセスによって、前記1つまたは複数の合成された層と前記残りの層とに基づいて、前記第2のフレームを生成することと、
前記第2のフレームを前記ハードウェア構成要素に提供することと
を行うように構成された、装置。
【請求項10】
前記GPUプロセスを始動するように構成された、前記プロセッサおよび前記メモリが、前記GPUプロセスより前に、前記1つまたは複数の層を合成するためのGPUパラメータを決定するようにさらに構成され、
前記DPUプロセスを始動するように構成された、前記プロセッサおよび前記メモリが、前記DPUプロセスより前に、前記複数の層のうちの前記残りの層と前記1つまたは複数の合成された層とを合成するためのDPUパラメータを決定するようにさらに構成された、
請求項9に記載の装置。
【請求項11】
前記第2のフェンスは、前記1つまたは複数の層を前記合成することが保留中である期間を指示する持続時間を備え、前記第3のフェンスが、前記期間を中断することと、前記1つまたは複数の層を前記合成することを始動することとを行うように構成された、請求項9に記載の装置。
【請求項12】
前記第2のフレームの合成のために前記複数の層を処理するために前記DPUと前記GPUの両方を使用することを決定するように構成された、前記プロセッサおよび前記メモリは、前記複数の層のうちのどれが前記複数の層の前記サブセットを形成するかを決定するようにさらに構成された、請求項9に記載の装置。
【請求項13】
前記第2のフレームを生成するように構成された、前記プロセッサおよび前記メモリが、
前記第2のフレームを前記DPUバッファに記憶することと、
前記DPUによる前記第2のフレームの解放を指示する第4のフェンスを設定することと
を行うようにさらに構成された、請求項9に記載の装置。
【請求項14】
前記第1のフェンスが、前記DPUによる前記第1のフレームの解放を指示する、前記DPUによって設定されたメモリ値である、請求項9に記載の装置。
【請求項15】
前記第3のフェンスが、前記DPUプロセスを始動する間に受信される、請求項9に記載の装置。
【請求項16】
前記1つまたは複数の合成された層の完了を指示する前記第3のフェンスを受信するように構成された、前記プロセッサおよび前記メモリが、前記1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信するようにさらに構成され、
前記1つまたは複数の合成された層をフェッチするように構成された、前記プロセッサおよび前記メモリが、前記1つまたは複数のGPUバッファから前記1つまたは複数の合成された層をフェッチするようにさらに構成された、
請求項9に記載の装置。
【請求項17】
フレームを生成するための装置であって、前記装置は、
ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信するための手段と、
前記第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチするための手段と、前記複数の層が第2のフレームに対応する、
前記第2のフレームの合成のために前記複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定するための手段と、
前記複数の層を処理するために前記DPUと前記GPUとを使用するという前記決定に基づいて、前記DPUバッファから前記第1のフェンスをフェッチするための手段と、
前記複数の層を処理するために前記DPUと前記GPUとを使用するという前記決定に基づいて、第2のフェンスを生成するための手段と、
前記第2のフェンスを生成することに応答して、前記複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動するための手段と、
前記第2のフレームを生成するために、前記複数の層のうちの残りの層と前記1つまたは複数の合成された層とを合成するためのDPUプロセスを始動するための手段と、前記DPUプロセスが、前記第1のフェンスをフェッチすることに応答して始動される、
前記1つまたは複数の合成された層の完了を指示する第3のフェンスを受信するための手段と、
前記第3のフェンスを受信することに応答して、前記DPUプロセスによって、前記1つまたは複数の合成された層をフェッチするための手段と、
前記第3のフェンスを受信することに応答して、DPUプロセスによって、前記1つまたは複数の合成された層と前記残りの層とに基づいて、前記第2のフレームを生成するための手段と、
前記第2のフレームを前記ハードウェア構成要素に提供するための手段と
を備える、装置。
【請求項18】
前記GPUプロセスを始動するための前記手段が、前記GPUプロセスより前に、前記1つまたは複数の層を合成するためのGPUパラメータを構成するための手段を備え、
前記DPUプロセスを始動するための前記手段が、前記DPUプロセスより前に、前記複数の層のうちの前記残りの層と前記1つまたは複数の合成された層とを合成するためのDPUパラメータを構成するための手段を備える、
請求項17に記載の装置。
【請求項19】
前記第2のフェンスは、前記1つまたは複数の層を前記合成することが保留中である期間を指示する持続時間を備え、前記第3のフェンスが、前記期間を中断することと、前記1つまたは複数の層を前記合成することを始動することとを行うように構成された、請求項17に記載の装置。
【請求項20】
前記第2のフレームの合成のために前記複数の層を処理するために前記DPUと前記GPUの両方を使用することを決定するための前記手段は、前記複数の層のうちのどれが前記複数の層の前記サブセットを形成するかを決定するための手段をさらに備える、請求項17に記載の装置。
【請求項21】
前記第2のフレームを生成するための前記手段が、
前記第2のフレームを前記DPUバッファに記憶するための手段と、
前記DPUによる前記第2のフレームの解放を指示する第4のフェンスを設定するための手段と
をさらに備える、請求項17に記載の装置。
【請求項22】
前記第1のフェンスが、前記DPUによる前記第1のフレームの解放を指示する、前記DPUによって設定されたメモリ値である、請求項17に記載の装置。
【請求項23】
前記DPUプロセスを始動する間に前記第3のフェンスを受信するための手段をさらに備える、請求項17に記載の装置。
【請求項24】
前記1つまたは複数の合成された層の完了を指示する前記第3のフェンスを受信するための前記手段が、前記1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信するための手段をさらに備え、
前記1つまたは複数の合成された層をフェッチするための前記手段が、前記1つまたは複数のGPUバッファから前記1つまたは複数の合成された層をフェッチするための手段をさらに備える、
請求項17に記載の装置。
【請求項25】
フレームを生成するための方法を実施するための命令を記憶した非一時的コンピュータ可読記憶媒体であって、前記方法は、
ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することと、
前記第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることと、前記複数の層が第2のフレームに対応する、
前記第2のフレームの合成のために前記複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することと、
前記複数の層を処理するために前記DPUと前記GPUとを使用するという前記決定に基づいて、
前記DPUバッファから前記第1のフェンスをフェッチすること、および
第2のフェンスを生成することと、
前記複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することと、前記GPUプロセスが、前記第2のフェンスを生成することに応答して始動される、
前記第2のフレームを生成するために、前記複数の層のうちの残りの層と前記1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することと、前記DPUプロセスが、前記第1のフェンスをフェッチすることに応答して始動される、
前記1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することと、
前記第3のフェンスを受信することに応答して、
前記DPUプロセスによって、前記1つまたは複数の合成された層をフェッチすること、および
DPUプロセスによって、前記1つまたは複数の合成された層と前記残りの層とに基づいて、前記第2のフレームを生成することと、
前記第2のフレームを前記ハードウェア構成要素に提供することと
を備える、非一時的コンピュータ可読記憶媒体。
【請求項26】
前記GPUプロセスを始動することが、前記GPUプロセスより前に、前記1つまたは複数の層を合成するためのGPUパラメータを構成することを備え、前記DPUプロセスを始動することが、前記DPUプロセスより前に、前記複数の層のうちの前記残りの層と前記1つまたは複数の合成された層とを合成するためのDPUパラメータを構成することを備える、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【請求項27】
前記第2のフェンスは、前記1つまたは複数の層を前記合成することが保留中である期間を指示する持続時間を備え、前記第3のフェンスが、前記期間を中断することと、前記1つまたは複数の層を前記合成することを始動することとを行うように構成された、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【請求項28】
前記第2のフレームの合成のために前記複数の層を処理するために前記DPUと前記GPUの両方を使用することを決定することは、前記複数の層のうちのどれが前記複数の層の前記サブセットを形成するかを決定することをさらに備える、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【請求項29】
前記第2のフレームを生成することが、
前記第2のフレームを前記DPUバッファに記憶することと、
前記DPUによる前記第2のフレームの解放を指示する第4のフェンスを設定することと
をさらに備える、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【請求項30】
前記第1のフェンスが、前記DPUによる前記第1のフレームの解放を指示する、前記DPUによって設定されたメモリ値である、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
[0001] 本出願は、以下に完全に記載されるかのようにおよびすべての適用可能な目的のためにその全体が参照により本明細書に明確に組み込まれる、2021年2月16日に出願された米国出願第17/176,767号の利益および優先権を主張する。
【0002】
[0002] 本開示の教示は、一般に、グラフィックスおよびディスプレイ動作(graphics and display operation)に関し、より詳細には、ディスプレイフレーム(display frame)を生成するための技法に関する。
【背景技術】
【0003】
[0003] コンピューティングデバイスは、しばしば、表示のためのグラフィカルデータのレンダリング(rendering)を加速するために、グラフィックス処理ユニット(GPU:graphics processing unit)を使用し、表示のためのディスプレイパネルに送るべきグラフィカルデータを処理するために、ディスプレイ処理ユニット(DPU:display processing unit)を使用する。そのようなコンピューティングデバイスは、たとえば、コンピュータワークステーション、いわゆるスマートフォンなどのモバイルフォン、組込みシステム、パーソナルコンピュータ、タブレットコンピュータ、およびビデオゲームコンソールを含み得る。GPUは、グラフィックス処理コマンドを実行し、フレーム(frame)を出力するために一緒に動作する1つまたは複数の処理段階を含むグラフィックス処理パイプライン(graphics processing pipeline)を実行する。中央処理ユニット(CPU)は、1つまたは複数のグラフィックス処理コマンドをGPUに発行することによって、GPUの動作を制御し得る。現代のCPUは、一般に、それらの各々が、実行中にGPUを利用する必要があり得る、複数のアプリケーションをコンカレントに実行することが可能である。
【0004】
[0004] 電子デバイス上で実行するアプリケーションは、モニタ上などに表示するためのフレームを生成するために合成(composite)されるべきであるいくつかの層(layer)をレンダリングし得る。いくつかの態様では、DPUおよびGPUは、部分的に、フレームを生成するためにいくつかの層を合成することによって、フレームを生成する。そのような態様では、GPUおよびDPU動作は、しばしば直列化され、したがって、GPUは、層合成を実施および完了することを、DPUが、他の層の、GPUによって合成された層(composited layer)との合成を始めることができる前に、行う。しかしながら、そのような直列化は、DPUおよびGPU、ならびに他のソフトウェアおよびハードウェア構成要素(hardware component)にとって、比較的長いアイドル時間(idle time)を生じ得、フレームの完了(completion)に必要とされる時間の量をも拡張することがある。
【発明の概要】
【0005】
[0005] 本開示のシステム、方法、およびデバイスは、各々いくつかの態様を有し、それらのうちの単一の態様が単独で本開示の望ましい属性を担当するとは限らない。この説明を考察すれば、特に「発明を実施するための形態」と題するセクションを読めば、本開示の特徴が、ディスプレイフレームを生成するための動作における低減されたレイテンシ(latency)を含む利点をどのように提供するかが理解されよう。
【0006】
[0006] いくつかの態様は、フレームを生成するための方法に関する。本方法は、ディスプレイプロセッサユニット(DPU:display processor unit)バッファ(buffer)に記憶された第1のフレーム(first frame)がハードウェア構成要素によって消費されたことを指示する第1のフェンス(first fence)を受信することを含む。本方法は、第1のフェンスを受信することに応答して、アプリケーションバッファ(application buffer)から複数の層をフェッチ(fetch)することをも含み、複数の層は第2のフレーム(second frame)に対応する。本方法は、第2のフレームの合成(composition)のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することをも含む。本方法は、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンス(second fence)を生成することをも含む。本方法は、複数の層のサブセット(subset)から1つまたは複数の層を合成するためのGPUプロセスを始動することをも含み、GPUプロセスは、第2のフェンスを生成することに応答して始動される。本方法は、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することをも含み、DPUプロセスは、第1のフェンスをフェッチすることに応答して始動される。本方法は、1つまたは複数の合成された層の完了を指示する第3のフェンス(third fence)を受信することをも含む。本方法は、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することをも含む。本方法は、第2のフレームをハードウェア構成要素に提供することをも含む。
【0007】
[0007] いくつかの態様は、フレームを生成するために構成された装置を対象とする。いくつかの例では、本装置は、メモリと、メモリに結合されたプロセッサとを含む。いくつかの例では、プロセッサおよびメモリは、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信するように構成される。いくつかの例では、プロセッサおよびメモリは、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチするように構成され、複数の層は第2のフレームに対応する。いくつかの例では、プロセッサおよびメモリは、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定するように構成される。いくつかの例では、プロセッサおよびメモリは、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することを行うように構成される。いくつかの例では、プロセッサおよびメモリは、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動するように構成され、GPUプロセスは、第2のフェンスを生成することに応答して始動される。いくつかの例では、プロセッサおよびメモリは、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動するように構成され、DPUプロセスは、第1のフェンスをフェッチすることに応答して始動される。いくつかの例では、プロセッサおよびメモリは、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信するように構成される。いくつかの例では、プロセッサおよびメモリは、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することを行うように構成される。いくつかの例では、プロセッサおよびメモリは、第2のフレームをハードウェア構成要素に提供するように構成される。
【0008】
[0008] いくつかの態様は、フレームを生成するための装置に関する。いくつかの例では、本装置は、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信するための手段を含む。いくつかの例では、本装置は、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチするための手段を含み、複数の層は第2のフレームに対応する。いくつかの例では、本装置は、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定するための手段を含む。いくつかの例では、本装置は、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチするための手段を含む。いくつかの例では、本装置は、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、第2のフェンスを生成するための手段を含む。いくつかの例では、本装置は、第2のフェンスを生成することに応答して、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動するための手段を含む。いくつかの例では、本装置は、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動するための手段を含み、DPUプロセスは、第1のフェンスをフェッチすることに応答して始動される。いくつかの例では、本装置は、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信するための手段を含む。いくつかの例では、本装置は、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチするための手段を含む。いくつかの例では、本装置は、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成するための手段を含む。いくつかの例では、本装置は、第2のフレームをハードウェア構成要素に提供するための手段を含む。
【0009】
[0009] いくつかの態様は、フレームを生成する方法を実施するための命令を記憶した非一時的コンピュータ可読記憶媒体(non-transitory computer-readable storage medium)に関する。いくつかの例では、方法は、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することを含む。方法は、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることをも含み、複数の層は第2のフレームに対応する。方法は、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することをも含む。方法は、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することをも含む。方法は、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することをも含み、GPUプロセスは、第2のフェンスを生成することに応答して始動される。方法は、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することをも含み、DPUプロセスは、第1のフェンスをフェッチすることに応答して始動される。方法は、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することをも含む。方法は、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することをも含む。方法は、第2のフレームをハードウェア構成要素に提供することをも含む。
【0010】
[0010] 上記の目的および関係する目的を達成するために、1つまたは複数の態様は、以下で十分に説明され、特に特許請求の範囲において指摘される特徴を備える。以下の説明および添付の図面は、1つまたは複数の態様のうちのいくつかの例示的な特徴を詳細に記載する。ただし、これらの特徴は、様々な態様の原理が採用され得る様々な方法のうちのほんのいくつかを示すものである。
【0011】
[0011] 本開示の上記で具陳された特徴が詳細に理解され得るように、図面にその一部が示される態様を参照することによって、上記で手短に要約されたより具体的な説明が得られ得る。ただし、添付の図面は、本開示のいくつかの態様のみを示し、その説明は他の等しく有効な態様に通じ得ることに留意されたい。
【図面の簡単な説明】
【0012】
【
図1】[0012] 本開示で説明される技法を実装するために使用され得る例示的なコンピューティングデバイスを示すブロック図。
【
図2】[0013] 本開示のいくつかの態様による、例示的なディスプレイパイプラインを示すブロック図。
【
図3】[0014] 本開示のいくつかの態様による、
図2の合成器(compositor)と、ハードウェア組成器(hardware composer)と、ドライバとによって実施されるフレーム処理動作を示すブロック図。
【
図4】[0015] 本開示のいくつかの態様による、
図2の合成器と、ハードウェア組成器と、ドライバとによって実施されるフレーム処理動作を示すブロック図。
【
図5】[0016] 本開示のいくつかの態様による、表示のためのフレームを生成するための例示的な動作を示すフローチャート。
【発明を実施するための形態】
【0013】
[0017] いくつかの態様では、コンピューティングデバイスは、コンピューティングデバイスならびに/あるいはモニタまたはプリンタなどの他の周辺デバイス上のグラフィックスおよびディスプレイ機能をサポートするための、グラフィックス処理ユニット(GPU)とディスプレイ処理ユニット(DPU)とを含み得る。
【0014】
[0018] 本明細書で使用される「コンテンツ」という用語のインスタンスは、「画像データの層」、「グラフィカルコンテンツ」、「画像」を指し得、その逆も同様である。これは、用語が形容詞として使用されているのか、名詞として使用されているのか、他の品詞として使用されているのかにかかわらず当てはまる。いくつかの例では、本明細書で使用される「グラフィカルコンテンツ」という用語は、グラフィックス処理パイプラインの1つまたは複数のプロセスによって作り出されたコンテンツを指し得る。いくつかの例では、本明細書で使用される「グラフィカルコンテンツ」という用語は、グラフィックス処理を実施するように構成された処理ユニットによって作り出されたコンテンツを指し得る。いくつかの例では、本明細書で使用される「グラフィカルコンテンツ」という用語は、グラフィックス処理ユニット(GPU)によって作り出された、またはさもなければディスプレイ処理ユニット(DPU)によって受信された、コンテンツを指し得る。
【0015】
[0019] いくつかの例では、本明細書で使用される「ディスプレイコンテンツ」という用語は、ディスプレイ処理を実施するように構成された処理ユニットによって生成されたコンテンツを指し得る。いくつかの例では、本明細書で使用される「ディスプレイコンテンツ」という用語は、ディスプレイ処理ユニットによって生成されたコンテンツを指し得る。グラフィカルコンテンツは、ディスプレイコンテンツになるように処理され得る。たとえば、GPUは、(フレームバッファと呼ばれることがある)バッファに、フレームなど、グラフィカルコンテンツを出力し得る。ディスプレイ処理ユニットは、バッファからの1つまたは複数のフレームなど、グラフィカルコンテンツを読み取り、ディスプレイコンテンツを生成するために、それに対して1つまたは複数のディスプレイ処理技法を実施し得る。
【0016】
[0020] たとえば、DPUは、フレームを生成するために、1つまたは複数のレンダリングされた層に対して合成を実施するように構成され得る。いくつかの場合には、GPUも、DPUが同じことを行うのを支援するときなど、フレームを生成するために、1つまたは複数のレンダリングされた層に対して合成を実施するように構成され得る。別の例として、DPUは、2つまたはそれ以上の層を一緒に単一のフレームに組成(compose)するか、ブレンド(blend)するか、またはさもなければ組み合わせるように構成され得る。DPUは、フレームに対してスケーリング、たとえば、アップスケーリングまたはダウンスケーリングを実施するように構成され得る。いくつかの例では、フレームは層を指し得る。他の例では、フレームは、フレームを形成するためにすでに一緒にブレンドされた2つまたはそれ以上の層を指し得、すなわち、フレームは、2つまたはそれ以上の層を含み、2つまたはそれ以上の層を含むフレームは、その後ブレンドされ得る。
【0017】
[0021] 説明されるように、GPUおよびDPUは、両方とも、表示のための特定のフレームの生成をサポートするためのいくつかのプロセス(たとえば、合成層への、層の合成)を実施するために必要とされ得る。しかしながら、GPUとDPUの両方を使用するフレームの生成は、GPUとDPUとの間の比較的拡張された量のアイドル時間をもたらすことがある直列化された処理を生じ、その結果、フレームを生成するために必要とされる時間の量を拡張し得る。
【0018】
[0022] たとえば、GPUが複数の層の合成層を生成する間、DPUとコンピューティングデバイスの他の構成要素とは、それらがそれら自体の作業を始めることができる前に、GPUが合成を完了するのを待っていることがある。そのような構成は、DPUと他の構成要素とをアイドルのままにし、フレーム生成のためのプロセスを延長する。したがって、本明細書で説明される態様は、GPUとDPUと他の構成要素との間の処理の直列化を低減するための技法を対象とする。そのような技法は、システム間のアイドル時間の量を低減し、フレームを生成するために必要とされる時間の量を低減するために、いくつかのタスクを並列に実施するための方法を含む。
【0019】
[0023] 添付の図面に関して以下に記載される発明を実施するための形態は、様々な構成の説明として意図されており、本明細書で説明される概念が実践され得る構成のみを表すことが意図されていない。発明を実施するための形態は、様々な概念の完全な理解を提供するための具体的な詳細を含む。ただし、これらの概念はこれらの具体的な詳細なしに実践され得ることが当業者には明らかであろう。いくつかの事例では、そのような概念を不明瞭にすることを回避するために、よく知られている構造および構成要素がブロック図の形態で示されている。
【0020】
[0024] 様々な態様が、添付の図面を参照しながら詳細に説明される。可能な場合はいつでも、同じまたは同様の部分を指すために図面全体にわたって同じ参照番号が使用される。特定の例および実装形態になされる言及は、説明の目的のためのものであり、本開示の範囲または特許請求の範囲を限定するものではない。
【0021】
[0025] 本開示の特徴が、以下のいくつかの態様および図に関連して説明され得るが、本開示のすべての態様は、本明細書で説明される有利な特徴のうちの1つまたは複数を含むことができる。言い換えれば、1つまたは複数の態様が、いくつかの有利な特徴を有するものとして説明され得るが、そのような特徴のうちの1つまたは複数は、本明細書で説明される様々な他の態様に従っても使用され得る。
【0022】
[0026] 「システムオンチップ」(SoC)という用語は、本明細書では、単一の基板上に組み込まれた複数のリソースおよび/またはプロセッサを含んでいる単一の集積回路(IC)チップを指すために使用される。単一のSoCは、デジタル、アナログ、混合信号、および無線周波数機能のための回路を含んでいることがある。単一のSoCはまた、任意の数の汎用および/または専用プロセッサ(デジタル信号プロセッサ、モデムプロセッサ、ビデオプロセッサなど)、メモリブロック(たとえば、ROM、RAM、フラッシュなど)、ならびにリソース(たとえば、タイマー、電圧調節器、発振器など)を含み得、それらのいずれかまたはすべては、1つまたは複数のコア中に含まれ得る。
【0023】
[0027] いくつかの異なるタイプのメモリおよびメモリ技術が利用可能であるかまたは将来企図され、それらのすべてが、本開示の様々な態様とともに使用するのに好適である。そのようなメモリ技術/タイプは、相変化メモリ(PRAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、不揮発性ランダムアクセスメモリ(NVRAM)、フラッシュメモリ(たとえば、組込みマルチメディアカード(eMMC)フラッシュ、フラッシュ消去可能プログラマブル読取り専用メモリ(FEPROM))、擬似スタティックランダムアクセスメモリ(PSRAM)、ダブルデータレート(DDR)同期ダイナミックランダムアクセスメモリ(SDRAM)、ならびに当技術分野で知られている他のランダムアクセスメモリ(RAM)および読取り専用メモリ(ROM)技術を含む。DDR SDRAMメモリは、DDRタイプ1 SDRAMメモリ、DDRタイプ2 SDRAMメモリ、DDRタイプ3 SDRAMメモリ、またはDDRタイプ4 SDRAMメモリであり得る。
【0024】
[0028] 上述のメモリ技術の各々は、たとえば、コンピュータまたは他のデジタル電子デバイスにおけるまたはそれによる使用のための命令、プログラム、制御信号、および/またはデータを記憶するのに好適な要素を含む。個々のタイプのメモリ、インターフェース、規格またはメモリ技術に関係する用語および/または技術詳細へのいかなる言及も、説明の目的のためにすぎず、クレームの文言に明記されていない限り、特許請求の範囲を特定のメモリシステムまたは技術に限定するものではない。モバイルコンピューティングデバイスアーキテクチャは、複雑さが増しており、現在一般に、複数のプロセッサコアと、SoCと、コプロセッサと、専用プロセッサ(たとえば、通信モデムチップ、全地球測位システム(GPS)プロセッサ、ディスプレイプロセッサなど)を含む機能モジュールと、複雑なメモリシステムと、入り組んだ電気相互接続(たとえば、バスおよび/またはファブリック)と、複雑なおよび電力集約的なソフトウェアアプリケーション(たとえば、ビデオストリーミングアプリケーションなど)を実行する多数の他のリソースとを含む。いくつかの態様がSoCに関して説明され得るが、態様は、GPUおよびDPUを有するものなど、任意の好適なコンピューティングプラットフォームに適用され得ることを理解されたい。
【0025】
[0029]
図1は、本開示で説明される技法を実装するために使用され得る例示的なコンピューティングデバイス100を示すブロック図である。いくつかの例では、コンピューティングデバイス100は、SoCを備え得る。SoCは、デジタル、アナログ、混合信号、および無線周波数機能のための回路、ならびに/あるいは、任意の数の汎用および/または専用プロセッサ(デジタル信号プロセッサ、モデムプロセッサ、ビデオプロセッサなど)、メモリブロック(たとえば、ROM、RAM、フラッシュなど)、ならびにリソース(たとえば、タイマー、電圧調節器、発振器など)を含んでいることがあり、それらのいずれかまたはすべては、1つまたは複数のコア中に含まれ得る。
【0026】
[0030] いくつかの例では、コンピューティングデバイス100は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、(たとえば、携帯電話、セルラー電話、衛星電話、および/または携帯電話ハンドセットなどの)ワイヤレス通信デバイス、ポータブルビデオゲームデバイスまたは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、あるいはグラフィカルデータを生成、処理、および/または表示する任意の他のタイプのデバイスを備え得る。
【0027】
[0031]
図1の例に示されているように、コンピューティングデバイス100は、中央処理ユニット(CPU)102、ディスプレイ処理ユニット(DPU)104、およびグラフィックス処理ユニット(GPU)106など、複数の異種プロセッサ(たとえば、汎用/専用プロセッサ)を含んでいる処理システム120を含む。図示されていないが、処理システム120は、追加の処理ユニット、たとえば、デジタル信号プロセッサ(DSP)、アプリケーションプロセッサなどを含み得る。
【0028】
[0032] 本明細書で使用される処理ユニットは、1つまたは複数のプロセッサと、任意の好適なサポートハードウェアおよび/またはソフトウェア(たとえば、レジスタ、組合せ論理、コントローラなど)とを含み得る。処理システム120は、1つまたは複数のコアを含み得、各プロセッサ/コアは、他のプロセッサ/コアから独立した動作を実施し得る。処理ユニット102、104、および106は(たとえば、単一の基板、ダイ、集積チップなど上で)互いに極めて近接して編成され得、それにより、それらは、信号がオフチップで移動する場合に可能であろうものよりもはるかに高い周波数/クロックレートにおいて動作し得る。コアの近接はまた、オンチップメモリおよびリソース(たとえば、電圧レール)の共有、ならびにコア間のより協調された協働を可能にし得る。
【0029】
[0033] 処理システム120は、バスモジュール110を介して、1つまたは複数のコントローラモジュール112、(1つまたは複数の)入出力(I/O)モジュール114、(1つまたは複数の)メモリモジュール116、ならびに(1つまたは複数の)システム構成要素およびリソースモジュール118と相互接続され、バスモジュール110は、再構成可能な論理ゲートのアレイを含み、および/またはバスアーキテクチャ(たとえば、CoreConnect、高度マイクロコントローラバスアーキテクチャ(AMBA)など)を実装し得る。バスモジュール110通信は、高性能なネットワークオンチップ(NoC)などの高度相互接続によって提供され得る。相互接続/バスモジュール110は、構成要素(たとえば、プロセッサ、周辺機器など)に、設定された持続時間、動作の数、バイト数などについての、(たとえば、バーストモード、ブロック転送モードなどにおいてデータを転送するための)バスの排他的な制御を与えるように構成されたバスマスタリングシステムを含むか、または提供し得る。いくつかの場合には、バスモジュール110は、複数のマスタ構成要素がバスを同時に駆動することを試みることを防ぐために、調停方式を実装し得る。
【0030】
[0034] CPU102は、コンピューティングデバイス100の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、I/Oモジュール114を介して、CPU102に1つまたは複数のソフトウェアアプリケーションを実行させるために、コンピューティングデバイス100に入力を提供し得る。CPU102上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、I/Oモジュール114を介してコンピューティングデバイス100に結合されたキーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、コンピューティングデバイス100に入力を提供し得る。
【0031】
[0035] CPU102上で実行するソフトウェアアプリケーションは、DPU104およびGPU106に、フレームに混合するおよび組み合せるために、1つまたは複数の層(たとえば、グラフィックスデータ)を合成するように命令する、1つまたは複数のグラフィックスレンダリングおよび/または合成命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標))アプリケーションプログラミングインターフェース(API)、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、DirectX API、RenderMan API、WebGL API、あるいは任意の他の公開またはプロプライエタリグラフィックスAPIなどのグラフィックスAPIに準拠し得る。グラフィックス合成命令を処理するために、CPU102は、DPU104およびGPU106に1つまたは複数の層のレンダリングおよび/または合成の一部または全部を実施させるために、DPU104およびGPU106に1つまたは複数のコマンドを発行し得る。
【0032】
[0036] 同様に、CPU102は、DPU104に、CPU102上で稼働するアプリケーション、あるいはメモリまたはデジタルストレージ(たとえば、プロセッサメモリ108またはメモリモジュール116)から、画像および/またはビデオフレームおよび/または層を受信およびフェッチさせる、1つまたは複数の命令を含み得る。DPU104は、フレームおよび層に対して1つまたは複数の画像処理動作を実施し、処理されたフレームを表示のためのディスプレイデバイスに出力し得る。そのような画像処理動作は、層合成、フォーマット変換、スケーリング、回転、ブレンディング、追加のグラフィックスを伴う画像の階層化などを含み得る。言い換えれば、DPU104は、ビデオおよび/または画像データを取得し、ディスプレイデバイスのピクセルに、ビデオまたは画像を照明および表示させる値を出力し得る。
【0033】
[0037] コントローラモジュール112は、メモリモジュール116に入るおよびそれから出るデータの転送を容易にする。たとえば、コントローラモジュール112は、メモリ読取り要求とメモリ書込み要求とをCPU102、DPU104、および/またはGPU106から受信し、コンピューティングデバイス100中の構成要素にメモリサービスを提供するためにメモリモジュール116および/またはプロセッサメモリ108に関するそのような要求をサービスし得る。コントローラモジュール112は、メモリモジュール116とプロセッサメモリ108とに通信可能に結合される。コントローラモジュール112は、
図1の例示的なコンピューティングデバイス100では、CPU102、プロセッサメモリ108、およびメモリモジュール116とは別である処理モジュールであるものとして示されているが、他の例では、コントローラモジュール112の機能の一部または全部は、CPU102、DPU104、GPU106、プロセッサメモリ108、およびメモリモジュール116のうちの1つまたは複数上に実装され得る。
【0034】
[0038] メモリモジュール116およびプロセッサメモリ108は、コンピューティングデバイス100中で実装されたコンピュータ可読記憶媒体である。メモリモジュール116は、フラッシュメモリなどの不揮発性記憶装置を、処理システム120、コントローラモジュール112、I/Oモジュール114、ならびに/またはシステム構成要素およびリソースモジュール118のうちの1つまたは複数に提供し得る。メモリモジュール116は、情報の一時的記憶を提供するための、キャッシュメモリとバッファとを含み得る。メモリモジュール116は、CPU102による実行のためにアクセス可能であるプログラムモジュールおよび/または命令、ならびに/あるいはCPU102上で実行するプログラムによる使用のためのデータを記憶し得る。たとえば、メモリモジュール116は、ユーザアプリケーションと、グラフィックスデータとを記憶し得る。メモリモジュール116は、コンピューティングデバイス100の他の構成要素による使用のための情報、および/またはそれらによって生成された情報をも記憶し得る。たとえば、メモリモジュール116は、GPU106およびDPU104のためのデバイスメモリとして働き得、GPU106およびDPU104によって演算されるべきデータ、ならびにGPU106およびDPU104によって実施される演算から生じるデータを記憶し得る。たとえば、メモリモジュール116は、パスデータ、パスセグメントデータ、表面、テクスチャバッファ、深度バッファ、セルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。さらに、メモリモジュール116は、GPU106および/またはDPU104によって処理するためのコマンドストリームを記憶し得る。メモリモジュール116は、いくつかの態様では、プロセッサ102~106のうちの1つまたは複数の一部であるメモリを指し得ることに留意されたい。
【0035】
[0039] プロセッサメモリ108は、CPU102、DPU104、およびGPU106のうちの1つまたは複数によって使用される命令および/またはデータを含んでいることがある。プロセッサメモリ108は、他のメモリに対するキャッシュなど、処理システム120による使用のための専用のローカルメモリ、スクラッチパッドメモリ、または処理システム120を備えるSoC上のメモリであり得る。プロセッサメモリ108は、処理システム120による使用のための専用のDRAMメモリであり得る。
【0036】
[0040] I/Oモジュール114は、コンピューティングデバイス100の外部のリソースと通信するために構成される。たとえば、I/Oモジュール114は、入出力インターフェース(たとえば、バスアーキテクチャまたは相互接続)、または特定の機能を実施するためのハードウェア設計(たとえば、メモリ、ワイヤレスデバイス、およびデジタル信号プロセッサ)を含む。いくつかの例では、I/Oモジュール114は、オフチップで配置されたメモリまたはデジタルストレージデバイス、プリンタ、ディスプレイデバイスなど、1つまたは複数の周辺デバイス118とインターフェースするための回路を含む。一例では、I/Oモジュール114は、フレームバッファ(たとえば、プロセッサメモリ108またはメモリモジュール116)から、レンダリングされた画像データを取り出すことと、画像データによって表された画像を表示するように、周辺ディスプレイデバイスを構成することとを行うように構成される。いくつかの例では、I/Oモジュール114は、フレームバッファから取り出されたデジタル値を、ディスプレイによって消費可能なアナログ信号に変換するように構成されたデジタルアナログ変換器(DAC)を含み得る。他の例では、I/Oモジュール114は、処理のために、デジタル値をディスプレイに直接受け渡し得る。
【0037】
[0041] 説明されるように、1つまたは複数の周辺デバイス118は、ディスプレイデバイスまたは他のハードウェア構成要素(たとえば、プリンタ)を含み得る。ディスプレイデバイスは、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。いくつかの例では、そのようなディスプレイデバイスは、コンピューティングデバイス100を格納するデバイス内に組み込まれ得る。たとえば、ディスプレイデバイスは、携帯電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイデバイスは、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイスに結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイデバイスは、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【0038】
[0042] コンピューティングデバイス100は、センサーデータ、アナログデジタル変換、ワイヤレスデータ送信を管理するための、および(たとえば、異なるデバイス間のインターオペラビリティをサポートする)他の特殊な動作を実施するための、システム構成要素およびリソースモジュール118を含む。システム構成要素およびリソースモジュール118は、電圧調節器、発振器、位相ロックループ、周辺ブリッジ、データコントローラ、システムコントローラ、アクセスポート、タイマー、およびコンピューティングデバイス上で稼働するプロセッサとソフトウェアクライアントとをサポートするために使用される他の同様の構成要素などの構成要素をも含み得る。システム構成要素およびリソース118は、カメラ、電子ディスプレイ、ワイヤレス通信デバイス、外部メモリチップなどの周辺デバイスとインターフェースするための回路をも含み得る。
【0039】
[0043] 以下でより詳細に説明されるように、コンピューティングデバイス100は、本明細書で説明されるシステムおよび方法による、画像処理のために使用され得る。たとえば、CPU102、DPU104、GPU106などの処理ユニットおよび/または任意の他の好適なプロセッサが、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信するように構成され得る。第1のフェンスを受信することに応答して、プロセッサはまた、アプリケーションバッファから複数の層をフェッチし得、複数の層は第2のフレームに対応する。プロセッサはまた、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定し得る。複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、プロセッサは、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することを行い得る。プロセッサはまた、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動し得、ここにおいて、GPUプロセスは、第2のフェンスを生成することに応答して始動される。プロセッサはまた、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動し得、ここにおいて、DPUプロセスは、第1のフェンスをフェッチすることに応答して始動される。プロセッサはまた、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信し得る。第3のフェンスを受信することに応答して、プロセッサはまた、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することを行い得る。プロセッサはまた、第2のフレームをハードウェア構成要素に提供し得る。
【0040】
[0044]
図2は、本開示のいくつかの態様による、例示的なディスプレイパイプライン(display pipeline)200を示すブロック図である。いくつかの例では、ディスプレイパイプライン200は、
図1のコンピューティングデバイス100、または任意の他の好適なコンピューティングシステム上に実装され得る。
【0041】
[0045] 以下でより詳細に説明されるように、例示的なディスプレイパイプライン200は、フレーム処理中に、並列DPUおよびGPU動作を提供することによって、改善されたユーザエクスペリエンスと、低減された処理時間とを提供する。いくつかの例では、将来のGPUフェンスおよび将来のDPUフェンスは、GPUプロセスおよびDPUプロセスを並列に始動および稼働するように実装され得る。本明細書で使用される「フェンス(fence)」は、バッファに対応するメモリ値(memory value)に関し得る。たとえば、フェンスは、特定のバッファがコンテンツ(たとえば、1つまたは複数の層、またはフレーム)をいつ含んでいるか、または特定のバッファのコンテンツがいつ消費されたか(たとえば、バッファが現在、再使用しても差しつかえないという指示)を指示するように構成され得る。いくつかの例では、DPUフェンスは、バッファが、フレーム、または1つまたは複数の層の合成をいつ含んでいるか、あるいはバッファがいつ空であり、使用の準備ができている(たとえば、フレームまたは合成が消費された)かを指示する。いくつかの例では、GPUフェンスは、特定のバッファが1つまたは複数の層の合成をいつ含んでいるか(たとえば、合成が完了したという指示)、または特定のバッファがいつ空であり、使用の準備ができているかを指示し得る。
【0042】
[0046] 図示のように、(「アプリケーション202」と総称される)1つまたは複数のアプリケーション202a~202nが、CPU102上で実行され得、ディスプレイデータ(たとえば、表示のためのフレームのために合成されるべきである1つまたは複数の層)をウィンドウズ(登録商標)マネージャサービス(WMS:windows manager service)204と通信し得る。WMS204は、ハードウェア(HW)組成器208にデータを受け渡すことができる合成器(compositor)206と通信している。HW組成器208は、ディスプレイデバイス212とインターフェースするドライバ210(たとえば、直接レンダリングモジュール(DRM:direct rendering module)ドライバおよび/またはカーネルレベルドライバ)に、データを受け渡すことができる。合成器206、ハードウェア組成器(hardware composer)208、およびドライバ210はすべて、フレーム処理システム214の一部であり、DPU104およびGPU106など、
図1のコンピューティングデバイス100のハードウェアおよびソフトウェア態様を含み得る。
【0043】
[0047]
図2中の構成要素の図は、論理的であり、必ずしも、個別の構成要素の図であることを意図されるとは限らない。たとえば、
図1中のCPU102、WMS204、合成器206、HW組成器208、およびドライバ210の分割は、異なる機能を伝達することを意図されるが、2つまたはそれ以上のこれらの構成要素が構成体(たとえば、
図1に示されているDPU104および/またはGPU106)に組み込まれ得ることが企図される。さらに、構成要素は、ハードウェア、ハードウェアに関連するソフトウェア、ファームウェア、またはそれらの組合せによって実現され得る。
【0044】
[0048] WMS204は、概して、異なるソースからの層を管理することと、層がディスプレイ上にどのようにレイアウトされるべきであるかを決定することとを行うように機能する。合成器206は、概して、(1つまたは複数の)アプリケーション202によって生成された複数の層を管理する。必要ではないが、合成器206は、ANDROID(登録商標)フレームワークのSurfaceFlingerモジュール(またはSurfaceFlingerモジュールの派生物)によって実現され得る。動作中、たとえば、レンダリングおよび合成されている独立した層とともに、多くの稼動しているアプリケーションがあり得る。合成器206は、ディスプレイ上に何が示されることになるかを決定し、必要に応じてオーバーレイを提供する。合成器206の役割の態様は、複数のソース(たとえば、(1つまたは複数の)アプリケーション202)からディスプレイデータのバッファを受け付け、後の表示のためにそれらを合成することである。HW組成器208は、DPU104およびGPU106を使用して合成を実施するために、ハードウェア抽象化層(HAL)として動作し得る。概して、合成器206は、バッファをコンピューティングデバイス上の利用可能なハードウェアとどのように合成するかを決定する。ANDROIDベースのコンピューティングデバイスのコンテキストでは、HW組成器208は、ANDROID HW組成器(またはそれの派生物)を使用して実現され得る。ドライバ210は、カーネルレベルドライバであり得、ディスプレイパイプライン200の下にあるハードウェアを動作させるための、低レベルハードウェア固有命令を含んでいることがある。
【0045】
[0049]
図3は、本開示のいくつかの態様による、
図2の合成器206と、ハードウェア組成器208と、ドライバ210とによって実施されるフレーム処理動作300を示すブロック図である。図示のように、
図3は、ディスプレイフレームを処理するための4つの段階、すなわち、(i)フレームを準備する302段階と、(ii)フレームを組成する304段階と、(iii)フレームを提示する306段階と、(iv)ポスト合成(post composition)308段階とを含み、それらのすべては合成器206によって始動される。
【0046】
[0050] いくつかの態様では、フレーム処理動作300の段階は、直列に実施される。たとえば、動作300は、フレームを準備する302段階において始まり、次いで、フレームを準備する304段階の完了の後に、フレームを組成する304段階に進み得る。同様に、動作300は、フレームを組成する304段階の完了の後に、フレームを提示する306段階に進み得る。動作300の段階が循環的に実施され得ることに留意されたい。たとえば、動作300が表示のための第1のフレームを生成し、第1のフレームがパネル(たとえば、ディスプレイデバイス)によって消費された後に、DPU(たとえば、
図1のDPU104)は、合成器206に、DPUバッファのコンテンツ(たとえば、第1のフレーム)が消費され、バッファが再使用の準備ができていることを指示するために、DPUフェンスを設定し得る。DPUフェンスが設定されると、合成器206は、1つまたは複数の層の新しいセットを使用して第2のフレームを生成するために、フレームを準備する302段階において、動作300を始動し得る。
【0047】
[0051] フレームを準備する302段階において、合成器206は、コマンド326(たとえば、「presentOrValidateDisplay」コマンド)をハードウェア(HW)組成器208に送ることによって、フレームを準備するために動作300を始動する。コマンドは、フレーム生成のために合成および/またはレンダリングされるべき層を含んでいるアプリケーションバッファを識別する情報と、フレーム生成中に使用されることになる(1つまたは複数の)DPU/GPUフェンス対応するDPU/GPUバッファを識別する情報とを含み得る。コマンド326は、フレームのために処理されるべき層の数など、他のパラメータをも含み得る。
【0048】
[0052] コマンド326に応答して、HW組成器208は、合成決定(composition decision)310において、1つまたは複数の層のうちのどれがGPU106によって合成されるべきであるか、および/または1つまたは複数の層のうちのどれがDPU104によって合成されるべきであるかを決定し得る。合成決定310の一部として、HW組成器208は、HWリソース312の限界を決定し得る。たとえば、HW組成器208は、合成するために、いくつの層がDPU104によってハンドリングされ得るかを決定し得る。DPU104がハンドリングするには多すぎる層がある場合、余剰層は、合成するために、GPU106に割り当てられ得る。したがって、HW組成器208は、いくつかの層(たとえば、層xおよび層y)はDPU104によって合成されることになるが、他の層(たとえば、層wおよび層z)はGPU106によって合成されなければならないと決定し得る。フレームを組成する304段階に関して以下でより詳細に説明されるように、GPU106は、DPU104によって実施される合成作業より前に、最初に、層xと層yとの合成を生成し得る。GPU106は、次いで、合成層がいつ準備ができている(たとえば、GPUバッファが合成層を含んでいる)かを合成器206に知らせるGPUフェンスを設定し、これは、その場合、DPU104にそれの合成作業を始めるように促す。しかしながら、層の合成のそのような直列化は、GPUとDPUとの間のアイドル時間を延長することがあり、フレームを生成するために必要とされる時間の量を延長することがある。
【0049】
[0053] 合成決定310中に、ドライバ210は、314において入出力制御(IOCTL:input/output control)を検証し得る。たとえば、ドライバは、DPU104およびGPU106によるハンドリングのために選択された層が、DPU104およびGPU106ハードウェアによって実際にハンドリングされ得ることを保証し得る。言い換えれば、314においてIOCTLを検証することは、層が、HW組成器208による層の割当ての後にDPU104およびGPU106によって処理され得ることを確認するループである。HW組成器208は、次いで、328において、層のうちのどれがGPU106によって合成されるべきであるか、および/または1つまたは複数の層のうちのどれがDPU104によって合成されるべきであるかを合成器206に提供することによって、コマンド326に応答し得る。
【0050】
[0054] 合成器206は、アプリケーションプログラミングインターフェース(API)を使用して、GPU106と通信し得る(たとえば、GPU106をスケジュールし、GPU106に、合成されるべき層を提供する)。たとえば、合成器は、オープングラフィックスライブラリ(OpenGL)APIを使用して、316において、GPU合成をスケジュールし、テクスチャ、座標などをプログラムし得る。316においてスケジュールした後に、合成器206は、完了の後に(1つまたは複数の)合成層を記憶するためにGPU106によって使用されることになるGPUバッファに対応するGPUフェンスを、318においてフラッシュ(flush)するか、またはクリアし得る。GPUフェンスをクリアすることによって、GPU106は、合成器206に、どのGPU106バッファが合成層を記憶するために使用されることになるか、および合成層がまだ完了していないことを指示する。
【0051】
[0055] GPU106が合成層を完了すると、GPU106は、GPUバッファに合成層を記憶し、合成層が完了したことを合成器206に指示するために、320において、GPUフェンスを設定する。合成器206は、フレームを提示する306段階を始動する前に、GPUフェンスが設定されるまで待ち得ることに留意されたい。したがって、タイミングに関して、合成器206は、GPUフェンスが設定されるまで、フレームを提示する306段階を開始しない。
【0052】
[0056] GPUフェンスが設定されると、合成器206は、次いで、フレームを提示する306段階を始動する。ここで、DPU104は、残りの層の合成と、DPU104とGPU106の両方によって生成された合成層を使用したフレームのレンダリングとを始める。いくつかの例では、合成器206は、DPU104に合成およびレンダリング作業を始めるように促すコマンド330(たとえば、「presentDisplay」)を、HW組成器208に送る。コマンド330は、GPU106によって生成された合成された層を含んでいるGPUバッファの識別情報を含み得、したがって、DPU104はそれをフェッチすることができる。
【0053】
[0057] コマンド330に応答して、HW組成器208はまた、コミット(commit)する322プロセスを始動し得、ここにおいて、オーバーレイエンジンのプログラミングと、完了されたフレームをパネルに押し出すこととが実施される。コミットする322プロセス中に、HW組成器208は、DPU104がフレームを完了する必要があるという、入力バッファ(たとえば、合成層を含んでいるGPUバッファ)と入力フェンス(たとえば、対応するGPUフェンス)とを識別する情報をドライバ210に提供し得る。ここで、ドライバ210は、IOCTLをコミットする324プロセスを実施し得、ここにおいて、ドライバ210は、入力バッファと入力フェンスとをDPU104に提供し、ドライバ210は、出力フェンスをHW組成器208に提供し、HW組成器208は、それらを合成器206に受け渡す。いくつかの態様では、出力フェンスは、フレームが完了され、パネルに向けて押されたことを、合成器206に知らせる。いくつかの例では、出力フェンスは、DPU104によって設定されたDPUフェンスであり、次のフレームを準備する302段階の始動を指示するために、合成器206によって使用される。ポスト合成308段階において、フレームは、ディスプレイデバイスにおいて消費され、表示される。消費時に、DPU104は、動作300を再開することを合成器206に通知することになる出力フェンスを設定し(たとえば、1つまたは複数の層の別のセットのためにフレームを準備する302段階を始動し)得る。
【0054】
DPUおよびGPUによる層の並列処理のための例示的な技法(Example Techniques for Parallel Processing of Layers by a DPU and a GPU)
[0058]
図3に示されているように、DPU104およびGPU106による層の処理は、概して、直列化される。たとえば、DPU104は、GPUが層合成を完了する(たとえば、1つまたは複数の層が合成され、GPUバッファに記憶され、GPUフェンスが、合成層の完了を合成器206に指示するように設定される)まで、層合成を実施しない。処理のこの直列化は、
図4に示されているものなど、並列処理モデルに対して、層を処理するためにおよびフレームを生成するために、より長い時間ウィンドウを必要とする。
【0055】
[0059]
図4は、本開示のいくつかの態様による、
図2の合成器206と、ハードウェア組成器208と、ドライバ210とによって実施されるフレーム処理動作400を示すブロック図である。より詳細には、
図4は、合成器206と、DPU104とGPU106の両方との間の未来のフェンスおよびバッファ交換に基づく、統合および予想トランザクションモデルを示す。
図4の動作は、並列処理を最大にし、GPU106およびDPU104が層およびフレームを処理するために利用可能な時間を著しく増加させる。いくつかの態様では、未来のフェンスは、実際のハードウェアプログラミングの前に作成され、将来のフェンスは、後で、実際のハードウェア動作に関連する実際のフェンスに結びつけられる。いくつかの例では、未来のフェンスは、レガシーシステムと後方互換性がある、ポータブルオペレーティングシステムインターフェース(POSIX:portable operating system interface)メモリバリアおよびフェンス仕様の上に構築される。
【0056】
[0060] いくつかの態様では、動作400は、より早期の同期イベントを未来のフェンスに変換するように構成された統合モードを利用する。たとえば、
図3の、フレームを提示する306段階は、合成器206がDPU104をスケジュールするためのコマンド330を発行することができる前に、GPU106が合成層を完了したことを指示するためのGPUフェンスを合成器206が待っているので、フレームを組成する304段階の後に起こる。しかしながら、統合モードでは、HW組成器208は、それぞれ、どのGPUバッファおよびDPUバッファが、合成層およびフレームについて前に使用されたかを決定することができ、将来のGPUフェンスおよび将来のDPUフェンスを合成器206に提示することができ、したがって、合成器206は、フレームを処理するための並列命令をDPU104およびGPU106に提供することができる。DPU104およびGPU106のための命令を並列化することによって、フレームを処理するための時間の量が著しく低減され得る。
【0057】
[0061] より詳細には、フレームを準備する402段階において合成器206によって受信された将来のGPUフェンスは、GPU106が依然としてそれの層を合成している間、およびGPU106が実際のGPUフェンスを設定する前に、合成器206に、DPU104が層を合成することを始動するための命令をHW組成器208に送ることを行わせることになる。したがって、DPU104とGPU106の両方は、並列に動作することができ、これは、GPU106がそれ自体の割り当てられた層の合成を完了する間に、DPU104が、それが割り当てられた層のDPU104の処理(たとえば、DPU104の割り当てられた層を合成すること)を完了することができることを意味する。したがって、HW組成器208は、DPU104およびGPU106が層合成のためにスケジュールされた後に、ならびにDPU104およびGPU106のいずれかがそれらの層合成およびフレーム処理を完了するより前に、将来のDPUフェンスを生成し、それを合成器206に提供することができる。したがって、合成器206は、層の次のセットを合成することをスケジュールするために、DPU104がフレーム処理を完了するまで待つことを、もはや必要とされない。これは、合成器206が、フレームを準備する402段階をはるかに早期に始動することを可能にし、また、合成器206が、フレームを組成する404段階を、HW組成器206のコミットする422段階と並列に実施することを可能にする。したがって、層およびフレーム処理についての低減された、時間の量が、ユーザエクスペリエンスならびにプロセッサ性能を改善する。動作400のより詳細な説明は、以下の通りである。
【0058】
[0062] 最初に、合成器206は、第1のフレームの層の第1のセットについて、コミットする422プロシージャ中に、将来のDPUフェンスをHW組成器208から受信する。将来のDPUフェンスに応答して、合成器206は、第2のフレームの層の第2のセットを合成するためにGPU106およびDPU104をスケジュールするためのコマンド426(たとえば、presentOrValidateDisplay)をHW組成器208に送る。いくつかの態様では、フレームを準備する402段階において、合成器206は、GPU106によって使用された前の(たとえば、キャッシュされた)フェンスに基づいて、将来のGPUフェンスを生成する。キャッシュされたフェンスは、どのGPUバッファが前に使用されたかを識別する情報を含み得る。いくつかの例では、合成器206は、キャッシュされたフェンスを将来のGPUフェンスとして使用し、キャッシュされたフェンスに関する情報をコマンド426中に含め得る。
【0059】
[0063] コマンド426に応答して、HW組成器208は、
図3に関して上記で説明されたように、合成決定410を実施し、HWリソース412の限界を決定し得る。ドライバ210は、将来のGPUフェンスが、DPU104およびGPU106へのいくつかの層の引き渡し(committal)を検証するために、HW組成器208によって使用され得るので、IOCTLを検証する414段階を実施することを、もはや必要とされないことがあることに留意されたい。しかしながら、いくつかの態様では、ドライバ210は、IOCTLを検証する414段階を、フェイルセーフ機構として実施し得る。
【0060】
[0064] 合成決定410段階中に、HW組成器208は、将来のDPUフェンスとして使用されるべきキャッシュされたDPUフェンスをフェッチまたは受信し、どのDPUバッファが将来のDPUフェンスに関連するかを指示する情報とともに、将来のDPUフェンスを合成器206に受け渡し得る。コマンド426に対する応答428中で、HW組成器208は、将来のDPUフェンスと、どの層がGPU106によって処理されるべきであるか、およびどの層がDPU104によって処理されるべきであるかの指示とを合成器206に提供し得る。
【0061】
[0065] ここで、合成器206は、将来のGPUフェンスを有し、どの層がGPU106によって処理されることになるか、およびどの層がDPU104よって処理されることになるかを知っているので、合成器206は、合成器206がフレームを組成する404段階を実施する間に、HW組成器208に、コミットする422プロセスとドライバ210によるIOCTLをコミットする424プロセスとを始動するように命令することができる。したがって、合成器206が、416において、層合成のためにGPU106をスケジュールするとき、合成器206はまた、コミットする422プロセスを始めるためのコマンド430(たとえば、「presentDisplay」)を、HW組成器208に送り得、ここにおいて、コマンド430は、将来のGPフェンスと、対応するGPUバッファとの識別情報を含み得る。
【0062】
[0066] 上記で説明されたように、合成器206は、将来のGPUフェンスに対応するGPUバッファのGPUフェンスを、418においてフラッシュするか、またはクリアする、に進み得る。GPU106が、それが生成するようにスケジュールされていた合成層を完了すると、その層はGPUバッファに記憶され、合成層の完了を合成器206に指示するために、420において実際のGPUフェンスが設定される。ここで、将来のGPUフェンスは、2つのもの、すなわち、合成器206が特定の時間期間の間待つようにとの指示(たとえば、ここで待ち、先へ)と、実際のGPUフェンスがシグナリングされるとき、合成器206が特定のアクションを行うかまたは実施するようにとの指示とを提供し得る。いくつかの例では、動作(たとえば、動作400)を実施するプロセッサにとって1秒または複数秒が比較的長い時間であるので、将来のGPUフェンスの重みは1秒または複数秒であり得る。したがって、将来のGPUフェンスは、実際のGPUフェンスがシグナリングされるより前に満了しない可能性が最も高い、重みを与えられ得る。したがって、将来のGPUフェンスは、実際のGPUフェンスがシグナリングされるまで存在し、416においてGPU106をスケジュールするために使用されることになり、その時点において、将来のGPUフェンスが実際のGPUフェンスに結びつく(たとえば、それを置き換える)ことになる。
【0063】
[0067] 合成器(compositor)206は、次いで、実際のGPUフェンスと、対応するGPUバッファの指示(indication)とをHW組成器208に受け渡し得、したがって、DPU104は、GPU106によって合成された層をフェッチし、第2のフレームを完了することができる。ここで、DPU104は、GPU106がそれの合成された層を完了するより前に、層を合成し始めたので、DPU104は、比較的すぐに第2のフレームを完了することができる。第2のフレームが完了されると、ドライバ210は、実際のDPUフェンスと第2のフレームを含んでいる対応するDPUバッファとをHW組成器208に提供し得る。将来のGPUフェンスと同様に、実際のDPUフェンスは、将来のDPUフェンスに結びつき得る。したがって、その後、層の第3のセットが第3のフレームのために受信されたとき、HW組成器208は、第3のフレームのための将来のDPUフェンスとして、第2のフレームのために使用されたキャッシュされた実際のDPUフェンスを利用し得る。動作400は、次いで、第2のフレームについての、フレームを提示する406ステップと、ポスト合成408ステップとに進み得る。
【0064】
[0068]
図5は、表示のためのフレームを生成するための例示的な動作500を示すフローチャートである。本開示の範囲内のいくつかの態様では、動作500は、汎用プロセッサ、または上記で説明され、
図1に示されている処理システム120におけるプロセッサのうちのいずれか1つまたは複数、または説明される機能を行うための他の好適な手段によって動作可能であり得る。
図5に示されているステップまたはブロックの特定の順序は、本質的に例示的であり、本開示の様々な態様では、これらのステップまたはブロックは、任意の好適な順序で行われ得、いくつかの例は、同時に行われる2つまたはそれ以上のステップまたはブロックを含む。
【0065】
[0069] この例では、動作500は、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することによる、第1のブロック502において開始する。
【0066】
[0070] 動作500は、次いで、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすること、複数の層が第2のフレームに対応する、による、ブロック504に進む。
【0067】
[0071] 動作500は、次いで、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することによる、ブロック506に進む。
【0068】
[0072] 動作500は、次いで、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することによる、ブロック508に進む。
【0069】
[0073] 動作500は、次いで、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動すること、GPUプロセスが、第2のフェンスを生成することに応答して始動される、による、ブロック510に進む。
【0070】
[0074] 動作500は、次いで、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動すること、DPUプロセスが、第1のフェンスをフェッチすることに応答して始動される、による、ブロック512に進む。
【0071】
[0075] 動作500は、次いで、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することによる、ブロック514に進む。
【0072】
[0076] 動作500は、次いで、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することを行うことによる、ブロック516に進む。
【0073】
[0077] 動作500は、次いで、第2のフレームをハードウェア構成要素に提供することによる、ブロック518に進む。
【0074】
[0078] いくつかの態様では、GPUプロセスを始動することは、GPUプロセスより前に、1つまたは複数の層を合成するためのGPUパラメータを構成することを備え、DPUプロセスを始動することは、DPUプロセスより前に、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUパラメータを構成することを備える。
【0075】
[0079] いくつかの態様では、第2のフェンスは、1つまたは複数の層を合成することが保留中である期間(period)を指示する持続時間(time duration)を備え、第3のフェンスは、期間を中断することと、1つまたは複数の層を合成することを始動することとを行うように構成される。
【0076】
[0080] いくつかの態様では、第2のフレームの合成のために複数の層を処理するためにDPUとGPUの両方を使用することを決定することは、複数の層のうちのどれが複数の層のサブセットを形成するかを決定することをさらに備える。
【0077】
[0081] いくつかの態様では、第2のフレームを生成することは、第2のフレームをDPUバッファに記憶することと、DPUによる第2のフレームの解放(release)を指示する第4のフェンス(fourth fence)を設定することとをさらに備える。
【0078】
[0082] いくつかの態様では、第1のフェンスは、DPUによる第1のフレームの解放を指示する、DPUによって設定されたメモリ値である。
【0079】
[0083] いくつかの態様では、第3のフェンスは、DPUプロセスを始動する間に受信される。
【0080】
[0084] いくつかの態様では、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することは、1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信することをさらに備え、1つまたは複数の合成された層をフェッチすることは、1つまたは複数のGPUバッファから1つまたは複数の合成された層をフェッチすることをさらに備える。
【0081】
例示的な態様(Example Aspects)
[0085] 実装例が、以下の番号付けされた条項において説明される。
【0082】
[0086] 1.フレームを生成するための方法であって、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することと、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることと、複数の層が第2のフレームに対応する、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することと、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することと、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することと、GPUプロセスが、第2のフェンスを生成することに応答して始動される、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することと、DPUプロセスが、第1のフェンスをフェッチすることに応答して始動される、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することと、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することと、第2のフレームをハードウェア構成要素に提供することとを備える、方法。
【0083】
[0087] 2.GPUプロセスを始動することが、GPUプロセスより前に、1つまたは複数の層を合成するためのGPUパラメータを構成することを備え、DPUプロセスを始動することが、DPUプロセスより前に、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUパラメータを構成することを備える、態様1に記載の方法。
【0084】
[0088] 3.第2のフェンスは、1つまたは複数の層を合成することが保留中である期間を指示する持続時間を備え、第3のフェンスが、期間を中断することと、1つまたは複数の層を合成することを始動することとを行うように構成された、態様1および2のいずれかに記載の方法。
【0085】
[0089] 4.第2のフレームの合成のために複数の層を処理するためにDPUとGPUの両方を使用することを決定することは、複数の層のうちのどれが複数の層のサブセットを形成するかを決定することをさらに備える、態様1から3のいずれかに記載の方法。
【0086】
[0090] 5.第2のフレームを生成することが、第2のフレームをDPUバッファに記憶することと、DPUによる第2のフレームの解放を指示する第4のフェンスを設定することとをさらに備える、態様1から4のいずれかに記載の方法。
【0087】
[0091] 6.第1のフェンスが、DPUによる第1のフレームの解放を指示する、DPUによって設定されたメモリ値である、態様1から5のいずれかに記載の方法。
【0088】
[0092] 7.第3のフェンスが、DPUプロセスを始動する間に受信される、態様1から6のいずれかに記載の方法。
【0089】
[0093] 8.1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することが、1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信することをさらに備え、1つまたは複数の合成された層をフェッチすることが、1つまたは複数のGPUバッファから1つまたは複数の合成された層をフェッチすることをさらに備える、態様1から7のいずれかに記載の方法。
【0090】
[0094] 9.フレームを生成するために構成された装置であって、装置が、メモリと、メモリに結合されたプロセッサとを備え、プロセッサおよびメモリは、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することと、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることと、複数の層が第2のフレームに対応する、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することと、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することと、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することと、GPUプロセスが、第2のフェンスを生成することに応答して始動される、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することと、DPUプロセスが、第1のフェンスをフェッチすることに応答して始動される、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することと、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することと、第2のフレームをハードウェア構成要素に提供することとを行うように構成された、装置。
【0091】
[0095] 10.GPUプロセスを始動するように構成された、プロセッサおよびメモリが、GPUプロセスより前に、1つまたは複数の層を合成するためのGPUパラメータを決定するようにさらに構成され、DPUプロセスを始動するように構成された、プロセッサおよびメモリが、DPUプロセスより前に、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUパラメータを決定するようにさらに構成された、態様9に記載の装置。
【0092】
[0096] 11.第2のフェンスは、1つまたは複数の層を合成することが保留中である期間を指示する持続時間を備え、第3のフェンスが、期間を中断することと、1つまたは複数の層を合成することを始動することとを行うように構成された、態様9および10のいずれかに記載の装置。
【0093】
[0097] 12.第2のフレームの合成のために複数の層を処理するためにDPUとGPUの両方を使用することを決定するように構成された、プロセッサおよびメモリは、複数の層のうちのどれが複数の層のサブセットを形成するかを決定するようにさらに構成された、態様9から11のいずれかに記載の装置。
【0094】
[0098] 13.第2のフレームを生成するように構成された、プロセッサおよびメモリが、第2のフレームをDPUバッファに記憶することと、DPUによる第2のフレームの解放を指示する第4のフェンスを設定することとを行うようにさらに構成された、態様9から12のいずれかに記載の装置。
【0095】
[0099] 14.第1のフェンスが、DPUによる第1のフレームの解放を指示する、DPUによって設定されたメモリ値である、態様9から13のいずれかに記載の装置。
【0096】
[0100] 15.第3のフェンスが、DPUプロセスを始動する間に受信される、態様9から14のいずれかに記載の装置。
【0097】
[0101] 16.1つまたは複数の合成された層の完了を指示する第3のフェンスを受信するように構成された、プロセッサおよびメモリが、1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信するようにさらに構成され、1つまたは複数の合成された層をフェッチするように構成された、プロセッサおよびメモリが、1つまたは複数のGPUバッファから1つまたは複数の合成された層をフェッチするようにさらに構成された、態様9から15のいずれかに記載の装置。
【0098】
[0102] 17.フレームを生成するための装置であって、装置は、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信するための手段と、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチするための手段と、複数の層が第2のフレームに対応する、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定するための手段と、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチするための手段と、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、第2のフェンスを生成するための手段と、第2のフェンスを生成することに応答して、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動するための手段と、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動するための手段と、DPUプロセスが、第1のフェンスをフェッチすることに応答して始動される、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信するための手段と、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチするための手段と、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成するための手段と、第2のフレームをハードウェア構成要素に提供するための手段とを備える、装置。
【0099】
[0103] 18.GPUプロセスを始動するための手段が、GPUプロセスより前に、1つまたは複数の層を合成するためのGPUパラメータを構成するための手段を備え、DPUプロセスを始動するための手段が、DPUプロセスより前に、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUパラメータを構成するための手段を備える、態様17に記載の装置。
【0100】
[0104] 19.第2のフェンスは、1つまたは複数の層を合成することが保留中である期間を指示する持続時間を備え、第3のフェンスが、期間を中断することと、1つまたは複数の層を合成することを始動することとを行うように構成された、態様17および18のいずれかに記載の装置。
【0101】
[0105] 20.第2のフレームの合成のために複数の層を処理するためにDPUとGPUの両方を使用することを決定するための手段は、複数の層のうちのどれが複数の層のサブセットを形成するかを決定するための手段をさらに備える、態様17から19のいずれかに記載の装置。
【0102】
[0106] 21.第2のフレームを生成するための手段が、第2のフレームをDPUバッファに記憶するための手段と、DPUによる第2のフレームの解放を指示する第4のフェンスを設定するための手段とをさらに備える、態様17から20のいずれかに記載の装置。
【0103】
[0107] 22.第1のフェンスが、DPUによる第1のフレームの解放を指示する、DPUによって設定されたメモリ値である、態様17から21のいずれかに記載の装置。
【0104】
[0108] 23.DPUプロセスを始動する間に第3のフェンスを受信するための手段をさらに備える、態様17から22のいずれかに記載の装置。
【0105】
[0109] 24.1つまたは複数の合成された層の完了を指示する第3のフェンスを受信するための手段が、1つまたは複数の合成された層を含んでいる1つまたは複数のGPUバッファの指示を受信するための手段をさらに備え、1つまたは複数の合成された層をフェッチするための手段が、1つまたは複数のGPUバッファから1つまたは複数の合成された層をフェッチするための手段をさらに備える、態様17から23のいずれかに記載の装置。
【0106】
[0110] 25.フレームを生成するための方法を実施するための命令を記憶した非一時的コンピュータ可読記憶媒体であって、方法は、ディスプレイプロセッサユニット(DPU)バッファに記憶された第1のフレームがハードウェア構成要素によって消費されたことを指示する第1のフェンスを受信することと、第1のフェンスを受信することに応答して、アプリケーションバッファから複数の層をフェッチすることと、複数の層が第2のフレームに対応する、第2のフレームの合成のために複数の層を処理するためにDPUとグラフィックス処理ユニット(GPU)の両方を使用することを決定することと、複数の層を処理するためにDPUとGPUとを使用するという決定に基づいて、DPUバッファから第1のフェンスをフェッチすること、および第2のフェンスを生成することと、複数の層のサブセットから1つまたは複数の層を合成するためのGPUプロセスを始動することと、GPUプロセスが、第2のフェンスを生成することに応答して始動される、第2のフレームを生成するために、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUプロセスを始動することと、DPUプロセスが、第1のフェンスをフェッチすることに応答して始動される、1つまたは複数の合成された層の完了を指示する第3のフェンスを受信することと、第3のフェンスを受信することに応答して、DPUプロセスによって、1つまたは複数の合成された層をフェッチすること、およびDPUプロセスによって、1つまたは複数の合成された層と残りの層とに基づいて、第2のフレームを生成することと、第2のフレームをハードウェア構成要素に提供することとを備える、非一時的コンピュータ可読記憶媒体。
【0107】
[0111] 26.GPUプロセスを始動することが、GPUプロセスより前に、1つまたは複数の層を合成するためのGPUパラメータを構成することを備え、DPUプロセスを始動することが、DPUプロセスより前に、複数の層のうちの残りの層と1つまたは複数の合成された層とを合成するためのDPUパラメータを構成することを備える、態様25に記載の非一時的コンピュータ可読記憶媒体。
【0108】
[0112] 27.第2のフェンスは、1つまたは複数の層を合成することが保留中である期間を指示する持続時間を備え、第3のフェンスが、期間を中断することと、1つまたは複数の層を合成することを始動することとを行うように構成された、態様25および26に記載の非一時的コンピュータ可読記憶媒体。
【0109】
[0113] 28.第2のフレームの合成のために複数の層を処理するためにDPUとGPUの両方を使用することを決定することは、複数の層のうちのどれが複数の層のサブセットを形成するかを決定することをさらに備える、態様25から27のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【0110】
[0114] 29.第2のフレームを生成することが、第2のフレームをDPUバッファに記憶することと、DPUによる第2のフレームの解放を指示する第4のフェンスを設定することとをさらに備える、態様25から28のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【0111】
[0115] 30.第1のフェンスが、DPUによる第1のフレームの解放を指示する、DPUによって設定されたメモリ値である、態様25から29のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【0112】
追加の考慮事項(Additional Considerations)
[0116] いくつかの構成では、「通信する」、「通信すること」、および/または「通信」という(1つまたは複数の)用語は、本開示の範囲から必ずしも逸脱することなしに、「受信する」、「受信すること」、「受信」、および/あるいは他の関係するまたは好適な態様を指し得る。いくつかの構成では、「通信する」、「通信すること」、および/または「通信」という(1つまたは複数の)用語は、本開示の範囲から必ずしも逸脱することなしに、「送信する」、「送信すること」、「送信」、および/あるいは他の関係するまたは好適な態様を指し得る。
【0113】
[0117] 本開示内で、「例示的」という単語は、「例、事例、または例示として働くこと」を意味するために使用される。「例示的」として本明細書で説明されたいかなる実装形態または態様も、必ずしも本開示の他の態様よりも好ましいまたは有利であると解釈されるべきであるとは限らない。同様に、「態様」という用語は、本開示のすべての態様が、説明される特徴、利点、または動作モードを含むことを必要としない。「結合される」という用語は、本明細書では、2つの物体間の直接または間接的結合を指すために使用される。たとえば、物体Aが物体Bに物理的に接触し、物体Bが物体Cに接触する場合、物体Aおよび物体Cは、それらが互いに直接物理的に接触しない場合でも、やはり互いに結合されていると見なされ得る。たとえば、第1の物体が第2の物体と決して直接物理的に接触しなくても、第1の物体は第2の物体に結合され得る。「回路(circuit)」および「回路(circuitry)」という用語は、広く使用され、接続および構成されたとき、本開示で説明された機能の実施を可能にする電気デバイスおよび導体の両方のハードウェア実装形態を含むものとする。
【0114】
[0118] 本明細書に示されている構成要素、ステップ、特徴および/または機能のうちの1つまたは複数は、単一の構成要素、ステップ、特徴または機能に再構成され、および/または組み合わせられるか、あるいはいくつかの構成要素、ステップ、または機能で実施され得る。また、本明細書で開示される新規の特徴から逸脱することなく追加の要素、構成要素、ステップ、および/または機能が追加され得る。本明細書に示されている装置、デバイス、および/または構成要素は、本明細書で説明された方法、特徴、またはステップのうちの1つまたは複数を実施するように構成され得る。本明細書で説明された新規のアルゴリズムはまた、効率的にソフトウェアで実装されおよび/またはハードウェアに組み込まれ得る。
【0115】
[0119] 開示される方法におけるステップの特定の順序または階層は、例示的なプロセスの一例であることを理解されたい。設計上の選好に基づいて、本方法におけるステップの特定の順序または階層は並べ替えられ得ることを理解されたい。添付の方法クレームは、様々なステップの要素を例示的な順序で提示しており、方法クレーム中で特に具陳されていない限り、提示された特定の順序または階層に限定されるものではない。
【0116】
[0120] 以上の説明は、どんな当業者でも本明細書で説明された様々な態様を実践できるようにするために提供される。これらの態様への様々な修正は当業者には容易に明らかであり、本明細書で定義された一般原理は他の態様に適用され得る。したがって、特許請求の範囲は、本明細書に示された態様に限定されるものではなく、特許請求の範囲の言い回しに矛盾しない全範囲を与えられるべきであり、ここにおいて、単数形の要素への言及は、そのように明記されていない限り、「唯一無二の」を意味するものではなく、「1つまたは複数の」を意味するものである。別段に明記されていない限り、「いくつか(some)」という用語は1つまたは複数を指す。項目のリスト「のうちの少なくとも1つ」を指す句は、単一のメンバーを含む、それらの項目の任意の組合せを指す。一例として、「a、b、またはcのうちの少なくとも1つ」は、a、b、c、aおよびb、aおよびc、bおよびc、ならびにa、bおよびcを包含するものとする。当業者に知られている、または後に知られることになる、本開示全体にわたって説明された様々な態様の要素のすべての構造的および機能的等価物は、参照により本明細書に明確に組み込まれ、特許請求の範囲に包含されるものである。その上、本明細書で開示されるいかなることも、そのような開示が特許請求の範囲に明示的に具陳されているかどうかにかかわらず、公に供されるものではない。いかなるクレーム要素も、その要素が「ための手段」という句を使用して明確に具陳されていない限り、または方法クレームの場合には、その要素が「ためのステップ」という句を使用して、または図に示されている単に「ブロック」として具陳されていない限り、米国特許法第112条(f)の規定の下で解釈されるべきではない。
【0117】
[0121] 発明を実施するための形態において説明されたこれらの装置および方法は、(「要素」と総称される)様々なブロック、モジュール、構成要素、回路、ステップ、プロセス、アルゴリズムなどによって添付の図面に示されている。これらの要素は、ハードウェア、ソフトウェア、またはそれらの組合せを使用して実装され得る。そのような要素がハードウェアとして実装されるのかソフトウェアとして実装されるのかは、特定の適用例および全体的なシステムに課される設計制約に依存する。
【0118】
[0122] 例として、要素、または要素の任意の部分、または要素の任意の組合せが、1つまたは複数のプロセッサを含む「処理システム」を用いて実装され得る。プロセッサの例は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理デバイス(PLD)、状態機械、ゲート論理、個別ハードウェア回路、および本開示全体にわたって説明される様々な機能を実施するように構成された他の好適なハードウェアを含む。処理システム中の1つまたは複数のプロセッサはソフトウェアを実行し得る。ソフトウェアは、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語などの名称にかかわらず、命令、命令セット、コード、コードセグメント、プログラムコード、プログラム、サブプログラム、ソフトウェアモジュール、アプリケーション、ソフトウェアアプリケーション、ソフトウェアパッケージ、ファームウェア、ルーチン、サブルーチン、オブジェクト、実行ファイル、実行スレッド、プロシージャ、関数などを意味すると広く解釈されたい。ソフトウェアは、処理システム中に含まれる非一時的コンピュータ可読媒体上に記憶され得る。
【0119】
[0123] したがって、1つまたは複数の例では、説明される機能は、ハードウェア、ソフトウェア、またはそれらの組合せで実装され得る。ソフトウェアで実装される場合、機能は、コンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体上に1つもしくは複数の命令またはコードとして符号化され得る。コンピュータ可読媒体は、コンピュータ記憶媒体を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM(登録商標)、PCM(相変化メモリ)、フラッシュメモリ、CD-ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。