Adreno平台程序优化(2)

一、简介
Adreno GPU的另一个重要的体系结构亮点是基于图块的渲染,有时也称为合并。 TBR是一种将场景帧缓冲区分成较小区域进行渲染的机制,从而优化了总体渲染。 Adreno GPU的基于图块的渲染机制使用两次通过算法来渲染场景。 第一遍将每个原语与一组BinID和背面信息相关联。 每帧执行一次此过程。 在第二遍中,这些BinID用于平凡拒绝属于正在渲染的当前bin之外的图元,并执行早期背面剔除。第二遍每个仓运行一次。 每个图块或垃圾箱都呈现给GMEM。 然后,将每个容器解析到内存中的渲染表面。

二、 Adreno平台程序优化
在基于图块的呈现体系结构上,重要的是最小化来自GMEM的数据加载和存储。 如前几节所述,必须将所有渲染到GMEM中的数据复制回系统内存中,然后才能进一步使用。 将数据从GMEM复制到系统内存的过程称为GMEM存储。 在某些情况下,当驱动程序无法确定渲染目标是否将用不透明像素覆盖每个像素(在渲染剪刀内)时,它必须在渲染之前将先前的渲染目标数据加载到GMEM中。 从系统内存复制到GMEM的过程称为GMEM加载。 将数据从一个存储区复制到另一个存储区是最昂贵的操作之一,应尽可能减少复制。
切换渲染目标时或在呈现帧之前,必须有GMEM存储。 最小化渲染目标开关是在任何基于图块的渲染器上实现良好性能的关键。 仅当绑定渲染目标时才需要加载GMEM,并且在绘制目标之前不会清除或丢弃GMEM。 刷新与绑定渲染目标相同,并且为避免GMEM加载,在绘制之前必须清除/丢弃刷新。 需要GMEM加载的典型情况是将其从渲染目标复制到新缓冲区中以进行后期处理。 不需要GMEM加载但通常被应用程序开发人员忽略的典型场景是渲染到屏幕外渲染目标,然后切换到交换链并渲染场景,而无需在两个渲染目标上调用clear / discard。
应用程序开发人员可以采取许多重要步骤来避免不必要的解决,并从Adreno GPU中获得最佳性能。 接下来是应遵循的一组准则,以最大程度地减少不必要的解决。
Direct3D11.1提供了两个功能,这些功能对于在TBR中获得最佳性能非常重要:IDirect3D11Context :: DiscardView和IDirect3D11Context :: DiscardResource。这两个功能通知驱动程序不再需要资源视图或资源中的内容。驱动程序可以使用此信息来避免在渲染到废弃目标时恢复GMEM。例如,应用程序可能知道它将不透明的值写入帧缓冲区的每个像素。因此,应用程序在渲染框架之前不会清除屏幕内容。尽管此行为是正确的,但如果未调用DiscardView,驱动程序将被迫在渲染之前还原渲染目标的内容(重量级解析)。否则,驱动程序将无法知道应用程序打算覆盖每个像素值。通过调用DiscardView,驱动程序可以避免进行重量级解析,因为它知道应用程序不依赖于要还原的内容。
每次切换渲染目标时,都会导致性能下降。 在可能的情况下,应用程序应在切换到新的渲染目标之前将所有渲染发布到单个渲染目标。 至少切换目标会导致GMEM存储…如果不清除渲染目标更改之间的内容,则会导致GMEM加载。
通过设置剪刀矩形以匹配要更新的区域(使用ID3D11DeviceContext :: RSSetScissorRects),可以显着提高性能。 这允许驱动程序跟踪已更新的区域,并将通过GMEM的流量最小化到仅渲染所需的部分。 驾驶员将单独跟踪剪刀,并在处理场景时应用所有剪刀的并集。 不建议在每个绘制调用中更改剪刀以使其紧密匹配对象的边界。应用程序应进行实验,以查看需要多少剪刀才能消除对未更改像素的不必要处理。 根据经验,每个渲染目标应用程序不得设置超过16个不同的剪贴。
避免显式调用IDirect3D11DeviceContext :: Flush。 唯一的例外是,如果不再将任何渲染发布到当前绑定的渲染目标。

推迟读取渲染目标数据:
从当前渲染目标复制数据可能会导致刷新。 如果不需要立即使用数据,请考虑将副本从渲染目标中推迟,直到针对该渲染目标发出了所有渲染命令为止。 如果立即需要数据,并且渲染目标未更改(例如,渲染目标的快照用作后续渲染命令的纹理),则可能导致刷新和GMEM加载操作。CPU对资源的访问未通过管道传递,因此在对性能敏感的代码中应格外小心。 如果已使用资源对当前渲染目标进行纹理化或blt处理,则会对该资源发出锁定,并且在允许CPU访问该资源之前,必须清除当前工作。 刷新将导致GMEM存储,并且如果继续使用渲染目标,则会在锁定之后的渲染命令之前导致GMEM加载。 如果应用程序正在映射要写入的资源,则可以通过使用D3D11_MAP_WRITE_DISCARD避免刷新
或D3D11_MAP_WRITE_NO_OVERWRITE。

三、总结
以上就是本次要介绍的Adreno平台优化相关的全部内容了,大家有兴趣的话,可以继续关注,后期会继续更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值