JP4674729B2 - グラフィックス処理装置、グラフィックスライブラリモジュール、およびグラフィックス処理方法 - Google Patents

グラフィックス処理装置、グラフィックスライブラリモジュール、およびグラフィックス処理方法 Download PDF

Info

Publication number
JP4674729B2
JP4674729B2 JP2007288981A JP2007288981A JP4674729B2 JP 4674729 B2 JP4674729 B2 JP 4674729B2 JP 2007288981 A JP2007288981 A JP 2007288981A JP 2007288981 A JP2007288981 A JP 2007288981A JP 4674729 B2 JP4674729 B2 JP 4674729B2
Authority
JP
Japan
Prior art keywords
graphics
command
drawing command
function
called
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
JP2007288981A
Other languages
English (en)
Other versions
JP2008123519A (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 Interactive Entertainment Inc
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 Interactive Entertainment Inc, Sony Computer Entertainment Inc filed Critical Sony Interactive Entertainment Inc
Publication of JP2008123519A publication Critical patent/JP2008123519A/ja
Application granted granted Critical
Publication of JP4674729B2 publication Critical patent/JP4674729B2/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

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 (12)

  1. グラフィックスライブラリが提供するグラフィックス関数を用いて記述されたアプリケーションプログラムにもとづいて描画コマンドを生成するメインプロセッシングユニットと、
    前記メインプロセッシングユニットにより生成される描画コマンド列を保持するコマンドバッファが設けられるメモリと、
    前記コマンドバッファに保持された描画コマンド列を読み出して描画処理を実行するグラフィックスプロセッシングユニットとを含み、
    前記メインプロセッシングユニットは、アプリケーションプログラムからグラフィックスライブラリを用いて一のグラフィックス関数が呼び出されたとき、次にグラフィックスライブラリを用いて別のグラフィックス関数が呼び出されるまでグラフィックスライブラリ内に描画属性を保持することなく、前記別のグラフィックス関数が呼び出される前に前記一のグラフィックス関数を描画コマンドに変換することにより、アプリケーションプログラムから呼び出される各グラフィックス関数を描画コマンドに変換し、前記コマンドバッファに蓄積することを特徴とするグラフィックス処理装置。
  2. 前記メインプロセッシングユニットにより最後に描画コマンドの書き込みが完了した前記コマンドバッファの位置を示す書き込みポインタと、前記グラフィックスプロセッシングユニットにより次に描画コマンドが読み出されるべき前記コマンドバッファの位置を示す読み出しポインタとにより、前記コマンドバッファに対する読み書きが管理されることを特徴とする請求項1に記載のグラフィックス処理装置。
  3. 前記メインプロセッシングユニットは、プログラムモジュール別に描画コマンド列を生成してコマンドバッファに保持し、あるプログラムモジュールに対応する描画コマンド列の最後のコマンドとして、次に実行されるべき別のプログラムモジュールに対応する描画コマンド列の先頭アドレスを飛び先とするジャンプ命令を生成することを特徴とする請求項2に記載のグラフィックス処理装置。
  4. 前記ジャンプ命令は、前記読み出しポインタを次に実行されるべき別のプログラムモジュールに対応する描画コマンド列の先頭アドレスを指すように変更する命令であることを特徴とする請求項3に記載のグラフィックス処理装置。
  5. アプリケーションプログラムにより同一のプログラムモジュールが複数回呼び出される場合、前記メインプロセッシングユニットは、いったん生成した前記同一のプログラムモジュールに対応する描画コマンド列を次の実行時まで前記コマンドバッファに保持し、前記同一のプログラムモジュールが再度呼び出されるとき、描画コマンド列を改めて生成することなく、前記コマンドバッファに保持された前記同一のプログラムモジュールに対応する描画コマンド列を再利用することを特徴とする請求項3に記載のグラフィックス処理装置。
  6. 前記メインプロセッシングユニットは、前記同一のプログラムモジュールが再度呼び出されるとき、前記読み出しポインタを前記コマンドバッファに保持された前記同一のプログラムモジュールに対応する描画コマンド列の先頭アドレスを指すように変更するためのジャンプ命令を描画コマンドとして生成することを特徴とする請求項5に記載のグラフィックス処理装置。
  7. 前記メインプロセッシングユニットが、処理単位であるスレッドを複数並列に実行させるマルチスレッド方式でアプリケーションプログラムを実行する場合、各スレッドは、描画コマンド列を並列に生成してそれぞれのコマンドバッファに保持し、その描画コマンド列の最後のコマンドとして、次に実行されるべき描画コマンド列の先頭アドレスを飛び先とするジャンプ命令を生成することを特徴とする請求項1または2に記載のグラフィックス処理装置。
  8. 前記メインプロセッシングユニットが、互いに独立に動作する複数のプロセッサを含む場合、各プロセッサは、描画コマンド列を並列に生成してそれぞれのコマンドバッファに保持し、その描画コマンド列の最後のコマンドとして、次に実行されるべき描画コマンド列の先頭アドレスを飛び先とするジャンプ命令を生成することを特徴とする請求項1または2に記載のグラフィックス処理装置。
  9. アプリケーションプログラムから呼び出されるグラフィックス関数群をファイルにまとめたグラフィックスライブラリモジュールを含むコンピュータプログラムであって、
    当該グラフィックスライブラリが提供するグラフィックス関数を用いて記述されたアプリケーションプログラムからグラフィックスライブラリを用いて一のグラフィックス関数が呼び出されたとき、次にグラフィックスライブラリを用いて別のグラフィックス関数が呼び出されるまでグラフィックスライブラリ内に描画属性を保持することなく、前記別のグラフィックス関数が呼び出される前に前記一のグラフィックス関数を描画コマンドに変換することにより、アプリケーションプログラムから呼び出される各グラフィックス関数を描画コマンドに変換することにより、描画コマンド列を生成する機能をコンピュータに実現させることを特徴とするプログラム
  10. プログラムモジュール別に描画コマンド列を生成し、あるプログラムモジュールに対応する描画コマンド列の最後のコマンドとして、次に実行されるべき別のプログラムモジュールに対応する描画コマンド列の先頭アドレスを飛び先とするジャンプ命令を生成する機能をさらにコンピュータに実現させることを特徴とする請求項9に記載のプログラム
  11. アプリケーションプログラムにより同一のプログラムモジュールが複数回呼び出される場合、いったん生成した前記同一のプログラムモジュールに対応する描画コマンド列を次の実行時までメモリ内に保持し、前記同一のプログラムモジュールが再度呼び出されるとき、描画コマンド列を改めて生成することなく、前記メモリに保持された前記同一のプログラムモジュールに対応する描画コマンド列を再利用する機能をさらにコンピュータに実現させることを特徴とする請求項10に記載のプログラム
  12. メインプロセッシングユニットが、グラフィックスライブラリが提供するグラフィックス関数を用いて記述されたアプリケーションプログラムからグラフィックスライブラリを用いて一のグラフィックス関数が呼び出されたとき、次にグラフィックスライブラリを用いて別のグラフィックス関数が呼び出されるまでグラフィックスライブラリ内に描画属性を保持することなく、前記別のグラフィックス関数が呼び出される前に前記一のグラフィックス関数を描画コマンドに変換することにより、アプリケーションプログラムから呼び出される各グラフィックス関数を描画コマンドに変換することにより、描画コマンド列を生成し、コマンドバッファに保持するステップと、
    グラフィックスプロセッシングユニットが、前記コマンドバッファに保持された描画コマンド列を読み出して描画処理を実行するステップとを含むことを特徴とするグラフィックス処理方法。
JP2007288981A 2006-11-10 2007-11-06 グラフィックス処理装置、グラフィックスライブラリモジュール、およびグラフィックス処理方法 Active JP4674729B2 (ja)

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JP2008123519A JP2008123519A (ja) 2008-05-29
JP4674729B2 true JP4674729B2 (ja) 2011-04-20

Family

ID=39032335

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007288981A Active JP4674729B2 (ja) 2006-11-10 2007-11-06 グラフィックス処理装置、グラフィックスライブラリモジュール、およびグラフィックス処理方法

Country Status (3)

Country Link
US (1) US8149242B2 (ja)
EP (1) EP1921584B1 (ja)
JP (1) JP4674729B2 (ja)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8294723B2 (en) * 2008-11-07 2012-10-23 Google Inc. Hardware-accelerated graphics for web applications using native code modules
US8675000B2 (en) * 2008-11-07 2014-03-18 Google, Inc. Command buffers for web-based graphics rendering
US9336028B2 (en) 2009-06-25 2016-05-10 Apple Inc. Virtual graphics device driver
US8797337B1 (en) 2009-07-02 2014-08-05 Google Inc. Graphics scenegraph rendering for web applications using native code modules
GB0913170D0 (en) * 2009-07-28 2009-09-02 Advanced Risc Mach Ltd Graphics processing systems
JP5418078B2 (ja) * 2009-09-03 2014-02-19 ヤマハ株式会社 画像プロセッサ
US10169072B2 (en) * 2009-09-23 2019-01-01 Nvidia Corporation Hardware for parallel command list generation
US20120194526A1 (en) * 2010-12-15 2012-08-02 Benjamin Thomas Sander Task Scheduling
US9645854B2 (en) * 2010-12-15 2017-05-09 Advanced Micro Devices, Inc. Dynamic work partitioning on heterogeneous processing devices
US8886699B2 (en) * 2011-01-21 2014-11-11 Cloudium Systems Limited Offloading the processing of signals
US9578299B2 (en) * 2011-03-14 2017-02-21 Qualcomm Incorporated Stereoscopic conversion for shader based graphics content
US8884963B2 (en) * 2011-05-04 2014-11-11 Qualcomm Incorporated Low resolution buffer based pixel culling
US9170820B2 (en) * 2011-12-15 2015-10-27 Advanced Micro Devices, Inc. Syscall mechanism for processor to processor calls
EP2825952B1 (en) * 2012-03-16 2017-03-15 Intel Corporation Techniques for a secure graphics architecture
CN102722859B (zh) * 2012-05-31 2014-05-14 北京像素软件科技股份有限公司 一种计算机仿真场景渲染方法
CN102789650B (zh) * 2012-07-19 2014-10-15 中国科学院软件研究所 一种基于粒子系统的海面航迹并行化仿真方法
JP5955148B2 (ja) * 2012-07-27 2016-07-20 キヤノン株式会社 画像形成装置及び仮想マシンプログラム
KR102124395B1 (ko) 2013-08-12 2020-06-18 삼성전자주식회사 그래픽스 처리 장치 및 방법
KR102147357B1 (ko) 2013-11-06 2020-08-24 삼성전자 주식회사 커맨드들을 관리하는 장치 및 방법
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US9495790B2 (en) 2014-04-05 2016-11-15 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping to non-orthonormal grid
US10068311B2 (en) 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9652882B2 (en) 2014-04-05 2017-05-16 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9836816B2 (en) 2014-04-05 2017-12-05 Sony Interactive Entertainment America Llc Varying effective resolution by screen location in graphics processing by approximating projection of vertices onto curved viewport
US10042792B1 (en) * 2014-04-17 2018-08-07 Bitmicro Networks, Inc. Method for transferring and receiving frames across PCI express bus for SSD device
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US10430169B2 (en) 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US9760113B2 (en) 2015-02-20 2017-09-12 Sony Interactive Entertainment America Llc Backward compatibility through use of spoof clock and fine grain frequency control
US11403099B2 (en) 2015-07-27 2022-08-02 Sony Interactive Entertainment LLC Backward compatibility by restriction of hardware resources
US10235219B2 (en) 2015-07-27 2019-03-19 Sony Interactive Entertainment America Llc Backward compatibility by algorithm matching, disabling features, or throttling performance
US9830082B1 (en) 2015-09-08 2017-11-28 EMC IP Holding Company LLC Hybrid hyper-converged infrastructure and storage appliance
US9778865B1 (en) * 2015-09-08 2017-10-03 EMC IP Holding Company LLC Hyper-converged infrastructure based on server pairs
US9892024B2 (en) 2015-11-02 2018-02-13 Sony Interactive Entertainment America Llc Backward compatibility testing of software in a mode that disrupts timing
CN105630441B (zh) * 2015-12-11 2018-12-25 中国航空工业集团公司西安航空计算技术研究所 一种基于统一染色技术的gpu系统
CN105635806B (zh) * 2015-12-28 2018-12-28 北京像素软件科技股份有限公司 群体运动场景的渲染方法
US11068291B2 (en) 2016-01-22 2021-07-20 Sony Interactive Entertainment Inc. Spoofing CPUID for backwards compatibility
US10102094B2 (en) 2016-01-22 2018-10-16 Sony Interactive Entertainment Inc. Simulating legacy bus behavior for backwards compatibility
US11232531B2 (en) * 2017-08-29 2022-01-25 Intel Corporation Method and apparatus for efficient loop processing in a graphics hardware front end
CN108154463B (zh) * 2017-12-06 2021-12-24 中国航空工业集团公司西安航空计算技术研究所 一种模型化gpu显存系统管理方法
US11386518B2 (en) * 2019-09-24 2022-07-12 Advanced Micro Devices, Inc. Exception handler for sampling draw dispatch identifiers
US11907756B2 (en) * 2020-02-20 2024-02-20 Intel Corporation Concurrent workload scheduling with multiple level of dependencies
CN116991600B (zh) * 2023-06-15 2024-05-10 上海一谈网络科技有限公司 图形调用指令的处理方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09179717A (ja) * 1995-12-22 1997-07-11 Hitachi Ltd グラフィックス装置および情報処理装置
WO2004055672A1 (ja) * 2002-12-18 2004-07-01 Fujitsu Limited 性能シミュレーション装置、性能シミュレーションプログラムおよび性能シミュレーション方法
JP2004302927A (ja) * 2003-03-31 2004-10-28 Fujitsu Ltd 干渉前アラーム表示プログラム
JP2005521178A (ja) * 2002-03-22 2005-07-14 ディーリング,マイケル,エフ. スケーラブルな高性能3dグラフィックス
JP2005202983A (ja) * 2005-03-28 2005-07-28 Sony Computer Entertainment Inc 情報処理装置および方法
JP2008524720A (ja) * 2004-12-20 2008-07-10 エヌヴィディア コーポレイション プログラム可能なハードウェアを用いたリアルタイムディスプレイの後処理
JP2008538829A (ja) * 2005-03-14 2008-11-06 サイトリックス システムズ, インコーポレイテッド 圧縮を用いて分散処理環境における図形表示を更新する方法および装置

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5675773A (en) * 1995-12-21 1997-10-07 Cirrus Logic, Inc. Graphics display system with a low level hardware dependent graphics library
US5889994A (en) * 1997-03-27 1999-03-30 Hewlett-Packard, Co. Method for cataloging graphics primitives by rendering state
US6075546A (en) * 1997-11-10 2000-06-13 Silicon Grahphics, Inc. Packetized command interface to graphics processor
US6097402A (en) * 1998-02-10 2000-08-01 Intel Corporation System and method for placement of operands in system memory
WO2000000887A1 (en) * 1998-06-30 2000-01-06 Intergraph Corporation Method and apparatus for transporting information to a graphic accelerator card
US6862027B2 (en) * 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
US7330187B2 (en) * 2003-07-29 2008-02-12 Hewlett-Packard Development Company, L.P. Hybrid processing of OpenGL display list commands
US7015915B1 (en) * 2003-08-12 2006-03-21 Nvidia Corporation Programming multiple chips from a command buffer
US7139005B2 (en) * 2003-09-13 2006-11-21 Microsoft Corporation Optimized fixed-point mathematical library and graphics functions for a software-implemented graphics rendering system and method using a normalized homogenous coordinate system
JP4493626B2 (ja) * 2006-05-25 2010-06-30 株式会社ソニー・コンピュータエンタテインメント マルチプロセッサシステム、ライブラリモジュール、および描画処理方法
US20080055326A1 (en) * 2006-09-05 2008-03-06 Yun Du Processing of Command Sub-Lists by Multiple Graphics Processing Units
US8269782B2 (en) * 2006-11-10 2012-09-18 Sony Computer Entertainment Inc. Graphics processing apparatus

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09179717A (ja) * 1995-12-22 1997-07-11 Hitachi Ltd グラフィックス装置および情報処理装置
JP2005521178A (ja) * 2002-03-22 2005-07-14 ディーリング,マイケル,エフ. スケーラブルな高性能3dグラフィックス
WO2004055672A1 (ja) * 2002-12-18 2004-07-01 Fujitsu Limited 性能シミュレーション装置、性能シミュレーションプログラムおよび性能シミュレーション方法
JP2004302927A (ja) * 2003-03-31 2004-10-28 Fujitsu Ltd 干渉前アラーム表示プログラム
JP2008524720A (ja) * 2004-12-20 2008-07-10 エヌヴィディア コーポレイション プログラム可能なハードウェアを用いたリアルタイムディスプレイの後処理
JP2008538829A (ja) * 2005-03-14 2008-11-06 サイトリックス システムズ, インコーポレイテッド 圧縮を用いて分散処理環境における図形表示を更新する方法および装置
JP2005202983A (ja) * 2005-03-28 2005-07-28 Sony Computer Entertainment Inc 情報処理装置および方法

Also Published As

Publication number Publication date
JP2008123519A (ja) 2008-05-29
US20090002380A1 (en) 2009-01-01
EP1921584B1 (en) 2021-07-14
US8149242B2 (en) 2012-04-03
EP1921584A2 (en) 2008-05-14
EP1921584A3 (en) 2014-07-09

Similar Documents

Publication Publication Date Title
JP4674729B2 (ja) グラフィックス処理装置、グラフィックスライブラリモジュール、およびグラフィックス処理方法
JP4550878B2 (ja) グラフィックス処理装置
KR101091374B1 (ko) 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템
TWI645371B (zh) 在上游著色器內設定下游著色狀態
US8077174B2 (en) Hierarchical processor array
US7830392B1 (en) Connecting multiple pixel shaders to a frame buffer without a crossbar
JP5436526B2 (ja) グラフィックスコマンド生成装置、グラフィックスコマンド生成方法、サーバ装置、およびクライアント装置
US7366842B1 (en) Creating permanent storage on the fly within existing buffers
JP4493626B2 (ja) マルチプロセッサシステム、ライブラリモジュール、および描画処理方法
TWI488118B (zh) 處理系統中動態產生任務的傳訊、排序和執行
TW201432609A (zh) 已分配的拼貼快取
US8941669B1 (en) Split push buffer rendering for scalability
JP2016509718A (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
US11669421B2 (en) Fault injection architecture for resilient GPU computing
TWI633516B (zh) 曲面細分及幾何著色器的功率效率屬性處理
TW201439970A (zh) 儲存共用頂點之技術
TW201439975A (zh) 在光柵操作中處理後置z覆蓋率資料
TW201342240A (zh) 解決執行緒發散的方法和系統
TW201443826A (zh) 儲存共用頂點之技術
US8947444B1 (en) Distributed vertex attribute fetch
US8237725B1 (en) Vertex cache map mode for per-vertex state changes
US20230097097A1 (en) Graphics primitives and positions through memory buffers
US12062126B2 (en) Load multiple primitives per thread in a graphics pipeline
US20230205698A1 (en) Cache blocking for dispatches
US20240202003A1 (en) Inclusion of Dedicated Accelerators in Graph Nodes

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101001

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101019

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20101125

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101213

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20101213

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

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

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

Free format text: PAYMENT UNTIL: 20140204

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4674729

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

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