Shader部分
预编译指令 fragmentoption
- ARB_precision_hint_nicest
fragment使用最高精度,fp32,降低性能,增强效果,精度不足可能是这个原因 - ARB_precision_hint_fastest
fragment使用最低精度,fp16,提高性能和速度
以上两个指令不能同时使用
- fx10 定点数
- fp16 半精度浮点数
- fp32 单精度浮点数
- fp64 双精度浮点数
在 ARM Mali, Imagination PowerVR 这种移动GPU上,都有独立的fp16单元,也就是说,fp16是从硬件电路级别上被支持的,这就意味对其的处理会非常的快。
贴图采样
移动平台默认低精度,如果有精度要求可以指定float高精度,比如sampler2D_float。最好针对各种平台都做一遍宏定义,d3d metal vulkan glcore gles3 gles
GLSL HLSL
framebuffer fetch,HLSL中的in_VCOLOR0在GLSL中不认识,需要替换为in_COLOR0
GPU
Mali G76及以下
- 不支持inout语法
高通GPU驱动
1.Unity GPU instance中的color使用了bitfieldExtract函数,在高通上的实现是错的,需要自行替换。
- 510及以下对于framebuffer fetch的支持有问题。有alpha test的像素点会失效。
Arm GPU
1.不支持SSBO,无法使用GPU instance,无法使用GPU粒子。改成非GPU粒子,自己输入矩阵数值。
A11
- A11处理器在采样深度图的时候,和a系列其他款都有细微精度差异。后来改为a11使用point,其他使用bilinear