2012-10-25 67 views
10

我是桌面GL开发人员,我开始探索移动世界。共享内存体系结构中的OpenGL(ES 2.0)VBO性能

为了避免误解或者欢迎而琐碎的回复,我可以虚心地说,我非常了解GL和GL | ES机器。

简而言之,如果我们在共享内存架构中使用GL | ES 2.0,使用VBOs对客户端阵列使用背后的意义何在?

更详细地说:

  • 是记忆原始块,司机无法以任何方式,因为访问模式取决于优化任何

    顶点缓冲器:1)如何在应用配置顶点数据布局,2)顶点着色器如何消耗缓冲区内容,以及3)我们可以有许多以不同方式操作的顶点着色器,并且使用相同的缓冲区。

  • 对齐方式:单个VBO存储可以在对底层GL系统最优的地址开始;如果我只是强迫(例如,尊重对齐最佳实践)客户端数组分配到这些边界?

  • 基于瓦片的渲染与即时模式架构不应该发挥作用:据我的理解,这与我的问题(即内存访问)无关。

据我所知,使用维也纳组织可以有你的代码运行更好/更快未来平台/硬件,而无需修改它,但这不是这个问题的重点。除此之外,我还认识到,在共享内存架构中使用VBO会使内存使用量翻倍(如果由于某种原因,您必须保持顶点数据的可用性),并且这会花费您一笔数据。

与交错顶点阵列一样,VBO的使用在开发者论坛/博客/官方技术文档中有一个很大的“炒作”,没有任何数据支持这些语句(即基准)。

  • VBO在共享内存架构上的使用是否值得?
  • 客户端阵列工作正常吗?
  • 您对此有何评论?

回答

3

我可以报告说,使用VBOs在Android设备上存储顶点数据给了我零性能改进。在Adreno,Mali400和PowerVR GPU上试用过。但是,我们使用VBO考虑这是OpenGL ES的最佳实践。

您可以在我们的article顶点缓冲对象段落)中找到相关注意事项。

+0

非常感谢您分享这些成果。最后,这对于性能的观点来说很重要。无论如何,我无法解释自己如何在一个共享的内存GPU中提倡VBO的使用,我想这仅仅是为了市场营销,或者是为了让那些对GL良好实践相对陌生的人“准备好”目前来说,最好不要使用它们,因为如果你仍然需要CPU侧的存储器,并且由于不可避免的复制操作,潜在的存储器翻倍)。 – spattija

-1

我会告诉你,我所了解的iOS平台。 VBO的确会提高你的表现。

  1. VBO是完美的,如果你有一个静态几何图形 - 一旦被复制,每次绘图调用都不会产生额外开销。CA会将您的数据从客户端内存复制到每个drawcall的“gpu内存”。如果你忘了它,它可能会重新调整数据。
  2. VBO可以映射到gpu vie glMapBuffer - 这是一个异步操作,意思是说,它几乎没有开销,但你应该记住 - 当你映射\取消映射缓冲区时,最好在unmap操作后使用它2帧 - 避免同步
  3. 苹果工程师声称,即使您将每帧重新上传,VBO在SGX硬件上的性能都会优于CA - 我不知道细节。
  4. VBO是一种最佳实践。 CA已弃用。更好地保持速度与现代潮流,并保持尽可能多的跨平台,尽可能
+0

当然,你的观点是使用维也纳组织的标准理由,但不幸的是,其中大部分已经排除在问题之外。 –

+0

没有关于缓冲区映射的东西 - 这是在CPU和GPU之间发送几何图形的最快方式,但是有一定的局限性 – StiX

+0

缓冲区映射不应该在我的问题的上下文中发挥作用,它将锁定更新缓冲区内容,而我在向GL Vertex Puller(DX术语中的输入汇编程序)提供数据的背景下,我询问具有共享内存的GPU和没有专用内存的GPU的性能优势。 – spattija