gpt4 book ai didi

c++ - CreateComputeShader 在使用 double 时返回 E_INVALIDARG

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:08 25 4
gpt4 key购买 nike

我需要使用 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 - 互惠

Shader Model 5 Assembly

回复: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com