« ソフトバンクの携帯電話戦略 | トップへ戻る | VistaとOfficeの値段が出たんだけど »

2006年10月27日

ATIのGPU向けにプログラムを弄ったメモ

先日購入したX1600PRO向けにプログラムを改変したので,メモっておく.

そもそも既存の実験プログラムが動かなかった理由についてだがー

Cgを利用したプログラムが実行できなかった件については,
cgGLGetLatestProfile(CG_GL_FRAGMENT);
の返り値がCG_PROFILE_ARBFP1という旧世代のプロファイル,すなわち長い(命令数が多い)シェーダや動的分岐のあるシェーダが利用できないことに起因する.
今回はある程度長いプログラムを使っており,動的分岐がほぼ必須(プログラム実行開始後にシェーダソースを動的に書き換えれば回避できるけど)であり,場合によっては動的分岐を使うため,どうしようもない.
(下手すると演算精度も落ちるのかな?)

続いてGLSLを利用したプログラムもそのまま動かなかったのだが,こちらはどうやらテクスチャのフォーマット関係の問題らしい.
なんでも,ATIのGPUはいわゆるtextureRECTが使えないらしい.texture2DはtextureRECTと比べて制限が厳しいような情報を入手していたためRECT系を利用していたのだが,これが仇に.
そこで,試しにtexture2D系の実装を頑張ってみた.テクスチャ生成時のフォーマット指定を変更し,GLSLシェーダ内におけるテクスチャの形式および座標指定を変更することで対応することができる.なお,GLSLシェーダ内における座標指定は,textureRECT系が0からテクスチャサイズまでの値を指定するのに対し,texture2Dでは0から1までの値を指定するので注意が必要である.
また,ドライバの都合であると考えられるが,ATIでは
vec4 Color = {0.0, 0.0, 0.0, 0.0};
という形式の初期化指定ができないようである.
更に,0.0fのようにfloat値にfをつけても怒られてしまった.nvidiaの方が柔軟なのか,そもそも正式な記述方法からどちらかが逸脱しているのか.


とにかく,以上の変更によってX1600PRO上でプログラムが正常動作することが確認できた.まだ細かい動作確認が済んでいない部分があるが,ひとまずまともに動くようなのでベンチマークおよび公開を進めようと思う.
多分週末か週明けには更新できるだろう.


よし,サークル行くか(ぁ

投稿者 togabito : 2006年10月27日 15:01

Trackback Pings

このエントリーのトラックバックURL:
http://aaa.jspeed.jp/~togabito/cgi-bin/mt/mt-tbx.cgi/646

コメント

コメントしてください




保存しますか?