(57)【特許請求の範囲】
【請求項１】
グラフィックス処理のための装置であって、
非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするように構成されたグラフィックス処理ユニット（ＧＰＵ）を備え、前記ＧＰＵは、
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするように構成され、及び前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にするように構成されたメモリアクセスコントローラを備える、
ここにおいて、前記メモリアクセスコントローラは、安全なメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全な部分にデータを書き込むように構成され、前記安全なメモリ管理ユニットは、前記第１のメモリユニットの前記安全な部分に対する仮想メモリアドレスの第１の範囲を含む安全なページテーブルを利用し、
ここにおいて、前記メモリアクセスコントローラは、安全でないメモリマネージユニットを利用することによって、前記第１のメモリユニットの前記安全でない部分からデータを読み取るように構成され、前記安全でないメモリ管理ユニットは、前記第１のメモリユニットの前記安全でない部分に対する仮想メモリアドレスの第２の範囲を含む安全でないページテーブルを利用する、
装置。
【請求項２】
前記メモリアクセスコントローラは、前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全でない部分のみにデータを書き込むことを可能にするように構成され、
前記メモリアクセスコントローラは、前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全な部分及び前記安全でない部分からデータを読み取ることを可能にするように構成されている、請求項１に記載の装置。
【請求項３】
グラフィックスドライバを記憶した第２のメモリユニットを更に備え、前記グラフィックスドライバは、安全モード又は非安全モードに前記ＧＰＵを配置するように構成される、請求項１に記載の装置。
【請求項４】
前記グラフィックスドライバは更に、前記ＧＰＵに、仮想メモリアドレスの前記第１の範囲と、仮想メモリアドレスの前記第２の範囲とを含む、仮想メモリアドレスの前記範囲を提供するように構成される、請求項３に記載の装置。
【請求項５】
前記安全なメモリ管理ユニットと、
前記安全でないメモリ管理ユニットと、
安全なオペレーティングシステム及び前記グラフィックスドライバを実行する中央処理装置（ＣＰＵ）とを更に備え、前記安全なオペレーティングシステムは、前記安全なページテーブルを前記安全なメモリ管理ユニットに、及び前記安全でないページテーブルを前記安全でないメモリ管理ユニットに供給するように構成される、請求項４に記載の装置。
【請求項６】
前記ＧＰＵは更に、クリアレジスタ及び１つ以上の内部メモリを備え、ここにおいて、前記安全なオペレーティングシステムは、前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、前記１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記クリアレジスタに送信するように構成される、請求項５に記載の装置。
【請求項７】
前記ＧＰＵは更に、コマンドストリームレジスタ及び１つ以上の内部メモリを備え、ここにおいて、前記グラフィックスドライバは、前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、前記１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記コマンドストリームレジスタに送信するように構成される、請求項５に記載の装置。
【請求項８】
前記ＧＰＵは更に、
前記ＧＰＵが前記非安全モード又は前記安全モードにあるかに関わらず、前記第１のメモリの前記安全でない部分にデータを書き込むように構成された１つ以上のハードウェアブロックを備え、ここにおいて、前記１つ以上のハードウェアブロックは、前記第１のメモリユニットの前記安全な部分への読み取りアクセスを有しない、請求項１に記載の装置。
【請求項９】
前記１つ以上のハードウェアブロックは、フロントエンドコマンドプロセッサを含む、請求項８に記載の装置。
【請求項１０】
グラフィックス処理の方法であって、
グラフィックス処理ユニット（ＧＰＵ）で、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスすることを備え、ここにおいて、アクセスすることは、
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にすることと、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にすることとを備え、
安全なメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全な部分にデータを書き込むことと、前記安全なメモリ管理ユニットは、前記第１のメモリユニットの前記安全な部分に対する仮想メモリアドレスの第１の範囲を含む安全なページテーブルを利用し、
安全でないメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全でない部分からデータを読み取ることと、前記安全でないメモリ管理ユニットは、前記第１のメモリユニットの前記安全でない部分に対する仮想メモリアドレスの第２の範囲を含む安全でないページテーブルを利用する、
を備える、方法。
【請求項１１】
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全でない部分のみにデータを書き込むことを可能にすることと、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全な部分及び前記安全でない部分からデータを読み取ることを可能にすることとを更に備える、請求項１０に記載の方法。
【請求項１２】
グラフィックスドライバで、安全モード又は非安全モードに前記ＧＰＵを配置することを更に備える、請求項１０に記載の方法。
【請求項１３】
前記グラフィックスドライバで、仮想メモリアドレスの前記第１の範囲及び仮想メモリアドレスの前記第２の範囲を含む、仮想メモリアドレスの前記範囲を前記ＧＰＵに提供することを更に備える、請求項１２に記載の方法。
【請求項１４】
中央処理装置（ＣＰＵ）上で実行する安全なオペレーティングシステムで、前記安全なページテーブルを前記安全なメモリ管理ユニットに、及び前記安全でないページテーブルを前記安全でないメモリ管理ユニットに供給することを更に備える、請求項１３に記載の方法。
【請求項１５】
前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記安全なオペレーティングシステムから前記ＧＰＵのクリアレジスタに送信することを更に備える、請求項１４に記載の方法。
【請求項１６】
前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記グラフィックスドライバから前記ＧＰＵのコマンドストリームレジスタに送信することを更に備える、請求項１４に記載の方法。
【請求項１７】
前記ＧＰＵが前記非安全モード又は前記安全モードにあるかに関わらず、前記ＧＰＵの１つ以上のハードウェアブロックで、前記第１のメモリの前記安全でない部分にデータを書き込むことを更に備え、ここにおいて、前記１つ以上のハードウェアブロックは、前記第１のメモリユニットの前記安全な部分への読み取りアクセスを有しない、請求項１０に記載の方法。
【請求項１８】
前記１つ以上のハードウェアブロックは、フロントエンドコマンドプロセッサを含む、請求項１７に記載の方法。
【請求項１９】
グラフィックス処理に対して構成された装置であって、
非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするための手段を備え、ここにおいて、前記アクセスするための手段は、
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするための手段と、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にするための手段とを備え、
安全なメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全な部分にデータを書き込むための手段と、前記安全なメモリ管理ユニットは、前記第１のメモリユニットの前記安全な部分に対する仮想メモリアドレスの第１の範囲を含む安全なページテーブルを利用し、
安全でないメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全でない部分からデータを読み取るための手段と、前記安全でないメモリ管理ユニットは、前記第１のメモリユニットの前記安全でない部分に対する仮想メモリアドレスの第２の範囲を含む安全でないページテーブルを利用する、
を備える、装置。
【請求項２０】
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみにデータを書き込むことを可能にするための手段と、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全な部分及び前記安全でない部分からデータを読み取ることを可能にするための手段とを更に備える、請求項１９に記載の装置。
【請求項２１】
前記ＧＰＵが前記非安全モード又は前記安全モードにあるかに関わらず、前記第１のメモリの前記安全でない部分にデータを書き込むための手段を更に備え、ここにおいて、前記１つ以上のハードウェアブロックは、前記第１のメモリユニットの前記安全な部分への読み取りアクセスを有しない、請求項１９に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]この開示は、グラフィックス処理のための技術に関し、より詳細には、コンテンツ保護のための技術に関する。
【背景技術】
【０００２】
[0002]オープンプラットフォーム（例えば、Ａｎｄｒｏｉｄ（登録商標）又は他のオープンソースプラットフォーム）、及びクローズドプラットフォーム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標））を含む現代のオペレーティングシステムは、そのようなオープンプラットフォームにストリーミングされ、又はそのようなオープンプラットフォームよって処理される、安全なコンテンツを保護するという点で、一般的に信頼されたものではない。現代のオペレーティングシステムは、ユーザのカーネルモード分離、最終的にはカーネルモードのコンポーネントを介して、クローズドプラットフォーム及び、特にオープンプラットフォームの両方で、あるレベルのセキュリティを提供する一方で、強いレベルの信頼性を提供しない。カーネルモードドライバは、容易にインストールされ得、悪意のあるカーネルモードドライバは、セキュリティの境界を自然にバイパスする。そのようなオープンプラットフォームにおけるカーネルモードハードウェアドライバは、安全なコンテンツを処理することができるハードウェア（例えば、グラフィックス処理ユニット（ＧＰＵ））の動作を制御するために使用される。しかしながら、そのようなドライバは、オープンソースであることが多く、及び／又は保護されるコンテンツに関して「安全」とは考えられないため、それらは第三者による改竄の影響をより受けやすい。そのような改竄は、そのようなドライバにより制御されたハードウェアを通じてストリーミングされ、又はそれによって処理される保護されるコンテンツ（例えば、デジタル著作権管理（ＤＲＭ）コンテンツ）が、安全でないメモリに記憶され、及び複製されることをもたらすことがある。よって、オープンプラットフォーム上での安全なコンテンツの制御は、困難であることが多い。
【発明の概要】
【０００３】
[0003]概して、この開示は、グラフィックス処理ユニット（ＧＰＵ）に対するハードウェアによるコンテンツ保護のための技術を説明する。ハードウェアプラットフォーム上で安全なコンテンツを制御するために、安全なメモリへのアクセスは、ＧＰＵなどのハードウェアによって制御され得る。
【０００４】
[0004]開示の一例では、グラフィックス処理のための装置は、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするように構成されたグラフィックス処理ユニット（ＧＰＵ）を備え、ＧＰＵは、ＧＰＵが非安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするように構成され、及びＧＰＵが安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にするように構成されたメモリアクセスコントローラを備える。
【０００５】
[0005]開示の別の例では、グラフィックス処理の方法は、非安全モード及び安全モードの１つに従って、グラフィックス処理ユニット（ＧＰＵ）で、第１のメモリユニットにアクセスすることを備え、アクセスすることは、ＧＰＵが非安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にすることと、ＧＰＵが安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全な一部のみにデータを書き込むことを可能にすることとを備える。
【０００６】
[0006]開示の別の例では、グラフィックス処理のために構成された装置は、非安全モード及び安全モードの１つに従って、グラフィックス処理ユニット（ＧＰＵ）で、第１のメモリユニットにアクセスするための手段を備え、アクセスするための手段は、ＧＰＵが非安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするための手段と、ＧＰＵが安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全な一部のみにデータを書き込むことを可能にするための手段とを備える。
【０００７】
[0007]１つ又は複数の例の詳細は、添付図面及び発明の詳細な説明で以下に示される。他の特徴、目的及び利点は、発明の詳細な説明及び図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００８】
【図１】[0008]この開示の技術を使用するように構成された例示的なコンピュータ機器を示すブロック図。
【図２】[0009]図１のシステムメモリの例示的な物理ページを示す概念図。
【図３】[0010]この開示の技術を使用するように構成された例示的な処理ユニットを示すブロック図。
【図４】[0011]この開示のハードウェアによるコンテンツ保護技術のための例示的な構造を示すブロック図。
【図５】[0012]この開示のハードウェアによるコンテンツ保護技術のための別の例示的な構造を示すブロック図。
【図６】[0013]この開示の一例に従ったキャッシュクリア技術を示すブロック図。
【図７】[0014]この開示の別の例に従ったキャッシュクリア技術を示すブロック図。
【図８】[0015]開示の一例に従った方法を示すフローチャートである。
【発明を実施するための形態】
【０００９】
[0016]この開示は、グラフィックス処理のための技術に関し、特に、グラフィックス処理ユニット（ＧＰＵ）に対するハードウェアによるコンテンツ保護のための技術に関する。
【００１０】
[0017]オープンプラットフォーム（例えば、Ａｎｄｒｏｉｄ又は他のオープンソースプラットフォーム）、及びクローズドプラットフォーム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ）を含む現代のオペレーティングシステムは、そのようなオープンプラットフォームにストリーミングされ、又はそのようなオープンプラットフォームよって処理される、安全なコンテンツを保護するという点で、一般的に信頼されたものではない。現代のオペレーティングシステムは、ユーザのカーネルモード分離、最終的にはカーネルモードのコンポーネントを介して、クローズドプラットフォーム及び、特にオープンプラットフォームの両方で、あるレベルのセキュリティを提供する一方で、強いレベルの信頼性を提供しない。カーネルモードドライバは、容易にインストールされ得、悪意のあるカーネルモードドライバは、セキュリティの境界を自然にバイパスする。そのようなオープンプラットフォームにおけるカーネルモードハードウェアドライバは、安全なコンテンツを処理することができるハードウェア（例えば、グラフィックス処理ユニット（ＧＰＵ））の動作を制御するために使用される。しかしながら、そのようなドライバは、オープンソースであることが多く、及び／又は保護されるコンテンツに関して「安全」とは考えられないため、それらは第三者による改竄の影響をより受けやすい。そのような改竄は、そのようなドライバにより制御されたハードウェアを通じてストリーミングされ、又はそれによって処理される保護されるコンテンツ（例えば、デジタル著作権管理（ＤＲＭ）コンテンツ）が、安全でないメモリに記憶され、及び複製されることをもたらす。よって、オープンプラットフォーム上での安全なコンテンツの制御は、困難であることが多い。この課題に対処するために、この開示は、それによって、安全なメモリにアクセスすることがハードウェア自身により（例えば、ＧＰＵにより）制御される、方法及び装置を提案する。
【００１１】
[0018]直接ドライバのコードを通じて安全なメモリ、又は安全でないメモリへのハードウェアアクセスを制御するのではなく、この開示は、一例では、グラフィックスドライバ（例えば、オープンソースの安全でないドライバ）を使用して、安全モード又は非安全モードのいずれかにおいてＧＰＵを配置することのみを提案する。安全モードに配置されると、安全なメモリを読み取ることができるＧＰＵコンポーネントが、安全なメモリ領域に書き込むことのみに制限される。これは、信頼されないドライバが、ＧＰＵを使用して、メモリコンテンツを安全なメモリ領域から安全でないメモリ領域に複製することを防止する。
【００１２】
[0019]この安全モードでは、ＧＰＵは、安全な（例えば、複製防止（ＣＰ））コンテンツ及び安全でないコンテンツ（例えば、安全でないメモリに記憶されたコンテンツ）の両方を読み取ることができる。非安全モードでは、ＧＰＵは安全なメモリへのアクセスが全て拒否される。このように、安全でないドライバが非安全モードにＧＰＵを配置するように改竄された場合、ＧＰＵ自身は、安全なメモリからデータを読み取ることが防止される。よって、安全なメモリにおける安全なコンテンツにアクセスすることが防止される。
【００１３】
[0020]開示の一例では、グラフィックス処理のための装置は、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするように構成されたグラフィックス処理ユニット（ＧＰＵ）を備え、ＧＰＵは、ＧＰＵが非安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするように構成され、及びＧＰＵが安全モードにあるとき、ＧＰＵが第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にするように構成されたメモリアクセスコントローラを備える。
【００１４】
[0021]図１は、ＧＰＵに対するハードウェアによるコンテンツ保護のためのこの開示の技術を実装するために使用され得る例示的なコンピュータ機器２を示すブロック図である。コンピュータ機器２は、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォーム又はコンソール、例えば、セルラー電話又は衛星電話などの携帯電話、固定電話、インターネット電話、所謂スマートフォン、ポータブルビデオゲーム機器若しくは携帯情報端末（ＰＤＡ）などのハンドヘルド機器、パーソナルミュージックプレイヤ、ビデオプレイヤ、表示装置、テレビ、テレビセットトップボックス、サーバ、中間ネットワーク機器、メインフレームコンピュータ、任意のモバイル機器、又はグラフィカルデータを処理及び／又は表示する任意の他のタイプの機器を備え得る。
【００１５】
[0022]図１の例に示されるように、コンピュータ機器２は、ユーザ入力インターフェース４、中央処理装置（ＣＰＵ）６、１つ又は複数のメモリコントローラ８、システムメモリ１０、グラフィックス処理ユニット（ＧＰＵ）１２、グラフィックスメモリ１４、表示器インターフェース１６、表示器１８、ならびにバス２０及び２２を含み得る。一部の例では、グラフィックスメモリ１４は、ＧＰＵ１２を有する「オンチップ」としてもよいことに留意する。一部のケースでは、図１に示される全てのハードウェア要素は、オンチップ、例えば、システムオンチップ（ＳｏＣ）設計にあり得る。ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２及び表示器インターフェース１６は、バス２０を使用して相互に通信し得る。メモリコントローラ８及びシステムメモリ１０はまた、バス２２を使用して相互に通信し得る。バス２０、２２は、第３世代バス（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバスもしくはＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（例えば、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ  バス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）Ｅｘｐｒｅｓｓバス、もしくはＡｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バス）又は別のタイプのバス若しくは機器の相互接続などの種々のバス構造のいずれかであり得る。図１に示される異なるコンポーネント間のバス及び通信インターフェースの特定の構成は、例示的なものにすぎず、同一又は異なるコンポーネントを有するコンピュータ機器及び／又は他のグラフィックス処理システムの他の構成が、この開示の技術を実装するために使用され得ることに留意すべきである。
【００１６】
[0023]ＣＰＵ６は、コンピュータ機器２の動作を制御する汎用又は特殊用途プロセッサを備え得る。ユーザは、ＣＰＵ６に１つ又は複数のソフトウェアアプリケーションを実行させるために、コンピュータ機器２に入力を提供し得る。ＣＰＵ６上で実行されるソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレイヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、又は別のプログラムを含み得る。追加的に、ＣＰＵ６は、ＧＰＵ１２の動作を制御するためのＧＰＵドライバ７を実行し得る。ユーザは、キーボード、マウス、マイクロフォン、タッチパッド、タッチスクリーンなどの１つもしくは複数の入力機器（図示せず）を介して、又はユーザ入力インターフェース４を介してコンピュータ機器２に結合された別の入力機器を介して、コンピュータ機器２に入力を提供し得る。
【００１７】
[0024]ＣＰＵ６上で実行するソフトウェアアプリケーションは、グラフィックスデータのレンダリングを表示器１８にさせることをＣＰＵ６に命令する１つ又は複数のグラフィックスレンダリング命令を含み得る。一部の例では、ソフトウェア命令は、グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）、例えば、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ（ＯｐｅｎＣＬ（登録商標））ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ又は任意の他の公的もしくは私的標準グラフィックスＡＰＩなどに適合し得る。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、グラフィックスデータのレンダリングの一部又は全てをＧＰＵ１２に実行させるために、１つ又は複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行し得る（例えば、ＧＰＵドライバ７を通じて）。一部の例では、レンダリングされることになるグラフィックスデータは、グラフィックスプリミティブのリスト、例えば、点、線、三角形、四角形、トライアングルストリップなどを含み得る。
【００１８】
[0025]メモリコントローラ８は、システムメモリ１０への、及びシステムメモリ１０からのデータの転送を促進する。例えば、メモリコントローラ８は、コンピュータ機器２におけるコンポーネントに対してメモリサービスを提供するために、メモリ読み取り及び書き込みコマンドを受信し、メモリシステム１０に関して、そのようなコマンドをサービスし得る。メモリコントローラ８は、メモリバス２２を介してシステムメモリ１０に通信可能に結合される。メモリコントローラ８が図１においてＣＰＵ６及びシステムメモリ１０の両方とは別個の処理モジュールであるものとして示されるが、他の例では、メモリコントローラ８の機能性の一部又は全てが、ＣＰＵ６、ＧＰＵ１２及びシステムメモリ１０の１つ又はいずれかで実装され得る。システムメモリ１０は、1つ又は複数のメモリユニットを備え得る。メモリユニットは、物理的に分割され得（例えば、別個の物理ディスク又はソリッドステートメモリユニット）、又はメモリアドレス範囲によって分割され得る。特に、システムメモリ１０は、「安全な」メモリユニット、及び「安全でない」メモリユニットを構成する２つ以上のメモリユニットに分割され得る。安全なメモリユニットは、そこに記憶されたデータのアクセス、複製又は解読を防止するための暗号化及び／又は他のデジタル著作権管理（ＤＲＭ）技術を利用し得る。
【００１９】
[0026]メモリコントローラ８はまた、システムメモリ１０へのＩＯ機器のアクセス（例えば、ＧＰＵ）を制御するためのＩＯＭＭＵ（即ち、入力／出力メモリ管理ユニット（ＭＭＵ））を含む、１つ又は複数のＭＭＵを含み得る。メモリ管理ユニットは、仮想メモリシステムを実装し得る。仮想メモリ空間は、複数の仮想ページに分割され得る。それらの仮想ページは連続し得るが、それらの仮想ページがそれに対応するシステムメモリ１０における物理ページは、システムメモリ１０においては連続しないことがある。ページは、ＭＭＵが管理することが可能とし得る最小ユニットとして考慮され得る。
【００２０】
[0027]中央処理装置（ＣＰＵ）上で稼動する現代のオペレーティングシステム（ＯＳ）は概して、ＣＰＵ上で動作する複数のプログラムにメモリを割り振るための仮想メモリ方式を使用する。仮想メモリは、アプリケーションが単に１つの組のメモリ（即ち、仮想メモリ）を参照することを必要とするように、コンピュータシステムの物理メモリ（例えば、ＲＡＭ、ディスク記憶装置など）を仮想化するメモリ管理技術である。仮想メモリは、物理メモリにおける位置にマッピングされる連続したアドレス空間から構成される。このようにして、物理メモリのフラグメンテーションが、代わりに仮想メモリの連続したブロックと相互作用し得るアプリケーションから「隠ぺいされる」。仮想メモリにおける連続したブロックは概して、「ページ」内に配置される。各ページは、幾つかの固定長の仮想メモリアドレスの連続したブロックである。仮想メモリから物理メモリへのマッピングは、メモリ管理ユニット（ＭＭＵ）によって扱われることが多い。物理メモリにおける位置に現在マッピングされている仮想メモリ空間は、物理メモリに「戻される」と考えられる。
【００２１】
[0028]仮想メモリ空間における位置の物理メモリへのマッピングは、トランスレーションルックアサイドバッファ（ＴＬＢ：translation lookaside buffer）に記憶される。ＴＬＢは、仮想アドレスを物理アドレスに高速に変換するために、ＭＭＵによって使用される。ＴＬＢは、入力として仮想メモリアドレスを使用し、物理メモリアドレスを出力するコンテンツアドレス可能メモリ（ＣＡＭ：content-addressable memory）として実装され得る。次いで、ＭＭＵは、出力された物理メモリアドレスを使用して、要求されたデータを高速に取り出し得る。
【００２２】
[0029]図２は、システムメモリ１０の例示的な物理ページを示す概念図である。例えば、図２は、４つの区画（区画０〜３）を含む仮想ページ４２を含む、ＩＯＭＭＵ４０を示す。仮想ページ４２は、理解を容易にするために図２に示される仮想構造であることが理解されるべきである。図２では、システムメモリ１０は、仮想ページ４２に対応する物理ページ４４を含み得る。
【００２３】
[0030]物理ページ４２は、システムメモリ１０の複数のメモリユニットにわたって記憶され得る。例えば、物理ページ４２は、メモリユニット１１Ａ及びメモリユニット１１Ｎの両方を含み得る。一例では、メモリユニット１１Ａは「安全な」メモリユニットであり、メモリユニット１１Ｎは「安全でない」メモリユニットである。メモリユニット１１Ａは、区画４４Ａとして示される、物理ページ４４の一部分を記憶し得、メモリユニット１１Ｎは、区画４４Ｂとして示される、物理ページ４４の一部分を記憶し得る。示されるように、メモリユニット１１Ａは、物理ページ４４の区画０及び区画２を記憶し、メモリユニット１１Ｎは、物理ページ４４の区画１及び区画３を記憶する。
【００２４】
[0031]図２の例は、例示を目的に、２つのメモリユニットを含むのみであるが、任意に数のメモリユニットが使用され得る。例えば、図１を再度参照すると、ＧＰＵドライバ７は、ＧＰＵ１２に画素値又は任意の他の計算された値を記憶させる命令を送信し得、及び画素値が記憶されることになる場所に対する仮想アドレスを送信し得る。次に、ＧＰＵ１２は、仮想アドレスに従って、画素値を記憶することをＩＯＭＭＵ４０に要求し得る。次に、ＩＯＭＭＵ４０は、仮想アドレスを物理アドレスにマッピングし得、物理アドレスに基づいて、インターリーブ方式でシステムメモリ１０のページに画素値を記憶し得る。
【００２５】
[0032]図１を参照して、システムメモリ１０は、ＣＰＵ６による実行のためにアクセス可能なプログラムモジュール及び／もしくは命令、及び／又はＣＰＵ６上で実行するプログラムによる使用のためのデータを記憶し得る。例えば、システムメモリ１０は、表示器１８上のグラフィカルユーザインターフェース（ＧＵＩ）を提示するために、ＣＰＵ６によって使用されるウインドウマネージャアプリケーションを記憶し得る。加えて、システムメモリ１０は、ユーザアプリケーション及びアプリケーションと関連付けられたアプリケーションサーフェスデータを記憶し得る。システムメモリ１０は、コンピュータ機器２の他のコンポーネントによる使用のための情報及び／又はそれらにより生成される情報を追加的に記憶し得る。例えば、システムメモリ１０は、ＧＰＵ１２に対する機器メモリとして動作し得、及びＧＰＵ１２により演算されることになるデータとともに、ＧＰＵ１２によって実行された演算から生じるデータを記憶し得る。例えば、システムメモリ１０は、ＤＲＭ保護されたゲームコンテンツ又はＧＰＵ１２により生成された復号化されたビデオを記憶し得る。このような状況で、そのようなＤＲＭ保護されたコンテンツは好ましくは、システムメモリ１０の安全なメモリユニットに記憶される。他の例として、システムメモリ１０は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、又はフレームバッファなどの任意の組み合わせのような他のグラフィックスデータを記憶し得る。システムメモリ１０は、１つ又は複数の揮発性又は不揮発性メモリ又は記憶装置、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、リードオンリメモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電子的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体、又は光学式記憶装置媒体を含み得る。
【００２６】
[0033]ＧＰＵ１２は、１つ又は複数のグラフィックスプリミティブを表示器１８にレンダリングするためにグラフィックス演算を実行するように構成され得る。よって、ＣＰＵ６上で実行するソフトウェアアプリケーションの１つがグラフィックス処理を要求するとき、ＣＰＵ６は、表示器１８にレンダリングするために、グラフィックスコマンド及びグラフィックスデータをＧＰＵ１２に提供し得る。グラフィックスデータは、例えば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。ＧＰＵ１２は、一部の例では、ＣＰＵ６よりも複雑なグラフィック関連演算のより効率的な処理を提供する、高度に並列化された構造で構築され得る。例えば、ＧＰＵ１２は、複数の頂点又は画素上で並列な方式で動作するように構成された複数の処理要素を含み得る。ＧＰＵ１２の高度に並列化された特性は、一部の例では、ＣＰＵ６を使用して表示器１８にシーンを直接描画するよりも高速に、ＧＰＵ１２がグラフィックス画像（例えば、ＧＵＩならびに２次元（２Ｄ）及び／もしくは３次元（３Ｄ）グラフィックスシーン）を表示器１８に描画することを可能にし得る。
【００２７】
[0034]ＧＰＵ１２は、一部の例では、コンピュータ機器２のマザーボードに統合され得る。他の例では、ＧＰＵ１２は、コンピュータ機器２のマザーボードにおけるポートに差し込まれたグラフィックスカード上に存在し得、又はコンピュータ機器２と相互動作するように構成された周辺機器内に組み込まれ得る。ＧＰＵ１２は、１つ又は複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタルシグナルプロセッサ（ＤＳＰ）、又は他の同等の集積もしくは個別論理回路などの１つ又は複数のプロセッサを含み得る。
【００２８】
[0035]ＧＰＵ１２は、グラフィックスメモリ１４に直接結合され得る。よって、ＧＰＵ１２は、バス２０を使用することなく、グラフィックスメモリ１４からデータを読み取り、及びグラフィックスメモリ１４にデータを書き込み得る。言い換えると、ＧＰＵ１２は、他のより低速なシステムメモリを使用する代わりに、ローカル記憶装置を使用して、データをローカルに処理し得る。これは、ＧＰＵ１２が、大量のバストラフィックを経験することがあるシステムバス２０を介してデータを読み取り及び書き込みする必要性を除去することによって、ＧＰＵ１２がより効率的な方式で動作することを可能にする。しかしながら、一部の例では、ＧＰＵ１２は、別個のメモリを含まなくてもよいが、代わりに、バス２０を介してシステムメモリ１０を利用する。グラフィックスメモリ１４は、１つ又は複数の揮発性又は不揮発性メモリ又は記憶装置、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電子的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体、又は光学式記憶装置媒体を含み得る。
【００２９】
[0036]ＣＰＵ６及び／又はＧＰＵ１２は、フレームバッファ１５にレンダリングされた画像データを記憶し得る。概して、フレームバッファ１５は、システムメモリ１０内に割り振られるが、一部の環境では、独立したメモリであり得る。表示器インターフェース１６は、フレームバッファ１５からデータを取り出し得、及びレンダリングされた画像データによって表示された画像を表示するように表示器１８を構成し得る。一部の例では、表示器インターフェース１６は、フレームバッファから取り出されたデジタル値を、表示器１８により消費可能なアナログ信号に変換するように構成されたデジタルツーアナログコンバータ（ＤＡＣ）を含み得る。他の例では、表示器インターフェース１６は、処理のために、デジタル値を表示器１８に直接的に渡すことができる。表示器１８は、モニタ、テレビ、投影機器、液晶表示器（ＬＣＤ）、プラズマ表示器パネル、有機ＬＥＤ（ＯＬＥＤ）表示器などの発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）表示器、電子ペーパー、表面伝導電子放射表示器（ＳＥＤ）、レーザーテレビ表示器、ナノクリスタル表示器、又は別のタイプの表示器ユニットを含み得る。表示器１８は、コンピュータ機器２に統合され得る。例えば、表示器１８は、携帯電話又はタブレットコンピュータのスクリーンであり得る。代わりに、表示器１８は、有線又はワイヤレス通信リンクを介してコンピュータ機器２に結合されたスタンドアロン機器であり得る。例えば、表示器１８は、ケーブル又はワイヤレスリンクを介してパーソナルコンピュータに結合されたコンピュータモニタ又はフラットパネル表示器であり得る。
【００３０】
[0037]図３は、更に詳細に、図１のＣＰＵ６、ＧＰＵ１２、及びシステムメモリ１０の例示的な実装形態を示すブロック図である。ＣＰＵ６は、その各々がＣＰＵ６上で実行する１つ又は複数のソフトウェアアプリケーション又はサービスであり得る、少なくとも１つのソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、及びＧＰＵドライバ７を含み得る。ＧＰＵ１２は、グラフィックス処理コマンドを実行するためにともに動作する複数のグラフィックス処理ステージを含む、３Ｄグラフィックス処理パイプライン３０を含み得る。ＧＰＵ１２は、ビニングレンダリングモード（タイルベース又は遅延レンダリングモードとも称される）、及び直接レンダリングモードを含む、種々のレンダリングモードでグラフィックス処理パイプライン３０を実行するように構成され得る。ＧＰＵ１２はまた、ＧＰＵハードウェアの高度に並列な特性によって実行されることに適用可能なより一般的な計算を実行するために、汎用シェーダ３９を実行するために動作可能であり得る。そのような汎用アプリケーションは、所謂汎用グラフィックス処理ユニット（ＧＰＧＰＵ）であり得、及びＯｐｅｎＣＬなどの汎用ＡＰＩに適合し得る。
【００３１】
[0038]図３に示されるように、グラフィックス処理パイプライン３０は、コマンドエンジン３２、幾何学処理ステージ３４、ラスタリゼーションステージ３６、及び画素処理パイプライン３８を含み得る。グラフィックス処理パイプライン３０におけるコンポーネントの各々は、固定関数コンポーネント（fixed-function components）、プログロマブルコンポーネント（例えば、プログロマブルシェーダユニット上で実行するシェーダプログラムの一部として）として、又は固定関数及びプログロマブルコンポーネントの組み合わせとして実装され得る。ＣＰＵ６及びＧＰＵ１２に利用可能なメモリは、自身がフレームバッファ１５を含み得る、システムメモリ１０を含み得る。フレームバッファ１５は、レンダリングされた画像データを記憶し得る。
【００３２】
[0039]ソフトウェアアプリケーション２４は、ＧＰＵ１２の機能を利用する任意のアプリケーションであり得る。例えば、ソフトウェアアプリケーション２４は、ＧＵＩアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリング又はアーティスチックアプリケーションのためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、又は２Ｄ若しくは３Ｄグラフィックスを使用する別のタイプのソフトウェアアプリケーションであり得る。ソフトウェアアプリケーション２４はまた、ＧＰＧＰＵアプリケーションにおいてなど、より一般的な計算を実行するためにＧＰＵを使用するアプリケーションであり得る。
【００３３】
[0040]ソフトウェアアプリケーション２４は、ＧＰＵ１２に、グラフィカルユーザインターフェース（ＧＵＩ）及び／又はグラフィックスシーンをレンダリングすることを指示する１つ又は複数の描画命令を含み得る。例えば、描画命令は、ＧＰＵ１２によってレンダリングされることになる１つ又は複数のグラフィックスプリミティブの組を定義する命令を含み得る。一部の例では、描画命令は、ＧＵＩにおいて使用される複数のウインドウサーフェスの全て又は一部を集合的に定義し得る。追加的な例では、描画命令は、アプリケーションによって定義されたモデル空間内、又は世界空間内の１つ又は複数のグラフィックスオブジェクトを含む、グラフィックスシーンの全て又は一部を集合的に定義し得る。
【００３４】
[0041]ソフトウェアアプリケーション２４は、１つ又は複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための１つ又は複数のコマンドをＧＰＵ１２に発行するために、グラフィックスＡＰＩ２６を介してＧＰＵドライバ７を呼び出し得る。例えば、ソフトウェアアプリケーション２４は、プリミティブ定義をＧＰＵ１２に提供するために、グラフィックスＡＰＩ２６を介してＧＰＵドライバ７を呼び出し得る。一部の例では、プリミティブ定義は、描画プリミティブのリスト、例えば、三角形、長方形、トライアングルファン、トライアングルストリップなどの形式でＧＰＵ１２に提供され得る。プリミティブ定義は、レンダリングされることになるプリミティブと関連付けられた１つ又は複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、各頂点、及び一部の例では、頂点と関連付けられた他の属性、例えば、色座標、法線ベクトル、及びテクスチャ座標に対する位置座標を含み得る。プリミティブ定義はまた、プリミティブタイプ情報（例えば、三角形、長方形、トライアングルファン、トライアングルストリップなど）、スケーリング情報、及び回転情報などを含み得る。ソフトウェアアプリケーション２４によってＧＰＵドライバ７に発行された命令に基づいて、ＧＰＵドライバ７は、プリミティブをレンダリングするために実行するために、ＧＰＵ１２に対して１つ又は複数の演算を指定する１つ又は複数のコマンドを定義し得る。ＧＰＵ１２がＣＰＵ６からコマンドを受信するとき、グラフィックス処理パイプライン３０は、コマンドを復号し、コマンドにおいて指定された演算を実行するためにグラフィックス処理パイプライン３０内で１つ又は複数の処理要素を構成する。指定された演算を実行した後、グラフィックス処理パイプライン３０は、レンダリングされたデータを、表示装置と関連付けられたフレームバッファ１５に出力する。グラフィックスパイプライン３０は、ビンニングレンダリングモード及び直接レンダリングモードを含む複数の異なるレンダリングモードの１つにおいて実行するように構成され得る。
【００３５】
[0042]ＧＰＵドライバ７は更に、１つ又は複数のシェーダプログラムをコンパイルし、及びコンパイルされたシェーダプログラムを、ＧＰＵ１２内に含まれる１つ又は複数のプログラマブルシェーダユニット上にダウンロードするように構成され得る。シェーダプログラムは、ハイレベルシェーディング言語、例えば、ＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）、ハイレベルシェーディング言語（ＨＬＳＬ）グラフィックスシェーディング言語に対するＣ（Ｃｇ）などに書き込まれ得る。コンパイルされたシェーダプログラムは、ＧＰＵ１２内のプログラマブルシェーダユニットの動作を制御する１つ又は複数の命令を含み得る。例えば、シェーダプログラムは、頂点シェーダプログラム及び／又は画素シェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニット又は統合シェーダユニットの実行を制御し得、及び頂点ごとの１つ又は複数の演算を指定する命令を含み得る。画素シェーダプログラムは、プログラマブル画素シェーダユニット又は統合シェーダユニットの実行を制御する画素シェーダプログラムを含み得、及び画素ごとの１つ又は複数の演算を指定する命令を含み得る。この開示の一部の例に従って、画素シェーダプログラムはまた、ソース画素に対する対応する目標アルファ値に基づいて、テクスチャ値が選択的にソース画素に対して取り出されるようにさせる命令を含み得る。
【００３６】
[0043]グラフィックス処理パイプライン３０は、グラフィックスドライバ７を介して、ＣＰＵ６から１つ又は複数のグラフィックス処理コマンドを受信し、及び表示可能なグラフィックス画像を生成するためにグラフィックス処理コマンドを実行するように構成され得る。上述したように、グラフィックス処理パイプライン３０は、グラフィックス処理コマンドを実行するためにともに動作する複数のステージを含む。しかしながら、そのようなステージは必ずしも別個のハードウェアブロックで実装されないことに留意すべきである。例えば、幾何学処理ステージ３４及び画素処理パイプライン３８の一部は、統合シェーダユニットの一部として実装され得る。再度、グラフィックスパイプライン３０は、ビニングレンダリングモード及び直接レンダリングモードを含む、複数の異なるレンダリングモードの１つで実行するように構成され得る。
【００３７】
[0044]コマンドエンジンの３２は、グラフィックス処理コマンドを受信し得、及びグラフィックス処理コマンドを実行するための種々の演算を実行するために、グラフィックス処理パイプライン３０内の残りの処理ステージを構成し得る。グラフィックス処理コマンドは、例えば、描画コマンド及びグラフィックス状態コマンドを含み得る。描画コマンドは、１つ又は複数の頂点、及び一部の例では頂点の各々と関連付けられた他の属性値、例えば、色座標、法線ベクトル、テクスチャ座標、及びフォグ座標に対する位置座標を指定する頂点仕様コマンドを含み得る。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、ライティングコマンド（lighting command）などを含み得る。プリミティブタイプコマンドは、レンダリングされることになるプリミティブのタイプ、及び／又はどのように頂点がプリミティブを形成するために組み合わされるかを指定し得る。変換コマンドは、頂点上で実行するための変換のタイプを指定し得る。ライティングコマンドは、グラフィックスシーン内の異なる光のタイプ、方向及び／又は配置を指定し得る。コマンドエンジン３２は、幾何学処理ステージ３４に、１つ又は複数の受信したコマンドと関連付けられた頂点及び／又はプリミティブに関して幾何学処理を実行させ得る。
【００３８】
[0045]幾何学処理ステージ３４は、ラスタリゼーションステージ３６に対するプリミティブデータを生成するために、１つ又は複数の頂点上で、頂点ごとの演算及び／又はプリミティブセットアップ演算を実行し得る。各頂点は、属性の組、例えば、位置座標、色値、法線ベクトル、及びテクスチャ座標と関連付けられ得る。幾何学処理ステージ３４は、種々の頂点ごとの演算に従って、それらの属性の１つ又は複数を修正する。例えば、幾何学処理ステージ３４は、修正された頂点位置座標を生成するために、頂点位置座標上で１つ又は複数の変換を実行し得る。幾何学処理ステージ３４は、修正された頂点位置座標を生成するために、例えば、モデリング変換、視野変換（viewing transformation）、投影変換、ＭｏｄｅｌＶｉｅｗ変換、ＭｏｄｅｌＶｉｅｗＰｒｏｊｅｃｔｉｏｎ変換、ビューポート変換（viewport transformation）及び深度レンジスケーリング変換の１つ又は複数を、頂点位置座標に適用し得る。一部の例では、頂点位置座標は、モデル空間座標であり得、修正された頂点位置座標は、スクリーン空間座標であり得る。スクリーン空間座標は、モデリング、視野、投影及びビューポート変換の適用の後に取得され得る。一部の例では、幾何学処理ステージ３４はまた、頂点に対する修正された色座標を生成するために、頂点上で頂点ごとのライティング演算を実行し得る。幾何学処理ステージ３４はまた、例えば正規変換演算、標準正規化演算、ビューボリュームクリッピング、異種分割及び／又はバックフェースカリング演算を含む他の演算を実行し得る。
【００３９】
[0046]幾何学処理ステージ３４は、ラスタライズされることになるプリミティブを定義する１つ又は複数の修正された頂点の組を含むプリミティブデータとともに、プリミティブを形成するためにどのように頂点を組み合わせるかを指定するデータを生成し得る。修正された頂点の各々は、例えば、修正された頂点位置座標及び頂点と関連付けられた処理された頂点属性値を含み得る。プリミティブデータは、グラフィックス処理パイプライン３０の更なるステージによってラスタライズされることになるプリミティブに集合的に対応し得る。概念的に、各頂点は、プリミティブの２つのエッジが満たすプリミティブの角に対応し得る。幾何学処理ステージ３４は、更なる処理のために、プリミティブデータをラスタリゼーションステージ３６に提供し得る。
【００４０】
[0047]一部の例では、幾何学処理ステージ３４の全て又は一部は、１つ又は複数のシェーダユニット（shader units）上で実行する１つ又は複数のシェーダプログラムによって実装され得る。例えば、幾何学処理ステージ３４は、そのような例では、頂点シェーダ、幾何学シェーダ、又はそれらの任意の組み合わせによって実装され得る。他の例では、幾何学処理ステージ３４は、固定関数ハードウェア処理パイプラインとして、又は固定関数ハードウェアと１つ又は複数のシェーダユニット上で実行する１つ又は複数のシェーダプログラムとの組み合わせとして実装され得る。
【００４１】
[0048]ラスタリゼーションステージ３６は、ラスタライズされることになるプリミティブを表すプリミティブデータを幾何学処理ステージ３４から受信し、及びプリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソース画素を生成するように構成される。一部の例では、ラスタリゼーションステージ３６は、どのスクリーン画素位置が、ラスタライズされることになるプリミティブによってカバーされるかを決定し得、及びプリミティブによってカバーされることになると決定された各スクリーン画素位置に対するソース画素を生成し得る。ラスタリゼーションステージ３６は、当業者によって既知の技術、例えば、エッジウォーキング（edge-walking）技術を使用し、エッジ式を評価するなどによって、どのスクリーン画素位置がプリミティブによりカバーされるかを決定し得る。ラスタリゼーションステージ３６は、更なる処理のために、結果として生じるソース画素を画素処理パイプライン３８に提供し得る。
【００４２】
[0049]ラスタリゼーションステージ３６によって生成されたソース画素は、スクリーン画素位置、例えば、目標画素に対応し得、及び１つ又は複数の色属性と関連付けられ得る。特定のラスタライズされたプリミティブに対して生成されたソース画素の全ては、ラスタライズされたプリミティブと関連付けられていると言える。プリミティブによりカバーされることになるラスタリゼーションステージ３６によって決定された画素は概念的に、プリミティブの頂点を表す画素、プリミティブのエッジを表す画素、及びプリミティブの内部を表す画素を含み得る。
【００４３】
[0050]画素処理パイプライン３８は、ラスタライズされたプリミティブと関連付けられたソース画素を受信し、及びソース画素上で１つ又は複数の画素ごとの演算を実行するように構成される。画素処理パイプライン３８によって実行され得る画素ごとの演算は、例えば、アルファテスト、テクスチャマッピング、色計算、画素シェーディング、画素ごとのライティング、フォグ処理、混合、画素オーナシップテキスト（pixel ownership text）、ソースアルファテスト（source alpha test）、ステンシルテスト、深度テスト、シザーステスト（scissors test）、及び／又はスティップリング演算（stippling operations）を含む。加えて、画素処理パイプライン３８は、１つ又は複数の画素ごとの演算を実行するために、１つ又は複数の画素シェーダプログラムを実行し得る。画素処理パイプライン３８によって生成される結果として生じるデータは、本明細書では目標画素データと称され得、及びフレームバッファ１５に記憶され得る。目標画素データは、処理されたソース画素と同一の表示位置を有する、フレームバッファ１５における目標画素と関連付けられ得る。目標画素データは、例えば、色値、目標アルファ値、深度値などのデータを含み得る。
【００４４】
[0051]フレームバッファ１５は、ＧＰＵ１２に対する目標画素を記憶する。各目標画素は、一意なスクリーン画素位置と関連付けられ得る。一部の例では、フレームバッファ１５は、各目標画素に対する色要素及び目標アルファ値を記憶し得る。例えば、フレームバッファ１５は、各画素に対する赤、緑、青、アルファ（ＲＧＢＡ）要素を記憶し得、「ＲＧＢ」要素は、色値に対応し、「Ａ」要素は目標アルファ値に対応する。画素値はまた、輝度要素（Ｙ）及び１つ又は複数の彩度要素（例えば、Ｕ及びＶ）によって表され得る。フレームバッファ１５及びシステムメモリ１０は別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ１５は、システムメモリ１０の一部であり得る。
【００４５】
[0052]汎用シェーダ３９は、計算を実行するためのＧＰＵ１２上で実行可能な任意のアプリケーションであり得る。概して、そのような計算は、演算論理ユニット（ＡＬＵ）を含む、ＧＰＵ処理コアの高度に並列した構造を利用するタイプの計算である。汎用シェーダ３９の例は、ＯｐｅｎＣＬ  ＡＰＩに適合し得る。ＯｐｅｎＣＬは、異種システム（例えば、ＣＰＵ、ＧＰＵ、ＤＳＰなどを含むシステム）において複数のプロセッサにわたってアプリケーションがアクセスを有することを可能にするＡＰＩである。概して、アプリケーションに適合したＯｐｅｎＣＬでは、ＧＰＵ１２は、非グラフィカル計算を実行するために使用される。非グラフィカル計算アプリケーションの例は、とりわけ、物理学ベースのシミュレーション、高速フーリエ変換、オーディオ信号処理、デジタル画像処理、ビデオ処理、画像ポストフィルタリング、コンピューテーショナルカメラ、気候研究、天気予報、ニューラルネットワーク、暗号作成、及び大容量並列データのクランチングを含み得る。
【００４６】
[0053]図４は、この開示のハードウェアによるコンテンツ保護技術を実装するように構成された例示的な機器を示すブロック図である。図４の例では、ＧＰＵ１２は、安全モード又は非安全モードに従って動作するように構成され得る。安全モードでは、ＧＰＵ１２は、出力データ（例えば、ゲームデータ、ビデオなど）を安全でないメモリ５６に書き込むことに制限される。むしろ、安全モードでは、ＧＰＵ１２は、出力データを安全なメモリ５７に書き込みことができるのみである。安全モードにある間、ＧＰＵ１２は、安全なメモリ５７又は安全でないメモリ５６のいずれかからデータを読み取り得る。非安全モードでは、ＧＰＵ１２は、安全なメモリ５７から任意のデータを読み取ることから制限される。むしろ、非安全モードでは、ＧＰＵ１２は、安全でないメモリ５６からデータを読み取ることのみできる。同様に、非安全モードにある間、ＧＰＵ１２は、安全でないメモリ５６にデータを書き込みのみできる。
【００４７】
[0054]安全でないメモリ５６及び安全なメモリ５７は、１つ又は複数の揮発性又は不揮発性メモリ又は記憶装置を含む、任意のタイプのメモリであり得る。例示的なメモリ及び記憶装置は、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、磁気データ媒体、又は光学式記憶装置媒体を含む。安全なメモリ５７は、安全でないメモリ５６では発見されない追加的な特徴を含む。例えば、安全なメモリ５７は、それに記憶されたデータへのアクセス、複製、又は解読を防止するために、暗号化、認証、及び／又は他のデジタル著作権管理技術を利用し得る。
【００４８】
[0055]ＧＰＵ１２は、メモリアクセスコントローラ５３を使用して、データがどこから読み取られ、及びどこに書き込まれるかを制御する。メモリアクセスコントローラ５３は、その下で（即ち、安全モード又は非安全モード）で動作するモードＧＰＵ１２に応答し、モードに基づいて読み取り／書き込み決定を行う。
【００４９】
[0056]一例では、ＧＰＵメモリモードは、ＣＰＵ６上で動作するＧＰＵドライバ７によって設定される。ＧＰＵドライバ７は、幾つかの異なる方法でＧＰＵ１２においてメモリモードを変更し得る。一例では、ＧＰＵドライバ７は、どのメモリモードを使用するか（例えば、安全モード又は非安全モード）をＧＰＵ１２に示す値を、ＧＰＵ１２におけるレジスタに直接書き込む。別の例では、ＧＰＵ１２は、どのメモリモードを使用するかを示すレジスタに一定の値を書き込むようにＧＰＵ１２自身に命令する、１つ又は複数の命令を、ＧＰＵ１２によって実行可能なコマンドストリームに含み得る。このようにして、ＧＰＵドライバ７は、ＧＰＵがその下で動作するメモリモードを選択することのみができ、及びどのデータがどのメモリに書き込まれるかを指定する直接命令を行わない。このようにして、ＧＰＵドライバ７が非安全モードにおいてＧＰＵ１２を配置するように改竄された場合でさえ、メモリアクセスコントローラ５３の機能を通じて、ＧＰＵ１２は、メモリアクセスコントローラ５３が非安全モードにおいて安全でないメモリ５６から読み取ることのみが可能であるので、安全なメモリ５７からのいずれの読み取りアクセスも防止する。同様に、ＧＰＵ７が安全モードにおいてＧＰＵ１２を配置するように改竄された場合でさえ、メモリアクセスコントローラ５３の機能を通じて、ＧＰＵ１２は、メモリアクセスコントローラ５３が安全モードにおいて安全なメモリ５７に書き込むことのみが可能であるので、安全でないメモリ５６へのいずれの書き込みアクセスも防止する。
【００５０】
[0057]一例では、メモリコントローラ５３は、安全な及び安全でないメモリ管理ユニット（ＭＭＵ）ページテーブルのそれぞれを介して、安全な及び安全でないメモリユニットにアクセスする。この例では、仮想アドレス範囲は、ＧＰＵドライバ７によってＧＰＵ１２に提供される。仮想アドレス範囲は、安全なメモリに対する仮想アドレスの範囲及び安全でないメモリに対する仮想アドレスの範囲を含む。ＧＰＵドライバ７によって安全モードに配置されるとき、ＧＰＵ１２は、読み取り及び書き込みを実行するために、安全なメモリに対する仮想アドレスの範囲を利用する。ＧＰＵ１２はまた、安全モードで読み取りを実行するが、書き込みは実行しないために、安全でないメモリに対する仮想アドレスの範囲を使用することが可能である。ＧＰＵドライバ７によって非安全モードに配置されるとき、ＧＰＵ１２は、読み取り及び書き込みを実行するために、安全でないメモリに対する仮想アドレスの範囲を利用する。
【００５１】
[0058]一例では、メモリアクセスコントローラ５３は、読み取り又は書き込み要求で使用される仮想アドレスが、仮想メモリアドレスの安全でない範囲内にあるか、又は仮想アドレスの安全な範囲内にあるかを決定することによって、読み取り及び書き込みを適切なメモリユニット（即ち、安全なメモリ５７又は安全でないメモリ５６）に経路指定する。範囲決定に基づいて、メモリアクセスコントローラは、安全でないＩＯＭＭＵ５１又は安全なＩＯＭＭＵ５２の１つを利用する。
【００５２】
[0059]安全でないＩＯＭＭＵ５１は、仮想メモリアドレスを安全でないメモリ５６における物理メモリアドレスにマッピングするように構成されたＩＯＭＭＵである。安全なＩＯＭＭＵ５２は、仮想メモリアドレスを安全なメモリ５７における物理メモリアドレスにマッピングするように構成されたＩＯＭＭＵである。安全でないＩＯＭＭＵ５１は、安全でないページテーブル（page table）を使用して、安全でないメモリ５６へのマッピングを実行する。安全でないページテーブルは、仮想メモリアドレスの範囲（例えば、ＧＰＵドライバ７によって提供される範囲）を安全でないメモリ５６における位置にマッピングするページテーブルである。同様に、安全なＩＯＭＭＵ５２は、安全なページテーブルを使用して、安全なメモリ５７へのマッピングを実行する。安全なページテーブルは、仮想メモリアドレスの範囲（例えば、ＧＰＵドライバ７によって提供される範囲）を安全なメモリ５７における位置にマッピングするページテーブルである。図４に示されるように、安全でないＩＯＭＭＵ５１及び安全なＩＯＭＭＵ５２は、単一のＩＯＭＭＵ５０の一部である。実際には、ＩＯＭＭＵ５０は、それが安全なページテーブルで動作するとき、安全なＩＯＭＭＵとなり、それが安全でないページテーブルで動作するとき、安全でないＩＯＭＭＵとなる。他の例では、安全でないＩＯＭＭＵ５１及び安全なＩＯＭＭＵ５２は、物理的に別個のＭＭＵであり得る。
【００５３】
[0060]開示の一例では、安全なページテーブル及び安全でないページテーブルの両方が、ＣＰＵ６上で実行する安全なオペレーティングシステム（ＯＳ）５４によって安全なＩＯＭＭＵ５２及び安全でないＩＯＭＭＵ５１に提供される。安全なＯＳは、標準的な「リッチな」ＯＳ（例えば、Ａｐｐｌｅ  ｉＯＳ、Ｇｏｏｇｌｅ  Ａｎｄｒｏｉｄ、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓなど）に沿って動作するＯＳである。安全なＯＳは、安全なカーネル及び任意の安全な周辺機器を（例えば、安全なＩＯＭＭＵ５２）をリッチなＯＳ（例えば、ＧＰＵドライバ７）上で稼動する任意のコードから保護及び分離するために、セキュリティアプリケーションを提供する。安全なＯＳの例は、ＡＲＭホールディングスによって製造されたＴｒｕｓｔＺｏｎｅソフトウェアである。概して、安全なＯＳは、グラフィックスドライバなどのソフトウェアを含むリッチなＯＳ上で稼動するソフトウェアよりも、改竄及び攻撃を受けにくいと考えられている。この開示の技術に従って、安全なＯＳのみが、仮想メモリアドレス範囲を物理メモリアドレスにマッピングするためのページテーブルを更新することが許可される。よって、ドライバによって提供される仮想アドレス範囲を含む、グラフィックスドライバを改竄するための任意の試みは、安全なＯＳのみが安全なメモリ及び安全でないメモリへの最終的なマッピングを提供するので、安全でないメモリに記憶されている安全なコンテンツをもたらさない。
【００５４】
[0061]安全なページテーブル及び安全でないページテーブルの両方がＩＯＭＭＵ５０（即ち、安全でないＩＯＭＭＵ５１及び安全なＩＯＭＭＵ５２の両方で構成されるＩＯＭＭＵ５０）において利用可能な例では、ＧＰＵ１２は、安全モードにおいて安全でないメモリ５６及び安全なメモリ５７の両方からデータを読み取り可能である。他の読み取り／書き込み制限は更に適用される。即ち、安全モードでは、書き込みは、ＧＰＵ１２によって安全なメモリ５７になされるのみであり、非安全モードでは、ＧＰＵ１２による読み取り及び書き込みの両方が安全でないメモリ５６に制限される。
【００５５】
[0062]開示の別の例では、ＧＰＵに利用可能な安全なＩＯＭＭＵ及び安全でないＩＯＭＭＵの両方を有するのではなく、データトラフィックがメモリアクセスコントローラ５３を介して安全なＩＯＭＭＵ又は安全でないＩＯＭＭＵのいずれかに向けられる場合、１つのＩＯＭＭＵ（即ち、安全でないＩＯＭＭＵ５１又は安全なＩＯＭＭＵ５２のいずれか）が、選択されたメモリモードに応じてＧＰＵ１２に利用可能となる。即ち、メモリモードが非安全モードである場合、安全なＯＳ５４は、安全でないＩＯＭＭＵ５１に対してページテーブルマッピングを提供するのみである。この状況では、安全なＩＯＭＭＵ５２は利用可能でない。メモリモードが安全モードである場合、安全なＯＳ５４は、安全なＩＯＭＭＵ５２に対してページテーブルマッピングを提供するのみである。この状況では、安全でないＩＯＭＭＵ５１は利用可能でない。メモリモードごとに利用可能な１つのＩＯＭＭＵを有するのみのこの例は、読み取り及び書き込みの両方がメモリモードごとに制限されたより単純な実装形態を提供する。即ち、ＧＰＵ１２による安全なメモリ５７への読み取り及び書き込みのみが安全モードでは許可され、ＧＰＵ１２による安全でないメモリ５６への読み取り及び書き込みのみが非安全モードでは許可される。これは、安全モードがもはや安全でないメモリ５６に対する読み取りを許可しないという点で、両方のＩＯＭＭＵが利用可能となり得る上記説明したアプローチとはわずかに異なる。
【００５６】
[0063]安全モードにあるときでさえ、ＧＰＵがよりよく安全でないメモリに書き込むことになる、ＧＰＵ１２の最終的な出力生成以外に、一部の書き込みが存在する。それらの書き込みは、ＧＰＵ１２とグラフィックスドライバ７との間の通信トークンを含む。そのようなデータは、タイムスタンプ、ならびにカウンタデータ及びクエリデータなどの他の捕捉データ及び制御データを含む。ＧＰＵ１２は、そのようなタイムスタンプ及びデータをドライバに通信し返すために、メモリ（例えば、安全でないメモリ５６）を使用する。グラフィックスドライバ７が信頼されないので、通信経路に含まれるメモリは、安全でない必要がある（例えば、安全でないメモリ５６）。一例として、ＧＰＵ１２が処理における一定のポイントに到達するとき、ＧＰＵ１２は、タイムスタンプ／シーケンシャルマーカをメモリに書き込む。グラフィックスドライバ７は、ＧＰＵが特定のコマンドストリームにおいてどの程度進行したかを決定するために、この情報を使用する。この決定は、例えば、ＧＰＵ１２が終了すると、ＧＰＵ１２が動作しているメモリオブジェクトをグラフィックスドライバ７が解放することを可能にする。グラフィックスドライバ７に情報を提供するためにＧＰＵ１２がメモリ書き込みを使用する多くの他のタイプの信号伝達（signaling）及び通信経路が存在する。別の例として、グラフィックスドライバ７は、描画コールの後、性能カウンタを報告するようにＧＰＵ１２に要求することができる。次いで、ＧＰＵ１２は、それらの性能カウンタを、グラフィックスドライバ７によって指定されたメモリ位置（例えば、安全でないメモリ５６に）書き込む。
【００５７】
[0064]ＧＰＵ１２が、より安全な安全でないメモリに書き込まない、上記一般的なルールへのこの例外を解決するために、一定のハードウェアブロックが、安全でないメモリアクセスを有するとともに、ＧＰＵが安全モードで稼動しているときに安全なコンテンツに接続又はそれを含むデータ経路及びキャッシュへのアクセスを有しないように構成されるように、ＧＰＵ１２ハードウェアが修正され得る。
【００５８】
[0065]図５は、ＧＰＵ１２が安全モードにあるときでさえ、ＧＰＵ１２の一定のハードウェアブロックのみが、ＧＰＵ１２のメモリインターフェースブロック（ＶＢＩＦ６０）を通じて、次いで安全でないＩＯＭＭＵ５１を通じて、安全でないメモリへの直接アクセスを有する例示的な実装形態を示す。そのようなハードウェアブロック一例は、ＧＰＵのフロントエンドにおけるコマンドプロセッサ（ＣＰ）６２ブロックである。ＣＰ６２は、図３に示されるようなコマンドエンジン３２などのコマンドエンジンを実行し得る。ＣＰ６２は、ＧＰＵドライバ７にメッセージを送信し返す（安全でないメモリを介して）ことを担当する。図５に示されるように、ＣＰ６２は、安全でないＩＯＭＭＵ５１を通じてメモリ（このケースでは、安全でないメモリ）への１つの物理経路のみを有するように構成される。よって、任意の他のハードウェアブロックＧＰＵ１２が安全なコンテンツ上で動作しているかに関わらず、ＣＰ６２は、そのような安全なコンテンツへのアクセスを取得することはない。ＣＰ６２が安全なコンテンツへのアクセスを有しないことを更に保証するために、ＣＰ６２はまた、デバッグバスを含む安全なコンテンツを記憶するために使用され得る任意のレジスタから物理的に独立され得る（例えば、接続を有しない）。図５に示されるように、ＣＰ６２は、Ｌ２キャッシュ６１及びグラフィックスメモリ（ＧＭＥＭ）７０への直接アクセスを有しない。ＧＭＥＭ７０は、ＧＰＵ１２がレンダリングターゲットとして使用する高速メモリ（しばしば、ＳＲＡＭ）、又はＧＰＵ１２の一部の動作モードにおいて表示するためにコンテンツをレンダリングするときのフレームバッファである。Ｌ２キャッシュ６１は、メインメモリ（例えば、安全なメモリ）へのアクセスの数が減少され得るように、直近でアドレス指定されたデータ、又は頻繁に使用されるデータを記憶するために使用される二次的なキャッシュである。Ｌ２キャッシュ６１はまた、プログラム命令をバッファリングするために使用され得る。概して、Ｌ２キャッシュ６１は、ＧＭＥＭ７０よりも大きい。
【００５９】
[0066]ＧＰＵ１２の他のハードウェアブロックはまた、安全でないメモリへのアクセスのみを有するように構成され得る。例えば、プリミティブ制御（ＰＣ）ユニット及び可視性ストリームコンプレッサ（ＶＳＣ）は、安全でないメモリへのアクセスのみを有するように構成され得る。ＰＣユニットは、グラフィックスパイプライン（例えば、図３のグラフィックス３Ｄ処理パイプライン３０）を通じて、どのようにプリミティブ（例えば、三角形）を進展させるか、又は「運ぶ（walks）」かを制御する。ＶＳＣは、可視性ストリームを圧縮及び管理するために、タイルベース又は遅延レンダリング方式において使用される。概して、一部の環境では、安全なメモリに書き込むために、一定のハードウェアブロックを要求することを回避することが有利となり得る。そのような環境は、ハードウェアブロックが安全なコンテンツを書き込まない状況、及びハードウェアブロックが、グラフィックスドライバによって必要とされる制御データを書き込んでいるときの状況を含む。
【００６０】
[0067]図５における他のハードウェアブロックは、上述した技術に基づいて、コンテンツを安全でないメモリ又は安全なメモリに記憶する。即ち、非安全モードでは、データが安全でないメモリから読み取られるのみであり得、又は安全でないメモリに書き込まれるのみであり得る。非安全モードでは、安全なメモリからデータは読み取られないことがある。安全モードでは、データは安全なメモリに書き込まれるのみであり得る。安全モードでは、安全でないメモリにデータは書き込まれないことがある。しかしながら、一部の例における安全モードでは、データは、安全なメモリ及び安全でないメモリの両方から読み取られ得る。メモリモードに従ってメモリにアクセスし得るＧＰＵ１２のそれらの追加的なハードウェアブロックは、頂点フェッチ復号化（ＶＦＤ）ユニット６５、高レベルシーケンサ（ＨＬＳＱ）６６、頂点シェーダ（ＶＳ）６７、画素シェーダ（ＰＳ）６８、及びレンダリングバックエンド（ＲＢ）６９を含む。ＶＦＤ６５は、ＰＣ６３の要求において頂点データをフェッチすることを担当する。ＨＬＳＱ６６は、シェーダプロセッサ（即ち、シェーダコードを実行するＧＰＵ上のプログラマブルプロセッサ）を制御し、実行されているジョブ及びシェーダプロセッサに投入したジョブに対する正確な状況をポピュレートする。ＶＳ６７は、シェーダプロセッサ上で実行する頂点シェーダである。例えば、ＶＳ６７は、図３のグラフィックス３Ｄ処理パイプライン３０の幾何学処理ステージ３４を実行する頂点シェーダコードを含み得る。ＰＳ６８は、シェーダプロセッサ上で実行する画素シェーダである。例えば、ＰＳ６８は、図３のグラフィックス３Ｄ処理パイプライン３０の画素処理パイプライン３８を実行する画素シェーダコードを含み得る。レンダリングバックエンド（ＲＢ）６９は、深度バッファ及びステンシルバッファに対して画素を読み取り及び書き込むことを担当する。
【００６１】
[0068]安全モードから非安全モードにＧＰＵが遷移するとき、ＧＰＵの種々のキャッシュ、メモリ及びレジスタ内に残っている安全なコンテンツが存在し得る。開示の一例では、安全でないメモリモードを使用してＧＰＵ上で安全でないジョブを開始することを可能にする前に、安全なコンテンツを保持し得るＧＰＵ１２の種々の記憶ユニットをクリア及び／又は無効にするための機構が提供される。このコンテキストでは、メモリをクリアすることは、メモリに記憶されたデータが消去及び／又は上書きされることを可能にすることを意味する。実際には、クリアすることは、メモリユニットにおける全てのデータが上書きされ得るように、メモリユニットに対して全てのメモリアドレスの割り振りを解除することを含み得る。他の例では、クリアすることは、任意の前に記憶されたデータがもはや利用可能とならないように、メモリユニットにおける全てのデータを上書きする（例えば、全てを「１」又は「０」で）ことを含み得る。メモリユニットがクリアされない場合、安全でないジョブは、安全なデータの後続の残りを安全でないメモリに複製する。この問題は、安全なソフトウェア技術、ハードウェア技術、又は両方の技術の組み合わせを介して解決され得る。いずれにせよ、この動作は、安全でないドライバによってトリガされるので、安全でないクリア及び遷移（the clearing and transition to unsecure）は、アトミックオペレーション（atomic operation）であり得る。このコンテキストでは、アトミックオペレーションは、非安全モードに再度遷移することとともに（即ち、アトミックに）内部ＧＰＵ１２のメモリをクリアすることを含む。例えば、両方（モードを変更すること、及び内部メモリをクリアすること）を行う単一の「コマンド」が存在するはずであるが、そうでない場合、悪意のあるソフトウェアがまさに非安全モードへの再度の遷移を実行し、クリア動作を実行しない。
【００６２】
[0069]一部の例では、安全モードから非安全モードに遷移するとき、ＧＰＵ１２の全ての記憶ユニットを必ずしもクリアにする必要がないことがある。代わりに、記憶ユニットの一部分のみが、安全なコンテンツへの権限のないアクセスを効率的に防止するためにクリアにされる必要がある。一例として、記憶されたコンテンツのみがクリアにされる必要がある。別の例として、データの一定量のデータおきに（例えば、３２バイトごと）もクリアされ得る。
【００６３】
[0070]図６は、この開示の一例に従ったキャッシュクリア技術を示すブロック図である。図６の例では、安全なソフトウェアの解決法は、安全なモードと非安全モードとの間でＧＰＵを遷移させるために使用される。一例では、ＧＰＵレジスタ（例えば、クリアレジスタ７４）は、ホストＣＰＵ６上で稼動する安全なソフトウェア（例えば、安全なＯＳ５４）の制御下にある。ＧＰＵドライバ７が、ＧＰＵ１２のメモリモードを非安全モードから安全モードに切り替える場合、ＧＰＵドライバ７はまた、Ｌ２キャッシュ６１、ＧＭＥＭ７０、及び他のレジスタ７２を含む、ＧＰＵ１２のキャッシュ、メモリ又はレジスタに残っているいずれかの安全なコンテンツをクリアするために、安全なＯＳ５４における安全なソフトウェアを呼び出す。その時点において、安全なＯＳ５４は最初に、メモリクリア及び／又は無効化命令をクリアレジスタ７４に書き込むことによって、ＧＰＵ１２上でジョブを開始することができる。そのような命令は、クリアされるＧＰＵ１２における残り全ての安全なデータをもたらす。そのような命令は、シェーダプログラム、メモリ書き込み、及び／又はレジスタプログラミング（例えば、ＧＰＵＬ２キャッシュ無効化）の組み合わせであり得る。
【００６４】
[0071]図７は、この開示の別の例に従ったキャッシュクリア技術を示すブロック図である。図７の例では、安全モードと非安全モードとの間でＧＰＵ１２を遷移させるために、ハードウェア解決法が使用される。この例では、外部可視的（例えば、メモリマッピング入力／出力（ＭＭＩＯ））又は内部（例えば、コマンドストリーム）レジスタ７６が、それがグラフィックスドライバ７によって直接書き込まれるように構成され得る。レジスタ７６が書き込まれるとき、（例えば、安全モードから非安全モードに行くとき）、ＧＰＵ１２のハードウェアは、現在の安全なジョブを完了させ、パイプラインを流し（即ち、処理されている任意の残りの安全なコンテンツを除去し）、及びＬ２キャッシュ６１、ＧＭＥＭ７０、及び他のレジスタ７２を含む、安全なコンテンツを含むことができる全てのレジスタ、メモリ及びキャッシュをクリア及び／又は無効化するように構成される。このクリア処理は、ハードウェアに組み込まれ、又は安全にロードされ、及びＧＰＵ１２に存在する保護されたシェーダコードを使用すること含み得る。
【００６５】
[0072]図８は、開示の一例に従った方法を示すフローチャートである。図８の技術は、ＧＰＵ１２によって実装され得る。一部の例では図８の技術の一部は、ＣＰＵ６によって実装され得る。最初に、グラフィックスドライバ７は、安全モード又は非安全モードにＧＰＵ１２を配置するように構成され得る（８０２）。グラフィックスドライバ７はまた、ＧＰＵ１２に、仮想メモリアドレスの第１の範囲及び仮想メモリアドレスの第２の範囲を含む、仮想メモリアドレスの範囲を提供するように構成され得る（８０４）。ＧＰＵ１２は、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするように構成される（８０６）。
【００６６】
[0073]開示の一例では、第１のメモリユニットにアクセスすることは、ＧＰＵ１２が非安全モードにあるとき、ＧＰＵ１２が第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にすること、及びＧＰＵ１２が安全モードにあるとき、ＧＰＵ１２が第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にすることを含む。開示の更なる例では、第１のメモリユニットにアクセスすることは更に、ＧＰＵ１２が非安全モードにあるとき、ＧＰＵ１２が第１のメモリユニットの安全でない部分にのみデータを書き込むことを可能にすること、及びＧＰＵ１２が安全モードにあるとき、ＧＰＵ１２が第１のメモリユニットの安全な部分及び安全でない部分からデータを読み取ることを可能にすることを含む。ＧＰＵ１２が安全モードに配置されるケースでは、ＧＰＵ１２は、安全なメモリ管理ユニットを利用することによって、第１のメモリユニットの安全な部分にデータを書き込み（８０８）、安全なメモリ管理ユニットは、第１のメモリユニットの安全な部分に対するアドレス範囲を含む安全なページテーブルを利用する。ＧＰＵ１２が非安全モードに配置されるケースでは、ＧＰＵ１２は、安全でないメモリ管理ユニットを利用することによって、第１のメモリユニットの安全でない部分からデータを読み取り（８１０）、安全でないメモリ管理ユニットは、第１のメモリユニットの安全でない部分に対するアドレス範囲を含む安全でないページテーブルを利用する。開示の別の例では、ＧＰＵ１２は、ＧＰＵが非安全モード又は安全モードにあるかに関わらず、フロントエンドコマンドプロセッサで第１のメモリの安全でない部分にデータを書き込むように構成され得る。
【００６７】
[0074]開示の一例では、仮想メモリアドレスに従って、仮想メモリアドレスの範囲からデータを読み取り及び書き込むことにおいて、仮想メモリアドレスの範囲は、安全なメモリ管理ユニットによって利用される安全なページテーブルにおける入力（entries）に関連する仮想メモリアドレスの第１の範囲と、安全でないメモリ管理ユニットによって利用される安全でないページテーブルにおける入力に関連する仮想メモリアドレスの第２の範囲とを含む。開示の更なる例では、安全なオペレーティングシステム（例えば、安全なＯＳ５４）は、安全なページテーブルを安全なメモリ管理ユニットに、及び安全でないページテーブルを安全でないメモリ管理ユニットに供給するように構成され得る。
【００６８】
[0075]開示の別の例では、安全なオペレーティングシステムは更に、ＧＰＵが安全モードから非安全モードに遷移するとき、ＧＰＵに、１つ又は複数の内部メモリから少なくとも一部のコンテンツをクリア及び無効化するようにさせる命令を、安全なオペレーティングシステムからＧＰＵのクリアレジスタに送信するように構成され得る。開示の別の例では、安全なオペレーティングシステムは、ＧＰＵが安全モードから非安全モードに遷移するとき、ＧＰＵに、１つ又は複数の内部メモリから少なくとも一部のコンテンツをクリア及び無効化するようにさせる命令を、グラフィックスドライバからＧＰＵのコマンドストリームレジスタに送信するように構成され得る。
【００６９】
[0076]非安全モードに切り替わると、ＧＰＵから安全なコンテンツをクリアするための上述した解決法は例にすぎない。安全モードと非安全モードとの間でのＧＰＵの遷移は、種々の方式で行われ得る。最も単純な手段は、上述したように、グラフィックスドライバ又は安全なドライバサロゲートのいずれかが書き込むことができる、外部的に可視的なレジスタ（例えば、ＭＭＩＯ）である。しかしながら、これは、遷移が発生するはずの時点で、ドライバとＧＰＵのハードウェアとの間でハード同期が必要となることがある。
【００７０】
[0077]ドライバがＧＰＵに提示するコマンドストリーム内でこの切り替えが発生することを可能にすることが好ましいことがある。これは、ドライバが相互にインターリーブされた安全なジョブ及び安全でないジョブを含む、大量の仕事量の列を作る（queue up）ことを可能にする。それらのジョブのプリアンブルは、対象のジョブによって要求されるモードに切り替えるためのＧＰＵに対するコマンドを含む。アプリケーションの観点から、これは、安全又は安全でないのいずれかであったアプリケーションＧＰＵのコンテキストをもたらす。
【００７１】
[0078]１つ又は複数の例では、上述した機能は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実装され得る。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読媒体を備える製品上の１つ又は複数の命令又はコードとして記憶され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、この開示において説明された技術の実装のために命令、コード及び／又はデータ構造を取り出すために１つ又は複数のコンピュータ又は１つ又は複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。例として、及び非限定的に、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又は他の光ディスクストレージ、磁気ディスク記憶装置若しくは他の磁気記憶機器、フラッシュメモリ、又は所望のプログラムコードを命令若しくはデータ構造の形式で搬送もしくは記憶するために使用され得、及びコンピュータによってアクセスされ得る任意の他の媒体を備えることができる。本明細書で使用されるように、ディスク（disk）及びディスク（disc）は、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、デジタル多用途ディスク（ＤＶＤ）、フロッピー（登録商標）ディスク及びブルーレイ（登録商標）ディスクを含み、ディスク（disk）は通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記組み合わせはまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【００７２】
[0079]コードは、１つ又は複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ又は他の同等の集積若しくは個別論理回路などの、１つ又は複数のプロセッサによって実行され得る。加えて、一部の態様では、本明細書で説明された機能性は、専用ハードウェア及び／又はソフトウェアモジュール内で提供され得る。また、技術は、１つもしくは複数の回路、又は論理要素において完全に実装され得る。
【００７３】
[0080]この開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）、又はＩＣの組（例えば、チップセット）を含む、多種多様な機器又は装置で実装され得る。種々のコンポーネント、モジュール、又はユニットは、開示された技術を実行するように構成された機器の機能的態様を強調するために、この開示で説明されるが、異なるハードウェアユニットによる実現を必ずしも要求しているとは限らない。むしろ、上述したように、種々のユニットは、コーデックハードウェアユニットにおいて組み合わされ得、又は適切なソフトウェア及び／又はファームウェアとともに、上述したような１つ又は複数のプロセッサを含む、相互動作するハードウェアユニットの集合によって提供され得る。
【００７４】
[0081]種々の例が説明されてきた。それら及び他の例が、以下の特許請求の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］  グラフィックス処理のための装置であって、
非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするように構成されたグラフィックス処理ユニット（ＧＰＵ）を備え、前記ＧＰＵは、
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするように構成され、及び前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にするように構成されたメモリアクセスコントローラを備える、装置。
［Ｃ２］  前記メモリアクセスコントローラは、前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全でない部分のみにデータを書き込むことを可能にするように構成され、
前記メモリアクセスコントローラは、前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全な部分及び前記安全でない部分からデータを読み取ることを可能にするように構成されている、Ｃ１に記載の装置。
［Ｃ３］  前記メモリアクセスコントローラは、安全なメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全な部分にデータを書き込むように構成され、前記安全なメモリ管理ユニットは、前記第１のメモリユニットの前記安全な部分に対するアドレス範囲を含む安全なページテーブルを利用し、
ここにおいて、前記メモリアクセスコントローラは、安全でないメモリマネージユニットを利用することによって、前記第１のメモリユニットの前記安全でない部分からデータを読み取るように構成され、前記安全でないメモリ管理ユニットは、前記第１のメモリユニットの前記安全でない部分に対するアドレス範囲を含む安全でないページテーブルを利用する、Ｃ１に記載の装置。
［Ｃ４］  前記メモリアクセスコントローラは、仮想メモリアドレスに従って、仮想メモリアドレスの範囲からデータを読み取り及び書き込み、ここにおいて、仮想メモリアドレスの前記範囲は、前記安全なメモリ管理ユニットによって利用される前記安全なページテーブルにおける入力に関連する仮想メモリアドレスの第１の範囲と、前記安全でないメモリ管理ユニットによって利用される前記安全でないページテーブルにおける入力に関連する仮想メモリアドレスの第２の範囲とを含む、Ｃ３に記載の装置。
［Ｃ５］  グラフィックスドライバを記憶した第２のメモリユニットを更に備え、前記グラフィックスドライバは、安全モード又は非安全モードに前記ＧＰＵを配置するように構成される、Ｃ４に記載の装置。
［Ｃ６］  前記グラフィックスドライバは更に、前記ＧＰＵに、仮想メモリアドレスの前記第１の範囲と、仮想メモリアドレスの前記第２の範囲とを含む、仮想メモリアドレスの前記範囲を提供するように構成される、Ｃ５に記載の装置。
［Ｃ７］  前記安全なメモリ管理ユニットと、
前記安全でないメモリ管理ユニットと、
安全なオペレーティングシステム及び前記グラフィックスドライバを実行する中央処理装置（ＣＰＵ）とを更に備え、前記安全なオペレーティングシステムは、前記安全なページテーブルを前記安全なメモリ管理ユニットに、及び前記安全でないページテーブルを前記安全でないメモリ管理ユニットに供給するように構成される、Ｃ６に記載の装置。
［Ｃ８］  前記ＧＰＵは更に、クリアレジスタ及び１つ以上の内部メモリを備え、ここにおいて、前記安全なオペレーティングシステムは、前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、前記１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記クリアレジスタに送信するように構成される、Ｃ７に記載の装置。
［Ｃ９］  前記ＧＰＵは更に、コマンドストリームレジスタ及び１つ以上の内部メモリを備え、ここにおいて、前記グラフィックスドライバは、前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、前記１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記コマンドストリームレジスタに送信するように構成される、Ｃ７に記載の装置。
［Ｃ１０］  前記ＧＰＵは更に、
前記ＧＰＵが前記非安全モード又は前記安全モードにあるかに関わらず、前記第１のメモリの前記安全でない部分にデータを書き込むように構成された１つ以上のハードウェアブロックを備え、ここにおいて、前記１つ以上のハードウェアブロックは、前記第１のメモリユニットの前記安全な部分への読み取りアクセスを有しない、Ｃ１に記載の装置。
［Ｃ１１］  前記１つ以上のハードウェアブロックは、フロントエンドコマンドプロセッサを含む、Ｃ１０に記載の装置。
［Ｃ１２］  グラフィックス処理の方法であって、
グラフィックス処理ユニット（ＧＰＵ）で、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスすることを備え、ここにおいて、アクセスすることは、
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にすることと、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にすることとを備える、方法。
［Ｃ１３］  前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全でない部分のみにデータを書き込むことを可能にすることと、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全な部分及び前記安全でない部分からデータを読み取ることを可能にすることとを更に備える、Ｃ１２に記載の方法。
［Ｃ１４］  安全なメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全な部分にデータを書き込むことと、前記安全なメモリ管理ユニットは、前記第１のメモリユニットの前記安全な部分に対するアドレス範囲を含む安全なページテーブルを利用し、
安全でないメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全でない部分からデータを読み取ることと、前記安全でないメモリ管理ユニットは、前記第１のメモリユニットの前記安全でない部分に対するアドレス範囲を含む安全でないページテーブルを利用するを更に備える、Ｃ１２に記載の方法。
［Ｃ１５］  仮想メモリアドレスに従って、仮想メモリアドレスの範囲からデータを読み取り及び書き込むことを更に備え、ここにおいて、仮想メモリアドレスの前記範囲は、前記安全なメモリ管理ユニットによって利用される前記安全なページテーブルにおける入力に関連する仮想メモリアドレスの第１の範囲と、前記安全でないメモリ管理ユニットによって利用される前記安全でないページテーブルにおける入力に関連する仮想メモリアドレスの第２の範囲とを含む、Ｃ１４に記載の方法。
［Ｃ１６］  グラフィックスドライバで、安全モード又は非安全モードに前記ＧＰＵを配置することを更に備える、Ｃ１５に記載の方法。
［Ｃ１７］  前記グラフィックスドライバで、仮想メモリアドレスの前記第１の範囲及び仮想メモリアドレスの前記第２の範囲を含む、仮想メモリアドレスの前記範囲を前記ＧＰＵに提供することを更に備える、Ｃ１６に記載の方法。
［Ｃ１８］  中央処理装置（ＣＰＵ）上で実行する安全なオペレーティングシステムで、前記安全なページテーブルを前記安全なメモリ管理ユニットに、及び前記安全でないページテーブルを前記安全でないメモリ管理ユニットに供給することを更に備える、Ｃ１７に記載の方法。
［Ｃ１９］  前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記安全なオペレーティングシステムから前記ＧＰＵのクリアレジスタに送信することを更に備える、Ｃ１８に記載の方法。
［Ｃ２０］  前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記グラフィックスドライバから前記ＧＰＵのコマンドストリームレジスタに送信することを更に備える、Ｃ１８に記載の方法。
［Ｃ２１］  前記ＧＰＵが前記非安全モード又は前記安全モードにあるかに関わらず、前記ＧＰＵの１つ以上のハードウェアブロックで、前記第１のメモリの前記安全でない部分にデータを書き込むことを更に備え、ここにおいて、前記１つ以上のハードウェアブロックは、前記第１のメモリユニットの前記安全な部分への読み取りアクセスを有しない、Ｃ１２に記載の方法。
［Ｃ２２］  前記１つ以上のハードウェアブロックは、フロントエンドコマンドプロセッサを含む、Ｃ２１に記載の方法。
［Ｃ２３］  グラフィックス処理に対して構成された装置であって、
グラフィックス処理ユニット（ＧＰＵ）で、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするための手段を備え、ここにおいて、前記アクセスするための手段は、
前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみからデータを読み取ることを可能にするための手段と、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全な部分のみにデータを書き込むことを可能にするための手段とを備える、装置。
［Ｃ２４］  前記ＧＰＵが前記非安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの安全でない部分のみにデータを書き込むことを可能にするための手段と、
前記ＧＰＵが前記安全モードにあるとき、前記ＧＰＵが前記第１のメモリユニットの前記安全な部分及び前記安全でない部分からデータを読み取ることを可能にするための手段とを更に備える、Ｃ２３に記載の装置。
［Ｃ２５］  安全なメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全な部分にデータを書き込むための手段と、前記安全なメモリ管理ユニットは、前記第１のメモリユニットの前記安全な部分に対するアドレス範囲を含む安全なページテーブルを利用し、
安全でないメモリ管理ユニットを利用することによって、前記第１のメモリユニットの前記安全でない部分からデータを読み取るための手段と、前記安全でないメモリ管理ユニットは、前記第１のメモリユニットの前記安全でない部分に対するアドレス範囲を含む安全でないページテーブルを利用するを更に備える、Ｃ２３に記載の装置。
［Ｃ２６］  仮想メモリアドレスに従って、仮想メモリアドレスの範囲からデータを読み取り及び書き込むための手段を更に備え、ここにおいて、仮想メモリアドレスの前記範囲は、前記安全なメモリ管理ユニットによって利用される前記安全なページテーブルにおける入力に関連する仮想メモリアドレスの第１の範囲と、前記安全でないメモリ管理ユニットによって利用される前記安全でないページテーブルにおける入力に関連する仮想メモリアドレスの第２の範囲とを含む、Ｃ２５に記載の装置。
［Ｃ２７］  グラフィックスドライバで、安全モード又は非安全モードに前記ＧＰＵを配置するための手段を更に備える、Ｃ２６に記載の装置。
［Ｃ２８］  前記グラフィックスドライバで、仮想メモリアドレスの前記第１の範囲及び仮想メモリアドレスの前記第２の範囲を含む、仮想メモリアドレスの前記範囲を前記ＧＰＵに提供するための手段を更に備える、Ｃ２７に記載の装置。
［Ｃ２９］  中央処理装置（ＣＰＵ）上で実行する安全なオペレーティングシステムで、前記安全なページテーブルを前記安全なメモリ管理ユニットに、及び前記安全でないページテーブルを前記安全でないメモリ管理ユニットに供給するための手段を更に備える、Ｃ２８に記載の装置。
［Ｃ３０］  前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記安全なオペレーティングシステムから前記ＧＰＵのクリアレジスタに送信するための手段を更に備える、Ｃ２９に記載の装置。
［Ｃ３１］  前記ＧＰＵが前記安全モードから前記非安全モードに遷移されるとき、前記ＧＰＵに、１つ以上の内部メモリからの少なくとも一部のコンテンツをクリア及び無効化することをさせる命令を、前記グラフィックスドライバから前記ＧＰＵのコマンドストリームレジスタに送信するための手段を更に備える、Ｃ２９に記載の装置。
［Ｃ３２］  前記ＧＰＵが前記非安全モード又は前記安全モードにあるかに関わらず、前記ＧＰＵの１つ以上のハードウェアブロックで、前記第１のメモリの前記安全でない部分にデータを書き込むための手段を更に備え、ここにおいて、前記１つ以上のハードウェアブロックは、前記第１のメモリユニットの前記安全な部分への読み取りアクセスを有しない、Ｃ２３に記載の装置。
［Ｃ３３］  前記１つ以上のハードウェアブロックは、フロントエンドコマンドプロセッサを含む、Ｃ３２に記載の装置。
【要約】  この開示は、グラフィックス処理のための技術を提案する。一例では、グラフィックス処理ユニット（ＧＰＵ）は、非安全モード及び安全モードの１つに従って、第１のメモリユニットにアクセスするように構成される。ＧＰＵは、ＧＰＵが非安全モードにあるとき、第１のメモリユニットの安全でない部分のみからデータをＧＰＵが読み取ることを可能にするように構成され、及びＧＰＵが安全モードにあるとき、第１のメモリユニットの安全な部分のみにデータをＧＰＵが書き込むことを可能にするように構成されたメモリアクセスコントローラを備える。【図１】
0005917784.tif 000002
【図２】
0005917784.tif 000003
【図３】
0005917784.tif 000004
【図４】
0005917784.tif 000005
【図５】
0005917784.tif 000006
【図６】
0005917784.tif 000007
【図７】
0005917784.tif 000008
【図８】
0005917784.tif 000009