CreateComputeShader returns E_INVALIDARG 使用双打时
CreateComputeShader returns E_INVALIDARG when using doubles
我需要使用 DirectCompute 进行某些 GPGPU 计算的双精度。当我把所有东西都变成浮点数时,着色器编译并运行得很好。但是,当我尝试在我的着色器中的任何地方使用双打时,它会编译,但在运行时调用 ID3D11Device::CreateComputeShader()
失败并返回 E_INVALIDARG
。 C++ 端代码完全相同,请注意,我只是将着色器中的几个变量更改为 double。
当我用 D3D11_FEATURE_DOUBLES
调用 ID3D11Device::CheckFeatureSupport()
时,它报告我的适配器支持双精度,它是 AMD Radeon R9 270x。根据一些 Google 搜索,AMD 卡实际上非常擅长双精度计算 - IE,我的卡可以使用双精度,但 DirectX 似乎不想让我这样做。
我想也许 DirectCompute 没有这种能力(这很奇怪,因为很多科学 GPGPU 进程需要双打),所以我尝试使用像素着色器。同样的事情发生了。
这是驱动程序错误,还是我遗漏了什么?
编辑:我刚刚搜索了最新的 Catalyst 驱动程序,显然我落后于几个版本。这很有趣,考虑到我最近多次去控制中心检查更新。我要更新看看会发生什么。
EDIT2:更新没有效果。要么我做错了什么,要么 DirectX 有某种错误。
D3D11_FEATURE_DOUBLES
表示的基本双精度着色器模型 5.0 支持仅包括对以下操作的支持:
dadd
- Addition/Negation/Subtraction
deq
、dge
、dlt
、dne
-比较
dmax
- 最大值
dmin
- 最小值
dmov
, dmovc
- 移动
dmul
- 乘
dtof
, ftod
- 转换双精度 <-> 浮点数
您需要检查 D3D11_FEATURE_DATA_D3D11_OPTIONS.ExtendedDoublesShaderInstructions
,其中包括以上所有内容以及:
dfma
- 融合乘加
ddiv
- 分区
drcp
- 倒数
回复:DirectX 11.1
D3D11_FEATURE_DATA_D3D11_OPTIONS.ExtendedDoublesShaderInstructions
是 DirectX 11.1 API 的一部分,是一项需要 WDDM 1.2 驱动程序的硬件功能。因此,根据 Microsoft Docs, even with the DirectX 11.1 runtime installed on Windows 7 via KB2670838 此硬件功能要求 Windows 8 或更高版本为真。
DirectX 11.1 and Windows 7 Update
DirectX 11.1 and Windows 7
我需要使用 DirectCompute 进行某些 GPGPU 计算的双精度。当我把所有东西都变成浮点数时,着色器编译并运行得很好。但是,当我尝试在我的着色器中的任何地方使用双打时,它会编译,但在运行时调用 ID3D11Device::CreateComputeShader()
失败并返回 E_INVALIDARG
。 C++ 端代码完全相同,请注意,我只是将着色器中的几个变量更改为 double。
当我用 D3D11_FEATURE_DOUBLES
调用 ID3D11Device::CheckFeatureSupport()
时,它报告我的适配器支持双精度,它是 AMD Radeon R9 270x。根据一些 Google 搜索,AMD 卡实际上非常擅长双精度计算 - IE,我的卡可以使用双精度,但 DirectX 似乎不想让我这样做。
我想也许 DirectCompute 没有这种能力(这很奇怪,因为很多科学 GPGPU 进程需要双打),所以我尝试使用像素着色器。同样的事情发生了。
这是驱动程序错误,还是我遗漏了什么?
编辑:我刚刚搜索了最新的 Catalyst 驱动程序,显然我落后于几个版本。这很有趣,考虑到我最近多次去控制中心检查更新。我要更新看看会发生什么。
EDIT2:更新没有效果。要么我做错了什么,要么 DirectX 有某种错误。
D3D11_FEATURE_DOUBLES
表示的基本双精度着色器模型 5.0 支持仅包括对以下操作的支持:
dadd
- Addition/Negation/Subtractiondeq
、dge
、dlt
、dne
-比较dmax
- 最大值dmin
- 最小值dmov
,dmovc
- 移动dmul
- 乘dtof
,ftod
- 转换双精度 <-> 浮点数
您需要检查 D3D11_FEATURE_DATA_D3D11_OPTIONS.ExtendedDoublesShaderInstructions
,其中包括以上所有内容以及:
dfma
- 融合乘加ddiv
- 分区drcp
- 倒数
回复:DirectX 11.1
D3D11_FEATURE_DATA_D3D11_OPTIONS.ExtendedDoublesShaderInstructions
是 DirectX 11.1 API 的一部分,是一项需要 WDDM 1.2 驱动程序的硬件功能。因此,根据 Microsoft Docs, even with the DirectX 11.1 runtime installed on Windows 7 via KB2670838 此硬件功能要求 Windows 8 或更高版本为真。
DirectX 11.1 and Windows 7 Update
DirectX 11.1 and Windows 7