最近 DirectX12 をさわり始めていましたが、 なんと Raspberry Pi 2 にインストールした Windows10 IoT Core Insider Preview でも d3d12.dll が存在することを発見したので、ワクワクしながらテストしてみました。
プログラムコードは以下のようなものでテストしました。まずはデバイスを生成するところが成功しないと話にならないので、そこから確認したいと思います。
ComPtr dev12;
ComPtr dxgiFactory;
hr = CreateDXGIFactory2(0, IID_PPV_ARGS(dxgiFactory.GetAddressOf()));
IDXGIAdapter* adapter = nullptr;
DXGI_ADAPTER_DESC descAdapter;
for (int i = 0;i < 3;++i) {
hr = dxgiFactory->EnumAdapters(i, &adapter);
if (adapter) {
adapter->GetDesc(&descAdapter);
hr = D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(dev12.GetAddressOf()));
if (FAILED(hr)) {
OutputDebugString(L"failed.\n");
}
}
}
とりあえずアダプタを適当に取得してそこからデバイスを生成するようにしています。列挙して渡している理由は、列挙しないとデバイス生成に成功しないとかいう情報があったためです。
実行結果
さてこれらを Raspberry Pi2 で動作させるとどうなるか試してみました。
結果は、失敗でした。アダプタの列挙箇所では2つほど存在するように動作しているようですが、いずれも D3D12CreateDevice の結果は 「指定されたデバイスインターフェースまたは機能レベルがこのシステムでサポートされていません」でした。 DirectX12 の場合には最低でも D3D_FEATURE_LEVEL_11_0 を要求してしまうため、これ以上は機能レベル変更できないので仕方ないようです。
その一方で DirectX11 版の D3D11CreateDevice は成功して、使用される機能レベルも D3D_FEATURE_LEVEL_11_1 が返ってきた点は納得がいきませんが、プレビューということで今のところはあきらめておきます。
その他
今回試していて気付いたのは、ビデオアダプタは Microsoft Basic Render Driver が使われているということでした。 RPI2 に搭載されているアダプタは VideoCore IV だったと思いますが、コレ用の専用ドライバという感じではなさそうです。以前のパフォーマンスが出ないという点については、専用ドライバではないから、というのが可能性として大きい気がしました。もしかしてこのアダプタはいわゆるソフトウェア補助のある WRAP デバイス的な何かでしょうか。