zoukankan      html  css  js  c++  java
  • memory management DX11

    dx12 

    https://msdn.microsoft.com/en-us/library/windows/desktop/dn508285(v=vs.85).aspx

    Map with D3D11_MAP_WRITE_DISCARD, the runtime returns a pointer to a new region of memory instead of the old buffer data.

    This allows the GPU to continue using the old data while the app places data in the new buffer.

    No additional memory management is required in the app; the old buffer is reused or destroyed automatically when the GPU is finished with it.

    好神奇

    Note  When you map a buffer with D3D11_MAP_WRITE_DISCARD, the runtime always discards the entire buffer.

    You can't preserve info in unmapped areas of the buffer by specifying a nonzero offset or limited size field.

    When you call Map on a static vertex buffer while the GPU is using the buffer, you get a significant performance penalty. In this situation,

     Map must wait until the GPU is finished reading vertex or index data from the buffer before Map can return to the calling app, which causes a significant delay.

    Calling Map and then rendering from a static buffer several times per frame also prevents the GPU from buffering rendering commands

    because it must finish commands before returning the map pointer.

    Without buffered commands, the GPU remains idle until after the app is finished filling the vertex buffer or index buffer and issues a rendering command.

    D3D11_USAGE_IMMUTABLE is well-suited to data such as textures because such data is typically read into memory from some file format.

    Therefore, when you create a texture with D3D11_USAGE_IMMUTABLE, the GPU directly reads that texture into memory.

    =============

    shit原先那个页面被更新了。。。

    https://docs.microsoft.com/zh-cn/windows/desktop/api/d3d11/ne-d3d11-d3d11_usage

    https://docs.microsoft.com/en-us/windows/desktop/api/d3d11/ne-d3d11-d3d11_map

    ====================

    兜兜转转 又回来继续弄这个

    先捋一下dx11

    map是为了可以拿到这块memory的地址 来操作里面的内容

    如果memory类型用static 就需要gpu等cpu用完再用 hang在那里 很慢 所以memory类型要选dynamic

    这样显卡会自己处理这些事情不会hang在那里等gpu用完再用 处理的方式取决于map type

    D3D11_MAP_WRITE_DISCARD --如果是write discard,这时 如果gpu在用cpu就直接开一块新的往里写,所以里面的内容是未定义的。旧内容discard了

    D3D11_USAGE_DEFAULT         GPU读写--默认的GPU资源

    D3D11_USAGE_IMMUTABLE GPU读   CPU不能操作---不变

    D3D11_USAGE_DYNAMIC         CPU写 GPU读  map出来

    D3D11_USAGE_STAGING         GPUcopy to CPU --save GPU和CPU读写

    ================================

    https://docs.microsoft.com/en-us/windows/desktop/direct3d12/memory-management-strategies

    下面写dx12了

    有三种

    committed

    placed

    reserved

    如果cpu要写资源 不会像dx11 的write discard那样driver管理资源,就等于只有NO_OVERWRITE flag需要自己管理资源

    保证GPU要用的资源没有被cpu写坏 比如加fence 用uploading resorces

    就是每份gpu要用的数据cpu copy一份出来操作 等于手动 write discard

    我现在用的fence就让他hang在那里了,dynamic的map unmap肯定不能这样,这样太慢了 但应该是可以用的

    https://docs.microsoft.com/en-us/windows/desktop/direct3d12/uploading-resources

  • 相关阅读:
    kettle7.0数据库迁移(MySQL迁移到Postgresql,迁移过程中自动创建表结构)
    正向代理与反向代理区别
    MySQL存储引擎相关知识点
    设计模式-装饰器模式
    设计模式-策略模式
    算法—数据结构学习笔记(二)栈
    Spring Boot2.0学习笔记(一)
    关联容器——map
    迭代器
    C风格字符串
  • 原文地址:https://www.cnblogs.com/minggoddess/p/8821510.html
Copyright © 2011-2022 走看看