D3D Shader/OpenGL」カテゴリーアーカイブ

Windows Phone 8 SDK と Direct3D 11.1

Windows Phone 8 では描画 API として Direct3D が使えるようになっています。
iOS/Android から遅れること 3 年、WindowsPhone でもようやく Shader が
使えるようになりそうです。

Microsoft Windows Phone SDK 8.0

WindowsCE だった WindowsMobile/WindowsPhone 7 までは、
Desktop の Intel/AMD、Mobile の ARM と OS だけでなく
アーキテクチャでも明確な切り分けが行われていました。

Windows 8 RT が Desktop / Tablet で ARM をサポートするようになり、
今後ハードウエアも OS/API も統合されていくものと考えられます。

Windows Phone 8 SDK では開発言語として Native C/C++ が使えるようになり、
描画 API も Direct3D がサポートされています。
iOS/Android 含めたプラットフォーム非依存の共通言語として期待できます。

もっとも WindowsCE の時代、WindowsMobile 6 までは Win32 API と C/C++ で
開発していたので WindowsPhone 7 だけが特別だったのかもしれません。

● Windows Phone 8 SDK

Windows Phone 8 SDK は開発環境が統合されており、
iOS の Xcode のようにインストールするだけで一式揃います。
WindowsCE 時代の eMbedded Visual Tools を思い出します。

注意点は、Windows Phone 8 SDK のインストールに Windows 8 x64 が
必須となっていることです。
その理由の一つに Windows Phone 8 Emulator の Hyper-V があるようです。

インストール時にオプション選択が無いので、対応 CPU では常に Hyper-V が
有効となり、未対応 CPU では Emulator 無しでインストールが行われます。
他の仮想 PC 系ソフトを併用している場合は競合することがあるので注意が必要です。

● Direct3D 11 10Level9

GPU 用 3D API は Desktop と同じ Direct3D11 です。
現時点で Windows Phone 8 が対応する feature level は 9_3 となっています。
よって GPU 機能は OpenGL ES 2.0 と同等で、
Direct3D 11 といっても Geometry/Hull/Domain/ComputeShader 等が
使えるわけではありません。

Direct3D feature levels (Windows)

WindowsVista 登場時に Direct3D10 がリリースされましたが、
DirectX 9 以前とは方針が異なり、一切下位互換を持たない仕様でした。
Direct3D 9 以下 (ShaderModel 4.0未満) の GPU は切り捨てられ、
新しい Direct3D 10 API は Direct3D 10 対応 GPU (ShaderModel 4.0以上)
でなければ使えませんでした。
そのかわり caps といった細かなハードウエア機能のチェックが不要です。

その後 Windows 7 で更新された Direct3D 11 は再び路線を変更し、
DirectX 9 以前と同じように API セットのレベルと GPU のハードウエア機能の
レベルが分離されました。下位互換が復活しています。

Direct3D 11 on DOwnlevel Hardware (Windows)

Direct3D 9/Direct3D 10 相当 (ShaderModel 5.0未満) の GPU でも
ドライバさえ対応していれば新しい API 経由で使えるわけです。
その代償として徐々に caps (feature level) が復活しつつあります。

Feature Level は blog の過去記事だとこのあたり↓で触れています。

 ・2008/11/09 Direct3D11/DirectX11 (4) FeatureLevel と旧 GPU の互換性、テクスチャ形式など
 ・2008/11/06 Direct3D11 Technical Preview D3D11の互換性、WARP Driver

● Windows 8 と Direct3D 11.1

メジャーアップデートだった Vista や 7 とは異なり、
Windows 8 の Direct3D は 11.0 から 11.1 と小規模な拡張にとどまっています。
特に Shader Model が 5.0 のままで、5.1 に更新されていないのは意外でした。

11.1 では GPU のハードウエア進化に合わせたハイエンド向けの機能拡張だけでなく、
むしろ Mobile GPU 向けの機能が大幅に追加されているようです。
時代を反映していると言えます。

例えば D3D11_FEATURE (Caps) の項目が 11.1 で著しく増えています。
Windows 8 RT や WindowsPhone 8 など OpenGL ES 2.0 GPU を
10Level9 でサポートするために必要になったと思われる項目が多数あります。

D3D11_FEATURE_DATA_ARCHITECTURE_INFO の
TileBasedDeferredRenderer はまさに Mobile GPU 向けの Caps で、
D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT
SupportsDepthAsTextureWithLessEqualComparisonFilter も
ShaderModel 4.0 以降は標準のものです。

D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT も
OpenGL ES 2.0 なら非常に馴染みが深い代物でしょう。

● Mobile GPU と演算精度

OpenGL ES 2.0 用 GPU で最適化を行う場合、シェーダーの演算精度は
非常に大きな問題となります。
shader 内で highp/mediump/lowp の適切な使い分けが要求されます。

Mobile GPU の比較 : Precision
OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる

DirectX の場合、DirectX 9 初期 GeForce FX 5800 系の half 型以外では
演算精度を気にする必要がほとんどありませんでした。

11.1 の HLSL では GLSL の highp / mediump / lowp 同様、
最低限必要な演算精度を宣言ができるようになっています。

OpenGL GLSL          Direct3D HLSL
--------------------------------------
highp   float        float
mediump float        min16float (half)
lowp    float        min10float

OpenGL ES 2.0 同様に、WindowsPhone 8 や Windows RT で
最適化する場合に必要になってくるものと思われます。

● ShaderModel 5.0 アセンブラ命令

いつの間にかマニュアルに載っていました。
アセンブラでシェーダーを記述するわけではありませんがデバッグ時に役に立ちます。

Shader Model 5 Assembly (Windows)

Direct3D 10 (ShaderModel 4.0) 時代は載っていなかったので自分で調べていました。

ShaderModel4.0 アセンブラ命令

● DirectX SDK

Windows Phone 8 SDK と同じように、
Desktop 向け Direct3D 11.1 SDK は Windows SDK に統合されています。

Windows Software Development Kit (SDK) for Windows 8

VisualStudio Express 2012 for Windows Desktop の Windows SDK で
dll 番号を見ると 46 になっていました。

DirectX SDK Version 一覧

関連エントリ
2012/02/24 OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる
2008/11/09 Direct3D11/DirectX11 (4) FeatureLevel と旧 GPU の互換性、テクスチャ形式など
2008/11/06 Direct3D11 Technical Preview D3D11の互換性、WARP Driver

iPad 4/iPad mini A6X/A5 の CPU/GPU 速度

CPU の結果も追加しました。
今回から CPU もグループごとに速い順に並び替えています。

CPU benchmark

GPU に iPad mini も追加しました。

Mobile GPU bench mark

CPU/GPU ともに刷新された A6X が最速です。
GPU はより上位のプロセッサに置き換わってますがまだ同世代。
CPU と同じようにそろそろ次のアーキテクチャが出てきても
良いのではないでしょうか。

CPU では iPad mini の方が iPod touch 5 より速いですが
GHz あたりの演算速度ではほぼ同一の値です。
同じ A5 であることがわかります。

関連エントリ
iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度
iPhone 5 / iPod touch 5 の GPU 速度
iPad 3 PowerVR SGX543MP4 の速度

iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度

iPad 4 のベンチマークスコアを追加しました。
Apple A6X の GPU はこれまでの PowerVR SGX543 とは別のもので、
PowerVR SGX554 でした。
同じ 4 core でも性能的に公称 2倍。
実際のベンチマークでも 2~3 倍の速度が出ています。

Mobile GPU bench mark

Retina で Pixel 数が 4倍もあるにもかかわらず、
実際の動作速度で iPad 2 を超えているケースも少なくありません。
描画だけでなく CPU core 自体も大きく高速化されており、
システム全体として非常にパワフルになった印象です。

特に PowerVR SGX554 はシェーダーの演算能力自体が上がっているようで、
これまで苦手としてきたシェーダー負荷が高いケースでもきちんと速度が
出るようになっています。

間違いなく現時点では最速に分類され、
Retina や Mobile GPU であることを言い訳にできなくなっています。
ただし今のところ Extension に違いはなく、PVRTC2 や OpenGL ES 3.0
に向けた新しいフューチャーに対応しているかどうかは不明です。

今年になって CPU core も GPU core も世代交代が進んでいます。
A6, Krait, Cortex-A15 といった CPU core だけでなく、
Adreno 320, Mali-T604 等 OpenGL ES 3.0 世代の GPU も揃って来ました。
あとは OS や SDK の対応を待つばかりです。

OS の対応が始まれば世代交代はさらに早まるものと考えられます。

関連エントリ
iPhone 5 / iPod touch 5 の GPU 速度
iPad 3 PowerVR SGX543MP4 の速度

iPhone 5 / iPod touch 5 の GPU 速度

追加しました。

Mobile GPU bench mark

OS も開発ツールも画面サイズもバラバラで厳密ではありませんが
いろいろと傾向は見えます。

iPhone 5 は iPad3 に匹敵する速度が出ており解像度の分だけ高速です。

iPod touch 5 は iPhone 5 と比べると半分くらいに落ちますが、
前世代 iPod touch 4 からは 5倍程度の性能が出ていることがわかります。

なおテスト内容は一応ゲームを想定した描画となっています。
ただし完全に FragmentShader (PielShader) 側で演算をこなしており、
非常にピクセル負荷が高くなっています。

一見フレームレートなどパフォーマンス的に低いように見えるかも
しれませんが、実際のゲームではもっと最適化をかけられるため
十分なパフォーマンスを出すことができます。
多くの処理は頂点や CPU 側に移動できますし、
総合的に見ても今のハイエンドスマートフォンの性能は
ゲーム専用機を大きく超えているといえます。

iPhone 5 / A6 の CPU 速度 その 3

下記の CPU ベンチに Apple A6 の結果を追加しました。

CPU benchmark

以下抜粋

              SoC/CPU core          実行時間  実行速度   1GHz時
----------------------------------------------------------------
iPhone 5      A6  ?                    1.87 (57.96 MB/s)  44.58?
iPad 3        A5X Cortex-A9 1.0GHz     4.60 (23.55 MB/s)  23.55
iPod touch 4  A4  Cortex-A8 800MHz     6.07 (17.85 MB/s)  17.92

実行時間が小さい方が高速。(実行速度が大きい方が速い)

こちらでも A6 は非常に良い結果となっています。

リンク先の説明にもある通りテストはデータの暗号化を行なっており、
処理の大半がメモリアクセスやテーブル参照と XOR です。
浮動小数点演算は含みません。
single thread なので単一 core だけの速度となっています。

またコンパイラとの相性があり、全体的に iOS よりも Android の方が
高速に実行される傾向があります。
比較する場合はコンパイラの違いにも注意してください。

必ずしもこの結果だけで判断できませんが、A6 はリストにある ARM の中では
最も速く、x86 でもネットブック向け Atom では全く相手にならないようです。

関連エントリ
iPhone 5 / A6 の CPU 速度 その 2
iPhone 5 / A6 の浮動小数点演算