【问题标题】:DirectX does not allow double precision math in VB.netDirectX 不允许在 VB.net 中使用双精度数学
【发布时间】:2018-03-22 02:34:38
【问题描述】:

我有一个进行 FEM 结构分析的大型 VB.net 应用程序。它需要双精度数学。该应用程序还为图形使用 DirectX。我现在知道 DirectX 在启动时故意将“浮点单元”(FPU)默认设置为单精度。这是一个大问题。我需要弄清楚如何启动 DirectX 但保留双精度。目前我开始DirectX 具有以下功能:

Dev = New Device(0, DeviceType.Hardware, Panel2,         
CreateFlags.SoftwareVertexProcessing, pParams)

我已经读过如下所示使用“CreateFlags.FpuPreserve”将保留双精度。但是当我尝试这个 DirectX 时没有启动。

Dev = New Device(0, DeviceType.Hardware, Panel2, CreateFlags.FpuPreserve, pParams)

谁能告诉我如何从 VB.net 启动 DirectX 并保持双精度?

【问题讨论】:

    标签: vb.net directx precision direct3d sharpdx


    【解决方案1】:

    首先,要让您的代码正常工作,您仍需要指定软件顶点处理。在 VB 中,这是作为 Dev = New Device(0, DeviceType.Hardware, Panel2, CreateFlags.SoftwareVertexProcessing Or CreateFlags.FpuPreserve, pParams)

    一旦你解决了这个问题,你会发现它仍然不能达到你想要的效果。 FpuPreserve 对应于 D3DCREATE_FPU_PRESERVE。这会影响 CPU 而不是 GPU 上的浮点精度计算。

    要获得双精度 GPU 计算,您首先需要使用 Direct3D 11 API 或更高版本(看起来使用的是 Direct3D 9)。即使这样,双精度支持也是一个可选功能;您必须使用D3D11_FEATURE_DOUBLES 查询ID3D11Device::CheckFeatureSupport 以查看它是否存在。

    在 SharpDX 中,它将是 device.CheckFeatureSupport(Feature.ShaderDoubles),其中 device 的类型为 Direct3D11.Device,如果您使用的是 SharpDX.Toolkit.Graphics,则为 GraphicsDeviceFeatures.HasDoublePrecision

    【讨论】:

      【解决方案2】:

      是的,谢谢!如上所示,调用需要添加“或 CreateFlags.FpuPreserve”,“或”很关键。然后在 CPU / FPU 计算中保持双精度,这正是我所需要的。我不知道图形计算中使用了什么精度,但我不在乎。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-25
        • 2012-02-09
        • 2018-12-24
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多