为什么GLSL日志返回错误的结果? (Intel驱动程序)

时间:2016-01-21 16:16:17

标签: opengl math glsl driver

我正在GPU上做一些数学并阅读结果。

我从日志中得到了错误的值。我已经验证了0 - 10,20,30,40的值。

如果我对该值进行硬编码(正如您在验证下看到的那样),我会得到正确的结果吐出来。但是,如果我使用带有应该返回相同结果的硬编码值的log,我会得到错误的结果spat out。

这是我在我的功能中所做的事情。

vec4 IScale(vec4 value)
{
    switch(uScaleType_i)
    {
        case Log:

            //value = log(value);

            value = vec4(1,1,1,1);
            value.r = log(5);
            //verifiy
            //value.r = 0.698970004     
        break;
        case Sqrt:
            value = sqrt(value);
        break;
        case None:
            break;
    }
    return value;
}

我想知道这里有什么意义吗。我已经将我回到excel的结果添加到了一个图表中。起初,它几乎就像是正确值的两倍,但它不是那么干净,它越走越远。

除驾驶员问题外,还有其他解释吗?我想不出其他任何事情要检查!

如果是这样,我怎么可能解决它,除了重构我的代码在CPU上做?为什么我不能在网上找到证据支持这一点?我完全被困惑了!

我在笔记本电脑上运行:  (Intel(R)HD Graphics 4000,132分机。)

P.S。 Sqrt很好,我得到了我期望的值。 p.p.s我检查过,我没有意外地创建了一个名为" log"

enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

这是the specificatione将返回自然对数,即对数str_replace();的对数。不是基数10的对数。

答案 1 :(得分:2)

我相信你正在绊倒用于日志的基地。在Excel中,基数是10,但是在glsl中它是e。

要获得正确的结果,您应该将结果与所需基数的对数分开。

value = log(value)/log(10);

或者在excel中,您可以使用LN(RC[-1])