zoukankan      html  css  js  c++  java
  • 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 DontCare action. 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 Clear action. 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 Load action. 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

    一点都不热

  • 相关阅读:
    jQuery源码解析(架构与依赖模块)第二章 核心模块
    jQuery源码解析(架构与依赖模块)第一章 理解架构
    js中运算符的优先级
    JS将时间与时间戳互转
    关于JavaScript scope的一切
    java中继承以及其他相关内容
    java中数组的内容
    关于java中的引用数据类型
    关于java的源文件结构以及常用的包
    Java语言的基础内容
  • 原文地址:https://www.cnblogs.com/minggoddess/p/10950349.html
Copyright © 2011-2022 走看看