mali --mobile platform GPU arch about vertex pipeline

顶点这边

我看powerVR也就是说苹果也是如此

还有mali

目前看这俩平台的顶点数据都有这样一步优化

一个render pass的所有顶点shade的时候 先算pos 用这个结果拿最上一层顶点数据 只对这部分顶点做其它数据varyings的计算

这样cull那些顶点都不需要计算除了pos外的其它数据了

它接下来的说法我是比较困惑的 

他说 这部分顶点数据是交错放置的

所有postion顶点数据pack一个buffer

其它non-pos数据包一起 这部分可以去ue里确认下 这是上层做的事情 还是硬件已经完成了的 值得一试在mali

 Index-Driven Vertex Shading

这是个好事情 至少巨大的vertex 带宽数据这部分 少了好多 至少mali是这样 估计apple也是如此的

IDVS的数据在mali上是可以测试的 用streamline我们可以得到多少顶点 只做了pos (被剔掉了 )不用做varyings的计算

根据这下面给的建议来看 是要把 数据分开包的 这个很值得做了

-Called glBindFramebuffer () to change the theGL_FRAMEBUFFER or GL_DRAW_FRAMEBUFFER target target
– Called glFramebufferTexture *() or  glFramebufferRenderbuffer ()  to change the attachments
– Called eglSwapBuffers ()
– Called glFlush () or glFinish ()
– Created a glFenceSync () then called glClientWaitSync () to wait

这几个opengles会end render pass

用这几个做load

glClear () , glClearBuffer *() , glInvalidateFramebuffer()

用glInvalidateFramebuffer()做store

配合Framebuffer fetch服用吧

https://community.arm.com/developer/tools-software/graphics/b/blog/posts/mali-midgard-family-performance-counters

https://community.arm.com/developer/tools-software/graphics/b/blog/posts/mali-bifrost-family-performance-counters

powervr apple 和mali

应该都做了 把pos先算的事情

然后把顶点数据里的pos都合到一个buffer上增加了read时的cache命中 应该并不是硬件做这件事情的开关 但肯定要这样做 这样效率高

然后ue我估计做了

unity没做

但是新出的DOTS

在ecs这边的原理和合并顶点数据是一样的

在renderpipeline这边似乎有提交

https://forum.unity.com/threads/dots-render-pipeline.752198/

https://github.com/Unity-Technologies/ScriptableRenderPipeline/commits/dots-instancing

 都说unity没做 要用只能自己封了

原文地址:https://www.cnblogs.com/minggoddess/p/11836064.html