D3D10_USAGE のまとめ

従来 CPU からのアクセスは、リソース内の範囲を指定して Lock()/Unlock() を
呼び出していました。D3D10 では Map()/Unmap() に変わっていて、特にアクセス
範囲の指定もありません。
CPU と GPU のそれぞれのリソースアクセス制限は、生成時の D3D10_USAGE に
よって区別します。

・D3D10_USAGE_DEFAULT
  GPU が読み書きするリソース。CPU はアクセスできない。

・D3D10_USAGE_IMMUTABLE
  一度作成したら書き換えできない。constant のようなリソース。
  従来のゲームの作り方だと大半がこれに相当します。

・D3D10_USAGE_DYNAMIC
  CPU から GPU へ一方通行転送が可能。これを使うことで動的なオブジェクトも
  スムーズなやり取りができます。

・D3D10_USAGE_STAGING
  CPU 側で読み込めます。つまり GPU → CPU の転送が可能です。

それぞれの読み書き制限をまとめると次のようになります。

GPU-R,GPU-W,CPU-R,CPU-W
 ○  ○  ×  ×   DEFAULT
 ○  ×  ×  ×   IMMUTABLE
 ○  ×  ×  ○   DYNAMIC
 ○  ○  ○  ○   STAGING

特筆すべき点は、CPU 書込み禁止のリソースは Map() すらできないことです。
それじゃどうやって初期データを書き込むのかというと、バッファ作成時に
一緒に初期化用データを渡すことができます。
初期化時の一度きりの転送と Map() による直接アクセスを明確に分離している
わけですね。

また DYNAMIC は GPU が読み込みのみで CPU は書き込み専用です。
これを使えばスムーズな同期転送ができそうなこともわかります。

この辺必要な機能が明確になってかなりわかりやすくなりました。

D3D dual source color blending

D3D10 では dual source color blending なる便利機能があることを発見しました。
今まで pixel shader から 1つの render target に対して出力できるカラーは
RGBA の 4ch のみでした。

そのため例えば SrcAlpha + InvSrcAlpha などを使って pixel 毎の blend factor
として alpha を使用してしまうと、
Render Target の alpha にも任意の値を書き込みたいけどできないという
矛盾が生じてしまいます。

この新機能を使えば pixel shader からの出力が 4ch ×2 (SV_TARGET0, SV_TARGET1)
になるので、Render Target の alpha には diffuse や depth といった任意の値を
書き込みつつ、さらに任意の blend factor でブレンドできるといった設定が
可能になります。

これは便利だ

DirectX SDK February 2007

DirectX SDK February 2007 がリリースされています。
DirectX Software Development Kit February 2007
Vista 版 DirectX9 である Direct3D9Ex の説明やサンプルが追加されたようです。
DirectSound も Vista 向けのアップデートが行われており、Vista への移行が
本格的になってきました。
もちろん Direct3D 10 も含まれています。

やっぱり Vista が発売されたのが大きいですね。
DirectX まわりの動きも今後活発になりそうです。

GeForce8800 Vista ドライバ 100.54

やっと出ました!
ベータでない Vista 用ドライバです。
nVIDIA のサイトから落とせます。
http://www.nvidia.com/content/drivers/drivers.asp

GeForce8800 GTX/GTS が発売されて、
DirectX SDK の D3D10 も RTM して、
Windows Vista も発売されて、
Vista 用ドライバも出て、
ようやく Shader4.0 が普通に使えます。
長かった・・

追記: よく見たらベータでした。
失礼しました。

PS3 Linux ファームアップ 1.50

Playstation3 用に新しいファームウエア v1.50 が出ました。
前回が v1.32 だったので、結構大幅なバージョンアップでしょうか。
http://www.jp.playstation.com/ps3/update/

他のシステムの起動周りで何か変わってないか HDD をフォーマットして確認して
みました。残念ながら「PS3 Linux のちょっと残念な点」 で書いた点については
特に何も変わっていませんでした。

HDD分割も相変わらず 10GB のままで、
パーティションを切らないと他のシステムのインストールも優先起動システムの選択も
できませんでした。
次回の更新に期待です。