0

我在一个名为half H的变量上编写了 20 个片段数学运算。然后我为half4 XYZH运行了 5 个类似的数学指令.... 第二个着色器非常慢!!!我完全惊讶,它似乎慢了 4 倍多!我在 GTX 470 上。H 是程序纹理高度图,XYZ 将是纹理每个点的法线,用于照亮超级详细的纹理。

half4 上的一堆数学运算是否比 half 慢 4 倍?

这段代码的运行速度比我预期的要慢很多,我错过了什么吗?

        half4 sel ( half s, float x){       
            if(s<=0) {half sins=tri(x*2.2); return half4(1-abs(sins),abs(sins),0,sins);} //XYZH     
            //else if(s==1){return tri(x);}
        }

        half4 frag (v2f i) : COLOR
        {
            float3 pos = mul (_Object2World, i.uv).xyz;
            float3 posb = mul (_Object2World, i.uv).xyz;

            half4 ht = (sel(0,pos.x));
            half4 g1 =(HSVtoRGB(float3(.2+ht.w,.43*c3/2,.476322+ht.w*c1)))*(2*i.color); 
            return g1;
        }
4

1 回答 1

0

是的。你算术做了四次。

此外,混合使用 half 和 float 操作可能会删除使用 half 获得的任何性能优势。

于 2013-11-12T14:07:45.463 回答