Load store and memoryless
metal
https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/LoadandStoreActions.html
https://docs.unity3d.com/ScriptReference/Rendering.RenderBufferLoadAction.html
当前rt选 load 会导致之前一个pass的内容 从system mem copy到 当前tile mem
当前rt 选store 会导致当前pass 内容 从tile 到system mem copy
dont care 没有上述开销
和msaa相关的有
storeAndMultisample 后面那 个flag涉及resolve相关会生成resolve tex
multisample content和resolvecontent都会保存
==============
rtt的 action 设置为 clear/store 因为它之后会被采样
还要往之前rt上画的 action load/store (store以后会有对它的采样
这样 我们管线里应该尽量去掉load
用clear /store (会被采样
或者 clear/dontcare(不会做rtt被采样
======================
memoryless就是字面意思 是rendertexture的一个属性 关掉action store只有tile memory, rtt sample就会失效了
https://docs.unity3d.com/ScriptReference/RenderTextureDescriptor-memoryless.html
So basically what your script is doing (Without memoryless flag):
- ViewCamera renders scene objects into renderTexture
- Camera does storeAction to save renderTexture from tile memory to system memory
- Then renderTexture system memory copy is used as shader resource for ViewMonitor
- Lastly some other camera renders ViewMonitor (Where u probably use for testing if it works or not)
Once u enable the memoryless flag, storeAction cannot be done as renderTexture doesn't have system memory for it. So that leads that renderTexture will stay to the color it was created (Most likely gray - internally we even ignore all memoryless rendertexture setting on materials as it is not valid).
https://docs.unity3d.com/ScriptReference/RenderTexture-memorylessMode.html
https://forum.unity.com/threads/how-to-use-memoryless.491167/
所以这个memoryless对平常的管线来说 如果不是做single pass deferred rendering这种是没用的 只在tile上
或者msaa也能用到这个(这里理解起来有点绕,可以认为是4x那个不入systemmem 所以是memoryless 1x那个是另外 resolve又写入的 用multisampleResolve做到 经测试 正确)
Render texture color pixels are memoryless when RenderTexture.antiAliasing is set to 2, 4 or 8.
https://docs.unity3d.com/ScriptReference/RenderTextureMemoryless.MSAA.html
rendertexture.antialiasing是sample 数量
================
load action
If all the render target pixels are rendered to, choose the
DontCareaction. There are no costs associated with this action, and texture data is always interpreted as undefined.If the previous contents of the render target do not need to be preserved and only some of its pixels are rendered to, choose the
Clearaction. This action incurs the cost of writing a clear value to each pixel.If the previous contents of the render target need to be preserved and only some of its pixels are rendered to, choose the
Loadaction. This action incurs the cost of loading the previous contents.
所以这里选Dont care 我们把要load的rt都做掉了,扰动那些要选clear
store action
第一遍不处理msaa的情况 这里选store 因为都要被srv(之后只用tile的和msaa 只用resolve的会选其它action)
depth stencil选dont care
storage mode
因为还没有做singlepass所以也不用memoryless 如果是memoryless意味着没有gpu cpu mem 只有tile mem能省 footprint
=============對於msaa rt 有額外兩種 store action可以 處理 resolve 前後的兩張rt 的store action

srotreAndMultisampleResolve會保存兩種 5x 帶寬
MultisampleResolve 1x帶寬
store 4x帶寬
因爲要用來做srv我們應該選2 把4x那張帶寬和footprint去掉 ios推薦4xmsaa A11
====================
刚刚做到了个很了不起的事情 很开心
我可以设置 mrt 的两张msaa targets和depth target 的load action 和store action
用event cmd --after depth
中间发现个事情 mrt msaa 对应的depth target似乎就是1 sample 不是我之前以为的4
我刚刚降了2G的带宽/s 80M/fra
ios上最终要做到40M/frame
一点都不热
Load store and memoryless的更多相关文章
- vulkan load store and memoryless
https://www.jendrikillner.com/article_database/ https://community.arm.com/developer/tools-software/g ...
- msaa mrt load store action unity
unity buildin renderpipeline 和lightweight rp 对于开了msaa的rt 的load store action设置失效 buildin的时候set render ...
- Load store action in vulkan & ogles 的解决方案
metal的带宽之前的blog有讲 这篇主要是vulkan 和ogles的解决方案 https://www.khronos.org/registry/vulkan/specs/1.1-extensio ...
- 批量Load/Store指令的寻址方式
批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的 ...
- Unordered load/store queue
A method and processor for providing full load/store queue functionality to an unordered load/store ...
- unity里blit的load store action设置
做blit的 load store action时 用 setrendertarget做 之后blit 参数用 BuiltinRenderTextureType.CurrentActive https ...
- 对Extjs中store的多种操作
Store.getCount()返回的是store中的所有数据记录,然后使用for循环遍历整个store,从而得到每条记录. 除了使用getCount()的方法外,还可以使用each()函数,如下面的 ...
- Extjs4中的store
Extjs 4引入新的数据包,其中新增了不少新类并对旧有的类作出了修整.使数据包更强大和更容易使用. 本章我们将学习一下内容: 2.1. 概述新特性 Extjs4的数据包引入了如Mod ...
- ExtJs Ext.data.Store 处理
var storeCpye = new Ext.data.GroupingStore({ proxy : new Ext.data.HttpProxy({ url : 'cxgl_cpye.app?d ...
随机推荐
- 教程3 -如何与dotmemory内存优化交通
在本教程中,我们将看到如何使用dotmemory优化你的应用程序的内存使用情况. 我们所说的什么“优化内存使用”?像在任何操作系统的过程中,垃圾收集(GC)消耗系统资源.逻辑很简单:更多的藏品GC已作 ...
- golang 二维切片
初始化: res := make([][length]int, length), 例如: res := make([][2]int, 10) fmt.Println(res) 输出: [[0 0] [ ...
- gdb调试工具学习
GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比 ...
- 洛谷 题解 P2119【魔法阵】
很好的一道数学推导题 45分做法 \(O(N^4)\) 暴力枚举四个材料 55分做法 从第一个约束条件可得到所有可行答案都是单调递增的,所以可以排序一遍,减少枚举量,可以拿到55分 100分做法 首先 ...
- poj1556 The Doors(叉积判断线段相交)
题目链接:https://vjudge.net/problem/POJ-1556 题意:在一个矩形内,起点(0,5)和终点(10,5)是固定的,中间有n个道墙(n<=18),每道墙有两个門,求起 ...
- Gradle DSL Walle渠道包后安装启动APP
DSL(Domain-Specific Language) Gradle 是一个编译打包工具,但实际上它也是一个编程框架. Task 是 Gradle 中的一种数据类型,它代表了一些要执行或者要干的工 ...
- [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具
linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...
- Java操作Excle(基于Poi)
有一次有个同事问我会不会有java操作Excle,回答当然是不会了!感觉被嘲讽了,于是开始寻找度娘,找到个小例子,结果越写越有意思,最后就成就了这个工具类. import java.io.Buffer ...
- 计算机网络(TCP/IP)
概述:网络协议通常分不同的层次进行开发,每一层分别不同的通信功能.TCP/IP通常分为4层协议系统. 1.链路层,有时也称为数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网 ...
- django类视图的使用
1 类视图引入 以函数的方式定义的视图称为函数视图,函数视图便于理解. 但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳 ...