月別アーカイブ: 2008年9月

Direct3D11 Compute Shader など

再び Gamefest2008 のあたりから D3D11 関連。

Gamefest 2008 Presentations

●Compute Shader

ポストフィルタなど Compute Shader の想定されている用途や、
RWTexture2D/RWBuffer が PixelShader でも使えることなどから、
Compute Shader は Pixel Shader に近いものだと考えられます。

実際に現在の GPU でも、AMD Stream SDK の CAL で走るプログラムは
PixelShader 相当だったため一致しています。

Compute Shader は 32KByte のシェアドメモリにアクセス可能です。
2048 float4 = 8192 float = 32KByte

共有メモリと言うよりも、スレッド間で共有されるレジスタ Shared Register と
表現されているようです。

RADEON HD4870 の CAL を使った global buffer (shared local) は実測で
2048 vector、ちょうど 32KByte でした。
これが Shared Memory (Register) 相当と考えられるためほぼ一致しています。

任意の読み書きと Shared Register 以外の特徴として Atomic 命令があります。
32bit 値の read-modify-write に対応しているようです。
命令も Windows のような Interlocked~()

これを利用してスレッド同期が可能となり、排他的なメモリへアクセスなどが
できるようです。
AMD CAL では見あたりませんでしたが、CUDA では 32/64bit の Atomic 命令を
備えているようです。

AMD CAL でも Global Buffer へのアクセス、たとえば
「add g[0].x, g[0].x, r1.x」が Atomic なら代用できますが
そうではないようです。

il_ps_2_0
dcl_input_position_interp(linear) v0.xy
dcl_output_generic o0
dcl_literal l0, 1, 1, 0, 0
itof r1.x, l0.x
add g[0].x, g[0].x, r1.x
ret_dyn
end

g[0].x は毎回異なる値となりました。

● API

Direct3D11 は Direct3D10 とほぼ同じ API セットを持ち、機能拡張されている
ものとなるそうです。
詳細は SDK のリリースを待たないといけませんが、おそらく Direct3D8 と
Direct3D9 の関係に近いものだと考えられます。

DirectX7 までのベースとなる DirectDraw を捨てて、Direct3D8 は作り直されました。
その後の Direct3D9 は完全に互換性があるとはいえないものの、考え方や設計は
Direct3D8 とほとんど同じものでした。

Direct3D11 は Direct3D10 の GPU でも動作するそうです。
11 専用の機能を使用することは出来ませんが、9→10 よりはスムーズな移行が
できそうです。

でもこれは Direct3D9 以前は当たり前のことでした。
DirectX7 世代の GPU でもシェーダーなど未対応機能が走らないだけで DirectX8
が使えるし、ShaderModel1.x の Direct3D8 世代 GPU でも Direct3D9 がそのまま
使えます。

Direct3D9 から Direct3D10 への切り替えがあまりに特殊すぎました。
GPU も OS も新しくしなければならず互換性も無かったので。

関連エントリ
Gamefest2008 と Direct3D 11
AMD Stream SDK

Gamefest2008 と Direct3D 11

Gamefest 2008 のスライドが落とせるようになっているようです。

DirectX Developer Center から GDC 2008 Presentations Now Available
へ飛び、Microsoft XNA Developer Presentations の一番上にある
Gamefest 2008 Presentations をクリックします。

Gamefest 2008 Presentations

DirectX 11 関連のスライドも多数あって参考になります。
まだしっかり目を通してないですが、いくつか気になったところなど。

●書き込み

D3D11 の ShaderModel 5.0 では、新たに書き込み可能なリソースが追加
されるようです。RWTexture2D や RWBuffer など。

従来のシェーダーと違ってランダムな位置に書き込み可能なこの機能は、
最近の GPGPU 向け言語 (CUDA, AMD CAL 等) に設けられています。

Compute Shader だけかとおもったら、Pixel Shader でも使えるようです。

書き込みはオフセット付きで配列のように扱えます。

またテクスチャロードも配列形式の書式が使えるようになっています。
前はテクスチャオブジェクトに対するロード命令だったので、
ちょうど同等の機能が operator[] で定義されているものと思われます。

●HLSL

HLSL で class 定義できるようです。interface の宣言も可能。
ShaderModel 4.0 向け HLSL でも、Texture のロード命令や型宣言のみそれっぽい
書式でしたが、次は本当に class として扱えるようです。

double や long 型は、今度こそ本当に使えるようになります。
D3D10/DX10 シェーダーと64bit浮動少数

●コンパイラ

HLSL もいろいろ拡張されており、コンパイラも複雑になっていると考えられます。

D3D9 の FX (HLSL) コンパイラは D3DX9 に含まれており単なるライブラリでした。

D3D10 では core API に含まれましたが、SDK の途中から扱いが変わっています。
SDK 側で更新がはいったものの、core API 経由だと従来の 古いコンパイラ が
使われ、D3DX の API だと更新されたコンパイラが呼ばれます。

以前この辺の挙動を調べました
Direct3D 10 Shader4.0 APIによってコンパイラが違う
Direct3D 10 Shader4.0 シェーダーのコンパイル

core に含めてしまうとおいそれと更新できなくなるため失敗だったのでしょう。
D3D11 ではコンパイラの改良や修正ができるよう再び D3DX のライブラリ扱いに
戻っています。

●新しいテクスチャ形式

テクスチャ圧縮形式として新たに BC6、BC7 が追加されています。
具体的にどのような構造でどのようなアルゴリズムなのか詳細まではわかりませんが
これまでの DXT/BC の欠点を克服したものになりそうです。

ちなみに BC1~ は従来 DXT と呼ばれていたものです。

・D3D10
BC1 = DXT1
BC2 = DXT3
BC3 = DXT5
BC4 = 1チャンネルの圧縮
BC5 = ATI の法線圧縮形式 3Dc/ATI2

・D3D11
BC6
BC7

● Direct3D 11 SDK

かなり情報が多いので、D3D11 の登場は意外に早いのかもしれません。
以前 こちら で触れたように DXGI の扱いが微妙に変わっています。
DXGI は共通のコンポーネントなので、D3D10 と並列に D3D11 を持ってくることが
目的なのかもしれません。

関連エントリ
DirectX11 へ (D3D11)
Direct3D 10 Shader4.0 APIによってコンパイラが違う
Direct3D 10 Shader4.0 シェーダーのコンパイル
D3D10/DX10 シェーダーと64bit浮動少数

WindowsMobile IME FSKAREN / ATOK

FSKAREN に続いて ATOK for WindowsMobile も登場します。
ダウンロード版や優待版もあるみたいだし、これで S12HT に入れれば
MS-IME、Advanced Wnn、FSKAREN、ATOK の 4 IME 環境ができるかと思ったら

動作確認済み機種 ATOK for Windows Mobile

の下の方「非対応機種」に

”以下の機種では、日本語での文字入力が正常に行えません。現在のところ回避方法はありません”
EMONSTER LITE (S12HT) / HT1100

ATOK はテンキー入力に対応していないようです。
ctrlswapmini lite で何とかなるかもしれませんが、IME の種類が増えると
それはそれで大変。

ほぼ同時期の登場で、一見かぶると思われた FSKAREN とは少々方向性が違うようです。
こちらは機種毎のバイナリを用意してまでテンキーに対応しています。
ちょうど良いかも。

関連エントリ
EMONSTER lite S12HT IME FSKAREN

EMONSTER lite S12HT IME FSKAREN

FSKAREN は WindowsMobile 用の日本語入力&漢字変換ソフト (IME) です。
自作ソフトの関係で質問を頂いたので試しに使ってみました。

FSKAREN for Windows Mobile 富士ソフト

上記の公式ページを見ても、対応機種も載ってないし すっきりしない説明でかなり
わかりにくくなっています。
ダウンロード販売のページに飛ぶと、やっと対応機種一覧を見ることが出来ます。

・Windows Mobile 5.0/6 Standeard/6 Professional
・Softbank X01HT
・Softbank X02HT
・Softbank X03HT
・Softbank X01T
・NTT Docomo hTc Z
・EMOBILE EMONSTER S11HT
・EMOBILE EMONSTER lite S12HT

要は IME の一種で、ATOK 等と同じように WindowsMobile 端末にインストールして
MS-IME の代わりに使用することが可能です。
実際に購入してみると、対応機種にインストールすべき CAB ファイルが分かれていました。

FSKAREN_HT1100-S12HT.CAB
FSKAREN_hTcZ.CAB
FSKAREN_S11HT.CAB
FSKAREN_X01HT.CAB
FSKAREN_X01T.CAB
FSKAREN_X02HT.CAB
FSKAREN_X03HT.CAB

よく見ると対応機種一覧に載っていないはずの Docomo HT1100 があります。
pdf のマニュアルにも HT1100 としっかり書かれています。
HT1100 と S12HT は機能的に同じ端末と見なして良いのかもしれません。
(ctrlswapmini lite も HT1100 でそのまま動く可能性があります)

ニュース: 富士ソフト

上記ニュースリリースの段階では S12HT も対象機種に含まれていませんでしたし、
「※上記以外の端末も、今後順次ご提供予定」と書かれていますので、今後さらに
対象機種が増える可能性があります。

実際に EMONSTER lite S12HT に FSKAREN_HT1100-S12HT.CAB をインストールしてみました。
ちなみに S12HT は標準で Advanced Wnn が入っています。

現在の使用環境は下記の通りです。

・Today プラグイン無し、標準の HTC のプラグインも全部外してまっさらな状態
・常駐ソフトは em1key のみ
・SIP として touchkeysip + eckeyboardsip を組み込み

em1key はテンキーの文字入力と干渉するので、FSKAREN 利用時は外しました。
FSKAREN を使って、テンキーで文字入力できるようになりました。

設定は \Windows の FSKAREN.cfg に保存されているようです。

●FSKAREN によるテンキー文字入力

Advanced Wnn とほぼ同じキーアサインになっています。

・文字種切り替えは [*] キー
・[#] キーで逆トグル可能

文字入力の直後は [*] キーで濁点半濁点変換と大文字小文字変換になります。
標準の Advanced Wnn だと大文字小文字変換できなかったので、この点は FSKAREN
の方が優れています。
ctrlswapmini でいえば後変換キー相当で、au 系端末に近い操作です。

キー長押しはトグル操作のキーリピートになってしまい意味がありません。
文字種切り換えメニューも出ず、数字入力にもなりません。
この点は Advanced Wnn より劣ります。

同じキーの文字を連続入力する場合、[→] キーによる確定操作に補正がかかりません。
カーソルキーを左に戻してから、同じ文字を挿入しようとして [→] を押すと
カーソルが右に移動してしまいます。
この点は一般の携帯電話よりも操作性が劣ります。
Advanced Wnn も同じ問題を抱えています。

pdf のマニュアルは不完全で、テンキーを使った文字入力方法の説明が載って
いませんでした。

●外付け Bluetooth キーボードによる入力

Advanced Wnn と違い、スライドキーボードを開いた状態でも特に入力を取りこぼす
ことはなく普通に入力出来ました。
ただし数字入力に問題があります。
外付けキーボードの [0]~[9] のキーを押しても、テンキーと同じように文字の
トグル入力が行われてしまいます。

Advanced Wnn と違ってスライドキーボードを閉じても直りません。
外付けキーボード向けに、入力モードを変更する機能が欲しいところです。

●操作に限定した FSKAREN のメリット (Advanced Wnn との比較)

・[*] で大文字小文字変換が出来るようになる
 ただしトグル自体にも小文字を含むので、ショートトグルが好みなら合わないかも

●Advanced Wnn と同じ問題点

・テンキーだけで単独改行は出来ない。決定キーが必要なので、決定を改行以外の
 用途で使うソフトだと改行入力出来ないことがあります。

・[→]キーでトグル入力状態だけ解除したいのにカーソルも移動してしまう。

●FSKAREN の問題点

・長押しで数字入力出来ない。

・キーリピート速度を最速に設定していると、トグル入力のリピートが発生して
 入力ミスが起こりやすい。

・外付けキーボードから入力する場合に問題あり。
 数字キーがテンキーとして取られてしまう。

●ソフト

touchkeysip は一応動きますが文字種切り換えの問題が生じます。
IME が off になると入力モードが英字 [A] に戻ってしまいます。
キーボード側で文字種を切り換えなければなりません。
ただし数字入力は衝突せず、ソフトキーから [0]~[9] を入力しても文字トグルに
ならずに入力可能でした。

ctrlswapmini lite は一応動作しますが、ほぼ Advanced Wnn 同様の問題が
あります。文字種切り替えできず、高速に連続入力した場合に IME 切り替えを伴う
ケースで、判定タイミングのずれが発生します。
IME の種類が増えるとますます対応が困難になりそうです。

●変換その他

他の IME では必ず予測変換などの候補ウィンドウを off にして使っていました。
FSKAREN は確かに表示が速いようです。
今回はこのままデフォルトの設定で使ってみます。

要望点
・テンキーのキーリピートを無視して欲しい (長押しはできれば数字入力に)
・外付けキーボード用に、数字キーの判定モードを切り換えられるように
・IME のキーバインドを変更したい
・未確定バッファを確定するけど、未確定バッファが空でも改行しない操作が欲しい