纠结这个问题比较久,目前这个结果还有待确定,先记录下自己的目前的记录,如果有问题,欢迎跟我反馈。
由于手机soc上分布着几个关键元件,CPU,GPU等,CPU和GPU共享内存带宽,而屏幕显示分辨率和内存带宽又有一定的关系,
内存带宽:频率 * 位宽 / 8 * 通道数 * 倍增系数 ,如小米6的LPDDR4X,如下图
1866 * 2 * 64 / 8 * 2 = 60 GB/S
分辨率,一定分辨率下至少需要多少内存带宽呢?以1920*1080为例子
1920 * 1080 (两百万像素)* 4(字节,R8G8B8A8) * 2(framebuffer) * 60(帧) = 0.99 GB/S,这里有很大疑惑,网传100万像素需要4GB/S的内存带宽,但是我这里算的并不是,如果*8,那就有可能了,难道是单位不统一?
小米6的内存是LPDDR4X 1866MHZ,32bit 双通道
所以内存带宽是,1866 * 32 / 8 * 2 * 2 = 29.8 GB/s
https://www.nxp.com/docs/en/application-note/AN3606.pdf
这里也有参考文档
今天看到另外一个计算overdraw和内存带宽分辨率的文章感觉很好,转一下
https://zhuanlan.zhihu.com/p/31146776
以手机游戏的最低分辨率1280x720计算,一个屏幕缓冲区加上深度缓冲检测(为了遮挡不能关),每个像素需要6byte,然后以60帧/s的帧率要求,乘起来的结果是:
绘制一屏幕数据(1 overdraw),需要的带宽至少是331776000bytes,也就是0.316Gbytes。
不过,由于透明物体需要和原屏幕像素进行混合,所以还需要回读一次屏幕缓冲区的数据,会增加接近一倍,0.527Gbytes。
如果我们游戏的特效峰值overdraw达到了10(测一下的话,会发现全屏特效特别容易到达高值,乱做单特效都能直接到5),也就是10个屏幕的话,那就是5.27Gbytes。
而在一些老机器上,诸如三星S3,总内存带宽其实也就8G而已……