「 2015年05月 」一覧

INTEL の INDE 続報

あれからエラーの対処とかやってみた結果、少し進捗があったのでメモしておきます。
VisualStudio でのビルド時に以下のエラーがでてその先に進めないのが問題でした。

この内容はある意味定番で、JAVA_HOME が設定されていないとか、java.exe が見つからないとかそういう話に帰着します。
今回難航していたのは、android.bat を実行したら Android SDK Manager が起動するし、 javac とタイプしたら実行されるし、とパス情報は正しく設定されているようだったのに、上記のエラーが出てしまう、という点にありました。 続きを読む


インテル INDE インストールから難関

先日のキャンペーンによりインテルの INDE Professional を入手したので、早速試しました(うまくいきませんでしたが)。

どんな風だったかというと、インストールからうまくいかないという感じで導入も大変でした。またエラーによりビルドも正常に出来なかったりと、自分の環境では VisualStudio 2015 RC のほうが使える感じですね。その色々とあった点について書いておきます。 続きを読む


VisualStudio 2015 RC での Androidデバッグ機能

VisualStudio 2015 で Android および iOS のビルドがサポートされる話も有名です。 RC版でも Android に関してはある程度試せる状況にあるようなので、現時点ではどのくらいのことが出来るか試してみようと思います。RC版でのお話なので、正式リリース版では変更になっている可能性が十分にあります。

プロジェクトテンプレート

VS2015RC では既にプロジェクトテンプレートとして以下のように準備がされています。ここでは OpenGLES Application を用いてテストしています。 見ての通り iOS 用もありますが、手元では iOSのビルドをすると、「error : 無効な URI: ホスト名を解析できませんでした。」とエラーになってしまいその先に進めませんでした。また iOS Debugger, Simulator なるものが存在を期待されているようですが謎です。

vs2015rc-cross-platform-template

ちなみに Android 版のサンプルを実行してみた図が以下の通りです。
VS2015RC-ANDROID
見ての通り実機によるデバッグが可能で、その際の各種情報も VisualStudio で表示できています。これらについて詳しく確認していきます。 続きを読む


インテル INDE Professional Edition 無料提供キャンペーン

インテルの INDE Professional Edition が期間限定の無料提供キャンペーンをやっています。要レジストレーションですが、個人的に発表当時から気になっていた製品だったので早速ダウンロードをしてみました。

INDE とは

エクセルソフトさんの紹介文を引用します。
「C++ で Windows* および Android* デバイス向けアプリケーションを迅速かつ簡単に作成するクロスプラットフォーム開発スイートです。本製品を利用することで、ネイティブ・パフォーマンス、優れたバッテリー寿命を可能とし、プラットフォーム固有機能を使用することも可能です。」

個人的には、 Android 開発者の負担を減らすツール群の一括環境セットアップも1つのメリットだと思っています。

Professional Edition について

Starter エディションは無料で以前から公開されていました。しかし個人的には以下の機能のため、 Professional 版が魅力的に感じていました。購入してもいいかなと思うくらいに気になってました。

  • VisualStudio 統合のネイティブデバッガ
  • Graphics Frame Debugger という OpenGL API 呼び出しのデバッグ機能

最後に

今回はダウンロード開始したところまでなので、使用感などはまた別の機会にします。ただ INDE Professional Edition は収束の方向だそうです。これはもしかすると VisualStudio 2015 で各種機能が実装されてきたからではないだろうか、と個人的には推測しています。
そういえば VS2015RC で Android 対応具合についてチェックがまだだったのでそれもそのうちに書きたいと思います。


DirectX12テスト機をNVIDIAに変えた

NVIDIA が DirectX12 へ正式対応したドライバをリリースしました。ハードウェア的に既に対応を果たしていて先行していたと思われる AMD よりも早く、です。今のところ開発機として RADEON を使用していたのですが、テクスチャ周りでうまく機能せず Intel HD Graphics 5xxx だったら動くのかなと期待していたので、まずは NVIDIA の正式ドライバで試してみようと思い、交換するに至りました。

さて NVIDIA のものに交換&正式ドライバをインストールしたあとは予想以上にうまく動作するようになりました。テクスチャの件も余所で見かけたコードでうまく動きました。さらには VisualStudio 2015 RC のグラフィック診断の機能もうまく動作するようになりました。 AMD の RADEON ではうまく動かず、 RC だからなのかドライバなのか保留していました。もちろん先日まで紹介している立方体を回転させるサンプルもそのまま NVIDIA の環境でも正常に動作しました。

結論として、テクスチャの件に悩まされていたのはドライバの不十分さによるものだったと言えそうです。このドライバの対応がダメだったせいで D3D12CreateDevice に成功しないわ、テクスチャの転送&描画がうまくいかないわで、さんざんでした。 NVIDIA の DirectX12 対応正式ドライバということで今回の挙動は正しいと言えそうです。

近いうちにテクスチャの部分もちゃんと説明しようと思っていますが、現状の RADEON でもテクスチャ関連正常に動作させようとすると UPLOADヒープに転送した後で、 DEFAULT 領域に転送するのが必要です。 NVIDIA を始め、他の環境では CommitedResource の領域に書き込んだもので正常描画が可能でした。


DirectX12 でポリゴン描画 (VS2015RC版)

VisualStudio 2015 RC になって従来のコードが動かなくなってしまったので、その対応第2弾です。今回は立方体を回転させるサンプルまで復活できたのでそのお話になります。

注意事項

現時点において DirectX12 の部分は実装途中となっています。正式版では大きく変更される可能性があります。よってここの情報は 2015/05 現在の限定された環境でのみ動作するという点をご理解ください。

必要なもの

  • VisualStudio 2015 RC
  • Windows10 Insider Preview 10074
  • AMD RADEON の新しいドライバ(15.200.1023.0)

ほか、以前に説明した内容はこちらを参照してください。

DirectX12プログラミング

cubedx12
通常の Win32 アプリケーションを作成します。ウィンドウの作成関連は割愛して、DirectX12 部分だけ抜粋していきます。また、 DirectX12 についても前回までの内容については省略させていただきます。今回説明する内容で出来るのは上図で示したようなサンプルになります。 続きを読む


RaspberryPi2 で DirectX12 を

最近 DirectX12 をさわり始めていましたが、 なんと Raspberry Pi 2 にインストールした Windows10 IoT Core Insider Preview でも d3d12.dll が存在することを発見したので、ワクワクしながらテストしてみました。

rpi2-d3d-dlls

プログラムコードは以下のようなものでテストしました。まずはデバイスを生成するところが成功しないと話にならないので、そこから確認したいと思います。

とりあえずアダプタを適当に取得してそこからデバイスを生成するようにしています。列挙して渡している理由は、列挙しないとデバイス生成に成功しないとかいう情報があったためです。

実行結果

さてこれらを 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 デバイス的な何かでしょうか。


DirectX12 で画面クリアまでの最小サンプル実装(VS2015RC版)

以前は VS2015 CTP6 と Windows10 10041 で画面クリアのサンプルを作りましたが、既に今現在はそのコードはビルド不可能な状態になってしまいましたので、再度作り直すことにしました。本当に色々とあってようやく画面クリアまで出来るようになりました。

注意事項

現時点において DirectX12 の部分は実装途中となっています。正式版では大きく変更される可能性があります。よってここの情報は 2015/05 現在の限定された環境でのみ動作するという点をご理解ください。

必要なもの

  • VisualStudio 2015 RC
  • Windows10 Insider Preview 10074
  • AMD RADEON の新しいドライバ(15.200.1023.0)

ここで新しいドライバというのが大事です。つい最近Windows Update で提供されました。それまではドライバの不具合で DirectX12 の初期化が正常に行えませんでした。

DirectX12 プログラミング

通常の Win32 アプリケーションを作成します。ウィンドウの作成関連は割愛して、DirectX12 部分だけ抜粋していきます。

初期化処理

まずはコードを先に示します。画面クリアするのに必要になるものだけを生成していますが、コード量は多めです。

このコードについて簡単に説明していきます。
最初にデバッグ情報を多く出してくれるようにするための設定をしています。DXGIにも DXGI_CREATE_FACTORY_DEBUG フラグを渡していますし、 D3D12 もデバッグ情報を出してくれるようにするために D3D12GetDebugInterface でインターフェースを取得して有効化しています。従来は CreateDevice でフラグを渡す、でしたが今回から変わったようです。
 また、本来ならばアダプタを列挙して処理が必要になるのかもしれませんが、ここでは最初のアダプタに対して D3D12CreateDevice をするようにしています。コメントにあるように DirectX12 のデバイスは最低でも D3D_FEATURE_LEVEL_11_0 の機能レベルを要求するようです。

 その後、コマンドアロケーター、コマンドキューを作成したあと、スワップチェインを作成します。ここでは2つのバックバッファチェインを持つようにして初期化をしています。また カレントのバックバッファインデックスを取得するために、DXGI の IDXGISwapChain3 で作成することにしました。

 さらにその後、コマンドリストを作成し、レンダーターゲットのディスクリプタを格納するためのオブジェクトを作成していきます。ディスクリプタヒープには先ほどのスワップチェインのバックバッファ数分だけのレンダーターゲットビューを準備しておきます。このとき、ディスクリプタヒープのポインタのインクリメントサイズがデバイスから取得できます。

描画処理

初期化のコードが終わったので、画面クリアの描画ループについて説明します。基本的にはクリアのコマンドをコマンドキューに設定して(積んで)、実行をキックする、その後コマンド完了を待って画面に描画、という感じです。
ただし、クリアの際には描画先のリソースをリソースバリア処理(関数)を用いて状態を変更していく必要があります(SetResourceBarrier関数)。これから扱うリソースがどの状態になるのか、正しく変更されるか、といったためにこんな仕組みになっているのだろうと予想しています。バッファの扱いが柔軟になったため故だと思います。
 描画に関しては以下のようなコードとなっています。

まとめ

ようやく現在の状況での正常に動くコードを作成できました。とはいってもまだ画面クリアだけですが、最初の1歩を再び歩み出せたと思います。従来のコードからは変更箇所は多いですが、考え方そのものは変わっていないなと思います。

ソースコードについて

今回のソースコードの全貌は GitHub に上げてあります。気になる方はそちらを参照していただければと思います(https://github.com/techlabxe/testD3D12 の HelloDX12 )。


DirectX12 の初期化が成功しない Build 10074とVS2015RC

どうにもこうにも DirectX 12 のインターフェースが変わってからというもの、自分の環境で DirectX12 の初期化 D3D12CreateDevice が成功しない状況でした。試行錯誤していたのですが、原因がやっとわかりました。

その理由というのが Catalyst Driver の問題というもので、Build 10.0.10074 broke Direct3D 12 on most recent Catalyst WDDM 2.0 driver とあります。
このドライバのバージョンは 15.200.1018.1 (2015/04/01版) となっていました。このバージョンが新しくなるまではダメそうです。

他の環境であれば成功するらしいので、RADEON を使用している人はしばらく待ちな感じです。ハードウェアがちゃんと対応しているのは RADEON だと思っているので、こいつがちゃんと使えないとは残念です。AMD しっかりしてほしいところです。さらに他の環境としては VirtualBox にインストールしてみた Windows10 では初期化に成功するところまで到達できました(しかし、まだクリア処理まで到達できず)。


Raspberry Pi 2 向け Windows10 IoT Core Insider Preview で DirectX11 アプリ

前回の内容と手順自体はほとんど変わらないで、 DirectX11 のテンプレートを使用するだけで Raspberry Pi 2 でも動作することを確認できました。動作は今のところ重いですが・・・。

DirectXアプリのプロジェクト

プロジェクトの作成は Visual C++ / Windows / Windows Universal / DirectX App (Windows Universal) を選びます。

vs2015rc-directxapppi2-project

プロジェクトが作成されたら、 x86 の構成ではなく ARM の構成を選びます。あとはデバッグの設定を前回と同様に Raspbery Pi 2 のIPアドレスを設定します。以下の図は前回の流用です

windows10-iot-debug-conf

これで実行すると Raspberry Pi 2 の画面で以下のようにキューブが回っているのを確認できます。1280×1024 という解像度でおよそ 17FPS でした。強引に 640×480 にしてみましたがそれでも 40FPS 程度. HARDWAREデバイスが DirectX 11.1 で作成されており問題はなさそうなのですが、正式版が出る頃にはパフォーマンスアップしているといいなぁと思います。

DSC_0388