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日現在)
そう思う理由の一つが、DirectX診断ツール(Dxdiag)の仕様変更があるからだ。Insider Previewの頃までは、昔の設計と同じでインストールされているDirectXのバージョンが、DirectX診断ツールに表示されていたが、現在はその使用が変更され、ビデオドライバ(ディスプレイアダプタ)がサポートしているDirectX Feature Levelを表示する設計に変わっている。
これは、近年のWindowsではDirectXコンポーネントをOSに統合したため、DirectXを単一のパッケージとしてバージョンアップしなくなったことが大きい。(Visual Studioやサードパーティ向けの開発ツールキット
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日現在)
この記事へのコメント