【问题标题】:DirectCompute shader: how to get rid of warning X3205: 'round'DirectCompute 着色器:如何摆脱警告 X3205: 'round'
【发布时间】:2019-09-24 02:08:46
【问题描述】:

在计算着色器模型 5 中,我得到了双精度浮点值的一些计算结果。我必须将值分配给一个整数变量,然后我收到警告:

warning X3205: 'round': conversion from larger type to smaller, possible loss of data

我理解警告,但就我而言,在运行时浮点值永远不会超过整数可接受的值。该代码产生了预期的结果,所以我想关闭特定违规行的警告。

我不知道如何关闭特定警告,我喜欢编写不产生任何警告的代码,或者如果有,则检查它们是否是误报。

任何帮助表示赞赏。

【问题讨论】:

    标签: directx hlsl directcompute


    【解决方案1】:

    你没有提供你的代码,我想它的形式是:

    double doubleValue = 1.0;
    int integer = round(doubleValue);
    

    如果您想抑制警告,并且您确定您正在处理的数据不会给出有趣的结果,您可以将 double 转换为 float,然后再将其传递给 round()

    double doubleValue = 1.0;
    int integer = round((float)doubleValue);
    

    此表单不会触发警告。

    【讨论】:

    • 会尝试的。在等待答案时,我为源代码编写了一个预处理器,为错误 blob 编写了一个后处理器。预处理器允许一些指令(被编译器视为 cmets),然后对错误 blob 进行后处理以消除可接受的警告并保留其他警告。
    • 消除错误确实会为您提供您想要的结果,但它也会消除随后出现的可能与您相关的警告。
    • 不,我创建的指令仅抑制指令下方行上的警告。它看起来像“//$WARN_IGNORE_ONCE 'warning X3205: ''round'''”。在预处理过程中,它记录下一个包含指令后代码的行号,后处理从错误 blob 中删除具有该行号并具有指令中给出的字符串的行。压制任何不想要的东西没有危险。
    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2010-10-23
    • 2016-02-04
    • 2021-11-08
    相关资源
    最近更新 更多