Android上非常慢的VkendCommand缓冲区
我做了一些分析,发现vkEndCommandBuffer在Android上做了很多工作(我的应用程序中25%的渲染线程时间)。对我来说,最奇怪的是它会产生巨大的memcpy(渲染线程时间的20%) 我在命令缓冲区和命令缓冲池中尝试了不同的标志,也尝试了隐式和显式地重置命令缓冲区,但没有任何帮助。我发现如果禁用MSAA,vkEndCommandBuffer的工作速度会更快。但这对我来说毫无意义 堆栈:Android上非常慢的VkendCommand缓冲区,android,performance,vulkan,Android,Performance,Vulkan,我做了一些分析,发现vkEndCommandBuffer在Android上做了很多工作(我的应用程序中25%的渲染线程时间)。对我来说,最奇怪的是它会产生巨大的memcpy(渲染线程时间的20%) 我在命令缓冲区和命令缓冲池中尝试了不同的标志,也尝试了隐式和显式地重置命令缓冲区,但没有任何帮助。我发现如果禁用MSAA,vkEndCommandBuffer的工作速度会更快。但这对我来说毫无意义 堆栈: qglinternal::vkEndCommandBuffer QglCommandBuffe
- qglinternal::vkEndCommandBuffer
- QglCommandBuffer::End
- A5xCommandBuffer::HwProcessWorkload
- memcpy
UPD:我在5台设备上测试了我的应用程序。应用程序每帧绘制200-400个调用:
- 所有使用Adreno的设备都在DrawIndexed中执行大量工作。他们称之为巨型memset(wtf?)李>
- 所有带有Adreno的设备都不会重用命令缓冲区。它们总是释放命令缓冲区的所有资源(即使我使用隐式重置)。它需要大约2-5%的渲染线程时间,具体取决于设备