JP6352546B2 - 非整列ブロック転送動作の処理 - Google Patents

非整列ブロック転送動作の処理 Download PDF

Info

Publication number
JP6352546B2
JP6352546B2 JP2017530746A JP2017530746A JP6352546B2 JP 6352546 B2 JP6352546 B2 JP 6352546B2 JP 2017530746 A JP2017530746 A JP 2017530746A JP 2017530746 A JP2017530746 A JP 2017530746A JP 6352546 B2 JP6352546 B2 JP 6352546B2
Authority
JP
Japan
Prior art keywords
blt
alignment
region
command
width
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2017530746A
Other languages
English (en)
Other versions
JP2017539030A5 (ja
JP2017539030A (ja
Inventor
グルバー、アンドリュー・イバン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2017539030A publication Critical patent/JP2017539030A/ja
Publication of JP2017539030A5 publication Critical patent/JP2017539030A5/ja
Application granted granted Critical
Publication of JP6352546B2 publication Critical patent/JP6352546B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Advance Control (AREA)
  • Bus Control (AREA)
  • Image Processing (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Description

[0001]本開示は、グラフィックス処理に関し、より詳細には、グラフィックスプロセッサを用いてブロック転送(BLT)動作を実行するための技法に関する。
[0002]グラフィックス処理ユニット(GPU)は、しばしば、ソース面(source surface)の領域を宛先面(destination surface)の領域に複製すること、または複数のソース面の対応する領域を宛先面の単一の対応する領域に合成することを行うためにBLT動作を実行する。GPUは、BLT動作の一部としてメモリとの間で面を書き込み、読み取るための特殊なハードウェアを含み得る。面を書き込み、読み取るためのGPUハードウェアは、BLTコマンドをうまくサービスするために満たされる必要がある様々な整列制約を有し得る。BLTコマンドが、そのような整列制約を満たさない場合、GPUハードウェアは、BLTコマンドをサービスすることができないことがある。
[0003]本開示では、非整列BLTコマンドを処理するための技法について説明する。非整列BLTコマンドは、整列制約されたGPUの整列制約を満たさず、したがって、GPUによって処理されることができないことがあるBLTコマンドを指す(refer to)ことがある。本開示の技法は、非整列BLTコマンドを複数の整列BLTコマンドに変換すること、ここで、複数の整列BLTコマンドは、非整列BLTコマンドによって生成された(produced)であろうメモリ状態と同じ結果として生じるメモリ状態を集合的に生成し得る、を伴い得る。ただし、非整列BLTコマンドとは異なり、複数の整列BLTコマンドは、GPUの整列制約を満たし、したがって、GPUによって処理されることが可能であり得る。
[0004]BLTコマンドを処理するためにGPUを使用することは、中央処理ユニット(CPU)を使用することと比較して、BLTコマンドの実行を加速し、および/またはBLTコマンドの実行に関連する電力消費量を低減し得る。したがって、非整列BLTコマンドを複数の整列BLTコマンドに変換することによって、比較的低電力のGPU加速BLT処理の利益が、下にある(underlying)非整列面をCPUが前処理および/または後処理する必要なしに非整列BLTコマンドのために達成され得る。このようにして、整列制約されたGPUベースのシステムにおいて非整列BLTコマンドを処理することに関連するパフォーマンスおよび/または電力消費量が改善され得る。
[0005]一例では、本開示では、1つまたは複数のプロセッサを用いて、非整列BLTコマンドを複数の整列BLTコマンドに変換することを含む方法について説明する。
[0006]別の例では、本開示では、非整列BLTコマンドを複数の整列BLTコマンドに変換するように構成された1つまたは複数のプロセッサを含むデバイスについて説明する。
[0007]別の例では、本開示では、非整列BLTコマンドを受信するための手段を含む装置について説明する。本装置は、非整列BLTコマンドを複数の整列BLTコマンドに変換するための手段をさらに含む。
[0008]別の例では、本開示では、実行されたとき、1つまたは複数のプロセッサに、非整列BLTコマンドを複数の整列BLTコマンドに変換することを行わせる命令を記憶したコンピュータ可読記憶媒体について説明する。
[0009]本開示の1つまたは複数の例の詳細を添付の図面および以下の説明に記載する。本開示の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
[0010]本開示のBLT動作処理技法を実施するために使用され得る例示的なコンピューティングデバイスを示すブロック図。 [0011]図1のコンピューティングデバイスの部分(portions)をさらに詳細に示すブロック図。 [0012]本開示による、例示的な単一のソースBLT動作を示す概念図。 [0013]本開示による、例示的な複数のソースBLT動作を示す概念図。 [0014]図1および図2の例示的なコンピューティングデバイスのための例示的なコマンド処理フローを示す概念図。 [0015]本開示による、面の線を組み合わせることによって整列面を生成するための例示的な技法を示す概念図。 [0016]図6に示した技法を使用した非整列BLT動作の2つの整列BLT動作への例示的な変換を示す概念図。 図6に示した技法を使用した非整列BLT動作の2つの整列BLT動作への例示的な変換を示す概念図。 [0017]本開示による、複数の整列仮想面を定義するための例示的な技法を示す概念図。 [0018]本開示による、図9において定義されている複数の整列仮想面を使用して非整列BLT動作の2つの整列BLT動作への例示的な変換を示す概念図。 本開示による、図9において定義されている複数の整列仮想面を使用して非整列BLT動作の2つの整列BLT動作への例示的な変換を示す概念図。 [0019]本開示による、非整列BLT動作を処理するための例示的な技法を示す流れ図。
[0020]本開示では、非整列ブロック転送(unaligned block transfer)(BLT)コマンドを処理するための技法について説明する。非整列BLTコマンドは、整列制約されたグラフィックス処理ユニット(GPU)の整列制約を満たさず、したがって、GPUによって処理されることができないことがあるBLTコマンドを指すことがある。本開示の技法は、非整列BLTコマンドを複数の整列BLTコマンドに変換すること、ここで、複数の整列BLTコマンドは、非整列BLTコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を集合的に生成し得る、を伴い得る。ただし、非整列BLTコマンドとは異なり、複数の整列BLTコマンドは、GPUの整列制約を満たし、したがって、GPUによって処理されることが可能であり得る。
[0021]BLTコマンドを処理するためにGPUを使用することは、中央処理ユニット(CPU)を使用することと比較して、BLTコマンドの実行を加速し、および/またはBLTコマンドの実行に関連する電力消費量を低減し得る。したがって、非整列BLTコマンドを複数の整列BLTコマンドに変換することによって、比較的低電力のGPU加速BLT処理の利益が、下にある非整列面をCPUが前処理および/または後処理する必要なしに非整列BLTコマンドのために達成され得る。このようにして、整列制約されたGPUベースのシステムにおいて非整列BLTコマンドを処理することに関連するパフォーマンスおよび/または電力消費量が改善され得る。
[0022]BLTコマンドは、GPUにBLT動作を実行するように命令するコマンドを指すことがある。BLT動作は、ソース面の領域を宛先面の領域に複製すること、または複数のソース面の対応する領域を宛先面の単一の対応する領域に合成することを伴う動作を指すことがある。ソース面の領域は、ソース領域と呼ばれることがあり、宛先面の領域は、宛先領域と呼ばれることがある。ソース領域および宛先領域は、それらの領域内のピクセルに関して複製および合成することが行われることを示すために、代替的に、BLT領域および/または複製領域と呼ばれることがある。BLT領域の各々は、それぞれのBLT領域を含む面の連続するサブセットであり得る。いくつかの例では、BLT領域は、長方形の領域であり得る。
[0023]GPUは、BLT動作の一部としてメモリとの間で面を書き込み読み取る(writing and reading surfaces)ための特殊なハードウェアを含み得る。ハードウェアは、面の各線の開始が所定の整列幅の整数倍であるメモリアドレスに対応することを必要とする整列制約を有し得る。整列制約を満たす面は、整列面であると言われ、一方、整列制約を満たさない面は、非整列面であると言われる。
[0024]しばしば、コンパイラまたはアプリケーションは、BLT動作を実行しているであろう特定のGPUハードウェアの整列制約へのアクセスを有し得、したがって、結果として生じる面が整列されるように整列制約に基づいてBLT命令を生成し得る。ただし、すべてのシステムが、GPUの整列制約をコンパイラまたはアプリケーションに利用可能にするとは限らない。または、利用可能な場合であっても、いくつかのコンパイラまたはアプリケーションは、様々な理由で(たとえば、コンパイラまたはアプリケーションの複雑さを低減するために)そのような整列制約を満たすために、生成されたコードを最適化しないことを決定し得る。
[0025]BLT動作のための1つまたは複数の面がGPUハードウェアの整列制約を満たさない場合、GPUドライバは、BLT動作のパフォーマンスを加速するためにGPUを直接使用することができないことがある。代わりに、GPUドライバは、中央処理ユニット(CPU)を用いてBLT動作を実行する必要があり得る。他の場合には、GPUドライバは、非整列面を整列面に複製するためにCPUを使用し、整列面に対してBLT動作を実行するためにGPUを使用し、非整列面にBLT動作の結果を複製し戻すためにCPUを使用し得る。いずれの場合も、BLT動作自体を実行するかまたは非整列面と整列面との間で変換するためにCPUを使用することは、BLT動作の電力消費量を増加させ、BLT動作のパフォーマンスを低減させる。
[0026]整列BLTコマンドは、BLTコマンドに関連する面のすべてが整列面であるBLTコマンドを指すことがある。非整列BLTコマンドは、面のうちの少なくとも1つが非整列面であるBLTコマンドを指すことがある。同様に、整列BLT動作は、BLT動作に関連する面のすべてが整列面であるBLT動作を指すことがあり、非整列BLT動作は、面のうちの少なくとも1つが非整列面であるBLTコマンドを指すことがある。
[0027]概念的に、整列面は、面の各線の開始が所定の整列幅の整数倍であるメモリアドレスに対応する面を指すことがある。所定の整列幅は、いくつかの例では、BLT動作の適切な実行のためにGPUメモリアクセスハードウェアによって必要とされる整列幅に対応し得る。整列境界は、所定の整列幅の整数倍であるメモリアドレスを指すことがある。
[0028]面は、面ポインタと、面幅パラメータと、面高さパラメータとによって定義され得る。面ポインタは、面の開始に対応するメモリアドレスを示し(または指し)得る。面幅パラメータ(またはストライドパラメータ)は、面中の各線の幅を示し得る。面高さパラメータは、面中に何本の線が含まれるかを示し得る。
[0029]整列面は、(1)面ポインタが整列境界を指し、(2)面幅が整列幅の整数倍である面を指すことがある。これらの条件のいずれかが満たされない場合、面は非整列であると言われる。
[0030]本開示の第1の態様によれば、条件(1)が満たされ、条件(2)が満たされない(すなわち、BLTコマンドの下にある面のための面幅が整列幅の整数倍でない)場合、グラフィックスドライバは、BLTコマンドに関連するソース面と宛先面との各々について、整列幅の整数倍である面幅を有する整列仮想面を形成するために、それぞれの面の複数の線を単一の線に組み合わせ得る。仮想面のための面幅が整列幅の整数倍であるので、仮想面は、整列制約されたGPUによって処理され得る整列面である。
[0031]しかしながら、仮想面を形成するために線を組み合わせることにより、BLT領域(すなわち、コピーおよび/または合成されるべき領域)をもはや連続する領域でない(たとえば、もはや単一の連続する矩形でない)ように変換するようになり得る。たとえば、着信(incoming)BLTコマンドに関連するソースBLT領域が、単一の連続する矩形である場合、ソース面を仮想ソース面に変換することは、ソースBLT領域を、互いに連続しないことがある2つの別個の矩形に変換し得る。一般に、単一のBLT動作は、不連続のBLT領域に対して実行されないことがある。
[0032]この問題に対処するために、グラフィックスドライバは、変換されたBLT領域の連続するサブセットを決定し、複数のBLTコマンドを生成し得、ここで、BLTコマンドの各々は、GPUに、変換されたBLT領域の連続するサブセットの各1つに対してBLT動作を実行させる。たとえば、長方形ソースBLT領域が2つの長方形ソースBLT領域に変換される場合、グラフィックスドライバは、第1に長方形ソースBLT領域のための第1のBLTコマンドと第2の長方形ソースBLT領域のための第2のBLTコマンドとを生成し得る。
[0033]複数のBLTコマンドのためのソース面と宛先面との各々は、1つまたは複数の整列仮想面に対応し、それによって、複数のBLTコマンドを整列BLTコマンドにさせ得る。複数の整列BLTコマンドは、ソースおよび宛先BLT領域全体を集合的に処理し、それによって、単一の非整列BLTコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。このようにして、グラフィックスドライバは、非整列BLTコマンドを整列制約されたGPUによってサービスされ得る複数の整列BLTコマンドに変換し得る。
[0034]本開示の第2の態様によれば、条件(1)および(2)の両方が満たされない(すなわち、面ポインタが整列境界を指さず、BLTコマンドの下にある面のための面幅が整列幅の整数倍でない)場合、グラフィックスドライバは、本開示の第1の態様に関して上記で説明したのと同様の方法で非整列面の幅を広げ得る。これにより、広げられた面幅が、整列幅に対応するようになる。ただし、広げられた面の面ポインタが整列境界において開始していないので、広げられた面は依然として整合されない。
[0035]この問題に対処するための1つの手法は、シフトされた面ポインタが最も近い整列境界を指すように面ポインタをシフトすることである。本開示の第1の態様に関して上記で説明したことと同様に、面を広げることは、BLT領域を複数の連続するサブセットに変換し得、グラフィックスドライバは、複数のBLTコマンドを生成し得、ここで、BLTコマンドの各々は、GPUに、変換されたBLT領域の連続するサブセットの各1つに対してBLT動作を実行させる。ただし(However)、仮想面の幅が同じままである場合、面ポインタをシフトすることにより、面の境界の近くにある変換されたBLT領域サブセットが仮想面の端にラップアラウンドされるようになり得る。言い換えれば、そのような変換されたBLT領域サブセットは、もはや連続でないことがあり、単一のBLT動作によってサービスされることができないことがある。
[0036]この問題に対処するために、グラフィックスドライバは、ソース面と宛先面との各々のための2つの仮想面を生成し得る。2つの仮想面は、同じ広げられた面幅を有するが、別個の(separate)整列面ポインタを有し得る。仮想面の各々のための面ポインタは、非整列面ポインタのいずれかの側にある整列境界に対応し得る。たとえば、GPUドライバは、非整列面ポインタよりも小さい整列境界を指す第1の仮想面のための面ポインタを生成し、非整列面ポインタよりも大きい整列境界を指す第2の仮想面のための面ポインタを生成し得る。
[0037]変換されたBLT領域サブセットは、仮想面のうちの1つの端をラップアラウンドする場合、他の仮想面の端をラップアラウンドしないことになるだろう。したがって、変換されたBLT領域サブセットの各々のためのBLTコマンドを生成するとき、グラフィックスドライバは、各BLTコマンドのための仮想面を選択し得、ここで、対応する変換されたBLT領域サブセットは、仮想面の端をラップアラウンドしない。言い換えれば、グラフィックスドライバは、変換されたBLT領域サブセットの各々を連続する領域(たとえば、連続する長方形領域)として表わされることを可能にする仮想面を選択し得る。
[0038]複数のBLTコマンドのためのソース面と宛先面との各々は、複数の整列仮想面のうちの1つに対応し、それによって、複数のBLTコマンドを整列BLTコマンドにさせ得る。複数の整列BLTコマンドは、ソースおよび宛先BLT領域全体を集合的に処理し、それによって、単一の非整列BLTコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。
[0039]非整列BLTコマンドとは異なり、複数の整列BLTコマンドは、整列制約されたグラフィックス処理ユニット(GPU)によって処理されることが可能であり得、これは、中央処理ユニット(CPU)と比較して、BLTコマンドの実行を加速すること、および/またはBLTコマンドの実行に関連する電力消費量を低減することが可能であり得る。非整列BLTコマンドを複数の整列BLTコマンドに変換することによって、比較的低電力のGPU加速BLT処理の利益が、下にある非整列面をCPUが前処理および/または後処理する必要なしに非整列BLTコマンドのために達成され得る。このようにして、非整列BLTコマンドを処理することに関連するパフォーマンスおよび/または電力消費量が改善され得る。
[0040]図1は、本開示のBLT動作処理技法を実施するために使用され得る例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはビデオゲーム機、ワイヤレス通信デバイス(たとえば、携帯電話、セルラ電話、衛星電話、および/または携帯電話送受話器など)、陸線電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレイヤ、ビデオプレイヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、または、グラフィカルデータを処理し、および/もしくは表示する任意の他のタイプのデバイスを備え得る。
[0041]図1の例に示すように、コンピューティングデバイス2は、ユーザ入力インターフェース4と、CPU6と、メモリサブシステム8と、GPU10と、ディスプレイインターフェース12と、ディスプレイ14と、バス16とを含む。ユーザ入力インターフェース4、CPU6、メモリサブシステム8、GPU10およびディスプレイインターフェース12は、バス16を使用して相互に通信し得る。図1に示す異なる構成要素同士の間のバスおよび通信インターフェースの特定の構成は単なる例示であり、本開示の本技法を実装するために、同じもしくは異なる構成要素を備えたコンピューティングデバイスおよび/または他のグラフィックス処理システムの他の構成が使用され得ることに留意されたい。
[0042]ユーザ入力インターフェース4により、1つまたは複数のユーザ入力デバイス(図示せず)をコンピューティングデバイス2に通信可能に結合することが可能になり得る。ユーザ入力デバイスにより、ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に入力を与えることが可能になり得る。例示的なユーザ入力デバイスは、キーボード、マウス、トラックボール、マイクロフォン、タッチパッド、タッチセンシティブまたはプレゼンスセンシティブディスプレイ、あるいは別の入力デバイスを含む。タッチセンシティブまたはプレゼンスセンシティブディスプレイがユーザ入力デバイスとして使用される例では、ユーザ入力インターフェース4の全部または一部は、ディスプレイ14に統合され得る。
[0043]CPU6は、コンピューティングデバイス2の動作を制御する汎用または特殊用途プロセッサを備え得る。CPU6は、1つまたは複数のソフトウェアアプリケーションを実行し得る。ソフトウェアアプリケーションは、たとえば、ビデオゲームアプリケーション、グラフィックスアプリケーション、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレイヤアプリケーション、グラフィカルユーザインターフェースアプリケーション、オペレーティングシステム、あるいは任意の他のタイプのソフトウェアアプリケーションまたはプログラムを含み得る。
[0044]CPU6上で実行するソフトウェアアプリケーションは、ディスプレイ14へのグラフィックスデータのレンダリングを行わせるようにGPU10に命令する1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、Open Graphics Library(OpenGL(商標登録))アプリケーションプログラミングインターフェース(API)、Open Graphics Library Embedded System(OpenGL ES)API、Direct3D API、DirectX API、RenderMan API、WebGL API、または任意の他の公開の、もしくはプロプライエタリの標準的なグラフィックスAPIなどのグラフィックスAPIに準拠し得る。グラフィックスレンダリング命令を処理するために、CPU6は、グラフィックスデータのレンダリングの一部または全部をGPU10に実行させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU10に発行し得る。いくつかの例では、レンダリングされることになるグラフィックスデータは、たとえば、点、線、三角形、四角形、トライアングルストリップ、パッチなど、グラフィックスプリミティブのリストを含み得る。
[0045]メモリサブシステム8は、コンピューティングデバイス2の中の他の構成要素から受信されたメモリアクセス要求にサービスするように構成され得る。たとえば、メモリサブシステム8は、CPU6、GPU10、および/またはディスプレイインターフェース12からのメモリアクセス要求にサービスし得る。メモリアクセス要求は、読取りアクセス要求と書込みアクセス要求とを含み得る。メモリサブシステム8は、バス16を介してCPU6、GPU10、ユーザ入力インターフェース4、およびディスプレイインターフェース12に通信可能に結合される。
[0046]メモリサブシステム8は、メモリコントローラ20とメモリ22とを含む。メモリコントローラ20は、メモリ22に入りメモリ22から出るデータの転送を容易にする。たとえば、メモリコントローラ20は、メモリ読取り要求とメモリ書込み要求とをCPU6および/またはGPU10から受信し、コンピューティングデバイス2の中の構成要素にメモリサービスを提供するために、メモリ22に関するそのような要求にサービスし得る。
[0047]メモリコントローラ20は、専用のメモリバスを介してメモリ22に、および、バス16を介して他の構成要素(たとえば、CPU6およびGPU10)に通信可能に結合される。メモリコントローラ20は、図1の例示的なコンピューティングデバイス2では、CPU6とメモリ22の両方とは別の処理モジュールとして示されているが、他の例では、メモリコントローラ20の機能の一部または全部は、CPU6、GPU10、およびメモリ22の1つもしくは複数で実装され得る。
[0048]メモリ22は、CPU6による実行のためにアクセス可能なプログラムモジュールおよび/もしくは命令ならびに/またはCPU6上で実行されるプログラムが使用するためのデータを記憶し得る。たとえば、メモリ22は、ユーザアプリケーションと、それらのアプリケーションに関連するグラフィックスデータとを記憶し得る。メモリ22は、コンピューティングデバイス2の他の構成要素が使用するための情報、および/またはそれらによって生成された情報を記憶し得る。たとえば、メモリ22は、GPU10のデバイスメモリとして働き得、GPU10によって演算されることになるデータ、ならびにGPU10によって実行される演算の結果生じるデータを記憶し得る。たとえば、メモリ22は、ソース面、宛先面、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの、面の任意の組合せを記憶し得る。さらに、メモリ22は、GPU10によって処理するためのコマンドストリームを記憶し得る。メモリ22は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、同期式ダイナミックランダムアクセスメモリ(SDRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体または光記憶媒体などの1つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含み得る。いくつかの例では、メモリ22は、たとえば、DDR1 SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAMなどのダブルデータレート(DDR)SDRAMであり得る。
[0049]GPU10は、CPU6によってGPU10に出されたコマンドを実行するように構成され得る。GPU10によって実行されるコマンドは、グラフィックスコマンド、描画呼出しコマンド、GPU状態プログラミングコマンド、BLTコマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含み得る。BLTコマンドは、たとえば、メモリ複製コマンド、メモリ合成コマンド、およびブリットコマンド(すなわち、ブロック転送コマンド)を含み得る。
[0050]いくつかの例では、GPU10は、CPU6から受信されたグラフィックスデータをレンダリングし、表示するように構成され得る。そのような例では、CPU6は、ディスプレイ14にレンダリングするためのグラフィックスデータをGPU10に提供し、GPU10に1つまたは複数のグラフィックスコマンドを発行し得る。グラフィックスコマンドとしては、たとえば、描画呼出しコマンド、GPU状態プログラミングコマンド、BLTコマンド、ブリットコマンドなどがあり得る。グラフィックスデータは、頂点バッファ、テクスチャデータ、面データなどを含み得る。いくつかの例では、CPU6は、コマンドとグラフィックスデータとをGPU10によってアクセスされ得るメモリ22に書き込むことによって、コマンドとグラフィックスデータとをGPU10に提供し得る。
[0051]さらなる例では、GPU10は、CPU6上で実行されるアプリケーションのために汎用コンピューティングを実行するように構成され得る。そのような例では、CPU6は、GPU10に汎用コンピューティングデータを提供し、GPU10に1つまたは複数の汎用コンピューティングコマンドを発行し得る。汎用コンピューティングコマンドは、たとえば、カーネル実行コマンド、BLTコマンドなどを含み得る。いくつかの例では、CPU6は、コマンドとグラフィックスデータとをGPU10によってアクセスされ得るメモリ22に書き込むことによって、コマンドと汎用コンピューティングデータとをGPU10に提供し得る。
[0052]GPU10は、いくつかの例では、CPU6よりも効率的なベクトル演算の処理を行う高度に並列な構造を伴って構築され得る。たとえば、GPU10は、複数の頂点、制御点、画素および/または他のデータについて並列の方式で演算するように構成された複数の処理要素を含み得る。GPU10の高度並列特性により、いくつかの例では、GPU10が、CPU6を使用して画像をレンダリングするよりも迅速にグラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)のグラフィックスシーン)をディスプレイ14上にレンダリングすることが可能になり得る。加えて、GPU10の高度に並列な性質により、GPU10が、CPU6よりも迅速に、汎用コンピューティングアプリケーションのためのいくつかのタイプのベクトル演算と行列演算とを処理することが可能になり得る。
[0053]いくつかの例では、GPU10は、コンピューティングデバイス2のマザーボードに統合され得る。他の事例では、GPU10は、コンピューティングデバイス2のマザーボード中のポートに取り付けられたグラフィックスカード上に存在し得、または場合によっては、コンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる例では、GPU10は、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上に配置され得る。GPU10は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の同等の集積回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサを含み得る。
[0054]いくつかの例では、GPU10は、メモリ22のすべてまたは一部分にキャッシングサービスを提供し得るGPUキャッシュを含み得る。そのような例では、GPU10は、オフチップメモリではなくローカルストレージを使用してデータをローカルに処理するのにキャッシュを使用し得る。これにより、GPU10が、大量のバストラフィックを受けることがある、バス16を介してGPU10がメモリ22にアクセスする必要を減らすことによって、より効率的な方法で動作することが可能になり得る。しかしながら、いくつかの例では、GPU10は、別個のキャッシュを含まず、代わりに、バス16を介してメモリ22を利用し得る。GPUは、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つまたは複数の揮発性または不揮発性メモリあるいはストレージデバイスを含み得る。
[0055]CPU6および/またはGPU10は、レンダリングされた画像データをメモリ22内に割り振られたフレームバッファ内に記憶し得る。ディスプレイインターフェース12は、データをフレームバッファから取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ14を構成し得る。いくつかの例では、ディスプレイインターフェース12は、フレームバッファから取り出されたデジタル値を、ディスプレイ14によって消費可能なアナログ信号に変換するように構成されたデジタルアナログコンバータ(DAC)を含み得る。他の例では、ディスプレイインターフェース12は、処理のために、デジタル値をディスプレイ14に直接渡し得る。
[0056]ディスプレイ14は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED:surface-conduction electron-emitted display)、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ14は、コンピューティングデバイス2内に統合され得る。たとえば、ディスプレイ14は、携帯電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイ14は、有線またはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ14は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
[0057]バス16は、第1世代、第2世代、および第3世代のバス構造ならびにバスプロトコルと、共有されたバス構造およびバスプロトコルと、ポイントツーポイントバス構造およびバスプロトコルと、一方向バス構造およびバスプロトコルと、双方向バス構造およびバスプロトコルとを含む、バス構造およびバスプロトコルの任意の組合せを使用して実装され得る。バス16を実装するために使用され得る様々なバス構造およびバスプロトコルの例としては、たとえば、HyperTransportバス、InfiniBandバス、Advanced Graphics Portバス、Peripheral Component Interconnect(PCI)バス、PCI Expressバス、Advanced Microcontroller Bus Architecture(AMBA)Advanced High−performance Bus(AHB)、AMBA Advanced Peripheral Bus(APB)、およびAMBA Advanced eXentisible Interface(AXI)バスがある。他のタイプのバス構造およびプロトコルも使用され得る。
[0058]GPU10は、BLTコマンドを受信し、対応するBLT動作を実行することによってBLTコマンドをサービスし得る。場合によっては、GPU10は、BLT動作を実行するように構成されたメモリアクセスハードウェアを含み得、このハードウェアは、BLT動作をうまく(successfully)サービスするために満たされる必要がある様々な整列制約を有し得る。たとえば、そのようなメモリアクセスハードウェアは、BLT動作のための面の一部または全部が整列されていることを必要とするように構成され得る。
[0059]整合されるべき面について、メモリアクセスハードウェアは、(1)面のための面ポインタが整列境界を指すこと、および(2)面のための面幅が整列幅の整数倍であることを必要とし得る。これらの条件のいずれかが満たされない場合、面は非整列であると言われる。
[0060]場合によっては、CPU6上で実行されているソフトウェアアプリケーションは、非整列BLTコマンドを発行し得る。非整列BLTコマンドは、ソフトウェアアプリケーションをコンパイルしたコンパイラまたは書き込まれたソフトウェアアプリケーションが、コンパイルおよび/またはランタイム時にコンパイラまたはアプリケーションにとって利用可能な整列制約を有しなかったか、あるいは(たとえば、コンパイラまたはアプリケーションの複雑さを低減するために)整列制約を満たすために生成されたコードを最適化することを決定しなかったときに生じ得る。BLTコマンドが非整列であるので、GPU10は、そのようなコマンドを直接サービスすることができないことがある。
[0061]本開示の例によれば、CPU6および/またはGPU10は、非整列BLTコマンドを複数の整列BLTコマンドに変換すること、ここで、複数の整列BLTコマンドは、非整列BLTコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を集合的に生成し得る、を行うように構成され得る。複数の整列BLTコマンドは、GPU10の整列制約を満たし、したがって、GPU10によって処理されることが可能であり得る。このようにして、比較的低電力のGPU加速BLT処理の利益が非整列BLTコマンドについて取得され、それによって、非整列BLTコマンドを処理することに関連するパフォーマンスおよび/または電力消費量を改善し得る。
[0062]図2は、図1中のコンピューティングデバイス2の部分をさらに詳細に示すブロック図である。図2に示すように、CPU6はGPU10とメモリサブシステム8とに通信可能に結合され、GPU10はCPU6とメモリサブシステム8とに通信可能に結合される。いくつかの例では、GPU10は、CPU6とともにマザーボード上に統合され得る。追加の例では、GPU10は、CPU6を含むマザーボードのポート中に設置されたグラフィックスカード上で実装され得る。さらなる例では、GPU10は、CPU6と相互作用するように構成された周辺デバイス内に組み込まれ得る。追加の例では、GPU10は、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上に配置され得る。
[0063]図2の例示的なシステムでは、CPU6は、ソフトウェアアプリケーション24と、グラフィックスAPI26と、GPUドライバ28と、オペレーティングシステム30とを実行する。ソフトウェアアプリケーション24は、グラフィックス画像を表示させる1つもしくは複数の命令および/または非グラフィックスタスク(たとえば、汎用コンピューティングタスク)をGPU10上で実行させる1つもしくは複数の命令を含み得る。いくつかの例では、ソフトウェアアプリケーション24は、1つまたは複数のBLT命令を含み得、これは、代替的に、BLTコマンド、ソフトウェアBLTコマンド、またはアプリケーションBLTコマンドと呼ばれることがある。ソフトウェアアプリケーション24は、グラフィックスAPI26に命令を発行し得る。グラフィックスAPI26は、ソフトウェアアプリケーション24から受信された命令をGPUドライバ28によって消費可能なフォーマットに変換するランタイムサービスであり得る。
[0064]GPUドライバ28は、グラフィックスAPI26を介してソフトウェアアプリケーション24から命令を受信し、命令をサービスするためにGPU10の動作を制御する。たとえば、GPUドライバ28は、1つまたは複数のコマンドを編成し、コマンドをメモリ22の中に配置し、コマンドを実行するようにGPU10に命令し得る。いくつかの例では、GPUドライバ28は、コマンドをメモリ22の中に配置し、たとえば、1つまたは複数のシステム呼出しを介してオペレーティングシステム30を介してGPU10と通信し得る。
[0065]いくつかの例では、GPUドライバ28(またはCPU6上の別のソフトウェア構成要素)は、本開示で説明する技法のいずれかに従って、ソフトウェアアプリケーション24から非整列BLTコマンドを受信し、非整列BLTコマンドを複数の整列BLTコマンドに変換するように構成され得る。GPUドライバ28は、実行のためにGPU10に複数の整列BLTコマンドを与え得る。
[0066]GPU10は、コマンドエンジン32と、ラスタ演算ユニット34と、バッファ36と、読取りエンジン38と、書込みエンジン40とを含む。いくつかの例では、GPU10は、3次元(3D)グラフィックスレンダリングパイプライン(図示せず)を含み得る。そのような例では、ラスタ演算ユニット34は、3Dグラフィックスレンダリングパイプラインの一部を形成し得る。
[0067]いくつかの例では、GPU10は、その各々がプログラマブル処理ユニットまたは固定機能処理ユニットであり得る複数の処理ユニット(図示せず)を含み得る。GPU10が3Dグラフィックスレンダリングパイプラインを含む場合、複数の処理ユニットが、3Dグラフィックスレンダリングパイプラインを実装するために一緒に動作し得る。いくつかの例では、3Dグラフィックスレンダリングパイプラインは、Open Graphics Library(OpenGL(登録商標))API、Open Graphics Library Embedded Systems(OpenGL ES)API、Direct3D API、DirectX APIなど、1つまたは複数の公開のおよび/またはプロプライエタリの3Dグラフィックス規格のAPIによって指定される、3Dグラフィックスパイプラインに準拠し得る。
[0068]プログラマブル処理ユニットは、たとえば、CPU6によってGPU10上にロードされた1つまたは複数のシェーダプログラムを実行するように構成されたプログラマブルシェーダユニットを含み得る。いくつかの例では、シェーダプログラムは、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語など、ハイレベルシェーディング言語で書き込まれたプログラムのコンパイルバージョンであり得る。いくつかの例では、プログラマブルシェーダユニットは、並列に動作するように構成された複数の処理ユニット、たとえば、SIMDパイプラインを含み得る。プログラマブルシェーダユニットは、シェーダプログラム命令を記憶するプログラムメモリと、実行状態レジスタ、たとえば、実行されているプログラムメモリ中の現在の命令またはフェッチされることになる次の命令を示すプログラムカウンタレジスタとを有し得る。プログラマブルシェーダユニットは、たとえば、頂点シェーダユニット、ピクセルシェーダユニット、ジオメトリシェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、計算シェーダユニットなどを含み得る。
[0069]固定機能処理ユニットは、いくつかの機能を実行するために配線接続されたハードウェアを含み得る。固定機能ハードウェアは、1つまたは複数の制御信号を介して、たとえば、異なる機能を実行するように構成され得るが、固定機能ハードウェアは、通常、ユーザコンパイルプログラムを受信することが可能なプログラムメモリを含まない。GPU10中に含まれる固定機能処理ユニットは、たとえば、ラスタ演算、深度テスト、シザーテスト、アルファブレンドなどを実行する処理ユニットを含み得る。
[0070]ラスタ演算ユニット34が3Dレンダリングパイプライン中に含まれる例では、ラスタ演算ユニット34は、いくつかの例では、構成可能な固定機能処理ユニットであり得る。いくつかの例では、ラスタ演算ユニット34は、3Dレンダリングパイプラインの出力統合処理ユニットとして実装され得る。
[0071]コマンドエンジン32は、CPU6からコマンドを受信し、GPU10にコマンドを実行させるように構成される。いくつかの例では、CPU6は、コマンドをメモリ22に配置し得、コマンドエンジン32は、メモリ22からコマンドを取り出し得る。コマンドは、たとえば、GPU10の状態(たとえば、レンダリング状態)を変更する状態コマンド、特定のシェーダプログラムを3Dレンダリングパイプライン中のプログラム可能処理ユニットの1つまたは複数へロードするようにGPU10に命令するシェーダプログラム拘束コマンド、メモリ22に記憶されている特定のデータをレンダリングするようにGPU10に命令する描画コマンド、メモリ22に記憶されている特定のデータに関して1つまたは複数の汎用コンピューティングカーネルを実行するようにGPU10に命令する汎用コンピューティングコマンド、および/あるいは1つまたは複数のBLT動作を実行するようにGPU10に命令するBLTコマンドを含み得る。
[0072]状態コマンドを受信したことに応答して、コマンドエンジン32は、状態コマンドに基づいて、GPU10の中の1つもしくは複数の状態レジスタを特定の値に設定するように、および/または、状態コマンドに基づいて、GPU10のための3Dレンダリングパイプライン(図示せず)中の固定機能処理ユニットの1つもしくは複数を構成するように構成され得る。描画呼出しコマンドを受信したことに応答して、コマンドエンジン32は、GPU10中の3Dレンダリングパイプライン(図示せず)に、メモリ22から3Dジオメトリを取り出させ、3Dジオメトリデータを2Dグラフィックス画像へとレンダリングさせるように構成され得る。シェーダプログラム拘束コマンドを受信したことに応答して、コマンドエンジン32は、3Dレンダリングパイプライン中のプログラム可能処理ユニットの1つまたは複数に、1つまたは複数の特定のシェーダプログラムをロードし得る。
[0073]BLTコマンドを受信したことに応答して、コマンドエンジン32は、GPU10に、BLTコマンドに対応するBLT動作を実行させ得る。BLT動作を実行するために、コマンドエンジン32は、いくつかの例では、BLTコマンドに基づいてラスタ演算ユニット34、バッファ36、読取りエンジン38、書込みエンジン40のうちの1つまたは複数を構成し、構成された構成要素に、BLTコマンドに対応するBLT動作を実行させ得る。
[0074]ラスタ演算ユニット34は、宛先データを生成するために、ソースデータに基づいて1つまたは複数のラスタ演算を実行し得る。ソースデータは、BLT動作の1つまたは複数のソースBLT領域に対応し得る。いくつかの例では、ラスタ演算ユニット34は、バッファ36および/または書込みエンジン40からソースデータを受信し得る。宛先データは、BLT動作に関連する宛先BLT領域に書き込まれ得る。
[0075]ラスタ演算ユニット34によって実行されるラスタ演算のタイプは、たとえば、コマンドエンジン32によって構成可能であり得る。ラスタ演算のタイプは、特定のBLT動作についてのソースデータに基づいて宛先データがどのように生成されるべきかを指定し得る。ラスタ演算ユニット34が宛先データを生成するために2つの異なるソース領域を組み合わせる(たとえば、合成動作)場合、ラスタ化演算のタイプは、宛先データを生成するために2つの異なるソース領域がどのように組み合わされるべきかを指定し得る。いくつかの例では、ラスタ演算のタイプは、宛先領域中の特定のピクセル位置についての宛先データが、ソース領域中の対応するピクセルロケーションに基づいてどのように生成されるべきかを指定する、ビットごとの演算であり得る。ソース領域中の対応するピクセルロケーションは、宛先領域中のピクセルロケーションと同じ、それぞれのソース領域の相対的なロケーションにあるピクセルロケーションであり得る。ビットごとの演算は、たとえば、ビットごとのAND演算、OR演算、NOT演算、および/またはXOR演算などのブーリアン演算を含み得る。ビットごとの演算はまた、ビット複製演算、ビット反転演算、塗りつぶし演算などを含み得る。
[0076]追加の例では、ラスタ演算のタイプは、ブレンド演算(たとえば、アルファブレンド演算)を含み得る。いくつかの例では、ブレンド演算は、ブレンド演算の実行の間に使用されるべきソースピクセル乗算器と宛先ピクセル乗算器とを指定し得る。そのような例では、ブレンド演算の実行の間に、ソースピクセル値(たとえば、ソースピクセル色および/またはソースアルファ値)は、第1の積を生成するためにソースピクセル乗算器によって乗算され得、対応する宛先ピクセル値(たとえば、宛先ピクセル色および/または宛先アルファ値)は、第2の積を生成するために宛先ピクセル乗算器によって乗算され得、ピクセルロケーションに対する宛先値を生成するために、2つの積の合計が一緒に加算され得る。他のタイプのブレンド演算も可能である。
[0077]いくつかの例では、コマンドエンジン32は、CPU6からGPU10によって受信されたBLTコマンド中に含まれるデータに基づいて、ラスタ演算ユニット34を構成し得る。たとえば、コマンドエンジン32は、BLTコマンドにおいて指定されているラスタ演算のタイプに基づいて、ラスタ演算ユニット34によって実行されるべきラスタ演算のタイプを選択し、選択されたタイプのラスタ化演算を使用してBLT動作を実行するようにラスタ演算ユニット34を構成し得る。
[0078]ラスタ演算ユニット34は、BLT動作についての宛先データを生成するために異なるソース領域を組み合わせるものとして本明細書で説明されてきたが、他の例では、GPU10中の1つまたは複数の他の構成要素は、BLT動作を実行するために、ラスタ演算ユニット34に加えて、またはその代わりに使用され得る。たとえば、GPU10のシェーダユニット(図示せず)上で実行されるシェーダプログラムは、BLT動作についての宛先データを生成するために、シェーダプログラムにおいて指定されている組合せ技法に従って、異なるソース領域を組み合わせ得る。
[0079]バッファ36は、BLT動作の実行中にメモリ22から取り出されたソースデータを記憶し得る。いくつかの例では、バッファ36は、GPU10内の複数のレジスタとして実装され得る。バッファ36は、たとえば、先入れ先出し(FIFO)バッファリング方式を含む、様々なバッファリング方式のいずれかを利用し得る。FIFOバッファリング方式によれば、バッファ36に記憶されているソースデータは、ソースデータがバッファ36に配置された順序で、利用者(たとえば、書込みエンジン40)によって利用される。
[0080]読取りエンジン38は、メモリサブシステム8に読取り要求を発行し、読取り要求に応答して受信されたソースデータをバッファ36に配置するように構成され得る。読取り要求は、CPU6から受信されたBLTコマンドにおいて指定されている1つまたは複数のソースBLT領域からデータを集合的に読み取り得る。
[0081]書込みエンジン40は、バッファ36からソースデータを利用し、利用されたソースデータに基づいて宛先データを生成し、宛先データをメモリ22中の宛先領域に書き込むために書込み要求をメモリサブシステム8に発行するように構成され得る。書込み要求は、CPU6から受信されたBLTコマンドにおいて指定されている宛先BLT領域にデータを集合的に書き込み得る。
[0082]いくつかの例では、書込みエンジン40は、宛先データがソースデータと同一であるように、宛先データを生成し得る。そのような例は、たとえば、BLT複製動作を実行するために使用され得る。さらなる例では、書込みエンジン40は、宛先データを生成するために少なくとも2つの異なるソース領域からのソースデータを組み合わせ得る。そのような例は、たとえば、BLT合成動作を実行するために使用され得る。そのような例では、書込みエンジン40は、いくつかの例では、ソースデータを組み合わせ、宛先データを生成するためにラスタ演算を実行するためにラスタ演算ユニット34を使用し得る。
[0083]いくつかの例では、ソースデータを利用することは、書込みエンジン40が読取りエンジン38からソースデータを直接受信し、ソースデータを処理することを指し得る。さらなる例では、ソースデータを利用することは、書込みエンジン40がバッファ36からソースデータを取り出し、ソースデータを処理することを指し得る。ソースデータを処理することは、ソースデータに基づいて宛先データを生成することを含み得る。データが処理された後、書込みエンジン40は、宛先データを書き込むことを求める書込み要求を発行し得る。
[0084]いくつかの例では、読取りエンジン38は、読み取られる面の各線の開始が所定の整列幅の整数倍であるメモリアドレスに対応することを必要とし得る。そのような要件は、本開示で説明する整列制約の一例であり得、所定の整列幅は、整列制約についての整列パラメータであり得る。そのような整列制約は、読取りエンジン38を実装するためのハードウェアを簡略化し得る。所定の整列幅の整数倍であるメモリアドレスは、整列境界と呼ばれることがある。読取りエンジン38が、適切な動作のためにそのような整列制約を必要とするとき、読取りエンジン38は、整列制約された読取りエンジン38と呼ばれることがある。
[0085]同様に、書込みエンジン40は、さらなる例では、書き込まれるべき面の各線の開始が所定の整列幅の整数倍に対応することを必要とし得る。そのような要件は、本開示で説明する整列制約の一例をメイ(may)し、所定の整列幅は、整列制約についての整列パラメータであり得る。そのような要件は、書込みエンジン40を実装するためのハードウェアを簡略化し得る。書込みエンジン40が、適切な動作のためにそのような整列制約を必要とするとき、書込みエンジン40は、整列制約された書込みエンジン40と呼ばれることがある。
[0086]いくつかの例では、読取りエンジン38と書込みエンジン40との両方が整列制約され得る。さらなる例では、読取りエンジン38は、整列制約され得、書込みエンジン40は、整列制約されないことがある。追加の例では、書込みエンジン40は、整列制約され得、読取りエンジン38は、整列制約されないことがある。別の例では、読取りエンジン38も書込みエンジン40も整列制約されないことがある。
[0087]メモリサブシステム8はメモリ22を含む。メモリ22は、1つまたは複数のソース面42と宛先面44とを記憶し得る。ソース面42および宛先面44の各々は、ピクセルデータの2次元アレイに対応する。ピクセルデータは、面の中の各ピクセルロケーションに対する、赤、緑、青(RGB)の色値と、いくつかの場合には、アルファ値(A)とを含み得る。ソース面42および宛先面44はピクセルデータの2次元アレイに対応するので、面の中の個々のピクセルロケーションついてのピクセルデータは、行および列の座標によってアドレス指定され得る。BLT動作において使用されるソース領域の各々は、それぞれのソース面のすべてまたはサブセットに対応し得、宛先領域は、宛先面のすべてまたはサブセットに対応し得る。ソース領域および宛先領域は同じサイズまたは形状であり得、必ずしもそうではないが、通常は長方形の形状の領域である。なお、図2に、別個のソース面42と宛先面44とを示す。いくつかの例では、宛先面44が、BLT動作のためのソース面として使用され得、および/または、ソース面42の1つまたは複数が、BLT動作のための宛先面として働き得る。メモリサブシステム8は、バス16を介してCPU6、GPU10、読取りエンジン38、および書込みエンジン40に通信可能に結合される。
[0088]メモリアクセス要求を受信したことに応答して、メモリサブシステム8は、メモリ22に関して要求されたメモリ動作を実行させ得る。たとえば、読取り要求を受信したことに応答して、メモリサブシステム8は、読取り要求において指定されている1つまたは複数のメモリアドレスに対応するメモリ22中の1つまたは複数のメモリロケーションから、メモリ22に記憶されているデータを取得し(すなわち、読み取り)、取得されたデータをGPU10(たとえば、読取りエンジン38)に提供し得る。別の例として、書込み要求と、書込み要求に対応する書込みデータとを受信したことに応答して、メモリサブシステム8は、書込みデータを、メモリ22中の書込み要求において指定されている1つまたは複数のメモリアドレスに対応する1つまたは複数のロケーションに記憶させ得る。いくつかの例では、メモリサブシステム8は、書込み要求の完了が成功したという確認を、書込みエンジン40に与え得る。
[0089]コマンドエンジン32が、BLT動作を実行するようにGPU10中の他の処理構成要素を構成するものとして本明細書で説明するが、他の例では、GPU10中の1つまたは複数の他の構成要素が、コマンドエンジン32に加えてまたはその代わりにこれらの機能を実行し得る。たとえば、専用のBLT動作制御ユニットが、コマンドエンジン32の上述の機能を実行するために使用され得、または読取りエンジン38および書込みエンジン40が、そのような機能を実行するように構成され得る。
[0090]上記で説明したように、GPU10は、CPU6から受信されたBLTコマンドをサービスするためにBLT動作を実行し得る。BLT動作は、BLT複製動作とBLT合成動作とを含み得る。いくつかの例では、BLT動作は、代替的に、メモリ転送動作と呼ばれることがある。BLT複製動作は、ソース面のソース領域から宛先面の宛先領域にデータを複製することを伴い得る。すなわち、GPU10は、ソース面のソース領域からデータを読み取り、ソース面のソース領域に含まれるデータの厳密な複製を、宛先面の宛先領域に書き込み得る。
[0091]BLT合成動作は、同じまたは異なるソース面の少なくとも2つの異なるソース領域を何らかの方式で組み合わせることと、ソース領域の組合せを宛先面の宛先領域に書き込むこととを伴い得る。いくつかの場合には、ソース面の1つまたは複数は、BLT合成動作のための宛先面と同じ面であり得る。たとえば、BLT合成動作は、単一のソース領域と単一の宛先領域とを読み取ることと、これら2つを一緒にブレンドすることと、ブレンドされた結果を宛先領域に書き込むこととを伴い得る。
[0092]いくつかの例では、BLT合成動作を実行するとき、異なるソース領域が、ラスタ演算に従って組み合わされ得、ラスタ演算はBLT合成動作の異なる例ごとに異なり得る。ラスタ演算は、特定のBLT合成動作のためにビットがどのように組み合わされるべきであるかを指定する動作であり得る。いくつかの例では、ラスタ演算は、たとえばブーリアン論理演算などのビットごとの演算を含み得る。ブーリアン論理演算は、たとえば、ビットごとのAND演算、OR演算、NOT演算、および/またはXOR演算を含み得る。追加の例では、ラスタ演算は、ブレンド演算(たとえば、アルファブレンド演算)を含み得る。
[0093]BLT動作において使用されるソース面および宛先面は、同じ面または異なる面であり得、ピクセルデータの2次元アレイに各々対応し得る。ピクセルデータは、面の中の各ピクセルに対する、赤、緑、青(RGB)の色値と、いくつかの場合には、アルファ値(A)とを含み得る。面はピクセルデータの2次元アレイに対応するので、面の中の個々のピクセルロケーションについてのピクセルデータは、行および列の座標によってアドレス指定され得る。BLT動作において使用されるソース領域の各々は、それぞれのソース面のすべてまたはサブセットに対応し得る。同様に、BLT動作において使用される宛先領域は、宛先面のすべてまたはサブセットに対応し得る。ソース領域および宛先領域は同じサイズまたは形状であり得、必ずしもそうではないが、通常は長方形の形状の領域である。
[0094]GPU10がBLT動作を実行するとき、BLT動作のために使用されるソース面および宛先面は通常、オフチップメモリ22中に記憶される。言い換えると、メモリ22は、GPU10が形成、配置、および/または配設される、マイクロチップ、集積回路、および/またはダイとは異なる、マイクロチップ、集積回路、および/またはダイの上に形成、配置、および/または配設され得る。メモリ22は、1つまたは複数のバス、場合によっては、メモリコントローラを介してGPU10に通信可能に結合され得る。
[0095]BLT複製動作を実行するとき、GPU10は、ソース領域中のピクセルロケーションの各々からデータを読み取り、ソース領域から読み取られたデータを宛先領域中の対応するピクセルロケーションに書き込み得る。同様に、BLT合成動作を実行するとき、GPU10は、複数のソース領域中のロケーションの各々からデータを読み取り、データを組み合わせ、組み合わされたデータを宛先領域に書き込み得る。
[0096]図3は、本開示による、例示的な単一のソースBLT動作を示す概念図である。図3に、その各々がピクセルデータの2次元アレイに対応するソース面50と宛先面52とを示す。ピクセルデータは、面の中の各ピクセルに対する、赤、緑、青(RGB)の色値と、いくつかの場合には、アルファ値(A)とを含み得る。面50、52の各々はピクセルデータの2次元アレイに対応するので、面中の個々のピクセルロケーションについてのピクセルデータは、行および列の座標によってインデックス付けされ得る。いくつかの例では、ソース面50および宛先面52は、ビットマップであり得る。さらなる例では、ソース面50および宛先面52は、たとえばテクスチャバッファなどのバッファリソースであり得る。図3の例示的なソース面50および宛先面52は、同じ形状およびサイズであり、長方形の形状である。ただし、他の例では、ソース面50と宛先面52とは、異なる形状および/またはサイズを有し得る。
[0097]ソース面50はソースBLT領域54を含み、宛先面52は宛先BLT領域56を含む。ソースBLT領域54は、ソース面50中に含まれるピクセルデータのサブセットを含み、宛先BLT領域56は、宛先面52中に含まれるピクセルデータのサブセットを含む。面中に含まれるピクセルデータのサブセットは、面中に含まれるピクセルデータのすべてまたはすべて未満を指し得る。図3に示すように、ソースBLT領域54と宛先BLT領域56とは、同じサイズおよび形状であり、長方形の形状である。ただし、他の例では、ソースBLT領域54および宛先BLT領域56は、長方形の形状でないことがある。
[0098]図3に示す例示的なBLT動作では、GPU10は、ソース面50のソースBLT領域54から宛先面52の宛先BLT領域56にデータを転送する。概して、ソースBLT領域54中の各ピクセルロケーションについてのデータは、宛先BLT領域56中の対応するピクセルロケーションに転送される。異なる領域中の異なるピクセルロケーションは、それぞれの領域におけるピクセルロケーションの各々の相対的な配置が同じであれば、対応するピクセルロケーションであると言われ得る。たとえば、ソースBLT領域54および宛先BLT領域56の第2行の第3列は、同じ相対的なロケーションを有する。
[0099]単一のソース領域がBLT動作のためのソースオペランドとして使用されるので、図3に示すBLT動作は、単一ソースのBLT動作である。図3に示す単一ソースのBLT動作は、ソースBLT領域54のデータが宛先BLT領域56に複製されるBLT複製動作を表し得る。図3に示すBLT動作に別個のソース面50と宛先面52とを示すが、他の例では、ソース面50と宛先面52とは同じ面であり得る。そのような例では、ソースBLT領域54と宛先BLT領域56とは、いくつかの例では、BLT複製動作によってデータが転送される同じ面内の異なる領域であり得る。
[0100]図4は、本開示による、例示的な複数のソースBLT動作を示す概念図である。図4に、第1のソース面58と、第2のソース面60と、宛先面62とを示す。面58、60、62の各々は、図3に関して上記で説明した面50、52と実質的に同様であり得る。第1のソース面58は、第1のソースBLT領域64を含み、第2のソース面60は、第2のソースBLT領域66を含み、宛先面62は、宛先BLT領域68を含む。第1のソースBLT領域64は、第1のソース面58中に含まれるピクセルデータのサブセットを含み、第2のソースBLT領域66は、第2のソース面60中に含まれるピクセルデータのサブセットを含み、宛先BLT領域68は、宛先面62中に含まれるピクセルデータのサブセットを含む。図4に示すように、第1のソースBLT領域64、第2のソースBLT領域66、および宛先BLT領域68は、同じサイズおよび形状であり、長方形の形状である。ただし、他の例では、領域64、66、および68は、長方形の形状でないことがある。
[0101]図4の例示的なBLT動作では、第1のソースBLT領域64からのソースデータおよび第2のソースBLT領域66からのソースデータが、宛先データを生成するために、ラスタ演算70を介して組み合わされ、宛先データは、宛先面62の宛先BLT領域68に配置される。一般に、第1のソースBLT領域64中の各ピクセル位置のデータは、第2のソースBLT領域66中の対応するピクセル位置からのデータと組み合わされ、宛先BLT領域68中の対応するピクセル位置に書き込まれる。異なる領域中の異なるピクセルロケーションは、それぞれの領域におけるピクセルロケーションの各々の相対的な配置が同じであれば、対応するピクセルロケーションであると言われ得る。
[0102]複数のソース領域がBLT動作のためのソースオペランドとして使用されるので、図4に示すBLT動作は、複数ソースのBLT動作である。図4に示す複数ソースのBLT動作は、宛先領域に書き込まれる宛先データを生成するためにGPU10が2つの異なるソース領域からのデータを組み合わせるかまたは合成するBLT合成動作を表し得る。図4に示すBLT動作は、別個の第1のソース面58と、第2のソース面60と、宛先面62とを示すが、他の例では、面58、60、62のうちの1つまたは複数が同じ面であり得る。たとえば、第2のソース面60と宛先面62とが同じ面であり得、第2のソースBLT領域66と宛先BLT領域68とがその面内の同じ領域であり得る。そのような例では、BLT合成動作は、特定のラスタ演算子を使用して、第1のソースBLT領域64中のピクセルデータを、宛先面62中の既存のピクセルデータと統合し得る。
[0103]図5は、図1および図2の例示的なコンピューティングデバイスのための例示的なコマンド処理フロー72を示す概念図である。図5に示すように、ソフトウェアアプリケーション24は、GPUドライバ28にソフトウェアBLTコマンド74を発行する。GPUドライバ28は、ソフトウェアBLTコマンド74を受信し、ソフトウェアBLTコマンド74に基づいて1つまたは複数のGPU BLTコマンド76を生成し、GPU10にGPU BLTコマンド76を発行する。GPU10は、GPU BLTコマンド76をサービスするためにBLT動作78を実行する。たとえば、GPU BLTコマンド76の各々について、GPU10は、それぞれの整列BLT動作78を実行し得る。
[0104]いくつかの例では、ソフトウェアBLTコマンド74は、非整列BLTコマンドであり得、GPU BLTコマンド76は、ソフトウェアBLTコマンド74に対応する複数の整列BLTコマンドを含み得る。そのような例では、GPUドライバ28は、本開示で説明する技法のいずれかに従って非整列ソフトウェアBLTコマンド74を複数の整列GPU BLTコマンド76に変換し得る。
[0105]図6は、本開示による、整列仮想面を定義するための例示的な技法を示す概念図である。図6に、非整列面80と仮想面82とを示す。非整列面80は、非整列BLTコマンドの一部としてソフトウェアアプリケーション24から受信され得る。GPUドライバ28は、非整列面80に基づいて仮想面82を定義し得る。
[0106]図6の例では、32バイトの整列制約されたGPU(たとえば、GPU10)が、BLT動作を実行するために使用される。32バイトの整列制約されたGPUは、面の線の各々の開始が32(すなわち、所定の整列幅)の整数倍であることを必要とするGPUに対応し得る。32(すなわち、整列幅)の各倍数は、整列境界と呼ばれることがある。
[0107]図6に示すように、非整列面80のための面幅は720バイトであり、非整列面80のための面高さは480本の線(lines)である。720は、32によって割り切れないので、非整列面80のいくつかの線は、32の倍数であるメモリアドレスにおいて開始しないことになるだろう。したがって、面80は、非整列であると言われる。
[0108]GPUドライバ28は、仮想面82中で単一の線を形成するために非整列面80からの2つの線のセットを一緒に組み合わせることによって仮想面82を定義し得る。図6に示すように、仮想面82は、非整列面80の2倍の幅があり、半分の高さがある。仮想面82の面幅は1440バイトであり、これは、32によって割り切れる。したがって、仮想面82は、32バイトの整列制約されたGPUがBLT動作を実行し得る整列面である。
[0109]図7および図8は、図6に示す技法に従って定義された整列仮想面を使用した非整列BLT動作の2つの整列BLT動作への例示的な変換を示す概念図である。
[0110]図7に、ソフトウェアアプリケーション24から受信されたBLTコマンドに関連付けられ得る単一の非整列BLT動作を示す。非整列BLTコマンドは、BLT動作のための非整列ソース面84と非整列宛先面86とを指定する。ソース面84はソースBLT領域88を含み、宛先面86は宛先BLT領域90を含む。図7に示すように、非整列BLT動作は、ソース面84のソースBLT領域88を宛先面86の宛先BLT領域90に転送する。
[0111]図8に、単一の非整列BLT動作に対応する整列2BLT動作(aligned two-BLT operation)を示す。整列2BLT動作は、2つの整列BLTコマンドによって指定された2つの別個のBLT動作を含み得る。整列BLTコマンドの各々は、BLT動作のための整列仮想ソース面92と整列仮想宛先面94とを指定し得る。仮想ソース面92はソースBLT領域96、98を含み、仮想宛先面94は宛先BLT領域100、102を含む。
[0112]仮想ソース面92は、ソース面84に基づいて定義され得、仮想宛先面94は、宛先面86に基づいて定義され得る。GPUドライバ28は、ソース面84を仮想ソース面92に変換することと、宛先面86を仮想宛先面94に変換することとを行うために図6に示した技法を使用し得る。
[0113]たとえば、GPUドライバ28は、仮想ソース面92中で単一の線を形成するためにソース面84中で2つの線のあらゆる(every)セットを一緒に組み合わせ得る。これにより、ソース面84の偶数線のすべてが仮想ソース面92の左側にアグリゲートされ、ソース面84の奇数線のすべてが仮想ソース面92の右側にアグリゲートされることが効果的に行われるようになる。GPUドライバ28は、仮想宛先面94を形成するために宛先面86の線を一緒に組み合わせるために同様の技法を使用し得る。
[0114]図7では、領域88、90の1つおきの線が交互に(in an alternating fashion)ハッチングされる。図8に示すように、仮想ソース面92を形成するためにソース面84の線を組み合わせることにより、ソースBLT領域88が、それがもはや1つの連続する長方形領域でないように変換されるようになる。代わりに、ソースBLT領域88は、ソースBLT領域96および98に変換され、ここで、ソースBLT領域96は、ソースBLT領域88の偶数線を表し、ソースBLT領域98は、ソースBLT領域88の奇数線を表す。したがって、ソースBLT領域88は、互いに連続しない2つの別個の長方形領域に変換された。宛先BLT領域90に関して、同様の変換が行われ、ここで、宛先BLT領域90は、宛先BLT領域100および102に変換される。
[0115]この例では、単一のBLT動作は、不連続のBLT領域に対して実行されないことがある。現在、2つの別個のソースBLT領域96、98と2つの別個の宛先BLT領域100、102とがあるので、GPUドライバ28は、非整列面84、86のための単一の非整列BLTコマンドを仮想面92および94に関して実行される2つの整列BLTコマンド、ハッチングされた領域96、100のための1つのBLTコマンドと白色領域98、102のための1つのBLTコマンドとに変換する。このようにして、GPUドライバ28は、GPU10に、2つのBLT動作を実行させ得、ここで、第1のBLT動作は、ソースBLT領域96を宛先BLT領域100に転送し、第2のBLT動作は、ソースBLT領域98を宛先BLT領域102に転送する
[0116]GPUドライバ28によって生成された複数のBLTコマンドは、ソースBLT領域88および宛先BLT領域90全体を集合的に処理し、それによって、単一の非整列BLTコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。さらに、整列BLTコマンドの各々が、32バイトの整列仮想面(すなわち、仮想面92および94)に関して実行され、これにより、BLTコマンドを32バイトの整列制約されたGPUによって処理することが可能になる。このようにして、GPUドライバ28は、非整列BLTコマンドを整列制約されたGPUによってサービスされ得る複数の整列BLTコマンドに変換し、それによって、比較的低電力のGPU加速BLT処理の利益を取得し得る。
[0117]いくつかの例では、非整列BLTコマンドを複数の整列BLTコマンドに変換するために、GPUドライバ28は、非整列BLTコマンドに関連するBLTソースまたは宛先領域の座標および次元を複数の整列BLTコマンドのために使用されるべきBLT領域のための座標および次元に変換し得る。いくつかの例では、図7および図8に示す2つのBLT変換動作について、GPUドライバ28は、以下の擬似コードに基づいてBLT領域座標および次元を生成し得る。
Figure 0006352546
Figure 0006352546
例示的な擬似コードでは、BLT1およびBLT2は、単一の非整列BLTコマンドに基づいて生成される異なる整列BLTコマンドに対応し、SRC_Xは、ソースBLT領域88の左上隅のx座標に対応し、SRC_Yは、ソースBLT領域88の左上隅のy座標に対応し、DST_Xは、宛先BLT領域90の左上隅のx座標に対応し、DST_Yは、宛先BLT領域90の左上隅のy座標に対応し、BLT_widthは、(たとえば、バイト単位での)ソースBLT領域88の幅に対応し、BLT_Heightは、(たとえば、線単位での)ソースBLT領域88の高さに対応し、SRC_widthは、(たとえば、バイト単位での)ソース面84の面幅に対応し、DST_widthは、(たとえば、バイト単位での)宛先面86の面幅に対応し、SRC_SURFACE_baseは、ソース面84の面ポインタに対応し、SRC_SURFACE_WIDTHは、ソース面84の面幅に対応し、SRC_SURFACE_HEIGHTは、ソース面84の高さに対応し、DST_SURFACE_baseは、宛先面86の面ポインタに対応し、DST_SURFACE_WIDTHは、宛先面86の面幅に対応し、DST_SURFACE_HEIGHTは、宛先面86の高さに対応し、New_SRC_Xは、(BLT1の場合は)ソースBLT領域96または(BLT2の場合は)ソースBLT領域98の左上隅のx座標に対応し、New_SRC_Yは、(BLT1の場合は)ソースBLT領域96または(BLT2の場合は)ソースBLT領域98の左上隅のy座標に対応し、New DST_Xは、(BLT1の場合は)宛先BLT領域100または(BLT2の場合は)宛先BLT領域102の左上隅のx座標に対応し、New DST_Yは、(BLT1の場合は)宛先BLT領域100または(BLT2の場合は)宛先BLT領域102の左上隅のy座標に対応し、New BLT_widthは、(BLT1の場合は)ソースBLT領域96または(BLT2の場合は)ソースBLT領域98の(たとえば、バイト単位での)幅に対応し、New BLT_Heightは、(BLT1の場合は)ソースBLT領域96または(BLT2の場合は)ソースBLT領域98の(たとえば、線単位での)高さに対応し、
New SRC_SURFACE_baseは、仮想ソース面92の面ポインタに対応し、New SRC_SURFACE_WIDTHは、仮想ソース面92の面幅に対応し、New SRC_SURFACE_HEIGHTは、仮想ソース面92の高さに対応し、New DST_SURFACE_baseは、仮想宛先面94の面ポインタに対応し、New DST_SURFACE_WIDTHは、仮想宛先面94の面幅に対応し、New DST_SURFACE_HEIGHTは、仮想宛先面94の高さに対応する。
[0118]例では、擬似コード、演算子「/」は、整数除算に対応し、演算子「&」は、ビット単位の(bit-wise)AND演算に対応し、プレフィックス「0x」は、以下の数が16進定数であることを示す。いくつかの例では、仮想ソース面92のNew SRC_SURFACE_HEIGHTの値は、BLT1とBLT2とで異なり、その結果、BLT1とBLT2とのためにわずかに異なる仮想ソース面が使用されることに結果し得る。さらなる例では、仮想宛先面94のNew DST_SURFACE_HEIGHTの値は、BLT1とBLT2とで異なり、その結果、BLT1とBLT2とのためにわずかに異なる仮想宛先面が使用されることに結果し得る。
[0119]図9は、本開示による、複数の整列仮想面を定義するための例示的な技法を示す概念図である。図9に、非整列面110と2つの仮想面112、114とを示す。非整列面110は、非整列BLTコマンドの一部としてソフトウェアアプリケーション24から受信され得る。仮想面112、114は、非整列面110に基づいてGPUドライバ28によって定義され得る。
[0120]図9の例では、32バイトの整列制約されたGPUが、BLT動作を実行するために使用される。図9に示すように、非整列面110のための面幅は720バイトであり、非整列面110のための面高さは480本の線である。720は、32によって割り切れないので、非整列面110のためのいくつかの線は、32の倍数であるメモリアドレスにおいて開始しないことになる。したがって、面110は、非整列であると言われる。
[0121]この問題に対処するために、CPU6は、図6に関して上記で説明したのと同様の方法で非整列面110の幅を広げ得る。これにより、広げられた面幅が、整列幅制約に対応するようになる。ただし、非整列面110は、1の面ポインタを有する。1は32によって割り切れないので、広げられた面の面ポインタは非整列である。したがって、広げられた面は、依然として整列していない。
[0122]この問題に対処するための1つの手法は、シフトされた面ポインタが最も近い整列境界を指すように面ポインタをシフトすることである。図6〜図8に関して上記で説明した技法と同様に、面を広げることは、長方形BLT領域を複数の別個の長方形領域に変換し得、GPUドライバ28は、複数のBLTコマンドを生成し得、ここで、BLTコマンドの各々は、GPUに、長方形BLT領域の各1つ(respective one)に対してBLT動作を実行させる。ただし、仮想面の幅が同じままである場合、面ポインタをシフトすることにより、仮想面の境界の近くにある変換された長方形BLT領域が仮想面の端にラップアラウンドされるようになり得る。言い換えれば、そのような変換されたBLT長方形領域は、もはや連続でないことがあり、単一のBLT動作によってサービスされることができないことがある。
[0123]この問題に対処するために、GPUドライバ28は、ソース面と宛先面との各々のための2つの仮想面112、114を生成し得る。仮想面112、114は、同じ広げられた面幅を有するが、異なる整列面ポインタを有し得る。いくつかの例では、GPUドライバ28は、仮想面112の非整列面ポインタに最も近い2つの整列境界を決定し、最も近い整列境界のうちの1つを仮想面112のための面ポインタとして割り当て、最も近い整列境界の他方を仮想面114のための面ポインタとして割り当て得る。図9中の例では、1の非整列面ポインタに最も近い32バイトの整列境界は、0および32である。したがって、GPUドライバ28は、仮想面112の面ポインタを0に設定し、仮想面114の面ポインタを32に設定する。
[0124]仮想面112、114の各々の面幅は1440バイトであり、これは、32によって割り切れる。さらに、仮想面のための面ポインタの各々は、メモリアドレス(すなわち、0および32)を指し、これは、32によって割り切れる。したがって、仮想面112、114の両方は、32バイトの整列制約されたGPUがBLT動作を実行し得る整列面である。
[0125]図9に示すように、非整列面110の偶数線の各々は、仮想面112の線の各1つ中に完全に含まれている。同様に、非整列面110の奇数線の各々は、仮想面114の線の各1つ中に完全に含まれている。したがって、GPUドライバ28は、GPU10に、仮想面112を使用して非整列面110の偶数線に関して第1の整列BLT動作を実行させ、仮想面114を使用して非整列面110の奇数線に関して第2の整列BLT動作を実行させ得る。このようにしてBLT動作を実行することは、仮想面112、114のいずれかの端をラップアラウンドする変換された長方形BLT領域を処理する必要を回避し得る。
[0126]図10および図11は、本開示による、図9において定義されている複数の整列仮想面を使用して非整列BLT動作の2つの整列BLT動作への例示的な変換を示す概念図である。図7に示した単一の非整列BLT動作から開始して、GPUドライバ28は、単一のBLT動作を図10に示す偶数BLT動作と図11に示す奇数BLT動作とに変換し得る。
[0127]仮想ソース面116、128は、図7中のソース面84に基づいて定義され得、仮想宛先面118、130は、図7中の宛先面86に基づいて定義され得る。GPUドライバ28は、ソース面84を仮想ソース面116、128に変換することと、宛先面86を仮想宛先面118、130に変換することとを行うために図9に示した技法を使用し得る。詳細には、仮想面116、118は、図9中の仮想面112に対応し得、仮想面128、130は、図9中の仮想面114に対応し得る。仮想ソース面116、128はそれぞれ、ソースBLT領域120、122を含み、仮想宛先面118、130はそれぞれ、宛先BLT領域124、126を含む。
[0128]GPUドライバ28は、GPU10に、ソースBLT領域120と宛先BLT領域124とに関して偶数BLT動作(図10)を実行させる。詳細には、偶数BLT動作は、仮想ソース面116のソースBLT領域120を仮想宛先面118の宛先BLT領域124に転送し得る。同様に、GPUドライバ28は、GPU10に、ソースBLT領域122と宛先BLT領域126とに関して奇数BLT動作(図11)を実行させる。詳細には、奇数BLT動作は、仮想ソース面128のソースBLT領域122を仮想宛先面130の宛先BLT領域126に転送し得る。
[0129]図10に示すように、宛先BLT領域126は、仮想宛先面118の端をラップアラウンドする。同様に、図11において、ソースBLT領域120は、仮想ソース面128の端をラップアラウンドする。これらの領域のラップアラウンドにより、これらの領域は不連続になり、それによって、単一のBLT動作が領域を処理することが可能になることを防ぐ。ただし、上記で説明した方法で偶数および奇数BLT動作を実行することによって、これらのラップアラウンドされた領域の処理が回避され、それによって、BLT動作の効率が増加し得る。
[0130]GPU10に、偶数および奇数BLT動作を実行させるために、GPUドライバ28は、図7の非整列面84、86のための単一の非整列BLTコマンドを2つの整列BLTコマンド、仮想面116、118および影つき領域120、124に関して実行される1つの偶数BLTコマンドと、仮想面128、130および白色領域122、126に関して実行される1つの奇数BLTコマンドとに変換し得る。
[0131]GPUドライバ28によって生成された複数のBLTコマンドは、ソース領域および宛先領域全体を集合的に処理し、それによって、単一の非整列BLTコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。さらに、整列BLTコマンドの各々が、32バイトの整列仮想面に関して実行され、これにより、BLTコマンドを32バイトの整列制約されたGPUによって処理することが可能になる。このようにして、GPUドライバ28は、非整列BLTコマンドを整列制約されたGPUによってサービスされ得る複数の整列BLTコマンドに変換し、それによって、比較的低電力のGPU加速BLT処理の利益を取得し得る。
[0132]いくつかの例では、非整列BLTコマンドを複数の整列BLTコマンドに変換するために、GPUドライバ28は、非整列BLTコマンドに関連する宛先領域またはBLTソースの座標および次元を複数の整列BLTコマンドのために使用されるべきBLT領域のための座標および次元に変換し得る。いくつかの例では、図7、図10および図11に示す2つのBLT変換動作について、GPUドライバ28は、以下の擬似コードに基づいてBLT領域座標および次元を生成し得る。
Figure 0006352546
例示的な擬似コードでは、BLT1は、図10に示す偶数BLT動作に対応し、BLT2は、図11に示す奇数BLT動作に対応し、SRC_Xは、ソースBLT領域88の左上隅のx座標に対応し、SRC_Yは、ソースBLT領域88の左上隅のy座標に対応し、DST_Xは、宛先BLT領域90の左上隅のx座標に対応し、DST_Yは、宛先BLT領域90の左上隅のy座標に対応し、BLT_widthは、(たとえば、バイト単位での)ソースBLT領域88の幅に対応し、BLT_Heightは、(たとえば、線単位での)ソースBLT領域88の高さに対応し、SRC_widthは、(たとえば、バイト単位での)ソース面84の面幅に対応し、DST_widthは、(たとえば、バイト単位での)宛先面86の面幅に対応し、SRC_baseは、ソース面84の面ポインタに対応し、DST_baseは、宛先面86の面ポインタに対応し、SRC_SURFACE_WIDTHは、ソース面84の面幅に対応し、SRC_SURFACE_HEIGHTは、ソース面84の高さに対応し、DST_SURFACE_WIDTHは、宛先面86の面幅に対応し、DST_SURFACE_HEIGHTは、宛先面86の高さに対応し、New_SRC_Xは、(BLT1の場合は)ソースBLT領域120または(BLT2の場合は)ソースBLT領域122の左上隅のx座標に対応し、New_SRC_Yは、(BLT1の場合は)ソースBLT領域120または(BLT2の場合は)ソースBLT領域122の左上隅のy座標に対応し、New DST_Xは、(BLT1の場合は)宛先BLT領域124または(BLT2の場合は)宛先BLT領域126の左上隅のx座標に対応し、New DST_Yは、(BLT1の場合は)宛先BLT領域124または(BLT2の場合は)宛先BLT領域126の左上隅のy座標に対応し、New BLT_widthは、(BLT1の場合は)ソースBLT領域120または(BLT2の場合は)ソースBLT領域122の(たとえば、バイト単位での)幅に対応し、New BLT_Heightは、(BLT1の場合は)ソースBLT領域120または(BLT2の場合は)ソースBLT領域122の(たとえば、線単位での)高さに対応し、New SRC_baseは、(BLT1の場合は)仮想ソース面116または(BLT2の場合は)仮想ソース面128の面ポインタに対応し、New DST_baseは、(BLT1の場合は)仮想宛先面118または(BLT2の場合は)仮想宛先面130の面ポインタに対応し、New SRC_SURFACE_WIDTHは、(BLT1の場合は)仮想ソース面116または(BLT2の場合は)仮想ソース面128の面幅に対応し、New SRC_SURFACE_HEIGHTは、(BLT1の場合は)仮想ソース面116または(BLT2の場合は)仮想ソース面128の高さに対応し、New DST_SURFACE_WIDTHは、(BLT1の場合は)仮想宛先面118または(BLT2の場合は)仮想宛先面130の面幅に対応し、New DST_SURFACE_HEIGHTは、(BLT1の場合は)仮想宛先面118または(BLT2の場合は)仮想宛先面130の高さに対応する。
[0133]例示的な擬似コードでは、演算子「/」は、整数除算に対応し、演算子「&」は、ビット単位のAND演算に対応し、(A)?(B):(C)演算子は、3値演算子(たとえば、if−then−elseフレームワーク(詳細には、Aの場合、Bであり、それ以外の場合Cである))に対応し、プレフィックス「0x」は、以下の数が16進定数であることを示す。いくつかの例では、仮想ソース面92のNew SRC_SURFACE_HEIGHTは、BLT1とBLT2とで異なり、その結果、BLT1とBLT2とのためにわずかに異なる仮想ソース面が使用されることに結果し得る。さらなる例では、仮想宛先面94のNew DST_SURFACE_HEIGHTは、BLT1とBLT2とで異なり、その結果、BLT1とBLT2とのためにわずかに異なる仮想宛先面が使用されることに結果し得る。
[0134]図12は、本開示による、非整列BLT動作を処理するための例示的な技法を示す流れ図である。CPU6は、非整列BLTコマンドを受信する(131)。CPU6(たとえば、GPUドライバ28)は、非整列BLTコマンドを複数の整列BLTコマンドに変換する(132)。
[0135]いくつかの例では、非整列BLTコマンドは、非整列BLTコマンドに関連する面のうちの少なくとも1つのための第1の面幅を指定する。そのような例では、非整列BLTコマンドを変換するために、CPU6は、第1の面幅に基づいて第2の面幅を決定することと、ここにおいて、第2の面幅が第1の面幅のN倍である、複数の整列BLTコマンドの各々が、複数の整列BLTコマンドの各々に関連する面のうちの少なくとも1つのための第2の面幅を指定するように複数の整列BLTコマンドを生成することとを行い得る。そのような例では、Nは、2以上の整数であり得る。いくつかの例では、Nは2に等しくなり得る。
[0136]さらなる例では、第2の面幅を決定するために、CPU6は、第1の面幅と、複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて第2の面幅を決定し得る。
[0137]追加の例では、第1の面幅は、所定の整列幅制約の整数倍でないことがある。そのような例では、第1の面幅と所定の整列幅制約とに基づいて第2の面幅を決定するために、CPU6は、第2の面幅が所定の整列幅制約の整数倍であるように第2の面幅を決定し得る。
[0138]いくつかの例では、複数の整列BLTコマンドは、第1の整列BLTコマンドと第2の整列BLTコマンドとを含み得、非整列BLTコマンドは、第1のBLT領域を指定する。そのような例では、複数の整列BLTコマンドを生成するために、CPU6は、第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、第2のBLT領域が、第3のBLT領域とは異なる、第1の整列BLTコマンドが第2のBLT領域を指定するように第1の整列BLTコマンドを生成することと、第2の整列BLTコマンドが第3のBLT領域を指定するように第2の整列BLTコマンドを生成することとを行い得る。場合によっては、第2のBLT領域は、第1のBLT領域の偶数線を含み得、第3のBLT領域は、第1のBLT領域の奇数線を含み得る。
[0139]さらなる例では、非整列BLTコマンドは、非整列BLTコマンドに関連する第1の面の第1の面ポインタ値を指定する。そのような例では、複数の整列BLTコマンドを生成するために、CPU6は、複数の整列BLTコマンドの各々が、複数の整列BLTコマンドの各々に関連する面のうちの1つの第1の面ポインタ値を指定するように複数の整列BLTコマンドを生成し得る。
[0140]追加の例では、複数の整列BLTコマンドは、第1の整列BLTコマンドと第2の整列BLTコマンドとを含み、非整列BLTコマンドは、第1のBLT領域を指定する。そのような例では、複数の整列BLTコマンドを生成するために、CPU6は、第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、第2のBLT領域が、第3のBLT領域とは異なる、第1の整列BLTコマンドが第2の面幅と、第1の面ポインタ値と、第2のBLT領域とを指定するように第1の整列BLTコマンドを生成することとを行い得る。そのような例では、CPU6は、さらに、第2の整列BLTコマンドが、第2の面幅と、第1の面ポインタ値と、第3のBLT領域とを指定するように第2の整列BLTコマンドを生成し得る。場合によっては、第2のBLT領域は、第1のBLT領域の偶数線を含み得、第3のBLT領域は、第1のBLT領域の奇数線を含み得る。
[0141]いくつかの例では、非整列BLTコマンドは、非整列BLTコマンドに関連する第1の面の第1の面ポインタ値を指定し、第1の面ポインタ値は、複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではなく、複数の整列BLTコマンドは、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える。そのような例では、複数の整列BLTコマンドを生成するために、CPU6は、第2の面ポインタ値と第3の面ポインタ値とが所定の整列幅制約の異なる整数倍であるように第1の面ポインタ値と所定の整列幅制約とに基づいて第2の面ポインタ値と第3の面ポインタ値とを決定することと、第1の整列BLTコマンドが、第1の整列BLTコマンドに関連する面のうちの1つの第2の面ポインタ値を指定するように第1の整列BLTコマンドを生成することと、第2の整列BLTコマンドが、第2の整列BLTコマンドに関連する面のうちの1つの第3の面ポインタ値を指定するように第2の整列BLTコマンドを生成することとを行い得る。場合によっては、第2のBLT領域は、第1のBLT領域の偶数線を含み得、第3のBLT領域は、第1のBLT領域の奇数線を含み得る。
[0142]さらなる例では、非整列BLTコマンドは、第1のBLT領域を指定する。そのような例では、CPU6は、第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、第2のBLT領域が、第3のBLT領域とは異なる、第1の整列BLTコマンドが、第2の面幅と、第2の面ポインタ値と、第2のBLT領域とを指定するように第1の整列BLTコマンドを生成することと、第2の整列BLTコマンドが、第2の面幅と、第3の面ポインタ値と、第3のBLT領域とを指定するように第2の整列BLTコマンドを生成することとを行い得る。場合によっては、第2のBLT領域は、第1のBLT領域の偶数線を含み得、第3のBLT領域は、第1のBLT領域の奇数線を含み得る。
[0143]本明細書で説明する技法は、仮想面の単一の線を形成するために3本以上の面線が一緒にグループ化される面に拡張され得る。たとえば、N本の面線が一緒にグループ化されるとき、単一の非整列BLTコマンドは、N個の整列BLTコマンドに変換され得、ここで、Nは、2以上の整数である。
[0144]3本以上の面線が一緒にグループ化される場合、非整列BLTコマンドのための非整列面のうちの1つの面ポインタが非整列である場合、CPU6は、(図9と同様の)2つの異なる仮想面を生成し得、ここで、第1の仮想面は、非整列面ポインタよりも小さい(less than)整列面ポインタを有し、第2の仮想面は、非整列面よりも大きい整列面ポインタを有する。CPU6は、特定のBLTコマンド中のアクセスである面線が割り当てられた仮想面の端をラップアラウンドしないことを保証する方式で2つの仮想面のうちの1つをN個のBLTコマンドの各々に割り当て得る。
[0145]いくつかの例では、本開示の技法は、スケーリングおよび/またはフィルタ処理を実行するBLT動作をサービスするために使用され得る。そのような例では、読取りエンジン38は、整列制約されないことがあるが、書込みエンジン40は、整列制約され得る。
[0146]本開示に記載された技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。たとえば、説明する技法の様々な態様は、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路を含む、1つまたは複数のプロセッサ、ならびにそのような構成要素の任意の組合せ内で実装され得る。「プロセッサ」または「処理回路」という用語は、概して、単独で、あるいは他の論理回路、または処理を実施する個別ハードウェアなどの他の等価回路との組合せで上記の論理回路のいずれかを指すことがある。
[0147]そのようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明した様々な動作および機能をサポートするために、同じデバイス内で、または別々のデバイス内で実装され得る。さらに、説明したユニット、モジュールまたは構成要素のいずれも、個別であるが相互運用可能な論理デバイスとして、一緒にまたは別々に実装され得る。モジュールまたはユニットとしての様々な機能の図は、様々な機能的態様を強調するものであり、そのようなモジュールまたはユニットが別々のハードウェアまたはソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。そうではなく、1つまたは複数のモジュールあるいはユニットに関連する機能は、別々のハードウェア、ファームウェア、および/またはソフトウェア構成要素によって実行されるか、あるいは共通または別々のハードウェアもしくはソフトウェア構成要素内に組み込まれることがある。
[0148]また、本開示で説明した技法は、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体中に記憶、実施または符号化され得る。コンピュータ可読媒体中に埋め込まれたまたは符号化された命令は、たとえば、その命令が1つまたは複数のプロセッサによって実行されたとき、1つまたは複数のプロセッサに本明細書で説明した技法を実行させ得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電子的に消去可能なプログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、ハードディスク、CD−ROM、フロッピー(登録商標)ディスク、カセット、磁気媒体、光媒体、または有形である他のコンピュータ可読記憶媒体を含み得る。
[0149]コンピュータ可読媒体は、上記に記載した有形記憶媒体などの有形記憶媒体に対応するコンピュータ可読記憶媒体を含み得る。コンピュータ可読媒体はまた、たとえば、通信プロトコルに従ってある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を備え得る。この様式で、「コンピュータ可読媒体」という語句は、一般的に、(1)非一時的である有形のコンピュータ可読記憶媒体、および(2)一時的な信号または搬送波などの無形のコンピュータ可読通信媒体に対応し得る。
[0150]様々な態様および例について説明した。しかしながら、以下の特許請求の範囲から逸脱することなく、本開示の構造または技法に変更が行われ得る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
1つまたは複数のプロセッサを用いて、非整列ブロック転送(BLT)コマンドを複数の整列BLTコマンドに変換すること
を備える方法。
[C2]
前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する面のうちの少なくとも1つのための第1の面幅を指定する、ここにおいて、前記非整列BLTコマンドを変換することが、
前記第1の面幅に基づいて第2の面幅を決定することと、ここにおいて、前記第2の面幅が前記第1の面幅のN倍である、ここで、Nは、2以上の整数である、
前記複数の整列BLTコマンドの各々が、前記複数の整列BLTコマンドの各々に関連する面のうちの少なくとも1つのための前記第2の面幅を指定するように前記複数の整列BLTコマンドを生成することと
を備える、C1に記載の方法。
[C3]
前記第2の面幅を決定することが、前記第1の面幅と、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第2の面幅を決定することを備える、C2に記載の方法。
[C4]
前記第1の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記第1の面幅と前記所定の整列幅制約とに基づいて前記第2の面幅を決定することは、前記第2の面幅が前記所定の整列幅制約の整数倍であるように前記第2の面幅を決定することを備える、C3に記載の方法。
[C5]
Nが2に等しい、C2に記載の方法。
[C6]
前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記非整列BLTコマンドが、第1のBLT領域を指定する、ここにおいて、前記複数の整列BLTコマンドを生成することが、
前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
前記第1の整列BLTコマンドが前記第2のBLT領域を指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが前記第3のBLT領域を指定するように前記第2の整列BLTコマンドを生成することと
を備える、C2に記載の方法。
[C7]
前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、C6に記載の方法。
[C8]
前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する第1の面の第1の面ポインタ値を指定する、ここにおいて、前記複数の整列BLTコマンドを生成することが、
前記複数の整列BLTコマンドの各々が、前記複数の整列BLTコマンドの各々に関連する前記面のうちの1つの前記第1の面ポインタ値を指定するように前記複数の整列BLTコマンドを生成すること
を備える、C2に記載の方法。
[C9]
前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記非整列BLTコマンドが、第1のBLT領域を指定する、ここにおいて、前記複数の整列BLTコマンドを生成することが、
前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
前記第1の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することと
を備える、C8に記載の方法。
[C10]
前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、C9に記載の方法。
[C11]
前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する第1の面の第1の面ポインタ値を指定する、ここにおいて、前記第1の面ポインタ値が、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記複数の整列BLTコマンドを生成することが、
第2の面ポインタ値と第3の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第1の面ポインタ値と前記所定の整列幅制約とに基づいて前記第2の面ポインタ値と前記第3の面ポインタ値とを決定することと、
前記第1の整列BLTコマンドが、前記第1の整列BLTコマンドに関連する前記面のうちの1つの前記第2の面ポインタ値を指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが、前記第2の整列BLTコマンドに関連する前記面のうちの1つの前記第3の面ポインタ値を指定するように前記第2の整列BLTコマンドを生成することと
を備える、C2に記載の方法。
[C12]
前記第2の面ポインタ値が、前記第1の面ポインタ値よりも小さく、前記第3の面ポインタ値が、前記第1の面ポインタ値よりも大きい、C11に記載の方法。
[C13]
前記非整列BLTコマンドが、第1のBLT領域を指定する、
ここにおいて、前記複数の整列BLTコマンドを生成することが、前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することを備える、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
ここにおいて、前記第1の整列BLTコマンドを生成することは、前記第1の整列BLTコマンドが、前記第2の面幅と、前記第2の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することを備える、
ここにおいて、前記第2の整列BLTコマンドを生成することは、前記第2の整列BLTコマンドが、前記第2の面幅と、前記第3の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することを備える、C11に記載の方法。
[C14]
前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、C13に記載の方法。
[C15]
非整列ブロック転送(BLT)コマンドを複数の整列BLTコマンドに変換するように構成された1つまたは複数のプロセッサを備えるデバイス。
[C16]
前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する面のうちの少なくとも1つのための第1の面幅を指定する、ここにおいて、前記1つまたは複数のプロセッサが、
前記第1の面幅に基づいて第2の面幅を決定することと、ここにおいて、前記第2の面幅が前記第1の面幅のN倍である、ここで、Nは、2以上の整数である、
前記複数の整列BLTコマンドの各々が、前記複数の整列BLTコマンドの各々に関連する面のうちの少なくとも1つのための前記第2の面幅を指定するように前記複数の整列BLTコマンドを生成することと
を行うようにさらに構成された、C15に記載のデバイス。
[C17]
前記1つまたは複数のプロセッサが、前記第1の面幅と、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第2の面幅を決定することを行うようにさらに構成された、C16に記載のデバイス。
[C18]
前記第1の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記1つまたは複数のプロセッサは、前記第2の面幅が前記所定の整列幅制約の整数倍であるように前記第2の面幅を決定することを行うようにさらに構成された、C17に記載のデバイス。
[C19]
Nが2に等しい、C16に記載のデバイス。
[C20]
前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記非整列BLTコマンドが、第1のBLT領域を指定する、ここにおいて、前記1つまたは複数のプロセッサが、
前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
前記第1の整列BLTコマンドが前記第2のBLT領域を指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが前記第3のBLT領域を指定するように前記第2の整列BLTコマンドを生成することと
を行うようにさらに構成された、C16に記載のデバイス。
[C21]
前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、C20に記載のデバイス。
[C22]
前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する第1の面の第1の面ポインタ値を指定する、ここにおいて、前記1つまたは複数のプロセッサが、
前記複数の整列BLTコマンドの各々が、前記複数の整列BLTコマンドの各々に関連する前記面のうちの1つの前記第1の面ポインタ値を指定するように前記複数の整列BLTコマンドを生成すること
を行うようにさらに構成された、C16に記載のデバイス。
[C23]
前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記非整列BLTコマンドが、第1のBLT領域を指定する、ここにおいて、前記1つまたは複数のプロセッサが、
前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
前記第1の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することと
を行うようにさらに構成された、C22に記載のデバイス。
[C24]
前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、C23に記載のデバイス。
[C25]
前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する第1の面の第1の面ポインタ値を指定する、ここにおいて、前記第1の面ポインタ値が、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記1つまたは複数のプロセッサが、
第2の面ポインタ値と第3の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第1の面ポインタ値と前記所定の整列幅制約とに基づいて前記第2の面ポインタ値と前記第3の面ポインタ値とを決定することと、
前記第1の整列BLTコマンドが、前記第1の整列BLTコマンドに関連する前記面のうちの1つの前記第2の面ポインタ値を指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが、前記第2の整列BLTコマンドに関連する前記面のうちの1つの前記第3の面ポインタ値を指定するように前記第2の整列BLTコマンドを生成することと
を行うようにさらに構成された、C16に記載のデバイス。
[C26]
前記第2の面ポインタ値が、前記第1の面ポインタ値よりも小さく、前記第3の面ポインタ値が、前記第1の面ポインタ値よりも大きい、C25に記載のデバイス。
[C27]
前記非整列BLTコマンドが、第1のBLT領域を指定する、ここにおいて、前記1つまたは複数のプロセッサが、
前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
前記第1の整列BLTコマンドが、前記第2の面幅と、前記第2の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することと、
前記第2の整列BLTコマンドが、前記第2の面幅と、前記第3の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することと
を行うようにさらに構成された、C25に記載のデバイス。
[C28]
前記デバイスが、ワイヤレス通信デバイスとモバイルフォンハンドセットとのうちの少なくとも1つを備える、C15に記載のデバイス。
[C29]
非整列ブロック転送(BLT)コマンドを受信するための手段と、
前記非整列BLTコマンドを複数の整列BLTコマンドに変換するための手段と
を備える装置。
[C30]
実行されたとき、1つまたは複数のプロセッサに、
非整列ブロック転送(BLT)コマンドを複数の整列BLTコマンドに変換すること
を行わせる命令を記憶するコンピュータ可読記憶媒体。

Claims (28)

  1. 1つまたは複数のプロセッサを用いて、非整列ブロック転送(BLT)コマンドを複数の整列BLTコマンドに変換すること
    を備え、前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する複数の面のうちの第1の面のための第1の面幅と、前記第1の面内の第1のBLT領域とを指定し、前記第1の面が、ピクセルデータの2次元アレイに対応し、前記第1の面は、前記第1の面幅を有する複数の線を含み、ここにおいて、前記非整列BLTコマンドを変換することが、
    前記第1の面幅に基づいて第2の面幅を決定することと、ここにおいて、前記第2の面幅が前記第1の面幅のN倍であり、ここで、Nは、2以上の整数である、
    記複数の整列BLTコマンドの各々に関連する複数の仮想面のうちの少なくとも1つのための前記第2の面幅を前記複数の整列BLTコマンドの各々が指定するように前記複数の整列BLTコマンドを生成することと、
    を備え、前記複数の整列BLTコマンドが、
    前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、それぞれ前記第2の面幅を各々指定し、前記ソース仮想面は、前記第1の面中の前記複数の線のうちのN個の線のセットを組み合わせることによって定義され、
    記ソース仮想面に関連するN個のソース領域および前記宛先仮想面に関連するN個の宛先領域と、
    を指定し、
    前記N個のソース領域が、前記非整列BLTコマンドに関連する前記第1のBLT領域を、前記複数の整列BLTコマンドに関連するN個の不連続の領域に分割することによって作成される、方法。
  2. 前記第2の面幅を決定することが、前記第1の面幅と、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第2の面幅を決定することを備える、請求項1に記載の方法。
  3. 前記第1の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記第1の面幅と前記所定の整列幅制約とに基づいて前記第2の面幅を決定することは、前記第2の面幅が前記所定の整列幅制約の整数倍であるように前記第2の面幅を決定することを備える、請求項2に記載の方法。
  4. Nが2に等しい、請求項1に記載の方法。
  5. 前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記複数の整列BLTコマンドを生成することが、
    前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
    前記第1の整列BLTコマンドが前記第2のBLT領域を指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが前記第3のBLT領域を指定するように前記第2の整列BLTコマンドを生成することと
    を備える、請求項1に記載の方法。
  6. 前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、請求項5に記載の方法。
  7. 前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する前記第1の面の第1の面ポインタ値を指定する、ここにおいて、前記複数の整列BLTコマンドを生成することが、
    前記複数の整列BLTコマンドの各々が、前記複数の整列BLTコマンドの各々に関連する前記複数の仮想面のうちの1つのための前記第1の面ポインタ値を指定するように前記複数の整列BLTコマンドを生成すること
    を備える、請求項1に記載の方法。
  8. 前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記複数の整列BLTコマンドを生成することが、
    前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
    前記第1の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することと
    を備える、請求項7に記載の方法。
  9. 前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、請求項8に記載の方法。
  10. 前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する前記第1の面の第1の面ポインタ値を指定する、ここにおいて、前記第1の面ポインタ値が、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記複数の整列BLTコマンドを生成することが、
    第2の面ポインタ値と第3の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第1の面ポインタ値と前記所定の整列幅制約とに基づいて前記第2の面ポインタ値と前記第3の面ポインタ値とを決定することと、
    前記第1の整列BLTコマンドが、前記第1の整列BLTコマンドに関連する前記複数の仮想面のうちの1つの前記第2の面ポインタ値を指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが、前記第2の整列BLTコマンドに関連する前記複数の仮想面のうちの1つの前記第3の面ポインタ値を指定するように前記第2の整列BLTコマンドを生成することと
    を備える、請求項1に記載の方法。
  11. 前記第2の面ポインタ値が、前記第1の面ポインタ値よりも小さく、前記第3の面ポインタ値が、前記第1の面ポインタ値よりも大きい、請求項10に記載の方法。
  12. 前記複数の整列BLTコマンドを生成することが、前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することを備える、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
    ここにおいて、前記第1の整列BLTコマンドを生成することは、前記第1の整列BLTコマンドが、前記第2の面幅と、前記第2の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することを備える、
    ここにおいて、前記第2の整列BLTコマンドを生成することは、前記第2の整列BLTコマンドが、前記第2の面幅と、前記第3の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することを備える、請求項10に記載の方法。
  13. 前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、請求項12に記載の方法。
  14. ブロック転送(BLT)コマンドを記憶するように構成されたメモリと、
    非整列BLTコマンドを複数の整列BLTコマンドに変換することと、ここにおいて、前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する複数の面のうちの第1の面のための第1の面幅と、前記第1の面内の第1のBLT領域とを指定し、前記第1の面が、ピクセルデータの2次元アレイに対応前記第1の面は、前記第1の面幅を有する複数の線を含み、
    前記第1の面幅に基づいて第2の面幅を決定することと、ここにおいて、前記第2の面幅が前記第1の面幅のN倍であり、ここで、Nは、2以上の整数である、
    記複数の整列BLTコマンドの各々に関連する複数の仮想面のうちの少なくとも1つのための前記第2の面幅を前記複数の整列BLTコマンドの各々が指定するように前記複数の整列BLTコマンドを生成することと
    を行うように構成された、1つまたは複数のプロセッサと
    を備え、前記複数の整列BLTコマンドが、
    前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、前記第2の面幅を各々指定し、前記ソース仮想面は、前記第1の面中の前記複数の線のうちのN個の線のセットを組み合わせることによって定義され、
    記ソース仮想面に関連するN個のソース領域および前記宛先仮想面に関連するN個の宛先領域と
    を指定し、前記N個のソース領域が、前記非整列BLTコマンドに関連する前記第1のBLT領域を、前記複数の整列BLTコマンドに関連するN個の不連続の領域に分割することによって作成される、デバイス。
  15. 前記1つまたは複数のプロセッサが、前記第1の面幅と、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第2の面幅を決定することを行うようにさらに構成された、請求項14に記載のデバイス。
  16. 前記第1の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記1つまたは複数のプロセッサは、前記第2の面幅が前記所定の整列幅制約の整数倍であるように前記第2の面幅を決定することを行うようにさらに構成された、請求項15に記載のデバイス。
  17. Nが2に等しい、請求項14に記載のデバイス。
  18. 前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記1つまたは複数のプロセッサが、
    前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
    前記第1の整列BLTコマンドが前記第2のBLT領域を指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが前記第3のBLT領域を指定するように前記第2の整列BLTコマンドを生成することと
    を行うようにさらに構成された、請求項14に記載のデバイス。
  19. 前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、請求項18に記載のデバイス。
  20. 前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する前記第1の面の第1の面ポインタ値を指定する、ここにおいて、前記1つまたは複数のプロセッサが、
    前記複数の整列BLTコマンドの各々が、前記複数の整列BLTコマンドの各々に関連する前記複数の仮想面のうちの1つのための前記第1の面ポインタ値を指定するように前記複数の整列BLTコマンドを生成すること
    を行うようにさらに構成された、請求項14に記載のデバイス。
  21. 前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記1つまたは複数のプロセッサが、
    前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
    前記第1の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが、前記第2の面幅と、前記第1の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することと
    を行うようにさらに構成された、請求項20に記載のデバイス。
  22. 前記第2のBLT領域が、前記第1のBLT領域の偶数線を含み、前記第3のBLT領域が、前記第1のBLT領域の奇数線を含む、請求項21に記載のデバイス。
  23. 前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する前記第1の面の第1の面ポインタ値を指定する、ここにおいて、前記第1の面ポインタ値が、前記複数の整列BLTコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列BLTコマンドが、第1の整列BLTコマンドと第2の整列BLTコマンドとを備える、ここにおいて、前記1つまたは複数のプロセッサが、
    第2の面ポインタ値と第3の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第1の面ポインタ値と前記所定の整列幅制約とに基づいて前記第2の面ポインタ値と前記第3の面ポインタ値とを決定することと、
    前記第1の整列BLTコマンドが、前記第1の整列BLTコマンドに関連する前記複数の仮想面のうちの1つの前記第2の面ポインタ値を指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが、前記第2の整列BLTコマンドに関連する前記複数の仮想面のうちの1つの前記第3の面ポインタ値を指定するように前記第2の整列BLTコマンドを生成することと
    を行うようにさらに構成された、請求項14に記載のデバイス。
  24. 前記第2の面ポインタ値が、前記第1の面ポインタ値よりも小さく、前記第3の面ポインタ値が、前記第1の面ポインタ値よりも大きい、請求項23に記載のデバイス。
  25. 前記1つまたは複数のプロセッサが、
    前記第1のBLT領域に基づいて第2のBLT領域と第3のBLT領域とを決定することと、前記第2のBLT領域が、前記第3のBLT領域とは異なる、
    前記第1の整列BLTコマンドが、前記第2の面幅と、前記第2の面ポインタ値と、前記第2のBLT領域とを指定するように前記第1の整列BLTコマンドを生成することと、
    前記第2の整列BLTコマンドが、前記第2の面幅と、前記第3の面ポインタ値と、前記第3のBLT領域とを指定するように前記第2の整列BLTコマンドを生成することと
    を行うようにさらに構成された、請求項23に記載のデバイス。
  26. 前記デバイスが、ワイヤレス通信デバイスとモバイルフォンハンドセットとのうちの少なくとも1つを備える、請求項14に記載のデバイス。
  27. 非整列ブロック転送(BLT)コマンドを受信するための手段と、
    前記非整列BLTコマンドを複数の整列BLTコマンドに変換するための手段と、ここにおいて、前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する複数の面のうちの第1の面のための第1の面幅と、前記第1の面内の第1のBLT領域とを指定し、前記第1の面が、ピクセルデータの2次元アレイに対応し、前記第1の面は、前記第1の面幅を有する複数の線を含み、
    前記第1の面幅に基づいて第2の面幅を決定するための手段と、ここにおいて、前記第2の面幅が前記第1の面幅のN倍であり、ここで、Nは、2以上の整数である、
    記複数の整列BLTコマンドの各々に関連する複数の仮想面のうちの少なくとも1つのための前記第2の面幅を前記複数の整列BLTコマンドの各々が指定するように前記複数の整列BLTコマンドを生成するための手段と
    を備え、前記複数の整列BLTコマンドが、
    前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、前記第2の面幅を各々指定し、前記ソース仮想面は、前記第1の面中の前記複数の線のうちのN個の線のセットを組み合わせることによって定義され、
    記ソース仮想面に関連するN個のソース領域および前記宛先仮想面に関連するN個の宛先領域と
    を指定し、前記N個のソース領域が、前記非整列BLTコマンドに関連する前記第1のBLT領域を、前記複数の整列BLTコマンドに関連するN個の不連続の領域に分割することによって作成される、装置。
  28. 実行されたとき、1つまたは複数のプロセッサに、
    非整列ブロック転送(BLT)コマンドを複数の整列BLTコマンドに変換することと、ここにおいて、前記非整列BLTコマンドが、前記非整列BLTコマンドに関連する複数の面のうちの第1の面のための第1の面幅と、前記第1の面内の第1のBLT領域とを指定し、前記第1の面が、ピクセルデータの2次元アレイに対応前記第1の面は、前記第1の面幅を有する複数の線を含み、
    前記第1の面幅に基づいて第2の面幅を決定することと、ここにおいて、前記第2の面幅が前記第1の面幅のN倍であり、ここで、Nは、2以上の整数である、
    記複数の整列BLTコマンドの各々に関連する複数の仮想面のうちの少なくとも1つのための前記第2の面幅を前記複数の整列BLTコマンドの各々が指定するように前記複数の整列BLTコマンドを生成することと
    を行わせる命令を記憶し、前記複数の整列BLTコマンドが、
    前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、前記第2の面幅を各々指定し、前記ソース仮想面は、前記第1の面中の前記複数の線のうちのN個の線のセットを組み合わせることによって定義され、
    記ソース仮想面に関連するN個複数のソース領域および前記宛先仮想面に関連するN個の宛先領域と
    を指定し、前記N個のソース領域が、前記非整列BLTコマンドに関連する前記第1のBLT領域を、前記複数の整列BLTコマンドに関連するN個の不連続の領域に分割することによって作成される、非一時的コンピュータ可読記憶媒体。
JP2017530746A 2014-12-10 2015-11-06 非整列ブロック転送動作の処理 Expired - Fee Related JP6352546B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/566,423 2014-12-10
US14/566,423 US9818170B2 (en) 2014-12-10 2014-12-10 Processing unaligned block transfer operations
PCT/US2015/059450 WO2016093990A1 (en) 2014-12-10 2015-11-06 Processing unaligned block transfer operations

Publications (3)

Publication Number Publication Date
JP2017539030A JP2017539030A (ja) 2017-12-28
JP2017539030A5 JP2017539030A5 (ja) 2018-02-15
JP6352546B2 true JP6352546B2 (ja) 2018-07-04

Family

ID=54602040

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017530746A Expired - Fee Related JP6352546B2 (ja) 2014-12-10 2015-11-06 非整列ブロック転送動作の処理

Country Status (5)

Country Link
US (1) US9818170B2 (ja)
EP (1) EP3230880A1 (ja)
JP (1) JP6352546B2 (ja)
CN (1) CN107003964B (ja)
WO (1) WO2016093990A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107533233B (zh) 2015-03-05 2021-01-29 奇跃公司 用于增强现实的***和方法
US10838207B2 (en) 2015-03-05 2020-11-17 Magic Leap, Inc. Systems and methods for augmented reality
US10180734B2 (en) 2015-03-05 2019-01-15 Magic Leap, Inc. Systems and methods for augmented reality
WO2017096396A1 (en) 2015-12-04 2017-06-08 Magic Leap, Inc. Relocalization systems and methods
KR20240009543A (ko) 2016-08-02 2024-01-22 매직 립, 인코포레이티드 고정-거리 가상 및 증강 현실 시스템들 및 방법들
US10812936B2 (en) 2017-01-23 2020-10-20 Magic Leap, Inc. Localization determination for mixed reality systems
CA3054619C (en) 2017-03-17 2024-01-30 Magic Leap, Inc. Mixed reality system with virtual content warping and method of generating virtual content using same
US10762598B2 (en) 2017-03-17 2020-09-01 Magic Leap, Inc. Mixed reality system with color virtual content warping and method of generating virtual content using same
KR102359978B1 (ko) * 2017-03-17 2022-02-07 매직 립, 인코포레이티드 다중-소스 가상 콘텐츠 합성을 갖는 혼합 현실 시스템 및 이를 사용하여 가상 콘텐츠를 생성하는 방법
CN117711284A (zh) 2018-07-23 2024-03-15 奇跃公司 场顺序显示器中的场内子码时序
JP7304934B2 (ja) 2018-07-23 2023-07-07 マジック リープ, インコーポレイテッド 仮想コンテンツワーピングを伴う複合現実システムおよびそれを使用して仮想コンテンツを生成する方法
CN109656477B (zh) * 2018-12-11 2020-05-19 华中科技大学 一种基于STT-MRAM的非接触式智能卡SoC
CN111126589B (zh) * 2019-12-31 2022-05-20 昆仑芯(北京)科技有限公司 神经网络数据处理装置、方法和电子设备
CN111899150A (zh) * 2020-08-28 2020-11-06 Oppo广东移动通信有限公司 数据处理方法、装置、电子设备及存储介质

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2089165B (en) * 1980-10-30 1985-10-09 Canon Kk Character and image processing
US4903217A (en) * 1987-02-12 1990-02-20 International Business Machines Corp. Frame buffer architecture capable of accessing a pixel aligned M by N array of pixels on the screen of an attached monitor
US5131083A (en) 1989-04-05 1992-07-14 Intel Corporation Method of transferring burst data in a microprocessor
US5218674A (en) * 1990-09-14 1993-06-08 Hughes Aircraft Company Hardware bit block transfer operator in a graphics rendering processor
US5251298A (en) * 1991-02-25 1993-10-05 Compaq Computer Corp. Method and apparatus for auxiliary pixel color management using monomap addresses which map to color pixel addresses
CA2074388C (en) * 1992-01-30 2003-01-14 Jeremy E. San Programmable graphics processor having pixel to character conversion hardware for use in a video game system or the like
US5801717A (en) * 1996-04-25 1998-09-01 Microsoft Corporation Method and system in display device interface for managing surface memory
US6031550A (en) * 1997-11-12 2000-02-29 Cirrus Logic, Inc. Pixel data X striping in a graphics processor
WO1999034273A2 (en) 1997-12-30 1999-07-08 Lsi Logic Corporation Automated dual scatter/gather list dma
US6065070A (en) 1998-03-18 2000-05-16 National Semiconductor Corporation DMA configurable channel with memory width N and with steering logic comprising N multiplexors, each multiplexor having a single one-byte input and N one-byte outputs
US6542909B1 (en) * 1998-06-30 2003-04-01 Emc Corporation System for determining mapping of logical objects in a computer system
US6411302B1 (en) 1999-01-06 2002-06-25 Concise Multimedia And Communications Inc. Method and apparatus for addressing multiple frame buffers
US6513107B1 (en) * 1999-08-17 2003-01-28 Nec Electronics, Inc. Vector transfer system generating address error exception when vector to be transferred does not start and end on same memory page
JP2001111651A (ja) 1999-10-07 2001-04-20 Internatl Business Mach Corp <Ibm> データ伝送装置およびその方法
US6587112B1 (en) 2000-07-10 2003-07-01 Hewlett-Packard Development Company, L.P. Window copy-swap using multi-buffer hardware support
US6900813B1 (en) 2000-10-04 2005-05-31 Ati International Srl Method and apparatus for improved graphics rendering performance
US7120317B1 (en) * 2001-03-01 2006-10-10 Silicon Motion, Inc. Method and system for a programmable image transformation
US7340495B2 (en) * 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
US6943804B2 (en) * 2002-10-30 2005-09-13 Hewlett-Packard Development Company, L.P. System and method for performing BLTs
EP1631911B1 (en) 2003-05-26 2007-02-14 Koninklijke Philips Electronics N.V. Method and device for transferring data between a main memory and a storage device
US7308526B2 (en) * 2004-06-02 2007-12-11 Intel Corporation Memory controller module having independent memory controllers for different memory types
US7296108B2 (en) 2005-05-26 2007-11-13 International Business Machines Corporation Apparatus and method for efficient transmission of unaligned data
US8031197B1 (en) 2006-02-03 2011-10-04 Nvidia Corporation Preprocessor for formatting video into graphics processing unit (“GPU”)-formatted data for transit directly to a graphics memory
FR2899354A1 (fr) 2006-03-28 2007-10-05 St Microelectronics Sa Traitement de donnees avec transfert de donnees entre memoires.
JP5226341B2 (ja) * 2008-02-27 2013-07-03 富士通株式会社 チャネル装置、情報処理システム、及びデータ転送方法
US9245496B2 (en) * 2012-12-21 2016-01-26 Qualcomm Incorporated Multi-mode memory access techniques for performing graphics processing unit-based memory transfer operations

Also Published As

Publication number Publication date
EP3230880A1 (en) 2017-10-18
WO2016093990A1 (en) 2016-06-16
CN107003964B (zh) 2020-05-22
US20160171644A1 (en) 2016-06-16
CN107003964A (zh) 2017-08-01
US9818170B2 (en) 2017-11-14
JP2017539030A (ja) 2017-12-28

Similar Documents

Publication Publication Date Title
JP6352546B2 (ja) 非整列ブロック転送動作の処理
US10885607B2 (en) Storage for foveated rendering
JP6009692B2 (ja) グラフィックスプロセッシングユニットベースのメモリ転送動作を行うためのマルチモードメモリアクセス技法
KR102475212B1 (ko) 타일식 아키텍처들에서의 포비티드 렌더링
JP6185211B1 (ja) 適応的シェーディングによるテクスチャルックアップを使用した帯域幅低減
JP6073533B1 (ja) タイルベースのアーキテクチャ上での最適化されたマルチパスレンダリング
JP6133490B2 (ja) タイルベースのレンダリングのためのイントラフレームタイムスタンプ
US10062139B2 (en) Vertex shaders for binning based graphics processing
US10078883B2 (en) Writing graphics data from local memory to system memory
JP2018512644A (ja) 低品質タイルを使用してメモリ帯域幅を減らすためのシステムおよび方法
US9019284B2 (en) Input output connector for accessing graphics fixed function units in a software-defined pipeline and a method of operating a pipeline
US7490208B1 (en) Architecture for compact multi-ported register file

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171221

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171221

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20171221

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20180116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180206

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180419

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180508

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180606

R150 Certificate of patent or registration of utility model

Ref document number: 6352546

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees