「 DirectX12 」一覧

Raspberry Pi 2 で D3D12 (正式版IoT Coreにて)


以前のプレビュー版のときには失敗してしまった DirectX12 (D3D12) の動作ですが、正式版になった今はどうだろうかと調べてみました。結論からすれば、うまく動作しているようで、さらにはデバッグ情報もきちんととれそうな感じなのでお遊びにすごくよさそうな印象です。

確認

このコマンドプロンプトが使えるようになったので、以前うまく動かなかった D3D12 についてどうだろうと確認してみました。とりあえずは d3d関連の DLL を確認してみたところ以下のようになっており、DirectX9 は完全に死滅しているようです。しかし D3D12 については今も DLL が新しいモノが入っているのでちょっと期待できそうです。
windows10-iot-core-rpi2-system32

早速コレを動作確認したいとおもいます。
続きを読む


D3D12でテクスチャの挙動がしんどい


DirectX12 (D3D12) でテクスチャ生成時の挙動がドライバ依存しているようで結構しんどい気がします。巷によく掲載されているコードでは手元の RADEON HD 7750 ではうまく動作しませんでした。d3d12.dll の中で不正メモリアクセスをするような感じでエラーが発生してしまいます。

今回、 Intel HD Graphics Gen8 の環境を構築したので、こちらでもテストしてみたところ正常にテクスチャ生成&描画が出来ていることを確認できました。デバッガで停止しないという点では NVIDIA でも同様でしたが、画像としては正しくないという状況でした。
 これらの結果を見ると三者三様でそれぞれに癖がありそうです。 CreateCommittedResource から WriteToSubresource という方法では結果が一致しないので、どこでも動くアプリではこれらの方法は避けた方が無難と言えるでしょう。

正しく動くと思われる方法は、 UPLOAD ヒープに転送したうえで、 DEFAULT ヒープに GPU 側で転送するケースです。 UPLOAD ヒープの処理があるので生成時に若干手間になることが予想されます。

しかし動的なテクスチャの場合にはこの方法だと実行コストがかかっているように思います。 CommittedResource で生成した領域に直接かけるほうが得なのですが・・・。頂点データなどはそれが出来ているだけに残念です。

追記

Intel HD Graphics Gen8 がうまく動いている理由はメモリが UMA だからじゃないかという話もありました。確かに他の2つの環境ではディスクリート GPU であるので、メモリ場所も違うのは確かにありましたね。これを考慮すると UPLOAD から DEFAULT への転送もちょっと納得がいきますね。 APU ではどのような挙動を示すのか、試してみた人がいたら教えてもらいところです

以上色々と書いていますが、あくまで個人の見解です。挙動からそんな気がしているというだけです。


マイクロソフトの DirectX12 のサンプルを動かす


公式に Microsoft から D3D12 (DirectX12) のサンプルが公開されましたが、これを動かすまで一手間があったので記録として残しておきます。

Windows10 の環境で、 Visual Studio 2015 Community がインストールされている状況で、GitHub からリポジトリをクローンしてくるだけでは実は不十分でした。Windows SDK もまた別途ダウンロード&インストールすることが必要でした。
Windows10 の Windows SDK はこちらからダウンロードできました。
https://dev.windows.com/ja-jp/downloads/windows-10-sdk

インストール後は Visual Studio から 10.0.10240 の SDK として見えるので、無事にビルドできるようになりました。サンプルもまたこのSDKバージョンを期待して作成されているようです。

自分の手元の環境では一通り動作させて見ました。一応全部動作はしましたが、 D3D11on12 のサンプルだけはデバッガの方に警告メッセージが流れている状態でした。 RADEON HD 7750 を装着しての環境で発生しています。他の環境ではもしかしたら発生しないかもしれません。以前の Insider Preview の状態からのアップデート繰り返しの環境で試したため、そのうちクリーンにインストールしてみて試すなどするかもしれません。

追記

VisualStudio 2015 のインストール時に、Windows 開発キットも一緒にインストールすることは可能でした。カスタムのインストールから設定でうまく出来ました。上記の方法は、これで入らないケースや、入れ忘れてしまったケースへの対処ということで。


正式に Windows10 が出ました


先日 Windows10 がリリースになりました。すでにインストール出来た方もちらほらいるようです。また、それよりも前には Visual Studio 2015 がリリースになっていました。ようやく両者そろったことで、安心して Windows10 開発に向けて力を注げる感じになったと思います。

 当ブログとしては DirectX12(D3D12) にとても関心があるので、そのあたりを確認していこうと思っていたら、なんとマイクロソフトから公式のサンプルが公開されていました。
URLは https://github.com/Microsoft/DirectX-Graphics-Samples となってます。

内容としては経験者にとっても充実のものとなっています。初心者向けもちゃんと入っていて、 D3D12HelloWorld の中にあるものをまずは確認していくとよい感じになってました。当ブログの昔の内容に近い、画面クリアやポリゴンをとりあえず描画する感じのものが入っていましたので。

 これから確認していこうと思っていますが、サンプルを改めて解説していこうか、新規にサンプルを作るか、悩みどころです。そのうち至る所で D3D12 入門記事が出てきそうですし、きっと解説も上手でしょう。まずは、 Windows10 + VisualStudio 2015 というメイン環境をそろえるところからだったりしますが、久しぶりにワクワクしています。

今となっては昔のDirectX12記事(まだ有効そうに思えた部分の抜粋)


AMD で DirectX12


先日 AMD のドライバも Windows10 正式ドライバが出たとのことで、別件での実験過程もあったので以前作成した DirectX12 のプログラムを実行させてみました。
新ドライバの方をAMDのサイトからダウンロード&インストールして、デバイスマネージャーで確認してみたところ、 Engineering Sample のメッセージが消えていました。 Windows Update で降ってくるドライバだとまだ残っていたようですが・・・。 続きを読む



DirectX12 で テクスチャ貼ってみた(1)


以前から随分と DirectX12(仮) 入門なネタが空いてしまいました。色々と追従やらドライバやらあったので、再開できるようにするまで時間がかかってしまいました。

エラーが出るようになってた

まず Build 10130 で気付いたのですが、以前のサンプル類を実行したときに、 “EXECUTION ERROR #552: COMMAND_ALLOCATOR_SYNC” のエラーが出るようになっていました。
コマンドキューの処理の問題があったようで、サンプル類を修正しました。

今回の結果

simple_texture_dx12
上記のように単色のテクスチャを描画できるようになりました。ただし画像からのテクスチャの場合ちょっと問題がありました。詳細は末尾にて。 続きを読む


DirectX12でWARPデバイス


VMWareの中に仮想マシンとしてインストールした Windows 10 でも実は DirectX12 を初期化して動くのを確認できていました。その時にアダプタが複数見つかって、別アダプタを使ったのがきっかけだったのですが、その時のデバイス(アダプタ)は Microsoft Basic Render Driver となってました。実はコレが、WARPデバイスでした。先日 Microsoft から Direct3D 12 UWP Sample という公式なサンプルが公開されたのでこれと比べてみたところ判明しました。

サンプルでは IDXGIFactory4::EnumWarpAdapter で比較的簡単に WARP デバイスを取得できます。この取得したアダプタの情報を見てみたところ、 “Microsoft Basic Render Driver”, VendorID=5140, DeviceID=140 となっていました。
これはVMWare環境下でうまく使えたというアダプタ2つめとも一致していました。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb205075%28v=vs.85%29.aspx

このページの New info about enumerating adapters for Windows 8 の節にもあるように描画専用のアダプタです。

このアダプタを使うと以前の RADEON 環境でもうまく動くのを確認できています。WARPアダプタを使って動いている状態になるので当たり前といえば当たり前ですが・・・。

以下の環境で WARP デバイスを使ってとりあえず DirectX12 の開発を進められることは確認できました。

  • VirtualBox
  • VMware
  • ドライバ不正なRADEON環境

dx12sample_in_vm

VMware Player の中で一応テクスチャ実験のためのサンプルが手元で動いています。

WARPデバイスの取得

サンプルでは IDXGIFactory4 の EnumWarpAdapter を使って取得していますが、以前の IDXGIFactory3 あたりでもちゃんと取得は可能です。単に EnumAdapters で DXGI_ERROR_NOT_FOUND が返ってくるまでインデックスを増やして検索すればOKです。
このときに、指定された VendorId, DeviceId がくるか見ておけばOKです。

これで仮想環境でも実験を始められるので、気軽に DirectX12 を触り始めてみることが出来ますね!


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 についても前回までの内容については省略させていただきます。今回説明する内容で出来るのは上図で示したようなサンプルになります。 続きを読む