着色器编程 - 测试两个值之间的差异

时间:2011-12-08 17:22:13

标签: optimization shader

着色器允许if(x>a && x<b),但我的理解是逻辑测试很慢。这是否值得优化:

mid = (a+b)*.5;
half = (b-a)*.5;
if(abs(x - mid) < half){...}

似乎代码要多得多,但从CPU ASM的时代来看,这些技巧有时候值得一试。

如果可以在CPU上计算一次halfmid并将其作为着色器参数传入,那么我们将:if(x>a && x<b)替换为:if(abs(x - mid) < half) - 是这个值得打扰?

在我的测试中,我看到将halfmid拉到预先计算的着色器参数中有一点改进,但​​我只有一个GPU可以测试,所以我在“一般”之后回答,如果有案例,那将会好得多或者更糟。

1 个答案:

答案 0 :(得分:0)

着色器参数的预先计算部分可能无关紧要(特别是在directx上),因为编译器通常很聪明,可以发现表达式是不变的。

问题是如何实施abs。你的目标GPU是什么?移动,中,高端?