(57)【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサを用いて、非整列ブロック転送（ＢＬＴ）コマンドを複数の整列ＢＬＴコマンドに変換すること
を備え、前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する複数の面のうちの第１の面のための第１の面幅と、前記第１の面内の第１のＢＬＴ領域とを指定し、前記第１の面が、ピクセルデータの２次元アレイに対応し、前記第１の面は、前記第１の面幅を有する複数の線を含み、ここにおいて、前記非整列ＢＬＴコマンドを変換することが、
前記第１の面幅に基づいて第２の面幅を決定することと、ここにおいて、前記第２の面幅が前記第１の面幅のＮ倍であり、ここで、Ｎは、２以上の整数である、
前記複数の整列ＢＬＴコマンドの各々に関連する複数の仮想面のうちの少なくとも１つのための前記第２の面幅を前記複数の整列ＢＬＴコマンドの各々が指定するように、前記複数の整列ＢＬＴコマンドを生成することと、
を備え、前記複数の整列ＢＬＴコマンドが、
前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、それぞれ前記第２の面幅を各々指定し、前記ソース仮想面は、前記第１の面中の前記複数の線のうちのＮ個の線のセットを組み合わせることによって定義され、
前記ソース仮想面に関連するＮ個のソース領域および前記宛先仮想面に関連するＮ個の宛先領域と、
を指定し、
前記Ｎ個のソース領域が、前記非整列ＢＬＴコマンドに関連する前記第１のＢＬＴ領域を、前記複数の整列ＢＬＴコマンドに関連するＮ個の不連続の領域に分割することによって作成される、方法。
【請求項２】
前記第２の面幅を決定することが、前記第１の面幅と、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第２の面幅を決定することを備える、請求項１に記載の方法。
【請求項３】
前記第１の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記第１の面幅と前記所定の整列幅制約とに基づいて前記第２の面幅を決定することは、前記第２の面幅が前記所定の整列幅制約の整数倍であるように前記第２の面幅を決定することを備える、請求項２に記載の方法。
【請求項４】
Ｎが２に等しい、請求項１に記載の方法。
【請求項５】
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが前記第２のＢＬＴ領域を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが前記第３のＢＬＴ領域を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を備える、請求項１に記載の方法。
【請求項６】
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、請求項５に記載の方法。
【請求項７】
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する前記第１の面の第１の面ポインタ値を指定する、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
前記複数の整列ＢＬＴコマンドの各々が、前記複数の整列ＢＬＴコマンドの各々に関連する前記複数の仮想面のうちの１つのための前記第１の面ポインタ値を指定するように前記複数の整列ＢＬＴコマンドを生成すること
を備える、請求項１に記載の方法。
【請求項８】
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することと
を備える、請求項７に記載の方法。
【請求項９】
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、請求項８に記載の方法。
【請求項１０】
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する前記第１の面の第１の面ポインタ値を指定する、ここにおいて、前記第１の面ポインタ値が、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
第２の面ポインタ値と第３の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第１の面ポインタ値と前記所定の整列幅制約とに基づいて前記第２の面ポインタ値と前記第３の面ポインタ値とを決定することと、
前記第１の整列ＢＬＴコマンドが、前記第１の整列ＢＬＴコマンドに関連する前記複数の仮想面のうちの１つの前記第２の面ポインタ値を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の整列ＢＬＴコマンドに関連する前記複数の仮想面のうちの１つの前記第３の面ポインタ値を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を備える、請求項１に記載の方法。
【請求項１１】
前記第２の面ポインタ値が、前記第１の面ポインタ値よりも小さく、前記第３の面ポインタ値が、前記第１の面ポインタ値よりも大きい、請求項１０に記載の方法。
【請求項１２】
前記複数の整列ＢＬＴコマンドを生成することが、前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することを備える、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
ここにおいて、前記第１の整列ＢＬＴコマンドを生成することは、前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第２の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することを備える、
ここにおいて、前記第２の整列ＢＬＴコマンドを生成することは、前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第３の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することを備える、請求項１０に記載の方法。
【請求項１３】
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、請求項１２に記載の方法。
【請求項１４】
ブロック転送（ＢＬＴ）コマンドを記憶するように構成されたメモリと、
非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換することと、ここにおいて、前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する複数の面のうちの第１の面のための第１の面幅と、前記第１の面内の第１のＢＬＴ領域とを指定し、前記第１の面が、ピクセルデータの２次元アレイに対応し、前記第１の面は、前記第１の面幅を有する複数の線を含み、
前記第１の面幅に基づいて第２の面幅を決定することと、ここにおいて、前記第２の面幅が前記第１の面幅のＮ倍であり、ここで、Ｎは、２以上の整数である、
前記複数の整列ＢＬＴコマンドの各々に関連する複数の仮想面のうちの少なくとも１つのための前記第２の面幅を前記複数の整列ＢＬＴコマンドの各々が指定するように、前記複数の整列ＢＬＴコマンドを生成することと
を行うように構成された、１つまたは複数のプロセッサと
を備え、前記複数の整列ＢＬＴコマンドが、
前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、前記第２の面幅を各々指定し、前記ソース仮想面は、前記第１の面中の前記複数の線のうちのＮ個の線のセットを組み合わせることによって定義され、
前記ソース仮想面に関連するＮ個のソース領域および前記宛先仮想面に関連するＮ個の宛先領域と
を指定し、前記Ｎ個のソース領域が、前記非整列ＢＬＴコマンドに関連する前記第１のＢＬＴ領域を、前記複数の整列ＢＬＴコマンドに関連するＮ個の不連続の領域に分割することによって作成される、デバイス。
【請求項１５】
前記１つまたは複数のプロセッサが、前記第１の面幅と、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第２の面幅を決定することを行うようにさらに構成された、請求項１４に記載のデバイス。
【請求項１６】
前記第１の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記１つまたは複数のプロセッサは、前記第２の面幅が前記所定の整列幅制約の整数倍であるように前記第２の面幅を決定することを行うようにさらに構成された、請求項１５に記載のデバイス。
【請求項１７】
Ｎが２に等しい、請求項１４に記載のデバイス。
【請求項１８】
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記１つまたは複数のプロセッサが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが前記第２のＢＬＴ領域を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが前記第３のＢＬＴ領域を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、請求項１４に記載のデバイス。
【請求項１９】
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、請求項１８に記載のデバイス。
【請求項２０】
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する前記第１の面の第１の面ポインタ値を指定する、ここにおいて、前記１つまたは複数のプロセッサが、
前記複数の整列ＢＬＴコマンドの各々が、前記複数の整列ＢＬＴコマンドの各々に関連する前記複数の仮想面のうちの１つのための前記第１の面ポインタ値を指定するように前記複数の整列ＢＬＴコマンドを生成すること
を行うようにさらに構成された、請求項１４に記載のデバイス。
【請求項２１】
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記１つまたは複数のプロセッサが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、請求項２０に記載のデバイス。
【請求項２２】
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、請求項２１に記載のデバイス。
【請求項２３】
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する前記第１の面の第１の面ポインタ値を指定する、ここにおいて、前記第１の面ポインタ値が、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記１つまたは複数のプロセッサが、
第２の面ポインタ値と第３の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第１の面ポインタ値と前記所定の整列幅制約とに基づいて前記第２の面ポインタ値と前記第３の面ポインタ値とを決定することと、
前記第１の整列ＢＬＴコマンドが、前記第１の整列ＢＬＴコマンドに関連する前記複数の仮想面のうちの１つの前記第２の面ポインタ値を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の整列ＢＬＴコマンドに関連する前記複数の仮想面のうちの１つの前記第３の面ポインタ値を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、請求項１４に記載のデバイス。
【請求項２４】
前記第２の面ポインタ値が、前記第１の面ポインタ値よりも小さく、前記第３の面ポインタ値が、前記第１の面ポインタ値よりも大きい、請求項２３に記載のデバイス。
【請求項２５】
前記１つまたは複数のプロセッサが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第２の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第３の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、請求項２３に記載のデバイス。
【請求項２６】
前記デバイスが、ワイヤレス通信デバイスとモバイルフォンハンドセットとのうちの少なくとも１つを備える、請求項１４に記載のデバイス。
【請求項２７】
非整列ブロック転送（ＢＬＴ）コマンドを受信するための手段と、
前記非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するための手段と、ここにおいて、前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する複数の面のうちの第１の面のための第１の面幅と、前記第１の面内の第１のＢＬＴ領域とを指定し、前記第１の面が、ピクセルデータの２次元アレイに対応し、前記第１の面は、前記第１の面幅を有する複数の線を含み、
前記第１の面幅に基づいて第２の面幅を決定するための手段と、ここにおいて、前記第２の面幅が前記第１の面幅のＮ倍であり、ここで、Ｎは、２以上の整数である、
前記複数の整列ＢＬＴコマンドの各々に関連する複数の仮想面のうちの少なくとも１つのための前記第２の面幅を前記複数の整列ＢＬＴコマンドの各々が指定するように、前記複数の整列ＢＬＴコマンドを生成するための手段と
を備え、前記複数の整列ＢＬＴコマンドが、
前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、前記第２の面幅を各々指定し、前記ソース仮想面は、前記第１の面中の前記複数の線のうちのＮ個の線のセットを組み合わせることによって定義され、
前記ソース仮想面に関連するＮ個のソース領域および前記宛先仮想面に関連するＮ個の宛先領域と
を指定し、前記Ｎ個のソース領域が、前記非整列ＢＬＴコマンドに関連する前記第１のＢＬＴ領域を、前記複数の整列ＢＬＴコマンドに関連するＮ個の不連続の領域に分割することによって作成される、装置。
【請求項２８】
実行されたとき、１つまたは複数のプロセッサに、
非整列ブロック転送（ＢＬＴ）コマンドを複数の整列ＢＬＴコマンドに変換することと、ここにおいて、前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する複数の面のうちの第１の面のための第１の面幅と、前記第１の面内の第１のＢＬＴ領域とを指定し、前記第１の面が、ピクセルデータの２次元アレイに対応し、前記第１の面は、前記第１の面幅を有する複数の線を含み、
前記第１の面幅に基づいて第２の面幅を決定することと、ここにおいて、前記第２の面幅が前記第１の面幅のＮ倍であり、ここで、Ｎは、２以上の整数である、
前記複数の整列ＢＬＴコマンドの各々に関連する複数の仮想面のうちの少なくとも１つのための前記第２の面幅を前記複数の整列ＢＬＴコマンドの各々が指定するように、前記複数の整列ＢＬＴコマンドを生成することと
を行わせる命令を記憶し、前記複数の整列ＢＬＴコマンドが、
前記複数の仮想面のうちのソース仮想面および前記複数の仮想面のうちの宛先仮想面と、前記ソース仮想面および前記宛先仮想面は、前記第２の面幅を各々指定し、前記ソース仮想面は、前記第１の面中の前記複数の線のうちのＮ個の線のセットを組み合わせることによって定義され、
前記ソース仮想面に関連するＮ個複数のソース領域および前記宛先仮想面に関連するＮ個の宛先領域と
を指定し、前記Ｎ個のソース領域が、前記非整列ＢＬＴコマンドに関連する前記第１のＢＬＴ領域を、前記複数の整列ＢＬＴコマンドに関連するＮ個の不連続の領域に分割することによって作成される、非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、グラフィックス処理に関し、より詳細には、グラフィックスプロセッサを用いてブロック転送（ＢＬＴ）動作を実行するための技法に関する。
【背景技術】
【０００２】
[0002]グラフィックス処理ユニット（ＧＰＵ）は、しばしば、ソース面（source surface）の領域を宛先面（destination surface）の領域に複製すること、または複数のソース面の対応する領域を宛先面の単一の対応する領域に合成することを行うためにＢＬＴ動作を実行する。ＧＰＵは、ＢＬＴ動作の一部としてメモリとの間で面を書き込み、読み取るための特殊なハードウェアを含み得る。面を書き込み、読み取るためのＧＰＵハードウェアは、ＢＬＴコマンドをうまくサービスするために満たされる必要がある様々な整列制約を有し得る。ＢＬＴコマンドが、そのような整列制約を満たさない場合、ＧＰＵハードウェアは、ＢＬＴコマンドをサービスすることができないことがある。
【発明の概要】
【０００３】
[0003]本開示では、非整列ＢＬＴコマンドを処理するための技法について説明する。非整列ＢＬＴコマンドは、整列制約されたＧＰＵの整列制約を満たさず、したがって、ＧＰＵによって処理されることができないことがあるＢＬＴコマンドを指す（refer to）ことがある。本開示の技法は、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換すること、ここで、複数の整列ＢＬＴコマンドは、非整列ＢＬＴコマンドによって生成された（produced）であろうメモリ状態と同じ結果として生じるメモリ状態を集合的に生成し得る、を伴い得る。ただし、非整列ＢＬＴコマンドとは異なり、複数の整列ＢＬＴコマンドは、ＧＰＵの整列制約を満たし、したがって、ＧＰＵによって処理されることが可能であり得る。
【０００４】
[0004]ＢＬＴコマンドを処理するためにＧＰＵを使用することは、中央処理ユニット（ＣＰＵ）を使用することと比較して、ＢＬＴコマンドの実行を加速し、および／またはＢＬＴコマンドの実行に関連する電力消費量を低減し得る。したがって、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換することによって、比較的低電力のＧＰＵ加速ＢＬＴ処理の利益が、下にある（underlying）非整列面をＣＰＵが前処理および／または後処理する必要なしに非整列ＢＬＴコマンドのために達成され得る。このようにして、整列制約されたＧＰＵベースのシステムにおいて非整列ＢＬＴコマンドを処理することに関連するパフォーマンスおよび／または電力消費量が改善され得る。
【０００５】
[0005]一例では、本開示では、１つまたは複数のプロセッサを用いて、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換することを含む方法について説明する。
【０００６】
[0006]別の例では、本開示では、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するように構成された１つまたは複数のプロセッサを含むデバイスについて説明する。
【０００７】
[0007]別の例では、本開示では、非整列ＢＬＴコマンドを受信するための手段を含む装置について説明する。本装置は、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するための手段をさらに含む。
【０００８】
[0008]別の例では、本開示では、実行されたとき、１つまたは複数のプロセッサに、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換することを行わせる命令を記憶したコンピュータ可読記憶媒体について説明する。
【０００９】
[0009]本開示の１つまたは複数の例の詳細を添付の図面および以下の説明に記載する。本開示の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１０】
【図１】[0010]本開示のＢＬＴ動作処理技法を実施するために使用され得る例示的なコンピューティングデバイスを示すブロック図。
【図２】[0011]図１のコンピューティングデバイスの部分（portions）をさらに詳細に示すブロック図。
【図３】[0012]本開示による、例示的な単一のソースＢＬＴ動作を示す概念図。
【図４】[0013]本開示による、例示的な複数のソースＢＬＴ動作を示す概念図。
【図５】[0014]図１および図２の例示的なコンピューティングデバイスのための例示的なコマンド処理フローを示す概念図。
【図６】[0015]本開示による、面の線を組み合わせることによって整列面を生成するための例示的な技法を示す概念図。
【図７】[0016]図６に示した技法を使用した非整列ＢＬＴ動作の２つの整列ＢＬＴ動作への例示的な変換を示す概念図。
【図８】図６に示した技法を使用した非整列ＢＬＴ動作の２つの整列ＢＬＴ動作への例示的な変換を示す概念図。
【図９】[0017]本開示による、複数の整列仮想面を定義するための例示的な技法を示す概念図。
【図１０】[0018]本開示による、図９において定義されている複数の整列仮想面を使用して非整列ＢＬＴ動作の２つの整列ＢＬＴ動作への例示的な変換を示す概念図。
【図１１】本開示による、図９において定義されている複数の整列仮想面を使用して非整列ＢＬＴ動作の２つの整列ＢＬＴ動作への例示的な変換を示す概念図。
【図１２】[0019]本開示による、非整列ＢＬＴ動作を処理するための例示的な技法を示す流れ図。
【発明を実施するための形態】
【００１１】
[0020]本開示では、非整列ブロック転送（unaligned block transfer）（ＢＬＴ）コマンドを処理するための技法について説明する。非整列ＢＬＴコマンドは、整列制約されたグラフィックス処理ユニット（ＧＰＵ）の整列制約を満たさず、したがって、ＧＰＵによって処理されることができないことがあるＢＬＴコマンドを指すことがある。本開示の技法は、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換すること、ここで、複数の整列ＢＬＴコマンドは、非整列ＢＬＴコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を集合的に生成し得る、を伴い得る。ただし、非整列ＢＬＴコマンドとは異なり、複数の整列ＢＬＴコマンドは、ＧＰＵの整列制約を満たし、したがって、ＧＰＵによって処理されることが可能であり得る。
【００１２】
[0021]ＢＬＴコマンドを処理するためにＧＰＵを使用することは、中央処理ユニット（ＣＰＵ）を使用することと比較して、ＢＬＴコマンドの実行を加速し、および／またはＢＬＴコマンドの実行に関連する電力消費量を低減し得る。したがって、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換することによって、比較的低電力のＧＰＵ加速ＢＬＴ処理の利益が、下にある非整列面をＣＰＵが前処理および／または後処理する必要なしに非整列ＢＬＴコマンドのために達成され得る。このようにして、整列制約されたＧＰＵベースのシステムにおいて非整列ＢＬＴコマンドを処理することに関連するパフォーマンスおよび／または電力消費量が改善され得る。
【００１３】
[0022]ＢＬＴコマンドは、ＧＰＵにＢＬＴ動作を実行するように命令するコマンドを指すことがある。ＢＬＴ動作は、ソース面の領域を宛先面の領域に複製すること、または複数のソース面の対応する領域を宛先面の単一の対応する領域に合成することを伴う動作を指すことがある。ソース面の領域は、ソース領域と呼ばれることがあり、宛先面の領域は、宛先領域と呼ばれることがある。ソース領域および宛先領域は、それらの領域内のピクセルに関して複製および合成することが行われることを示すために、代替的に、ＢＬＴ領域および／または複製領域と呼ばれることがある。ＢＬＴ領域の各々は、それぞれのＢＬＴ領域を含む面の連続するサブセットであり得る。いくつかの例では、ＢＬＴ領域は、長方形の領域であり得る。
【００１４】
[0023]ＧＰＵは、ＢＬＴ動作の一部としてメモリとの間で面を書き込み読み取る（writing and reading surfaces）ための特殊なハードウェアを含み得る。ハードウェアは、面の各線の開始が所定の整列幅の整数倍であるメモリアドレスに対応することを必要とする整列制約を有し得る。整列制約を満たす面は、整列面であると言われ、一方、整列制約を満たさない面は、非整列面であると言われる。
【００１５】
[0024]しばしば、コンパイラまたはアプリケーションは、ＢＬＴ動作を実行しているであろう特定のＧＰＵハードウェアの整列制約へのアクセスを有し得、したがって、結果として生じる面が整列されるように整列制約に基づいてＢＬＴ命令を生成し得る。ただし、すべてのシステムが、ＧＰＵの整列制約をコンパイラまたはアプリケーションに利用可能にするとは限らない。または、利用可能な場合であっても、いくつかのコンパイラまたはアプリケーションは、様々な理由で（たとえば、コンパイラまたはアプリケーションの複雑さを低減するために）そのような整列制約を満たすために、生成されたコードを最適化しないことを決定し得る。
【００１６】
[0025]ＢＬＴ動作のための１つまたは複数の面がＧＰＵハードウェアの整列制約を満たさない場合、ＧＰＵドライバは、ＢＬＴ動作のパフォーマンスを加速するためにＧＰＵを直接使用することができないことがある。代わりに、ＧＰＵドライバは、中央処理ユニット（ＣＰＵ）を用いてＢＬＴ動作を実行する必要があり得る。他の場合には、ＧＰＵドライバは、非整列面を整列面に複製するためにＣＰＵを使用し、整列面に対してＢＬＴ動作を実行するためにＧＰＵを使用し、非整列面にＢＬＴ動作の結果を複製し戻すためにＣＰＵを使用し得る。いずれの場合も、ＢＬＴ動作自体を実行するかまたは非整列面と整列面との間で変換するためにＣＰＵを使用することは、ＢＬＴ動作の電力消費量を増加させ、ＢＬＴ動作のパフォーマンスを低減させる。
【００１７】
[0026]整列ＢＬＴコマンドは、ＢＬＴコマンドに関連する面のすべてが整列面であるＢＬＴコマンドを指すことがある。非整列ＢＬＴコマンドは、面のうちの少なくとも１つが非整列面であるＢＬＴコマンドを指すことがある。同様に、整列ＢＬＴ動作は、ＢＬＴ動作に関連する面のすべてが整列面であるＢＬＴ動作を指すことがあり、非整列ＢＬＴ動作は、面のうちの少なくとも１つが非整列面であるＢＬＴコマンドを指すことがある。
【００１８】
[0027]概念的に、整列面は、面の各線の開始が所定の整列幅の整数倍であるメモリアドレスに対応する面を指すことがある。所定の整列幅は、いくつかの例では、ＢＬＴ動作の適切な実行のためにＧＰＵメモリアクセスハードウェアによって必要とされる整列幅に対応し得る。整列境界は、所定の整列幅の整数倍であるメモリアドレスを指すことがある。
【００１９】
[0028]面は、面ポインタと、面幅パラメータと、面高さパラメータとによって定義され得る。面ポインタは、面の開始に対応するメモリアドレスを示し（または指し）得る。面幅パラメータ（またはストライドパラメータ）は、面中の各線の幅を示し得る。面高さパラメータは、面中に何本の線が含まれるかを示し得る。
【００２０】
[0029]整列面は、（１）面ポインタが整列境界を指し、（２）面幅が整列幅の整数倍である面を指すことがある。これらの条件のいずれかが満たされない場合、面は非整列であると言われる。
【００２１】
[0030]本開示の第１の態様によれば、条件（１）が満たされ、条件（２）が満たされない（すなわち、ＢＬＴコマンドの下にある面のための面幅が整列幅の整数倍でない）場合、グラフィックスドライバは、ＢＬＴコマンドに関連するソース面と宛先面との各々について、整列幅の整数倍である面幅を有する整列仮想面を形成するために、それぞれの面の複数の線を単一の線に組み合わせ得る。仮想面のための面幅が整列幅の整数倍であるので、仮想面は、整列制約されたＧＰＵによって処理され得る整列面である。
【００２２】
[0031]しかしながら、仮想面を形成するために線を組み合わせることにより、ＢＬＴ領域（すなわち、コピーおよび／または合成されるべき領域）をもはや連続する領域でない（たとえば、もはや単一の連続する矩形でない）ように変換するようになり得る。たとえば、着信（incoming）ＢＬＴコマンドに関連するソースＢＬＴ領域が、単一の連続する矩形である場合、ソース面を仮想ソース面に変換することは、ソースＢＬＴ領域を、互いに連続しないことがある２つの別個の矩形に変換し得る。一般に、単一のＢＬＴ動作は、不連続のＢＬＴ領域に対して実行されないことがある。
【００２３】
[0032]この問題に対処するために、グラフィックスドライバは、変換されたＢＬＴ領域の連続するサブセットを決定し、複数のＢＬＴコマンドを生成し得、ここで、ＢＬＴコマンドの各々は、ＧＰＵに、変換されたＢＬＴ領域の連続するサブセットの各１つに対してＢＬＴ動作を実行させる。たとえば、長方形ソースＢＬＴ領域が２つの長方形ソースＢＬＴ領域に変換される場合、グラフィックスドライバは、第１に長方形ソースＢＬＴ領域のための第１のＢＬＴコマンドと第２の長方形ソースＢＬＴ領域のための第２のＢＬＴコマンドとを生成し得る。
【００２４】
[0033]複数のＢＬＴコマンドのためのソース面と宛先面との各々は、１つまたは複数の整列仮想面に対応し、それによって、複数のＢＬＴコマンドを整列ＢＬＴコマンドにさせ得る。複数の整列ＢＬＴコマンドは、ソースおよび宛先ＢＬＴ領域全体を集合的に処理し、それによって、単一の非整列ＢＬＴコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。このようにして、グラフィックスドライバは、非整列ＢＬＴコマンドを整列制約されたＧＰＵによってサービスされ得る複数の整列ＢＬＴコマンドに変換し得る。
【００２５】
[0034]本開示の第２の態様によれば、条件（１）および（２）の両方が満たされない（すなわち、面ポインタが整列境界を指さず、ＢＬＴコマンドの下にある面のための面幅が整列幅の整数倍でない）場合、グラフィックスドライバは、本開示の第１の態様に関して上記で説明したのと同様の方法で非整列面の幅を広げ得る。これにより、広げられた面幅が、整列幅に対応するようになる。ただし、広げられた面の面ポインタが整列境界において開始していないので、広げられた面は依然として整合されない。
【００２６】
[0035]この問題に対処するための１つの手法は、シフトされた面ポインタが最も近い整列境界を指すように面ポインタをシフトすることである。本開示の第１の態様に関して上記で説明したことと同様に、面を広げることは、ＢＬＴ領域を複数の連続するサブセットに変換し得、グラフィックスドライバは、複数のＢＬＴコマンドを生成し得、ここで、ＢＬＴコマンドの各々は、ＧＰＵに、変換されたＢＬＴ領域の連続するサブセットの各１つに対してＢＬＴ動作を実行させる。ただし（However）、仮想面の幅が同じままである場合、面ポインタをシフトすることにより、面の境界の近くにある変換されたＢＬＴ領域サブセットが仮想面の端にラップアラウンドされるようになり得る。言い換えれば、そのような変換されたＢＬＴ領域サブセットは、もはや連続でないことがあり、単一のＢＬＴ動作によってサービスされることができないことがある。
【００２７】
[0036]この問題に対処するために、グラフィックスドライバは、ソース面と宛先面との各々のための２つの仮想面を生成し得る。２つの仮想面は、同じ広げられた面幅を有するが、別個の（separate）整列面ポインタを有し得る。仮想面の各々のための面ポインタは、非整列面ポインタのいずれかの側にある整列境界に対応し得る。たとえば、ＧＰＵドライバは、非整列面ポインタよりも小さい整列境界を指す第１の仮想面のための面ポインタを生成し、非整列面ポインタよりも大きい整列境界を指す第２の仮想面のための面ポインタを生成し得る。
【００２８】
[0037]変換されたＢＬＴ領域サブセットは、仮想面のうちの１つの端をラップアラウンドする場合、他の仮想面の端をラップアラウンドしないことになるだろう。したがって、変換されたＢＬＴ領域サブセットの各々のためのＢＬＴコマンドを生成するとき、グラフィックスドライバは、各ＢＬＴコマンドのための仮想面を選択し得、ここで、対応する変換されたＢＬＴ領域サブセットは、仮想面の端をラップアラウンドしない。言い換えれば、グラフィックスドライバは、変換されたＢＬＴ領域サブセットの各々を連続する領域（たとえば、連続する長方形領域）として表わされることを可能にする仮想面を選択し得る。
【００２９】
[0038]複数のＢＬＴコマンドのためのソース面と宛先面との各々は、複数の整列仮想面のうちの１つに対応し、それによって、複数のＢＬＴコマンドを整列ＢＬＴコマンドにさせ得る。複数の整列ＢＬＴコマンドは、ソースおよび宛先ＢＬＴ領域全体を集合的に処理し、それによって、単一の非整列ＢＬＴコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。
【００３０】
[0039]非整列ＢＬＴコマンドとは異なり、複数の整列ＢＬＴコマンドは、整列制約されたグラフィックス処理ユニット（ＧＰＵ）によって処理されることが可能であり得、これは、中央処理ユニット（ＣＰＵ）と比較して、ＢＬＴコマンドの実行を加速すること、および／またはＢＬＴコマンドの実行に関連する電力消費量を低減することが可能であり得る。非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換することによって、比較的低電力のＧＰＵ加速ＢＬＴ処理の利益が、下にある非整列面をＣＰＵが前処理および／または後処理する必要なしに非整列ＢＬＴコマンドのために達成され得る。このようにして、非整列ＢＬＴコマンドを処理することに関連するパフォーマンスおよび／または電力消費量が改善され得る。
【００３１】
[0040]図１は、本開示のＢＬＴ動作処理技法を実施するために使用され得る例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはビデオゲーム機、ワイヤレス通信デバイス（たとえば、携帯電話、セルラ電話、衛星電話、および／または携帯電話送受話器など）、陸線電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレイヤ、ビデオプレイヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、または、グラフィカルデータを処理し、および／もしくは表示する任意の他のタイプのデバイスを備え得る。
【００３２】
[0041]図１の例に示すように、コンピューティングデバイス２は、ユーザ入力インターフェース４と、ＣＰＵ６と、メモリサブシステム８と、ＧＰＵ１０と、ディスプレイインターフェース１２と、ディスプレイ１４と、バス１６とを含む。ユーザ入力インターフェース４、ＣＰＵ６、メモリサブシステム８、ＧＰＵ１０およびディスプレイインターフェース１２は、バス１６を使用して相互に通信し得る。図１に示す異なる構成要素同士の間のバスおよび通信インターフェースの特定の構成は単なる例示であり、本開示の本技法を実装するために、同じもしくは異なる構成要素を備えたコンピューティングデバイスおよび／または他のグラフィックス処理システムの他の構成が使用され得ることに留意されたい。
【００３３】
[0042]ユーザ入力インターフェース４により、１つまたは複数のユーザ入力デバイス（図示せず）をコンピューティングデバイス２に通信可能に結合することが可能になり得る。ユーザ入力デバイスにより、ユーザは、ユーザ入力インターフェース４を介してコンピューティングデバイス２に入力を与えることが可能になり得る。例示的なユーザ入力デバイスは、キーボード、マウス、トラックボール、マイクロフォン、タッチパッド、タッチセンシティブまたはプレゼンスセンシティブディスプレイ、あるいは別の入力デバイスを含む。タッチセンシティブまたはプレゼンスセンシティブディスプレイがユーザ入力デバイスとして使用される例では、ユーザ入力インターフェース４の全部または一部は、ディスプレイ１４に統合され得る。
【００３４】
[0043]ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用または特殊用途プロセッサを備え得る。ＣＰＵ６は、１つまたは複数のソフトウェアアプリケーションを実行し得る。ソフトウェアアプリケーションは、たとえば、ビデオゲームアプリケーション、グラフィックスアプリケーション、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレイヤアプリケーション、グラフィカルユーザインターフェースアプリケーション、オペレーティングシステム、あるいは任意の他のタイプのソフトウェアアプリケーションまたはプログラムを含み得る。
【００３５】
[0044]ＣＰＵ６上で実行するソフトウェアアプリケーションは、ディスプレイ１４へのグラフィックスデータのレンダリングを行わせるようにＧＰＵ１０に命令する１つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（商標登録））アプリケーションプログラミングインターフェース（ＡＰＩ）、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、ＤｉｒｅｃｔＸ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、または任意の他の公開の、もしくはプロプライエタリの標準的なグラフィックスＡＰＩなどのグラフィックスＡＰＩに準拠し得る。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、グラフィックスデータのレンダリングの一部または全部をＧＰＵ１０に実行させるために、１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１０に発行し得る。いくつかの例では、レンダリングされることになるグラフィックスデータは、たとえば、点、線、三角形、四角形、トライアングルストリップ、パッチなど、グラフィックスプリミティブのリストを含み得る。
【００３６】
[0045]メモリサブシステム８は、コンピューティングデバイス２の中の他の構成要素から受信されたメモリアクセス要求にサービスするように構成され得る。たとえば、メモリサブシステム８は、ＣＰＵ６、ＧＰＵ１０、および／またはディスプレイインターフェース１２からのメモリアクセス要求にサービスし得る。メモリアクセス要求は、読取りアクセス要求と書込みアクセス要求とを含み得る。メモリサブシステム８は、バス１６を介してＣＰＵ６、ＧＰＵ１０、ユーザ入力インターフェース４、およびディスプレイインターフェース１２に通信可能に結合される。
【００３７】
[0046]メモリサブシステム８は、メモリコントローラ２０とメモリ２２とを含む。メモリコントローラ２０は、メモリ２２に入りメモリ２２から出るデータの転送を容易にする。たとえば、メモリコントローラ２０は、メモリ読取り要求とメモリ書込み要求とをＣＰＵ６および／またはＧＰＵ１０から受信し、コンピューティングデバイス２の中の構成要素にメモリサービスを提供するために、メモリ２２に関するそのような要求にサービスし得る。
【００３８】
[0047]メモリコントローラ２０は、専用のメモリバスを介してメモリ２２に、および、バス１６を介して他の構成要素（たとえば、ＣＰＵ６およびＧＰＵ１０）に通信可能に結合される。メモリコントローラ２０は、図１の例示的なコンピューティングデバイス２では、ＣＰＵ６とメモリ２２の両方とは別の処理モジュールとして示されているが、他の例では、メモリコントローラ２０の機能の一部または全部は、ＣＰＵ６、ＧＰＵ１０、およびメモリ２２の１つもしくは複数で実装され得る。
【００３９】
[0048]メモリ２２は、ＣＰＵ６による実行のためにアクセス可能なプログラムモジュールおよび／もしくは命令ならびに／またはＣＰＵ６上で実行されるプログラムが使用するためのデータを記憶し得る。たとえば、メモリ２２は、ユーザアプリケーションと、それらのアプリケーションに関連するグラフィックスデータとを記憶し得る。メモリ２２は、コンピューティングデバイス２の他の構成要素が使用するための情報、および／またはそれらによって生成された情報を記憶し得る。たとえば、メモリ２２は、ＧＰＵ１０のデバイスメモリとして働き得、ＧＰＵ１０によって演算されることになるデータ、ならびにＧＰＵ１０によって実行される演算の結果生じるデータを記憶し得る。たとえば、メモリ２２は、ソース面、宛先面、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの、面の任意の組合せを記憶し得る。さらに、メモリ２２は、ＧＰＵ１０によって処理するためのコマンドストリームを記憶し得る。メモリ２２は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、同期式ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光記憶媒体などの１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含み得る。いくつかの例では、メモリ２２は、たとえば、ＤＤＲ１  ＳＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ、ＤＤＲ４  ＳＤＲＡＭなどのダブルデータレート（ＤＤＲ）ＳＤＲＡＭであり得る。
【００４０】
[0049]ＧＰＵ１０は、ＣＰＵ６によってＧＰＵ１０に出されたコマンドを実行するように構成され得る。ＧＰＵ１０によって実行されるコマンドは、グラフィックスコマンド、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、ＢＬＴコマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含み得る。ＢＬＴコマンドは、たとえば、メモリ複製コマンド、メモリ合成コマンド、およびブリットコマンド（すなわち、ブロック転送コマンド）を含み得る。
【００４１】
[0050]いくつかの例では、ＧＰＵ１０は、ＣＰＵ６から受信されたグラフィックスデータをレンダリングし、表示するように構成され得る。そのような例では、ＣＰＵ６は、ディスプレイ１４にレンダリングするためのグラフィックスデータをＧＰＵ１０に提供し、ＧＰＵ１０に１つまたは複数のグラフィックスコマンドを発行し得る。グラフィックスコマンドとしては、たとえば、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、ＢＬＴコマンド、ブリットコマンドなどがあり得る。グラフィックスデータは、頂点バッファ、テクスチャデータ、面データなどを含み得る。いくつかの例では、ＣＰＵ６は、コマンドとグラフィックスデータとをＧＰＵ１０によってアクセスされ得るメモリ２２に書き込むことによって、コマンドとグラフィックスデータとをＧＰＵ１０に提供し得る。
【００４２】
[0051]さらなる例では、ＧＰＵ１０は、ＣＰＵ６上で実行されるアプリケーションのために汎用コンピューティングを実行するように構成され得る。そのような例では、ＣＰＵ６は、ＧＰＵ１０に汎用コンピューティングデータを提供し、ＧＰＵ１０に１つまたは複数の汎用コンピューティングコマンドを発行し得る。汎用コンピューティングコマンドは、たとえば、カーネル実行コマンド、ＢＬＴコマンドなどを含み得る。いくつかの例では、ＣＰＵ６は、コマンドとグラフィックスデータとをＧＰＵ１０によってアクセスされ得るメモリ２２に書き込むことによって、コマンドと汎用コンピューティングデータとをＧＰＵ１０に提供し得る。
【００４３】
[0052]ＧＰＵ１０は、いくつかの例では、ＣＰＵ６よりも効率的なベクトル演算の処理を行う高度に並列な構造を伴って構築され得る。たとえば、ＧＰＵ１０は、複数の頂点、制御点、画素および／または他のデータについて並列の方式で演算するように構成された複数の処理要素を含み得る。ＧＰＵ１０の高度並列特性により、いくつかの例では、ＧＰＵ１０が、ＣＰＵ６を使用して画像をレンダリングするよりも迅速にグラフィックス画像（たとえば、ＧＵＩならびに２次元（２Ｄ）および／または３次元（３Ｄ）のグラフィックスシーン）をディスプレイ１４上にレンダリングすることが可能になり得る。加えて、ＧＰＵ１０の高度に並列な性質により、ＧＰＵ１０が、ＣＰＵ６よりも迅速に、汎用コンピューティングアプリケーションのためのいくつかのタイプのベクトル演算と行列演算とを処理することが可能になり得る。
【００４４】
[0053]いくつかの例では、ＧＰＵ１０は、コンピューティングデバイス２のマザーボードに統合され得る。他の事例では、ＧＰＵ１０は、コンピューティングデバイス２のマザーボード中のポートに取り付けられたグラフィックスカード上に存在し得、または場合によっては、コンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる例では、ＧＰＵ１０は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。ＧＰＵ１０は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、または他の同等の集積回路もしくはディスクリート論理回路などの、１つまたは複数のプロセッサを含み得る。
【００４５】
[0054]いくつかの例では、ＧＰＵ１０は、メモリ２２のすべてまたは一部分にキャッシングサービスを提供し得るＧＰＵキャッシュを含み得る。そのような例では、ＧＰＵ１０は、オフチップメモリではなくローカルストレージを使用してデータをローカルに処理するのにキャッシュを使用し得る。これにより、ＧＰＵ１０が、大量のバストラフィックを受けることがある、バス１６を介してＧＰＵ１０がメモリ２２にアクセスする必要を減らすことによって、より効率的な方法で動作することが可能になり得る。しかしながら、いくつかの例では、ＧＰＵ１０は、別個のキャッシュを含まず、代わりに、バス１６を介してメモリ２２を利用し得る。ＧＰＵは、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリあるいはストレージデバイスを含み得る。
【００４６】
[0055]ＣＰＵ６および／またはＧＰＵ１０は、レンダリングされた画像データをメモリ２２内に割り振られたフレームバッファ内に記憶し得る。ディスプレイインターフェース１２は、データをフレームバッファから取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ１４を構成し得る。いくつかの例では、ディスプレイインターフェース１２は、フレームバッファから取り出されたデジタル値を、ディスプレイ１４によって消費可能なアナログ信号に変換するように構成されたデジタルアナログコンバータ（ＤＡＣ）を含み得る。他の例では、ディスプレイインターフェース１２は、処理のために、デジタル値をディスプレイ１４に直接渡し得る。
【００４７】
[0056]ディスプレイ１４は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ（ＳＥＤ：surface-conduction electron-emitted display）、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ１４は、コンピューティングデバイス２内に統合され得る。たとえば、ディスプレイ１４は、携帯電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイ１４は、有線またはワイヤレス通信リンクを介してコンピューティングデバイス２に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ１４は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００４８】
[0057]バス１６は、第１世代、第２世代、および第３世代のバス構造ならびにバスプロトコルと、共有されたバス構造およびバスプロトコルと、ポイントツーポイントバス構造およびバスプロトコルと、一方向バス構造およびバスプロトコルと、双方向バス構造およびバスプロトコルとを含む、バス構造およびバスプロトコルの任意の組合せを使用して実装され得る。バス１６を実装するために使用され得る様々なバス構造およびバスプロトコルの例としては、たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバス、ＩｎｆｉｎｉＢａｎｄバス、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ  Ｂｕｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＡＭＢＡ）Ａｄｖａｎｃｅｄ  Ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ  Ｂｕｓ（ＡＨＢ）、ＡＭＢＡ  Ａｄｖａｎｃｅｄ  Ｐｅｒｉｐｈｅｒａｌ  Ｂｕｓ（ＡＰＢ）、およびＡＭＢＡ  Ａｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バスがある。他のタイプのバス構造およびプロトコルも使用され得る。
【００４９】
[0058]ＧＰＵ１０は、ＢＬＴコマンドを受信し、対応するＢＬＴ動作を実行することによってＢＬＴコマンドをサービスし得る。場合によっては、ＧＰＵ１０は、ＢＬＴ動作を実行するように構成されたメモリアクセスハードウェアを含み得、このハードウェアは、ＢＬＴ動作をうまく（successfully）サービスするために満たされる必要がある様々な整列制約を有し得る。たとえば、そのようなメモリアクセスハードウェアは、ＢＬＴ動作のための面の一部または全部が整列されていることを必要とするように構成され得る。
【００５０】
[0059]整合されるべき面について、メモリアクセスハードウェアは、（１）面のための面ポインタが整列境界を指すこと、および（２）面のための面幅が整列幅の整数倍であることを必要とし得る。これらの条件のいずれかが満たされない場合、面は非整列であると言われる。
【００５１】
[0060]場合によっては、ＣＰＵ６上で実行されているソフトウェアアプリケーションは、非整列ＢＬＴコマンドを発行し得る。非整列ＢＬＴコマンドは、ソフトウェアアプリケーションをコンパイルしたコンパイラまたは書き込まれたソフトウェアアプリケーションが、コンパイルおよび／またはランタイム時にコンパイラまたはアプリケーションにとって利用可能な整列制約を有しなかったか、あるいは（たとえば、コンパイラまたはアプリケーションの複雑さを低減するために）整列制約を満たすために生成されたコードを最適化することを決定しなかったときに生じ得る。ＢＬＴコマンドが非整列であるので、ＧＰＵ１０は、そのようなコマンドを直接サービスすることができないことがある。
【００５２】
[0061]本開示の例によれば、ＣＰＵ６および／またはＧＰＵ１０は、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換すること、ここで、複数の整列ＢＬＴコマンドは、非整列ＢＬＴコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を集合的に生成し得る、を行うように構成され得る。複数の整列ＢＬＴコマンドは、ＧＰＵ１０の整列制約を満たし、したがって、ＧＰＵ１０によって処理されることが可能であり得る。このようにして、比較的低電力のＧＰＵ加速ＢＬＴ処理の利益が非整列ＢＬＴコマンドについて取得され、それによって、非整列ＢＬＴコマンドを処理することに関連するパフォーマンスおよび／または電力消費量を改善し得る。
【００５３】
[0062]図２は、図１中のコンピューティングデバイス２の部分をさらに詳細に示すブロック図である。図２に示すように、ＣＰＵ６はＧＰＵ１０とメモリサブシステム８とに通信可能に結合され、ＧＰＵ１０はＣＰＵ６とメモリサブシステム８とに通信可能に結合される。いくつかの例では、ＧＰＵ１０は、ＣＰＵ６とともにマザーボード上に統合され得る。追加の例では、ＧＰＵ１０は、ＣＰＵ６を含むマザーボードのポート中に設置されたグラフィックスカード上で実装され得る。さらなる例では、ＧＰＵ１０は、ＣＰＵ６と相互作用するように構成された周辺デバイス内に組み込まれ得る。追加の例では、ＧＰＵ１０は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。
【００５４】
[0063]図２の例示的なシステムでは、ＣＰＵ６は、ソフトウェアアプリケーション２４と、グラフィックスＡＰＩ２６と、ＧＰＵドライバ２８と、オペレーティングシステム３０とを実行する。ソフトウェアアプリケーション２４は、グラフィックス画像を表示させる１つもしくは複数の命令および／または非グラフィックスタスク（たとえば、汎用コンピューティングタスク）をＧＰＵ１０上で実行させる１つもしくは複数の命令を含み得る。いくつかの例では、ソフトウェアアプリケーション２４は、１つまたは複数のＢＬＴ命令を含み得、これは、代替的に、ＢＬＴコマンド、ソフトウェアＢＬＴコマンド、またはアプリケーションＢＬＴコマンドと呼ばれることがある。ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６に命令を発行し得る。グラフィックスＡＰＩ２６は、ソフトウェアアプリケーション２４から受信された命令をＧＰＵドライバ２８によって消費可能なフォーマットに変換するランタイムサービスであり得る。
【００５５】
[0064]ＧＰＵドライバ２８は、グラフィックスＡＰＩ２６を介してソフトウェアアプリケーション２４から命令を受信し、命令をサービスするためにＧＰＵ１０の動作を制御する。たとえば、ＧＰＵドライバ２８は、１つまたは複数のコマンドを編成し、コマンドをメモリ２２の中に配置し、コマンドを実行するようにＧＰＵ１０に命令し得る。いくつかの例では、ＧＰＵドライバ２８は、コマンドをメモリ２２の中に配置し、たとえば、１つまたは複数のシステム呼出しを介してオペレーティングシステム３０を介してＧＰＵ１０と通信し得る。
【００５６】
[0065]いくつかの例では、ＧＰＵドライバ２８（またはＣＰＵ６上の別のソフトウェア構成要素）は、本開示で説明する技法のいずれかに従って、ソフトウェアアプリケーション２４から非整列ＢＬＴコマンドを受信し、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するように構成され得る。ＧＰＵドライバ２８は、実行のためにＧＰＵ１０に複数の整列ＢＬＴコマンドを与え得る。
【００５７】
[0066]ＧＰＵ１０は、コマンドエンジン３２と、ラスタ演算ユニット３４と、バッファ３６と、読取りエンジン３８と、書込みエンジン４０とを含む。いくつかの例では、ＧＰＵ１０は、３次元（３Ｄ）グラフィックスレンダリングパイプライン（図示せず）を含み得る。そのような例では、ラスタ演算ユニット３４は、３Ｄグラフィックスレンダリングパイプラインの一部を形成し得る。
【００５８】
[0067]いくつかの例では、ＧＰＵ１０は、その各々がプログラマブル処理ユニットまたは固定機能処理ユニットであり得る複数の処理ユニット（図示せず）を含み得る。ＧＰＵ１０が３Ｄグラフィックスレンダリングパイプラインを含む場合、複数の処理ユニットが、３Ｄグラフィックスレンダリングパイプラインを実装するために一緒に動作し得る。いくつかの例では、３Ｄグラフィックスレンダリングパイプラインは、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、ＤｉｒｅｃｔＸ  ＡＰＩなど、１つまたは複数の公開のおよび／またはプロプライエタリの３Ｄグラフィックス規格のＡＰＩによって指定される、３Ｄグラフィックスパイプラインに準拠し得る。
【００５９】
[0068]プログラマブル処理ユニットは、たとえば、ＣＰＵ６によってＧＰＵ１０上にロードされた１つまたは複数のシェーダプログラムを実行するように構成されたプログラマブルシェーダユニットを含み得る。いくつかの例では、シェーダプログラムは、たとえば、ＯｐｅｎＧＬ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＧＬＳＬ）、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）、Ｃ  ｆｏｒ  Ｇｒａｐｈｉｃｓ（Ｃｇ）シェーディング言語など、ハイレベルシェーディング言語で書き込まれたプログラムのコンパイルバージョンであり得る。いくつかの例では、プログラマブルシェーダユニットは、並列に動作するように構成された複数の処理ユニット、たとえば、ＳＩＭＤパイプラインを含み得る。プログラマブルシェーダユニットは、シェーダプログラム命令を記憶するプログラムメモリと、実行状態レジスタ、たとえば、実行されているプログラムメモリ中の現在の命令またはフェッチされることになる次の命令を示すプログラムカウンタレジスタとを有し得る。プログラマブルシェーダユニットは、たとえば、頂点シェーダユニット、ピクセルシェーダユニット、ジオメトリシェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、計算シェーダユニットなどを含み得る。
【００６０】
[0069]固定機能処理ユニットは、いくつかの機能を実行するために配線接続されたハードウェアを含み得る。固定機能ハードウェアは、１つまたは複数の制御信号を介して、たとえば、異なる機能を実行するように構成され得るが、固定機能ハードウェアは、通常、ユーザコンパイルプログラムを受信することが可能なプログラムメモリを含まない。ＧＰＵ１０中に含まれる固定機能処理ユニットは、たとえば、ラスタ演算、深度テスト、シザーテスト、アルファブレンドなどを実行する処理ユニットを含み得る。
【００６１】
[0070]ラスタ演算ユニット３４が３Ｄレンダリングパイプライン中に含まれる例では、ラスタ演算ユニット３４は、いくつかの例では、構成可能な固定機能処理ユニットであり得る。いくつかの例では、ラスタ演算ユニット３４は、３Ｄレンダリングパイプラインの出力統合処理ユニットとして実装され得る。
【００６２】
[0071]コマンドエンジン３２は、ＣＰＵ６からコマンドを受信し、ＧＰＵ１０にコマンドを実行させるように構成される。いくつかの例では、ＣＰＵ６は、コマンドをメモリ２２に配置し得、コマンドエンジン３２は、メモリ２２からコマンドを取り出し得る。コマンドは、たとえば、ＧＰＵ１０の状態（たとえば、レンダリング状態）を変更する状態コマンド、特定のシェーダプログラムを３Ｄレンダリングパイプライン中のプログラム可能処理ユニットの１つまたは複数へロードするようにＧＰＵ１０に命令するシェーダプログラム拘束コマンド、メモリ２２に記憶されている特定のデータをレンダリングするようにＧＰＵ１０に命令する描画コマンド、メモリ２２に記憶されている特定のデータに関して１つまたは複数の汎用コンピューティングカーネルを実行するようにＧＰＵ１０に命令する汎用コンピューティングコマンド、および／あるいは１つまたは複数のＢＬＴ動作を実行するようにＧＰＵ１０に命令するＢＬＴコマンドを含み得る。
【００６３】
[0072]状態コマンドを受信したことに応答して、コマンドエンジン３２は、状態コマンドに基づいて、ＧＰＵ１０の中の１つもしくは複数の状態レジスタを特定の値に設定するように、および／または、状態コマンドに基づいて、ＧＰＵ１０のための３Ｄレンダリングパイプライン（図示せず）中の固定機能処理ユニットの１つもしくは複数を構成するように構成され得る。描画呼出しコマンドを受信したことに応答して、コマンドエンジン３２は、ＧＰＵ１０中の３Ｄレンダリングパイプライン（図示せず）に、メモリ２２から３Ｄジオメトリを取り出させ、３Ｄジオメトリデータを２Ｄグラフィックス画像へとレンダリングさせるように構成され得る。シェーダプログラム拘束コマンドを受信したことに応答して、コマンドエンジン３２は、３Ｄレンダリングパイプライン中のプログラム可能処理ユニットの１つまたは複数に、１つまたは複数の特定のシェーダプログラムをロードし得る。
【００６４】
[0073]ＢＬＴコマンドを受信したことに応答して、コマンドエンジン３２は、ＧＰＵ１０に、ＢＬＴコマンドに対応するＢＬＴ動作を実行させ得る。ＢＬＴ動作を実行するために、コマンドエンジン３２は、いくつかの例では、ＢＬＴコマンドに基づいてラスタ演算ユニット３４、バッファ３６、読取りエンジン３８、書込みエンジン４０のうちの１つまたは複数を構成し、構成された構成要素に、ＢＬＴコマンドに対応するＢＬＴ動作を実行させ得る。
【００６５】
[0074]ラスタ演算ユニット３４は、宛先データを生成するために、ソースデータに基づいて１つまたは複数のラスタ演算を実行し得る。ソースデータは、ＢＬＴ動作の１つまたは複数のソースＢＬＴ領域に対応し得る。いくつかの例では、ラスタ演算ユニット３４は、バッファ３６および／または書込みエンジン４０からソースデータを受信し得る。宛先データは、ＢＬＴ動作に関連する宛先ＢＬＴ領域に書き込まれ得る。
【００６６】
[0075]ラスタ演算ユニット３４によって実行されるラスタ演算のタイプは、たとえば、コマンドエンジン３２によって構成可能であり得る。ラスタ演算のタイプは、特定のＢＬＴ動作についてのソースデータに基づいて宛先データがどのように生成されるべきかを指定し得る。ラスタ演算ユニット３４が宛先データを生成するために２つの異なるソース領域を組み合わせる（たとえば、合成動作）場合、ラスタ化演算のタイプは、宛先データを生成するために２つの異なるソース領域がどのように組み合わされるべきかを指定し得る。いくつかの例では、ラスタ演算のタイプは、宛先領域中の特定のピクセル位置についての宛先データが、ソース領域中の対応するピクセルロケーションに基づいてどのように生成されるべきかを指定する、ビットごとの演算であり得る。ソース領域中の対応するピクセルロケーションは、宛先領域中のピクセルロケーションと同じ、それぞれのソース領域の相対的なロケーションにあるピクセルロケーションであり得る。ビットごとの演算は、たとえば、ビットごとのＡＮＤ演算、ＯＲ演算、ＮＯＴ演算、および／またはＸＯＲ演算などのブーリアン演算を含み得る。ビットごとの演算はまた、ビット複製演算、ビット反転演算、塗りつぶし演算などを含み得る。
【００６７】
[0076]追加の例では、ラスタ演算のタイプは、ブレンド演算（たとえば、アルファブレンド演算）を含み得る。いくつかの例では、ブレンド演算は、ブレンド演算の実行の間に使用されるべきソースピクセル乗算器と宛先ピクセル乗算器とを指定し得る。そのような例では、ブレンド演算の実行の間に、ソースピクセル値（たとえば、ソースピクセル色および／またはソースアルファ値）は、第１の積を生成するためにソースピクセル乗算器によって乗算され得、対応する宛先ピクセル値（たとえば、宛先ピクセル色および／または宛先アルファ値）は、第２の積を生成するために宛先ピクセル乗算器によって乗算され得、ピクセルロケーションに対する宛先値を生成するために、２つの積の合計が一緒に加算され得る。他のタイプのブレンド演算も可能である。
【００６８】
[0077]いくつかの例では、コマンドエンジン３２は、ＣＰＵ６からＧＰＵ１０によって受信されたＢＬＴコマンド中に含まれるデータに基づいて、ラスタ演算ユニット３４を構成し得る。たとえば、コマンドエンジン３２は、ＢＬＴコマンドにおいて指定されているラスタ演算のタイプに基づいて、ラスタ演算ユニット３４によって実行されるべきラスタ演算のタイプを選択し、選択されたタイプのラスタ化演算を使用してＢＬＴ動作を実行するようにラスタ演算ユニット３４を構成し得る。
【００６９】
[0078]ラスタ演算ユニット３４は、ＢＬＴ動作についての宛先データを生成するために異なるソース領域を組み合わせるものとして本明細書で説明されてきたが、他の例では、ＧＰＵ１０中の１つまたは複数の他の構成要素は、ＢＬＴ動作を実行するために、ラスタ演算ユニット３４に加えて、またはその代わりに使用され得る。たとえば、ＧＰＵ１０のシェーダユニット（図示せず）上で実行されるシェーダプログラムは、ＢＬＴ動作についての宛先データを生成するために、シェーダプログラムにおいて指定されている組合せ技法に従って、異なるソース領域を組み合わせ得る。
【００７０】
[0079]バッファ３６は、ＢＬＴ動作の実行中にメモリ２２から取り出されたソースデータを記憶し得る。いくつかの例では、バッファ３６は、ＧＰＵ１０内の複数のレジスタとして実装され得る。バッファ３６は、たとえば、先入れ先出し（ＦＩＦＯ）バッファリング方式を含む、様々なバッファリング方式のいずれかを利用し得る。ＦＩＦＯバッファリング方式によれば、バッファ３６に記憶されているソースデータは、ソースデータがバッファ３６に配置された順序で、利用者（たとえば、書込みエンジン４０）によって利用される。
【００７１】
[0080]読取りエンジン３８は、メモリサブシステム８に読取り要求を発行し、読取り要求に応答して受信されたソースデータをバッファ３６に配置するように構成され得る。読取り要求は、ＣＰＵ６から受信されたＢＬＴコマンドにおいて指定されている１つまたは複数のソースＢＬＴ領域からデータを集合的に読み取り得る。
【００７２】
[0081]書込みエンジン４０は、バッファ３６からソースデータを利用し、利用されたソースデータに基づいて宛先データを生成し、宛先データをメモリ２２中の宛先領域に書き込むために書込み要求をメモリサブシステム８に発行するように構成され得る。書込み要求は、ＣＰＵ６から受信されたＢＬＴコマンドにおいて指定されている宛先ＢＬＴ領域にデータを集合的に書き込み得る。
【００７３】
[0082]いくつかの例では、書込みエンジン４０は、宛先データがソースデータと同一であるように、宛先データを生成し得る。そのような例は、たとえば、ＢＬＴ複製動作を実行するために使用され得る。さらなる例では、書込みエンジン４０は、宛先データを生成するために少なくとも２つの異なるソース領域からのソースデータを組み合わせ得る。そのような例は、たとえば、ＢＬＴ合成動作を実行するために使用され得る。そのような例では、書込みエンジン４０は、いくつかの例では、ソースデータを組み合わせ、宛先データを生成するためにラスタ演算を実行するためにラスタ演算ユニット３４を使用し得る。
【００７４】
[0083]いくつかの例では、ソースデータを利用することは、書込みエンジン４０が読取りエンジン３８からソースデータを直接受信し、ソースデータを処理することを指し得る。さらなる例では、ソースデータを利用することは、書込みエンジン４０がバッファ３６からソースデータを取り出し、ソースデータを処理することを指し得る。ソースデータを処理することは、ソースデータに基づいて宛先データを生成することを含み得る。データが処理された後、書込みエンジン４０は、宛先データを書き込むことを求める書込み要求を発行し得る。
【００７５】
[0084]いくつかの例では、読取りエンジン３８は、読み取られる面の各線の開始が所定の整列幅の整数倍であるメモリアドレスに対応することを必要とし得る。そのような要件は、本開示で説明する整列制約の一例であり得、所定の整列幅は、整列制約についての整列パラメータであり得る。そのような整列制約は、読取りエンジン３８を実装するためのハードウェアを簡略化し得る。所定の整列幅の整数倍であるメモリアドレスは、整列境界と呼ばれることがある。読取りエンジン３８が、適切な動作のためにそのような整列制約を必要とするとき、読取りエンジン３８は、整列制約された読取りエンジン３８と呼ばれることがある。
【００７６】
[0085]同様に、書込みエンジン４０は、さらなる例では、書き込まれるべき面の各線の開始が所定の整列幅の整数倍に対応することを必要とし得る。そのような要件は、本開示で説明する整列制約の一例をメイ（may）し、所定の整列幅は、整列制約についての整列パラメータであり得る。そのような要件は、書込みエンジン４０を実装するためのハードウェアを簡略化し得る。書込みエンジン４０が、適切な動作のためにそのような整列制約を必要とするとき、書込みエンジン４０は、整列制約された書込みエンジン４０と呼ばれることがある。
【００７７】
[0086]いくつかの例では、読取りエンジン３８と書込みエンジン４０との両方が整列制約され得る。さらなる例では、読取りエンジン３８は、整列制約され得、書込みエンジン４０は、整列制約されないことがある。追加の例では、書込みエンジン４０は、整列制約され得、読取りエンジン３８は、整列制約されないことがある。別の例では、読取りエンジン３８も書込みエンジン４０も整列制約されないことがある。
【００７８】
[0087]メモリサブシステム８はメモリ２２を含む。メモリ２２は、１つまたは複数のソース面４２と宛先面４４とを記憶し得る。ソース面４２および宛先面４４の各々は、ピクセルデータの２次元アレイに対応する。ピクセルデータは、面の中の各ピクセルロケーションに対する、赤、緑、青（ＲＧＢ）の色値と、いくつかの場合には、アルファ値（Ａ）とを含み得る。ソース面４２および宛先面４４はピクセルデータの２次元アレイに対応するので、面の中の個々のピクセルロケーションついてのピクセルデータは、行および列の座標によってアドレス指定され得る。ＢＬＴ動作において使用されるソース領域の各々は、それぞれのソース面のすべてまたはサブセットに対応し得、宛先領域は、宛先面のすべてまたはサブセットに対応し得る。ソース領域および宛先領域は同じサイズまたは形状であり得、必ずしもそうではないが、通常は長方形の形状の領域である。なお、図２に、別個のソース面４２と宛先面４４とを示す。いくつかの例では、宛先面４４が、ＢＬＴ動作のためのソース面として使用され得、および／または、ソース面４２の１つまたは複数が、ＢＬＴ動作のための宛先面として働き得る。メモリサブシステム８は、バス１６を介してＣＰＵ６、ＧＰＵ１０、読取りエンジン３８、および書込みエンジン４０に通信可能に結合される。
【００７９】
[0088]メモリアクセス要求を受信したことに応答して、メモリサブシステム８は、メモリ２２に関して要求されたメモリ動作を実行させ得る。たとえば、読取り要求を受信したことに応答して、メモリサブシステム８は、読取り要求において指定されている１つまたは複数のメモリアドレスに対応するメモリ２２中の１つまたは複数のメモリロケーションから、メモリ２２に記憶されているデータを取得し（すなわち、読み取り）、取得されたデータをＧＰＵ１０（たとえば、読取りエンジン３８）に提供し得る。別の例として、書込み要求と、書込み要求に対応する書込みデータとを受信したことに応答して、メモリサブシステム８は、書込みデータを、メモリ２２中の書込み要求において指定されている１つまたは複数のメモリアドレスに対応する１つまたは複数のロケーションに記憶させ得る。いくつかの例では、メモリサブシステム８は、書込み要求の完了が成功したという確認を、書込みエンジン４０に与え得る。
【００８０】
[0089]コマンドエンジン３２が、ＢＬＴ動作を実行するようにＧＰＵ１０中の他の処理構成要素を構成するものとして本明細書で説明するが、他の例では、ＧＰＵ１０中の１つまたは複数の他の構成要素が、コマンドエンジン３２に加えてまたはその代わりにこれらの機能を実行し得る。たとえば、専用のＢＬＴ動作制御ユニットが、コマンドエンジン３２の上述の機能を実行するために使用され得、または読取りエンジン３８および書込みエンジン４０が、そのような機能を実行するように構成され得る。
【００８１】
[0090]上記で説明したように、ＧＰＵ１０は、ＣＰＵ６から受信されたＢＬＴコマンドをサービスするためにＢＬＴ動作を実行し得る。ＢＬＴ動作は、ＢＬＴ複製動作とＢＬＴ合成動作とを含み得る。いくつかの例では、ＢＬＴ動作は、代替的に、メモリ転送動作と呼ばれることがある。ＢＬＴ複製動作は、ソース面のソース領域から宛先面の宛先領域にデータを複製することを伴い得る。すなわち、ＧＰＵ１０は、ソース面のソース領域からデータを読み取り、ソース面のソース領域に含まれるデータの厳密な複製を、宛先面の宛先領域に書き込み得る。
【００８２】
[0091]ＢＬＴ合成動作は、同じまたは異なるソース面の少なくとも２つの異なるソース領域を何らかの方式で組み合わせることと、ソース領域の組合せを宛先面の宛先領域に書き込むこととを伴い得る。いくつかの場合には、ソース面の１つまたは複数は、ＢＬＴ合成動作のための宛先面と同じ面であり得る。たとえば、ＢＬＴ合成動作は、単一のソース領域と単一の宛先領域とを読み取ることと、これら２つを一緒にブレンドすることと、ブレンドされた結果を宛先領域に書き込むこととを伴い得る。
【００８３】
[0092]いくつかの例では、ＢＬＴ合成動作を実行するとき、異なるソース領域が、ラスタ演算に従って組み合わされ得、ラスタ演算はＢＬＴ合成動作の異なる例ごとに異なり得る。ラスタ演算は、特定のＢＬＴ合成動作のためにビットがどのように組み合わされるべきであるかを指定する動作であり得る。いくつかの例では、ラスタ演算は、たとえばブーリアン論理演算などのビットごとの演算を含み得る。ブーリアン論理演算は、たとえば、ビットごとのＡＮＤ演算、ＯＲ演算、ＮＯＴ演算、および／またはＸＯＲ演算を含み得る。追加の例では、ラスタ演算は、ブレンド演算（たとえば、アルファブレンド演算）を含み得る。
【００８４】
[0093]ＢＬＴ動作において使用されるソース面および宛先面は、同じ面または異なる面であり得、ピクセルデータの２次元アレイに各々対応し得る。ピクセルデータは、面の中の各ピクセルに対する、赤、緑、青（ＲＧＢ）の色値と、いくつかの場合には、アルファ値（Ａ）とを含み得る。面はピクセルデータの２次元アレイに対応するので、面の中の個々のピクセルロケーションについてのピクセルデータは、行および列の座標によってアドレス指定され得る。ＢＬＴ動作において使用されるソース領域の各々は、それぞれのソース面のすべてまたはサブセットに対応し得る。同様に、ＢＬＴ動作において使用される宛先領域は、宛先面のすべてまたはサブセットに対応し得る。ソース領域および宛先領域は同じサイズまたは形状であり得、必ずしもそうではないが、通常は長方形の形状の領域である。
【００８５】
[0094]ＧＰＵ１０がＢＬＴ動作を実行するとき、ＢＬＴ動作のために使用されるソース面および宛先面は通常、オフチップメモリ２２中に記憶される。言い換えると、メモリ２２は、ＧＰＵ１０が形成、配置、および／または配設される、マイクロチップ、集積回路、および／またはダイとは異なる、マイクロチップ、集積回路、および／またはダイの上に形成、配置、および／または配設され得る。メモリ２２は、１つまたは複数のバス、場合によっては、メモリコントローラを介してＧＰＵ１０に通信可能に結合され得る。
【００８６】
[0095]ＢＬＴ複製動作を実行するとき、ＧＰＵ１０は、ソース領域中のピクセルロケーションの各々からデータを読み取り、ソース領域から読み取られたデータを宛先領域中の対応するピクセルロケーションに書き込み得る。同様に、ＢＬＴ合成動作を実行するとき、ＧＰＵ１０は、複数のソース領域中のロケーションの各々からデータを読み取り、データを組み合わせ、組み合わされたデータを宛先領域に書き込み得る。
【００８７】
[0096]図３は、本開示による、例示的な単一のソースＢＬＴ動作を示す概念図である。図３に、その各々がピクセルデータの２次元アレイに対応するソース面５０と宛先面５２とを示す。ピクセルデータは、面の中の各ピクセルに対する、赤、緑、青（ＲＧＢ）の色値と、いくつかの場合には、アルファ値（Ａ）とを含み得る。面５０、５２の各々はピクセルデータの２次元アレイに対応するので、面中の個々のピクセルロケーションについてのピクセルデータは、行および列の座標によってインデックス付けされ得る。いくつかの例では、ソース面５０および宛先面５２は、ビットマップであり得る。さらなる例では、ソース面５０および宛先面５２は、たとえばテクスチャバッファなどのバッファリソースであり得る。図３の例示的なソース面５０および宛先面５２は、同じ形状およびサイズであり、長方形の形状である。ただし、他の例では、ソース面５０と宛先面５２とは、異なる形状および／またはサイズを有し得る。
【００８８】
[0097]ソース面５０はソースＢＬＴ領域５４を含み、宛先面５２は宛先ＢＬＴ領域５６を含む。ソースＢＬＴ領域５４は、ソース面５０中に含まれるピクセルデータのサブセットを含み、宛先ＢＬＴ領域５６は、宛先面５２中に含まれるピクセルデータのサブセットを含む。面中に含まれるピクセルデータのサブセットは、面中に含まれるピクセルデータのすべてまたはすべて未満を指し得る。図３に示すように、ソースＢＬＴ領域５４と宛先ＢＬＴ領域５６とは、同じサイズおよび形状であり、長方形の形状である。ただし、他の例では、ソースＢＬＴ領域５４および宛先ＢＬＴ領域５６は、長方形の形状でないことがある。
【００８９】
[0098]図３に示す例示的なＢＬＴ動作では、ＧＰＵ１０は、ソース面５０のソースＢＬＴ領域５４から宛先面５２の宛先ＢＬＴ領域５６にデータを転送する。概して、ソースＢＬＴ領域５４中の各ピクセルロケーションについてのデータは、宛先ＢＬＴ領域５６中の対応するピクセルロケーションに転送される。異なる領域中の異なるピクセルロケーションは、それぞれの領域におけるピクセルロケーションの各々の相対的な配置が同じであれば、対応するピクセルロケーションであると言われ得る。たとえば、ソースＢＬＴ領域５４および宛先ＢＬＴ領域５６の第２行の第３列は、同じ相対的なロケーションを有する。
【００９０】
[0099]単一のソース領域がＢＬＴ動作のためのソースオペランドとして使用されるので、図３に示すＢＬＴ動作は、単一ソースのＢＬＴ動作である。図３に示す単一ソースのＢＬＴ動作は、ソースＢＬＴ領域５４のデータが宛先ＢＬＴ領域５６に複製されるＢＬＴ複製動作を表し得る。図３に示すＢＬＴ動作に別個のソース面５０と宛先面５２とを示すが、他の例では、ソース面５０と宛先面５２とは同じ面であり得る。そのような例では、ソースＢＬＴ領域５４と宛先ＢＬＴ領域５６とは、いくつかの例では、ＢＬＴ複製動作によってデータが転送される同じ面内の異なる領域であり得る。
【００９１】
[0100]図４は、本開示による、例示的な複数のソースＢＬＴ動作を示す概念図である。図４に、第１のソース面５８と、第２のソース面６０と、宛先面６２とを示す。面５８、６０、６２の各々は、図３に関して上記で説明した面５０、５２と実質的に同様であり得る。第１のソース面５８は、第１のソースＢＬＴ領域６４を含み、第２のソース面６０は、第２のソースＢＬＴ領域６６を含み、宛先面６２は、宛先ＢＬＴ領域６８を含む。第１のソースＢＬＴ領域６４は、第１のソース面５８中に含まれるピクセルデータのサブセットを含み、第２のソースＢＬＴ領域６６は、第２のソース面６０中に含まれるピクセルデータのサブセットを含み、宛先ＢＬＴ領域６８は、宛先面６２中に含まれるピクセルデータのサブセットを含む。図４に示すように、第１のソースＢＬＴ領域６４、第２のソースＢＬＴ領域６６、および宛先ＢＬＴ領域６８は、同じサイズおよび形状であり、長方形の形状である。ただし、他の例では、領域６４、６６、および６８は、長方形の形状でないことがある。
【００９２】
[0101]図４の例示的なＢＬＴ動作では、第１のソースＢＬＴ領域６４からのソースデータおよび第２のソースＢＬＴ領域６６からのソースデータが、宛先データを生成するために、ラスタ演算７０を介して組み合わされ、宛先データは、宛先面６２の宛先ＢＬＴ領域６８に配置される。一般に、第１のソースＢＬＴ領域６４中の各ピクセル位置のデータは、第２のソースＢＬＴ領域６６中の対応するピクセル位置からのデータと組み合わされ、宛先ＢＬＴ領域６８中の対応するピクセル位置に書き込まれる。異なる領域中の異なるピクセルロケーションは、それぞれの領域におけるピクセルロケーションの各々の相対的な配置が同じであれば、対応するピクセルロケーションであると言われ得る。
【００９３】
[0102]複数のソース領域がＢＬＴ動作のためのソースオペランドとして使用されるので、図４に示すＢＬＴ動作は、複数ソースのＢＬＴ動作である。図４に示す複数ソースのＢＬＴ動作は、宛先領域に書き込まれる宛先データを生成するためにＧＰＵ１０が２つの異なるソース領域からのデータを組み合わせるかまたは合成するＢＬＴ合成動作を表し得る。図４に示すＢＬＴ動作は、別個の第１のソース面５８と、第２のソース面６０と、宛先面６２とを示すが、他の例では、面５８、６０、６２のうちの１つまたは複数が同じ面であり得る。たとえば、第２のソース面６０と宛先面６２とが同じ面であり得、第２のソースＢＬＴ領域６６と宛先ＢＬＴ領域６８とがその面内の同じ領域であり得る。そのような例では、ＢＬＴ合成動作は、特定のラスタ演算子を使用して、第１のソースＢＬＴ領域６４中のピクセルデータを、宛先面６２中の既存のピクセルデータと統合し得る。
【００９４】
[0103]図５は、図１および図２の例示的なコンピューティングデバイスのための例示的なコマンド処理フロー７２を示す概念図である。図５に示すように、ソフトウェアアプリケーション２４は、ＧＰＵドライバ２８にソフトウェアＢＬＴコマンド７４を発行する。ＧＰＵドライバ２８は、ソフトウェアＢＬＴコマンド７４を受信し、ソフトウェアＢＬＴコマンド７４に基づいて１つまたは複数のＧＰＵ  ＢＬＴコマンド７６を生成し、ＧＰＵ１０にＧＰＵ  ＢＬＴコマンド７６を発行する。ＧＰＵ１０は、ＧＰＵ  ＢＬＴコマンド７６をサービスするためにＢＬＴ動作７８を実行する。たとえば、ＧＰＵ  ＢＬＴコマンド７６の各々について、ＧＰＵ１０は、それぞれの整列ＢＬＴ動作７８を実行し得る。
【００９５】
[0104]いくつかの例では、ソフトウェアＢＬＴコマンド７４は、非整列ＢＬＴコマンドであり得、ＧＰＵ  ＢＬＴコマンド７６は、ソフトウェアＢＬＴコマンド７４に対応する複数の整列ＢＬＴコマンドを含み得る。そのような例では、ＧＰＵドライバ２８は、本開示で説明する技法のいずれかに従って非整列ソフトウェアＢＬＴコマンド７４を複数の整列ＧＰＵ  ＢＬＴコマンド７６に変換し得る。
【００９６】
[0105]図６は、本開示による、整列仮想面を定義するための例示的な技法を示す概念図である。図６に、非整列面８０と仮想面８２とを示す。非整列面８０は、非整列ＢＬＴコマンドの一部としてソフトウェアアプリケーション２４から受信され得る。ＧＰＵドライバ２８は、非整列面８０に基づいて仮想面８２を定義し得る。
【００９７】
[0106]図６の例では、３２バイトの整列制約されたＧＰＵ（たとえば、ＧＰＵ１０）が、ＢＬＴ動作を実行するために使用される。３２バイトの整列制約されたＧＰＵは、面の線の各々の開始が３２（すなわち、所定の整列幅）の整数倍であることを必要とするＧＰＵに対応し得る。３２（すなわち、整列幅）の各倍数は、整列境界と呼ばれることがある。
【００９８】
[0107]図６に示すように、非整列面８０のための面幅は７２０バイトであり、非整列面８０のための面高さは４８０本の線（lines）である。７２０は、３２によって割り切れないので、非整列面８０のいくつかの線は、３２の倍数であるメモリアドレスにおいて開始しないことになるだろう。したがって、面８０は、非整列であると言われる。
【００９９】
[0108]ＧＰＵドライバ２８は、仮想面８２中で単一の線を形成するために非整列面８０からの２つの線のセットを一緒に組み合わせることによって仮想面８２を定義し得る。図６に示すように、仮想面８２は、非整列面８０の２倍の幅があり、半分の高さがある。仮想面８２の面幅は１４４０バイトであり、これは、３２によって割り切れる。したがって、仮想面８２は、３２バイトの整列制約されたＧＰＵがＢＬＴ動作を実行し得る整列面である。
【０１００】
[0109]図７および図８は、図６に示す技法に従って定義された整列仮想面を使用した非整列ＢＬＴ動作の２つの整列ＢＬＴ動作への例示的な変換を示す概念図である。
【０１０１】
[0110]図７に、ソフトウェアアプリケーション２４から受信されたＢＬＴコマンドに関連付けられ得る単一の非整列ＢＬＴ動作を示す。非整列ＢＬＴコマンドは、ＢＬＴ動作のための非整列ソース面８４と非整列宛先面８６とを指定する。ソース面８４はソースＢＬＴ領域８８を含み、宛先面８６は宛先ＢＬＴ領域９０を含む。図７に示すように、非整列ＢＬＴ動作は、ソース面８４のソースＢＬＴ領域８８を宛先面８６の宛先ＢＬＴ領域９０に転送する。
【０１０２】
[0111]図８に、単一の非整列ＢＬＴ動作に対応する整列２ＢＬＴ動作（aligned two-BLT operation）を示す。整列２ＢＬＴ動作は、２つの整列ＢＬＴコマンドによって指定された２つの別個のＢＬＴ動作を含み得る。整列ＢＬＴコマンドの各々は、ＢＬＴ動作のための整列仮想ソース面９２と整列仮想宛先面９４とを指定し得る。仮想ソース面９２はソースＢＬＴ領域９６、９８を含み、仮想宛先面９４は宛先ＢＬＴ領域１００、１０２を含む。
【０１０３】
[0112]仮想ソース面９２は、ソース面８４に基づいて定義され得、仮想宛先面９４は、宛先面８６に基づいて定義され得る。ＧＰＵドライバ２８は、ソース面８４を仮想ソース面９２に変換することと、宛先面８６を仮想宛先面９４に変換することとを行うために図６に示した技法を使用し得る。
【０１０４】
[0113]たとえば、ＧＰＵドライバ２８は、仮想ソース面９２中で単一の線を形成するためにソース面８４中で２つの線のあらゆる（every）セットを一緒に組み合わせ得る。これにより、ソース面８４の偶数線のすべてが仮想ソース面９２の左側にアグリゲートされ、ソース面８４の奇数線のすべてが仮想ソース面９２の右側にアグリゲートされることが効果的に行われるようになる。ＧＰＵドライバ２８は、仮想宛先面９４を形成するために宛先面８６の線を一緒に組み合わせるために同様の技法を使用し得る。
【０１０５】
[0114]図７では、領域８８、９０の１つおきの線が交互に（in an alternating fashion）ハッチングされる。図８に示すように、仮想ソース面９２を形成するためにソース面８４の線を組み合わせることにより、ソースＢＬＴ領域８８が、それがもはや１つの連続する長方形領域でないように変換されるようになる。代わりに、ソースＢＬＴ領域８８は、ソースＢＬＴ領域９６および９８に変換され、ここで、ソースＢＬＴ領域９６は、ソースＢＬＴ領域８８の偶数線を表し、ソースＢＬＴ領域９８は、ソースＢＬＴ領域８８の奇数線を表す。したがって、ソースＢＬＴ領域８８は、互いに連続しない２つの別個の長方形領域に変換された。宛先ＢＬＴ領域９０に関して、同様の変換が行われ、ここで、宛先ＢＬＴ領域９０は、宛先ＢＬＴ領域１００および１０２に変換される。
【０１０６】
[0115]この例では、単一のＢＬＴ動作は、不連続のＢＬＴ領域に対して実行されないことがある。現在、２つの別個のソースＢＬＴ領域９６、９８と２つの別個の宛先ＢＬＴ領域１００、１０２とがあるので、ＧＰＵドライバ２８は、非整列面８４、８６のための単一の非整列ＢＬＴコマンドを仮想面９２および９４に関して実行される２つの整列ＢＬＴコマンド、ハッチングされた領域９６、１００のための１つのＢＬＴコマンドと白色領域９８、１０２のための１つのＢＬＴコマンドとに変換する。このようにして、ＧＰＵドライバ２８は、ＧＰＵ１０に、２つのＢＬＴ動作を実行させ得、ここで、第１のＢＬＴ動作は、ソースＢＬＴ領域９６を宛先ＢＬＴ領域１００に転送し、第２のＢＬＴ動作は、ソースＢＬＴ領域９８を宛先ＢＬＴ領域１０２に転送する
[0116]ＧＰＵドライバ２８によって生成された複数のＢＬＴコマンドは、ソースＢＬＴ領域８８および宛先ＢＬＴ領域９０全体を集合的に処理し、それによって、単一の非整列ＢＬＴコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。さらに、整列ＢＬＴコマンドの各々が、３２バイトの整列仮想面（すなわち、仮想面９２および９４）に関して実行され、これにより、ＢＬＴコマンドを３２バイトの整列制約されたＧＰＵによって処理することが可能になる。このようにして、ＧＰＵドライバ２８は、非整列ＢＬＴコマンドを整列制約されたＧＰＵによってサービスされ得る複数の整列ＢＬＴコマンドに変換し、それによって、比較的低電力のＧＰＵ加速ＢＬＴ処理の利益を取得し得る。
【０１０７】
[0117]いくつかの例では、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するために、ＧＰＵドライバ２８は、非整列ＢＬＴコマンドに関連するＢＬＴソースまたは宛先領域の座標および次元を複数の整列ＢＬＴコマンドのために使用されるべきＢＬＴ領域のための座標および次元に変換し得る。いくつかの例では、図７および図８に示す２つのＢＬＴ変換動作について、ＧＰＵドライバ２８は、以下の擬似コードに基づいてＢＬＴ領域座標および次元を生成し得る。
【０１０８】
【数１】
0006352546.tif 000002
0006352546.tif 000003
【０１０９】
例示的な擬似コードでは、ＢＬＴ１およびＢＬＴ２は、単一の非整列ＢＬＴコマンドに基づいて生成される異なる整列ＢＬＴコマンドに対応し、ＳＲＣ＿Ｘは、ソースＢＬＴ領域８８の左上隅のｘ座標に対応し、ＳＲＣ＿Ｙは、ソースＢＬＴ領域８８の左上隅のｙ座標に対応し、ＤＳＴ＿Ｘは、宛先ＢＬＴ領域９０の左上隅のｘ座標に対応し、ＤＳＴ＿Ｙは、宛先ＢＬＴ領域９０の左上隅のｙ座標に対応し、ＢＬＴ＿ｗｉｄｔｈは、（たとえば、バイト単位での）ソースＢＬＴ領域８８の幅に対応し、ＢＬＴ＿Ｈｅｉｇｈｔは、（たとえば、線単位での）ソースＢＬＴ領域８８の高さに対応し、ＳＲＣ＿ｗｉｄｔｈは、（たとえば、バイト単位での）ソース面８４の面幅に対応し、ＤＳＴ＿ｗｉｄｔｈは、（たとえば、バイト単位での）宛先面８６の面幅に対応し、ＳＲＣ＿ＳＵＲＦＡＣＥ＿ｂａｓｅは、ソース面８４の面ポインタに対応し、ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、ソース面８４の面幅に対応し、ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、ソース面８４の高さに対応し、ＤＳＴ＿ＳＵＲＦＡＣＥ＿ｂａｓｅは、宛先面８６の面ポインタに対応し、ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、宛先面８６の面幅に対応し、ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、宛先面８６の高さに対応し、Ｎｅｗ＿ＳＲＣ＿Ｘは、（ＢＬＴ１の場合は）ソースＢＬＴ領域９６または（ＢＬＴ２の場合は）ソースＢＬＴ領域９８の左上隅のｘ座標に対応し、Ｎｅｗ＿ＳＲＣ＿Ｙは、（ＢＬＴ１の場合は）ソースＢＬＴ領域９６または（ＢＬＴ２の場合は）ソースＢＬＴ領域９８の左上隅のｙ座標に対応し、Ｎｅｗ  ＤＳＴ＿Ｘは、（ＢＬＴ１の場合は）宛先ＢＬＴ領域１００または（ＢＬＴ２の場合は）宛先ＢＬＴ領域１０２の左上隅のｘ座標に対応し、Ｎｅｗ  ＤＳＴ＿Ｙは、（ＢＬＴ１の場合は）宛先ＢＬＴ領域１００または（ＢＬＴ２の場合は）宛先ＢＬＴ領域１０２の左上隅のｙ座標に対応し、Ｎｅｗ  ＢＬＴ＿ｗｉｄｔｈは、（ＢＬＴ１の場合は）ソースＢＬＴ領域９６または（ＢＬＴ２の場合は）ソースＢＬＴ領域９８の（たとえば、バイト単位での）幅に対応し、Ｎｅｗ  ＢＬＴ＿Ｈｅｉｇｈｔは、（ＢＬＴ１の場合は）ソースＢＬＴ領域９６または（ＢＬＴ２の場合は）ソースＢＬＴ領域９８の（たとえば、線単位での）高さに対応し、
Ｎｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ｂａｓｅは、仮想ソース面９２の面ポインタに対応し、Ｎｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、仮想ソース面９２の面幅に対応し、Ｎｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、仮想ソース面９２の高さに対応し、Ｎｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ｂａｓｅは、仮想宛先面９４の面ポインタに対応し、Ｎｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、仮想宛先面９４の面幅に対応し、Ｎｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、仮想宛先面９４の高さに対応する。
【０１１０】
[0118]例では、擬似コード、演算子「／」は、整数除算に対応し、演算子「＆」は、ビット単位の（bit-wise）ＡＮＤ演算に対応し、プレフィックス「０ｘ」は、以下の数が１６進定数であることを示す。いくつかの例では、仮想ソース面９２のＮｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴの値は、ＢＬＴ１とＢＬＴ２とで異なり、その結果、ＢＬＴ１とＢＬＴ２とのためにわずかに異なる仮想ソース面が使用されることに結果し得る。さらなる例では、仮想宛先面９４のＮｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴの値は、ＢＬＴ１とＢＬＴ２とで異なり、その結果、ＢＬＴ１とＢＬＴ２とのためにわずかに異なる仮想宛先面が使用されることに結果し得る。
【０１１１】
[0119]図９は、本開示による、複数の整列仮想面を定義するための例示的な技法を示す概念図である。図９に、非整列面１１０と２つの仮想面１１２、１１４とを示す。非整列面１１０は、非整列ＢＬＴコマンドの一部としてソフトウェアアプリケーション２４から受信され得る。仮想面１１２、１１４は、非整列面１１０に基づいてＧＰＵドライバ２８によって定義され得る。
【０１１２】
[0120]図９の例では、３２バイトの整列制約されたＧＰＵが、ＢＬＴ動作を実行するために使用される。図９に示すように、非整列面１１０のための面幅は７２０バイトであり、非整列面１１０のための面高さは４８０本の線である。７２０は、３２によって割り切れないので、非整列面１１０のためのいくつかの線は、３２の倍数であるメモリアドレスにおいて開始しないことになる。したがって、面１１０は、非整列であると言われる。
【０１１３】
[0121]この問題に対処するために、ＣＰＵ６は、図６に関して上記で説明したのと同様の方法で非整列面１１０の幅を広げ得る。これにより、広げられた面幅が、整列幅制約に対応するようになる。ただし、非整列面１１０は、１の面ポインタを有する。１は３２によって割り切れないので、広げられた面の面ポインタは非整列である。したがって、広げられた面は、依然として整列していない。
【０１１４】
[0122]この問題に対処するための１つの手法は、シフトされた面ポインタが最も近い整列境界を指すように面ポインタをシフトすることである。図６〜図８に関して上記で説明した技法と同様に、面を広げることは、長方形ＢＬＴ領域を複数の別個の長方形領域に変換し得、ＧＰＵドライバ２８は、複数のＢＬＴコマンドを生成し得、ここで、ＢＬＴコマンドの各々は、ＧＰＵに、長方形ＢＬＴ領域の各１つ（respective one）に対してＢＬＴ動作を実行させる。ただし、仮想面の幅が同じままである場合、面ポインタをシフトすることにより、仮想面の境界の近くにある変換された長方形ＢＬＴ領域が仮想面の端にラップアラウンドされるようになり得る。言い換えれば、そのような変換されたＢＬＴ長方形領域は、もはや連続でないことがあり、単一のＢＬＴ動作によってサービスされることができないことがある。
【０１１５】
[0123]この問題に対処するために、ＧＰＵドライバ２８は、ソース面と宛先面との各々のための２つの仮想面１１２、１１４を生成し得る。仮想面１１２、１１４は、同じ広げられた面幅を有するが、異なる整列面ポインタを有し得る。いくつかの例では、ＧＰＵドライバ２８は、仮想面１１２の非整列面ポインタに最も近い２つの整列境界を決定し、最も近い整列境界のうちの１つを仮想面１１２のための面ポインタとして割り当て、最も近い整列境界の他方を仮想面１１４のための面ポインタとして割り当て得る。図９中の例では、１の非整列面ポインタに最も近い３２バイトの整列境界は、０および３２である。したがって、ＧＰＵドライバ２８は、仮想面１１２の面ポインタを０に設定し、仮想面１１４の面ポインタを３２に設定する。
【０１１６】
[0124]仮想面１１２、１１４の各々の面幅は１４４０バイトであり、これは、３２によって割り切れる。さらに、仮想面のための面ポインタの各々は、メモリアドレス（すなわち、０および３２）を指し、これは、３２によって割り切れる。したがって、仮想面１１２、１１４の両方は、３２バイトの整列制約されたＧＰＵがＢＬＴ動作を実行し得る整列面である。
【０１１７】
[0125]図９に示すように、非整列面１１０の偶数線の各々は、仮想面１１２の線の各１つ中に完全に含まれている。同様に、非整列面１１０の奇数線の各々は、仮想面１１４の線の各１つ中に完全に含まれている。したがって、ＧＰＵドライバ２８は、ＧＰＵ１０に、仮想面１１２を使用して非整列面１１０の偶数線に関して第１の整列ＢＬＴ動作を実行させ、仮想面１１４を使用して非整列面１１０の奇数線に関して第２の整列ＢＬＴ動作を実行させ得る。このようにしてＢＬＴ動作を実行することは、仮想面１１２、１１４のいずれかの端をラップアラウンドする変換された長方形ＢＬＴ領域を処理する必要を回避し得る。
【０１１８】
[0126]図１０および図１１は、本開示による、図９において定義されている複数の整列仮想面を使用して非整列ＢＬＴ動作の２つの整列ＢＬＴ動作への例示的な変換を示す概念図である。図７に示した単一の非整列ＢＬＴ動作から開始して、ＧＰＵドライバ２８は、単一のＢＬＴ動作を図１０に示す偶数ＢＬＴ動作と図１１に示す奇数ＢＬＴ動作とに変換し得る。
【０１１９】
[0127]仮想ソース面１１６、１２８は、図７中のソース面８４に基づいて定義され得、仮想宛先面１１８、１３０は、図７中の宛先面８６に基づいて定義され得る。ＧＰＵドライバ２８は、ソース面８４を仮想ソース面１１６、１２８に変換することと、宛先面８６を仮想宛先面１１８、１３０に変換することとを行うために図９に示した技法を使用し得る。詳細には、仮想面１１６、１１８は、図９中の仮想面１１２に対応し得、仮想面１２８、１３０は、図９中の仮想面１１４に対応し得る。仮想ソース面１１６、１２８はそれぞれ、ソースＢＬＴ領域１２０、１２２を含み、仮想宛先面１１８、１３０はそれぞれ、宛先ＢＬＴ領域１２４、１２６を含む。
【０１２０】
[0128]ＧＰＵドライバ２８は、ＧＰＵ１０に、ソースＢＬＴ領域１２０と宛先ＢＬＴ領域１２４とに関して偶数ＢＬＴ動作（図１０）を実行させる。詳細には、偶数ＢＬＴ動作は、仮想ソース面１１６のソースＢＬＴ領域１２０を仮想宛先面１１８の宛先ＢＬＴ領域１２４に転送し得る。同様に、ＧＰＵドライバ２８は、ＧＰＵ１０に、ソースＢＬＴ領域１２２と宛先ＢＬＴ領域１２６とに関して奇数ＢＬＴ動作（図１１）を実行させる。詳細には、奇数ＢＬＴ動作は、仮想ソース面１２８のソースＢＬＴ領域１２２を仮想宛先面１３０の宛先ＢＬＴ領域１２６に転送し得る。
【０１２１】
[0129]図１０に示すように、宛先ＢＬＴ領域１２６は、仮想宛先面１１８の端をラップアラウンドする。同様に、図１１において、ソースＢＬＴ領域１２０は、仮想ソース面１２８の端をラップアラウンドする。これらの領域のラップアラウンドにより、これらの領域は不連続になり、それによって、単一のＢＬＴ動作が領域を処理することが可能になることを防ぐ。ただし、上記で説明した方法で偶数および奇数ＢＬＴ動作を実行することによって、これらのラップアラウンドされた領域の処理が回避され、それによって、ＢＬＴ動作の効率が増加し得る。
【０１２２】
[0130]ＧＰＵ１０に、偶数および奇数ＢＬＴ動作を実行させるために、ＧＰＵドライバ２８は、図７の非整列面８４、８６のための単一の非整列ＢＬＴコマンドを２つの整列ＢＬＴコマンド、仮想面１１６、１１８および影つき領域１２０、１２４に関して実行される１つの偶数ＢＬＴコマンドと、仮想面１２８、１３０および白色領域１２２、１２６に関して実行される１つの奇数ＢＬＴコマンドとに変換し得る。
【０１２３】
[0131]ＧＰＵドライバ２８によって生成された複数のＢＬＴコマンドは、ソース領域および宛先領域全体を集合的に処理し、それによって、単一の非整列ＢＬＴコマンドによって生成されたであろうメモリ状態と同じ結果として生じるメモリ状態を生成し得る。さらに、整列ＢＬＴコマンドの各々が、３２バイトの整列仮想面に関して実行され、これにより、ＢＬＴコマンドを３２バイトの整列制約されたＧＰＵによって処理することが可能になる。このようにして、ＧＰＵドライバ２８は、非整列ＢＬＴコマンドを整列制約されたＧＰＵによってサービスされ得る複数の整列ＢＬＴコマンドに変換し、それによって、比較的低電力のＧＰＵ加速ＢＬＴ処理の利益を取得し得る。
【０１２４】
[0132]いくつかの例では、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するために、ＧＰＵドライバ２８は、非整列ＢＬＴコマンドに関連する宛先領域またはＢＬＴソースの座標および次元を複数の整列ＢＬＴコマンドのために使用されるべきＢＬＴ領域のための座標および次元に変換し得る。いくつかの例では、図７、図１０および図１１に示す２つのＢＬＴ変換動作について、ＧＰＵドライバ２８は、以下の擬似コードに基づいてＢＬＴ領域座標および次元を生成し得る。
【０１２５】
【数２】
0006352546.tif 000004
【０１２６】
例示的な擬似コードでは、ＢＬＴ１は、図１０に示す偶数ＢＬＴ動作に対応し、ＢＬＴ２は、図１１に示す奇数ＢＬＴ動作に対応し、ＳＲＣ＿Ｘは、ソースＢＬＴ領域８８の左上隅のｘ座標に対応し、ＳＲＣ＿Ｙは、ソースＢＬＴ領域８８の左上隅のｙ座標に対応し、ＤＳＴ＿Ｘは、宛先ＢＬＴ領域９０の左上隅のｘ座標に対応し、ＤＳＴ＿Ｙは、宛先ＢＬＴ領域９０の左上隅のｙ座標に対応し、ＢＬＴ＿ｗｉｄｔｈは、（たとえば、バイト単位での）ソースＢＬＴ領域８８の幅に対応し、ＢＬＴ＿Ｈｅｉｇｈｔは、（たとえば、線単位での）ソースＢＬＴ領域８８の高さに対応し、ＳＲＣ＿ｗｉｄｔｈは、（たとえば、バイト単位での）ソース面８４の面幅に対応し、ＤＳＴ＿ｗｉｄｔｈは、（たとえば、バイト単位での）宛先面８６の面幅に対応し、ＳＲＣ＿ｂａｓｅは、ソース面８４の面ポインタに対応し、ＤＳＴ＿ｂａｓｅは、宛先面８６の面ポインタに対応し、ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、ソース面８４の面幅に対応し、ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、ソース面８４の高さに対応し、ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、宛先面８６の面幅に対応し、ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、宛先面８６の高さに対応し、Ｎｅｗ＿ＳＲＣ＿Ｘは、（ＢＬＴ１の場合は）ソースＢＬＴ領域１２０または（ＢＬＴ２の場合は）ソースＢＬＴ領域１２２の左上隅のｘ座標に対応し、Ｎｅｗ＿ＳＲＣ＿Ｙは、（ＢＬＴ１の場合は）ソースＢＬＴ領域１２０または（ＢＬＴ２の場合は）ソースＢＬＴ領域１２２の左上隅のｙ座標に対応し、Ｎｅｗ  ＤＳＴ＿Ｘは、（ＢＬＴ１の場合は）宛先ＢＬＴ領域１２４または（ＢＬＴ２の場合は）宛先ＢＬＴ領域１２６の左上隅のｘ座標に対応し、Ｎｅｗ  ＤＳＴ＿Ｙは、（ＢＬＴ１の場合は）宛先ＢＬＴ領域１２４または（ＢＬＴ２の場合は）宛先ＢＬＴ領域１２６の左上隅のｙ座標に対応し、Ｎｅｗ  ＢＬＴ＿ｗｉｄｔｈは、（ＢＬＴ１の場合は）ソースＢＬＴ領域１２０または（ＢＬＴ２の場合は）ソースＢＬＴ領域１２２の（たとえば、バイト単位での）幅に対応し、Ｎｅｗ  ＢＬＴ＿Ｈｅｉｇｈｔは、（ＢＬＴ１の場合は）ソースＢＬＴ領域１２０または（ＢＬＴ２の場合は）ソースＢＬＴ領域１２２の（たとえば、線単位での）高さに対応し、Ｎｅｗ  ＳＲＣ＿ｂａｓｅは、（ＢＬＴ１の場合は）仮想ソース面１１６または（ＢＬＴ２の場合は）仮想ソース面１２８の面ポインタに対応し、Ｎｅｗ  ＤＳＴ＿ｂａｓｅは、（ＢＬＴ１の場合は）仮想宛先面１１８または（ＢＬＴ２の場合は）仮想宛先面１３０の面ポインタに対応し、Ｎｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、（ＢＬＴ１の場合は）仮想ソース面１１６または（ＢＬＴ２の場合は）仮想ソース面１２８の面幅に対応し、Ｎｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、（ＢＬＴ１の場合は）仮想ソース面１１６または（ＢＬＴ２の場合は）仮想ソース面１２８の高さに対応し、Ｎｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＷＩＤＴＨは、（ＢＬＴ１の場合は）仮想宛先面１１８または（ＢＬＴ２の場合は）仮想宛先面１３０の面幅に対応し、Ｎｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、（ＢＬＴ１の場合は）仮想宛先面１１８または（ＢＬＴ２の場合は）仮想宛先面１３０の高���に対応する。
【０１２７】
[0133]例示的な擬似コードでは、演算子「／」は、整数除算に対応し、演算子「＆」は、ビット単位のＡＮＤ演算に対応し、（Ａ）？（Ｂ）：（Ｃ）演算子は、３値演算子（たとえば、ｉｆ−ｔｈｅｎ−ｅｌｓｅフレームワーク（詳細には、Ａの場合、Ｂであり、それ以外の場合Ｃである））に対応し、プレフィックス「０ｘ」は、以下の数が１６進定数であることを示す。いくつかの例では、仮想ソース面９２のＮｅｗ  ＳＲＣ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、ＢＬＴ１とＢＬＴ２とで異なり、その結果、ＢＬＴ１とＢＬＴ２とのためにわずかに異なる仮想ソース面が使用されることに結果し得る。さらなる例では、仮想宛先面９４のＮｅｗ  ＤＳＴ＿ＳＵＲＦＡＣＥ＿ＨＥＩＧＨＴは、ＢＬＴ１とＢＬＴ２とで異なり、その結果、ＢＬＴ１とＢＬＴ２とのためにわずかに異なる仮想宛先面が使用されることに結果し得る。
【０１２８】
[0134]図１２は、本開示による、非整列ＢＬＴ動作を処理するための例示的な技法を示す流れ図である。ＣＰＵ６は、非整列ＢＬＴコマンドを受信する（１３１）。ＣＰＵ６（たとえば、ＧＰＵドライバ２８）は、非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換する（１３２）。
【０１２９】
[0135]いくつかの例では、非整列ＢＬＴコマンドは、非整列ＢＬＴコマンドに関連する面のうちの少なくとも１つのための第１の面幅を指定する。そのような例では、非整列ＢＬＴコマンドを変換するために、ＣＰＵ６は、第１の面幅に基づいて第２の面幅を決定することと、ここにおいて、第２の面幅が第１の面幅のＮ倍である、複数の整列ＢＬＴコマンドの各々が、複数の整列ＢＬＴコマンドの各々に関連する面のうちの少なくとも１つのための第２の面幅を指定するように複数の整列ＢＬＴコマンドを生成することとを行い得る。そのような例では、Ｎは、２以上の整数であり得る。いくつかの例では、Ｎは２に等しくなり得る。
【０１３０】
[0136]さらなる例では、第２の面幅を決定するために、ＣＰＵ６は、第１の面幅と、複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて第２の面幅を決定し得る。
【０１３１】
[0137]追加の例では、第１の面幅は、所定の整列幅制約の整数倍でないことがある。そのような例では、第１の面幅と所定の整列幅制約とに基づいて第２の面幅を決定するために、ＣＰＵ６は、第２の面幅が所定の整列幅制約の整数倍であるように第２の面幅を決定し得る。
【０１３２】
[0138]いくつかの例では、複数の整列ＢＬＴコマンドは、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを含み得、非整列ＢＬＴコマンドは、第１のＢＬＴ領域を指定する。そのような例では、複数の整列ＢＬＴコマンドを生成するために、ＣＰＵ６は、第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、第２のＢＬＴ領域が、第３のＢＬＴ領域とは異なる、第１の整列ＢＬＴコマンドが第２のＢＬＴ領域を指定するように第１の整列ＢＬＴコマンドを生成することと、第２の整列ＢＬＴコマンドが第３のＢＬＴ領域を指定するように第２の整列ＢＬＴコマンドを生成することとを行い得る。場合によっては、第２のＢＬＴ領域は、第１のＢＬＴ領域の偶数線を含み得、第３のＢＬＴ領域は、第１のＢＬＴ領域の奇数線を含み得る。
【０１３３】
[0139]さらなる例では、非整列ＢＬＴコマンドは、非整列ＢＬＴコマンドに関連する第１の面の第１の面ポインタ値を指定する。そのような例では、複数の整列ＢＬＴコマンドを生成するために、ＣＰＵ６は、複数の整列ＢＬＴコマンドの各々が、複数の整列ＢＬＴコマンドの各々に関連する面のうちの１つの第１の面ポインタ値を指定するように複数の整列ＢＬＴコマンドを生成し得る。
【０１３４】
[0140]追加の例では、複数の整列ＢＬＴコマンドは、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを含み、非整列ＢＬＴコマンドは、第１のＢＬＴ領域を指定する。そのような例では、複数の整列ＢＬＴコマンドを生成するために、ＣＰＵ６は、第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、第２のＢＬＴ領域が、第３のＢＬＴ領域とは異なる、第１の整列ＢＬＴコマンドが第２の面幅と、第１の面ポインタ値と、第２のＢＬＴ領域とを指定するように第１の整列ＢＬＴコマンドを生成することとを行い得る。そのような例では、ＣＰＵ６は、さらに、第２の整列ＢＬＴコマンドが、第２の面幅と、第１の面ポインタ値と、第３のＢＬＴ領域とを指定するように第２の整列ＢＬＴコマンドを生成し得る。場合によっては、第２のＢＬＴ領域は、第１のＢＬＴ領域の偶数線を含み得、第３のＢＬＴ領域は、第１のＢＬＴ領域の奇数線を含み得る。
【０１３５】
[0141]いくつかの例では、非整列ＢＬＴコマンドは、非整列ＢＬＴコマンドに関連する第１の面の第１の面ポインタ値を指定し、第１の面ポインタ値は、複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではなく、複数の整列ＢＬＴコマンドは、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える。そのような例では、複数の整列ＢＬＴコマンドを生成するために、ＣＰＵ６は、第２の面ポインタ値と第３の面ポインタ値とが所定の整列幅制約の異なる整数倍であるように第１の面ポインタ値と所定の整列幅制約とに基づいて第２の面ポインタ値と第３の面ポインタ値とを決定することと、第１の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドに関連する面のうちの１つの第２の面ポインタ値を指定するように第１の整列ＢＬＴコマンドを生成することと、第２の整列ＢＬＴコマンドが、第２の整列ＢＬＴコマンドに関連する面のうちの１つの第３の面ポインタ値を指定するように第２の整列ＢＬＴコマンドを生成することとを行い得る。場合によっては、第２のＢＬＴ領域は、第１のＢＬＴ領域の偶数線を含み得、第３のＢＬＴ領域は、第１のＢＬＴ領域の奇数線を含み得る。
【０１３６】
[0142]さらなる例では、非整列ＢＬＴコマンドは、第１のＢＬＴ領域を指定する。そのような例では、ＣＰＵ６は、第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、第２のＢＬＴ領域が、第３のＢＬＴ領域とは異なる、第１の整列ＢＬＴコマンドが、第２の面幅と、第２の面ポインタ値と、第２のＢＬＴ領域とを指定するように第１の整列ＢＬＴコマンドを生成することと、第２の整列ＢＬＴコマンドが、第２の面幅と、第３の面ポインタ値と、第３のＢＬＴ領域とを指定するように第２の整列ＢＬＴコマンドを生成することとを行い得る。場合によっては、第２のＢＬＴ領域は、第１のＢＬＴ領域の偶数線を含み得、第３のＢＬＴ領域は、第１のＢＬＴ領域の奇数線を含み得る。
【０１３７】
[0143]本明細書で説明する技法は、仮想面の単一の線を形成するために３本以上の面線が一緒にグループ化される面に拡張され得る。たとえば、Ｎ本の面線が一緒にグループ化されるとき、単一の非整列ＢＬＴコマンドは、Ｎ個の整列ＢＬＴコマンドに変換され得、ここで、Ｎは、２以上の整数である。
【０１３８】
[0144]３本以上の面線が一緒にグループ化される場合、非整列ＢＬＴコマンドのための非整列面のうちの１つの面ポインタが非整列である場合、ＣＰＵ６は、（図９と同様の）２つの異なる仮想面を生成し得、ここで、第１の仮想面は、非整列面ポインタよりも小さい（less than）整列面ポインタを有し、第２の仮想面は、非整列面よりも大きい整列面ポインタを有する。ＣＰＵ６は、特定のＢＬＴコマンド中のアクセスである面線が割り当てられた仮想面の端をラップアラウンドしないことを保証する方式で２つの仮想面のうちの１つをＮ個のＢＬＴコマンドの各々に割り当て得る。
【０１３９】
[0145]いくつかの例では、本開示の技法は、スケーリングおよび／またはフィルタ処理を実行するＢＬＴ動作をサービスするために使用され得る。そのような例では、読取りエンジン３８は、整列制約されないことがあるが、書込みエンジン４０は、整列制約され得る。
【０１４０】
[0146]本開示に記載された技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。たとえば、説明する技法の様々な態様は、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路を含む、１つまたは複数のプロセッサ、ならびにそのような構成要素の任意の組合せ内で実装され得る。「プロセッサ」または「処理回路」という用語は、概して、単独で、あるいは他の論理回路、または処理を実施する個別ハードウェアなどの他の等価回路との組合せで上記の論理回路のいずれかを指すことがある。
【０１４１】
[0147]そのようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明した様々な動作および機能をサポートするために、同じデバイス内で、または別々のデバイス内で実装され得る。さらに、説明したユニット、モジュールまたは構成要素のいずれも、個別であるが相互運用可能な論理デバイスとして、一緒にまたは別々に実装され得る。モジュールまたはユニットとしての様々な機能の図は、様々な機能的態様を強調するものであり、そのようなモジュールまたはユニットが別々のハードウェアまたはソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。そうではなく、１つまたは複数のモジュールあるいはユニットに関連する機能は、別々のハードウェア、ファームウェア、および／またはソフトウェア構成要素によって実行されるか、あるいは共通または別々のハードウェアもしくはソフトウェア構成要素内に組み込まれることがある。
【０１４２】
[0148]また、本開示で説明した技法は、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体中に記憶、実施または符号化され得る。コンピュータ可読媒体中に埋め込まれたまたは符号化された命令は、たとえば、その命令が１つまたは複数のプロセッサによって実行されたとき、１つまたは複数のプロセッサに本明細書で説明した技法を実行させ得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、プログラマブル読取り専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭ）、電子的に消去可能なプログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、カセット、磁気媒体、光媒体、または有形である他のコンピュータ可読記憶媒体を含み得る。
【０１４３】
[0149]コンピュータ可読媒体は、上記に記載した有形記憶媒体などの有形記憶媒体に対応するコンピュータ可読記憶媒体を含み得る。コンピュータ可読媒体はまた、たとえば、通信プロトコルに従ってある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を備え得る。この様式で、「コンピュータ可読媒体」という語句は、一般的に、（１）非一時的である有形のコンピュータ可読記憶媒体、および（２）一時的な信号または搬送波などの無形のコンピュータ可読通信媒体に対応し得る。
【０１４４】
[0150]様々な態様および例について説明した。しかしながら、以下の特許請求の範囲から逸脱することなく、本開示の構造または技法に変更が行われ得る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
１つまたは複数のプロセッサを用いて、非整列ブロック転送（ＢＬＴ）コマンドを複数の整列ＢＬＴコマンドに変換すること
を備える方法。
［Ｃ２］
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する面のうちの少なくとも１つのための第１の面幅を指定する、ここにおいて、前記非整列ＢＬＴコマンドを変換することが、
前記第１の面幅に基づいて第２の面幅を決定することと、ここにおいて、前記第２の面幅が前記第１の面幅のＮ倍である、ここで、Ｎは、２以上の整数である、
前記複数の整列ＢＬＴコマンドの各々が、前記複数の整列ＢＬＴコマンドの各々に関連する面のうちの少なくとも１つのための前記第２の面幅を指定するように前記複数の整列ＢＬＴコマンドを生成することと
を備える、Ｃ１に記載の方法。
［Ｃ３］
前記第２の面幅を決定することが、前記第１の面幅と、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第２の面幅を決定することを備える、Ｃ２に記載の方法。
［Ｃ４］
前記第１の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記第１の面幅と前記所定の整列幅制約とに基づいて前記第２の面幅を決定することは、前記第２の面幅が前記所定の整列幅制約の整数倍であるように前記第２の面幅を決定することを備える、Ｃ３に記載の方法。
［Ｃ５］
Ｎが２に等しい、Ｃ２に記載の方法。
［Ｃ６］
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記非整列ＢＬＴコマンドが、第１のＢＬＴ領域を指定する、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが前記第２のＢＬＴ領域を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが前記第３のＢＬＴ領域を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を備える、Ｃ２に記載の方法。
［Ｃ７］
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、Ｃ６に記載の方法。
［Ｃ８］
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する第１の面の第１の面ポインタ値を指定する、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
前記複数の整列ＢＬＴコマンドの各々が、前記複数の整列ＢＬＴコマンドの各々に関連する前記面のうちの１つの前記第１の面ポインタ値を指定するように前記複数の整列ＢＬＴコマンドを生成すること
を備える、Ｃ２に記載の方法。
［Ｃ９］
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記非整列ＢＬＴコマンドが、第１のＢＬＴ領域を指定する、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することと
を備える、Ｃ８に記載の方法。
［Ｃ１０］
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、Ｃ９に記載の方法。
［Ｃ１１］
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する第１の面の第１の面ポインタ値を指定する、ここにおいて、前記第１の面ポインタ値が、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、
第２の面ポインタ値と第３の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第１の面ポインタ値と前記所定の整列幅制約とに基づいて前記第２の面ポインタ値と前記第３の面ポインタ値とを決定することと、
前記第１の整列ＢＬＴコマンドが、前記第１の整列ＢＬＴコマンドに関連する前記面のうちの１つの前記第２の面ポインタ値を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の整列ＢＬＴコマンドに関連する前記面のうちの１つの前記第３の面ポインタ値を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を備える、Ｃ２に記載の方法。
［Ｃ１２］
前記第２の面ポインタ値が、前記第１の面ポインタ値よりも小さく、前記第３の面ポインタ値が、前記第１の面ポインタ値よりも大きい、Ｃ１１に記載の方法。
［Ｃ１３］
前記非整列ＢＬＴコマンドが、第１のＢＬＴ領域を指定する、
ここにおいて、前記複数の整列ＢＬＴコマンドを生成することが、前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することを備える、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
ここにおいて、前記第１の整列ＢＬＴコマンドを生成することは、前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第２の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することを備える、
ここにおいて、前記第２の整列ＢＬＴコマンドを生成することは、前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第３の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することを備える、Ｃ１１に記載の方法。
［Ｃ１４］
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、Ｃ１３に記載の方法。
［Ｃ１５］
非整列ブロック転送（ＢＬＴ）コマンドを複数の整列ＢＬＴコマンドに変換するように構成された１つまたは複数のプロセッサを備えるデバイス。
［Ｃ１６］
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する面のうちの少なくとも１つのための第１の面幅を指定する、ここにおいて、前記１つまたは複数のプロセッサが、
前記第１の面幅に基づいて第２の面幅を決定することと、ここにおいて、前記第２の面幅が前記第１の面幅のＮ倍である、ここで、Ｎは、２以上の整数である、
前記複数の整列ＢＬＴコマンドの各々が、前記複数の整列ＢＬＴコマンドの各々に関連する面のうちの少なくとも１つのための前記第２の面幅を指定するように前記複数の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、Ｃ１５に記載のデバイス。
［Ｃ１７］
前記１つまたは複数のプロセッサが、前記第１の面幅と、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約とに基づいて前記第２の面幅を決定することを行うようにさらに構成された、Ｃ１６に記載のデバイス。
［Ｃ１８］
前記第１の面幅が、前記所定の整列幅制約の整数倍でない、ここにおいて、前記１つまたは複数のプロセッサは、前記第２の面幅が前記所定の整列幅制約の整数倍であるように前記第２の面幅を決定することを行うようにさらに構成された、Ｃ１７に記載のデバイス。
［Ｃ１９］
Ｎが２に等しい、Ｃ１６に記載のデバイス。
［Ｃ２０］
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記非整列ＢＬＴコマンドが、第１のＢＬＴ領域を指定する、ここにおいて、前記１つまたは複数のプロセッサが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが前記第２のＢＬＴ領域を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが前記第３のＢＬＴ領域を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、Ｃ１６に記載のデバイス。
［Ｃ２１］
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、Ｃ２０に記載のデバイス。
［Ｃ２２］
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する第１の面の第１の面ポインタ値を指定する、ここにおいて、前記１つまたは複数のプロセッサが、
前記複数の整列ＢＬＴコマンドの各々が、前記複数の整列ＢＬＴコマンドの各々に関連する前記面のうちの１つの前記第１の面ポインタ値を指定するように前記複数の整列ＢＬＴコマンドを生成すること
を行うようにさらに構成された、Ｃ１６に記載のデバイス。
［Ｃ２３］
前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記非整列ＢＬＴコマンドが、第１のＢＬＴ領域を指定する、ここにおいて、前記１つまたは複数のプロセッサが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第１の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、Ｃ２２に記載のデバイス。
［Ｃ２４］
前記第２のＢＬＴ領域が、前記第１のＢＬＴ領域の偶数線を含み、前記第３のＢＬＴ領域が、前記第１のＢＬＴ領域の奇数線を含む、Ｃ２３に記載のデバイス。
［Ｃ２５］
前記非整列ＢＬＴコマンドが、前記非整列ＢＬＴコマンドに関連する第１の面の第１の面ポインタ値を指定する、ここにおいて、前記第１の面ポインタ値が、前記複数の整列ＢＬＴコマンドを実行するプロセッサに関連する所定の整列幅制約の整数倍ではない、ここにおいて、前記複数の整列ＢＬＴコマンドが、第１の整列ＢＬＴコマンドと第２の整列ＢＬＴコマンドとを備える、ここにおいて、前記１つまたは複数のプロセッサが、
第２の面ポインタ値と第３の面ポインタ値とが前記所定の整列幅制約の異なる整数倍であるように前記第１の面ポインタ値と前記所定の整列幅制約とに基づいて前記第２の面ポインタ値と前記第３の面ポインタ値とを決定することと、
前記第１の整列ＢＬＴコマンドが、前記第１の整列ＢＬＴコマンドに関連する前記面のうちの１つの前記第２の面ポインタ値を指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の整列ＢＬＴコマンドに関連する前記面のうちの１つの前記第３の面ポインタ値を指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、Ｃ１６に記載のデバイス。
［Ｃ２６］
前記第２の面ポインタ値が、前記第１の面ポインタ値よりも小さく、前記第３の面ポインタ値が、前記第１の面ポインタ値よりも大きい、Ｃ２５に記載のデバイス。
［Ｃ２７］
前記非整列ＢＬＴコマンドが、第１のＢＬＴ領域を指定する、ここにおいて、前記１つまたは複数のプロセッサが、
前記第１のＢＬＴ領域に基づいて第２のＢＬＴ領域と第３のＢＬＴ領域とを決定することと、前記第２のＢＬＴ領域が、前記第３のＢＬＴ領域とは異なる、
前記第１の整列ＢＬＴコマンドが、前記第２の面幅と、前記第２の面ポインタ値と、前記第２のＢＬＴ領域とを指定するように前記第１の整列ＢＬＴコマンドを生成することと、
前記第２の整列ＢＬＴコマンドが、前記第２の面幅と、前記第３の面ポインタ値と、前記第３のＢＬＴ領域とを指定するように前記第２の整列ＢＬＴコマンドを生成することと
を行うようにさらに構成された、Ｃ２５に記載のデバイス。
［Ｃ２８］
前記デバイスが、ワイヤレス通信デバイスとモバイルフォンハンドセットとのうちの少なくとも１つを備える、Ｃ１５に記載のデバイス。
［Ｃ２９］
非整列ブロック転送（ＢＬＴ）コマンドを受信するための手段と、
前記非整列ＢＬＴコマンドを複数の整列ＢＬＴコマンドに変換するための手段と
を備える装置。
［Ｃ３０］
実行されたとき、１つまたは複数のプロセッサに、
非整列ブロック転送（ＢＬＴ）コマンドを複数の整列ＢＬＴコマンドに変換すること
を行わせる命令を記憶するコンピュータ可読記憶媒体。
【図１】
0006352546.tif 000005
【図２】
0006352546.tif 000006
【図３】
0006352546.tif 000007
【図４】
0006352546.tif 000008
【図５】
0006352546.tif 000009
【図６】
0006352546.tif 000010
【図７】
0006352546.tif 000011
【図８】
0006352546.tif 000012
【図９】
0006352546.tif 000013
【図１０】
0006352546.tif 000014
【図１１】
0006352546.tif 000015
【図１２】
0006352546.tif 000016