DirectX 12 によって処理されている空白のスワップ チェーンでウィンドウを埋めています。Explicit Multi-Adapter で少し遊んでいると、この奇妙な動作に遭遇しました...
これまでに存在するほぼすべての DX12 デモ コードで示されているように、使用するすべての DXGI アダプターをループして、1IDXGIFactory4::EnumAdapters1()
つ以上の最適な (または私の場合はすべての) アダプターを見つけますD3D_FEATURE_LEVEL_11_0
。DXGI_ADAPTER_FLAG_SOFTWARE
そして、デモに示されているように、次のようなすべてのアダプターを破棄します。
if ((adapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) != FALSE)
continue; // Check the next adapter.
私の実装では、互換性のあるすべてのアダプターをstd::vector
後で使用するためにダンプします。
実行時にすべてがどのように見えるかをブレークポイントを使用して確認すると、ループが終了した後にアダプタ リストにアダプタが 1 つしか含まれていないことに気付きます。 4000。
ループ中に中断し、DXGI_ADAPTER_DESC2
各アダプターの構造を確認すると、取得したのは確かに GT 650M であることがわかりました。これは、統合グラフィックスがそれ自体をソフトウェア アダプターとして識別していることを意味します。
これ自体はもっともらしいですが、Ivy Bridge のダイ (私が持っているもの) の写真を見ると、Intel 自身が次のように定義する「プロセッサ グラフィックス」として封鎖された大きな領域が表示されます。プロセッサ パッケージに物理的に含まれているか、プロセッサ シリコンに統合されているグラフィックスに変換します。」それは私に「ハードウェアアダプター」と叫ぶだけです。
上記のコード ブロックを削除すると、確かにリストに 2 つのアダプターが表示されますが、2 つ目のアダプターはそれ自体を"Microsoft Basic Render Driver"として識別し、ベンダー ID を提供し0x1414
ます0x8086
。このリストには、 の所有者についても言及されていません0x1414
。
さらに混乱を招くのは、インテル HD グラフィックス コントロール パネルのインフォメーション センターを確認すると、ベンダー ID が0x8086
!
誰もが尋ねる前に: はい、私のドライバーは最新のはずです。これに気づいてすぐに更新しました。奇妙なことに、DxDiag は統合グラフィックスのドライバーの日付を間違って教えてくれますが、GT 650M については同じ (少し真実に近いですが) です。ディスクリート GPU ドライバーは WDDM 2.0 のものですが、統合グラフィックス ドライバーは WDDM 1.3 のものです。(アップデートに失敗したかも?)