Windows10なのにDirectX12がインストールされていない?

のかもしれないと思う人もいるようだ。

そう思う理由の一つが、DirectX診断ツール(Dxdiag)の仕様変更があるからだ。Insider Previewの頃までは、昔の設計と同じでインストールされているDirectXのバージョンが、DirectX診断ツールに表示されていたが、現在はその使用が変更され、ビデオドライバ(ディスプレイアダプタ)がサポートしているDirectX Feature Levelを表示する設計に変わっている。

これは、近年のWindowsではDirectXコンポーネントをOSに統合したため、DirectXを単一のパッケージとしてバージョンアップしなくなったことが大きい。(Visual Studioやサードパーティ向けの開発ツールキットを除く。)これは、Windows8.x以降のOS仕様変更によって生じた。

DirectX11.1はWindows8以上で、DirectX11.2はWindows8.1でしか提供されないといった具合に、アップグレードしない限り使えなくなったため、インストールされている最新バージョンを記載する理由がなくなったのだ。ただ、Windows8.1まではFLしか更新していなかったこともあり、これまで通りの表記だったのだ。


それに対して、特にライトユーザーは、DirectXという製品を、まるで性能や機能が上がる凄いものとしてみる人が今でもいる。実際には、DirectXによるAPIの拡張は、それをサポートするハードウェアがなければ、意味がないにもかかわらず・・・。(むしろ、無理な対応は互換性を失うこともある)

その結果、DirectXは適正バージョンに上げたのに、動作しないのだがということも増えてしまった。

DirectX10にしか対応しない環境で、DirectX11をインストールしても、DirectX11のゲームが動くわけではないが、入れれば動くと思い込む人も続出したのだ。これは、後述するが、昔のDirectXでは、それでもいけたからである。そのため、近年はDirectXさえ最新なら動くと思っていた人が、入れても動かない遅いというケースもある。


それを、改善するために取ったのが今回の変更だろう。地味だがかなり効果的である。
具体的にVMWare上で作成したWindows10と、実PC上で作成したWindows10のDirectX診断ツールで説明しよう。
下の図はどちらも同じWindows10 10.00.10586(TH2)環境である。上は診断ツールでは、11.1となっているが、下のものは、9Exになっている。

画像

画像


しかし、どちらもC:\Windows\System32の下にはD3D12.dllが存在する。

即ち、どちらもインストールされているのは、DirectX12なのである。DirectX診断ツールによるDirectXのバージョンはインストールされているAPIバージョンではないことを示している。

そして、インストールされているAPIは診断ツールの左下方向にあるDxdiagのバージョンが10.0になっていれば、DirectX12がAPIセットとしてはインストールされていると見て良い。ただ、バージョンが11や10、9Exになっている場合は、DirectX12のアプリケーションはハードウェア対応の都合で使えない。

使うにはビデオカードがそれに対応した製品でなければならず、もしそれが対応しているビデオカードなら、ビデオカードベンダーからDirectX12対応のドライバを入手しないといけない。

画像


尚、ビデオカードの機能を確認する場合は、[ディスプレイ]タブ(マルチディスプレイならディスプレイ1、2、3でディスプレイ毎にあります)で、機能レベル(DDIバージョン)を見ればわかるだろう。ここでサポートしている機能レベル(FL)の一番高い数字が、9.3ならDirectXのバージョンは9.3Exになる。11なら同様に11、11.1などになる。12.0、12.1などであれば、12になる。
画像


<DirectXの最新版=新機能が動く訳では無い>

まあ、元々DirectXのバージョンは、ハードウェアがそれに対応していなければ、無用の長物といってもおかしくない。確かにDiretX6~8頃までは、ソフトウェア(CPU)側に命令をまわすことで、ある程度補間も出来たが、今のDirectXの拡張は、複雑な画像、データ演算をGPUに肩代わりさせるための最適化命令が追加されている。要は、CPUでやっていたことを、GPUに渡し処理させてこそ、最新のDirectX機能が使えるようになったのだ。

具体的には、昔はGPUが持つ命令そのものがほとんどなかった。そこで、処理を高める命令を増やしていくことで性能を高めてきた。

例えば、三角錐(さんかくすい)を描くとしたら、点を沢山そこに集めて、三角錐にするポリゴンで生成すると、点をどこにおくか計算するのに時間が掛かる。だったら、三角錐の表面をタイル状に再現し、中身は空洞にし、色だけを表面を貼れば、条件によっては演算を減らすことが出来る。

これで処理が減り高速化するのだ。昔はこのように命令を増やしたり、描画の方法をAPIとして追加することで、処理が上がったり、新しいCG技術が出来ていたのだ。

しかし、今は沢山の命令をCPUでの補助なしに如何に高速に実行するかを命題としている。そのため、グラフィックスチップ(GPU)側が、沢山の命令に対応しないと、処理は高速化しないし、新しいCG処理も出来なくなるのだ。ライトユーザーの多くは、この理解が抜け、古い情報を未だに信じているか、そういう情報を古いWebで情報で覚えてしまったと思われる。

その結果、DirectXが最新版になれば、DirectXが新しい方が快適に動くと思ってしまうのだ。そして、その誤解が続くと、環境は対応しているはずなのに動かないのだけどと、誤解する人が出てくるのだ。それを防ぐために、DirectXバージョンの項目に表示される内容が、WindowsにインストールされているAPIのバージョンから、ハードが対応しているAPIの機能に変更されたのである。


ちなみに、APIが入っている事だけを知りたいなら、D3D12.dllというファイルがCドライブのWindowsフォルダ→System32内にあれば、導入済みとなる。それがあっても、ハードやソフトウェア(一般にゲームが多い)が対応していない間はD3D12.dllは使えない。

<対応または、機能の一部を搭載し高速化が可能なGPU>

現在DirectX12に対応又は対応予定(DirectX12の恩恵を受けられる)として発表している主要なGPU製品は、


・インテルのCPU内蔵GPUで第8世代以降の製品(Haswell-Core iの4xxx番台より後)の製品※1

・AMDのGCN1.0/1.1を採用した製品※2

・nVIDIAのMaxwell/Kepler/Fermi世代のGPU、GeForce 400シリーズ以降※3


※1 完全対応はSkylake世代以降の第9世代iGPU、具体的にはCore iシリーズの6xxx番台より後の製品。
※2 RADEON HD 8000世代より後は12_0対応。
※3 うちFL12_1に対応するのは2G Maxwell(Geforce 9xx G世代)以降、FL12_0は1G Maxwell以降。

となる。尚、ドライバ側で12に対応しているとしても、FLが必要とする制御コマンドの全てが発行できなければ、対応にはならない。DirectX診断ツールでは、必要な対応を全て完了しているかをチェックするため、上記の製品に該当する場合であっても、※1~3に記載されている製品以下の製品はDirectX11対応となる。(2015年11月30日現在)



この記事へのコメント

この記事へのトラックバック