DirectX一覧

DirectX12 フルスクリーンの罠

DirectX12 でフルスクリーン描画を行おうとしたときに、予想外に色々と苦戦しました。
DirectX12 というよりは、フルスクリーンは DXGI の機能・制御管轄なので、もしかすると今回の話は DirectX11 でも症状が出るのかもしれません。もしかすると環境要因もあるのかもしれませんが、何かの参考になれば幸いです。

出遭ったこと

「ALT+ENTER でフルスクリーンとウィンドウモードを行き来(切り替え)をしたい。」
これを実現するのに苦戦しています。

ディスプレイの解像度に対してのフルスクリーンとウィンドウモードの切り替えは、標準 DXGI の機能で問題なく出来ました。
ですが、描画の内容によっては指定された解像度でフルスクリーンとしたいことがあり、描画ターゲットの解像度を変えるのでは無く、ディスプレイの解像度設定のほうを変更したいという条件になります。

これには初期化時に DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH フラグを設定しますが、これがあると色々と問題に出遭いました。

続きを読む


RDPでGraphicsAPIは実行出来るか実験

前回、RDP で OpenGL アプリを起動させる方法を考えましたが、そもそも他のグラフィックスAPIではどうなのか、気になってきたので調べてみました。

RDP で動作するか?

  • OpenGL : 動作しない
  • DirectX11 : 動作する
  • DirectX12 : 動作する
  • Vulkan : 動作する

まさかの OpenGL だけが動作しないという状況だったようです。確認したのは、2台とも Windows10 1809 の環境で、デスクトップPCとノートPCという構成でした。
低レイヤーグラフィックスAPIのDirectX12/Vulkan らが RDP 経由でも使えたという点で驚きました。画面を単なる画像として送るなら、これらの動作に納得もあるのですが、かつては DirectX9 や OpenGL がリモートデスクトップ環境下で動かなかった時代を味わったために動作しないという思い込みがあったようです。

プログラムコードで考えてみると、デバイスコンテキストが不要な API だと動作しているようですね。あとは、画面ロック・UACの暗転でいわゆるデバイスロストが発生しない時代になってきたから、というのもありそうです。


VisualStudio の HLSL テンプレートがおかしい その2

以前に、 VisualStudio の HLSL テンプレートがおかしい として、修正したシェーダー用のプロジェクトテンプレートですが、 Visual Studio 2017 の更新をしたら、また妙な状況になってしまったようです。
もしかすると、先の手作業の修正が引き金で新規にインストールした場合には、おかしな構造ながらも正常に動くのかもしれません。

続きを読む


Visual Studio Graphics Debugger の終了

Windows 10 October 2018 Update (1809) で、 Visual Studio 2017 の Graphics Debugger が正常に動かなくなりました。最近は Vulkan を勉強していることが多く、 VS の Graphics Debugger は使っていませんでした。再び D3D12 の勉強を再開した今日、この問題を発見しました。

最初は、今の D3D12 のために、色々と新しいインターフェースを使ったのが問題で失敗したのだろうと考えていたのですが、どうやらそうではないようです。
仕様として 1809 バージョンの上では VS 付属 Graphics Debugger は使えないということになったようです。

続きを読む


VisualStudio の HLSL テンプレートがおかしい

15.8.x のどこかのバージョンから、以下のようにシェーダーの作成の項目が減ってしまいました。
(自分の記憶では、15.8.1 の時点では大丈夫でした)。 この画面は 15.8.5 のものです。
本来ならば、ここに頂点シェーダーやピクセルシェーダー、ハルシェーダーといった項目も出現していなければなりません。

この問題を解決する方法がわかったので、これについて説明します。
なお、Professional 版、 Community 版ともに同じ問題を抱えているようです。

続きを読む


NVIDIA Nsight Graphics を試す

NVIDIA Nsight といえば、 Visual Studio に統合されて、グラフィックス API 使用時のデバッグのお供として定番のものでした。これのスタンドアロン版、 Visual Studio に統合されないで単体で使用できるアプリケーションとして、「NVIDIA Nsight Graphics」が公開になりました。

今のところ、専用のドライバが必要になるみたいですが、ちょっと動作を確認してみたいと思います。

※ 少し前に Windows10 のドライバをダウンロードすると正常なものが取得できませんでしたが、現在は正常になっているようです

入手・セットアップ

現時点において NVIDIA の以下のページから入手が可能です。

このページからダウンロードページへのリンクがあります。ダウンロードには NVIDIA Developer のアカウントが必要になるようなので、持っていない場合には作成することが必要になります。そして、 Nshight Graphics 本体と、各自の環境に合わせたドライバをダウンロードします。

今のところ、 NVIDIA Geforce 600 番以降であれば対応しているようです。また 64 ビット Windows 7 or 10 の環境のみサポートしているようです。Windows 8系や 32 ビットあたりを打ち切っている辺り潔いです。デバッグ時にこれらの環境を使っていることは割と少ないと思いますが、ドライバのダウンロードの箇所には Win8 の文字があって対応していそうにも見えますが、注意が必要です。
続きを読む


DirectX Raytrace (DXR) の始め方

GDC で話題になっていた DirectX Raytracing (DXR) が触ってみることができるようになった模様です。

Microsoft が DirectX のサンプルプログラムを公開しているリポジトリで、先日の DXR のサンプルが追加されていました。
https://github.com/Microsoft/DirectX-Graphics-Samples

今回はこれを起動させるまでを説明します。

準備

まずはリポジトリからファイルをダウンロードするか、 git を使って clone して取得してきます。
以前にリポジトリを clone している人は、 pull で最新状態に更新しておきます。

この中の Samples/Desktop/D3D12Raytracing というフォルダの中がサンプルコードとなります。

VisualStudio 2017 と、最新の Windows SDK が必要になるので、Visual Studio インストーラーから Windows SDK 10.0.16299 を含むように設定します。

続きを読む


Vulkan, D3D11 InterOp

Vulkan 1.1 で クロスプロセス API の相互運用機能 が標準に含まれたようだったので、再び Vulkan と DirectX11 (D3D11) の相互運用にチャレンジしてみました。
使用した拡張名としては以下のものになります。

  • VK_KHR_external_memory_capabilities
  • VK_KHR_external_memory
  • VK_KHR_external_memory_win32

動作結果としては以下のようになり、一応は動作させることができました。

続きを読む


DirectX11 でマルチフルスクリーン その3

DirectX11 でマルチディスプレイ環境で全てのディスプレイでフルスクリーンモードとしたいのに SetFullscreenState が失敗してしまう件の続報です。
この症状は、 Windows10 Creators Update 適用環境でも発生します。おそらく RTM 版から挙動は変わっていないのでは、と思います。詳しくは、前回までの記事を参照してもらうとして、今回は「どうしてもフルスクリーンモードを使いたいんだ」ということで、1つの提案を出してみたいと思います。

続きを読む