(57)【要約】ＧＰＵ（グラフィックスプロセッシングユニット）内でテクスチャを展開又は生成するための処理ユニット、方法及び媒体を提供する。テクスチャは、ＪＰＥＧなどの可変レート圧縮スキームを用いて圧縮されている。この圧縮されたテクスチャは、システムメモリから取り出され、最初に展開されることなく、ＧＰＵ上のローカルのキャッシュメモリに転送される。圧縮されたテクスチャ内の個々のブロックを見つけるために、テーブルがキャッシュによって利用される。展開シェーダプロセッサは、圧縮されたブロックを受け取り、次にブロックをオンザフライで展開する。次に、展開されたブロックは、ＧＰＵのテクスチャコンシューミングシェーダプロセッサによって、通常どおり処理される。【選択図】図３
2014520328.tif 000002
【特許請求の範囲】
【請求項１】
第１のシェーダと、
第２のシェーダと、を含み、
前記第２のシェーダは、前記第１のシェーダで使用するための可変レート圧縮テクスチャブロックを展開するように構成されている、
装置。
【請求項２】
前記第２のシェーダは、前記第１のシェーダによる、前記可変レート圧縮テクスチャブロックに対応するテクスチャブロックに対する要求に応じて、前記可変レート圧縮テクスチャブロックを展開するように構成されている、請求項１に記載の装置。
【請求項３】
前記第１のシェーダによる、前記可変レート圧縮テクスチャブロックに対応する前記テクスチャブロックに対する要求は、前記可変レート圧縮テクスチャブロックの非圧縮バージョンに対するメモリへの要求である、請求項２に記載の装置。
【請求項４】
前記第２のシェーダは、前記可変レート圧縮テクスチャブロックの前記非圧縮バージョンが前記メモリに存在しないという判定に応じて、前記可変レート圧縮テクスチャブロックを展開するように構成されている、請求項３に記載の装置。
【請求項５】
前記第２のシェーダは、前記可変レート圧縮テクスチャブロックの展開に先立ち、前記可変レート圧縮テクスチャブロックを前記メモリから受け取るように構成されている、請求項３に記載の装置。
【請求項６】
前記可変レート圧縮テクスチャブロックの展開は、展開プログラムを実行する前記第２のシェーダによって行われる、請求項１に記載の装置。
【請求項７】
前記メモリは、オフチップのシステムメモリから取り出されたデータを保存するように構成されたオンチップメモリを含む、請求項２に記載の装置。
【請求項８】
前記可変レート圧縮テクスチャブロックの非圧縮バージョンの仮想アドレス空間を、前記可変レート圧縮テクスチャブロックのアドレス空間にマッピングするテーブルをさらに含む、請求項２に記載の装置。
【請求項９】
前記第１のシェーダは、
前記メモリから前記テクスチャブロックを要求することに先立ち、対応するテクスチャの前記非圧縮バージョン内の前記テクスチャブロックの前記非圧縮バージョンの仮想アドレスを計算し、
前記テクスチャブロックの前記非圧縮バージョンの仮想アドレスを前記要求とともにメモリに伝える、
ように構成されている、請求項８に記載の装置。
【請求項１０】
前記テクスチャブロックの前記非圧縮バージョンが前記オンチップのメモリに存在しないという判定に応じて、前記テクスチャブロックの前記非圧縮バージョンのために、前記オンチップのメモリにストレージが割り当てられる、請求項７に記載の装置。
【請求項１１】
前記複数のシェーダは、テクスチャデータを手続き的に生成するように構成されたシェーダを含む、請求項１に記載の装置。
【請求項１２】
テクスチャデータを展開するための方法であって、
第１のシェーダがテクスチャブロックを要求するステップと、
第２のシェーダが、前記第１のシェーダが使用するための可変レート圧縮テクスチャブロックを展開するステップと、を含む、
方法。
【請求項１３】
前記第１のシェーダによる、メモリからの前記可変レートテクスチャブロックの非圧縮バージョンに対する要求に応じて、前記第２のシェーダが、前記可変レート圧縮テクスチャブロックを展開するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記可変レート圧縮テクスチャブロックの前記非圧縮バージョンが前記メモリに存在しないという判定に応じて、前記第２のシェーダが、前記可変レート圧縮テクスチャブロックを展開するステップをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記可変レート圧縮テクスチャブロックの展開に先立ち、前記第２のシェーダが、前記可変レート圧縮テクスチャブロックを前記メモリから受け取るステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記第２のシェーダが、展開プログラムを用いて前記可変レート圧縮テクスチャブロックを展開するステップをさらに含む、請求項１２に記載の方法。
【請求項１７】
前記メモリは、オフチップのシステムメモリから取り出されたデータを保存するように構成されたオンチップメモリを含む、請求項１３に記載の方法。
【請求項１８】
テクスチャデータを展開するプログラム命令を含むコンピュータ可読記憶媒体であって、前記プログラム命令は、実行されると、
第１のシェーダがテクスチャブロックを要求することを可能にし、
第２のシェーダが、前記第１のシェーダが使用するための可変レート圧縮テクスチャブロックを展開することを可能にする、ように動作可能である、
コンピュータ可読記憶媒体。
【請求項１９】
前記プログラム命令は、前記第１のシェーダによる、メモリからの前記可変レート圧縮テクスチャブロックの非圧縮バージョンに対する要求に応じて、前記第２のシェーダが前記可変レート圧縮テクスチャブロックを展開する、ように動作可能である、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記プログラム命令は、前記可変レート圧縮テクスチャブロックの前記非圧縮バージョンが前記メモリに存在しないという判定に応じて、前記第２のシェーダが、前記可変レート圧縮テクスチャブロックを展開する、ように動作可能である、請求項１９に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、グラフィックス処理、特にテクスチャ展開の処理ユニット、方法及び媒体に関する。
【背景技術】
【０００２】
コンピュータグラフィックスの処理システムは、通常、グラフィックスプロセッシングユニット（ＧＰＵ）が処理の大部分を行い、大量のデータを処理する。ＧＰＵは、複雑な集積回路であり、特に、グラフィックス処理のタスクを行うように構成されている。例えば、ＧＰＵは、ビデオゲームアプリケーションなどのエンドユーザが必要とするグラフィックス処理タスクを実行してもよい。ＧＰＵは、個別の装置であってもよいし、例えば中央処理装置（ＣＰＵ）などの他のプロセッサと同じ装置に含まれてもよい。
【０００３】
ＧＰＵは、レンダリングとして知られているプロセスで、画像の構成要素の高水準記述から画像を構成するピクセルを生成する。ＧＰＵは、通常、ピクセル、テクスチャ及び幾何データを処理するために演算素子を使用することによる継続レンダリングの概念を利用する。この演算素子は、ラスタライザ、セットアップエンジン、カラーブレンダ、隠面消去及びテクスチャマッピングの機能を実行してもよい。こうした演算素子は、シェーダ、シェーダプロセッサ、シェーダアレイ、シェーダパイプ、シェーダパイプアレイ、シェーダパイプライン又はシェーダエンジンと呼ばれることが多く、コンピュータグラフィックスにおける「シェーダ」という用語は、グラフィックスリソースによって主にレンダリング効果を果たすために使用されるソフトウェア命令のセット又はプログラムを意味する。「シェーダ」は、ソフトウェア命令を実行するために使用する実際のハードウェアの構成要素又はプロセッサを意味することもある。シェーダプロセッサ又はプログラムは、データを読み取り、レンダリングし、当該データのあらゆるタイプの処理を行い得る。また、統合シェーダを備えたＧＰＵは、ピクセル、頂点、プリミティブ及び一般化の演算処理まで多くのタイプのシェーダ処理を同時にサポートする。
【０００４】
複雑なグラフィックスのシーン生成処理の多くは、テクスチャデータを伴う。テクスチャは、色、透明度、ルックアップテーブル又は他のデータなどの様々なタイプのデータであってもよい。いくつかの実施形態では、テクスチャは、視覚的な詳細を追加する幾何学形状に描かれる、デジタル化された画像であってよい。テクスチャの使用による大量の詳細は、グラフィカルモデルが目的の画像をつくるためにレンダリングされるに従い、グライフィカルモデルの表面にマッピングされてもよい。テクスチャマッピングは、オブジェクトの表面に現実的な外観を与えることを目的としている。テクスチャは、通常マップ又はバンプマップの形式で、色又は鏡面反射若しくは微細表面の詳細などの表面のプロパティを含む多くのプロパティを指定してもよい。テクスチャは、画像データ、カラー若しくは透明のデータ、粗さ／滑らかさのデータ又は反射率データなどであることもある。「テクセル」は、「ピクセル」がピクチャエレメントであるのと同様に、テクスチャエレメントである。「テクセル」と「ピクセル」という用語は、本明細書では相互に置き換え可能に使用され得る。
【０００５】
３Ｄコンピュータグラフィックスでは、オブジェクトの表面詳細は、一般的にテクスチャを用いて付加される。例えば、レンガの２Ｄビットマップイメージを、建物の３Ｄモデルを表すポリゴンのセットに対してテクスチャマッピングを用いて適用して、レンガで作られている外観を、オブジェクトに３Ｄレンダリングする。現実的なコンピュータグラフィックスを提供するには、通常多くの高品質で詳細なテクスチャを必要とする。テクスチャを用いると、大量の記憶域と帯域幅を消費する場合があり、その結果、記憶域と帯域幅の利用を減らすために、テクスチャが圧縮され得る。
【０００６】
従って、テクスチャ圧縮は、一般的にグラフィックスハードウェア、特に３Ｄグラフィックスハードウェアの機能として広く受け入れられるようになった。テクスチャ圧縮は、オリジナルテクスチャの品質を可能な限り保持しながら、グラフィックスシステムの記憶域と帯域幅のコストを減らすことを目的としている。本明細書で説明する圧縮と展開の方法は、画像データ、ピクチャデータ、透明度情報、滑らかさ若しくは粗さのデータ又は他の類似の構造化データを含む様々なタイプのテクスチャ情報を圧縮するために使用可能である。このように、テクスチャという用語は、本明細書では、ＧＰＵの一部として圧縮又は展開されているデータを意味するために広く使用する。
【０００７】
従来、テクスチャを圧縮するために、固定レート圧縮スキームが使用されており、可変レートスキームに比べていくつかの欠点の影響を受け得る。可変レート圧縮は、固定レート圧縮と異なり、より柔軟性が高く、必要に応じて品質に対する調整が可能でありうる。例えば、可変レート圧縮は、無損失圧縮を達成するために設定してもよい。いくつかの例では、可変レート圧縮スキームを使用することで、従来の固定レート圧縮スキームよりも優れた圧縮を提供でき得る。ＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）などの可変レート圧縮スキームは、非常に複雑であることと実装コストのために、オンザフライで展開することが望ましい場合には、通常、テクスチャ圧縮には使用されない。従って、この技術分野では、可変レート圧縮スキームの低コストのオンザフライの展開を可能にする方法及びメカニズムに対するニーズがある。
【０００８】
上記を鑑みて、圧縮されたテクスチャのリアルタイムの展開を行うための改良された処理ユニット、方法及び媒体が望まれている。
【発明の概要】
【課題を解決するための手段】
【０００９】
テクスチャデータを展開するための処理装置、方法及び媒体の様々な実施形態が考えられている。ある実施形態では、複数のシェーダのうち第１のシェーダは、ディスプレイデバイス又は更なる処理に用いられるデータを生成するために、テクスチャのブロックを必要とし得る。この第１のシェーダは、テクスチャの非圧縮バージョン内のブロックの仮想アドレスを計算し、ブロックに対する要求と合わせて仮想アドレスをキャッシュメモリに伝えるように構成されてもよい。複数のシェーダのうち第２のシェーダは、ブロックの非圧縮バージョンがキャッシュに保存されていないという判定に応じて、展開シェーダとして開始し、そのブロックの非圧縮バージョンの仮想アドレスが展開シェーダに渡されてもよい。また、ブロックの非圧縮バージョンがキャッシュに保存されていないという判定に応じて、要求されたブロックに対してキャッシュラインが割り当てられてもよい。
【００１０】
第２のシェーダは、ブロックの圧縮バージョンをキャッシュから受け取るように構成されてもよい。キャッシュは、テクスチャの非圧縮バージョンの仮想アドレス空間を、テクスチャの圧縮バージョンのアドレス空間にマッピングするテーブルを利用するように構成されてもよい。キャッシュ及び／又は第２のシェーダは、ブロックの圧縮バージョンの場所とサイズとを、テーブルから決定するように構成されてもよい。このテーブルは、テクスチャの各ブロックの圧縮バージョンのＤＣ係数値などの追加情報を含んでもよい。
【００１１】
第２のシェーダは、キャッシュからブロックの圧縮バージョンを受け取ると、ブロックの圧縮バージョンを展開し、ブロックの展開バージョンをキャッシュに書き込むように構成されてもよい。第１のシェーダは、ブロックの展開バージョンがキャッシュに書き込まれた後に、ブロックの展開バージョンをキャッシュから受け取るように構成されてもよい。次いで、第１のシェーダは、ブロックの展開バージョンを、表示用にレンダリングされた表面に適用するように処理するように構成されてもよい。
【００１２】
本明細書で説明するアプローチの以下の詳細な説明によれば、上記並びに他の機能及び特徴が当業者にとって明らかになるであろう。
【００１３】
以下の添付の書面と合わせて以下の説明を参照することで、システムと、方法と、機構との上記及び更なる利点の理解が深まるであろう。
【図面の簡単な説明】
【００１４】
【図１】本発明のコンピュータグラフィックスシステムの一実施形態を示す図である。
【図２】本発明の１つ以上の実施形態によるＧＰＵのブロック図である。
【図３】本発明のグラフィックスプロセッシングシステムの一実施形態を示すブロック図である。
【図４Ａ】本発明のデータキャッシュの一実施形態を示すブロック図である。
【図４Ｂ】本発明の１つ以上の実施形態によるブロックマッピングテーブルを示す図である。
【図５】本発明の８×８ブロックのテクセルに対する仮想アドレス空間の一実施形態を示す図である。
【図６】本発明のデータの一部の一実施形態を示すブロック図である。
【図７】本発明のテクスチャの圧縮ブロックを展開する方法の一実施形態を示す、一般化されたフロー図である。
【００１５】
以下の説明では、本明細書で示す方法及び機構を完全に理解してもらうために、多くの特定の詳細が規定されている。しかし、当業者は、こうした特定の詳細なしに様々な実施形態が実施可能であることを理解するであろう。いくつかの事例では、本明細書で説明するアプローチを曖昧にしないように、良く知られている構造、構成要素、信号、コンピュータプログラムの命令及び技術については詳細に説明していない。図を単純且つ明確にするために、図示されている要素は必ずしも縮尺に合わせて記載されていない。例えば、いくつかの要素の寸法は、他の要素と比較して拡張され得る。
【００１６】
本明細書には、「一実施形態（“ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ”）」又は「ある実施形態（“ａｎ  ｅｍｂｏｄｉｍｅｎｔ”）」という言葉が含まれる。「一実施形態では（“ｉｎ  ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ”）」又は「ある実施形態では（“ｉｎ  ａｎ  ｅｍｂｏｄｉｍｅｎｔ”）」という表現は、必ずしも同じ実施形態について言及しているわけではない。特定の機能、構造又は特徴は、本開示と一貫性のある適切な方式で組み合わせられてもよい。
【００１７】
用語について。以下の段落では、本開示（添付の請求項を含む）における用語の定義及び／又は文脈を示す。
【００１８】
「備える、含む（“Ｃｏｍｐｒｉｓｉｎｇ”）」。この用語は非限定的である。添付の請求項で使用されているように、この用語は、構造又はステップを追加することを排除しない。次のような請求項、「複数のシェーダを含むＧＰＵ（“Ａ  ＧＰＵ  ｃｏｍｐｒｉｓｉｎｇ  ａ  ｐｌｕｒａｌｉｔｙ  ｏｆ  ｓｈａｄｅｒｓ  ・・・．”）」を考えてみる。この請求項では、ＧＰＵが構成要素（例、テクスチャ・ユニット、入出力回路など）を追加で含むことを排除しない。
【００１９】
「構成されている（“Ｃｏｎｆｉｇｕｒｅｄ  Ｔｏ”）」。様々なユニット、回路又はその他の構成要素が、単一又は複数のタスクを行うように「構成されている（“ｃｏｎｆｉｇｕｒｅｄ  ｔｏ”）」ものとして説明又は特許請求される。こうした文脈では、「構成されている（“ｃｏｎｆｉｇｕｒｅｄ  ｔｏ”）」は、ユニット／回路／構成要素が、こうした単一又は複数のタスクをオペレーション中に実行する構造（例えば、回路）を含むことを示すことによって、構造を意味するために使用される。このように、ユニット／回路／構成要素は、指定されたユニット／回路／構成要素がオペレーション中ではない場合（例えば、オン状態ではない）であっても、タスクを行うように構成されているということができる。「構成されている（“ｃｏｎｆｉｇｕｒｅｄ  ｔｏ”）」という表現と合わせて使用可能なユニット／回路／構成要素には、例えば、回路などのハードウェア、オペレーションを実行するために実行可能なプログラム命令を保存するメモリが含まれる。ユニット／回路／構成要素が１つ以上のタスクを行うように構成されている（“ｃｏｎｆｉｇｕｒｅｄ  ｔｏ”）と言及することは、そのユニット／回路／構成要素に対して３５  Ｕ．Ｓ．Ｃ．  セクション  １１４、第６項を行使することを明示的に意図していない。さらに、「構成されている（“ｃｏｎｆｉｇｕｒｅｄ  ｔｏ”）」には、ソフトウェア及び／又はファームウェア（例えば、ソフトウェアを実行するＦＰＧＡまたは汎用プロセッサ）によって操作され、対象のタスクを行うことができるような方法で動作する一般的な構造（例えば、汎用回路）を含み得る。「構成されている（“ｃｏｎｆｉｇｕｒｅｄ  ｔｏ”）」は、１つ以上のタスクを実行又は遂行するために適合された素子（例えば、集積回路）を製造する製造工程（例えば、半導体製造施設）を適合させることも含み得る。
【００２０】
「第１の（“Ｆｉｒｓｔ”）」、「第２の（“Ｓｅｃｏｎｄ”）」など。本明細書で使用されているように、こうした表現は、後に続く名詞に対するラベルとして使用され、いかなるタイプの順序（例えば、空間的、時間的、論理的など）を示唆するものではない。例えば、８つの処理要素又はコアを持つプロセッサでは、第１（“ｆｉｒｓｔ”）及び第２（“ｓｅｃｏｎｄ”）の処理要素は、８つの処理要素のうち任意の２つの処理要素を言及するために使用可能である。つまり、「第１」及び「第２」の処理要素は、論理処理要素の０及び１に制限されるものではない。
【００２１】
図１を参照すると、コンピュータグラフィックスシステムの一実施形態のブロック図が示されている。コンピュータグラフィックスシステム１００は、コンピューティングシステム１０２とディスプレイデバイス１１４とを含む。コンピューティングシステム１０２は、グラフィックスデータを処理するためのＧＰＵ（グラフィックスプロセッシングユニット）１０４を含む。いくつかの実施形態では、ＧＰＵ１０４は、コンピューティングシステム１０２内のグラフィックスカードに設けられてもよい。ＧＰＵ１０４は、ディスプレイデバイス１１４に表示するためのフレームの各ピクセルに対して色及び輝度の値を生成する、グラフィックスデータを処理してもよい。ＧＰＵ１０４は、ピクセル操作を行うための１つ以上の処理コア及び／又はシェーダのアレイを含んでもよい。
【００２２】
コンピューティングシステム１０２は、ＣＰＵ（図示せず）で実行可能なソフトウェアプログラムアプリケーション１０８と、ＡＰＩ（アプリケーションプログラミングインタフェース）１１０と、ドライバ１１２とを含んでもよい。ＡＰＩ１１０は、ＯｐｅｎＧＬ（登録商標）又はＤｉｒｅｃｔＸ（登録商標）などの業界標準の仕様に準拠してもよい。ＡＰＩ１１０は、ドライバ１１２と通信してもよい。ドライバ１１２は、ＡＰＩ１１０から受信した標準コードを、ＧＰＵ１０４が理解するネイティブ命令フォーマットに変換してもよい。ＧＰＵ１０４は、ドライバ１１２から受信した命令を実行してもよい。
【００２３】
テクスチャは、システムメモリ（図示せず）、又はコンピューティングシステム１０２の他の記憶デバイスからＧＰＵ１０４に転送されてもよい。一実施形態では、ＪＰＥＧ圧縮を用いて圧縮されてもよい。他の実施形態では、テクスチャを圧縮するために、他のタイプの可変レート圧縮を使用してもよい。本明細書の残りの部分では、様々な実施形態を説明するために、ＪＰＥＧタイプのエンコーディング例を使用する。しかし、これは例示目的に限ったものであり、本明細書で説明する方法及び機構と合わせて他のタイプの可変レート圧縮を使用してもよい。
【００２４】
ドライバ１１２は、タイリングプロセスの一部として、圧縮されたテクスチャを再フォーマットしてもよい。この再フォーマットは、ＪＰＥＧ圧縮のテクスチャを、ハードウェア内部のＪＰＥＧ形式にトランスコーディングすることを必要とする場合がある。他の実施形態では、ＪＰＥＧ圧縮のテクスチャは、他の形式にトランスコーディングされてもよい。ハードウェア内部のＪＰＥＧ形式には、展開プロセスを行い易くするための追加情報を含んでもよい。例えば、ハードウェア内部のＪＰＥＧ形式には、ＪＰＥＧ圧縮のテクスチャの様々なブロックの場所及びサイズについての情報を有するテーブルが含まれ得る。このテーブルは、ＪＰＥＧ圧縮のテクスチャの各８×８ブロックのＤＣ係数についての情報を含んでもよい。さらに、このテーブルは、ハフマン符号、量子化テーブル及び圧縮テクスチャの展開を行い易くするための他の情報を含んでもよい。ドライバ１１２は、コンピューティングシステム１０２が利用する圧縮テクスチャごとに、仮想アドレス空間を割り当ててもよい。各仮想アドレス空間のサイズは、圧縮されていないテクスチャのサイズに相当するものであってもよい。
【００２５】
コンピューティングシステム１０２は、通常、ＣＰＵ、バス、メモリ、周辺装置など図１に示されていない様々な他のデバイス／構成要素を有する。例えば、コンピューティングシステム１０２は、ディスプレイデバイス１１４以外に、キーボード、プリンタ及びマウスなどの他のデバイスに接続され得るＩ／Ｏインターフェースを含み得る。いくつかの実施形態では、コンピューティングシステム１０２は、複数のＧＰＵを含んでもよい。
【００２６】
他の実施形態では、ＧＰＵ１０４などのプロセッサは、ソフトウェアで定義されてもよい。このソフトウェア命令は、コンピュータで読み取り可能な記憶媒体に保存されてもよく、コンピューティングデバイス上で実行されると、プロセッサを定義し得る。さらなる実施形態では、プロセッサはＧＰＵ、ＣＰＵ、ビデオ・プロセッシング・ユニット（ＶＰＵ）、コプロセッサ及び／又はテクスチャデータを処理するように構成された他のタイプのプロセッサを含んでもよい。様々な実施形態では、ＧＰＵとＣＰＵとは別個の集積回路デバイス／パッケージであってもよい。様々な実施形態では、ＧＰＵとＣＰＵとは、一つの集積回路又はパッケージに含まれてもよい。
【００２７】
図２を参照すると、ＧＰＵ２００の一実施形態のブロック図が示されている。ＧＰＵ２００は、グラフィックス処理関連のタスク（例えば、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダなどを使用するタスク）及び一般的なコンピューティングタスク（例えば、数学的アルゴリズム、物理シミュレーションなど）を行うために利用され得る。図の例では、ＧＰＵ２００は、シェーダプロセッサアレイ２１０と、コマンドプロセッサ２１２と、テクスチャメモリ２２０と、ダイレクトメモリアクセス（ＤＭＡ）に対応するように構成され得るメモリコントローラ２２２とを含む。図２のＧＰＵ２００の実施形態は、例示目的に限ったものであり、当業者は多くの代替実施形態が可能であることを理解するであろう。こうした代替実施形態のすべてが考慮される。また、ＧＰＵ２００には、図２に示されていない他の多くの構成要素を含み得ることに留意されたい。
【００２８】
図示されている実施形態では、シェーダプロセッサアレイ２１０は、並列で実行可能な複数のプロセッシングユニットを含んでもよい。コマンドプロセッサ２１２は、コマンドを発行し、シェーダプロセッサアレイ２１０の個々のシェーダプロセッサに対してタスクを割り当ててもよい。いくつかの実施形態では、コマンドプロセッサ２１２は、受信した作業負荷をスレッドに分割し、そのスレッドをシェーダプロセッサアレイのプロセッシングユニット内で分散するように構成されたディスパッチプロセッサ（図示せず）を含んでもよい。シェーダプロセッサアレイ２１０は、テクスチャデータの処理と、３次元テクスチャオブジェクトを２次元画像に変換するためのレンダリングアルゴリズムの実行とを含む様々なタイプの機能を行うように構成されてもよい。上記のように、シェーダプロセッサアレイ２１０は、複数のシェーダプロセッサを含んでもよく、複数のシェーダプロセッサは、頂点及び他のテクスチャデータに対して、幅広い数学的演算及び論理演算を用いるアルゴリズムを実行してもよい。
【００２９】
いくつかの実施形態では、ＧＰＵ２００は、データを一時的に保存するために、オンチップのメモリ又はオフチップのメモリを利用するように構成されてもよい。こうしたメモリは、本明細書では「キャッシュ（“ｃａｃｈｅｓ”）」と呼ぶことがあるが、こうした用語を使用することは、こうしたメモリに対して必ずしも特定の機構、構造又はポリシを必要とするわけではないことに留意されたい。例えば、こうしたメモリは、セット連想機構及び置換ポリシなどの、ＣＰＵ（中央演算処理装置）のキャッシュに関連する機構及びポリシを利用することがあるが、任意の望ましい機構及び／又は記憶ポリシを利用してもよい。様々な実施形態では、テクスチャデータを保存するために、テクスチャメモリ２２０が使用される。こうした実施形態では、テクスチャメモリ２２０は、頻繁に使用されるテクスチャデータなどの一部のテクスチャデータに対して、テクスチャデータがシステムメモリ２２６やローカルメモリ２３０のみに保存される場合に可能な速度よりも高速なアクセスを提供してもよい。システムメモリ２２６は、ＧＰＵ２００とＣＰＵ（中央演算処理装置、図示せず）の両方によってアクセス可能なメモリを表す場合があり、一方、ローカルメモリは、ＧＰＵ２００によってのみ直接アクセス可能なメモリを表し得る。様々な実施形態では、テクスチャメモリ２２０は、キャッシュ分野では一般的に知られているように、階層構造の複数のレベルを含み得る。テクスチャキャッシュシステム２２０に含まれるこうしたキャッシュレベルの数は、実施形態によって異なる。テクスチャメモリ２２０は、スタティックメモリ（例、ＳＲＡＭ）、ダイナミックメモリ（例、ＤＲＡＭ）を用いたスタック型メモリ又は他の方法を使用して実装してもよい。テクスチャメモリ２２０は、キャッシングロジックも含んでもよい。このキャッシングロジックは、データをテクスチャメモリ２２０にキャッシュし、システムメモリ２２６に対するキャッシュシステム２２０の相対的なレーテンシ及び／又は帯域幅を考慮するキャッシュ管理ポリシを実行するように構成されてもよい。
【００３０】
ＧＰＵ２００は、メモリコントローラ２２２を含んでもよい。メモリコントローラ２２２は、システムメモリ２２６及びローカルメモリ２３０に接続されてもよい。メモリコントローラ２２２は、システムメモリ２２６内の圧縮テクスチャ２２８などのデータにアクセスしてもよい。圧縮テクスチャ２２８は、ＪＰＥＧなどの様々な可変レート圧縮技術で圧縮し得る複数のテクスチャを含んでもよい。圧縮テクスチャ２２８又は圧縮テクスチャ２２８内の各テクスチャの一部は、最初に展開せずに、テクスチャメモリ２２０及びＧＰＵ２００のシェーダプロセッサアレイ２１０に（メモリコントローラ経由で）転送されてもよい。ホストドライバ２４０は、コマンドとデータとを、システムメモリ２２６を介してＧＰＵ２００に転送してもよい。ローカルメモリ２３０は、頂点データと、ＧＰＵが使用する他のデータとを保存するために利用されてもよく、ＧＰＵ２００は、フレームデータをローカルメモリ２３０に書き込んでもよい。
【００３１】
図３を参照すると、グラフィックスプロセッシングシステムの一実施形態のブロック図が示されている。グラフィックスプロセッシングシステム３００には、シェーダコントローラ３１０を含む場合があり、シェーダコントローラ３１０は、特定のグラフィックス処理タスクを、シェーダアレイ３２０内の各シェーダコンピューティングユニットに割り当ててもよい。シェーダコントローラ３１０は、グラフィックス処理タスク及び一般のコンピューティングタスクに対して前処理を行う場合があり、こうしたタスクをシェーダアレイ３２０に発行する。シェーダコントローラ３１０は、シェーダのどの処理要素が新たな作業負荷の処理に利用可能であるかを特定し、シェーダアレイ３２０の利用可能な処理要素に新たな作業負荷を送信してもよい。シェーダコントローラ３１０は、どの作業負荷がシェーダアレイの異なる処理要素によって処理されているかを追跡してもよく、複数のスレッドを並列で実行できるようにする。
【００３２】
シェーダアレイ３２０は、テクスチャコンシューミングシェーダ３２１及び展開シェーダ３２２を含んでもよく、これらはシェーダアレイ３２０に含まれ得る、任意の数及びタイプのシェーダプロセッサを表す。様々な実施形態では、シェーダアレイ３２０は、テクスチャデータを手続き的に生成するように構成され得る追加のシェーダプロセッサを含んでもよい。一般的に、手続き的なテクスチャ生成とは、テクスチャをアルゴリズム的に生成するプロセスを意味することが多い。様々な実施形態では、この手続き的なテクスチャ生成は、事前というよりはむしろ動的に行われる。シェーダアレイ３２０は、他のタスクの中で、特にテクスチャマッピングと、表示デバイス用に画像データを生成するためとに使用し得る。こうしたオペレーションの一部として、テクスチャコンシューミングシェーダ３２１は、テクスチャ要求をテクスチャフィルタ３３０に対して発行する。テクスチャ要求は、テクスチャの１つ以上の部分（例えば、ブロック、テクセル）に対するものであってもよい。テクスチャフィルタ３３０は、要求されたテクスチャに対する仮想アドレスを生成し、要求と合わせてその仮想アドレスをキャッシュ３４０に伝えてもよい。キャッシュ３４０は、ピクセルに関連したテクセルデータ形式でテクスチャを保存してもよい。いくつかのテクスチャは圧縮され、いくつかのテクスチャは復元され得る。
【００３３】
テクスチャフィルタ３３０から仮想アドレスを受信した後、キャッシュ３４０は、要求されたテクスチャがキャッシュ３４０に保存されているか否かを調べるために、既知の仮想アドレス範囲の全てに対してアドレスチェックを行い得る。要求されたテクスチャの非圧縮バージョンがキャッシュ３４０に保存されている場合には、キャッシュ３４０は、そのテクスチャの非圧縮バージョンをテクスチャフィルタ３３０に戻してもよい。テクスチャの非圧縮バージョンがキャッシュ３４０に保存されていない場合には、この試みられた要求はキャッシュミスという結果になることがある。キャッシュミスに応じて、展開シェーダ３２２は、そのテクスチャの圧縮バージョンを展開する目的で開始してもよい。様々な実施形態では、シェーダアレイ３２０は、キャッシュ３４０から要求を受信してもよいし、展開シェーダを開始してもよい。また、キャッシュミスに応じて、テクスチャコンシューミングシェーダ３２１は、テクスチャの仮想アドレスを展開シェーダ３２２に渡してもよい。展開シェーダプログラムに対するリソースは、シェーダ開始のレーテンシを減らし、リソース管理を単純化するために展開シェーダ３２２に事前に割り当ててもよい。この要求は、要求されているブロックの仮想アドレスに基づいて、シェーダアレイ３２０の特定のシェーダプロセッサにルーティングされてもよい。
【００３４】
キャッシュ３４０は、テクスチャの圧縮バージョンについて照会される場合があり、そのテクスチャの圧縮バージョンがキャッシュ３４０に保存されていれば、そのテクスチャの圧縮バージョンは、展開シェーダ３２２に戻されてもよい。テクスチャの圧縮バージョンがキャッシュ３４０に保存されていない場合には、そのテクスチャの圧縮バージョンは、システムメモリ又は他の場所から取り出されてもよい。展開シェーダ３２２は、展開オペレーションを行い易くするために、追加のテーブル、テクスチャ及び／又は定数を受信してもよい。展開シェーダ３２２は、要求されたテクスチャを展開するために必要ないくつかの追加の圧縮データを展開してもよい。ＪＰＥＧ圧縮のテクスチャの場合には、テクスチャは、オリジナルのコードから新しい符号化スキームにトランスコードされ、この新しい符号化スキームは、展開の効率をさらに高めるように設計されてもよい。展開シェーダ３２２が、テクスチャの圧縮バージョンを受信して展開した後に、テクスチャコンシューミングシェーダ３２１は、適切なレンダリングの計算のために、そのテクスチャの展開バージョンを利用してもよい。このプロセスは、複数のテクスチャ及び／又はテクスチャの一部に対して継続してもよい。他の実施形態では、テクスチャフィルタ３３０によって行われると記載されている機能は、シェーダアレイ３２０によって行われてもよく、シェーダアレイ３２０はキャッシュ３４０に直接接続されてもよい。
【００３５】
キャッシュ３４０は、テーブルを利用して、テクスチャの圧縮バージョンに対する所定の仮想アドレスマップがキャッシュ３４０内で保存されているアドレスを決定してもよい。様々な実施形態では、このテーブル（またはその一部）は、キャッシュ３４０又は他の場所に保存されてもよい。ある実施形態では、このテーブルは、仮想アドレスを、テクスチャの圧縮バージョンの他のアドレスにマッピングしてもよい。仮想アドレスがマッピングされたアドレスは、それ自体が仮想アドレスである場合があるし、仮想アドレスでない場合もある。利用されているアドレッシングスキームのタイプについて多くのオプションが可能であり、考えられる。このテーブルは、テクスチャの圧縮バージョンの各ブロックに対するオフセットを保存する場合があり、このオフセットは、テクスチャの圧縮バージョンの始まりからブロックまでの場所を与える。様々な実施形態では、このテーブルは、１つ以上の圧縮テクスチャのブロックに対するランダムアクセスを行い易くし得る。キャッシュ３４０のキャッシュロジックは、ブロックの圧縮バージョンに対する要求に応じて、あるブロックのアドレスを決定し得る。キャッシュロジックは、このテーブルを使用して、キャッシュのページ又はフェッチユニット内で望ましいブロックが保存されているオフセットを決定する。シェーダアレイ３２０の複数のシェーダも、このテーブルを使用して、テクスチャの要求されたブロックのオフセットを決定し得る。様々な実施形態では、キャッシュ３４０は、複数のテクスチャのマッピング情報を有する複数のテーブルを使用してもよい。
【００３６】
テクスチャデータの処理後、シェーダアレイ３２０は、その画像データをレンダリングユニット３５０に伝えてもよい。レンダリングユニット３５０は、画像フレームの各ピクセルに対する固有の色属性を定義する特定の数値を割り当ててもよい。この数値は、フレームバッファ３６０に渡され、ディスプレイデバイス３７０にレンダリングされる場合などの適切な場合に使用するためにフレームバッファ３６０に保存される場合がある。
【００３７】
次に続くオペレーションでは、テクスチャコンシューミングシェーダ３２１は、展開シェーダの機能を行うように構成されてもよく、展開シェーダ３２２は、テクスチャコンシューミングシェーダの機能を行うように構成されてもよい。シェーダアレイ３２０の各シェーダプロセッサは、現在のオペレーションの要件に応じて、様々な機能を行うように構成されてもよい。
【００３８】
様々な実施形態では、十分に活用されていないシェーダに展開タスクを割り当てるために、ロードバランシングを利用してもよい。また、展開シェーダが多くの演算ユニットで開始できるように、一部の空間を多くの演算ユニットのために予約してもよい。さらに、複数の展開要求が、単一のＳＩＭＤ（単一命令多重データ処理）に入れられてもよい。ＳＩＭＤベクトルは、１つのベクトルで複数のブロックの展開を行い易くする場合がある。ある実施形態では、４レーンにつき１ブロックで、１つのベクトルで１６ブロックを展開し得る。
【００３９】
様々な実施形態では、グラフィックスプロセッシングシステム３００は、テクスチャデータのオンザフライの手続き的生成を可能にし得る。第１のシェーダが、オンザフライのテクスチャデータを生成してもよく、第２のシェーダが、生成されたテクスチャデータをレンダリングオペレーションに利用してもよい。展開シェーダは、圧縮データにアクセスし、別のシェーダは、１つ以上のテーブルなどの追加のデータの展開に利用されてもよい。圧縮データの一部は、様々な圧縮技術を使用して圧縮されてもよい。様々な実施形態では、展開シェーダは、キャッシュからデータを要求してもよく、キャッシュミスに応じて、テクスチャデータを手続き的に生成するために別のシェーダが開始されてもよい。
【００４０】
図４Ａを参照すると、データキャッシュの一実施形態のブロック図が示されている。キャッシュ４１０は、キャッシュ４１０に保存可能な任意の数のテクスチャの一部を表す、テクスチャ４２０の一部とテクスチャ４３０の一部とを含み得る。テクスチャ４２０とテクスチャ４３０とは、圧縮されたテクスチャであってよい一方で、キャッシュ４１０に保存される複数のテクスチャは、圧縮テクスチャ及び非圧縮テクスチャが混在したものであってもよい。テクスチャ４２０は、ブロック４２２とブロック４２３とを含んでもよく、これらはテクスチャ４２０の任意の数のブロックを表す。テクスチャ４２０は、テクスチャ４２０の仮想アドレス空間を圧縮テクスチャ４２０のアドレス空間にマッピングするテーブル４２１を含んでもよい。テクスチャ４３０は、テクスチャ４２０と同様に編成されてもよい。他の実施形態では、テーブル４２１は、テクスチャ４２０とは別に保存されてもよい。
【００４１】
テクスチャコンシューミングシェーダが、キャッシュ４１０からテクスチャのブロックを要求し、その要求がキャッシュミスという結果になる場合には、キャッシュ４１０は、要求されたブロックに対してキャッシュラインを割り当ててもよい。キャッシュ４１０は、割り当てられたキャッシュラインのアドレスを、展開シェーダに伝えてもよい。展開シェーダが要求されたブロックに対応する圧縮ブロックの展開を完了すると、展開シェーダは、展開されたブロックをキャッシュライン４４０に書き込むように構成されてもよい。その上、展開シェーダは、展開されたブロックをキャッシュ４１０内の様々な場所に書き込んでもよい。展開シェーダが、展開したブロックをキャッシュライン４４０に書き込むことに応じて、テクスチャコンシューミングシェーダは、キャッシュ４１０から展開ブロックをフェッチするように構成されてもよい。オンザフライの圧縮ブロックの展開の結果としてのより大きなレーテンシに対応するために、対応するレーテンシ補償待ち行列を延長する必要があり得る。
【００４２】
ブロックの展開バージョンがキャッシュライン４４０に書き込まれると、キャッシュ４１０は、ブロックの圧縮バージョンとブロックの展開バージョンとを保存してもよい。様々な実施形態では、キャッシュ４１０は、両方のバージョンがキャッシュ４１０に保存されているという判定に応じて、ブロックの１つ以上のバージョンを破棄する保持ポリシを実行してもよい。ある実施形態では、ブロックの展開バージョンは、テクスチャコンシューミングシェーダによってフェッチされた後に破棄されてもよい。他の実施形態では、ブロックの展開バージョンは、キャッシュ４１０に書き込まれた後に破棄されてもよい。さらなる実施形態では、ブロックの圧縮バージョンと展開バージョンの両方が、キャッシュ４１０で長期間維持されてもよい。
【００４３】
テクスチャのブロックの非圧縮バージョンに対する要求に応じて、キャッシュ４１０は、非圧縮バージョンがキャッシュ４１０に保存されていないと判定してもよい。様々な実施形態では、こうした判定に応じて、キャッシュ４１０は、ブロックの圧縮バージョンを自動的に検索し得る。ブロックの圧縮バージョンがキャッシュ４１０に保存されている場合には、キャッシュ４１０はシェーダに通知してもよいし、他の処理ユニット及び／又はキャッシュ４１０は、ブロックの圧縮バージョンをシェーダ又は他の処理ユニットに伝えてもよい。
【００４４】
いくつかの実施形態では、非圧縮ブロックに対する要求についてのキャッシュミスに応じて、別個のソフトウェアスレッドが開始され、そのスレッドが展開シェーダを開始し得る。テクスチャコンシューミングシェーダは、ブロックの仮想アドレスを展開シェーダに伝え得る。様々な実施形態では、シェーダが展開タスクを終了すると、展開シェーダは、非圧縮ブロックをキャッシュに伝え得る。他の実施形態では、展開シェーダが展開オペレーションを終了すると、展開シェーダは、そのシェーダ出力をテクスチャコンシューミングシェーダに伝え得る。
【００４５】
図４Ｂを参照すると、ブロックマッピングテーブルの一実施形態のブロック図が示されている。テーブル４２１は、（図４Ａの）テクスチャ４２０の複数のブロックに対するマッピング情報を保存してもよい。様々な実施形態では、テーブル４２１は、図４Ｂに図示されているものに加えて、他のタイプの情報を用いて様々な方法で編成されてもよい。例えば、ある実施形態では、テーブル４２１は、テクスチャ４２０の各ブロックに対するＤＣ係数値を含んでもよい。
【００４６】
テーブル４２１は、テクスチャ４２０の仮想アドレス空間を、（図４Ａの）圧縮テクスチャ４２０の物理アドレス空間にマッピングしてもよい。展開シェーダ（図示せず）は、キャッシュ４１０から１つ以上のテクスチャ４２０のブロックをフェッチしてもよいし、受け取ってもよい。展開シェーダは、テーブル４２１から圧縮ブロックの場所及びサイズを決定してもよい。圧縮ブロックのサイズは、２つの隣接するブロック間の開始物理アドレスの差を計算することで求められてもよい。他の実施形態では、ブロックのサイズ及び／又は場所の情報を示すために、追加データが提供されてもよい。さらに、展開シェーダは、テーブル４２１から、各ブロックのＤＣ係数値などの追加情報を入手してもよい。
【００４７】
いくつかの実施形態では、テクスチャは、スーパーブロックに従って編成されてもよい。スーパーブロックは、１６個の８×８ブロックのセットであってもよく、これは３２×３２ピクセルのタイルであり、合計１０２４ピクセルである。テクスチャのインデックステーブルは、各スーパーブロックに対するテーブルエントリを含んでもよく、各テーブルエントリは、各スーパーブロックの開始アドレスを与えてもよい。ある実施形態では、このアドレスは、テクスチャ内のスーパーブロックの場所であってもよい。他の実施形態では、このアドレスは、テクスチャの開始からのオフセットであってもよい。各エントリは、スーパーブロックに属する最初の８×８のブロックの４ビットのインデックスを含んでもよい。いくつかの実施形態では、スーパーブロックは、キャッシュの２キロビット（Ｋｂ）の境界に整列されていない場合がある。各エントリは、１６ビットのマスクを含んでもよい。この１６ビットのマスクには、そのブロックが次の２Ｋｂのワードで始まっているか否かを示す、１ブロックあたり１ビットを含んでもよい。
【００４８】
いくつかの実施形態では、展開シェーダは、ルックアップ目的でインデックステーブルのエントリ数を計算するために、８×８のブロックの仮想アドレスを、３２×３２のスーパーブロックの仮想アドレスに変換してもよい。展開シェーダは、スーパーブロックに対応するインデックステーブルのエントリをルックアップしてもよい。インデックステーブルは、他のテクスチャと同じようにシェーダによって処理されてもよい。インデックステーブルのエントリは、キャッシュされ、処理されてもよい。
【００４９】
シェーダは、各インデックステーブルのエントリから、仮想アドレスとなり得る基底アドレスを取得してもよい。この基底アドレスは、圧縮スーパーブロックの最初のフェッチユニットであってもよい。シェーダは、展開を必要とする要求されたブロックを含むフェッチユニットのオフセットを取得してもよい。シェーダは、ブロックが圧縮されているか否かを、ブロックのアドレスに基づき計算してもよい。あるアドレス範囲は、非圧縮ブロックの仮想アドレスに対応してもよく、他のアドレス範囲は、圧縮ブロックの物理アドレスに対応してもよい。シェーダは、この異なるアドレス範囲を区別し得る。
【００５０】
図５を参照すると、テクセルの８×８ブロックに対する仮想アドレス空間の一実施形態を示すブロック図が示されている。各テクセルは、仮想アドレス空間５７０内の固有のアドレスにマッピングされ得る。ブロック５００の８×８の６４テクセルの全てに対して、テクセル１はアドレス５０１に、テクセル２はアドレス５０２に、などのようにマッピングされ得る。ブロック５００は、圧縮テクスチャ内のブロックであってよく、仮想アドレス空間５７０は、圧縮テクスチャのブロック５００に対して割り当てられてもよい。テクスチャは、ブロック５００に加えて複数のブロックを含んでもよい。仮想アドレス空間５７０は、テクスチャの複数のブロックの各テクセルに対して固有のアドレスを含んでもよい。
【００５１】
例示目的で、非圧縮テクセルは、３２ビット値（８ビット値の４セット）であると想定する。本明細書で説明する方法及び機構では、他のサイズの非圧縮テクセルを利用してもよい。例えば、２４ビット値の非圧縮テクセルは、同様に処理されてもよい。様々な実施形態では、テクスチャコンシューミングシェーダは、個々のテクセルに対する要求を生成してもよい。最初に、シェーダは、テクセルの仮想アドレスを計算してもよい。次に、テクセルに対応する仮想アドレスに対してキャッシュが照会される。
【００５２】
図６を参照すると、圧縮データの一実施形態のブロック図が示されている。データ部分６０５は、圧縮データのフェッチユニットであってもよく、データ部分６０５のサイズは、非圧縮ブロックのサイズに基づいていてもよい。ある実施形態では、フェッチユニットは２Ｋｂのサイズであってもよい。他の実施形態では、フェッチユニットは任意の様々なサイズであってもよい。複数の圧縮ブロックをフェッチユニットに入れてもよい。ある実施形態では、フェッチユニットに入れることができる最大ブロック数は１６であると考えられ得る。他の実施形態では、フェッチユニットに他の数のブロックを入れてもよい。ある種のキャッシュアクセススキームでは、ブロックのデータは、フェッチユニットの境界を超えないと考えてもよい。
【００５３】
ブロックは、ＪＰＥＧなどの圧縮フォーマットの最小復号可能単位であり得る。ＪＰＥＧでは、ブロックは８×８のピクセルのタイル（６４ピクセル）である。テクスチャが圧縮され、シェーダによって要求されたテクスチャのブロックを展開する必要がある場合には、そのブロックに対してキャッシュラインがキャッシュ内で割り当てられてもよい。ある実施形態では、キャッシュラインのサイズは、非圧縮ブロック（３２ビット×６４＝２Ｋｂ）全体を保存するために、２Ｋｂであってもよい。他の実施形態では、キャッシュラインのサイズは任意の様々なサイズであってもよい。
【００５４】
フェッチユニットが非圧縮ブロックを含む場合には、１つのブロックのみがそのフェッチユニットに適合し得る。圧縮ブロックを含むフェッチユニットでは、１７６ビットのヘッダを含み得る。このフェッチユニットは、１６ブロックの容量があると考えてもよい。このヘッダは、フェッチユニット内の圧縮ブロックの場所を示すために、１６の１１ビットオフセット値を含み得る。このオフセットは、ブロックの開始ビット位置を参照する。他の実施形態では、可変数のオフセット・インジケータが、ヘッダに存在し得る。
【００５５】
図６に示すように、データ部分６０５は、ヘッダ６１０及びブロック６１１〜６２６を含んでもよい。ブロック６１１〜６２６は、圧縮テクスチャの１６の異なるブロックであってもよい。ヘッダ６１０は、オフセット６３１〜６４６を含んでもよい。各オフセットは、データ部分６０５内の対応するブロックの位置に対応する１１ビットのオフセット値であってもよい。他の実施形態では、他のビットサイズのオフセット値を利用してもよい。オフセット６３１は、ブロック６１１の開始アドレスを表してもよく、オフセット６３２は、ブロック６１２の開始アドレスを表してもよい。いくつかの実施形態では、キャッシュからの不要なフェッチを減らすために、最後のブロックの最後のビットを示す追加のオフセットがあってもよい。
【００５６】
いくつかの実施形態では、テクスチャの８×８の圧縮ブロックを入れて、フェッチユニットの境界を越えてもよい。ブロックが２つのフェッチユニットを使用していることを示す、対応する情報をインデックステーブルに保存してもよく、展開シェーダは、フェッチユニットの境界を超えるブロックに対して１つのフェッチを生成する代わりに、２つのフェッチを生成してもよい。
【００５７】
図７を参照すると、テクスチャの圧縮ブロックを展開する方法の一実施形態が示されている。説明のために、本実施形態のステップは、順番に示されている。以下で説明する方法の様々な実施形態では、説明した１つ以上の要素は、同時に行われ、示された順序と異なる順序で行われ、又は完全に省略されてもよい。他の追加の要素が必要に応じて行われてもよい。
【００５８】
方法７００は、ブロック７０５で開始し、次にブロック７１０にて、複数のシェーダのうち第１のシェーダは、画像に対するレンダリングオペレーションの一部として、テクスチャのブロックに対する必要性を決定する。第１のシェーダは、テクスチャコンシューミングシェーダであってもよい。次に、第１のシェーダは、ブロックの仮想アドレスを計算してもよい（ブロック７１５）。第１のシェーダは、テクスチャの非圧縮バージョンに対応するテクスチャの非圧縮ビューを有することがあり、その仮想アドレスは、非圧縮ビュー内の要求されたブロックの位置に対応してもよい。ブロック７１５の後に、第１のシェーダは、キャッシュからブロックを要求し、その要求と合わせて仮想アドレスを伝えてもよい（ブロック７２０）。次に、キャッシュは、ブロックの非圧縮バージョンがキャッシュに保存されているか否かを判別してもよい（条件ブロック７２５）。ブロックの非圧縮バージョンがキャッシュに保存されている場合には、第１のシェーダは、キャッシュからブロックの非圧縮バージョンを受信し、そのブロックを処理してもよい（ブロック７７０）。
【００５９】
ブロックの非圧縮バージョンがキャッシュに保存されていない場合には、複数のシェーダのうち第２のシェーダは、展開シェーダとして開始してもよい（ブロック７３０）。シェーダが開始するレーテンシを減らし、且つ、リソース管理を単純化するために、展開シェーダのリソースを、１つ以上のシェーダプロセッサに事前に割り当ててもよい。また、要求されたブロックの仮想アドレスは、第１のシェーダから第２のシェーダに渡されてもよい。次に、要求されたブロックに対してキャッシュラインを割り当ててもよい（ブロック７３５）。次に、キャッシュは、ブロックの圧縮バージョンがキャッシュに保存されているか否かを判別してもよい（条件ブロック７４０）。様々な実施形態では、ブロックの圧縮バージョンに対する第２のシェーダによる要求に応じて、キャッシュがこの判別を行ってもよい。他の実施形態では、ブロックの非圧縮バージョンがキャッシュに保存されていないという判別に応じて、自動的にこの判別を行ってもよい（条件ブロック７２５）。
【００６０】
ブロックの圧縮バージョンがキャッシュに保存されている場合には（条件ブロック７４０）、キャッシュ及び／又は第２のシェーダは、ブロックの圧縮バージョンの場所及びサイズをテーブルから決定してもよい（ブロック７５０）。ブロックの圧縮バージョンがキャッシュに保存されていない場合には（条件ブロック７４０）、ブロックの圧縮バージョンをフェッチして（例、ローカル又はシステムのメモリから）、キャッシュに保存してもよい（ブロック７４５）。システムメモリからブロックの圧縮バージョンをフェッチすることは、圧縮されたテクスチャ全体又はそのテクスチャの一部をフェッチすることを必要とする。キャッシュは、テクスチャの非圧縮バージョンの仮想アドレス空間を、テクスチャの圧縮バージョンのアドレス空間にマッピングするテーブルを利用するように構成されてもよい。キャッシュ及び／又は第２のシェーダは、ブロックの場所及びサイズをテーブルから決定してもよい（ブロック７５０）。このテーブルは、テクスチャの各ブロックの圧縮バージョンのＤＣ係数値などの追加情報も含んでもよい。ブロック７５０の後に、ブロックの圧縮バージョンは、キャッシュから第２のシェーダに伝えられてもよい（ブロック７５５）。
【００６１】
他の実施形態では、ブロックの圧縮バージョンがキャッシュに存在しない場合には（条件ブロック７４０）、ステップ７４５，７５０，７５５は代替のステップと置き換えられてもよい。代替ステップでは、ブロックの圧縮バージョンをシステムメモリからフェッチし、直接第２のシェーダに提供してもよい。こうした代替ステップは、第２のシェーダが、キャッシュからブロックの圧縮バージョンを受け取るよりも効率的であり得る。さらなる実施形態では、ブロックの圧縮バージョンは、システムメモリからフェッチされ、キャッシュに書き込まれるとともに、直接第２のシェーダに提供され得る。
【００６２】
第２のシェーダがブロックの圧縮バージョンを受け取った後に（ブロック７５５）、第２のシェーダは、ブロックの圧縮バージョンを展開してもよい（ブロック７６０）。次に、ブロックの展開バージョンをキャッシュに書き込んでもよい（ブロック７６５）。その後、第１のシェーダは、ブロックの展開バージョンをキャッシュから受け取り、そのブロックを現在の画像に対するレンダリングオペレーションの一部として処理してもよい（ブロック７７０）。ブロック７７０の後に、この方法はブロック７７５で終了してもよい。方法７００は、複数のテクスチャからの複数のブロックに対して繰り返されてもよい。
【００６３】
実施形態の例では、機能と要素とを特定の組み合わせで説明したが、各機能または要素は、実施形態の例の他の機能及び要素なしで単独で使用可能であり、又は他の機能及び要素が有り若しくは無しの様々な組み合わせで利用可能である。本発明は、マシン、プロセッサ及び／又は不揮発性メモリデバイスと合わせて使用する、又は不揮発性デバイスによって任意の汎用コンピュータによって実行するためのマシンで読み取り可能な命令を有する非一時的なコンピュータ可読記憶媒体で有形に実施されたコンピュータプログラム又はファームウェアで実装されてもよい。このコンピュータ可読記憶媒体は、本明細書で説明した機能、方法及びオペレーションを可能にするために動作可能なプログラム命令を含み得る。適切なプロセッサとしては、例えば、汎用プロセッサ及び特殊用途のプロセッサの両方が含まれる。
【００６４】
上記の実施形態は、Ｖｅｒｉｌｏｇ又はＶＨＤＬなどのＨＤＬ（ハードウェア記述言語）を使用して設計されてもよい。ＨＤＬ設計は、電子システムの挙動をモデル化してもよく、この設計は合成され、最終的にはハードウェアデバイスに組み立てられてもよい。さらに、このＨＤＬ設計をコンピュータ製品に保存し、ハードウェア製造に先立ちコンピュータシステムにロードされてもよい。
【００６５】
本発明で使用され、又は本発明と合わせて使用され得るハードウェアの構成要素、プロセッサ又はマシンのタイプには、ＡＳＩＣ（特定用途向け集積回路）、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）、マイクロプロセッサ又は任意の集積回路が含まれてもよい。こうしたプロセッサは、処理されたＨＤＬ（ハードウェア記述言語）命令（こうした命令は、コンピュータ可読媒体に保存可能である）の結果を用いて製造工程を構成することによって製造されてもよい。こうした処理の結果は、マスクワークであってもよく、次に半導体製造工程で、本明細書で説明した方法及び機構の一態様を実装するプロセッサを製造するために使用される。
【００６６】
画像レンダリングの計算及びシェーダタスクを実施するために使用されるソフトウェア命令は、コンピュータで可読記憶媒体に保存されてもよい。コンピュータ可読記憶媒体は、マシン（例えば、コンピュータ）によって読み取り可能な形式（例えば、ソフトウェア、処理アプリケーション）で情報を保存するための任意の機構を含んでもよい。コンピュータ可読記憶媒体としては、以下に制限されるものではないが、磁気若しくは光学媒体（例えば、ディスク（固定若しくはリムーバブル））、テープ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、又は、Ｂｌｕ−Ｒａｙ）、ＲＡＭ（例えば、ＳＤＲＡＭ（同期式動的ＲＡＭ））、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３など）ＳＤＲＡＭ、低電力ＤＤＲ（ＬＰＤＤＲ２など）ＳＤＲＡＭ、ＲＤＲＡＭ（Ｒａｍｂｕｓ  ＤＲＡＭ）、ＳＲＡＭ（スタティックＲＡＭ）、ＲＯＭ、ＵＳＢインターフェースなどの周辺装置インターフェース経由でアクセス可能な不揮発メモリ（例えば、フラッシュメモリ）、ＭＥＭＳ（微小電気機械システム）、並びにネットワーク及び／又は無線リンクなどの通信媒体経由でアクセス可能な記憶媒体が挙げられる。
【００６７】
いくつかのアプローチの実施形態を示し、説明したが、多くの変更、修正又は改良を上記のアプローチに加えることが可能であることは当業者にとって明らかであろう。従って、変更、修正又は改良は、本明細書で説明する方法及び機構の範囲内であると考えられる。また、上記の実施形態は、実施の非制限的な例にすぎないことを強調する。
【図１】
2014520328.tif 000003
【図２】
2014520328.tif 000004
【図３】
2014520328.tif 000005
【図４Ａ】
2014520328.tif 000006
【図４Ｂ】
2014520328.tif 000007
【図５】
2014520328.tif 000008
【図６】
2014520328.tif 000009
【図７】
2014520328.tif 000010
【手続補正書】
【提出日】平成26年2月18日(2014.2.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のシェーダと、
第２のシェーダと、を含み、
前記第２のシェーダは、前記第１のシェーダで使用するための可変レート圧縮テクスチャブロックを展開するように構成されている、
装置。
【請求項２】
前記第２のシェーダは、前記第１のシェーダによる、前記可変レート圧縮テクスチャブロックに対応するテクスチャブロックに対する要求に応じて、前記可変レート圧縮テクスチャブロックを展開するように構成されている、請求項１に記載の装置。
【請求項３】
前記第１のシェーダによる、前記可変レート圧縮テクスチャブロックに対応する前記テクスチャブロックに対する要求は、前記可変レート圧縮テクスチャブロックの非圧縮バージョンに対するメモリへの要求である、請求項２に記載の装置。
【請求項４】
前記第２のシェーダは、前記可変レート圧縮テクスチャブロックの前記非圧縮バージョンが前記メモリに存在しないという判定に応じて、前記可変レート圧縮テクスチャブロックを展開するように構成されている、請求項３に記載の装置。
【請求項５】
前記メモリは、オフチップのシステムメモリから取り出されたデータを保存するように構成されたオンチップメモリを含む、請求項２に記載の装置。
【請求項６】
前記可変レート圧縮テクスチャブロックの非圧縮バージョンの仮想アドレス空間を、前記可変レート圧縮テクスチャブロックのアドレス空間にマッピングするテーブルをさらに含む、請求項２に記載の装置。
【請求項７】
前記第１のシェーダは、
前記メモリから前記テクスチャブロックを要求することに先立ち、対応するテクスチャの前記非圧縮バージョン内の前記テクスチャブロックの前記非圧縮バージョンの仮想アドレスを計算し、
前記テクスチャブロックの前記非圧縮バージョンの仮想アドレスを前記要求とともにメモリに伝える、
ように構成されている、請求項６に記載の装置。
【請求項８】
前記テクスチャブロックの前記非圧縮バージョンが前記オンチップのメモリに存在しないという判定に応じて、前記テクスチャブロックの前記非圧縮バージョンのために、前記オンチップのメモリにストレージが割り当てられる、請求項５に記載の装置。
【請求項９】
前記複数のシェーダは、テクスチャデータを手続き的に生成するように構成されたシェーダを含む、請求項１に記載の装置。
【請求項１０】
テクスチャデータを展開するための方法であって、
第１のシェーダがテクスチャブロックを要求するステップと、
第２のシェーダが、前記第１のシェーダが使用するための可変レート圧縮テクスチャブロックを展開するステップと、を含む、
方法。
【請求項１１】
前記第１のシェーダによる、メモリからの前記可変レートテクスチャブロックの非圧縮バージョンに対する要求に応じて、前記第２のシェーダが、前記可変レート圧縮テクスチャブロックを展開するステップをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記可変レート圧縮テクスチャブロックの前記非圧縮バージョンが前記メモリに存在しないという判定に応じて、前記第２のシェーダが、前記可変レート圧縮テクスチャブロックを展開するステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記第２のシェーダが、展開プログラムを用いて前記可変レート圧縮テクスチャブロックを展開するステップをさらに含む、請求項１０に記載の方法。
【請求項１４】
前記メモリは、オフチップのシステムメモリから取り出されたデータを保存するように構成されたオンチップメモリを含む、請求項１１に記載の方法。
【請求項１５】
テクスチャデータを展開するプログラム命令を含むコンピュータ可読記憶媒体であって、前記プログラム命令は、実行されると、
請求項１０〜１４の何れか１項に記載の方法を実行するように動作可能である、
コンピュータ可読記憶媒体。
【国際調査報告】
2014520328.tif 000011
2014520328.tif 000012
2014520328.tif 000013