Direct3D11/DirectX11 GeForce の ComputeShader とドライバ

少し前から Compute Shader が使えなくなっていました。

Direct3D11/DirectX11 ComputeShader 4.0 を使う

上のエントリを書いたあと、ドライバを 186.18 に更新したら
CheckFeatureSupport() の D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS で
ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x が 0 を返す
ようになっており、実際に CreateComputeShader() が失敗します。
今回 190.38 に更新してもやっぱり同じで、186.08 に戻したら動きました。

なお CheckFeatureSupport() の D3D11_FEATURE_THREADING で
DriverConcurrentCreates は 1 を返すので、ドライバがきちんと D3D11 に
対応しているのは本当です。
DriverCommandLists が 0 なので Deferred Context はドライバの
エミュレーションになりますが、リソース生成はスレッドに対応している
ことになります。

DriverConcurrentCreates
 リソース生成のスレッド対応かどうか。

DriverCommandLists
 ドライバが CommandList の記録と実行に直接対応しているかどうか。
 0 でもコマンドバッファをソフトウエアで記録するため実行できます。

以前描画周りを Direct3D11 対応で作り直していて積極的にスレッド化したの
ですが、ロード後のリソース生成でまれに失敗することがありました。
よく考えたら当時まだドライバが DriverConcurrentCreates に
対応していなかったので当たり前でした。

関連エントリ
Direct3D11/DirectX11 ComputeShader 4.0 を使う
Direct3D11/DirectX11 (6) D3D11 の ComputeShader を使ってみる