(57)【要約】  無線デバイスは、可変長について、第１のレベルのコンパイラ圧縮処理と、第２のレベルのハードウェア圧縮処理とを実行する。コンパイラ圧縮処理は、その成分の合計がＭである２つ以上のシェーダ変数（可変長と属性）を、共有Ｍ次元（ＭＤ）ベクトル・レジスタに圧縮する。ハードウェア圧縮は、頂点キャッシュまたは他の記憶媒体に、シェーダ変数（可変長と属性）のＭ個の成分と任意の残りの変数を、連続的に圧縮する。
2010535393.tif 000002
【特許請求の範囲】
【請求項１】
複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、
成分の合計がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実行する処理ユニット、
を含むデバイス。
【請求項２】
前記１組の操作が、
２つの２Ｄベクトル・シェーダ変数と、
１つの３Ｄベクトル・シェーダ変数と１つの実数型シェーダ変数と、
１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、
４つの実数型のシェーダ変数のうち１つを、
圧縮する、請求項１のデバイス。
【請求項３】
前記シェーダ変数が頂点シェーダからの１組の出力可変長を含み、
前記１組の操作が、前記複数個の共有ＭＤレジスタ内の、前記１組の出力可変長を圧縮する操作と、
頂点シェーダ出力ファイルを生成するために、前記記憶媒体に任意の残りの可変長を充足する操作、
を含む、請求項１のデバイス。
【請求項４】
複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュをさらに含み、
前記記憶媒体がＭＤレジスタを持つ圧縮バッファを含み、前記頂点シェーダ出力ファイルのＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内のそれぞれのＭＤキャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送する、
請求項３のデバイス。
【請求項５】
前記処理ユニットが、前記頂点キャッシュ内の前記出力可変長を、フラグメント・シェーダの１組の入力可変長に関連付ける、第２の組の操作を実行する、請求項４のデバイス。
【請求項６】
前記第２の組の操作が、前記頂点シェーダの前記出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダの前記組の入力可変長における対応する可変長シンボル名に一致させる操作を含む、請求項５のデバイス。
【請求項７】
第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、
前記シェーダ変数が、さらに前記頂点シェーダの入力ためにバイパスされない入力属性とバイパスされる入力属性とを含み、
前記１組の操作が、前記第２の複数個の共有ＭＤレジスタ内の、前記バイパスされない入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために、前記第２の記憶媒体内に任意の残りのバイパスされない入力属性を充足する操作を含む、
請求項４のデバイス。
【請求項８】
前記頂点キャッシュが、第２の複数個のＭＤキャッシュ・レジスタをさらに含み、
前記記憶媒体が、ＭＤレジスタを持つ第２の圧縮バッファを含み、前記バイパスされる入力属性のＭ個の成分を、その中に連続的に圧縮し、前記頂点キャッシュ内の前記第２の複数個のＭＤキャッシュ・レジスタの各々のＭＤキャッシュ・レジスタが満たされると、前記第２の圧縮バッファの前記ＭＤレジスタの内容を転送する、
請求項７のデバイス。
【請求項９】
第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、
前記シェーダ変数が前記頂点シェーダの入力ための１組の入力属性を含み、
前記１組の操作が、圧縮された場合に、残りの圧縮されてない入力属性の成分がＭを超えるまで、前記第２の複数個の共有ＭＤレジスタ内の、前記１組の入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために前記第２の記憶媒体内に前記残りの入力属性を充足する操作を含む、
請求項４のデバイス。
【請求項１０】
前記処理ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、請求項１のデバイス。
【請求項１１】
複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、
成分の合計がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実行する処理ユニットを、含む集積回路。
【請求項１２】
前記１組の動作が、
２つの２Ｄベクトル・シェーダ変数と、
１つの３Ｄベクトル・シェーダ変数と１つの実数型のシェーダ変数と、
１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、
４つの実数型のシェーダ変数のうち１つを、
圧縮する、請求項１１の集積回路。
【請求項１３】
前記シェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記１組の操作が、前記複数個の共有ＭＤレジスタ内の、前記１組の出力可変長を圧縮する操作と、頂点シェーダ出力ファイルを生成するために、前記記憶媒体に任意の残りの可変長を充足する操作、を含む、請求項１１の集積回路。
【請求項１４】
複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュをさらに含み、
前記記憶媒体が、ＭＤレジスタを持つ圧縮バッファを含み、前記頂点シェーダ出力ファイルのＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内のそれぞれの（ＭＤ）キャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送する、
請求項１３の集積回路。
【請求項１５】
前記処理ユニットが、前記頂点キャッシュ内の前記出力可変長を、フラグメント・シェーダのための１組の入力可変長に関連付ける、第２の組の操作を実行する、請求項１４の集積回路。
【請求項１６】
前記第２の組の操作が、前記頂点シェーダの前記出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダのための前記組の入力可変長における対応する可変長シンボル名に一致させる操作を含む、請求項１５の集積回路。
【請求項１７】
第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、
前記シェーダ変数が、さらに前記頂点シェーダの入力ためにバイパスされない入力属性とバイパスされる入力属性とを含み、
前記１組の操作が、前記第２の複数個の共有ＭＤレジスタ内の、前記バイパスされない入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために、前記第２の記憶媒体内に任意の残りのバイパスされない入力属性を充足する操作を含む、
請求項１４の集積回路。
【請求項１８】
前記頂点キャッシュが、第２の複数個のＭＤキャッシュ・レジスタをさらに含み、
前記記憶媒体が、前記バイパスされた入力属性のＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内の前記第２の複数個のＭＤキャッシュ・レジスタの各々のＭＤキャッシュ・レジスタが満たされると、前記第２の圧縮バッファの前記ＭＤレジスタの内容を転送する、ＭＤレジスタを持つ第２の圧縮バッファを含む、
請求項１７の集積回路。
【請求項１９】
第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、
前記シェーダ変数が前記頂点シェーダの入力ための１組の入力属性を含み、
前記１組の操作が、圧縮された場合に残りの圧縮されてない入力属性の成分がＭを超えるまで、前記第２の複数個の共有ＭＤレジスタ内の、前記１組の入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために前記第２の記憶媒体内に前記残りの入力属性を充足する操作を含む、
請求項１４の集積回路。
【請求項２０】
前記処理ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、請求項１１の集積回路。
【請求項２１】
１組のシェーダ変数を記憶するために複数個の共有Ｍ次元（ＭＤ）レジスタを含む記憶する手段と、
成分の合計がＭに等しい前記１組のシェーダ変数の１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する圧縮手段を、
含むデバイス。
【請求項２２】
前記圧縮手段が、
２つの２Ｄベクトル・シェーダ変数と、
１つの３Ｄベクトル・シェーダ変数と１つの実数型のシェーダ変数と、
１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、
４つの実数型のシェーダ変数の少なくとも１つを、
圧縮するための手段を含む、
請求項２１の無線デバイス。
【請求項２３】
前記１組のシェーダ変数が頂点シェーダからの１組の出力可変長を含み、
前記圧縮手段が、前記複数個の共有ＭＤレジスタ内の前記１組の出力可変長を圧縮するための可変長圧縮手段と
頂点シェーダ出力ファイルを生成するために前記記憶手段に任意の残りの可変長を充足する充足手段を含む、
請求項２１の無線デバイス。
【請求項２４】
前記１組のシェーダ変数が、頂点シェーダへの１組の入力属性を含み、
前記圧縮手段が、前記複数個の共有ＭＤレジスタ内の前記１組の入力属性を圧縮するための属性圧縮手段と、頂点シェーダ入力ファイルを生成するために前記記憶手段内に任意の残りの入力属性を充足するための充足手段を含む、
請求項２１の無線デバイス。
【請求項２５】
前記圧縮ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、請求項２１の無線デバイス。
【請求項２６】
コンピュータに、そのベクトルの合計がＭに等しい１組のシェーダ変数内の１つ以上のシェーダ変数を、複数個の共有ＭＤベクトル・レジスタにおける各々の共有Ｍ次元（ＭＤ）ベクトル・レジスタに、圧縮させる命令を有するコンピュータ可読媒体を含むコンピュータ・プログラム製品。
【請求項２７】
前記シェーダ変数の組が頂点シェーダからの１組の出力可変長を含み、
前記命令が、前記コンピュータに前記１組の出力可変長を圧縮させ、残りの出力可変長により、残りのベクトル・レジスタを充足させる、
請求項２６のコンピュータ・プログラム製品。
【請求項２８】
前記コンピュータに、前記圧縮された組の出力可変長を、フラグメント・シェーダのための１組の入力可変長に関連付けさせる命令を、さらに含む、請求項２７のコンピュータ・プログラム製品。
【請求項２９】
前記関連付けさせる命令が、前記コンピュータに、前記頂点シェーダからの前記圧縮された組の出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダのための前記組の入力可変長における対応する可変長シンボル名に一致させる命令を含む、請求項２８のコンピュータ・プログラム製品。
【請求項３０】
前記１組のシェーダ変数が、頂点シェーダへの１組の入力属性を含み、
前記命令が、前記コンピュータに前記１組の入力属性を圧縮させ、残りの入力属性で残りのベクトル・レジスタを充足させる、
請求項２６のコンピュータ・プログラム製品。
【請求項３１】
そのベクトルの合計がＭに等しい１組のシェーダ変数の内の１つ以上のシェーダ変数を、複数個の共有ＭＤベクトル・レジスタにおける各々の共有Ｍ次元（ＭＤ）ベクトル・レジスタへ圧縮することと、
任意の残っているシェーダ変数が圧縮できなくなるまで、前記複数個の共有ＭＤベクトル・レジスタにおける前記圧縮を繰り返すこと、を含む方法。
【請求項３２】
前記１組のシェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記圧縮が、前記複数個の共有Ｍ次元（ＭＤ）レジスタにおける、前記１組の出力可変長の圧縮を含む、請求項３１の無線デバイス。
【請求項３３】
前記圧縮された出力可変長の組と残りの出力可変長により頂点シェーダ出力ファイルを生成することと、
前記頂点シェーダ出力ファイルのＭ個の成分を、圧縮バッファのＭＤ一時レジスタに連続的に圧縮することと、
頂点キャッシュのそれぞれのＭＤキャッシュ・レジスタが満たされるとき、前記ＭＤ一時レジスタの内容の転送すること、
をさらに含む、請求項３１の方法。
【請求項３４】
前記組のシェーダ変数が頂点シェーダへのバイパスされない１組の入力属性を含み、
前記圧縮が前記複数個の共有ＭＤレジスタにおける前記組の入力属性の圧縮を含む、請求項３１の方法。
【請求項３５】
バイパスされた入力属性のＭ個の成分を、圧縮バッファのＭＤ一時レジスタに連続的に圧縮することと、
頂点キャッシュのそれぞれのＭＤキャッシュ・レジスタが満たされるとき、前記ＭＤ一時レジスタの内容を転送すること、
をさらに含む、請求項３４の方法。
【請求項３６】
複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、
成分の合計がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実装する集積回路を、
含むプロセッサ。
【請求項３７】
前記シェーダ変数が頂点シェーダからの１組の出力可変長を含み、
前記１組の操作が、前記複数個の共有Ｍ次元（ＭＤ）レジスタにおいて、前記１組の出力可変長を圧縮する操作と、頂点シェーダ出力ファイルを生成するために、前記記憶媒体に任意の残りの可変長を充足する操作を含む
請求項３６のプロセッサ。
【請求項３８】
複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュをさらに含み、
前記記憶媒体がＭＤレジスタを持つ圧縮バッファを含み、前記頂点シェーダ出力ファイルのＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内のそれぞれのＭＤキャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送する、
請求項３７のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にグラフィックス処理に、さらに詳細には、グラフィック・システムにおける可変長（varying）の圧縮（packing）および関連付け（linking）のための技術に関連する。
【背景技術】
【０００２】
公のグラフィック標準、ＯｐｅｎＧＬまたはＯｐｅｎＧＬ  ＥＳは、頂点およびフラグメント・シェーダを使用する、頂点ごとのおよび画素ごとの操作の時に、変化させ得る固定された機能を持つ。頂点およびフラグメント・シェーダは、標準のＯｐｅｎＧＬ機能により達成されていない特殊な効果を与えるために開発されている。
【０００３】
ここで図１を参照すると、シェーダを含むグラフィックス処理ユニット（ＧＰＵ）における、従来のパイプライン・ステージの一般的なフローチャートが示される。そこには、３つの主要なパイプライン・ステージ、ブロックＳ１０で示される頂点シェーダ、ブロックＳ１２で示されるプリィミティブ・アセンブラとラスタライザ、およびＳ１４で示されるフラグメント・シェーダがある。さらなるブロックＳ１６は、サンプルごとの操作のために提供される。
【０００４】
頂点シェーダ（vertex shader：ＶＳ）Ｓ１０は、幾何学的な物体の各々の頂点のために実行される、プログラムまたはコンピュータ・プログラム製品である。ＶＳ  Ｓ１０の入力は、属性と呼ばれ、ブロックＡ２に示される。ＶＳ  Ｓ１０はまた、入力として、いくつかの頂点ユニフォーム０〜９５（すなわち９６個の頂点ユニフォーム）を含むことができる、頂点ユニフォームＶＵ２を受け取る。ＶＳ  Ｓ１０から、および、その時の、プリィミティブ・アセンブラおよびラスタライザ（rasterizer）Ｓ１２からの出力は、ブロックＶ３に示されるように、一般に可変長（varyings）として呼ばれ、一般に、（ＶＳ出力を記憶する）頂点キャッシュ、または、（ラスタライザの出力を記憶する）他の記憶メディアの中に存在する。可変長Ｖ３は、幾何学的な物体の三角形のピクセルに関連付けられた値であり得る。画素に関連付けられた値は、幾何学的な物体の三角形頂点に関連付されたＶＳの結果に基づいて計算された、プリィミティブ・アセンブラおよびラスタライザＳ１２の結果である。頂点に関連するＶＳの結果および画素に関連する可変長Ｖ３は、同じ名前またはＩＤ、型式と順序を持つ。画素に関連する可変長Ｖ３は、フラグメント・シェーダ（ＦＳ）Ｓ１４への入力である。ＦＳ  Ｓ１４は、また、一般に、いくつかの（例えば１６個の）フラグメント・ユニフォームを含む、フラグメント・ユニフォームＦＵ３を入力として受け取る。
【０００５】
図２は、シェーダを含む、従来のパイプライン・ステージの一般的なブロック・ダイアグラムを示す。グラフィックス処理装置（ＧＰＵ）内のＶＳ  Ｓ５１０のために、そこには、属性０〜７を記憶するために、一般に、８個の属性レジスタＲＡ２がある。一般に、そこに、可変長（varyings）０〜７を記憶するために、８個の出力可変長レジスタＲＶ３Ａがある。可変長レジスタＲＶ３Ａは、通常の場合には頂点キャッシュであり、ＶＳ出力を記憶する。そこには、一般に、可変長０〜７を記憶するために、８個の出力可変長レジスタＲＶ３Ｂがある。可変長レジスタＲＶ３Ｂは、画素に関連する可変長（varyings）に対応する、ラスタライザの結果を記憶する。属性レジスタＲＡ２と可変長レジスタＲＶ３Ａは、それぞれ、属性０〜７にインデックスをつけられた、入力レジスタと、可変長０〜７にインデックスをつけられた出力可変長レジスタである。これらのレジスタＩＤは、高級言語からマシン言語に、頂点シェーダとフラグメント・シェーダのプログラムをコンパイルする、コンパイラによって割り当てられる。高級言語における、シェーダ・プログラムで使用されるレジスタは、ＩＤ／インデックスの代わりに、名前により名づけられる。レジスタの名前は、アプリケーション開発者からだけ、見ることができる。アプリケーションは、レジスタの名前により、レジスタをアクセスする。レジスタのＩＤは、ＧＰＵハードウェア（ＨＷ）において、ＶＳ  Ｓ１０またはＦＳ  Ｓ１４によってのみ、見ることができる。したがって、ＶＳ入力シンボル・テーブル、出力シンボル・テーブルおよび入力シンボル・テーブルのような、シンボル・テーブルはコンパイラによって生成されるであろう。しかしながら、ＶＳ入力または入力シンボル・テーブルは、内容、ＩＤおよび名前に関して、出力または出力シンボル・テーブルとは関係を持たない。
【０００６】
ＦＳ  Ｓ１４の入力または入力シンボル・テーブルは、ＶＳ  Ｓ１０の出力または出力シンボル・テーブルのサブセットであり得るかもしれないが、ＶＳ出力または出力シンボル・テーブルは、内容および名前の点で、ＦＳ  Ｓ１４の入力または入力シンボル・テーブルと一致しなければならない。
【０００７】
ＶＳ  Ｓ１０は、また、Ｔ２として示されているテクスチャ、および、ＴＶ２として示されている一時変数と同様に、記憶媒体に記憶されている頂点ユニフォームＶＵ２を、入力として受け取る。プリィミティブ・アセンブラとラスタライザＳ１２は、可変長０〜７とパラメータｇｌ＿Ｐｏｓｉｔｉｏｎ  Ｐによってインデックスをつけられた、出力可変長レジスタＲＶ３Ａ内の可変長を受け取る。プリィミティブ・アセンブラとラスタライザＳ１２は、可変長０〜７とｇｌ＿Ｐｏｓｉｔｉｏｎ  Ｐによってインデックスをつけられた、出力可変長レジスタＲＶ３Ｂに可変長を出力する。ＦＳ  Ｓ１４は、Ｔ３として示されているテクスチャと、ＴＶ３として示されている一時変数と同様に、記憶メディアに記憶されている、フラグメント・ユニフォームを入力として受け取る。ＦＳ  Ｓ１４は、可変長０〜７、および、Ｐとして示されているパラメータｇｌ＿Ｐｏｓｉｔｉｏｎ  Ｐによってインデックスをつけられた、出力可変長レジスタＲＶ３Ｂ内の可変長を受け取る。ＦＳ  Ｓ１４は、また、追加のパラメータ、ｇｌ＿Ｆｏｎｔｆａｃｉｎｇ、および、ＰＰとして示されている、ｇｌ＿ＰｏｉｎｔＰｏｓｉｔｉｏｎを受け取る。ＦＳ  Ｓ１４は、ｇｌ＿ＦｒａｇＣｏｌｏｒ  ＦＣを出力する。属性（attributes）と可変長（varyings）は、また、シェーダ変数とも呼ばれる。
【発明の概要】
【０００８】
グラフィック・パイプラインにおける、可変長（varying）の圧縮（packing）および関連付け（linking）の技術が、ここに説明される。シェーダ変数の圧縮は、記憶装置またはメモリがより効率的に使用されるために、モバイルのＧＰＵにおいて有益である。シェーダ変数の圧縮は、また、トラフィックのバンド幅を減少し、電力を節約し、性能を改善し得る。
【０００９】
１つの構成において、デバイスは、複数個の共有Ｍ次元（M-dimensional：ＭＤ）レジスタを持つ、記憶媒体を含む。デバイスは、また、成分（component）の合計がＭである、１つ以上のシェーダ変数を、各々の共有ＭＤレジスタに圧縮する、１組の操作を実装するために、処理ユニットを含む。
【００１０】
別の構成において、集積回路は、複数個の共有Ｍ次元（ＭＤ）レジスタを持つ、記憶媒体を含む。集積回路は、また、成分の合計がＭである、１つ以上のシェーダ変数を、各々の共有ＭＤレジスタに圧縮する１組の操作を実装するために、処理ユニットを含む。
【００１１】
別の構成は、コンピュータ・プログラム製品を含む。コンピュータ・プログラム製品は、複数個のＭＤベクトル・レジスタの各々の共有Ｍ次元（ＭＤ）ベクトル・レジスタ内へと、成分の和がＭである、１組のシェーダ変数のうちの１つ以上のシェーダ変数を、コンピュータに圧縮させる命令を含む、コンピュータ可読媒体を含む。
【００１２】
さらなる構成は、複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体を備えるプロセッサを含んでいる。プロセッサは、また、各々の共有ＭＤレジスタに、成分の和がＭと等しい、１つ以上の共有変数を圧縮する１組の操作を実装する集積回路を含む。
【００１３】
特に、添付された図と共に扱うことにより、追加の態様は、詳細な説明からより容易に明白になるであろう。
【００１４】
開示の態様と構成は、同じ参照文字が全体にわたって対応を識別する図と結び付けることにより、以下に示される詳細な説明から、さらに明白になるであろう。
【図面の簡単な説明】
【００１５】
【図１】図１は、シェーダを含むグラフィックス処理ユニットにおける、従来のパイプライン・ステージの一般的なフローチャートを示す。
【図２】図２は、シェーダを含む従来のパイプラインの、一般的なブロック・ダイアグラムを示す。
【図３】図３は、無線デバイスのブロック・ダイアグラムを示す。
【図４】図４は、頂点シェーダと圧縮操作のための、グラフィック処理ユニット（ＧＰＵ）の、一般的なブロック・ダイアグラムを示す。
【図５】図５は、頂点シェーダと関連付け操作を含む、グラフィック処理ユニット（ＧＰＵ）の、一般的なブロック・ダイアグラムを示す。
【図６】図６は、ドライバの一般的なブロック・ダイアグラムを示す。
【図７】図７は、第２のレベルのシェーダ変数の圧縮処理の、一般的なフローチャートを示す。
【図８Ａ】図８Ａは、バイパスする属性を取り除く前の、頂点シェーダ・プログラムを示す。
【図８Ｂ】図８Ｂは、バイパスする属性を取り除いた後の、頂点シェーダ・プログラムを示す。
【図９Ａ】図９Ａは、バイパスする属性を取り除く前の、別の頂点シェーダ・プログラムを示す。
【図９Ｂ】図９Ｂは、バイパスする属性を取り除いた後の、別の頂点シェーダ・プログラムを示す。
【図１０Ａ】図１０Ａは、バイパスする属性を取り除く前の、さらなる頂点シェーダ・プログラムを示す。
【図１０Ｂ】図１０Ｂは、バイパスする属性を取り除いた後の、さらなる頂点シェーダ・プログラムを示す。
【図１１Ａ】図１１Ａは、バイパスする属性を取り除く前の、さらなる頂点シェーダ・プログラムを示す。
【図１１Ｂ】図１１Ｂは、バイパスする属性を取り除いた後の、さらなる頂点シェーダ・プログラムを示す。
【図１２Ａ】図１２Ａは、バイパスする属性を取り除く前の、さらなる頂点シェーダ・プログラムを示す。
【図１２Ｂ】図１２Ｂは、バイパスする属性を取り除いた後の、さらなる頂点シェーダ・プログラムを示す。
【図１３Ａ】図１３Ａは、属性のバイパスと組み合わせられた、シェーダ変数の圧縮処理の、一般的なフローチャートを示す。
【図１３Ｂ】図１３Ｂは、属性のバイパスと組み合わせられた、シェーダ変数の圧縮処理の、一般的なフローチャートを示す。
【図１３Ｃ】図１３Ｃは、属性のバイパスと組み合わせられた、シェーダ変数の圧縮処理の、一般的なフローチャートを示す。
【図１４】図１４は、関連付け処理の一般的なフローチャートを示す。
【００１６】
図におけるイメージは、説明の目的のために、単純化されていて、一定の縮尺で描かれていない。理解を容易にするために、そのような要素を差別化するために、適切な場合には、接尾辞が付加されても良い場合を除いて、図において共通である同一の要素を示すために、可能な場合には、同一の参照数字が使用されている。
【００１７】
添付された図は、発明の例示の構成を示しているので、他の同様に有効な構成と認め得る発明の範囲の制限とみなされるべきではない。１つの構成の特徴またはステップが、さらなる詳述無しに、他の構成に有益に組み入れられ得ることが考慮されている。
【００１８】
以下の種々の構成において、フローチャート・ブロックは、描かれた順に実行されてもよいし、これらのブロックまたはその部分が、同時に、並列に、または、異なる順に実行されてもよい。
【詳細な説明】
【００１９】
「例示の」という言葉は、ここにおいては、「例、事例または実例として機能する」と意味するように、使用される。ここにおいて、「例示の」と説明される、任意の構成または設計は、他の構成または設計よりも好まれ、有利であると、必ずしも解釈されるわけではない。
【００２０】
ここにおいて説明される技術は、無線通信、演算、個人のためのエレクトロニクス等に使用される。無線通信のための技術の典型的な使用が、以下に説明される。
【００２１】
図３は、無線通信システムにおいて使用されるための、無線デバイス１０の構成のブロック・ダイアグラムを示す。無線デバイス１０は、携帯またはカメラ電話、端末、ハンドセット、個人情報端末（ＰＤＡ）、または、他のいくつかのデバイスであり得る。無線通信システムは、符号分割多元接続（ＣＤＭＡ）システム、モバイル通信のためのグローバルシステム（ＧＳＭ）システム、または、その他のシステムであり得る。
【００２２】
無線通信デバイス１０は、受信経路および送信経路を通して、双方向通信を提供することができる。受信経路において、基地局によって送信された信号は、アンテナ１２により受信され、受信機（ＲＣＶＲ）１４に供給される。受信機１４は、受信した信号を調整し、ディジタル化し、更なる処理のために、ディジタル・セクション２０に、サンプルを供給する。送信経路において、送信機（ＴＭＴＲ）１６は、ディジタル・セクション２０から送信すべきデータを受信し、データを処理し、調整し、アンテナ１２を通して基地局に送信される、変調された信号を発生する。
【００２３】
ディジタル・セクション２０は、たとえば、モデム・プロセッサ２２、ビデオプロセッサ２４、コントローラ／プロセッサ２６、ディスプレイ・プロセッサ２８、ＡＲＭ／ＤＳＰ３２、グラフィック処理ユニット（ＧＰＵ）３４、内部メモリ３６、外部バス・インターフェイス（ＥＢＩ）３８のような、種々の処理、インターフェイスとメモリ・ユニットを含む。モデム・プロセッサ２２は、データ送信と受信（例えば、符号化、変調、復調と復号化）のための処理を実行する。ビデオプロセッサ２４は、カムコーダ、ビデオ再生およびビデオ会議のようなビデオアプリケーションのために、ビデオコンテンツ（例えば、静止画、動画、移動テロップ）のための処理を実行する。コントローラ／プロセッサ２６は、ディジタル・セクション２０内の種々の処理とインターフェイス・ユニットの操作を指示することができる。ディスプレイ・プロセッサ２８は、表示ユニット３０上での、ビデオ、グラフィックスおよびテキストの表示を容易にするための処理を実行する。ＡＲＭ／ＤＳＰ３２は、無線デバイス１０のために、種々のタイプの処理を実行し得る。グラフィックス処理ユニット ３４は、グラフィックス・パイプラインのグラフィックス処理を実行する。
【００２４】
ここに説明された技術は、ディジタル・セクション２０における任意のプロセッサ、例えばグラフィックス処理ユニット３４のために、使用することができる。内部メモリ３６は、ディジタル・セクション２０内の種々のユニットのために、データおよび／または命令を記憶する。ＥＢＩ３８は、バスまたはデータ・ラインＤＬを通した、ディジタル・セクション２０（例えば内部メモリ３６）とメインメモリ４０の間の、データの転送を容易にする。
【００２５】
ディジタル・セクション２０は、１つ以上のＤＳＰ，マイクロプロセッサ、ＲＩＳＣｓ等とともに実装される。ディジタル・セクション２０は、また、１つ以上の特定用途向け集積回路（ＡＳＩＣ）またはその他のタイプの集積回路（ＩＣｓ）上に形成される。
【００２６】
ここに説明された技術は、種々のハードウェア・ユニット内に実装され得る。例えば、これらの技術は、ＡＳＩＣＳ，ＤＳＰｓ、ＲＩＳＣｓ、ＡＲＭｓ、ディジタル信号処理デバイス（ＤＳＰＤｓ）、プログラム可能な論理デバイス（ＰＬＤｓ）、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡｓ）、プロセッサ、コントローラ、マイクロ・コントローラ、マイクロプロセッサ、およびその他の電子ユニット上で実装され得る。
【００２７】
ＧＰＵ３４は、また、ＯｐｅｎＧＬ２．０，ＯｐｅｎＧＬ  ＥＳ２．０またはＤ３Ｄ９．０のような公のグラフィックス標準に準拠し得る。
【００２８】
図４は、頂点シェーダと圧縮操作のための、グラフィック処理ユニット （ＧＰＵ）３４の一般的なブロック・ダイアグラムを示す。ＧＰＵ３４は、ＶＳ入力レジスタ・ファイル５６に複数個の属性を出力する、ストリーム・デコーダ５０を含む。これらの属性は、頂点シェーダ（ＶＳ）６０により受け取られる。ＶＳ６０の出力は、ＶＳ出力レジスタ・ファイル５７に記憶されている、可変長を含んでいる。認めていただけるように、「レジスタ」ファイルは、情報を記憶する記憶媒体のように、ハードウェア構成要素である。この場合に、「ＶＳ入力レジスタ・ファイル」は、ＶＳ６０に送信されるべきである、入力ファイルを記憶する。単純にするために、大半の場合において、ＶＳ入力レジスタ・ファイル５６を参照する時に、ＶＳ６０への「入力ファイル」および／または「入力ファイル」を記憶するためのハードウェアが参照されている。同様に、単純にするために、大半の場合において、ＶＳ出力レジスタ・ファイル５７を参照する時に、ＶＳ６０からの「出力ファイル」および／または「出力ファイル」を記憶するためのハードウェアが参照されている。後に、さらに詳細に説明されるように、これらの可変長は、第１のレベルの可変長圧縮のために、コンパイラ６２（図６）によってインテリジェントに圧縮される。ＶＳ出力レジスタ・ファイル５７における可変長は、連続して、直列に、または、連鎖シーケンスとして、第２のレベルの可変長圧縮において、可変長を圧縮する、圧縮バッファ５８に送られる。圧縮バッファ５８が満たされると、圧縮された可変長は、次に、可変長キャッシュ５４に記憶される。
【００２９】
以下の説明から理解されるように、ＶＳ出力レジスタ・ファイル５７とＶＳ入力レジスタ・ファイル５６は、それぞれ、複数個の共有Ｍ次元（ＭＤ）レジスタを含む。各々の圧縮バッファ５８と５２は、少なくとも１つの共有Ｍ次元（ＭＤ）レジスタを含む。
【００３０】
図４の構成において、ストリーム・デコーダ５０は、バイパスされたストリームとバイパスされないストリームの、２つのストリームを発生する。バイパスされないストリームは、ＶＳ入力レジスタ・ファイル５６に送られ、好ましくは、テーブル１に示される方法によって、また、圧縮される。バイパスされた属性は、圧縮バッファ５２に圧縮される。バイパスされた属性は、図８Ａ、８Ｂ，９Ａ，９Ｂ、１０Ａ，１０Ｂ、１１Ａ，１１Ｂ，１２Ａと１２Ｂに関して、後に詳細に説明される。
【００３１】
図５は、フラグメント・シェーダと関連付け操作を含む、グラフィック処理ユニット（ＧＰＵ）の一般的なブロック・ダイアグラムを示す。圧縮された可変長は、頂点キャッシュ５４に記憶されている。プリィミティブ・アセンブラとラスタライザ９０は、頂点キャッシュ５４の可変長を、入力として受け取る。プリィミティブ・アセンブラとラスタライザ９０は、圧縮された可変長を、可変長バッファ９２に出力する。関連付けユニット８８は、可変長再マッピングおよびロード・モジュール８４によって使用される、１組の関連付け命令８２を持つ。図６のリンカ８０は、ドライバ６１により、図５の関連付け命令８２のために、記憶装置にロードされる、関連付け（linking table）テーブル８６を発生する。ＶＳ出力シンボル・テーブル（表２）に圧縮された可変長を、ＦＳ入力シンボル・テーブル（表３）に関連付ける、関連付けテーブル８６の例が、以下に説明される表４と表６に示される。ＦＳ入力シンボル・テーブルは、ＶＳ出力シンボル・テーブルよりも少ないシンボルを持つことができる。関連付け・ユニット８８により、関連付け処理が実行された後に、可変長再マッピングおよびロード・モジュール８４からの可変長は、フラグメント・シェーダ（ＦＳ）７０による使用のために、ＦＳ入力レジスタ・ファイル７９に送られる。
【００３２】
図６は、ドライバの一般的なブロック・ダイアグラムを示す。ドライバ６１は、コンパイラ６２とリンカ８０を含んでいる。コンパイラ６２は、ＶＳ入力シンボル・テーブル６４とＶＳ出力シンボル・テーブル６６を発生する。例示のＶＳ入力シンボル・テーブルが、以下に、表１に示される。例示のＶＳ出力シンボル・テーブルが、以下に、表２に示される。コンパイラ６２は、頂点シェーダ６０とフラグメント・シェーダ７０を独立にコンパイルすることができるので、コンパイラ６２は、ＶＳ出力シンボル・テーブル６６におけるＩＤごとに、ＦＳ入力シンボル・テーブル７４におけるそれとは異なる、同じシンボルを割り当てることができる。このように、ドライバ６１のためのリンカ８０が、ＶＳ出力シンボル・テーブル６６内のレジスタＩＤと、ＦＳ入力シンボル・テーブル７４内のレジスタＩＤの間で、両方のテーブルで同じシンボルを見つけることによる、マッピングを実行するために存在する。リンカ８０は、同じ可変長シンボルを見つけるために、フラグメント・シェーダ７０の入力レジスタ・ファイル７９内の、対応する入力レジスタに、（頂点キャッシュ５４または可変長バッファ９２の場所に対応する）可変長をロードするために、ＧＰＵ３４と通信する。
【００３３】
ドライバ６１は、１組の命令を持つ、ソフトウェア・ドライバである。コンパイラ６２とリンカ８０は、ＣＰＵ３２またはコントローラ／プロセッサ２６上で動作するソフトウェア・ドライバ６１の部分である。これに対して、ＧＰＵ３４は、ドライバ６１によって命令される、特殊なコプロセッサである。
【００３４】
表１に示される、ＶＳ入力シンボル・テーブルは、以下の入力、すなわち、属性名、タイプ、もともと割り当てられた属性入力レジスタＩＤ、もともとのマスク、新たに割り当てられた属性入力レジスタＩＤ、および、新しいマスク、を含んでいる。表２に示される、ＶＳ出力シンボル・テーブルは、以下の入力、すなわち、可変長名、タイプ、もともと割り当てられていた可変長出力レジスタＩＤ、もともとのマスク、新たに割り当てられた可変長出力レジスタＩＤ、および、新しいマスク、を含んでいる。テーブルにおけるマスクは、ＧＰＵ３４のハードウエア（ＨＷ）に割り当てられた、規定のＭＤ（Ｍ＝４）ベクトル・レジスタ記憶に対応する、属性ベクトル、または、可変長ベクトルのための、有効な成分を表す。もともと割り当てられていたＩＤとマスク、および、新たに割り当てられるＩＤとマスクは、両方とも、単に図示のために、以下の表内に一緒にされている。実際には、もともと割り当てられていたＩＤとマスクは、一時的な結果であり得るし、操作中に、同じ記憶場所を使用して、新たに割り当てられたＩＤとマスクになり得る。
【００３５】
コンパイラ６２は、ｇｌ＿ＦｒａｇＣｏｌｏｒ  ＦＣ（図２）として示される、ＦＳ入力シンボル・テーブル７４とＦＳ出力シンボル・テーブル７６を発生する。表３に示される、ＦＳ入力シンボル・テーブル７４は、以下の入力、すなわち、可変長名、タイプ、もともと割り当てられていた可変長入力レジスタＩＤ、もともとのマスク、新たに割り当てられた可変長入力レジスタＩＤ、および、新たなマスク、を含んでいる。
【００３６】
以下の表１と表２において、最後の２つの列は、以下に説明される圧縮処理に従って、新たに更新されている。
【表１】
2010535393.tif 000003
【表２】
2010535393.tif 000004
【表３】
2010535393.tif 000005
【表４】
2010535393.tif 000006
【００３７】
可変長（varyings）は、実数型、二次元（２Ｄ）ベクトル、３次元（３Ｄ）ベクトル、４次元（４Ｄ）ベクトル、配列、および、２Ｄ／３Ｄ／４Ｄ行列等であり得る。ＯｐｅｎＧＬ  ＥＳシェーディング言語の仕様は、モバイルＧＰＵ３４でサポートされる、少なくとも３２個の可変長成分を必要とする。各々の可変長は、異なる大きさを持ち、通常は、それ自身のレジスタ／バッファ空間を確保する。頂点キャッシュ５４において、レジスタは、通常は、４Ｄベクトルである。さらに、ＶＳ入力レジスタ・ファイル５６に対応するレジスタと、ＶＳ出力レジスタ・ファイル５７に対応するレジスタは、通常は４Ｄベクトルである。可変長の圧縮は、各々の頂点または画素のための連続空間に、異なる可変長をタイトに、一緒に入れる。例えば、ここに説明された可変長圧縮は、２つの２Ｄベクトルを、１つの４次元ベクトル・レジスタに入れる。他の例では、可変長圧縮は、１つの４Ｄベクトル・レジスタに、１つの３次元ベクトルと１つの実数（１Ｄ）を入れるであろう。それらをタイトに圧縮しないと、それらは、ゆったりと記憶され得る。
【００３８】
上記の説明は、可変長に関連している。しかしならが、可変長に加えて、属性も圧縮され得る。
【００３９】
図７は、２レベルのシェーダ変数の圧縮処理１００の、一般的なフローチャートを示す。処理１００は、コンパイラ６２に命令されて、インテリジェントな圧縮が行われるブロック１０２において、開始する。ブロック１０２では、成分の合計がＭと等しい，２つ以上のシェーダ変数が、共有Ｍ次元（ＭＤ）ベクトル・レジスタに対して、割り当てられる。図示を可能にするために、ＶＳ出力レジスタ・ファイル５７が列と行により示される。各々の行は、Ｘ，Ｙ，ＺとＷで示される４個（４）のブロックを持つ。ブロック１０２の後に、ブロック１０４が続き、そこでは、ＶＳ出力レジスタ・ファイル５７内のシェーダ変数を、頂点キャッシュ５４のＮ×Ｍ記憶媒体ブロック内で、連続的に、直列に圧縮する、ハードウェアの可変長圧縮が、圧縮バッファ５８において実行される。
【００４０】
図７のシェーダ変数は、可変長である。
【００４１】
以下の説明からわかるように、バイパスされた属性は、図１３Ａに関して説明された、ブロック１０４の処理と同様に、圧縮バッファ５２の中で圧縮される。バイパスされていない属性は、ブロック１０２に関して上に説明された処理を使用して圧縮され得る。このように、圧縮処理１００は、属性のために使用され得る。したがって、シェーダ変数は、可変長または属性を含む。
【００４２】
第１のレベル：コンパイラ・レベル圧縮
コンパイラ６２により命令される、ブロック１０２におけるインテリジェントな圧縮の、以下の説明は、表１と表２に関して説明されるであろう。インテリジェントな圧縮が、シェーダ変数（可変長と属性の両方）に適用される。表１は、属性の圧縮を図示していて、表２は、可変長の圧縮を図示している。コンパイラ６２は、同一の、または、共通のＭＤ（Ｍ次元）ベクトル・レジスタを再割り当てし、ここにおいて、レジスタＩＤを、その成分の和がＭ（Ｍ＝４）と等しい、２つ以上の可変長に関連付けることにより、バイパスしない属性または可変長の圧縮を実行し、これにしたがって、マスクを更新する。属性のためのＭＤベクトル・レジスタは、図４におけるＶＳ入力レジスタ・ファイル５７のための記憶に対応する。可変長のためのＭＤベクトル・レジスタは、図４におけるＶＳ出力レジスタ・ファイル５７のための記憶に対応する。例示の設定Ｍ＝４において、このように、ベクトルはＸ，Ｙ，ＺとＷにより示される。それにもかかわらず、より多いまたはより少ない次元の他の設定が使用され得る。
【００４３】
マスクはＭビットの位置を持つ。このように、各々の再割り当てされた、および／または、結合された、特定のＭＤベクトル・レジスタのための、属性または可変長（シェーダ変数）に関連付けられたマスクが、共通ＭＤベクトル・レジスタのどの部分が、後の記憶と使用のために、各々の明確な属性または（組み合わせの）可変長に割り当てられているかを示し、識別するために使用される。
【００４４】
例えば、上記の表１の特定の参照において、ｔｅｘｃｏｏｒｄ０とｔｅｘｃｏｏｒｄ１は、もともとはＩＤ番号が「もともと割り当てられていた属性入力レジスタＩＤ」の列の中に、それぞれ、３と４により示される、異なる属性入力レジスタに割り当てられていた。さらに、ｔｅｘｃｏｏｒｄ０とｔｅｘｃｏｏｒｄ１のための、もともとのマスクは、それぞれ、００１１と００１１である。コンパイラ６２は、ｔｅｘｃｏｏｒｄ０とｔｅｘｃｏｏｒｄ１の両方が、そのベクトルの合計が４Ｄ（Ｍ＝４）ベクトルに等しい、２Ｄベクトルであることを決定する。したがって、コンパイラ６２は、ｔｅｘｃｏｏｒｄ０とｔｅｘｃｏｏｒｄ１の、「新たに割り当てられた属性入力レジスタＩＤ」行内の、ＩＤ番号３で示される、同じ属性レジスタへの圧縮を命令する。圧縮中には、表１の「新しいマスク列」の中で、ｔｅｘｃｏｏｒｄ０は、マスクの最下位ビット位置００１１に割り当て得るし、ｔｅｘｃｏｏｒｄ１は、マスクの最上位ビット位置１１００に割り当て得る。マスク００１１は、ＭＤベクトル・レジスタ３のどの部分に、ｔｅｘｃｏｏｒｄ０に対応するデータを見つけ得るのかを示す。同様に、マスク１１００は、ＭＤベクトル・レジスタ３のどの部分に、ｔｅｘｃｏｏｒｄ１に対応するデータを見つけ得るのかを示す。この用語は、２つ以上の属性が、重なり合わない方法で、共通のレジスタを共有することを許容する。認識していただけるように、マスク内のビット数は、次元に依存して変化するであろう。
【００４５】
表２により最も良くわかるように、ＶＳ出力シンボル・テーブル６６の可変長ｔｅｘｃｏｏｒｄ０とｔｅｘｃｏｏｒｄ１の特定の参照により、これらは、「新規に割り当てられた可変長レジスタ出力ＩＤ」の列の中に示される、ＩＤ番号０を持つ、同じ可変長レジスタ内に圧縮される。ｔｅｘｃｏｏｒｄ０のための新しいマスクは、古いマスクと同じ、００１１である。しかしながら、ｔｅｘｃｏｏｒｄ１のための新しいマスクは、古いマスクとは異なる、１１００である。このように、マスクは、各々のビットが共有ＭＤベクトル・レジスタ内での位置を表す、Ｍビットを持つ。
【００４６】
もう１つの例において、ＶＳ入力シンボル・テーブル６４の属性、「重み付け」と「標準」は、表１の「新たに割り当てられた属性入力レジスタＩＤ」と示される、ＩＤ番号２を持つ、同じ属性レジスタに圧縮される。コンパイラ６２が、レジスタＩＤと「新しいマスク」の再割り当てを命じた後に、ＧＰＵ３４のハードウェア（ＨＷ）は、コンパイラ６２により命令された第１のレベルの圧縮を終了する、（更新したマスクを含む）テーブルのような命令にしたがって、割り当てられたレジスタに、対応するシェーダ変数（属性と可変長）を、自動的にロードするであろう。
【００４７】
配列または行列は、２Ｄ／３Ｄ／４Ｄベクトル、または、１つの実数型（float）に、論理的に分割され得るし、その時、コンパイラ６２によって命令されるように、圧縮が実行され得る。配列は一連の実数型、２Ｄベクトル、３Ｄベクトル、または、４Ｄベクトルにより表すことができる。例えば、１０個の実数型の配列は、１つの２Ｄベクトルを加えた、２個の４Ｄベクトルに、または、１０個の独立実数型に分割することができる。２×２のマトリクスは、２つの２Ｄベクトルに、３×３のマトリクスは、３つの３Ｄベクトルに、４×４のマトリクスは、４つの４Ｄベクトルに、それぞれ分割し得る。したがって、コンパイラ６２は、以下のような場合、２Ｄベクトル＋２Ｄベクトル、３Ｄベクトル＋実数型、２Ｄベクトル＋実数型［＋実数型］および、実数型＋実数型［＋実数型［＋実数型］］には、圧縮を命じることができる。これらの例は、４Ｄベクトル・レジスタについてである。他の組み合わせは、次元の数に基づいて描かれる。入力レジスタ・ファイルと出力レジスタ・ファイルの使用は、第１のレベルの圧縮により最小化され得る。
【００４８】
コンパイラ６２に命令された圧縮の後に、全てのシェーダ変数（可変長）は、まだ、４Ｄ（ＭＤ）ベクトルに配列されていないであろうし、例えば、いくつかの３Ｄベクトル、いくつかの４Ｄベクトル等が存在するであろう。例示の構成において、第２のレベルの可変長圧縮のために、可変長記憶または頂点キャッシュ５４内に、可変長をタイトにＨＷ圧縮するメカニズムが実行される。
【００４９】
第２のレベル：ＨＷ圧縮
可変長の記憶または頂点キャッシュ５４において、１つの頂点または１つのピクセルのための、全ての可変長はＮ×Ｍのバッファ・ブロックに記憶される。Ｎは可変長の数であり、Ｍ＝４は４Ｄベクトルであることを意味する。記憶装置ブロックは、連続的な（一連の）成分（component）の数（Ｎ×Ｍ）として取り扱われ得る。３２ビット／成分とＭ＝４の場合には、成分は０〜（（Ｎｘ４）−１）で番号付けされ得る。例えば、Ｎ＝８で８×４の記憶媒体ブロックは、０〜３１で番号付けされる、３２個の連続的な（一連の）成分として取り扱われ得る。
【００５０】
図４において、圧縮バッファ５８は、２×Ｍ（Ｍ＝４）のスロットの配列として表される。矢印は、圧縮バッファ５８において、スロットを満たす方向を示す。圧縮バッファ５８の上端の行は、一時バッファ５８Ａとして示され、２番目の行は、作業バッファ５８Ｂとして示される。表５は、ＨＷ圧縮の結果を図示する。
【表５】
2010535393.tif 000007
【００５１】
第２のレベルの圧縮は、一時バッファ５８Ａ（圧縮バッファ５８の第１行）を、連続的にかつ直列に、最初に満たすことによって、ＨＷにおいて実行され得る。圧縮バッファ５８の一時バッファ５８Ａが満たされると、一時バッファ５８Ａの内容は頂点キャッシュ５４内での記憶のために転送され得る。この構成において、圧縮バッファ５８は、一時バッファ５８Ａとして示される、Ｍスロットの第１の行と、作業バッファとして示されるＭスロットの第２の行を含む。
【００５２】
表５で説明されている例を使用すると、ＨＷ圧縮は、ＶＳ出力レジスタ・ファイル５７から、Ｖ０．ｘ、Ｖ０．ｙとＶ０．ｚとして示される３つの成分を持つ、可変長Ｖ０を読み出し、可変長Ｖ０．ｘ、Ｖ０．ｙとＶ０．ｚによりＸ，Ｙ，ＺとＷの一時バッファ５８Ａ（最も上の行）のスロットを満たすことから始まる。理解され得るように、一時バッファ５８ＡのスロットＷは空である。一時バッファ５８Ａが満たされるまでは、可変長Ｖ０．ｘ、Ｖ０．ｙとＶ０．ｚは、まだ、頂点キャッシュ５４に送られていない。
【００５３】
ＨＷ圧縮は、ＶＳ出力レジスタ・ファイル５７から、Ｖ１．ｘ、Ｖ１．ｙ、Ｖ１．ｚ、Ｖ１．ｗと示される、４つの成分を持つ可変長Ｖ１を読み出し、一時バッファ５８Ａにおける、残りのスロットを満たすことにより、継続する。この場合に、一時バッファ５８Ａ（上の行）のスロットＷは、可変長Ｖ１．ｘにより満たされている。残りの可変長成分Ｖ１．ｙ、Ｖ１．ｚ、Ｖ１．ｗは、第２の行または作業バッファ５８ＢのスロットＸ，ＹとＺ内に、連続的に満たされる。一時バッファ５８Ａが完全に満たされると、一時バッファ５８Ａを空にするために、一時バッファ５８Ａの内容は、頂点キャッシュ５４の（第１の）行に書き込まれ得る。
【００５４】
一時バッファ５８Ａが空であると、作業バッファ５８ＡのスロットＸ，ＹとＺ内に、連続的に満たされている、残りの可変長成分Ｖ１．ｙ、Ｖ１．ｚ、Ｖ１．ｗの内容が、一時バッファ５８Ａに転送される。再び、一時バッファ５８Ａは満たされていない。このように、ＨＷ圧縮は、ＶＳ出力レジスタ・ファイル５７から、Ｖ２．ｘ、とＶ２．ｙにより示される、２つの成分を持つ可変長Ｖ２を読み出し、一時バッファ５８Ａにおける、残りのスロットを満たすことにより、継続する。この場合には、一時バッファ５８ＡのスロットＷ（上の行）は、可変長Ｖ２．ｘにより満たされている。残りの可変長成分Ｖ２．ｙは、第２行のスロットＸ、または、作業バッファ５８Ｂ内に満たされる。一時バッファ５８Ａが完全に満たされると、一時バッファ５８Ａを空にするために、一時バッファ５８Ａの内容は、頂点キャッシュ５４の（第２の）行に書き込まれ得る。
【００５５】
処理は、ＶＳ出力レジスタ・ファイル５７における可変長のために、継続する。この例では、最後の可変長が、一時バッファ５８ＡのＸ，ＹとＺのスロットだけを満たすので、内容は、マスク＝ｘｙｚ、または、（１１１）として可変長記憶、または、頂点キャッシュ５４に書き込まれる。
【００５６】
圧縮バッファ５８の、一時バッファ５８Ａと作業バッファ５８Ｂは、性能のためにある。一時バッファ５８Ａが満たされていて、可変長記憶、または、頂点キャッシュ５４に書き出す準備ができている時に、他のバッファ（作業バッファ５８Ｂ）が同時に満たされ得る。読み出しバスと書き込みバスの両方は、同時に、４個の（Ｍ個の）成分のために使用され得る。１回の読み出し、または、書き込みが４個未満の成分である場合には、読み出され、書き込まれる上で、どの成分が有効であるかを示すために、読み出しまたは書き込みマスクが使用される。
【００５７】
第２のレベルのＨＷ圧縮が完了すると、ＶＳ出力シンボル・テーブル（表２）における圧縮された可変長に対応する、表４の「新規に割り当てられたＶＳ可変長出力レジスタＩＤ」に対応するレジスタＩＤは、表６における「新規に割り当てられたＶＳ可変長出力レジスタＩＤ」の列に示される、出力可変長記憶、または、頂点キャッシュ５４に対応するように変更されるであろう。単純化と柔軟化のために、出力ＩＤと頂点キャッシュ５４内の位置の関係は、ベクトル・レジスタの代わりに成分ユニットに基づいて割り当てられる。この例では、ＩＤ＝０であるｔｅｘｃｏｏｒｄ０と、ＩＤ＝２であるｔｅｘｃｏｏｒｄ１が、可変長記憶、または、頂点キャッシュ５４の第１の行に、ＩＤ＝４であるｃｏｌｏｒ０は第２の行に、ＩＤ＝８であるｃｏｌｏｒ１Ｉは第３の行に、圧縮される。位置とｔｅｘｃｏｏｒｄ２は、ＦＳ７０においては使用されないので、ＦＳ入力レジスタ・ファイル７９においては、記憶／圧縮がこれらには割り当てられない。このように、「新規に割り当てられたＦＳ可変長入力レジスタＩＤ」は、表４または表６では提供されない。
【００５８】
第２のレベルのＨＷ圧縮は、ＨＷによって実行されるが、表６に示されるように、関連付けテーブル８６はドライバ６１のリンカ８０によって、更新される。ドライバ６１は、図４における、同じ圧縮メカニズムに基づく各々の可変長成分、および、ＶＳ入力と出力シンボル・テーブル６４と６６、およびＦＳ入力シンボル・テーブル７４等のために、可変長記憶または頂点キャッシュ５４内の、新たなレジスタＩＤ／成分ＩＤを計算することができる。表４は、関連付けテーブルが、第２のレベルのＨＷ圧縮なしで、何を表そうとしているのかを図示する。表６は、関連付けテーブルが、ＨＷ圧縮の後で、何を表そうとしているのかを図示する。
【表６】
2010535393.tif 000008
【００５９】
ＶＳ６０のような、プログラム可能な頂点シェーダは、ＰＣゲーム・デバイスおよびモバイル・デバイスの両方において、最新のＧＰＵの重要な計算ユニットである。ＶＳ６０は、計算する上で電力を消費し、その上に、通常は、性能のボトルネックである。しかしながら、いくつかの応用は、シェーダ機能を使用しなくでもよい。別の考え方は、ＶＳ６０への何らかの入力は、何の計算も必要としないで、直接出力に移動され得る。
【００６０】
この機能についての、最も単純な解決策は、全ての入力を頂点シェーダ内に導き、ここにおいて、頂点シェーダが移動命令を実行することである。しかしながら、そのような解決策は、多くの計算の電力を消費し、頂点シェーダに、性能における低下を持たせるであろう。性能の低下は、１）データの入力／出力のための、不必要なトラフィック・バンド幅と、２）頂点シェーダにおいて実行される不必要な移動命令の結果である。
【００６１】
このように、ＧＰＵ３４は、入力ストリーム・デコーダ５０からの入力をバイパスする経路を使用して、構築され、配置される。入力をバイバスする経路は、頂点キャッシュ５４に直接行くことができる。ドライバ６１、または、コンパイラ６２は、どの入力が、頂点キャッシュ５４に、直接バイパスされ得るか、どの入力が、頂点シェーダ６０にロードしなければならないかを、指定することができる。コンパイラ６２は、バイパスする入力のためのシェーダ・プログラムから、全ての不必要な移動命令を取り除く。
【００６２】
図４に一点鎖線として示される、小さなハードウェア制御ロジック５１は、入力ストリーム・デコーダ５０の中にある。このように、受け取った入力が、「バイパスする」と指定されている場合には、入力フォーマットの復号の後に、入力は、バイパスされた経路に沿って送られ、頂点キャッシュ５４に記憶されるであろう。「バイパスする」と示されていない、受け取った入力だけが、ＶＳ入力レジスタ・ファイル５６において、圧縮され、頂点シェーダ６０に送られる。
【００６３】
例示の実施例において、バイパスされた属性は、頂点キャッシュ５４に記憶される前に、圧縮バッファ５２において圧縮される。コンパイラ６２は、圧縮バッファ５８Ａに関連して上に説明されたような方法で、マスク、および／または、レジスタＩＤを修正するであろう。キャッシュ・インデックスは、バイパスされる入力と共に、頂点キャッシュ５４に渡される。頂点シェーダ 60からの出力は、同じ頂点については、同じＩＤ／インデックスを持つであろう。したがって、頂点キャッシュ５４は、頂点シェーダの出力に、バイパスした入力を容易に同期させることができる。
【００６４】
図８Ａと８Ｂは、バイパスする属性を除く前と後の、頂点シェーダ・プログラムを示す。いくつかの頂点シェーダは、Ｌ３とＬ４で示される列上に、ＭＯＶ命令を持つ。ＭＯＶ命令は、属性に関連づけられた入力レジスタから、可変長に関連付けられた出力レジスタへの移動をさせる。そのような属性は、頂点シェーダ６０からバイパスさせ得る。例えば、図８Ａにおいて、パラメータＶ０，Ｖ１，Ｖ２は入力属性であり、ｏＰｏｓ，ｏＦｏｇ，ｏＴ０とｏＤ０は、出力可変長である。この例において、Ｌ１およびＬ３列上の入力属性ｖ１と、Ｌ２およびＬ４列上の入力属性ｖ２は、頂点シェーダ ６０での何らの計算も含まず、ｏＴ０とｏＤ０に単に移動される。したがって、属性ｖ１とｖ２は、頂点シェーダ６０のプログラム（１組の命令）が実行される前に、可変長記憶、または、頂点キャッシュ５４に直接バイパスされる。属性ｖ１とｖ２がバイパスされた後に、これらは、図８Ｂの列Ｌ１，Ｌ２，Ｌ３とＬ４の削除によって示されるように、頂点シェーダ 60の中には送られないであろう。さらに、出力可変長ｏＴ０とｏＤ０は、図８Ｂにおいて列Ｌ３とＬ４が無いことで示されるように、頂点シェーダ ６０から出力されない。したがって、バイパスする機能は、トラフィックのバンド幅と頂点シェーダ の計算電力を節約する。
【００６５】
属性をバイパスするために、第２のレベルのＨＷ圧縮が、以下に説明されるように、調整される。バイパスされた属性は、圧縮バッファ５２においてのみ、第２のレベルのＨＷ圧縮を受ける。圧縮バッファ５２は、ストリーム・デコーダ５０から、バイパスされた属性を受け取る。ストリーム・デコーダ５０は、頂点ストリーム（属性）を、メイン（外部）メモリ４０から取得し、異なる属性フォーマットからＩＥＥＥフロート・フォーマットにフォーマット変換する、責任を負う。ドライバ６１は、どの属性がバイパスされるか、どの属性が頂点シェーダのために、ＶＳ入力レジスタ・ファイル５６に送られるかを、ストリーム・デコーダ５０に通信するであろう。バイパスされる属性は、上記の一時バッファ５８Ａと作業バッファ５８Ｂを使用して、上に説明されたのと同じ様に、圧縮されるであろう。バイパスされない属性は、頂点シェーダ 60のＶＳ入力レジスタ・ファイル５７に送られ、圧縮されるであろう。
【００６６】
バイパスした属性とＶＳ出力レジスタ・ファイル５７の両方からの可変長は、全体の可変長の足跡（footprint）として、可変長記憶、または、頂点キャッシュ５４の全てを満たすであろう。単純化するために、バイパスされた属性からの可変長は、圧縮され、可変長記憶、または、頂点キャッシュ５４の最初の数行に記憶され、圧縮バッファ５８に圧縮されたＶＳ出力は、その後、可変長記憶、または、頂点キャッシュ５４に記憶される。例えば、図８Ａを再び参照すると。可変長出力（バイパスされた属性）ｏＤ０（ｖ２）は、圧縮バッファ５２の一時バッファ５２Ａに圧縮され、可変長記憶、または、頂点キャッシュ５４の第１行に記憶される。可変長出力（バイパスされた属性）ｏＴ０（ｖ１）は、可変長記憶、または、頂点キャッシュ５４の、２番目の行の、２つの重要度の低い成分に、圧縮または記憶される。ＶＳ出力ｏＰｏとｏＦｏｇは、圧縮されるか、または、その後に、２番目の行の、２つの最も重要な成分から始めて、記憶されるであろう。この場合に。ｏＰｏｓ．ｘｙは、一時バッファのｚｗスロットに圧縮され、その時、書き込みマスク＝ｚｗとして、可変長記憶、または、頂点キャッシュ５４の２番目の行に書き込まれる。このように、それは、同じ行ではあるが、異なる成分の位置において、ｏＴ０の後に、連続して圧縮される。ｏＰｏｓ．ｚｗとｏＦｏｇは、ｘｙｚ成分スロットの作業バッファ５２Ｂの中で圧縮され、書き込みマスク＝ｘｙｚで、可変長記憶、または、頂点キャッシュの、３行目に書き込まれるであろう。関連付けテーブル（link table）８６は、それに応じて、更新されるであろう。
【００６７】
図９Ａと９Ｂは、バイパスする属性を取り除いた前と後の、別の頂点シェーダ・プログラムを示す。「矢印Ｌ５，Ｌ６，Ｌ７，Ｌ８とＬ９」により示された列上の、移動命令は、バイパスされ得る。例えば、「矢印Ｌ５」によって示された列上では、可変長出力ｏＴ０（ｖ１）は、バイパスされ得る。他の可変長出力ｏＴ１（ｖ１）、ｏＴ２（ｖ３）、ｏＤ０（ｖ４）とｏＤ１（ｖ５）も、また、バイパスされ得る。図９Ｂにおいて、図９Ａの「矢印Ｌ５，Ｌ６，Ｌ７，Ｌ８とＬ９」により示された列が取り除かれている。
【００６８】
図１０Ａと１０Ｂは、バイパスする属性が取り除かれる前と後の、さらなる頂点シェーダ・プログラムを示す。「矢印Ｌ１０とＬ１１」で示される列上での移動命令は、バイパスされ得る。図１０Ｂにおいて、図１０Ａにおいて「矢印Ｌ１０とＬ１１」で示された列は、取り除かれている。
【００６９】
図１１Ａと１１Ｂは、バイパスする属性を取り除く前と後の、さらなる頂点シェーダ・プログラムを示す。「矢印Ｌ１２，Ｌ１３，Ｌ１４，Ｌ１５とＬ１６」により示された列上の、移動命令は、バイパスされ得る。図１１Ｂにおいて、図１１Ａの「矢印Ｌ１２，Ｌ１３，Ｌ１４，Ｌ１５とＬ１６」により示された列が、取り除かれている。
【００７０】
図１２Ａと１２Ｂは、バイパスする属性を取り除く前と後の、さらなる頂点シェーダ・プログラムを示す。「矢印Ｌ１７とＬ１８」で示される、列上での移動命令は、バイパスされ得る。図１２Ｂにおいて、図１２Ａにおいて「矢印Ｌ１７とＬ１８」で示された列は、取り除かれている。図８Ａ，８Ｂ，９Ａ，９Ｂ，１０Ａ，１０Ｂ，１１Ａ，１１Ｂ、１２Ａと１２Ｂに示された例は、説明の目的であり、計算を必要としない他の移動命令または属性は、「バイパス属性」として示され得る。
【００７１】
容易に理解できるように、属性処理をバイパスすることの利点は、
１）シェーダのコードの大きさと実行する命令の低減、
２）入力／出力のトラフィック・バンド幅の低減、
３）ＡＬＵ（算術と論理ユニット）の遅延時間とテクスチャをロードする遅延時間を扱い、より多くの頂点を許容するための、レジスタ・ファイルの大きさの低減、
４）遅延を取り扱う、より少ない命令とより多くの頂点による、より良い性能、
５）より少ない実行される命令とより少ないトラフィックによる電力節約、
６）シェーダには一般的である、バイパス／停止、
７）ＣＰＵ／ＤＳＰ３２とＧＰＵ３４の間の負荷バランスのために、シェーダ・プログラムの一部をＣＰＵまたはＤＳＰに移動させることにより、性能を調整するドライバ６１のためのオプション、および、
８）予期されない問題の下で働くドライバ６１のためのオプション、を含む。
【００７２】
実際のゲームおよびベンチマークから、大半の頂点シェーダ（ＶＳ）は、出力に、直接、移動されているある程度の入力を持つと判定されてきている。表７は、異なるシェーダ・プログラムと、ここに説明された、バイパス機能に基づいて、節約された入力トラフィックと節約された出力トラフィックを図示する。表７は、さらに、節約された命令の割合を提供する。
【表７】
2010535393.tif 000009
【００７３】
図１３Ａ−１３Ｃは、属性のバイパスと結合された、シェーダ変数の圧縮プロセス２００の一般的なフローチャートを示す。シェーダ変数の圧縮プロセス２００は、図４のブロック・ダイアグラムに関して説明されるであろう。シェーダ変数の圧縮プロセス２００は、ストリーム・デコーダ５０によるように、入力属性のフォーマットが復号される、ブロック２０１から開始される。ブロック２０２は、ブロック２０１に続き、ここにおいて、ストリーム・デコーダ５０からの属性が「バイパスされた属性」であるかどうかについて、決定がなされる。決定が「ＹＥＳ」であると、有効な（バイパスされた）属性成分が、一時バッファ５２Ａに蓄積される、ブロック２０４がブロック２０２に続く。一時バッファ５２Ａが満たされているかどうかを決定する、ブロック２０６が、ブロック２０４に続く。例として、Ｍの限界（Ｍ＝４）のバイパスされた属性の成分が、一時バッファ５２Ａに満たされ得る。一時バッファ５２Ａは、また、作業バッファ５２Ｂを満たすことにより、満たされる。
【００７４】
しかしながら、ブロック２０６における決定が「ＮＯ」であれば、処理は、ブロック２１１にループする。ブロック２１１は、最後の入力属性に到達したかどうかを評価する、決定ブロックである。ブロック２１１の詳細は、後で説明される。
【００７５】
一時バッファ５２Ａが満たされている時に、ブロック２０８がブロック２０６に続き、ここでは、一時バッファ５２Ａに記憶、または、満たされた、バイパスされた属性成分が、頂点キャッシュに５４に送られ、記憶される。以上に説明されたように、作業バッファ５２Ｂ内の、バイパスされた属性は、その時、満たされるか再び記憶されるまで、一時バッファ５２Ａに転送される。後に説明されるブロック２１１が、ブロック２０８に続く。
【００７６】
再び、ブロック２０２に戻って、属性がバイパスされない属性である場合には、ブロック２０２での決定が「ＮＯ」であることを意味しているが、前もって定義された圧縮命令に従って、バイパスしない属性が、ブロック２１０において、ＶＳ入力レジスタ・ファイル５６に圧縮されるであろう。ブロック２１１が、ブロック２１０に続き、ここでは、最後の入力属性に到達したかどうかの決定を下す、決定が「ＮＯ」であると、ブロック２１１はループし、更なる入力属性が復号される、ブロック２０１に戻る。その逆に、決定が「ＹＥＳ」である場合には、ブロック２１２が、ブロック２１１に続き、そこでは、一時バッファ５２Ａ内の、残りのバイパスされた属性が頂点キャッシュ５４に送られる。
【００７７】
ブロック２１３がブロック２１２に続き、そこでは、何らかのバイパスしない属性が、利用可能であるかどうかの決定が下される。決定が「ＮＯ」であると、処理２００は終了する。しかしながら、ブロック２１３における決定が「ＹＥＳ」であると、その時、図１３Ｂのブロック２１４が、ブロック２１３に続く。ブロック２１４において、バイパスしない属性が、その時、ＶＳ６０に送られる。バイパスされない属性成分が、ＶＳ６０に送られると、ＶＳ６０は、ブロック２１６において、頂点シェーディング操作を行う。ＶＳ６０が終了した後に、ブロック２１８における第１のレベルのコンパイラ圧縮を完了するシェーダ命令の実行中に、有効である出力の可変長成分は、ＶＳ出力レジスタ・ファイル５７に自動的に圧縮される。ブロック２１８における圧縮は、図７のブロック１０２に対応する。
【００７８】
図１３Ｃのブロック２２２は、ブロック２１８に続く。表５に関して上に説明されるように、ＶＳ出力レジスタ・ファイル５７からの出力可変長は、一時バッファ５８Ａに蓄積される。一時バッファ５８Ａは、作業バッファ５８Ｂと結合して、満たされる。ブロック２２４は、ブロック２２２に続き、一時バッファ５２Ａが満たされているかどうかを決定する。もし「ＮＯ」であれば、ブロック２２２に戻る。決定が「ＹＥＳ」であると、ブロック２２６がブロック２２４に続き、一時バッファ５８Ａの内容が頂点キャッシュ５４に送られる、ブロック２２８がブロック２２６に続き、それが、ＶＳ出力レジスタ・ファイル５７内におけるファイルの最終であるかどうかを決定する。決定が「いいえ」であると、処理はブロック２２２に戻る。決定が「ＹＥＳ」であると、ブロック２３０がブロック２２８に続き、一時バッファ５８Ａ内の残りの可変長成分が頂点キャッシュ５４に送られる。
【００７９】
圧縮の後に、トラフィック／バンド幅は減少させられる。記憶装置は、大いに利用され、さらに性能が改善される。
【００８０】
代わりの圧縮メカニズムが使用され得る。例えば、ＶＳ出力レジスタ・ファイル５７内の可変長は、第２のレベルのＨＷ圧縮を用いて圧縮されない。その代わりとして、ファイル５７は、頂点キャッシュに、そのままコピーされる。表５に関しては、表５の左側は、頂点キャッシュ５４にコピーされる。これは、同じレイアウトと形状を維持する。ラスタライザの結果が可変長バッファ９２に送られる、プリィミティブ・アセンブラとラスタライザ９０の後に、同じ圧縮メカニズムが実行される。プリィミティブ・アセンブラとラスタライザ９０は、計算を節約するために、表２のマスクに基づいて、無効である（ｍａｓｋ＝０）成分のための計算を飛ばすであろう。
【００８１】
リンカと関連付け（Linker & Linking）
ＶＳ６０からの可変長は、ＦＳ７０に入力されるであろう。このように、ＶＳ６０のための可変長シンボルは、コンパイラ６２により発生され、ＶＳ出力シンボル・テーブル６６に出力される。ＦＳ７０のそれぞれの入力は、その可変長シンボルまたは可変長名称によって定義されるように、ＶＳ出力シンボル・テーブル６６における、それぞれの可変長シンボル出力に、結び付けられる。このように、ＶＳ出力シンボル・テーブル６６（表１）における、「可変長名称」により示される、可変長シンボルが、ＦＳ入力シンボル・テーブル７４（表３）における、「ＦＳ可変長名称」により示される、１つのエントリと一致すると、ＶＳ６０からの出力（可変長）は、ＦＳ７０の入力に結び付けられる。ＶＳ６０における順序と圧縮は、通常の場合には、ＦＳ７０とは異なるので、リンカ８０は、どのＶＳ出力が、どのＦＳ入力に結び付けられるかを決定する。リンカ８０は、図５における、可変長の再マッピングとローディング・モジュール８４のために、関連付け命令８２、または、関連付けテーブル８６を発生する、ドライバ６１の一部である。
【００８２】
同様な関連付けソリューションが、頂点ストリーム・デコーダ５０と、ＶＳ入力シンボル・テーブル６４で示される、ＶＳ入力の間の関連付けのために適用される。さらに、関連付けソリューションは、ＦＳ出力シンボル・テーブル７６により示されるＦＳ出力と、サンプルごとの操作ユニットの入力の、関連付けに適用される。リンカ８０は、任意の２個の隣接したプログラム可能な処理ステージのために使用され得る。
【００８３】
図１４は、関連付け処理（linking process）３００の一般的なフロー・ダイアグラムを示す。関連付け処理３００は、ブロック３０２から始まるが、ブロック３０２において、リンカ８０は、ＶＳ出力シンボル・テーブル６６とＦＳ入力シンボル・テーブル７６の両方から、同じシンボルを探し、比較する。ブロック３０４において、一致するシンボルに関連付けられた可変長は、可変長バッファ９２から読み出される。ブロック２０６は、可変長をＦＳ入力レジスタ・ファイル７９に送る。このようにして、関連付けは完了する。例示の、結果として生じる関連付けテーブルが、表６に示される。関連付け処理３００は、ＦＳ７０に必要とされる各々の可変長のために、繰り返される。
【００８４】
コンパイラ６２における圧縮のために、ＶＳ出力シンボル・テーブル６６は、ＦＳ入力シンボル・テーブル７６とは異なる。このように、好ましい関連付け命令は、それぞれの可変長成分を基にして、定義される。
【００８５】
理解されるように、２つのレベルの圧縮は、可変長（varying）のタイトな圧縮を可能にし、容易にする。第１のレベルのコンパイラの圧縮は、入力と出力を減少させ、これは、レジスタ・ファイルの大きさを低減する。ＨＷ圧縮は、単純で効率的である。圧縮処理は、さらに、入力／出力のトラフィック・バンド幅を、低減する。圧縮処理１００または２００は、キャッシュ記憶を大いに利用し、より少ないトラフィックにより電力を節約する。
【００８６】
図４と５に示されるＧＰＵパイプラインは、任意の２つの隣接するプログラム可能な処理ステージのために、一般的な関連付けを使用する。これは、階層的な関連付け、すなわち、配列と行列からベクトルと実数型へのような、大きくて複雑な可変長の構造のためのマッピングを、可能にする。圧縮処理は、コンパイラ６２に、最適化のために、自由に、レジスタの再度の順序付け、または、再割り当てをすることを許容する。処理は、ドライバ／リンカが、ＶＳ出力の一部を、それらがＦＳにおいて使用されていない場合には、一部の関連付け命令を修正することにより、容易に取り除くことを許容する。
【００８７】
１つ以上の例示の構成において、記述された機能は、ハードウェア、ソフトウェア、ファームウェアまたは、任意の組み合わせによって実現されるであろう。ソフトウェアとして実現されると、機能は、コンピュータ可読媒体上の１つ以上の命令またはコードとして記憶されるか、または、送信される。コンピュータ可読媒体は、コンピュータ記憶媒体と、コンピュータ・プログラムとデータを１つの場所から他への転送を容易にする、任意の媒体を含む通信媒体の両方を含む。記憶媒体は、コンピュータによりアクセスができる、任意の利用可能な媒体であり得る。例としてであり、限定するものではないが、このようなコンピュータ可読媒体には、命令またはデータの構造の形式で、要求されるプログラムコードを輸送し、または、記憶するために使用され得る、および、コンピュータによりアクセスされ得る、ＲＡＭ，ＲＯＭ，ＥＥＰＲＯＭ，ＣＤ−ＲＯＭ，または、他の光ディスク記憶、磁気ディスク記憶、または、他の磁気記憶デバイス、または、任意の他の媒体が含まれる。さらに、任意の接続は、コンピュータ可読媒体と、適切に名づけられている。例えば、同軸ケーブル、光ファイバーケーブル、ツイストペア、ディジタル加入者線（ＤＳＬ）、または、赤外線、無線およびマイクロ波のような無線技術を使用して、ソフトウェアがウェブサイト、サーバー、または、他の遠隔の供給源から送信される場合、そこでは、同軸ケーブル、光ファイバーケーブル、ツイストペア、ＤＳＬ、または、赤外線、無線およびマイクロ波のような無線技術は、媒体の定義に含まれている。ＤｉｓｋとＤｉｓｃは、ここで使用されるように、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、ディジタル・バーサタイル・ディスク（ＤＶＤ）、フロッピー（登録商標）ディスクおよびブルーレイ・ディスクを含んでいる。Ｄｉｓｋｓは、普通の場合には、磁気的にデータを再生するが、Ｄｉｓｃｓは、データを、レーザーを使って光学的に再生する。上記の組み合わせも、コンピュータ可読媒体の範囲に含めるべきである。
【００８８】
開示された構成の上記の説明は、任意の当業者が開示を作成し、利用することを可能にするために提供される。これらの構成に対する種々の修正は、当業者にとっては、容易に明白であり、ここに定義された一般的な原理は、本開示の精神または範囲から外れずに、他の構成に適用されるであろう。このように、本開示は、ここに示された構成に制限されることを意図していないし、ここに開示された原理と新規の特徴に矛盾しない最も広い範囲に一致する。
【図１】
2010535393.tif 000010
【図２】
2010535393.tif 000011
【図３】
2010535393.tif 000012
【図４】
2010535393.tif 000013
【図５】
2010535393.tif 000014
【図６】
2010535393.tif 000015
【図７】
2010535393.tif 000016
【図８Ａ】
2010535393.tif 000017
【図８Ｂ】
2010535393.tif 000018
【図９Ａ】
2010535393.tif 000019
【図９Ｂ】
2010535393.tif 000020
【図１０Ａ】
2010535393.tif 000021
【図１０Ｂ】
2010535393.tif 000022
【図１１Ａ】
2010535393.tif 000023
【図１１Ｂ】
2010535393.tif 000024
【図１２Ａ】
2010535393.tif 000025
【図１２Ｂ】
2010535393.tif 000026
【図１３Ａ】
2010535393.tif 000027
【図１３Ｂ】
2010535393.tif 000028
【図１３Ｃ】
2010535393.tif 000029
【図１４】
2010535393.tif 000030
【手続補正書】
【提出日】平成22年7月29日(2010.7.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、
成分の総数がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実行する処理ユニット、
を含み、さらに、
複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュを含み、
前記記憶媒体が、前記複数個の共有ＭＤレジスタのＭ個の成分をその中に連続的に圧縮することと、前記頂点キャッシュ内のそれぞれのＭＤキャッシュ・レジスタが満たされると前記圧縮バッファの前記ＭＤレジスタの内容を転送するための、ＭＤレジスタを持つ圧縮バッファを含む、
を特徴とする、デバイス。
【請求項２】
前記１組の操作が、
２つの２Ｄベクトル・シェーダ変数と、
１つの３Ｄベクトル・シェーダ変数と１つの実数型シェーダ変数と、
１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、
４つの実数型のシェーダ変数のうち１つを、
圧縮する、請求項１のデバイス。
【請求項３】
前記処理ユニットが、前記頂点キャッシュ内の前記出力可変長を、フラグメント・シェーダの１組の入力可変長に関連付ける、第２の組の操作を実行する、請求項１のデバイス。
【請求項４】
前記第２の組の操作が、前記頂点シェーダの前記出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダの前記組の入力可変長における対応する可変長シンボル名に一致させる操作を含む、請求項３のデバイス。
【請求項５】
第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、
前記シェーダ変数が、さらに前記頂点シェーダの入力ためにバイパスされない入力属性とバイパスされる入力属性とを含み、
前記１組の操作が、前記第２の複数個の共有ＭＤレジスタ内の、前記バイパスされない入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために、前記第２の記憶媒体内に任意の残りのバイパスされない入力属性を充足する操作を含む、
請求項１のデバイス。
【請求項６】
前記頂点キャッシュが、第２の複数個のＭＤキャッシュ・レジスタをさらに含み、
前記記憶媒体が、ＭＤレジスタを持つ第２の圧縮バッファを含み、前記バイパスされる入力属性のＭ個の成分を、その中に連続的に圧縮し、前記頂点キャッシュ内の前記第２の複数個のＭＤキャッシュ・レジスタの各々のＭＤキャッシュ・レジスタが満たされると、前記第２の圧縮バッファの前記ＭＤレジスタの内容を転送する、
請求項５のデバイス。
【請求項７】
第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、
前記シェーダ変数が前記頂点シェーダの入力ための１組の入力属性を含み、
前記１組の操作が、圧縮された場合に、残りの圧縮されてない入力属性の成分がＭを超えるまで、前記第２の複数個の共有ＭＤレジスタ内の、前記１組の入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために前記第２の記憶媒体内に前記残りの入力属性を充足する操作を含む、
請求項１のデバイス。
【請求項８】
前記処理ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、請求項１のデバイス。
【請求項９】
前記記憶媒体または前記処理ユニットが、集積回路内に含まれる、請求項１のデバイス。
【請求項１０】
１組のシェーダ変数を記憶するために複数個の共有Ｍ次元（ＭＤ）レジスタを含む記憶する手段と、
成分の総数がＭに等しい前記１組のシェーダ変数の１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する圧縮手段、
を含み、さらに、
複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュ手段を含み、
前記記憶する手段が、前記複数個の共有ＭＤレジスタのＭ個の成分をその中に連続的に圧縮することと、前記頂点キャッシュ内のそれぞれのＭＤキャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送することのための、ＭＤレジスタを持つ圧縮バッファを含む、
を特徴とする、
デバイス。
【請求項１１】
前記圧縮手段が、
２つの２Ｄベクトル・シェーダ変数と、
１つの３Ｄベクトル・シェーダ変数と１つの実数型のシェーダ変数と、
１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、
４つの実数型のシェーダ変数の少なくとも１つを、
圧縮するための手段を含む、
請求項１０のデバイス。
【請求項１２】
前記圧縮ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、請求項１０のデバイス。
【請求項１３】
前記記憶媒体は、コンピュータに、各共有ＭＤレジスにおいて圧縮するための１組の操作の実行をさせる命令を有するコンピュータ可読媒体である、請求項１のデバイス。
【請求項１４】
その成分の総数がＭに等しい１組のシェーダ変数の内の１つ以上のシェーダ変数を、第１の複数個の共有ＭＤレジスタの各共有Ｍ次元（ＭＤ）レジスタへ圧縮することと、
任意の残っているシェーダ変数が圧縮できなくなるまで、前記第１の複数個の共有ＭＤレジスタにおける前記圧縮を繰り返すこと、を含む第１の圧縮ステップ、を含む方法であって、前記方法において、
前記第１の複数個の共有ＭＤレジスタからのシェーダ変数のＭ個の成分を、第２の複数の共有ＭＤレジスタ内に連続的に圧縮することと、
頂点キャッシュのＭＤキャッシュレジスタのそれぞれが満たされると、前記第２の複数の共有ＭＤレジスタの前記第１の部分の内容を転送すること、
を含む第２の圧縮ステップ、をさらに含む、を特徴とする、方法。
【請求項１５】
前記組のシェーダ変数が頂点シェーダへのバイパスされない１組の入力属性を含み、
前記圧縮が前記複数個の共有ＭＤレジスタにおける前記組の入力属性の圧縮を含む、請求項１４の方法。
【請求項１６】
バイパスされた入力属性のＭ個の成分を、圧縮バッファのＭＤ一時レジスタに連続的に圧縮することと、
頂点キャッシュのそれぞれのＭＤキャッシュ・レジスタが満たされるとき、前記ＭＤ一時レジスタの内容を転送すること、
をさらに含む、請求項１５の方法。
【請求項１７】
前記記憶媒体または前記処理ユニットが、プロセッサ内に含まれる、請求項１のデバイス。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００８８
【補正方法】変更
【補正の内容】
【００８８】
開示された構成の上記の説明は、任意の当業者が開示を作成し、利用することを可能にするために提供される。これらの構成に対する種々の修正は、当業者にとっては、容易に明白であり、ここに定義された一般的な原理は、本開示の精神または範囲から外れずに、他の構成に適用されるであろう。このように、本開示は、ここに示された構成に制限されることを意図していないし、ここに開示された原理と新規の特徴に矛盾しない最も広い範囲に一致する。
以下の本件出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、成分の合計がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実行する処理ユニット、を含むデバイス。
［Ｃ２］前記１組の操作が、２つの２Ｄベクトル・シェーダ変数と、１つの３Ｄベクトル・シェーダ変数と１つの実数型シェーダ変数と、１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、４つの実数型のシェーダ変数のうち１つを、圧縮する、Ｃ１のデバイス。
［Ｃ３］前記シェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記１組の操作が、前記複数個の共有ＭＤレジスタ内の、前記１組の出力可変長を圧縮する操作と、頂点シェーダ出力ファイルを生成するために、前記記憶媒体に任意の残りの可変長を充足する操作、を含む、Ｃ１のデバイス。
［Ｃ４］複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュをさらに含み、前記記憶媒体がＭＤレジスタを持つ圧縮バッファを含み、前記頂点シェーダ出力ファイルのＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内のそれぞれのＭＤキャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送する、Ｃ３のデバイス。
［Ｃ５］前記処理ユニットが、前記頂点キャッシュ内の前記出力可変長を、フラグメント・シェーダの１組の入力可変長に関連付ける、第２の組の操作を実行する、Ｃ４のデバイス。
［Ｃ６］前記第２の組の操作が、前記頂点シェーダの前記出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダの前記組の入力可変長における対応する可変長シンボル名に一致させる操作を含む、Ｃ５のデバイス。
［Ｃ７］第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、前記シェーダ変数が、さらに前記頂点シェーダの入力ためにバイパスされない入力属性とバイパスされる入力属性とを含み、前記１組の操作が、前記第２の複数個の共有ＭＤレジスタ内の、前記バイパスされない入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために、前記第２の記憶媒体内に任意の残りのバイパスされない入力属性を充足する操作を含む、Ｃ４のデバイス。
［Ｃ８］前記頂点キャッシュが、第２の複数個のＭＤキャッシュ・レジスタをさらに含み、前記記憶媒体が、ＭＤレジスタを持つ第２の圧縮バッファを含み、前記バイパスされる入力属性のＭ個の成分を、その中に連続的に圧縮し、前記頂点キャッシュ内の前記第２の複数個のＭＤキャッシュ・レジスタの各々のＭＤキャッシュ・レジスタが満たされると、前記第２の圧縮バッファの前記ＭＤレジスタの内容を転送する、Ｃ７のデバイス。
［Ｃ９］第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、前記シェーダ変数が前記頂点シェーダの入力ための１組の入力属性を含み、前記１組の操作が、圧縮された場合に、残りの圧縮されてない入力属性の成分がＭを超えるまで、前記第２の複数個の共有ＭＤレジスタ内の、前記１組の入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために前記第２の記憶媒体内に前記残りの入力属性を充足する操作を含む、Ｃ４のデバイス。
［Ｃ１０］前記処理ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、Ｃ１のデバイス。
［Ｃ１１］複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、成分の合計がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実行する処理ユニットを、含む集積回路。
［Ｃ１２］前記１組の動作が、２つの２Ｄベクトル・シェーダ変数と、１つの３Ｄベクトル・シェーダ変数と１つの実数型のシェーダ変数と、１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、４つの実数型のシェーダ変数のうち１つを、圧縮する、Ｃ１１の集積回路。
［Ｃ１３］前記シェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記１組の操作が、前記複数個の共有ＭＤレジスタ内の、前記１組の出力可変長を圧縮する操作と、頂点シェーダ出力ファイルを生成するために、前記記憶媒体に任意の残りの可変長を充足する操作、を含む、Ｃ１１の集積回路。
［Ｃ１４］複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュをさらに含み、前記記憶媒体が、ＭＤレジスタを持つ圧縮バッファを含み、前記頂点シェーダ出力ファイルのＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内のそれぞれの（ＭＤ）キャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送する、Ｃ１３の集積回路。
［Ｃ１５］前記処理ユニットが、前記頂点キャッシュ内の前記出力可変長を、フラグメント・シェーダのための１組の入力可変長に関連付ける、第２の組の操作を実行する、Ｃ１４の集積回路。
［Ｃ１６］前記第２の組の操作が、前記頂点シェーダの前記出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダのための前記組の入力可変長における対応する可変長シンボル名に一致させる操作を含む、Ｃ１５の集積回路。
［Ｃ１７］第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、前記シェーダ変数が、さらに前記頂点シェーダの入力ためにバイパスされない入力属性とバイパスされる入力属性とを含み、前記１組の操作が、前記第２の複数個の共有ＭＤレジスタ内の、前記バイパスされない入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために、前記第２の記憶媒体内に任意の残りのバイパスされない入力属性を充足する操作を含む、Ｃ１４の集積回路。
［Ｃ１８］前記頂点キャッシュが、第２の複数個のＭＤキャッシュ・レジスタをさらに含み、前記記憶媒体が、前記バイパスされた入力属性のＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内の前記第２の複数個のＭＤキャッシュ・レジスタの各々のＭＤキャッシュ・レジスタが満たされると、前記第２の圧縮バッファの前記ＭＤレジスタの内容を転送する、ＭＤレジスタを持つ第２の圧縮バッファを含む、Ｃ１７の集積回路。
［Ｃ１９］第２の複数個の共有ＭＤレジスタを持つ、第２の記憶媒体をさらに含み、前記シェーダ変数が前記頂点シェーダの入力ための１組の入力属性を含み、前記１組の操作が、圧縮された場合に残りの圧縮されてない入力属性の成分がＭを超えるまで、前記第２の複数個の共有ＭＤレジスタ内の、前記１組の入力属性を圧縮する操作と、頂点シェーダ入力ファイルを生成するために前記第２の記憶媒体内に前記残りの入力属性を充足する操作を含む、Ｃ１４の集積回路。
［Ｃ２０］前記処理ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、Ｃ１１の集積回路。
［Ｃ２１］１組のシェーダ変数を記憶するために複数個の共有Ｍ次元（ＭＤ）レジスタを含む記憶する手段と、成分の合計がＭに等しい前記１組のシェーダ変数の１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する圧縮手段を、含むデバイス。
［Ｃ２２］前記圧縮手段が、２つの２Ｄベクトル・シェーダ変数と、１つの３Ｄベクトル・シェーダ変数と１つの実数型のシェーダ変数と、１つの２Ｄベクトル・シェーダ変数と２つの別の実数型シェーダ変数と、４つの実数型のシェーダ変数の少なくとも１つを、圧縮するための手段を含む、Ｃ２１の無線デバイス。
［Ｃ２３］前記１組のシェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記圧縮手段が、前記複数個の共有ＭＤレジスタ内の前記１組の出力可変長を圧縮するための可変長圧縮手段と頂点シェーダ出力ファイルを生成するために前記記憶手段に任意の残りの可変長を充足する充足手段を含む、Ｃ２１の無線デバイス。
［Ｃ２４］前記１組のシェーダ変数が、頂点シェーダへの１組の入力属性を含み、前記圧縮手段が、前記複数個の共有ＭＤレジスタ内の前記１組の入力属性を圧縮するための属性圧縮手段と、頂点シェーダ入力ファイルを生成するために前記記憶手段内に任意の残りの入力属性を充足するための充足手段を含む、Ｃ２１の無線デバイス。
［Ｃ２５］前記圧縮ユニットが、携帯電話、無線デバイス、無線通信デバイス、ビデオゲーム・コンソール、個人情報端末（ＰＤＡ）、ラップトップ・コンピュータ、およびオーディオ／ビデオ対応デバイスの１つの一部である、Ｃ２１の無線デバイス。
［Ｃ２６］コンピュータに、そのベクトルの合計がＭに等しい１組のシェーダ変数内の１つ以上のシェーダ変数を、複数個の共有ＭＤベクトル・レジスタにおける各々の共有Ｍ次元（ＭＤ）ベクトル・レジスタに、圧縮させる命令を有するコンピュータ可読媒体を含むコンピュータ・プログラム製品。
［Ｃ２７］前記シェーダ変数の組が頂点シェーダからの１組の出力可変長を含み、前記命令が、前記コンピュータに前記１組の出力可変長を圧縮させ、残りの出力可変長により、残りのベクトル・レジスタを充足させる、Ｃ２６のコンピュータ・プログラム製品。
［Ｃ２８］前記コンピュータに、前記圧縮された組の出力可変長を、フラグメント・シェーダのための１組の入力可変長に関連付けさせる命令を、さらに含む、Ｃ２７のコンピュータ・プログラム製品。
［Ｃ２９］前記関連付けさせる命令が、前記コンピュータに、前記頂点シェーダからの前記圧縮された組の出力可変長に対応する可変長シンボル名を、前記フラグメント・シェーダのための前記組の入力可変長における対応する可変長シンボル名に一致させる命令を含む、Ｃ２８のコンピュータ・プログラム製品。
［Ｃ３０］前記１組のシェーダ変数が、頂点シェーダへの１組の入力属性を含み、前記命令が、前記コンピュータに前記１組の入力属性を圧縮させ、残りの入力属性で残りのベクトル・レジスタを充足させる、Ｃ２６のコンピュータ・プログラム製品。
［Ｃ３１］そのベクトルの合計がＭに等しい１組のシェーダ変数の内の１つ以上のシェーダ変数を、複数個の共有ＭＤベクトル・レジスタにおける各々の共有Ｍ次元（ＭＤ）ベクトル・レジスタへ圧縮することと、任意の残っているシェーダ変数が圧縮できなくなるまで、前記複数個の共有ＭＤベクトル・レジスタにおける前記圧縮を繰り返すこと、を含む方法。
［Ｃ３２］前記１組のシェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記圧縮が、前記複数個の共有Ｍ次元（ＭＤ）レジスタにおける、前記１組の出力可変長の圧縮を含む、Ｃ３１の無線デバイス。
［Ｃ３３］前記圧縮された出力可変長の組と残りの出力可変長により頂点シェーダ出力ファイルを生成することと、前記頂点シェーダ出力ファイルのＭ個の成分を、圧縮バッファのＭＤ一時レジスタに連続的に圧縮することと、頂点キャッシュのそれぞれのＭＤキャッシュ・レジスタが満たされるとき、前記ＭＤ一時レジスタの内容の転送すること、をさらに含む、Ｃ３１の方法。
［Ｃ３４］前記組のシェーダ変数が頂点シェーダへのバイパスされない１組の入力属性を含み、前記圧縮が前記複数個の共有ＭＤレジスタにおける前記組の入力属性の圧縮を含む、Ｃ３１の方法。
［Ｃ３５］バイパスされた入力属性のＭ個の成分を、圧縮バッファのＭＤ一時レジスタに連続的に圧縮することと、頂点キャッシュのそれぞれのＭＤキャッシュ・レジスタが満たされるとき、前記ＭＤ一時レジスタの内容を転送すること、をさらに含む、Ｃ３４の方法。
［Ｃ３６］複数個の共有Ｍ次元（ＭＤ）レジスタを有する記憶媒体と、成分の合計がＭに等しい１つ以上のシェーダ変数を各々の共有ＭＤレジスタ内に圧縮する１組の操作を実装する集積回路を、含むプロセッサ。
［Ｃ３７］前記シェーダ変数が頂点シェーダからの１組の出力可変長を含み、前記１組の操作が、前記複数個の共有Ｍ次元（ＭＤ）レジスタにおいて、前記１組の出力可変長を圧縮する操作と、頂点シェーダ出力ファイルを生成するために、前記記憶媒体に任意の残りの可変長を充足する操作を含むＣ３６のプロセッサ。
［Ｃ３８］複数個のＭＤキャッシュ・レジスタを持つ頂点キャッシュをさらに含み、前記記憶媒体がＭＤレジスタを持つ圧縮バッファを含み、前記頂点シェーダ出力ファイルのＭ個の成分をその中に連続的に圧縮し、前記頂点キャッシュ内のそれぞれのＭＤキャッシュ・レジスタが満たされると、前記圧縮バッファの前記ＭＤレジスタの内容を転送する、Ｃ３７のプロセッサ。
【国際調査報告】
2010535393.tif 000031
2010535393.tif 000032
2010535393.tif 000033