着色器允许if(x>a && x<b)
,但我的理解是逻辑测试很慢。这是否值得优化:
mid = (a+b)*.5;
half = (b-a)*.5;
if(abs(x - mid) < half){...}
似乎代码要多得多,但从CPU ASM的时代来看,这些技巧有时候值得一试。
如果可以在CPU上计算一次half
和mid
并将其作为着色器参数传入,那么我们将:if(x>a && x<b)
替换为:if(abs(x - mid) < half)
- 是这个值得打扰?
在我的测试中,我看到将half
和mid
拉到预先计算的着色器参数中有一点改进,但我只有一个GPU可以测试,所以我在“一般”之后回答,如果有案例,那将会好得多或者更糟。
答案 0 :(得分:0)
着色器参数的预先计算部分可能无关紧要(特别是在directx上),因为编译器通常很聪明,可以发现表达式是不变的。
问题是如何实施abs。你的目标GPU是什么?移动,中,高端?