how much does a tex2D/texCUBE cost?

本文探讨了移动平台上纹理采样的成本与优化方法,特别是针对PowerVR GPU的特点进行了深入分析。文章指出,非依赖性纹理采样相对高效,而依赖性采样则较为昂贵,并提出了解决方案。

how much does a tex2D/texCUBE cost?
https://forum.unity.com/threads/how-much-does-a-tex2d-texcube-cost.182469/

移动平台纹理采样比较昂贵。

1. 效率

采样在移动平台相当于几个到几十个简单的数学运算, 在PC上更高,一次采样相当于几个到上百个数学运算。
不建议用texture lookups

2. 某些GPU, 例如PowerVR。non dependent纹理采样几乎免费,但是dependent 采样开销更大。

gpu cache 2x2 box, 相邻像素采样效率更高。
dependent指这种情况:
A dependent texture read is a texture read in which the texture coordinates depend on some calculation within the (fragment) shader instead of on a varying.
As the values of this calculation cannot be known ahead of time it is not possible to pre-fetch texture data and so stalls in shader processing occur.
ps中计算uv,那么只有在ps中才能知道采样的位置,不能在ps之前(光栅化)预读取纹理
例如: tex2D(_MainTex,uv+float2(0.1,0.1)) 以及tex2D(_MainTex, uv.zw))

If your shader requires more than one dependent texture read:
When a dependent texture read occurs the current thread running on the USSE within the SGX is suspended until the comparatively slow read is completed, and another thread is swapped in. By re-arranging the code within the shader so that the two dependent texture reads were back-to-back, another performance improvement was gained. This works because the compiler can now batch these dependent texture reads together, whereas previously the shader looked as follows:
• Mathematics
• Texture Read
• Wait
• Mathematics
• Texture Read
• Wait

It now looks as follows:
• Mathematics
• Texture Read
• Texture Read
• Wait

This effectively hides some of the wait time of the first texture read behind the execution time of the second texture read. Unfortunately a wait of some description is inevitable due to the limitations of dependent texture reads. Nonetheless, the strong parallelism of the PowerVR SGX hardware ensures that these waits can be used effectively by other threads
^ But don’t forget to check the code in the compiled shader and/or use #pragma glsl_no_optimize when you use more than one dependent texture read.
也即是说ps中不计算纹理坐标,那么第一次读取纹理时,可以把相同uv的纹理连续的读取出来。

所以:
不要在ps中队uv进行数学计算,放到vs中。
不用.zw分量访问纹理 (2012年powerVR GPU,不知道现在是否还存在效率问题?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值