- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要使用 DirectCompute 进行某些 GPGPU 计算的 double 。当我把所有东西都变成 float 时,着色器编译并运行得很好。但是,当我尝试在我的着色器中的任何地方使用 double 时,它会编译,但在运行时调用 ID3D11Device::CreateComputeShader()
失败并返回 E_INVALIDARG
。 C++ 端代码完全相同,请注意,我只是将着色器中的几个变量更改为 double。
当我使用 D3D11_FEATURE_DOUBLES
调用 ID3D11Device::CheckFeatureSupport()
时,它报告我的适配器支持 double ,它是 AMD Radeon R9 270x。根据一些 Google 搜索,AMD 卡实际上非常擅长 double 计算 - IE,我的卡可以使用 double ,但 DirectX 似乎不想让我这样做。
我认为 DirectCompute 可能没有这种能力(这很奇怪,因为很多科学 GPGPU 进程都需要 double ),所以我尝试使用像素着色器。同样的事情发生了。
这是驱动程序错误,还是我遗漏了什么?
编辑:我刚刚搜索了最新的 Catalyst 驱动程序,显然我落后于几个版本。这很有趣,考虑到我最近多次去控制中心检查更新。我要更新,看看会发生什么。
EDIT2:更新没有效果。要么我做错了什么,要么 DirectX 有某种错误。
最佳答案
D3D11_FEATURE_DOUBLES
指示的基本 double 着色器模型 5.0 支持仅包括对以下操作的支持:
dadd
- 加法/求反/减法deq
, dge
, dlt
, dne
- 比较dmax
- 最大dmin
- 分钟dmov
, dmovc
- 移动dmul
- 乘法dtof
, ftod
- 转换 double <-> float您需要检查 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 ,即使通过 KB2670838 在 Windows 7 上安装了 DirectX 11.1 运行时此硬件功能需要 Windows 8 或更高版本才能为真。
DirectX 11.1 and Windows 7 Update
DirectX 11.1 and Windows 7
关于c++ - CreateComputeShader 在使用 double 时返回 E_INVALIDARG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360110/
我需要使用 DirectCompute 进行某些 GPGPU 计算的 double 。当我把所有东西都变成 float 时,着色器编译并运行得很好。但是,当我尝试在我的着色器中的任何地方使用 doub
我是一名优秀的程序员,十分优秀!