memory management Vulkan

https://www.youtube.com/watch?v=rXSdDE7NWmA

vulkan/Bifrost

1. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COHERENT_BIT

2. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_CACHED_BIT
3. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COHERENT_BIT | HOST_CACHED_BIT
4. DEVICE_LOCAL_BIT | LAZILY_ALLOCATED_BIT

vulkan/Midgard

1. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COHERENT_BIT

2. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_CACHED_BIT

3. DEVICE_LOCAL_BIT | LAZILY_ALLOCATED_BIT

cache就是cpu cache了 cpu read 用

coherent看下来是cup gpu 同步 选了 硬件会保证它们一致 但是会费电。。。。选这个就不用我们手动copy来 copy去了吧

host就是cpu这边

device是gpu这边

coherent肯定就是cpu gpu都可见了

lazily是 给临时资源的 ontile的资源 不需要开framebuffer

resources: 

Uniform Buffer,Dynamic VB  CPU, GPU 都可见, 频繁write  ---这种通常用nbuffe缓存(gl下 避免同步map 会卡住 避免invalidmap会复制 ghost,vulkan用coherent自动处理了)

Texture, IB,VB,Const Buffer  CPU只写一次 CPU GPU可见----这种资源设置成write only 就不需要cache ,cpu不要读它

Framebuffer  仅GPU可见

CPU读的才要cache 这样的GPU资源很少吧。。。

1. not cached, coherent

   write-only on CPU,为了不污染CPU cache,可以在cpu把小的合到一个大的buffer里给device

2.cached, incoherent

  需要map出来给cpu read的资源 map出来用vkInvalidateMappedRanges

  cpu 写完给gpu用时要调用 vkFlushMappedRanges

  这两步操作都需要driver 维护cpu cahe 在main memory和cpu cache之间

  这会是不少的开销

3.cached, coherent

  此种类型仅Bifrost支持,并且需要cpu 和gpu的芯片组支持一致的协议,如果不支持会用2.cache,incoherent替代

  如果不需要cpu read 就用coherent就可以了 不要用cached

4.lazily

  短暂transient的gpu外不可访问的,仅在tile上的resource

看资料实在太不方便了 以后再看吧

用vulkan 做render to texture 的rt的 memory type 是啥

DEVICE_LOCAL_BIT最合适 但是mali没有可能要落到1

 建议

不变的资源用1

cpu只读资源用1

用1的时候 write update的时候 用memcpy()顺着写

频繁update的buffer要map出来 比如uniform buffer , dynamic vb,map有cpu开销

cpu read要用cache

====

staging

大概是这样一种概念,cpu资源copy一份 gpu用copy的这份

知道两种用途 一种是dx9那时候 这种staging的资源 可以用于恢复device lost 的资源 再copy一次就可以了 感谢jin先生

另一种cpu写入一次的texture 资源 copy一份 给gpu bind srv,cpu就不再用这份资源了

一种类似资源uploading的概念 

=======

https://www.khronos.org/assets/uploads/developers/library/2018-vulkan-devday/03-Memory.pdf

https://gpuopen.com/vulkan-device-memory/

原文地址:https://www.cnblogs.com/minggoddess/p/11777132.html