我正在尝试解决FPS中的丢弃问题.我发现Metal Flushes占用了大部分渲染时间.那是件好事儿吗?
我不确定这一点,因为Apple似乎没有记录究竟"金属冲洗"到底是什么,但我会根据之前的OpenGL经验回答:
在GPU驱动的应用程序的执行周期中,CPU将数据推送到GPU,等待GPU完成对此数据的操作(可能在此期间执行其他工作),并且一旦GPU完成,推送更多数据并请求更多操作.通常,"刷新"意味着CPU正在等待GPU完成操作("清除旧数据"),以便它可以将更多数据推送到GPU.
因此,如果我的解释是正确的,那就意味着"金属冲洗"测量CPU等待视频内存释放的时间,以便它可以推送更多数据并向GPU请求操作.在这种情况下,它可能是好事还是坏事:
CPU和GPU之间总会有一些通信开销,所以如果你的大部分渲染时间被"Metal Flush"占用,那么这可能意味着你的应用程序运行得足够快,帧之间的大部分延迟都是只是沟通开销.在那种情况下,这将是一件好事.
另一方面,您可能会将大量数据推送到GPU,并且复制数据和处理数据所需的时间可能会导致延迟.在那种情况下,这将是一件坏事.
最后,重要的是确保您的FPS一直很高.如果您的FPS因"金属冲洗"而下降,您可能想要尝试将数据传输空间化 - 例如,以块的形式存储纹理和/或使用较低分辨率的纹理可能会有所帮助.