JP5837507B2 - 画像処理装置 - Google Patents

画像処理装置 Download PDF

Info

Publication number
JP5837507B2
JP5837507B2 JP2012546955A JP2012546955A JP5837507B2 JP 5837507 B2 JP5837507 B2 JP 5837507B2 JP 2012546955 A JP2012546955 A JP 2012546955A JP 2012546955 A JP2012546955 A JP 2012546955A JP 5837507 B2 JP5837507 B2 JP 5837507B2
Authority
JP
Japan
Prior art keywords
primitive
buffer
geometry shader
sequence
index
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
JP2012546955A
Other languages
English (en)
Other versions
JPWO2012074092A1 (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.)
Digital Media Professionals Inc
Original Assignee
Digital Media Professionals 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 Digital Media Professionals Inc filed Critical Digital Media Professionals Inc
Priority to JP2012546955A priority Critical patent/JP5837507B2/ja
Publication of JPWO2012074092A1 publication Critical patent/JPWO2012074092A1/ja
Application granted granted Critical
Publication of JP5837507B2 publication Critical patent/JP5837507B2/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

Description

本発明は可変サイズ,又は固定サイズのプリミティブの演算処理を行う画像処理装置に関する。
従来から,3Dコンピュータ図形は,複雑な幾何学的な形に近似するように,ポイント,線,および三角形のような簡単な幾何学的なプリミティブを使用して表現されている。既存のコンピュータグラフィックスハードウェアは,このような簡単なプリミティブ,特に三角形のメッシュの処理を高速化できるように最適化されている。このため,既存のコンピュータグラフィックスハードウェアは,様々な三角形,線,およびポイントを用いることで複雑な形に近似させることができる。
通常,3Dコンピュータ図形を処理するためのGPU(グラフィック・プロセシング・ユニット)には,頂点データを記録した頂点バッファに加えて,各頂点データへの参照値をプリミティブ毎に記録したインデックスバッファが設けられている。このインデックスバッファを設けることにより,処理の高速化を図ることができる。このインデックバッファに記録された頂点データ若しくはプリミティブは,バーテックスシェーダ,ジオメトリシェーダ,又はピクセルシェーダといった各シェーダパイプラインに入力情報として渡されて,画像処理が行われる。このような一般的なGPUの構成は,例えば特許文献1などに例示されている。
このような構成を有するGPUにおいて,様々なデータ長のプリミティブ(すなわち,三角形以外のプリミティブ)をまとめて取り扱う場合は,そのデータの取り扱いに一層の注意が必要となる。その理由は,インデックスバッファに記録する際のプリミティブのサイズが異なるため,各プリミティブを構成する値が,記録領域のどの部分に相当するかを把握する必要があるからである。そのため,例えばプリミティブ毎のサイズ長をデータ列の先頭に配置し,この先頭の値を確認することで,プリミティブの単位を判別するといった手法が採用されている。
特開2010−152702号公報
しかしながら,様々なデータ長のプリミティブを処理するパイプラインにおいては,シェーダ,特にジオメトリシェーダにおいて,プリミティブ単位での処理が重複する頂点データを利用するアルゴリズムが発生する。また,ジオメトリシェーダでの処理を二回以上行う場合もあるが,このような場合であっても,一回目のジオメトリシェーダのステージでの出力結果を,二回目のステージで再利用するといった状況が発生しうる。例えば,一回目のジオメトリシェーダのステージにおいて出力されたプリミティブを個別に二回目のステージで処理するではなく,複数のプリミティブを一つにまとめて,一つのプリミティブとして,ジオメトリシェーダにおいて再び演算を行いたい場合などである。このような場合,既に処理を行ったプリミティブに対して,同様の処理を繰り返し行うことなり,処理の速度の観点や,メモリ容量の抑制という観点においても好ましくない。
そこで,本発明は,プリミティブを処理するためのパイプラインを有する画像処理装置において,計算コストの抑制と処理の高速化を達成することを目的とする。
このような課題を解決するために,本発明においては,次のような手段を採用することができる。第一の手段としては,この画像処理装置は,頂点データへの参照値がメモリエレメントに配列として記憶されるインデックスバッファと,頂点データから構成されるプリミティブ列の演算処理を行う少なくとも2ステージ以上の処理が行われるジオメトリシェーダとを備え,前記ジオメトリシェーダのステージではその以前のステージにおける出力結果を再利用する構成が採られている。そして,インデックスバッファにおいて記録される前記プリミティブ列と同様の前記頂点データから構成されたプリミティブ列が既に存在するか否かを判定するプリミティブ判定手段とを備えている。
ここで,プリミティブ判定手段により,前記プリミティブ列が存在しないと判定された場合には,前記インデックスバッファに前記プリミティブ列を構成する頂点データへの参照値を記憶するとともに,記録した前記プリミティブ列の先頭データの直前に同プリミティブ列のサイズをS値として記憶するプリミティブ記憶手段による処理が実行される。
一方,前記プリミティブ判定手段により,前記プリミティブ列が存在すると判定された場合には,前記インデックスバッファに既に記憶されたプリミティブ列が現在位置よりいくつ前のプリミティブ列であるかを示す参照情報を負の整数にて記憶する参照情報設定手段による処理が実行される。
この処理の後に,前記インデックスバッファをフェッチングし,フェッチされた値に前記S値,あるいは前記参照情報のいずれが含まれるかを判断するインデックス値判定手段が実行される。
この前記インデックス値判定手段により,前記S値が含まれると判定される場合には,同S値の一つ後方の記録要素からS個分の前記頂点データを取得して,同頂点データから構成されるプリミティブ列に対して演算処理を行うジオメトリシェーダと,前記ジオメトリシェーダにおける出力情報をキャッシュバッファに追加して記憶するキャッシュ手段とによる処理が実行される。
一方,前記インデックス値判定手段により,前記参照情報が含まれると判断される場合には,同参照情報に含まれる参照先のプリミティブ列の前記ジオメトリシェーダでの処理の前記出力情報を前記キャッシュバッファからフェッチして利用する再利用手段とが実行される。
また,第2の解決手段として,次のような構成を採ることもできる。すなわち,前記プリミティブ判定手段により,前記プリミティブ列が存在しないと判定された場合には,前記インデックスバッファに前記プリミティブ列を構成する頂点データを記憶し,記録した前記プリミティブ列の先頭データの直前にプリミティブ列を識別可能なプリミティブIDを含む定義コマンドを記録するプリミティブ記憶手段とによる処理が実行される。
一方,前記プリミティブ判定手段により,前記プリミティブ列が存在することと判定された場合には,前記定義コマンドを参照する参照コマンドを記録するとともに,前記インデックスバッファに記録されている前記定義コマンドに含まれる前記プリミティブIDにより定義される前記プリミティブ列の情報を取り除くプリミティブ参照情報設定手段による処理が実行される。
そして,前記インデックスバッファをフェッチングし,フェッチされた値に定義コマンド,あるいは前記参照コマンドのいずれが含まれるかを判断するインデックス値判定手段により判定が行われ,このインデックス値判定手段により,前記定義コマンドが含まれると判断される場合には,前記プリミティブ記憶手段により定義された前記プリミティブ列の頂点データを取得し,当該プリミティブ列に対して演算処理を行うジオメトリシェーダと,キャッシュバッファより前記定義コマンドと同様の識別子が存在する場合にはこれを取り除き,前記ジオメトリシェーダにおける出力情報を当該キャッシュバッファに前記定義コマンドと関連付して記憶するキャッシュ手段とによる処理が実行される。
一方,前記インデックス値判定手段により,前記参照コマンドが含まれると判断される場合には,同参照コマンドによって参照される前記定義コマンドによって関連づけられた前記プリミティブ列の前記ジオメトリシェーダにおける処理の出力情報を前記キャッシュバッファからフェッチして利用する再利用手段とによる処理が実行される。
また,この第2の解決手段の場合において,前記プリミティブ列は可変サイズのプリミティブであり,前記プリミティブ記憶手段は,前記定義コマンドとともに,同定義コマンドによって宣言されたプリミティブ列の頂点数を同じメモリエレメントに記憶する構成の場合もある。
更には,前記ジオメトリシェーダの出力情報を再度ジオメトリシェーダへの入力情報として送信し,再び処理を実行しても良い。
また,前記ジオメトリシェーダからの出力情報を再度ジオメトリシェーダへの入力情報として渡すまでの間に,複数のプリミティブ列を統合,または分割して新たにプリミティブ列として前記キャッシュバッファに記録するプリミティブ再設定手段を備えても良い。
また,前記プリミティブキャッシュに対して前記ジオメトリシェーダの出力情報を記録させる場合は,当該キャッシュバッファに対してFIFOにて前記出力情報が記憶されるようにしてもよい。
本発明によれば,プリミティブを処理するためのパイプラインを有する画像処理装置において,計算コストの抑制と処理の高速化とを行うことができるようになる。
図1は,画像処理装置の概略構成を示すブロック図である。 図2は,インデックスバッファと頂点バッファの概略構成を示すブロック図である。 図3は,第1の実施例においてインデックスバッファに頂点情報を記録する手順を示すフロー図である。 図4は,第1の実施例においてジオメトリシェーダを通じた処理の流れを示したフロー図である。 図5(a)は,多角形からなるメッシュを示し,図5(b)は,このメッシュを分割したプリミティブとその近隣のプリミティブとを示し,図5(c)は,このプリミティブをインデックスバッファ上で示した概略図である。 図6は,キャッシュバッファの概略図を示す。 図7は,第2の実施例においてインデックスバッファに頂点情報を記録する手順を示すフロー図である。 図8は,第2の実施例においてジオメトリシェーダを通じた処理の流れを示したフロー図である。 図9は,第2の実施例のプリミティブをインデックスバッファ上で示した概略図である。 図10は,第2の実施例のプリミティブをキャッシュバッファ上で示した概略図である。
以下,発明を実施するための形態について説明する。本発明は,以下に説明する実施態
様に限定されるものではない。本発明は,以下に説明する実施態様から当業者に自明な範
囲で適宜修正される範囲を含む。
本発明における3D画像は,プリミティブを用いて表現されるものである。プリミティブはジオメトリの基本単位であり,3Dグラフィックスの場合,プリミティブはポリゴン(典型的には三角形),法線ベクトル,点などを含むことが通常である。プリミティブが三角形の場合,各三角形は3つの頂点によって画定され,各線は2つの頂点によって画定される。各頂点が有するデータは,様々な属性,例えば,空間座標,明度,又はテクスチャ座標と関連付けられている。
本明細書において,「シェーダ」は,一般に,シェーディングを実行するGPUのハードウェアサブユニットを参照するために使用されるものである。また,「シェーダ」は,シェーディングを実行するために使用されるメモリ(例えばレジスタ記憶装置)にロードされ,GPUにダウンロードされる命令セット,又はトークンを参照するために使用され得る。「シェーダプログラム」は,一般に,グラフィックスパイプラインに存在し実行するプログラム又はプロセスを参照することができ,画面上の最終的な画像の表面特性,又は3次元画面環境におけるオブジェクトの決定/定義を支援するために使用される。「シェーダ」は,それらの特定のタスクを実行するために,毎秒十億以上の計算を実行可能である。
図1は,画像処理装置であるGPU100に関して3次元グラフィックスパイプラインのブロック図を示す。頂点シェーダ110は,三角形や線のようなプリミティブを包含する形状データについて,頂点処理を実行する。例えば,頂点シェーダ110は,頂点に対する明るさなどを計算し,形状に関してブレンディングを実行することができる。また,頂点シェーダ110は,各頂点の座標と属性の成分値(例えばx,y,z,w)を決定し,三角形セットアップ,及び深さ・グラディエントセットアップユニット120に頂点座標を提供し,キャッシュバッファ130に頂点属性成分値を提供するものであってもよい。キャッシュバッファ130は,頂点とプリミティブについて,属性成分値やその他のデータを格納する。
ジオメトリシェーダ140は,頂点シェーダ110で処理された頂点データから構成されるプリミティブ全体または隣接したプリミティブの情報を持つプリミティブを,入力情報として受け取り,頂点データの増減や頂点データから新たなプリミティブを生成するといったプリミティブ単位での処理を行う部位である。また,このジオメトリシェーダ140は,2以上のステージに分割されて処理が行われる場合が存在する。例えば,複数のプリミティブを加工して,その出力結果を一つのプリミティブとしてまとめて取り扱い,ジオメトリシェーダにおいて再度の加工を行いたい場合などである。このような処理が行われる場合,ジオメトリシェーダ140の出力情報は,一度キャッシュバッファ130に記録され,このキャッシュバッファ130に記録された出力情報が,再び,ジオメトリシェーダ140の次のステージへの入力情報となる。本実施形態は,特にこのような場合において,有効な技術である。詳細については後述する。ラスタライザ150は,各プリミティブをピクセルに分解し,各ピクセルについて,スクリーン座標を生成する。
初期深さ/ステンシルテストユニット160は,ピクセルがレンダリングされるか破棄されるべきかどうか決定するために,ピクセルに関してステンシルテストを行なってもよい。初期深さ/ステンシルテストユニット160は,ピクセルについてのステンシルバッファ(図1においては示されない)に格納されたステンシル値を基準値と比較し,その比較結果に基づいて,ピクセルをパスするか破棄するかを決定する。初期深さ/ステンシルテストユニット160は,適用可能な場合,ピクセルがレンダリングされるべきか破棄されるべきかどうかを決定するために,ピクセルごとに深さテスト(zテストとも称される)を行なってもよい。例えば,初期深さ/ステンシルテストユニット160は,ピクセルに対するz値(現在のz値)をzバッファにおいて対応するz値(格納されたz値)と比較する。そして,現在のz値が,格納されたz値に対してより近いならば,ピクセルをパスし,zバッファやステンシルバッファを更新する。一方,初期深さ/ステンシルテストユニット160は,現在のz値が,格納されたz値よりさらに後方であるならば,ピクセルを破棄する。
属性グラディエントセットアップおよび属性補間ユニット170は,プリミティブ内のピクセルについて属性成分値を得るために,プリミティブの頂点について属性成分値を補間する。属性グラディエントセットアップおよび属性補間ユニット170は,最初に,頂点の属性成分値に基づいて,属性補間のためのパラメータを計算してもよい。これらのパラメータは,属性補間のための一次方程式の属性グラディエントまたは係数であってもよい。その後,属性グラディエントセットアップおよび属性補間ユニット170は,そのピクセルのスクリーン座標および補間パラメータに基づいて,各プリミティブ内の各ピクセルについて属性成分値を計算することができる。
ピクセル/フラグメントシェーダ180は,ピクセルとフラグメントについて種々のグラフィックス処理を実行してもよい。フラグメントは,ピクセルと,その関連情報である。例えば,ピクセル/フラグメントシェーダ180は,可能であるならば,ピクセルにテクスチャを適用するテクスチャマッピングを実行してもよい。テクスチャ化は,そのピクセルのテクスチャ座標によって示された位置におけるテクスチャ画像のカラーでピクセルのカラーを修正することにより実現される。ポストプロセッサ190は,各フラグメントについて,アルファテスト,フォグブレンディング,アルファブレンディング,論理演算,又はディザリング演算のような他のグラフィックス処理を実行してもよい。ポストプロセッサ170は,ディスプレイデバイス上での提示のためのカラーバッファ(両方とも図1には示されない)に出力ピクセルを提供する。
また,本実施形態のGPU100においては,ジオメトリシェーダ140による処理結果も,キャッシュバッファ130に記録される。これは前述したジオメトリシェーダ140が複数のステージを有しており,前段階のステージでの処理結果を再度利用するときなどに有効な手段である。このキャッシュバッファ130は,FIFO(ファーストイン・ファーストアウト)方式が採用されており,そのキャッシュ可能なシーケンスの数は,例えば4つに設定されている。なお,このシーケンス数は,適宜変更することも可能である。
図2は,プリミティブ(例えば三角形または線の頂点データや配列情報)が,記録されるバッファの構造を示す。頂点バッファ210は,プリミティブについて,頂点座標および属性補間係数を格納する。頂点バッファロケーションは,それぞれ,1つの頂点について(x,y,z,w)座標,および属性補間係数(α,β)を格納することができる。各頂点バッファロケーションは,当該バッファロケーションが有効な頂点を格納しているかどうかを示す有効/無効フラグを持つ。
インデックスバッファ220は,プリミティブ頂点についてのインデックスを格納する。これらインデックスは,頂点が格納される頂点バッファ210のロケーションを指す。インデックスバッファ220の各メモリエレメントは,1つの頂点バッファロケーションについてのポインタ(またはインデックス)を格納できる。
このインデックスバッファ220には,プリミティブの先頭の前には,プリミティブのサイズ長,すなわちプリミティブ列を構成する頂点データの数が,記録されるロケーションが確保されている。インデックスバッファ220は,連続したストレージの領域を形成しているが,このサイズ長のデータを起点として,その値分のロケーションに存在するデータが,ある特定のプリミティブ列を構成する頂点データとして認識され,その次の領域には,隣接するプリミティブ列のサイズ長データSが,位置するという構成となっている。また,本実施形態においては,インデックスバッファ220における領域を節約するための工夫として,既出のプリミティブ列についてはそのプリミティブ列を構成する頂点バッファロケーションへのポイント等を格納するのではなく,マイナスの値によって表される参照情報Nを,インデックスバッファ220に格納している。この参照情報Nは,インデックスバッファ220上のN個前のプリミティブと同じ頂点の配列を有するプリミティブが繰り返されているということを意味している。また,このようなサイズ長データSは,可変サイズのプリミティブを扱う時には必要であるが,固定サイズの決まったプリミティブを扱う場合にはこれを省略した構成を採ることもできる。
次に,このインデックスバッファ220へ頂点データ等をインプットするアルゴリズムについて図3を参照に解説する。
この頂点データの値をインプットする工程は,通常であれば頂点シェーダ110における処理の前段階で行われるが,本実施形態では可変サイズのプリミティブを取り扱うため,シェーダプログラムの過程において適宜実施されても良い。
まず始めに,あるプリミティブを対象にこのプリミティブが既,にインデックスバッファに記録されているかを判定するステップ301を実施する。
具体的な判定方法としては,プリミティブの頂点の配列を取得して,この配列と同じ値がインデックスバッファ220上に存在するか否かにより判定する方法を採ることができる。
次いで,ステップ301における判定によって,プリミティブが存在しないと判定される場合(Noである場合)は,ステップ302に移行する。ステップ302では,インデックスバッファ220に,頂点バッファ210上の頂点データへの参照を配列として入力するとともに,その先頭の領域に,このプリミティブのサイズ,すなわちこのプリミティブを構成する配列数を,サイズ長データSとして記録する。
また,ステップ301における判定によって,プリミティブが存在すると判定された場合(Yesである場合)は,ステップ303に移行する。ステップ303では,頂点データのメモリ上の位置情報を配列として記録する代わりに,既存のプリミティブへの参照情報Nをオフセット値(既存のプリミティブが現在の位置からいくつ前のプリミティブかを示すマイナス値)の形式で記録する。このオフセット値の設定の方法としては,前述したステップ301におけるプリミティブの検査時に,インデックスバッファ220の先頭から検索を開始して,ヒットした時点でカウンターの値を1にセットし,その後に,サイズ長データS又は参照情報Nのいずれかにヒットするごとにカウンターを1ずつ増加させ,最後尾に到達した際に,このカウンターの値にマイナスをつけて参照情報Nとしてセットするといった方法がとり得る。
前述したように,ジオメトリシェーダ140の複数のステージに亘って処理を行うよう場合が存在しているが,本実施形態は,この場合に,処理を高速化するための工夫がされている。具体的には,図4に示されるアルゴリズムを用いて説明する。
図4は,ジオメトリシェーダ140の処理結果を,プリミティブ単位で,キャッシュバッファ190に記録していく処理の流れを示している。まず,ステップ401において,インデックスバッファ220のメモリエレメントに記録されたインデックス値を,順次フェッチしていき,フェッチされたインデックス値に,上述したサイズ長データS又は参照情報Nのいずれが含まれるかを判定する。
ステップ401の判定で,サイズ長データSが含まれるとされた場合には,ステップ402において,インデックスバッファ220よってS個分の頂点データへの位置情報を配列として取得し,この配列によって表されるプリミティブに対して,ジオメトリシェーダ140で演算処理が実行される。ここでは,このプリミティブに対して行われた一回目のジオメトリシェーダ140の処理結果を,プリミティブ出力GS1と示す。
次にステップ403において,このジオメトリシェーダ140により行われたプリミティブ出力GS1を,キャッシュバッファ130に追加して記録させる。この値は,ステップ404において,ジオメトリシェーダ140の次のステージの入力値として送信される。
一方,ステップ401における判定の結果,参照情報Nが含まれると判定される場合,このプリミティブは,既にジオメトリシェーダ140において処理がされていることから,キャッシュバッファ130上には,プリミティブ出力GS1が存在しているといえる。したがって,ステップ405において,このプリミティブ出力GS1を取得し,これを再利用する。そして,次のステップ406にて,プリミティブ出力GS1を,ジオメトリシェーダ140の次のステージへの入力値として送信する。
この処理を,各インデックスバッファ220上のプリミティブに対し,繰り返し行うことで,ジオメトリシェーダ140の次のステージでは,キャッシュバッファ130上にキャッシュ化された各プリミティブが,再利用される。したがって,プリミティブに対して,再度演算処理をする必要が無くなるため,処理の高速化や記憶領域の抑制を図ることができるようになる。また,ジオメトリシェーダ140によって行われる2回目以降のステージでの処理においても,このプリミティブ出力GS1を再利用することにより,処理の高速化を図ることができる。
本発明の画像処理装置において,実際に画像を処理する場合と,どのような動作をするかについて,図5を用いて説明する。
図5(a)で示される多角形メッシュ500は,22の頂点から構成されるメッシュである。本実施形態では,この多角形メッシュ500に対し,Catmull-Clark subdivision法を用いて,頂点9−14−15−10からなる四角形501,及び頂点10−11−16−15からなる四角形502に対して処理を行う。この処理方法においては,ジオメトリシェーダ140に対しては,各頂点をその隣接する頂点を含めたプリミティブをジオメトリシェーダ140の入力として取り扱われる。すなわち,四角形501の処理にあっては,9,14,15,10を中心とする4つのプリミティブを用いた処理が行われ,四角形502の処理にあっては,10,11,16,15を中心とする4つのプリミティブを用いた処理が行われる。
図5(b)は,多角形メッシュ500を,上記の処理に則して,ジオメトリシェーダ140で処理が行われる単位であるプリミティブに分解したものであり,SET0〜SET4として示されている。また,図5(c)は,このSET0〜SET4のプリミティブが記録されたインデックスバッファ220の状態を示している。
図5(b)及び(c)に示されるように,SET0は,9−3−2−1−8−13−14−15−10−5−4の11の頂点からなるプリミティブである。このため,インデックスバッファ220には,このプリミティブのサイズを表すサイズ長データSとして,「11」が記録されている。このSet0に隣接するインデックスバッファ220上には,Set1が記録されている。Set1は,14−9−8−13−18−19−20−15−10からなるプリミティブであり,この先頭には,サイズ長データSとして,「9」が記録されている。同様に,Set2は,先頭に,S値として「9」が記憶され,15−10−9−14−19−20−21―16−11の順に記録されている。Set3は,先頭に,サイズ長データSとして「9」が記憶され,10−5−4−9−14−15−16−11−6の順に記録されている。続いて,Set3及びSet2が繰り返し用いられるが,インデックスバッファ220においては,これらのプリミティブは既に存在していることから,再び頂点データへの参照値が記録される代わりに,前述したオフセット値の値で示される参照情報Nが記憶される。ここで,Set3の位置は,一つ前であるため参照情報Nには−1が記憶され,続いてSet2の参照情報Nには−3が記憶されている。さらに,Set4として,頂点16−11−10−15−20−21−22−17−12の順番のプリミティブがインデックスバッファ220に記録され,先頭に,サイズ長データSの「9」が記録されている。最後に,Set5として,11−6−5−10−15−16−17−12−7の順番のプリミティブがインデックスバッファ220に記憶され,先頭に,サイズ長データSの「9」が記録されている。
次に,この多角形メッシュ500において,ジオメトリシェーダ140の処理結果をキャッシュバッファ130に記録する動作について,図6を用いて説明する。図6は,キャッシュバッファ130のうち,ジオメトリシェーダ140の出力であるプリミティブGS1を記録する領域の構成を示したブロック図である
図6に示されるように,キャッシュバッファ130は,4つのメモリエレメントを備えている。このキャッシュバッファ130には,ジオメトリシェーダ140での処理が行われるごとに,プリミティブごとの出力情報が記憶されている。この処理については,前述した図4におけるステップ403が相当する。
まず,Set0〜Set3の処理がおこなわれる際には,キャッシュバッファ130の先頭から順に,それぞれのプリミティブ出力GS1が入力される。ここでは,各出力値をSet0〜Set3として示している。Set3の出力結果が記憶された際,このキャッシュバッファ130のメモリエレメントは,全て埋まってしまう。続く,Set3(参照情報Nの−1)の出力情報を記録する際には,最初に記録されたSet0の情報を削除し,Set1〜Set3の情報を先頭側に一つずつずらして移動させ,空きとなった4つめのメモリエレメントに,新たにSet3の出力結果を記憶させる。以降のSet2への参照を行う際や,Set4,Set5の記録をする際にも,同様の手順で処理が行われる。
次に,本発明の異なる実施例について説明する。実施例2においては,インデックスバッファ220における参照情報の記録の仕方が,実施例1とは異なっている。
図7は,実施例2におけるインデックスバッファ220にプリミティブを記録するアルゴリズムを示している。まず始めに,あるプリミティブを対象にこのプリミティブが既にインデックスバッファ220に記録されているかを判定するステップ701を実施する。
具体的な判定方法としては,プリミティブの頂点情報を取得して,この頂点から構成されるプリミティブの配列と同じ値が,インデックスバッファ220上に存在するか否かにより,判定することができる。
ステップ701における判定により,プリミティブが存在しないと判定された場合(Noである場合),ステップ702において,インデックスバッファ220の最後尾にプリミティブを構成する頂点データの位置情報を配列として記録する。また,このプリミティブの先頭データの直前に,プリミティブの配列情報の定義を宣言して,定義コマンドDが記録される。また,この定義コマンドDは,このプリミティブのジオメトリシェーダ140での処理結果である出力情報であって,キャッシュバッファ130に記録されたプリミティブ出力GS1のキャッシュバッファ130のアドレスにも関連付けられている。また,この定義コマンドDの宣言の際には,プリミティブ列を特定するためのプリミティブIDがその宣言の中で関連づけられる。
また,定義コマンドDは,これと関連付けされたプリミティブのサイズ長データSと共に同一のメモリエレメントに記録することもできる。この定義コマンドDは,既にその識別情報が使用されているのであれば,これを消去しそこに新しい定義コマンドDによって定義されるプリミティブの配列情報と,そのキャッシュバッファ130上に記憶された処理結果であるジオメトリシェーダGS1を上書きする。本実施形態においては,この定義コマンドDとして宣言可能な個数は,キャッシュバッファ130の記録領域の領域数に相当す。本実施例において,定義コマンドDとして宣言可能な個数は4であり,D0〜D3を選択可能である。
一方,ステップ701における判定により,プリミティブが存在することと判定された場合(Yesである場合)には,定義コマンドDへの参照コマンドRを記録するとともに,インデックスバッファ220に記録されているプリミティブの情報を削除する。ここでプリミティブの情報を削除する理由は,この時すでにこのインデックスバッファ220上のプリミティブに対する処理は完了し,その結果がキャッシュバッファ130に記録されていることから,こプリミティブの情報を削除することで,記録領域の解放を行うためである。
次に,図8を用いて本実施例における,ジオメトリシェーダ140における処理の流れを説明する。
最初に,ステップ801において,インデックスバッファ220からインデックス値をフェッチングしていき,フェッチされたインデックス値に定義コマンドD,あるいは参照コマンドRのどちらが含まれるかを判定する。
ステップ801における判定において,定義コマンドDが含まれている判定される場合には,ステップ802において,記録されているプリミティブのサイズ情報を取得し,プリミティブに対してジオメトリシェーダ140において演算処理を行う。また,プリミティブのサイズが固定の場合であれば,サイズを取得しなくともこの処理は実行可能である。
次いで,ステップ803において,キャッシュバッファ130より定義コマンドDに含まれるプリミティブIDと同じ識別子で事前に定義されたプリミティブの出力情報が存在する場合にはこれを取り除き,ジオメトリシェーダ140における出力情報をキャッシュバッファ130に同定義コマンドDと関連付して記憶する。すなわち,既にこの定義コマンドDと同じ識別情報が存在する場合には上書きが行われ,存在しない場合には新たに定義コマンドDが設定されている。
そして,ステップ804において,このジオメトリシェーダ140におけるプリミティブ出力GS1を次のジオメトリシェーダ140のステージに対しての入力値として送信する。
一方,ステップ801における判定において,参照コマンドRが含まれていると判定される場合には,ステップ805においてキャッシュバッファ130から同参照コマンドRによって参照される定義コマンドDに含まれるプリミティブIDによって既に定義済みのプリミティブのジオメトリシェーダ140での処理の出力をフェッチして利用する。
そして,ステップ806において,このフェッチされたプリミティブ出力GS1をジオメトリシェーダ140の次のステージへの入力値として送信する。
次に,この実施例において実施例1で例示した多角形メッシュ500がどのようにインデックスバッファ220上に記憶されているかについて,図9を用いて説明する。
図9に示されるようにSET0は,9−3−2−1−8−13−14−15−10−5−4の11の頂点からなるプリミティブであり,インデックスバッファ220には,このプリミティブのサイズを表すデータサイズ長Sとして,「11」と,定義コマンドD0が記録されている。このSet0に隣接するインデックスバッファ220上には,Set1が記録されている。Set1は,14−9−8−13−18−19−20−15−10からなるプリミティブであり,この先頭にはサイズ長データSとして。「9」と,プリミティブ定義コマンドD1が記録されている。同様に,Set2は先頭にデータサイズ長サイズ長データSとして。「9」と,定義コマンドD2が記憶され,15−10−9−14−19−20−21―16−11の順に記録されている。Set3は,先頭にサイズ長データSとして,「9」と,定義コマンドD3が記憶され,10−5−4−9−14−15−16−11−6の順に記録されている。続いてSet3,Set2が繰り返し用いられるが,インデックスバッファ220においては,これらのプリミティブは既に存在していることから,再び頂点データへの参照値が記録される代わりに,プリミティブへの参照コマンドRが記憶される。したがって,参照コマンドR3,R2が。順次記録される。続いて,Set4として頂点16−11−10−15−20−21−22−17−12の順番のプリミティブが,インデックスバッファ220に記録され,先頭にデータサイズ長Sとして,「9」と,定義コマンドD0が記録されている。この時,既にD0〜D3の全てのコマンドが定義されてしまっていることから,最初に宣言されたD0のコマンドに新たな定義が上書きされている。最後に,Set5として11−6−5−10−15−16−17−12−7の順番のプリミティブがインデックスバッファ220に記憶され,先頭にサイズ長データSとして。「9」と,定義コマンドD1が記録されている。
次に,この多角形メッシュ500によってジオメタリシェーダ140における処理結果をキャッシュバッファ130に記録していく動作について,図10を用いて説明する。図10は,キャッシュバッファ130の構成を示したブロック図である
まず,Set0〜Set3に対する処理がおこなわれる際には,キャッシュバッファ130の先頭から順に,それぞれの出力結果であるプリミティブ出力GS1が,入力される。Set3の出力結果が記憶された際,このキャッシュバッファ130の記憶領域,は全て埋まってしまう。続く,参照コマンドR3,R2が宣言される際には,キャッシュバッファ130には変更が加えられず,既に記録されているSet3,Set2のプリミティブ出力GS1が再利用される。続いて,Set4が記録される際には,既にD0〜D3が使用されていることから,このうち最初に記憶されたD0に対してコマンド定義がされる。したがって,Set0が記憶されていた場所に,Set4のプリミティブ出力GS1が記録される。次のSet5の記憶においても,同様にD1に対してコマンド定義がなされ,Set1が記録されていた場所に,Set5のプリミティブ出力GS1が記録される。
以上のことから,この第2の実施形態の画像処理装置においても,キャッシュバッファ130上に記録されたプリミティブのジオメトリシェーダ140での処理結果が,プリミティブ出力GS1として記録され,しかも,この処理結果を定義コマンドD及び参照コマンドRとして再利用可能である。このため,第2の実施形態の画像処理装置は,プリミティブの処理結果を効率よく再利用でき,処理の高速化を図ることができる。
100 GPU
110 頂点シェーダ
120 グラディエントセットアップユニット
130 キャッシュバッファ
140 ジオメトリシェーダ
150 ラスタライザ
160 初期深さ/ステンシルテストユニット
170 属性グラディエントセットアップ
属性補間ユニット
180 ピクセル/フラグメントシェーダ
190 ポストプロセッサ
210 頂点バッファ
220 インデックスバッファ
500 多角形メッシュ
501 四角形
502 四角形

Claims (6)

  1. 頂点データへの参照値がメモリエレメントに配列として記憶されるインデックスバッファと,前記頂点データから構成されるプリミティブ列の演算処理を少なくとも2ステージ以上の処理で行うジオメトリシェーダとを備え,前記ジオメトリシェーダのステージでは,当該ステージ以前のステージにおける出力結果を再利用することができる画像処理装置であって,
    前記インデックスバッファに記録される前記プリミティブ列と同様の前記頂点データから構成されたプリミティブ列が,当該インデックスバッファに既に存在するか否かを判定するプリミティブ判定手段と,
    前記プリミティブ判定手段により,前記プリミティブ列が存在しないと判定された場合には,前記インデックスバッファに前記プリミティブ列を構成する頂点データへの参照値を記憶するとともに,当該プリミティブ列の先頭データの直前に,当該プリミティブ列のサイズをS値として記憶するプリミティブ記憶手段と,
    前記プリミティブ判定手段により,前記プリミティブ列が既に存在すると判定された場合には,当該プリミティブ列が現在位置よりいくつ前のプリミティブ列であるかを示す参照情報を,負の整数にて記憶する参照情報設定手段と,
    前記インデックスバッファをフェッチングし,フェッチされた値に,前記S値又は前記参照情報のどちらが含まれるかを判断するインデックス値判定手段と,
    前記インデックス値判定手段により,前記S値が含まれると判定された場合には,当該S値の一つ後方の記録要素からS個分の前記頂点データを取得して,当該頂点データから構成されるプリミティブ列に対して,演算処理を行うジオメトリシェーダと,
    前記ジオメトリシェーダにおける出力情報をキャッシュバッファに追加して記憶するキャッシュ手段と,
    前記インデックス値判定手段により,前記参照情報が含まれると判断された場合には,当該参照情報に含まれる参照先のプリミティブ列に対する前記ジオメトリシェーダの前記出力情報を,前記キャッシュバッファからフェッチして利用する再利用手段と,
    を備えるプリミティブ列の演算処理を行う画像処理装置。
  2. 頂点データへの参照値がメモリエレメントに配列として記憶されるインデックスバッファと,前記頂点データから構成されるプリミティブ列の演算処理を少なくとも2ステージ以上の処理で行うジオメトリシェーダとを備え,前記ジオメトリシェーダのステージでは,当該ステージ以前のステージにおける出力結果を再利用することができる画像処理装置であって,
    前記インデックスバッファに記録される前記プリミティブ列と同様の前記頂点データから構成されたプリミティブ列が,当該インデックスバッファに既に存在するか否かを判定するプリミティブ判定手段と,
    前記プリミティブ判定手段により,前記プリミティブ列が存在しないと判定された場合には,前記インデックスバッファに前記プリミティブ列を構成する頂点データを記憶し,当該プリミティブ列の先頭データの直前に,当該プリミティブ列を識別可能なプリミティブIDを含む定義コマンドを記録するプリミティブ記憶手段と,
    前記プリミティブ判定手段により,前記プリミティブ列が存在すると判定された場合には,前記定義コマンドへの参照コマンドを記録するとともに,前記インデックスバッファに記録された前記定義コマンドに含まれる前記プリミティブIDにより定義されるプリミティブ列の情報を取り除くプリミティブ参照情報設定手段と,
    前記インデックスバッファをフェッチングし,フェッチされた値に,前記定義コマンド又は前記参照コマンドのどちらが含まれるかを判断するインデックス値判定手段と,
    前記インデックス値判定手段により,前記定義コマンドが含まれると判断された場合に,前記プリミティブ記憶手段により定義された前記プリミティブ列の頂点データを取得し,当該プリミティブ列に対して演算処理を行うジオメトリシェーダと,
    キャッシュバッファに前記定義コマンドと同様の識別子が存在する場合にはこれを取り除き,前記ジオメトリシェーダにおける出力情報を,当該キャッシュバッファに,前記定義コマンドと関連付けて記憶するキャッシュ手段と,
    前記インデックス値判定手段により,前記参照コマンドが含まれると判断された場合には,当該参照コマンドによって前記定義コマンドを参照し,当該定義コマンドと関連付けられた前記プリミティブ列に対する前記ジオメトリシェーダの処理の出力情報を,前記キャッシュバッファからフェッチして利用する再利用手段と,
    を備えるプリミティブ列の演算処理を行う画像処理装置。
  3. 請求項2に記載のプリミティブ列の演算処理を行う画像処理装置において,
    前記プリミティブ列は可変サイズのプリミティブであり,
    前記プリミティブ記憶手段は,前記定義コマンドとともに,当該定義コマンドによって宣言されたプリミティブ列の頂点数を同じメモリエレメントに記憶する
    プリミティブ列の演算処理を行う画像処理装置。
  4. 請求項1〜3のいずれか一項に記載のプリミティブ列の演算処理を行う画像処理装置において,
    前記ジオメトリシェーダの出力情報を再びジオメトリシェーダへの入力情報として送信し,前記出力情報に含まれる前記プリミティブ列の処理結果を利用した処理を行う
    プリミティブ列の演算処理を行う画像処理装置。
  5. 請求項4に記載のプリミティブ列の演算処理を行う画像処理装置において,
    前記ジオメトリシェーダからの出力情報を再度前記ジオメトリシェーダへの入力情報として渡すまでの間に,複数のプリミティブ列を統合または分割し,新たなプリミティブ列として前記キャッシュバッファに記録するプリミティブ再設定手段
    を備えるプリミティブ列の演算処理を行う画像処理装置。
  6. 請求項1〜5のいずれか一項に記載のプリミティブ列の演算処理を行う画像処理装置において,
    前記キャッシュバッファに対して前記ジオメトリシェーダの出力情報を記録させる場合は,当該キャッシュバッファに対し,FIFOにて,前記出力情報が記憶される
    プリミティブ列の演算処理を行う画像処理装置。
JP2012546955A 2010-12-03 2011-12-02 画像処理装置 Active JP5837507B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012546955A JP5837507B2 (ja) 2010-12-03 2011-12-02 画像処理装置

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2010270729 2010-12-03
JP2010270729 2010-12-03
JP2012546955A JP5837507B2 (ja) 2010-12-03 2011-12-02 画像処理装置
PCT/JP2011/077915 WO2012074092A1 (ja) 2010-12-03 2011-12-02 画像処理装置

Publications (2)

Publication Number Publication Date
JPWO2012074092A1 JPWO2012074092A1 (ja) 2015-03-02
JP5837507B2 true JP5837507B2 (ja) 2015-12-24

Family

ID=46172014

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012546955A Active JP5837507B2 (ja) 2010-12-03 2011-12-02 画像処理装置

Country Status (3)

Country Link
US (1) US9218686B2 (ja)
JP (1) JP5837507B2 (ja)
WO (1) WO2012074092A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103092920B (zh) * 2012-12-26 2017-04-12 新浪网技术(中国)有限公司 半结构化数据的存储方法及存储系统
US9299123B2 (en) * 2013-01-22 2016-03-29 Qualcomm Incorporated Indexed streamout buffers for graphics processing
US8984230B2 (en) * 2013-01-30 2015-03-17 Hewlett-Packard Development Company, L.P. Method of using a buffer within an indexing accelerator during periods of inactivity
US10096079B2 (en) * 2013-06-10 2018-10-09 Sony Interactive Entertainment Inc. Fragment shaders perform vertex shader computations
US10134102B2 (en) 2013-06-10 2018-11-20 Sony Interactive Entertainment Inc. Graphics processing hardware for using compute shaders as front end for vertex shaders
US10176621B2 (en) 2013-06-10 2019-01-08 Sony Interactive Entertainment Inc. Using compute shaders as front end for vertex shaders
US10102603B2 (en) * 2013-06-10 2018-10-16 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
US9760968B2 (en) 2014-05-09 2017-09-12 Samsung Electronics Co., Ltd. Reduction of graphical processing through coverage testing
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US10235811B2 (en) 2016-12-29 2019-03-19 Intel Corporation Replicating primitives across multiple viewports
US10510181B2 (en) * 2017-06-27 2019-12-17 Samsung Electronics Co., Ltd. System and method for cache management using a cache status table
US10628910B2 (en) 2018-09-24 2020-04-21 Intel Corporation Vertex shader with primitive replication
JP2020160737A (ja) * 2019-03-26 2020-10-01 株式会社コーエーテクモゲームス 情報処理装置、情報処理方法及びプログラム
US11189002B1 (en) * 2019-07-24 2021-11-30 Parallels International Gmbh System and method for detecting when geometry shaders output a constant amount of data

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3792776B2 (ja) * 1996-05-10 2006-07-05 株式会社ソニー・コンピュータエンタテインメント 描画処理装置及び方法
US5740409A (en) * 1996-07-01 1998-04-14 Sun Microsystems, Inc. Command processor for a three-dimensional graphics accelerator which includes geometry decompression capabilities
JP3286213B2 (ja) * 1996-07-30 2002-05-27 インターナショナル・ビジネス・マシーンズ・コーポレーション 幾何モデルを圧縮し圧縮解除する方法及びシステム
US7315303B1 (en) * 2002-01-30 2008-01-01 California Institute Of Technology Hybrid meshes
US7385608B1 (en) * 2003-12-31 2008-06-10 3Dlabs Inc. Ltd. State tracking methodology
WO2009058845A1 (en) * 2007-10-30 2009-05-07 Advanced Micro Devices Real-time mesh simplification using the graphics-processing unit
US8868838B1 (en) * 2008-11-21 2014-10-21 Nvidia Corporation Multi-class data cache policies
JP2010152702A (ja) * 2008-12-25 2010-07-08 Fujitsu Semiconductor Ltd グラフィックス用半導体集積回路
US10169072B2 (en) * 2009-09-23 2019-01-01 Nvidia Corporation Hardware for parallel command list generation

Also Published As

Publication number Publication date
JPWO2012074092A1 (ja) 2015-03-02
WO2012074092A1 (ja) 2012-06-07
US20130113790A1 (en) 2013-05-09
US9218686B2 (en) 2015-12-22

Similar Documents

Publication Publication Date Title
JP5837507B2 (ja) 画像処理装置
US11922534B2 (en) Tile based computer graphics
US7202872B2 (en) Apparatus for compressing data in a bit stream or bit pattern
US7161603B2 (en) Image rendering device and image rendering method
US10043306B2 (en) Using depth data in a graphics processing system
JP6626691B2 (ja) テクスチャ処理方法及びその装置
JP4913823B2 (ja) 拡張されたプリミティブの頂点キャッシュの処理を加速する装置
JP2005100177A (ja) 画像処理装置およびその方法
KR102646818B1 (ko) 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제
US9519982B2 (en) Rasterisation in graphics processing systems
US11468630B2 (en) Rendering scenes using a combination of raytracing and rasterization
KR100546383B1 (ko) 눈에 보이지 않는 프래그먼트를 처리하기 위한 3차원그래픽스 렌더링 엔진 및 그 방법
JP2005100176A (ja) 画像処理装置およびその方法
US10726610B2 (en) Efficient graphics processing using metadata
JP7100624B2 (ja) 優先プリミティブバッチのビニング及びソートを用いたハイブリッドレンダリング
US11790479B2 (en) Primitive assembly and vertex shading of vertex attributes in graphics processing systems
KR20160068204A (ko) 메시 지오메트리를 위한 데이터 처리 방법 및 이를 기록한 컴퓨터 판독 가능 저장 매체
KR102116976B1 (ko) 렌더링 방법 및 장치
Scheibel et al. Attributed vertex clouds
KR101239965B1 (ko) 렌더링 장치 및 방법
US20040012586A1 (en) Image processing apparatus and method of same
US20230386133A1 (en) Graphics processing systems and methods with geometry level of detail processing
US8379046B2 (en) Method and apparatus for rendering
CN116385253A (zh) 图元绘制方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141127

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: 20151027

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151105

R150 Certificate of patent or registration of utility model

Ref document number: 5837507

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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