顶点这边
我看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没做 要用只能自己封了