(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
以下、図面を参照して、本発明を実施するための形態について説明する。なお、以下に示す実施の形態の構成は例示であり、本発明は実施の形態の構成に限定されない。
【0016】
<システム構成>
図1は、実施の形態に係るグラフィックスプロセッサを含むシステム構成の一例を示す機能ブロック図である。本実施の形態に係るシステムは、いわゆるGPU(Graphics Processing Unit)等のグラフィックスプロセッサ1と、システムバス2と、フレームバッファ3とを含み、図示していないコンピュータ装置の一部として機能する。
【0017】
グラフィックスプロセッサ1は、図示していないCPU(Central Processing Unit)
から、ベクタグラフィックス、3D(3 Dimension,三次元)グラフィックス等の図形デ
ータの入力を受ける。なお、本実施の形態では、ベクタグラフィックスを描画するものとして説明する。
【0018】
ベクタグラフィックスとは、直線や曲線(例えば、ベジエ曲線、楕円曲線等)の方程式のパラメータで定義されたパス(Path)を基本的な構成要素として画像を表現する形式である。パスは、ストロークとフィルに分類できる。ストロークの一例を
図2Aに示す。ストロークは、曲線等1001の方程式のパラメータ、始点1002、終点1003の他、太さ1004や端点の形状(「キャップ」とも呼ぶ)1005等を定義して描画する。なお、図面において塗りつぶしは便宜上ハッチングで示す。また、フィルの一例を
図2Bに示す。フィルは、曲線等2001で包囲された領域2002を例えば同一色で塗りつぶす。
図2Bの例では、フィル規則として、「EVENODD」規則を指定した場合の例である。「NONZERO」規則を適用した場合は、中央の領域も塗りつぶされる。
【0019】
なお、
図2Aに示したストロークも、太さを含む曲線等及びキャップ全体の外形である輪郭を求め、領域内を塗りつぶす処理として扱うことができる。ストロークの輪郭線内部を塗りつぶす一例を
図2Cに示す。
図2Cの例では、太さを含む曲線及びキャップ全体の輪郭3001で包囲された領域3002が塗りつぶされている。
【0020】
このように、ベクタグラフィックスにおいて、ある領域内を所定の色で塗りつぶすような処理はしばしば行われる。例えば、アウトラインフォント(例えば、TrueTypeフォントやPostScriptフォント)の内部を塗りつぶすような場合も、同様の処理が行われる。なお、所定の色で塗りつぶす場合には、同一色で塗りつぶすフラットカラーペイント(ソリッドペイントとも呼ぶ)、グラデーション(グラディエントペイントとも呼ぶ)等があり、その他塗りつぶしの種類には、イメージ(テクスチャ)を貼り付けるパターンペイント等がある。
【0021】
ベクタグラフィックスの場合、グラフィックスプロセッサは、例えば、ラスタ線(表示装置における水平方向の線、すなわち、Y座標が同一であるX軸方向の線)ごとに左から右方向へピクセル(画素)を用いて描画を行う。この、ピクセルを描画する方向を、本実施の形態では「描画方向」と呼ぶ。
図2Bに示したフィルを、ラスタデータとして描画する処理を、
図3に示す。
図3に示すように、ベクタ画像である曲線4001の領域内4002を塗りつぶすため、描画方向4003にピクセルの列4004及び4005が出力される。描画パイプラインにおいて1ピクセルずつ処理する場合、32ビットカラーのときは、バス幅を32ビット分利用して1ピクセルずつフレームバッファに出力される。
【0022】
図1のシステム構成の説明に戻る。グラフィックスプロセッサ1は、システムバス2を介してフレームバッファ3と接続されている。システムバス2は、信号線やフリップフロップ、ゲート回路を含む。フレームバッファ3は、コンピュータ装置に接続された図示していない表示装置(ディスプレイ、モニタ、スクリーン等とも呼ぶ)に表示する画像をラスタデータで保持するためのメモリである。例えば、表示装置の1画面分のラスタデータが保持されると、表示装置はフレームバッファに保持されたデータを読み出して、表示する。
【0023】
グラフィックスプロセッサ1は、ラスタライザ11と、分割ブロック12と、伸長ブロック13とを含む。ラスタライザ11は、入力されたベクタ形式等の図形データに基づいて、ラスタ形式の描画データ(ピクセルコマンド)を生成するラスタライズを行う処理部である。また、ラスタライザ11は、生成したピクセルコマンドを分割ブロック12に出力する。本実施の形態に係るラスタライザ11は、例えば
図3に示したように同一色のピクセルが描画方向に連続する場合、1ピクセル毎に出力するのではなく、連続数を表すデータ出力する。ラスタライザ11は、例えば、図形の外形上の点におけるX座標を用いて
、領域内部の、X軸方向(描画方向)の距離を、表示装置上のピクセル数に変換することにより、連続数を算出することができる。分割ブロック12は、入力された連続数が後述するカラーキャッシュの容量より大きい場合、カラーキャッシュの容量以下の数を表示するピクセルコマンドに分割し、出力する。伸長ブロック13は、入力されたピクセルコマンドに基づいて指定された数分のピクセルデータを生成し、カラーキャッシュに保持する。また、伸長ブロック13は、カラーキャッシュに保持しているピクセルデータを、システムバス2の幅に合わせてバースト転送する。
【0024】
より詳細には、分割ブロック12は、分割回路(分割処理部とも呼ぶ)121と、キャッシュ判定部122と、フロントタグ123とを含む。また、伸長ブロック13は、伸長回路131と、カラーキャッシュ132と、アドレス演算回路133と、バス制御部134とを含む。
【0025】
図3の描画方向4003について処理する場合、ラスタライザ11は、パスの情報に基づいて連続する同一色のピクセルをまとめて1つのピクセルコマンドとして出力する。具体的には、ラスタライザ11は、ピクセルの開始位置を示すX座標及びY座標、同一色のピクセルが連続する数を示す連続数N、並びにピクセルのカラー値(RGBA(Red Green Blue Alpha))を含むピクセルコマンドを出力する。
【0026】
なお、描画方向は予め定められているため、開始位置の座標がわかれば、描画処理を実行できる。また、カラー値は、RGBA(赤・緑・青・透明度)の各パラメータによりピクセルの色を指定する値である。例えば、各パラメータを8ビットで表現する32ビットカラーであってもよいし、16ビットカラー、8ビットグレースケールカラー、その他の方式であってもよい。
【0027】
ラスタライザ11が描画パイプラインに出力するデータを概括的に示すと、次のようになる。
ピクセルコマンド=X,Y,N,カラー値(RGBA)
図3の例では、ピクセルの列4004及び4005についてそれぞれ開始座標、連続数4、カラー値が出力される。
【0028】
分割処理部121は、ラスタライザ11が出力したピクセルコマンドを受信し、連続数N
Dが所定の大きさ以下のピクセルコマンドに分割する。所定の大きさは、例えば、後述
するカラーキャッシュの1ラインの容量に基づいて定める。本実施の形態では、カラーキャッシュの1ラインが32ピクセルであり、分割処理部121は、連続数Nが32より大きい場合、連続数N
Dが32以下の複数のピクセルコマンドに分割して出力するものとす
る。なお、分割処理の過程で生成される中間的な値は、例えば図示していないレジスタに保持される。一方、ラスタライザ11から受信したピクセルコマンドの連続数Nが32以下の場合、分割処理部121は、ピクセルコマンドをそのまま出力する。
【0029】
図3の例では、分割されず、分割処理部121は、連続数N
Dが4のピクセルコマンド
を出力する。仮に、ラスタライザ11から受信したピクセルコマンドの連続数Nが70であった場合、分割処理部121は、連続数N
Dが32のピクセルコマンドを2つと、連続
数N
Dが6のピクセルコマンドを1つ出力する。
【0030】
分割処理部121が描画パイプラインに出力するデータを概括的に示すと、次のようになる。
ピクセルコマンド=X,Y,N
D,カラー値(RGBA)
【0031】
キャッシュ判定部122は、分割処理部121からピクセルコマンドを受信し、ピクセ
ルコマンドの連続数N
Dのすべてが後述するカラーキャッシュに格納できるか(すなわち
、フロントキャッシュにヒットするか)判断する。具体的には、キャッシュ判定部122は、後述するカラーキャッシュのキャッシュラインのうち、処理の時点でフロントに設定されているラインをフロントタグ123から読み出し、分割処理部121から受信したピクセルコマンドが示す連続数N
Dのすべてがフロントに設定されているキャッシュライン
のピクセルデータに収まるか判断する。
【0032】
ここで、カラーキャッシュ132に格納されるデータの概略的なデータ構造を、
図4に示す。
図4のカラーキャッシュは、IDが「0」のキャッシュラインと、IDが「1」のキャッシュラインとを含む。各キャッシュラインは、タグと、有効フラグと、ピクセルデータとを含む。タグには、表示装置上(すなわち、フレームバッファ上)の開始位置を示す座標(X,Y)が格納される。有効フラグには、ピクセルデータのうち描画すべき(すなわち、有効な)ピクセルを示すフラグが格納される。ピクセルデータには、描画方向に連続するピクセルの各カラー値(RGBA。「表示データ」とも呼ぶ)が格納される。なお、便宜上、IDの列を示したが、「0」又は「1」の値は保持しなくてもよい。
【0033】
本実施の形態では、ピクセルデータの容量は、32ビットカラーで32ピクセル分設けられているものとする。また、本実施の形態では、このようなカラーキャッシュ132において、各キャッシュラインがフロント又はバックに設定される。そして、フロントに設定されたキャッシュラインにはデータが書き込まれ、バックに設定されたキャッシュラインからはデータが書き出される。このように、本実施の形態に係るカラーキャッシュは、ダブルバッファのように機能するものとする。なお、キャッシュラインにフロント又はバックを設定するための構成は特に限定されないが、例えばレジスタ等に「フロント」又は「バック」のIDを設定しておき、IDが「0」のラインがフロントの場合は、IDが「1」のラインがバックと判断できるようにしておく。
【0034】
キャッシュ判定部122及び伸長ブロック13の処理を説明するための機能ブロック図を、
図5に示す。
図5は、
図1に示した機能ブロック図のうち、キャッシュ判定部122及び伸長ブロック13の接続関係を、
図4に示したカラーキャッシュ132を用いて詳細に示している。
【0035】
フロントタグ123には、フロントに設定されたキャッシュラインの開始位置を示す座標(X,Y)が保持されているものとする。キャッシュ判定部122は、まず、フロントタグ123から、フロントに設定されたキャッシュラインの開始位置を示す座標(X,Y)を読み出す。そして、フロントに設定されたキャッシュラインの32ピクセルの領域に、受信したピクセルコマンドが示す、開始位置から連続数N
D分のピクセルすべてを格納
できると判断した場合は、キャッシュヒットと判定する。一方、受信したピクセルコマンドの連続数N
Dのすべてをカラーキャッシュ132に格納できないと判断した場合は、キ
ャッシュミスと判定する。なお、カラーキャッシュ132のキャッシュラインに格納できるピクセルの容量は、あらかじめわかっている。よって、フロントに設定されたキャッシュラインに、ピクセルコマンドが示すピクセルのすべてを格納できるか否かは、フロントタグ123から読み出したキャッシュラインの開始座標、及び分割処理部121から受信したピクセルコマンドに基づいて判断できる。すなわち、キャッシュ判定部122は、ピクセルコマンドが示す開始位置から描画方向に連続数N
D先の座標が、フロントタグ12
3の座標から32ピクセル(カラーキャッシュ132の容量)以内に存在すれば、キャッシュヒットと判断できる。
【0036】
さらに、キャッシュ判定部122は、キャッシュヒットと判定した場合、受信したピクセルコマンドを伸長ブロック13に出力する。具体的には、キャッシュ判定部122は、受信したピクセルコマンドを伸長回路131に転送する。
【0037】
一方、キャッシュ判定部122は、キャッシュミスと判定した場合、フロントタグ123を受信したピクセルコマンドの開始位置で更新する。さらに、キャッシュラインのフロントとバックとを切り替え、バックに設定されたキャッシュラインにデータの書き出しを指示するとともに、受信したピクセルコマンドを伸長ブロック13に出力する。
【0038】
具体的には、キャッシュ判定部122は、受信したピクセルコマンドの開始座標(X,Y)を用いて、フロントタグ123を更新する。また、例えば、伸長回路131やバス制御部134からも読み出せる図示していないレジスタに、フロント又はバックに設定されているキャッシュラインのIDを保持させておく。そして、キャッシュ判定部122が当該レジスタを更新することで、キャッシュラインのフロントとバックとを切り替える。また、キャッシュ判定部122は、フロントに設定されたキャッシュラインのタグを伸長回路131に更新させる。また、キャッシュ判定部122は、バス制御部134に対し、バックに設定されたキャッシュラインのフラッシュ(ピクセルデータ及び開始座標を示すアドレスの出力)を指示するための信号を出力する。そして、キャッシュ判定部122は、受信したピクセルコマンドを伸長回路131に転送する。なお、切り替えの際には、キャッシュ判定部122は、切り替え後にフロントに設定されるキャッシュラインの有効フラグを、例えば「0」で初期化させるようにしてもよい。
【0039】
伸長回路131は、受信したピクセルコマンドに基づいて、連続数N
D分のカラー値を
複製し、ピクセルデータとしてカラーキャッシュ132に格納する。具体的には、伸長回路131は、分割ブロック12のキャッシュ判定部122からピクセルコマンドを受信し、連続数N
Dの数だけカラー値(RGBA)を複製し、カラーキャッシュ132において
フロントに設定されているキャッシュラインのピクセルデータに書き込む。同一のカラー値を複製する処理は、例えば複数のパイプラインレジスタに同一の信号を送る処理であり、描画パイプラインにおける1サイクルで実行できる。よって、同一色のピクセルが連続する場合はまとめて書き込むことができる分、1ピクセル毎に処理を行う場合よりも効率がよい。
【0040】
また、有効フラグには、カラー値を書き込んだピクセルデータに対応するビットを立てる。本実施の形態では、有効フラグは、例えば32ビットのフラグを有し、ピクセルデータに保持された、有効な表示データの範囲を表す。
【0041】
一方、キャッシュ判定部122からフラッシュの指示を受信した場合、バス制御部134は、表示データをフレームバッファ3へ出力する。具体的には、バス制御部134は、バックに設定されているキャッシュラインのピクセルデータを、システムバス2を介してフレームバッファ3へ書き出す。なお、システムバス2の幅に基づいて、バス制御部134は、表示データであるピクセルデータを分割し、バースト転送を行うようにしてもよい。このとき、アドレス演算回路133は、カラーキャッシュにおいてバックに設定されているキャッシュラインのタグに保持されている座標(X,Y)を読み出し、フレームバッファ3がアサインされているメモリ上のアドレスに変換する。また、バス制御部134は、予め定められたシステムバス2の幅(すなわち、伝送容量)及びカラー値の色深度(ビット数)に基づいて、システムバス2でまとめて伝送可能なピクセル数を算出する。なお、システムバス2でまとめて伝送可能なピクセル数は、色深度毎に予め定めておくようにしてもよい。そして、バス制御部134は、表示装置上の開始位置の座標に相当する、変換後のアドレスを用いて、システムバス2でまとめて伝送可能なピクセル数毎にピクセルデータをバースト転送する。
【0042】
例えば、システムバス2の幅が128ビットの場合において、32ピクセルを出力するとき、カラー値が32ビットカラーであれば、バースト長は8バーストになる。すなわち
、システムバス2は、同時に4ピクセル分のデータを出力することができる。16ビットカラーであれば、バースト長は4バーストになる。すなわち、システムバス2は、同時に8ピクセル分のデータを出力することができる。8ビットカラーであれば、バースト長は2バーストになる。すなわち、システムバス2は、同時に16ピクセル分のデータを出力することができる。
【0043】
なお、バス制御部134は、バックに設定されているキャッシュラインの有効フラグに基づいて、有効でないピクセルデータにはマスク処理を行い、フレームバッファ3へ出力しないようにする。システムバス2は、ピクセルデータの他に、対応するピクセルデータの有効又は無効をByte単位で表すマスク信号(バイトマスク)を伝送する。バイトマスクが無効(例えば「0」)に設定されたピクセルデータは、フレームバッファ3に記憶されない。
【0044】
ここで、
図6に示すカラーキャッシュの有効フラグ及びピクセルデータを用いて、マスク処理を説明する。
図6の例では、便宜上、1行目に、カラーキャッシュに格納される32ピクセルの通し番号(ピクセル0〜ピクセル31)を示している。また、
図6の2行目に示すように、カラーキャッシュは、32ピクセルの各々に対応する有効フラグを有している。本実施の形態では、有効フラグは計32ビット確保され、有効フラグの各ビットが各ピクセルに対応している。そして、
図6の例では、ピクセル1の有効フラグが「0(無効)」に設定され、その他のピクセルは「1(有効)」に設定されている。また、
図6の3行目に示すように、カラーキャッシュは、32ピクセルの各々に対応するピクセルデータD0〜D31を有している。32ビットカラーの場合、ピクセルデータにはRGBAの各パラメータをそれぞれ8ビットで表したデータが格納される。
【0045】
システムバス2の幅が128ビットの場合、バス制御部134は、4ピクセル分のピクセルデータを一度にシステムバス2へ出力することができる。また、システムバス2の幅が128ビットの場合、16本(1バイト(8ビット)毎に1本、128ビット分)のマスク信号0〜マスク信号15(図示せず)が伝送される。
図6の例では、バス制御部134は、ピクセル0〜ピクセル3に相当するピクセルデータD0〜D3を出力するとき、ピクセル1の有効フラグは「0」であるため、マスク信号4〜マスク信号7を「0(無効)」にして、システムバス2へ出力する。仮に16ビットカラーの場合は、システムバス2の幅が128ビットのとき、システムバス2は、一度に8ピクセル分のピクセルデータを伝送できる。このとき、ピクセル1の有効フラグが「0」であれば、バス制御部134は、マスク信号2〜マスク信号3を「0」にする。なお、水平方向に2本のスパン(色のある1以上のピクセル)が存在し、間に1ピクセル分の間隔がある場合、
図6のようなデータがカラーキャッシュに保持される。
【0046】
以上のように、例えば32ピクセル分のピクセルデータを出力する場合、バス制御部134は、バス幅と色深度(ピクセルデータの大きさ)に基づいて、バースト長(バス幅に応じたデータ出力回数)と、有効でないピクセルのマスク処理を制御する。以上のような処理を繰り返し、表示装置の1画面分のラスタデータがフレームバッファ3に保持されると、表示装置はフレームバッファ3に保持されたデータを読み出して表示を更新する。
【0047】
本実施の形態では、同一色のピクセルが連続する場合、ラスタライザ11はピクセルごとに描画データを出力するのではなく、連続数Nを出力する。また、伸長回路131は、例えば同一色の表示データ(ピクセルデータ)を所定数分複製するような処理であれば、1サイクルで実行することができる。よって、グラフィックスプロセッサ1は、フレームバッファ3に接続されたシステムバス2の幅を十分に利用することができ、連続数N、若しくは分割した連続数N
D、又はそれらをバス幅に応じて分割したピクセル数ごとに、表
示データをまとめて出力することができる。すなわち、本実施の形態に係るグラフィック
スプロセッサ1は、描画速度を向上させることができる。また、処理にかかるクロック数を低減させることができるため、同時に消費電力を低減させることもできる。
【0048】
図1の例では省略しているが、ラスタライザ11と分割ブロック12との間には、カラースペース変換等の処理パイプラインを含んでいてもよい。例えば、ラスタライザ11はカラー値を生成するための属性値を出力し、カラースペース変換により、カラー値(RGBA)が生成される。本実施の形態のように、色が同一の場合、カラー値等の情報と連続数を出力するようにすれば、カラースペース変換等も1サイクルで処理できる。
【0049】
なお、本実施の形態では、所定の領域を同一色で塗りつぶす場合を例に説明したが、上記の処理が適用できるのは、このような場合には限られない。例えば、
図7に示すように、表示装置上(すなわち、フレームバッファ3上)で縦方向(Y軸方向、鉛直方向とも呼ぶ)5001に、リニア(線形)に変化するグラデーションで塗りつぶすような場合であってもよい。すなわち、
図7の場合も、横方向(すなわち、X軸方向、水平方向、ラスタ方向、描画方向とも呼ぶ)5002には同一色が連続することになる。よって、ラスタライザ11は同一色が描画方向に連続する数を示す連続数Nを出力することができ、本実施の形態に係る処理が適用できる。なお、
図7では、便宜上、グラデーションの色の変化は、ハッチングの間隔の変化で表されている。
【0050】
<変形例>
次に、所定の領域を、描画方向に色がリニアに変化するようなグラデーションで塗りつぶす場合の処理を説明する。
図8に、所定の領域が、水平方向に色が変化するグラデーションで塗りつぶされた例を示す。
図8は
図2B等と同様の外形である。ただし、領域の内部は、鉛直方向6001に同一色が連続し、描画方向である水平方向6002に色がリニアに変化している。なお、
図8でも、便宜上、グラデーションの色の変化は、ハッチングの間隔の変化で表されている。
【0051】
本変形例でも、
図1に示したグラフィックスプロセッサ1を用いることができる。ただし、ラスタライザ11、分割回路121及びキャッシュ判定部122が描画パイプラインに出力するピクセルコマンドは、色が描画方向に変化する変位量を示す「差分」(ΔR,ΔG,ΔB,ΔA)をさらに含む。そして、伸長回路131は、カラー値に差分を加算してピクセルデータに展開し、カラーキャッシュ132に保持させる。
【0052】
開始座標のカラー値が(R,G,B,A)、差分が(ΔR,ΔG,ΔB,ΔA)、連続するピクセル数が4の場合、描画方向の順にピクセル0〜ピクセル3のピクセルデータは次のように算出される。
ピクセル0=(R,G,B,A)
ピクセル1=(R+1×ΔR,G+1×ΔG,B+1×ΔB,A+1×ΔA)
ピクセル2=(R+2×ΔR,G+2×ΔG,B+2×ΔB,A+2×ΔA)
ピクセル3=(R+3×ΔR,G+3×ΔG,B+3×ΔB,A+3×ΔA)
【0053】
すなわち、開始座標のカラー値が(R,G,B,A)、差分が(ΔR,ΔG,ΔB,ΔA)、連続するピクセル数がNの場合、伸長回路131が出力するn番目(n=0〜N−1)のピクセルのピクセルデータを概括的に表すと、次のようになる。
ピクセルn=(R+n×ΔR,G+n×ΔG,B+n×ΔB,A+n×ΔA)
【0054】
また、バス制御部134は、上で述べた実施の形態と同様に、システムバス2を介してフレームバッファ3へ、ピクセルデータを、例えばバースト転送することができる。このような変形例の場合も、グラフィックスプロセッサ1は、システムバス2の幅を十分に利用することができ、複数のピクセルデータをまとめてフレームバッファ3へ出力すること
ができる。すなわち、変形例に係るグラフィックスプロセッサ1も、描画速度を向上させることができる。なお、
図8では水平方向に色がリニアに変化するグラデーションの例を示したが、斜め(すなわち、鉛直方向及び水平方向)に色がリニアに変化するグラデーションの場合も、同様に処理することができる。
【0055】
上記実施の形態及び変形例で説明した処理は、結果が変わらない限りにおいて、実行する順序を入れ替えてもよい。また、上記の処理は、ベクタグラフィックスに限らず、3Dグラフィックス等において、所定の色情報を有するピクセル(すなわち、同一色のピクセル又は色がリニアに変化するピクセル)が描画方向に連続する場合に適用することも可能である。
【0056】
なお、グラフィックスプロセッサ1は、同様の処理を行うグラフィックスアクセラレータや、LSI(Large Scale Integration)の部分であるIP(Intellectual Property)コア等の画像処理装置であってもよい。また、機能ブロック図で示したグラフィックスプロセッサ等の画像処理装置は、例えば、集積回路のようなデジタル回路を設計するための、様々なハードウェア記述言語を利用して設計することができる。