「 DirectX 」一覧


DwmGetDxSharedSurface を使ってみた


Windows の隠し API である DwmGetDxSharedSurface を使ってみました。
これは Windows7 以降で存在するようで、無事に Windows10 の環境でも使えました。
そのまま素直に使おうとするといくつか課題はありますが、面白い機能だと思ったので紹介することにしました。なお Undocumented API の1つなので、ご利用は自己責任で。

これは何?

指定されたウィンドウの画像をキャプチャすることが出来る API です。ウィンドウが他のウィンドウで隠されていても内容をキャプチャすることが出来ます。

続きを読む


Vulkan へ DirectX11 テクスチャをインポート


世の中の多くの Windows 環境で安定して使えるグラフィックス API は DirectX11 や OpenGL といったところだと思います。
Vulkan API は新しい API のため、既存のライブラリやフレームワークではまだサポートされていなかったりします。そのような状況のためか、 NIVIDA の Vulkan Extension では、 Vulkan とその他 API でやりとりするための機能が用意されました。

また現時点においては、 Khronos の KHX 拡張としても整備が進みそうな気配です。NVIDIA だけでなくサポート範囲が広がってくれることに期待です。

続きを読む



OpenGL と DirectX9 で共有リソース


HDD の中の実験コードらを整理していたらずいぶん前に作っていた NV_DX_interop 拡張を利用したコードを発見しました。
OpenGL と DirectX9 を1つのアプリケーションの中で使い、リソースを共有して使えるという点が魅力的です。

WGL_NV_DX_interop

この WGL_NV_DX_interop 拡張は名前の通り NVIDIA のベンダー拡張として定義されています。
詳しい説明は OpenGL Registry の https://www.opengl.org/registry/specs/NV/DX_interop.txt を参照してください。

この拡張では OpenGL と DirectX9 のリソースを共有を実現します。以下のリソースが共有できるようです。

  • テクスチャ(2D, 3D,Cubemap)
  • 頂点・インデックスバッファ

API をまたいで、リソースを使えるという点で非常に興味深いですね。
続きを読む



Windows10 IoT Core のアニバーサリーアップデート


デスクトップの Windows10 にアニバーサリーアップデートが来たように、 Windows 10 IoT Core についても アニバーサリーアップデートが来ました。今回はこれの導入手順や新機能などを紹介してみたいと思います。

導入について

以前にIoT Core を導入している場合で、 Windows 10 IoT Core Dashboard がインストールされている環境では、 Dashboard を起動すると以下のようにウィンドウが表示されて、更新を促されるので更新を行います。
win10-iot-update-01

ちなみに Windows 10 IoT Core Dashboard は以下のページから取得可能です。
Microsoft Windows 10 IoT Core Get Start
こららの詳細は、以前の導入記事を参照していただければと思います。

win10-iot-update-02
Dashboard から必要事項を入力して microSD カードにイメージデータを書き込みます
他に作業することはないのでしばらく待ちます。

書き込みが完了した microSD カードを Raspberry Pi 2 に装着して、電源をいれます。
初回起動にはそこそこの時間(5分程度)がかかるので、画面が落ち着くまで待ちます。

ちなみに OS のバージョンとしては 10.0.14393.0 となっていました
続きを読む


GPUView の導入について


以前とりあえず GPUView を起動させてみることはやってみました。今回はそんな GPUView をもっと簡単に試せる方法が見つかったのでブログにまとめてみます。

通常の方法

簡単に使える版の前に通常の導入・使用方法をまとめておきます。

Windows Performance Kit の導入

GPUView は Windows Performance Kit の一部として含まれています。現時点ではこれが所属するパッケージが OS の種類によって異なります。

続きを読む


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 ではどのような挙動を示すのか、試してみた人がいたら教えてもらいところです

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