DirectX Direct3D10

GeForce8800 のドライバが出た(?)ので早速 D3D10 を試しています。
ずっと DirectX SDK には Direct3D10 の Preview が付属していましたが、
RTM した December でもマニュアルが融合しただけで D3D9 も D3D10 もどっちも
入った状態なのは一緒です。

これまでも、DirectX9 に入ってた DirectInput はずっと DirectInput8 の
ままだったし、DirectSound も DirectSound8 でした。
なので Direct3D も、DirectX 全体のバージョンとは独立したナンバリングが
行われたようです。

といっても、もともと DirectX の初期の頃は各コンポーネントごとにばらばらに
インターフェース番号がついてました。

で、確か DirectX7 のときに SDK 全体の番号と各インターフェースの番号の統合
が行われました。ほぼ全部のインターフェースの番号を SDK の番号にあわせたわけ
です。

だから元に戻ったようなものでしょうか。

D3D10 はインターフェース周りからフォーマット名のシンボルから使い方まで
Direct3D9 と全く違ったものになってます。
結構大変に見えるかもしれませんが、DirectX7 まではだいたい 1年に一回
こんな感じで大幅な刷新があったんですよね。

とりあえず D3D10_DRIVER_TYPE_HARDWARE でちゃんと高速に動作しました。

API セットは Fixedパイプが無くなってかなりすっきりしたはずなのですが、
その代わり汎用性が増して自由度があがったためか、インターフェースの種類も
かなり増えています。おかげで一見しただけだと全体の構造がわからなくなって
しまいました。
例えばテクスチャの読み込み1つ見てもやるべき手順が増えてます。

また従来は目的毎に API があったため何をやるのかは割と明確でした。今では
ライティングもマテリアルもフォグも何から何まで Shader の実装依存になった
ために専用の API や構造体は無く全部汎用です。

逆に Depth, Stencil あたりの判定の流れは変わっていないので、レガシーに
感じてしまいます。

設定やパラメータの渡し方も大幅に変更になっています。効率優先でできる限り
バッファに置く構造となっていて、非常に徹底したものです。
いまのビデオカードは RAM 容量もかなり多いので、これを活用する構造にシフト
したのでしょう。コマンドストリームに乗せるものは最小限です。

・マニュアルのミス?
 December でマニュアルの D3DX10CreateShaderResourceViewFromFile() の引数が
 足りないようです。
 実際の定義では D3DX10_IMAGE_LOAD_INFO と ID3DX10ThreadPump* の2つが追加
 されています。

 チュートリアルやプログラミングガイドでも、たまに関数名が間違ってることが
 あるようです。例えば

 DirectX Graphic
  Direct3D 10
   Programming Guide
    API Features
     Reference Counting
 の最後の pDevice->GetRasterrizerState() 等。

 もしかしたら設計の最後に、全部の API 名が RSGetState() のように RS~、PS~、
 OM~、と整理されたのかもしれません。こういうミスはその名残かも。

・その他気がついたこととか随時

HLSL は technique ではなく、technique10。間違えると signature 取れずにはまる。

D3D10 では Set 系で Reference Count が増えない。

Texture の管理に ResourceView を使った場合、開放の手順が多少複雑。
データの実体は ID3D10Texture2D なので、Resource の開放も必要。

PS3 Linux のお勧めディストリビューション

Playstation3 に Linux を入れる場合さまざまなディストリビューションがあります。
PS3 上で特に開発はしないけど、クライアントとして Linux を使ってみたい。
そういう用途には今のところ Debian がお勧めです。
デスクトップ上で、アプリケーションの起動や動作が一番軽くて比較的軽快に
動作します。PS3 で FC5 で何か重いなあと思っていた方は試してもいいかもしれません。
DistributionsGeneralFAQs

●Debian
ほげめも Debian Live for PS3
ほげめも Debian-Installer for PLAYSTATION 3
PS3 やっぱり Debian 再インストールメモ

良い点
 ・軽い
 ・本来のインストーラを使ってインストールできる。
 ・インストーラはTV画面でも問題無く実行できる。
 ・インストーラは日本語で説明が表示される。
 ・Live CD で試すことができる。
 ・パッケージが豊富なので、いろいろインストールしてかなり楽しめる。

悪い点
 ・インストーラを使ったインストール直後は Window が正常に表示されないので、
  最初に xorg.conf を書き換える必要がある。
 ・インストール時にネットワーク接続が必要。
 ・Cell SDK 系が動作しない。(ライブラリバージョンが異なるため)

Cell を使った開発を行う場合は今のところ YDL か FC の2択でしょうか。

●Fedora Core 5
Fixstars PS3 Linuxのインストール

良い点
 ・PS3 で動くように構成されているので専用のコマンドも最初から入る。
 ・すぐに X(ウィンドウ) も起動できる。
 ・ネットワークが無くても DVD から install できる。
 ・Full install ではほぼ全部パッケージが入るので、後からインストールしなくてもさまざまなアプリケーションを使うことができる。
 ・Cell SDK 等の開発環境がそのまま入る。

悪い点
 ・ウィンドウはかなり重い。
 ・特殊なインストーラを使うので少々不親切。
 ・インストール時に Full か Minimum の選択しかできない。
 ・Full だと 9GB 必要。

YDL はあまり使い込んでいないので詳しく書けないのですが、FC5 よりは軽いです。
特にこだわりが無くて Cell SDK 中心で使う場合は YDL は良い選択だと思います。

●Yellow Dog Linux 5.0
Terra Soft Yellow Dog Linux v5.0
Terra Soft Yellow Dog Linux v5.0 (日本語版 Amulet)
Fixstars Yellow Dog Linux for PS3

・軽い
・PS3 専用なので安心。インストール後すぐ使えるし専用コマンドも入っている。
・市販パッケージにサポートあり。日本語版もある。
・インストーラは GUI でわかりやすいけど HD 対応モニタが必要。
・独特なデスクトップ環境。
・Cell SDK 等そのまま使える。

ちなみに Ubuntu は FC5 のカーネルをそのまま流用したためかどうかわかりませ
んが、挙動時の体感的な速度は FC5 とほぼ同じ印象でした。
カーネルの config と、使用されているライブラリやパッケージのバージョンによる
使用するメモリの消費量などが重さの差につながっているのでしょうか。
この辺は未検証で申し訳ないです。

ポラール m62 電池交換

ポラールの心拍計 m62 の電池交換をしてみました。
本当はメーカーに送って交換してもらわなければいけないのだけど。
参考にしたのはこちらのページです。
ポラール心拍計バラバラ写真

裏蓋は小さいプラスのねじなのでドライバーで簡単に開けられます。
開けてみたら使われていたのは普通の CR2032。
全く同じ電池が手持ちのストックにあったのでそのまま交換してみました。

裏蓋は開いてもそこからすぐ電池交換できるわけではなく、
さらに内部のモジュールを取り出して分解する必要がありました。
これがはめ込みの構造がわかるまではなかなか取れません。
非常に細かい作業で外れやすい小さいパーツもあるので注意です。
最初は写真を撮りつつ作業をした方が良いかもしれません。
圧電ブザー用の接点金具と、
フロントボタンのスイッチ部分の基板のかみ合わせに注意です。

何とか元に戻って動き出しましたが、構造がわかるまでは結構苦労したし時間も
かかりました。一度経験したら2度目以降はたぶん大丈夫です。
でもやっぱりメーカーにやってもらった方が楽でしょう。
もし試す場合は自己責任で。

PS3 Linux、Ubuntu をinstallしてみた

こちらのページを参考にして、Playstation3 に Ubuntu をインストールしてみました。
http://www.louiscandell.com/ps3/
http://ubuntuforums.org/showthread.php?t=316047
とりあえず別の OS からでもインストール先 HDD にアクセスできる状態になって
いれば、基本的に debootstrap してカーネルをコピーするだけのようです。

●やることの整理

・すでに本体 HDD (/dev/sda) に FC5 が install 済みの状態を前提にしています。
・USB の外付け HDD に Ubuntu を install します。

●install するパーティションの作成と準備

今回は外付け HDD のうち2つめのパーティションに install します。
なので以下 /dev/sdf2 として説明しています。
1つ目のパーティションなら /dev/sdf1 になるし、20GB モデルなら /dev/sdc1 と
なります。

 # fdisk /dev/sdf

fdisk でよく使うコマンド
 ・p 現在の状態の確認
 ・d パーティション削除
 ・n 新規パーティション追加
 ・t パーティションのタイプ設定、デフォルトだと Linux 用になる
 ・q 中断終了。設定を反映しないで fdisk 実行前の状態に戻ります。
 ・w 書き込み終了。設定変更を書き込んで終了します。元に戻りません。

これで /dev/sdf2 を確保しました。
ext3 でフォーマットします。

 # /sbin/mkfs.ext3 /dev/sdf2

ボリュームラベルを /5 にしておきます。(本当は mkfs.ext3 -L で一緒に登録できる)

 # /sbin/e2label /dev/sdf2 /5

swap は sda の既存のものを流用するので今回は作成しませんが、もし作成するなら
こんな感じです。

 # /sbin/mkswap -L SWAP2 /dev/sdf?

●debootstrap コマンドの準備

ここは参考ページの手順そのままです。FC5 に debootstrap というコマンドを
インストールしています。

 # cd /tmp
 # wget http://louiscandell.com/ps3/debootstrap/debootstrap_0.3.3.0ubuntu7_all.deb
 # ar -xf debootstrap_0.3.30ubuntu7_all.deb
 # cd /
 # zcat < /tmp/data.tar.gz | tar xv
●debootstrap コマンドの実行

install 先を mount します。

 # mkdir /mnt/ubuntu
 # mount /dev/sdf2 /mnt/ubuntu

debootstrap を実行します。
内部で呼び出すコマンドのために、先に PATH の追加が必要です。

 # export PATH=”$PATH:/sbin:/usr/sbin”
 # debootstrap –arch powerpc edgy /mnt/ubuntu http://archive.ubuntulinux.org/ubuntu

しばらく待ちます。

●カーネルのコピー

FC5 のイメージをそのまま使います。

 # cd /mnt/ubuntu/boot
 # cp /boot/* .
 # cd /mnt/ubuntu/lib
 # cp -r /lib/modules .

●fstab の作成

これも FC5 の設定をそのまま流用します。

 # cp /etc/fstab /mnt/ubuntu/etc/
 # vi /mnt/ubuntu/etc/fstab

LABEL=/5 / ext3 defaults 1 1
/dev/devpts /dev/pts devpts gid=5,mode=620 0 0
/dev/shm /dev/shm tmpfs defaults 0 0
none /spu spufs defaults 0 0
/dev/proc /proc proc defaults 0 0
/dev/sys /sys sysfs defaults 0 0
LABEL=SWAP swap swap defaults 0 0
/dev/cdrom /mnt/cdrom auto noauto 0 0

1行目の「LABEL=/」を「LABEL=/5」に変更するだけです。FC5 用の swap 領域に
SWAP というラベルがついてるので swap はそのまま使います。

● hosts の作成

FC5 のものをコピーするだけです。

 # cp /etc/hosts /mnt/ubuntu/etc/

● kboot.conf の作成

今までの sda1 の kboot.conf に追加します。

 # vi /etc/kboot.conf

~省略、以下追加分だけ (PS3 Linux の現在の設定メモ)

# Ubuntu (sdf2) LABEL=/5
ubuntu=’/dev/sdf2:/boot/vmlinux-2.6.16 initrd=/dev/sdf2:/boot/initrd.img root=LABEL=/5′
ubuntu480i=”$ubuntu video=ps3fb:mode:1″
ubuntu480if=”$ubuntu video=ps3fb:mode:129″
ubuntu720p=”$ubuntu video=ps3fb:mode:3″
ubuntu720pf=”$ubuntu video=ps3fb:mode:131″
ubuntu1080i=”$ubuntu video=ps3fb:mode:4″
ubuntu1080p=”$ubuntu video=ps3fb:mode:5″
ubuntu1080pf=”$ubuntu video=ps3fb:mode:133″

これで起動時に kboot: で ubuntu と入力できるようになります。

●起動

再起動して kboot: のプロンプトが出たら ubuntu (または ubuntu720p 等) と
入力して起動してみます。(起動中になぜか console のフォントが変わる)

login: プロンプト と init メッセージが重なって起動失敗に見えることがあるので、
画面がとまったらとりあえず [Enter] 。
login: が出たら root で入ります。パスワードが無いので先に設定しておきます。

 # passwd

dhclient でネットにつないで apt-get のテストです。

 # ifconfig lo up
 # dhclient
 # apt-get update

うまくいったら後はパッケージを install したり環境設定などを行います。

●設定など

ssh を入れておきます。これで PC 経由で設定できるようになります。

 # apt-get install openssh-server

desktop 環境の install。かなり時間がかかります。

 # apt-get install ubuntu-desktop

なぜかエラー終了しました。それでも一応 xorg.conf を書き換えます。

 # vi /etc/X11/xorg.conf

最初から Driver は fbdev だったので、変更は2箇所だけでした。

・Sction “Screen” に追加

  DefaultFbBpp 32

・Section “Device” に追加

  Driver “fbdev”
  Option “ShadowFB” “false”

root だと gdm に怒られるので一般ユーザーを追加します。
(ここでは名前を wheel としています)

 # adduser wheel

sudoers にも追加します。「wheel ALL=(ALL) ALL」を追加

 # visudo

gdm を起動します。

 # /etc/init.d/gdm start

ログインできました。設定ツールなど起動できずにおかしなところがあるので、
まだまだ設定が必要なようです。
やっと何とか動いた、といった程度です。

PS3 Linux にどっぷり浸かってみて

非常に楽しめています。
個人的にここまで楽しめたゲーム機ハードは初めてです。
発売直後にもかかわらず間違いなく稼働率は一番です。

たいてい新ハード発売長後はソフトも少なくあんまりやることが無かったりします。
せめてプログラムを書いて動かせられればもっといろいろ触れるのにな、、と思いつつ
タイトルが徐々に充実してくるのは半年から1年後くらいでしょうか。
それが PS3 はできることがあまりに多くて試したいことも多くて、
全く暇が無い状態です。

Linux を動かすだけなら普通の PC でもいいんですが、
扱うときの ゲーム機だからという安心感 が結構大きいのかなと思います。
何度もインストールしなおしてみたり、設定を深いところまでいじってみたり、
起動しなくなってリセットしたり、全く反応が無くなって電源切ったり。

そういう少々手荒な使い方をしても、GAME-OS だけは問題なく起動するしゲームは
きちんと動いてくれます。ゲーム機というか家電に近いこれらの動作は、かなり
安心できる印象を与えてくれます。
PCだと、問題が起こって動かなくなって強制的に電源切ったりすると
なんとなく心が痛むんです。

価格も実験用のPCとしてみたら割と手ごろで、数年もしたら値段も下がって安価に
買えるようになると思えば気も楽です。

おかげでさんざん使い倒して非常に勉強になっています。
今までも UNIX 系 OS は使った経験がありますが、
ハード自体がものすごく高価だったり、開発機やサーバーで動かなくなると
困る状態だったりして、なかなかいじり倒す機会はありませんでした。

さまざまなディストリビューションを入れてみたり、設定を変えて問題が出て原因を
調べたり、起動時の挙動やインストール手段を追うことができたり、カーネルの
コードを調べたり、コードを書いてみたりと興味は尽きません。

また PCとして見れば比較的小さいので、場所もとらずに済むのもありがたいです。
HDD に LAN に USB にディスプレイ出力と最低限必要なものはそろってますし。

ゲーム機なので、数年もしたらきっと値下げして安くなるとは思います。
だけどその頃はおそらく一般的な PC のスペックもあがっており、どうしても
性能の格差は肥大しているでしょう。そう考えれば、使ってある程度満足できるのは
発売直後、早ければ早い方が良いことになります。おそらく今が旬です。

しばらく経って、使っていってもう性能的に厳しいかなと思ったら、
あとはゲーム専用機や BDプレイヤーとしての本来の道が残っています。
その頃はきっとこれらのタイトルもかなりそろっているのではないでしょうか。
PC だったら現役引退後の使い道はサーバーくらいしかないわけで。

ただし値段的にも PC 用途としての過度な期待は禁物です。ご注意を。

・Linux を使ってみたい、Linux を使うことそのものが目的。
 いろいろ調べたり問題解決したり、設定を覚えたり、とにかく使えるようになる
 ことが楽しい人。使えるまでの手間を楽しむ人。

・Cell をいじってみたい。SPE で動作するプログラムを書いてみたい人。
 大量の数値演算や並列プログラミングの実験用として使いたい人。
 PC 向けに 8個位のマルチコア CPU が出回るまでは良い題材かも。

こんな方にはお勧めです。