我有一個3載體,讓我們說對絕對值做max()最便宜的方法,但是max()會保存符號嗎?
v = vec3(-4, 2, 3)
我願做組件的絕對值的最大值,所以相當於:
max(abs(v[0]), max(abs(v[1]), abs(v[2]))) == 4
不過,我有一個我需要保留標誌的要求。因此,例如:
magic_max(v[0], magic_max(v[1], v[2])) == -4.
這是一個很重要的問題,如果我使用條件分支,但我想這樣做的儘可能少的操作成爲可能,並避免分支。任何想法在哪裏看?也許有一些變化的魔法可以做到嗎?
難道你不能將這樣的低級優化留給編譯器嗎? – 2012-03-31 19:52:16
@BasileStarynkevitch我不相信我的編譯器來優化它。這是一個GLSL字節碼編譯器,直接進入我的GPU,不幸的是我無法訪問任何中間格式(例如程序集)來查看它在做什麼。 – amoffat 2012-03-31 19:58:32
你在做什麼'vec3(4,0,-4)'? – 2012-03-31 20:04:21