[Unity]数据的精度、硬件支持、以及性能
2020/05
14
15:05
在PC平台-Windows/Mac/Linux上,half,half,float 一律这视为32-bit float精度。half和fixed只在移动平台GPU上有区别;
最好在真机上实测不同精度的表现,防止出现问题
在移动平台上,不同型号的GPU处理同类型的数据,精度也是不同的。
GPU Family | float | half | fixed |
---|---|---|---|
PowerVR Series 6/7 | 32 | 16 | |
PowerVR SGX 5xx | 32 | 16 | 11 |
Qualcomm Adreno 4xx/3xx | 32 | 16 | |
Qualcomm Adreno 2xx | 32 vertex 24 fragment | ||
ARM Mali T6xx/7xx | 32 | 16 | |
ARM Mali 400/450 | 32 vertex 16 fragment | ||
NVIDIA X1 | 32 | 16 | |
NVIDIA K1 | 32 | ||
NVIDIA Tegra 3/4 | 32 | 16 |
大多数移动GPU仅支持32位数字(用于float)或16位数字(用于half/fixed)。一些较旧的GPU具有不同的精度在VS和PS中。
使用低精度的数据通常会更快,由于改善了GPU寄存器分配,以及某些低精度数学运算具有特殊的“快速路径”执行单元。使用低精度数据也会减少GPU的功耗,从而延长电池寿命。
一般经验是,除了位置和纹理坐标外,其他所有内容都可以用half/fixed。仅当精度不够时才提高
无穷大的数、Nana和其它特别浮点数
Direct3D 10的PC GPU都支持非常明确的IEEE 754浮点标准。这意味着浮点数的行为与在CPU上常规编程语言中的行为完全相同。
移动平台GPU行为不同。将零除以零可能会导致NaN;或者可能会导致无穷大,零或任何其他未指定的值。
我们要确保在目标设备上测试着色器以检查它们是否受支持。
CopyRights: The Post by BY-NC-SA For Authorization,Original If Not Noted,Reprint Please Indicate From 老刘@开发笔记
Post Link: [Unity]数据的精度、硬件支持、以及性能
Post Link: [Unity]数据的精度、硬件支持、以及性能