JP4550878B2 - グラフィックス処理装置 - Google Patents

グラフィックス処理装置 Download PDF

Info

Publication number
JP4550878B2
JP4550878B2 JP2007288982A JP2007288982A JP4550878B2 JP 4550878 B2 JP4550878 B2 JP 4550878B2 JP 2007288982 A JP2007288982 A JP 2007288982A JP 2007288982 A JP2007288982 A JP 2007288982A JP 4550878 B2 JP4550878 B2 JP 4550878B2
Authority
JP
Japan
Prior art keywords
command
processor
processing unit
graphics
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2007288982A
Other languages
English (en)
Other versions
JP2008123520A (ja
Inventor
祥徳 鷲津
基 金子
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2008123520A publication Critical patent/JP2008123520A/ja
Application granted granted Critical
Publication of JP4550878B2 publication Critical patent/JP4550878B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Description

この発明は、グラフィックス処理技術に関する。
パーソナルコンピュータやゲーム専用機において、高品質な3次元コンピュータグラフィックスを用いたゲームやシミュレーションなどのアプリケーションを実行したり、実写とコンピュータグラフィックスを融合させた映像コンテンツの再生を行うなど、高画質のグラフィックスの利用が広がっている。
一般に、グラフィックス処理は、CPUとグラフィックスプロセッシングユニット(GPU)が連携することで実行される。CPUが汎用的な演算を行う汎用プロセッサであるのに対して、GPUは高度なグラフィックス演算を行うための専用プロセッサである。CPUはオブジェクトの3次元モデルにもとづいて投影変換などのジオメトリ演算を行い、GPUはCPUから頂点データなどを受け取ってレンダリングを実行する。GPUはラスタライザやピクセルシェーダなどの専用ハードウェアから構成され、パイプライン処理でグラフィックス処理を実行する。最近のGPUには、プログラムシェーダと呼ばれるように、シェーダ機能がプログラム可能なものもある。
シェーダプログラミングをサポートするために、一般にグラフィックスライブラリが提供されている。既存のグラフィックスライブラリは、GPUのハードウエア特有の機能を隠蔽化し、特定のGPUに依存しないライブラリ関数を提供しているため、アプリケーションから見た場合、ハードウエアとソフトウエアの境界線が不透明である。そのため、プログラマが特定のGPUのハードウエアレベルでグラフィックス処理を制御したい場合など、きめ細かな制御には既存のグラフィックスライブラリは適していない。
また、CPUがグラフィックス処理に関与するシステム構成の場合、CPUが汎用処理に時間を取られたり、GPUとの同期処理に時間がかかる状況では、CPUがボトルネックとなってシステム全体の性能が低下する。
本発明はこうした課題に鑑みてなされたものであり、その目的は、グラフィックスライブラリを用いたプログラミングの柔軟性を高めることにある。また、別の目的は、マルチプロセッサシステムにおいてグラフィックス処理の効率化を図ることにある。
上記課題を解決するために、本発明のある態様のグラフィックス処理装置は、アプリケーションプログラムにもとづいて描画コマンドを生成するメインプロセッシングユニットと、前記メインプロセッシングユニットにより生成される描画コマンド列を保持するコマンドバッファが設けられるメモリと、前記コマンドバッファに保持された描画コマンド列を読み出して描画処理を実行するグラフィックスプロセッシングユニットとを含む。前記メインプロセッシングユニットは、汎用的な処理を実行するメインプロセッサと、グラフィックスに関する演算を実行するサブプロセッサとを含む。前記サブプロセッサは、アプリケーションプログラムにもとづいて描画コマンドを生成する処理を前記メインプロセッサに代わって実行し、生成された描画コマンドを前記コマンドバッファに蓄積するとともに、その生成される描画コマンドの実行に必要なデータも合わせて生成して前記メモリに保持する。
本発明の別の態様もまた、グラフィックス処理装置である。この装置は、アプリケーションプログラムにもとづいて描画コマンドを生成するメインプロセッシングユニットと、前記メインプロセッシングユニットにより生成される描画コマンド列を保持するコマンドバッファが設けられるメモリと、前記コマンドバッファに保持された描画コマンド列を読み出して描画処理を実行するグラフィックスプロセッシングユニットとを含む。前記メインプロセッシングユニットは、汎用的な処理を実行するメインプロセッサと、互いに独立に動作する複数のサブプロセッサとを含む。各サブプロセッサは、プログラムモジュール別に互いに独立に描画コマンド列を生成して前記コマンドバッファに保持し、あるプログラムモジュールに対応する描画コマンド列の最後のコマンドとして、次に実行されるべき別のプログラムモジュールに対応する描画コマンド列の先頭アドレスを飛び先とするジャンプ命令を生成する。
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、プロセッサ、装置、システム、コンピュータプログラム、プログラム製品、記録媒体、データ構造などの間で変換したものもまた、本発明の態様として有効である。
本発明によれば、グラフィックスプログラミングの柔軟性を高め、また、グラフィックス処理の効率を向上させることができる。
実施の形態1
図1は、実施の形態1に係るグラフィックス処理システムの構成図である。このグラフィックス処理システムは、メインプロセッシングユニット100と、グラフィックスプロセッシングユニット200と、メインメモリ120と、ローカルメモリ220とを含む。
メインプロセッシングユニット100は、単一のメインプロセッサであってもよく、複数のプロセッサを含むマルチプロセッサシステムであってもよく、あるいは、複数のプロセッサコアを1個のパッケージに集積したマルチコアプロセッサであってもよい。グラフィックスプロセッシングユニット200は、グラフィックプロセッサコアを搭載したグラフィックチップである。
メインプロセッシングユニット100の入出力ポートとグラフィックスプロセッシングユニット(以下、単に「GPU」という)200の入出力ポートは、入出力インタフェース(以下、「IOIF」と呼ぶ)110で接続されており、メインプロセッシングユニット100とGPU200は互いにIOIF110を介してデータをやりとりすることができる。IOIF110は、非常に高速なインタフェースであり、その帯域幅は、メインプロセッシングユニット100とメインメモリ120の間を結ぶバス122や、GPU200とローカルメモリ220の間を結ぶバス222の帯域幅にほぼ等しい。
グラフィックスライブラリ300は、描画処理を行うために生成されるグラフィックスコマンドを生成および管理するためのライブラリであり、アプリケーション310からこのライブラリを呼び出してグラフィックス処理を実行することができる。また、グラフィックスライブラリ300は、メモリ管理やデータ転送制御の機能を提供し、それらの機能を利用して、アプリケーション310から、メモリマッピングや、ジオメトリ情報、テクスチャ、シェーダプログラムなどのデータのメモリ間転送などを実行することができる。
メインプロセッシングユニット100は、アプリケーション310がグラフィックスライブラリ300を用いて生成した描画コマンドを、メインメモリ120内に設けられたコマンドバッファ10にキューイングする。GPU200は、コマンドバッファ10に蓄積された描画コマンドを順次読み出して処理する。
メインプロセッシングユニット100によるコマンドバッファ10への描画コマンドの書き込みはputコマンドにより実行される。GPU200によるコマンドバッファ10からの描画コマンドの読み出しはgetコマンドにより実行される。コマンドバッファ10に対する描画コマンドの読み書きには、後述のputポインタおよびgetポインタを用いた管理機構が提供されている。また、コマンドバッファ10の読み書きに際し、メインプロセッシングユニット100またはGPU200を待たせるための同期機能が提供されており、アプリケーション310は、メインプロセッシングユニット100からGPU200への処理の流れをきめ細かく制御することができる。
メインプロセッシングユニット100は、オブジェクトの3次元モデルにもとづいて、ポリゴンの頂点座標値、頂点カラー、法線ベクトル、UV値などのジオメトリデータ12を生成し、メインメモリ120に格納する。また、メインプロセッシングユニット100は、ポリゴン表面にマッピングするためのテクスチャ14をメインメモリ120に格納する。さらに、メインプロセッシングユニット100は、ハードディスクなどの記録媒体からシェーダプログラム16を読み込み、メインメモリ120に格納する。
メインメモリ120のメモリ領域はI/Oアドレス空間にメモリマッピングされており、GPU200は、I/Oアドレス空間にメモリマップされたメインメモリ120のメモリ領域をIOIF110経由で読み取ることができる。このように、GPU200は、ローカルメモリ220の他にメインメモリ120へアクセスすることができるため、ジオメトリデータ、テクスチャなどグラフィックス演算に必要なデータをローカルメモリ220にもメインメモリ120にも配置することができる。
ジオメトリデータ12、テクスチャ14およびシェーダプログラム16が格納されたメインメモリ120内のメモリ領域は、IOIF110のコントローラに設けられたメモリ内のI/Oアドレス空間にメモリマッピングされる。GPU200は、IOIF110を介して、I/Oアドレス空間にメモリマッピングされたジオメトリデータ12、テクスチャ14およびシェーダプログラム16を読み出す。
GPU200は、シェーダプログラム16にしたがって、ジオメトリデータ12を用いてポリゴンのラスタライズデータを生成し、ピクセルデータをフレームバッファ20に書き込む。さらに、GPU200は、ポリゴン表面にテクスチャ14をマッピングし、テクスチャマッピング後のピクセルデータをフレームバッファ20に書き込む。
また、GPU200は、ローカルメモリ220内にジオメトリデータ22、テクスチャ24およびシェーダプログラム26が格納されている場合、ローカルメモリ220からこれらのデータを読み出し、グラフィックス演算に利用する。これらのデータは、メインメモリ120からローカルメモリ220にあらかじめDMA転送してもよく、GPU200がIOIF110経由でメインメモリ120から読み出し、ローカルメモリ220に格納してもよい。
図2(a)〜(c)は、メインプロセッシングユニット100がグラフィックスライブラリ300を用いて生成する描画コマンドを説明する図である。一般に、描画コマンドは、図2(a)のようにインストラクション(命令)とデータを含む。ここで、インストラクションとは、GPU200が使用するインストラクションセットに含まれるものであり、グラフィックスチップに依存する。グラフィックスライブラリ300は、グラフィックス関数をGPU200で実行可能なインストラクションに変換する機能を提供する。
なお、描画コマンドは、図2(b)のようにインストラクションのみからなる場合もあり、図2(c)のように、インストラクションに対して複数のデータが付加される場合もある。以下、描画コマンドを単に「コマンド」という。
図3は、コマンドバッファ10に対するコマンドの読み書きの管理機構を説明する図である。メインプロセッシングユニット100は、putコマンドを発行してコマンドバッファ10にコマンドを書き込む。一方、GPU200は、getコマンドを発行してコマンドバッファ10からコマンドを読み出す。同図では、コマンドバッファ10の上から下へ順にコマンドが書き込まれ、書き込まれたコマンドが上から下へ順に読み出される。コマンドバッファ10は、一例としてリングバッファで実装されている。
コマンドバッファ10の読み書きを管理するために、putポインタとgetポインタが用いられる。putポインタは、メインプロセッシングユニット100が最後にコマンドの書き込みを完了させたコマンドバッファ10の位置(アドレス)を指し、getポインタは、GPU200が次にコマンドを読み出すコマンドバッファ10の位置(アドレス)を指す。putポインタ、getポインタはそれぞれ書き込み(write)ポインタ、読み出し(read)ポインタと呼ばれることもある。
メインプロセッシングユニット100は、コマンドバッファ10にコマンドの書き込みが終わると、putポインタをその書き込んだコマンドの位置に進める。GPU200は、getポインタがputポインタと異なる位置を指していれば、コマンドバッファ10からコマンドを読み出す。GPU200は、コマンドバッファ10からコマンドの読み出しが終わると、getポインタを一つ先に進める。getポインタがputポインタを追いかけるようにしてコマンドバッファ10からコマンドが読み込まれ、getポインタがputポインタと同じ位置を示したとき、すなわち読み出すコマンドがなくなったとき、GPU200はコマンドの読み出しを停止し、新たにコマンドが書き込まれるのを待つ。アプリケーション310は、コマンドをコマンドバッファ10に格納した後、putポインタを進めることで、GPU200に新しいコマンドを読ませることができる。
putポインタ、getポインタは、GPU200が管理するレジスタファイル210のputレジスタ211、getレジスタ212にそれぞれマップされており、GPU200はこれらのレジスタの値を参照することでputポインタとgetポインタが指すコマンドバッファ10のアドレスを取得することができる。
次にアプリケーションプログラムにおいてグラフィックスライブラリ300が提供するグラフィックス関数を呼び出した場合に、グラフィックスライブラリ300内部でグラフィックス関数が描画コマンドに変換され、コマンドバッファ10に描画コマンドが蓄積される仕組みを説明する。まず、比較のために、一般的なグラフィックスライブラリにより描画コマンドが生成される仕組みを説明した後で、本実施の形態のグラフィックスライブラリ300により描画コマンドが生成される仕組みを説明する。
図4Aは、一般的なグラフィックスライブラリにより描画コマンドが生成される様子を示す図である。上から下へプログラムの進行が示されている。コマンドバッファ10には最初、2つのコマンドY、Zが格納されている(コマンド列40)。プログラムにおいて関数Aが呼び出されると、ライブラリ内部において、描画属性を格納したステートテーブルが更新されるが、この時点ではまだ描画コマンドは生成されない。したがって、コマンドバッファ10には2つのコマンドY、Zだけが格納された状態が続く(コマンド列41)。
次に、プログラムの進行に伴い、関数B、Cが呼び出されるが、ライブラリ内部においてステートテーブルが更新されるだけで、コマンドは生成されず、コマンドバッファ10には2つのコマンドY、Zだけが格納された状態がさらに続く(コマンド列42、43)。
最後に、描画関数が読み出されると、ライブラリ内部に保持されたステートテーブルを参照してコマンドA〜Gが生成され、コマンドバッファ10に蓄積される。その結果、コマンドバッファ10には、既に存在する2つのコマンドY、Zに続いて、新しく生成されたコマンドA〜Gが格納された状態になる(コマンド列44)。
このように、一般的なグラフィックスライブラリ、たとえば商用のシェーダプログラミング言語のライブラリや、オープンソースで提供されているグラフィックスライブラリでは、ライブラリ内部で描画属性を保持し、描画属性を更新しながら、ライブラリにとって都合のよいタイミングでグラフィックスチップ独自のインストラクションを生成している。グラフィックスライブラリ内部に保持される描画属性として、背景色やブレンディング関数のパラメータ、テクスチャの属性などがある。
グラフィックスチップによってグラフィックス関数を実現する描画コマンドが異なり、グラフィックスチップ独自の拡張がなされていることもある。そこで既存のグラフィックスライブラリは、グラフィックスチップに依存したインストラクションを隠蔽するため、描画属性をステートテーブルに保持し、呼び出されるグラフィックス関数に応じて、ステートテーブルに保持された描画属性を更新し、最終的にグラフィックスチップに適した描画コマンドを生成する。このようなグラフィックスライブラリの機能は、プログラマがグラフィックスチップの独自仕様を意識しないでアプリケーションプログラムを書くことができる点で利便性があり、特に、高機能化が進み、インストラクションセットが豊富となったグラフィックスチップに対するプログラミングを容易にする。また、グラフィックスチップのハードウエアでサポートされていない機能をソフトウエアで補ってCPUで実行することも可能となる。
しかしながら、既存のグラフィックスライブラリには次のようなデメリットもある。
(1)関数単位の処理が遅い。ライブラリ内部で保持する描画属性を更新し、他の関連する情報と矛盾しないか、テストする必要があり、CPUによる計算時間がかかるからである。
(2)アプリケーションから見た場合、ソフトウエアとハードウエアの境界線が不明確である。すなわち、アプリケーションからは、呼び出したグラフィックス関数にもとづいてグラフィックスライブラリがいつ、どのような描画コマンドが生成するか、不透明である。どこまでがグラフィックスチップの機能で、どこからがソフトウエアで処理されているかがわからないため、デバッグが困難である。また、高速化のためにプログラムをチューニングしたり、性能低下の原因を解析することが難しい。
(3)メモリに対する操作自由度が低い。コマンドバッファがいつ、どのように作られるかが不透明であるため、グラフィックスライブラリ内でメモリ管理を行ったり、同期を取ることが難しい。
(4)グラフィックスライブラリは複数の描画コマンドリストを生成することができない。
このように、既存の一般的なグラフィックスライブラリは、グラフィックス機能をハードウエアレベルで管理したり、細かく制御したいというプログラマの高度なニーズには十分に応えることができない。そこで、本実施の形態では、GPU200に特化したグラフィックスライブラリ300を提供し、プログラミングの自由度を高め、また、メモリ管理が自由にできるようにしている。
図4Bは、実施の形態のグラフィックスライブラリ300により描画コマンドが生成される様子を示す図である。図4Aで説明した既存のグラフィックスライブラリとは違い、本実施の形態のグラフィックスライブラリ300は、描画属性を一切保持しないため、各関数A、B、Cが読み出される度に、グラフィックスライブラリ300内部で描画コマンドが生成される。
コマンドバッファ10には最初、2つのコマンドY、Zが格納されている(コマンド列50)。プログラムにおいて関数Aが呼び出されると、グラフィックスライブラリ300内部においてGPU200用のコマンドAが生成され、コマンドバッファ10に蓄積される(コマンド列51)。
同様に、関数Bが呼び出されると、グラフィックスライブラリ300内部においてGPU200用のコマンドBが生成され、コマンドバッファ10に蓄積される(コマンド列52)。さらに、関数Cが呼び出されると、グラフィックスライブラリ300内部においてGPU200用のコマンドC、Dが生成され、コマンドバッファ10に蓄積される(コマンド列53)。
最後に、描画関数が読み出されると、グラフィックスライブラリ300内部においてGPU200用のコマンドE〜Iが生成され、コマンドバッファ10に蓄積される(コマンド列54)。
図4Aおよび図4Bの違いを具体的な例で説明する。既存のグラフィックスライブラリであるOpenGL(Open Graphics Library)を用いて、次のプログラムを実行するとする。
glBlendColor(); //ブレンド色の設定
glAlphaFunc(); //アルファテスト関数の設定
glViewport(); //ビューポート領域の設定
glDepthRange(); //Z値と奥行き値の対応関係の設定
glFrontFace(); //ポリゴンの表裏の定義
glScissor(); //シザリングボックスの設定
glDrawElement(); //プリミティブのレンダリング
各関数glBlendColor()、glAlphaFunc()、glViewport()、glDepthRange()、glFrontFace()、glScissor()が呼び出されると、グラフィックスライブラリ内で、ブレンド色、アルファテスト関数、ビューポート領域、Z値と奥行き値の対応関係、ポリゴンの表裏、シザリングボックスといった描画属性が設定され、最後に描画関数glDrawElement()が呼び出された時点で初めて、描画属性をもとにしてグラフィックスチップ専用の描画コマンドが生成される。
既存のグラフィックスライブラリでは、関数の呼び出し毎にライブラリ内で保持された描画属性が更新される。最終的に描画関数が呼び出される前に呼び出されたライブラリ関数によって描画属性がどのような状態にあるかによって実際に生成される描画コマンドが異なる。既存のグラフィックスライブラリでは描画属性情報を内部的に抱えているため、ある関数を呼び出して描画属性が変更されると、その変更された描画属性が次の関数の呼び出しにも引き継がれてしまうからである。
また、ライブラリ関数の間に依存関係があり、描画属性が上書きされる場合、ライブラリ関数の呼び出し順序によって、最終的に生成される描画コマンドが異なる。たとえば、テクスチャ画像を設定する関数glTexImage2D()とテクスチャパラメータを設定する関数glTexParameter()を呼び出す場合を例に説明すると、先にglTexImage2D()を呼び出してテクスチャ画像の属性を設定してから、次にglTexParameter()を呼び出してテクスチャパラメータを設定する場合と、先にglTexParameter()を呼び出してテクスチャパラメータを設定したから、次にglTexImage2D()を呼び出してテクスチャ画像の属性を設定する場合とでは、最終的にグラフィックスチップで実行されるべき描画コマンドが異なることになる。
一方、本実施の形態のグラフィックスライブラリ300を用いて、同様のプログラムを書くと次のようになる。
gcmSetBlendColor(); //ブレンド色の設定
gcmSetAlphaFunc(); //アルファテスト関数の設定
gcmSetViewport(); //ビューポート領域の設定
gcmSetFrontFace(); //ポリゴンの表裏の定義
gcmSetScissor(); //シザリングボックスの設定
gcmSetDrawIndex(); //プリミティブのレンダリング
各関数gcmSetBlendColor()、gcmSetAlphaFunc()、gcmSetViewport()、gcmSetFrontFace()、gcmSetScissor()が呼び出される時点で、グラフィックスライブラリ300内で、ブレンド色設定コマンド、アルファテスト関数設定コマンド、ビューポート領域設定コマンド、ポリゴンの表裏設定コマンド、シザリングボックス設定コマンドがそれぞれ生成される。最後に描画関数gcmSetDrawIndex()が呼び出される時点で、プリミティブをレンダリングするためのコマンドが生成される。グラフィックスライブラリ300内部では描画属性が一切保持されず、ライブラリ関数が呼び出されると、ただちに各種の設定コマンドに変換される。
本実施の形態のグラフィックスライブラリ300では、ライブラリ内部に描画属性を保持しないため、ライブラリ関数は描画属性の状態に影響されない。以前の他のライブラリ関数の呼び出しによってどのような描画コマンドが設定されようとも、同じライブラリ関数に対して常に同じ描画コマンドが生成される。また、ライブラリ関数の呼び出し順序を変えても、生成される描画コマンドに違いは生じない。たとえば、テクスチャ画像を設定する関数gcmSetTexture()、テクスチャのアドレスを設定する関数gcmSetTextureAddress()、テクスチャのフィルタリングを設定する関数gcmSetTextureFilter()を呼び出す場合、gcmSetTexture()、gcmSetTextureAddress()、gcmSetTextureFilter()の順に呼び出しても、gcmSetTextureFilter()、gcmSetTexture()、gcmSetTextureAddress()の順に呼び出しても、描画コマンドは同一のものが生成される。
ライブラリ内部に描画属性を保持しないことにより、グラフィックスライブラリ300が複数のコマンドバッファにコマンドを生成することが可能になる。グラフィックスライブラリ300が第1のコマンドバッファにコマンドを生成し、次に第2のコマンドバッファにコマンドを生成し、さらに第1のコマンドバッファに戻ってコマンドを生成するというように、第1のコマンドバッファと第2のコマンドバッファを切り替えながらそれぞれのコマンドバッファにコマンドを生成する。このような場合でもグラフィックスライブラリ300は、内部的に描画属性を抱えていないので、2つのコマンドバッファが互いに影響を及ぼすことはなく、2つのコマンドバッファに独立にコマンドを生成していくことができる。
一方、既存のグラフィックスライブラリでは、内部的に描画属性を保持しているため、第1のコマンドバッファに生成するコマンドのためにある描画属性を変更し、続いて第2のコマンドバッファにコマンドを生成する場合、第1のコマンドバッファで設定した描画属性が第2のコマンドバッファのコマンド生成に引き継がれてしまう。既存のグラフィックスライブラリが、本実施の形態のグラフィックスライブラリ300のように2つのコマンドバッファに独立にコマンドを生成するためには、次のようにする必要がある。既存のグラフィックスライブラリが第1のコマンドバッファにコマンドを生成し、次に第2のコマンドバッファにコマンドを生成し、さらに第1のコマンドバッファに戻ってコマンドを生成するとき、第2のコマンドバッファにコマンドを生成したときに設定した描画属性をリセットし、第1のコマンドバッファにコマンドを生成するときの描画属性の設定状態に戻す。このようにコマンドバッファを切り替える度に描画属性の設定を元に戻すのは計算時間やメモリ量の面で効率的ではないため、既存のグラフィックスライブラリでは、一つのコマンドバッファにコマンドを生成するのが現実的であり、複数のコマンドバッファにコマンドを生成できるようには構成されていないのが通常である。
グラフィックスライブラリ300では、ライブラリ関数がグラフィックスチップ専用の描画コマンドに即座に変換されるため、GPU200のハードウエアでサポートされていない機能をメインプロセッシングユニット100においてソフトウエア処理することで機能を補うことは難しくなる。しかし、その反面、グラフィックスライブラリ300には以下のようなメリットがある。
(1)関数単位の処理が高速である。ライブラリ内部で描画属性を保持しないため、描画属性の情報を検証する必要がないからである。
(2)アプリケーションから見た場合、ソフトウエアとハードウエアの境界線が明確であり、プログラマは、呼び出されたグラフィックス関数にもとづいてグラフィックスライブラリがどのタイミングでどのような描画コマンドを生成するかを正確に把握することができ、デバッグが容易になる。また、高速化のためにプログラムをチューニングしたり、性能低下の原因を解析することが容易である。
(3)グラフィックスライブラリをアプリケーションのメモリ管理機構に組み込むことができる。コマンドバッファがいつ、どのように作られるかが明確であるため、グラフィックスライブラリ内でメモリ管理を行ったり、同期を取ることが容易になる。
(4)グラフィックスライブラリは複数の描画コマンドリストを生成することができる。
(5)基本的には非同期に動作するGPU200とメインプロセッシングユニット100間のやりとりがプログラマにとって明確になるため、時間軸に沿った処理の流れをトレースすることが可能になる。
(6)ハードウエアに対する描画属性の設定をアプリケーション側でトラックすることができるようになる。これによりプログラマがアプリケーションの性能をハードウエアレベルで細かくチューニングすることが可能になる。
以下、グラフィックスライブラリ300において複数の描画コマンドリストを用いる方法とその応用例を説明する。
図5は、コマンドバッファ10のフロー制御を説明する図である。グラフィックスライブラリ300は、ジャンプ、コール/リターンというフロー制御に関するコマンドをサポートしている。ジャンプは、パラメータで指定したアドレスへgetポインタを飛ばすコマンドであり、これによって任意の位置のコマンドリストをGPU200に読ませることが可能になる。コールは、ジャンプ同様にパラメータで指定したアドレスへgetポインタを飛ばして、GPU200に飛び先のコマンドリストの読ませる。コールはリターンと対に用いられ、コールの次に続くコマンドのアドレスがリターンコマンドの戻りアドレスに設定される。
同図には、次のようなフロー制御の一例が示されている。(1)コマンドバッファ10内のコマンドリストにおいてジャンプコマンドが実行され、別のコマンドリスト11に飛ぶ。(2)飛び先のコマンドリスト11においてコールコマンドが実行され、さらに別のコマンドリスト13に飛ぶ。(3)コール先のコマンドリスト13内でリターンコマンドが実行され、コール元のコマンドリスト11に戻る。(4)コール元のコマンドリスト11内でジャンプ命令が実行され、ジャンプ先のコマンドバッファ10に飛ぶ。
ジャンプコマンドやコールコマンドを用いて複数のコマンドリストを自在につなげることでプログラムの流れを制御することができるようになる。また、プログラムをモジュール化してモジュール毎にコマンドリストを作って保持しておき、モジュール単位のコマンドリストをジャンプコマンドやコールコマンドで参照することで、コマンドリストを再利用することができるようになる。
図6(a)、(b)は、複数のコマンドリストをジャンプコマンドでつなぐ様子を示す図である。図6(a)に示すように、第1コマンドリスト30のジャンプAは、第2コマンドリスト31の先頭アドレスに飛ぶコマンドである。第2コマンドリスト31のジャンプBは、第3コマンドリスト32の先頭アドレスに飛ぶコマンドである。第3コマンドリスト32のジャンプCは、第4コマンドリスト33の先頭アドレスに飛ぶコマンドである。これにより、第1、第2、第3、第4コマンドリスト(符号30、31、32、33)の順にコマンドがGPU200により読み出されて実行される。
図6(b)に示すように、ジャンプコマンドの飛び先のアドレスを変更することで、コマンドリストの実行順序を簡単に変更することができる。第1コマンドリスト30のジャンプAの飛び先を第3コマンドリスト32の先頭アドレスに変更し、第3コマンドリスト32のジャンプCの飛び先を第2コマンドリスト31の先頭アドレスに変更する。これにより、第1、第3、第2、第4コマンドリスト(符号30、32、31、33)の順にコマンドがGPU200により読み出されて実行される。
図7は、ジャンプコマンドによりループ処理を実現する様子を示す図である。第1コマンドリスト30のジャンプAにより、第2コマンドリスト31の先頭アドレスに飛ぶ。第2コマンドリスト31のジャンプBにより、第3コマンドリスト32の先頭アドレスに飛ぶ。第3コマンドリスト32のジャンプCにより、第4コマンドリスト33の先頭アドレスに飛ぶ。第4コマンドリスト33のジャンプDにより、第1コマンドリスト30の先頭アドレスに飛ぶ。これにより、第1〜第4コマンドリスト(符号30〜33)をこの順に繰り返し実行するループ処理が実現される。
図8(a)、(b)は、ジャンプコマンドによりコマンドリストが再利用される仕組みを説明する図である。図8(a)は、比較のため、コマンドリストを再利用しない場合を示す。コマンドリストCA1は、繰り返し利用されるプログラムモジュールXに対応するコマンド列であり、4つのコマンドW、X、Y、Zを含む。コマンドリストCA1の最後のジャンプA1により、次のコマンドリストCBに飛ぶ。コマンドリストCBの最後のジャンプBにより、さらにコマンドリストCCに飛ぶ。
コマンドリストCCの後、プログラムモジュールXが再び呼び出され、コマンドリストCA1と同じ4つのコマンドW、X、Y、Zを含むコマンドリストCA2が新たに生成される。コマンドリストCCの最後のジャンプCの飛び先は、新たに生成されたコマンドリストCA2の先頭アドレスに設定される。
新たに生成されたコマンドリストCA2の最後のジャンプA2の飛び先は、次に実行されるコマンドリストCDの先頭アドレスに設定される。コマンドリストCDの後、プログラムモジュールXが再び呼び出されるが、ここでもまたコマンドリストCA1と同じ4つのコマンドW、X、Y、Zを含むコマンドリストCA3が新たに生成され、コマンドリストCDの最後のジャンプCDの飛び先は、新たに生成されたコマンドリストCA3の先頭アドレスに設定される。新たに生成されたコマンドリストCA3の最後のジャンプA3の飛び先は、次に実行されるコマンドリストCEの先頭アドレスに設定される。
このように、同一のプログラムモジュールXが繰り返し呼び出される場合に同じコマンドリストを繰り返し生成することは非効率である。そこで、本実施の形態では図8(b)のように、最初に作られたコマンドリストCAを再利用する。図8(a)とは違い、最初に作られたコマンドリストCAは再利用に備えてコマンドバッファに保持される。コマンドリストCCの後、プログラムモジュールXが呼び出されると、コマンドリストCAが再利用され、コマンドリストCCの最後のジャンプCの飛び先はコマンドリストCAの先頭アドレスに設定される。再利用されるコマンドリストCAの最後のジャンプA2の飛び先は、次のコマンドリストCDの先頭アドレスに設定される。
コマンドリストCDの後、再度プログラムモジュールXが呼び出されるが、既に存在するコマンドリストCAが再利用され、コマンドCDの最後のジャンプDの飛び先はコマンドリストCAの先頭アドレスに設定される。再利用されるコマンドリストCAの最後のジャンプA3の飛び先は、次のコマンドリストCEの先頭アドレスに設定される。
図8(b)では、再利用されるコマンドリストCAの先頭にジャンプコマンドで飛ぶようにしたが、ジャンプコマンドの代わりにコールコマンドを用いてコマンドリストCAの先頭に飛ぶようにしてもよい。この場合、呼び出し先のコマンドリストCAの最後にリターンコマンドが実行され、いったんコール元に戻り、その後、次のコマンドリストに飛ぶことになる。
以上述べたように、グラフィックスライブラリ300は、複数のコマンドリストを生成して、自在につなげたり、再利用することができる。コマンドリスト毎に独立したコマンドバッファを用いてもよく、一つのコマンドバッファに複数のコマンドリストを格納してもよい。
グラフィックスライブラリ300は、プログラムモジュール毎に独立したコマンドバッファを用いてコマンドリストを生成することができる。たとえば、描画対象のオブジェクト毎に異なるコマンドバッファを用いたり、背景描画用に別のコマンドバッファを用いることができる。これにより、描画処理をコンポーネント化したり、分業することができる。また、オブジェクト毎に用意されたコマンドバッファを適宜選択することにより、描画対象となるオブジェクトを変更してシーンの再構成を容易に行うことができる。
一度生成したコマンドリストを再利用することにより、メモリの利用効率が向上し、また、メインプロセッシングユニット100によるコマンド生成処理の負担が大幅に削減される。
なお、メインプロセッシングユニット100がマルチプロセッサである場合や、マルチスレッドなどにより並列処理が可能である場合、複数のコマンドリストは並列に生成されてもよい。グラフィックスライブラリ300が複数のコマンドバッファを独立に設定できることから、マルチプロセッサまたはマルチスレッドにより、プログラムを並列実行し、コマンドリストの生成を並列化することができる。
実施の形態2
図9および図10は、実施の形態2に係るグラフィックス処理システムの構成図である。実施の形態2のメインプロセッシングユニット100は、メインプロセッサ102とサブプロセッサ104を含むマルチプロセッサである。メインプロセッサ102は、汎用的な処理を実行するプロセッサである。一方、サブプロセッサ104は、グラフィックスに関する演算を実行するプロセッサであり、たとえば頂点シェーダやテクスチャマッピングなどのグラフィックス専用の機能を実行するのに適したプロセッサである。
実施の形態2では、実施の形態1のメインプロセッシングユニット100とGPU200の協調動作について説明する。実施の形態1で説明した構成と動作は実施の形態2についても当てはまるため、重複する説明は省略する。
図9は、メインプロセッサ102がグラフィックス処理に関与し、メインプロセッサ102、サブプロセッサ104、およびGPU200が協調動作する構成である。
アプリケーションプログラムにしたがって、サブプロセッサ104は描画コマンドの実行に必要なジオメトリデータ12とテクスチャ14を生成する(符号61)。サブプロセッサ104は描画コマンドの実行に必要なデータの生成が終わったことをメインプロセッサ102に通知する(符号62)。メインプロセッサ102は、メインプロセッサ102からの通知を受けて、コマンドバッファ10に描画コマンドを生成する(符号63)。
このように、描画コマンドの実行に必要なジオメトリデータ12やテクスチャ14がサブプロセッサ104によって生成された後、メインプロセッサ102において描画コマンドが生成されることになるため、サブプロセッサ104からメインプロセッサ102への通知によって同期を取ることが必要になる。
メインプロセッサ102により描画コマンドの生成が終わると、メインプロセッサ102は、GPU200に対して、メインメモリ120の読み出し先アドレス、読み出しサイズ、読み出しタイミングを指定することで、GPU200にコマンドバッファ10に蓄積されたコマンドを読ませる。実施の形態1では、putポインタとgetポインタを用いてコマンドバッファ10に対する読み書きを管理する実装例を説明した。コマンドバッファ10に対する読み書き以外にも、描画処理の終了通知や描画処理途中でラインタイムに更新される描画属性情報の取得などにおいても、メインプロセッサ102とGPU200間の同期処理が必要になる。
メインプロセッサ102とGPU200間の同期処理のために、メインプロセッサ102はGPU200のレジスタファイル210内の専用レジスタ213にデータを書き込むことで通知を行う。あるいは、メインメモリ120内の共有領域18にメインプロセッサ102とGPU200がデータを読み書きすることにより、メインプロセッサ102とGPU200間の同期処理がなされてもよい。
図9の構成では、メインプロセッサ102が描画コマンドを生成するため、メインプロセッサ102の処理負荷が増え、システム全体の処理性能が低下する。また、メインプロセッサ102とサブプロセッサ104間の同期処理と、メインプロセッサ102とGPU200間の同期処理が必要である。メインプロセッサ102が別の処理をしているとき、同期処理のレイテンシが大きくなり、グラフィックス処理のリアルタイム性が損なわれる。
ゲームなどのリアルタイムアプリケーションでは、メインプロセッサ102の役割が増えてきている。メインプロセッサ102は、グラフィックス処理とディスプレイ出力、音声出力、音声認識や画像認識などの認識処理、物理シミュレーションなどのシミュレーション処理、各種入出力デバイスの制御、映像や音声などの符号化や復号などのストリーミング処理、人工知能、セキュリティ処理などを行う。このため、メインプロセッサ102がボトルネックになってアプリケーションの性能が決まってしまう。そこでメインプロセッサ102にしかできないI/O処理やセキュリティ処理などはメインプロセッサ102に任せ、メインプロセッサ102からグラフィックスに係る処理をオフロードしてメインプロセッサ102の処理負荷を軽減する。
グラフィックスはユーザの目に見える部分であり、高い品質が要求され、処理するデータ量も多いから、グラフィックス処理をメインプロセッサ102からオフロードすることによる効果は大きく、メインプロセッサ102を本来の汎用処理に専念させることができる。
メインプロセッサ102を使用しないで描画処理を行うシステムを構築するためには、描画コマンドの生成、コマンドバッファ10の制御、およびGPU200との同期処理をメインプロセッサ102をメインプロセッサ102を介さずに実現する必要がある。
図10は、メインプロセッサ102がグラフィックス処理に関与せず、サブプロセッサ104とGPU200が協調動作する構成である。
サブプロセッサ104は、描画コマンドに必要なジオメトリデータ12とテクスチャ14を生成する(符号61)とともに、メインプロセッサ102に代わって描画コマンドもコマンドバッファ10に生成する(符号63)。サブプロセッサ104が描画コマンドの生成を行うから、図9のようにサブプロセッサ104からメインプロセッサ102への通知を行う必要はない。
コマンドバッファ10の制御については、サブプロセッサ104が生成された描画コマンドリストに関する情報をGPU200に通知することで行われる。この通知は、サブプロセッサ104がGPU200のレジスタをDMAにより更新することで行われる。通知のタイミングは描画コマンドを生成するサブプロセッサ104が制御すればよいため、メインプロセッサ102を介在させて同期を取る必要はない。
GPU200との同期処理についても、メインプロセッサ102を介在させることなく、サブプロセッサ104が直接、GPU200と同期を取ればよい。同期を取る手段として、サブプロセッサ104がGPU200のレジスタファイル210の専用レジスタ213を制御する方法(符号70)、メインメモリ120内の共有領域18をサブプロセッサ104とGPU200が読み書きする方法、GPU200がサブプロセッサ104に割り込みを行う方法(符号72)がある。メインプロセッサ102を同期処理に介在させなくて済むため、メインプロセッサ102がボトルネックとなってリアルタイム性が損なわれる状況を回避することができる。
実施の形態3
図11は、実施の形態3に係るグラフィックス処理システムの構成図である。実施の形態3のメインプロセッシングユニット100は、メインプロセッサ102と複数のサブプロセッサ104a〜104dを含むマルチプロセッサである。実施の形態2と同様、メインプロセッサ102は汎用プロセッサであり、サブプロセッサ104a〜104dは汎用処理以外の処理、ここではグラフィックス処理を担当するプロセッサである。
複数のサブプロセッサ104a〜104dは同一のインストラクションセットを実行する同質(homogeneous)のプロセッサである。メインプロセッシングユニット100全体で見た場合は、メインプロセッサ102とサブプロセッサ104a〜104dは互いに異種(heterogeneous)のプロセッサであるから、メインプロセッシングユニット100全体としては異種混合のマルチプロセッサである。メインプロセッシングユニット100は、これらのプロセッサを1つのパッケージに集積したマルチコアプロセッサであってもよい。
各サブプロセッサ104a〜104dは、それぞれ独立にコマンドバッファ10a〜10dに描画コマンドリストを生成する。これによりコマンドリストの並列生成が可能になる。実施の形態1で説明したように、複数のコマンドリストをジャンプコマンドでつなげることができる。また、あるサブプロセッサで生成されたコマンドリストを別のサブプロセッサで再利用することもできる。サブプロセッサ104a〜104dが同一のインストラクションセットをサポートする同質のプロセッサであることから、各サブプロセッサで生成したコマンドバッファを連携させたり、再利用することが可能になる。
GPU200は、サブプロセッサ104a〜104dにより生成された複数のコマンドリストをメインメモリ120から読み出して実行する。実施の形態2で説明したように、メインプロセッサ102はグラフィックス処理に関与せず、I/Oなどの汎用処理をもっぱら行う。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
実施の形態では、アプリケーションプログラムの実行時に、メインプロセッシングユニット100によりリアルタイムで描画コマンドが生成される場合を説明したが、アプリケーションプログラムを実行するのに先立ち、オフラインでメインプロセッシングユニット100が描画コマンドを生成し、前もって描画コマンドリストを記録装置に記録しておいてもよい。アプリケーションプログラムの実行時に、メインプロセッシングユニット100が記録装置から描画コマンドリストを取得してメインメモリ120にロードし、GPU200が描画コマンドリストからコマンドを読み出して実行する。ゲームなどのリアルタイム性の高いアプリケーションでも、定型的に実行される処理についてはあらかじめオフラインで描画コマンドリストを生成しておけば、メインプロセッシングユニット100の処理負荷を軽減することができ、リアルタイムで実行すべきグラフィックス処理により多くの計算資源を当てることができるようになる。
実施の形態1に係るグラフィックス処理システムの構成図である。 図2(a)〜(c)は、図1のメインプロセッシングユニットがグラフィックスライブラリを用いて生成する描画コマンドを説明する図である。 実施の形態1に係るコマンドバッファに対するコマンドの読み書きの管理機構を説明する図である。 一般的なグラフィックスライブラリにより描画コマンドが生成される様子を示す図である。 実施の形態1のグラフィックスライブラリにより描画コマンドが生成される様子を示す図である。 実施の形態1に係るコマンドバッファのフロー制御を説明する図である。 図6(a)、(b)は、複数のコマンドリストをジャンプコマンドでつなぐ様子を示す図である。 ジャンプコマンドによりループ処理を実現する様子を示す図である。 図8(a)、(b)は、ジャンプコマンドによりコマンドリストが再利用される仕組みを説明する図である。 実施の形態2に係るグラフィックス処理システムの構成図であり、メインプロセッサがグラフィックス処理に関与し、メインプロセッサ、サブプロセッサ、およびグラフィックスプロセッシングユニット(GPU)が協調動作する構成を示す。 実施の形態2に係るグラフィックス処理システムの構成図であり、メインプロセッサがグラフィックス処理に関与せず、サブプロセッサとGPUが協調動作する構成である。 実施の形態3に係るグラフィックス処理システムの構成図である。
符号の説明
1 コマンドバッファ、 12 ジオメトリデータ、 14 テクスチャ、 16 シェーダプログラム、 18 共有領域、 20 フレームバッファ、 100 メインプロセッシングユニット、 102 メインプロセッサ、 104 サブプロセッサ、 110 IOIF、 120 メインメモリ、 200 グラフィックスプロセッシングユニット、 210 レジスタファイル、 211 putレジスタ、 212 getレジスタ、 213 専用レジスタ、 220 ローカルメモリ、 300 グラフィックスライブラリ、 310 アプリケーション。

Claims (8)

  1. アプリケーションプログラムにもとづいて描画コマンドを生成するメインプロセッシングユニットと、
    前記メインプロセッシングユニットにより生成される描画コマンド列を保持するコマンドバッファが設けられるメモリと、
    前記コマンドバッファに保持された描画コマンド列を読み出して描画処理を実行するグラフィックスプロセッシングユニットとを含み、
    前記メインプロセッシングユニットは、
    汎用的な処理を実行するメインプロセッサと、
    グラフィックスに関する演算を実行するサブプロセッサとを含み、
    前記サブプロセッサは、アプリケーションプログラムにもとづいて描画コマンドを生成する処理を前記メインプロセッサに代わって実行し、生成された描画コマンドを前記コマンドバッファに蓄積するとともに、その生成される描画コマンドの実行に必要なデータも合わせて生成して前記メモリに保持することを特徴とするグラフィックス処理装置。
  2. 前記サブプロセッサにより最後に描画コマンドの書き込みが完了した前記コマンドバッファの位置を示す書き込みポインタと、前記グラフィックスプロセッシングユニットにより次に描画コマンドが読み出されるべき前記コマンドバッファの位置を示す読み出しポインタとにより、前記コマンドバッファに対する読み書きが管理されることを特徴とする請求項1に記載のグラフィックス処理装置。
  3. 前記サブプロセッサが、前記グラフィックスプロセッシングユニットのレジスタを読み書きすることにより、前記メインプロセッサを介することなく、前記グラフィックスプロセッシングユニットとの同期を制御することを特徴とする請求項1または2に記載のグラフィックス処理装置。
  4. 前記グラフィックスプロセッシングユニットが、前記サブプロセッサに対して割り込みを行うことにより、前記メインプロセッサを介することなく、前記サブプロセッサとの同期を制御することを特徴とする請求項1または2に記載のグラフィックス処理装置。
  5. 前記サブプロセッサと前記グラフィックスプロセッシングユニットが前記メモリ内に保持されるデータを読み書きすることにより、前記メインプロセッサを介することなく、互いに同期を制御することを特徴とする請求項1または2に記載のグラフィックス処理装置。
  6. アプリケーションプログラムにもとづいて描画コマンドを生成するメインプロセッシングユニットと、
    前記メインプロセッシングユニットにより生成される描画コマンド列を保持するコマンドバッファが設けられるメモリと、
    前記コマンドバッファに保持された描画コマンド列を読み出して描画処理を実行するグラフィックスプロセッシングユニットとを含み、
    前記メインプロセッシングユニットは、
    汎用的な処理を実行するメインプロセッサと、
    互いに独立に動作する複数のサブプロセッサとを含み、
    各サブプロセッサは、プログラムモジュール別に互いに独立に描画コマンド列を生成して前記コマンドバッファに保持し、あるプログラムモジュールに対応する描画コマンド列の最後のコマンドとして、次に実行されるべき別のプログラムモジュールに対応する描画コマンド列の先頭アドレスを飛び先とするジャンプ命令を生成することを特徴とするグラフィックス処理装置。
  7. 描画コマンド列を生成するサブプロセッサと同一のサブプロセッサが、その生成される描画コマンドの実行に必要なデータも合わせて生成して前記メモリに保持することを特徴とする請求項6に記載のグラフィックス処理装置。
  8. 描画コマンド列を生成するサブプロセッサとは異なる別のサブプロセッサが、その生成される描画コマンド列の実行に必要なデータを生成して前記メモリに保持することを特徴とする請求項6に記載のグラフィックス処理装置。
JP2007288982A 2006-11-10 2007-11-06 グラフィックス処理装置 Active JP4550878B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US86518006P 2006-11-10 2006-11-10

Publications (2)

Publication Number Publication Date
JP2008123520A JP2008123520A (ja) 2008-05-29
JP4550878B2 true JP4550878B2 (ja) 2010-09-22

Family

ID=39032307

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007288982A Active JP4550878B2 (ja) 2006-11-10 2007-11-06 グラフィックス処理装置

Country Status (3)

Country Link
US (1) US8269782B2 (ja)
EP (1) EP1921583A3 (ja)
JP (1) JP4550878B2 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
US8624906B2 (en) 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
US8424012B1 (en) 2004-11-15 2013-04-16 Nvidia Corporation Context switching on a video processor having a scalar execution unit and a vector execution unit
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
US8149242B2 (en) * 2006-11-10 2012-04-03 Sony Computer Entertainment Inc. Graphics processing apparatus, graphics library module and graphics processing method
US8683126B2 (en) 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8659601B1 (en) 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US8698819B1 (en) * 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US8411096B1 (en) * 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US9024957B1 (en) * 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US9064333B2 (en) 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US8780123B2 (en) 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US8923385B2 (en) 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US8681861B2 (en) 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
GB0810311D0 (en) * 2008-06-05 2008-07-09 Advanced Risc Mach Ltd Graphics processing systems
US8489851B2 (en) 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
JP5662418B2 (ja) * 2010-03-24 2015-01-28 パナソニック インテレクチュアル プロパティ コーポレーション オブアメリカPanasonic Intellectual Property Corporation of America 表示処理装置、表示処理方法、及び集積回路
US9349154B2 (en) 2010-04-05 2016-05-24 Nvidia Corporation Bindless texture and image API
US8723877B2 (en) 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
AU2014202203B2 (en) * 2010-05-20 2016-04-21 Apple Inc. Subbuffer objects
KR101719485B1 (ko) * 2010-09-20 2017-03-27 삼성전자주식회사 그래픽 처리 유닛에서의 사전 픽셀 제거를 위한 장치 및 방법
JP5436526B2 (ja) * 2011-12-06 2014-03-05 株式会社ソニー・コンピュータエンタテインメント グラフィックスコマンド生成装置、グラフィックスコマンド生成方法、サーバ装置、およびクライアント装置
JP6066755B2 (ja) 2013-02-07 2017-01-25 株式会社ソニー・インタラクティブエンタテインメント 描画処理装置および描画処理方法
JP5750133B2 (ja) * 2013-04-01 2015-07-15 株式会社ソニー・コンピュータエンタテインメント 描画処理装置、描画処理システム、および描画処理方法
US10936533B2 (en) 2016-10-18 2021-03-02 Advanced Micro Devices, Inc. GPU remote communication with triggered operations

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006092219A (ja) * 2004-09-22 2006-04-06 Sony Computer Entertainment Inc グラフィックプロセッサ、制御用プロセッサおよび情報処理装置
JP2006163552A (ja) * 2004-12-03 2006-06-22 Sony Computer Entertainment Inc マルチプロセッサシステムとそのシステムにおけるプログラム実行方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5329615A (en) * 1990-09-14 1994-07-12 Hughes Aircraft Company Concurrent general purpose and DMA processing in a graphics rendering processor
US5864342A (en) * 1995-08-04 1999-01-26 Microsoft Corporation Method and system for rendering graphical objects to image chunks
US6809735B1 (en) * 2002-01-08 2004-10-26 Apple Computer, Inc. Virtualization of graphics resources
US6862027B2 (en) * 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
US6952217B1 (en) * 2003-07-24 2005-10-04 Nvidia Corporation Graphics processing unit self-programming
US7015915B1 (en) * 2003-08-12 2006-03-21 Nvidia Corporation Programming multiple chips from a command buffer
US20050057517A1 (en) * 2003-09-17 2005-03-17 Rix Scott M. Computer input device with individually positionable and programmable switches
US8473750B2 (en) * 2004-12-15 2013-06-25 Nvidia Corporation Chipset security offload engine
US7586492B2 (en) * 2004-12-20 2009-09-08 Nvidia Corporation Real-time display post-processing using programmable hardware
US7428619B2 (en) * 2005-01-18 2008-09-23 Sony Computer Entertainment Inc. Methods and apparatus for providing synchronization of shared data
US7629978B1 (en) * 2005-10-31 2009-12-08 Nvidia Corporation Multichip rendering with state control
JP5041728B2 (ja) * 2006-05-08 2012-10-03 任天堂株式会社 ゲームプログラムおよびゲームシステム
US20080055326A1 (en) * 2006-09-05 2008-03-06 Yun Du Processing of Command Sub-Lists by Multiple Graphics Processing Units

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006092219A (ja) * 2004-09-22 2006-04-06 Sony Computer Entertainment Inc グラフィックプロセッサ、制御用プロセッサおよび情報処理装置
JP2006163552A (ja) * 2004-12-03 2006-06-22 Sony Computer Entertainment Inc マルチプロセッサシステムとそのシステムにおけるプログラム実行方法

Also Published As

Publication number Publication date
EP1921583A3 (en) 2014-07-23
US20080278509A1 (en) 2008-11-13
JP2008123520A (ja) 2008-05-29
US8269782B2 (en) 2012-09-18
EP1921583A2 (en) 2008-05-14

Similar Documents

Publication Publication Date Title
JP4674729B2 (ja) グラフィックス処理装置、グラフィックスライブラリモジュール、およびグラフィックス処理方法
JP4550878B2 (ja) グラフィックス処理装置
KR101091374B1 (ko) 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템
TWI645371B (zh) 在上游著色器內設定下游著色狀態
US8077174B2 (en) Hierarchical processor array
US9342857B2 (en) Techniques for locally modifying draw calls
US9024946B2 (en) Tessellation shader inter-thread coordination
US8120607B1 (en) Boundary transition region stitching for tessellation
JP5960368B2 (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
US7750915B1 (en) Concurrent access of data elements stored across multiple banks in a shared memory resource
JP5436526B2 (ja) グラフィックスコマンド生成装置、グラフィックスコマンド生成方法、サーバ装置、およびクライアント装置
US8542247B1 (en) Cull before vertex attribute fetch and vertex lighting
JP4493626B2 (ja) マルチプロセッサシステム、ライブラリモジュール、および描画処理方法
US20170004647A1 (en) Rendering graphics data on demand
US9922457B2 (en) Computing tessellation coordinates using dedicated hardware
TW201432609A (zh) 已分配的拼貼快取
TW201439970A (zh) 儲存共用頂點之技術
TWI633516B (zh) 曲面細分及幾何著色器的功率效率屬性處理
US8941669B1 (en) Split push buffer rendering for scalability
TW201443826A (zh) 儲存共用頂點之技術
US7484076B1 (en) Executing an SIMD instruction requiring P operations on an execution unit that performs Q operations at a time (Q<P)
US20130127849A1 (en) Common Rendering Framework and Common Event Model for Video, 2D, and 3D Content
US20230097097A1 (en) Graphics primitives and positions through memory buffers
US8947444B1 (en) Distributed vertex attribute fetch
US8237725B1 (en) Vertex cache map mode for per-vertex state changes

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100618

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100629

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100708

R150 Certificate of patent or registration of utility model

Ref document number: 4550878

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130716

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250