dx12 memory management
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
dx12 memory management的更多相关文章
- Memory Management in Open Cascade
Open Cascade中的内存管理 Memory Management in Open Cascade eryar@163.com 一.C++中的内存管理 Memory Management in ...
- Java (JVM) Memory Model – Memory Management in Java
原文地址:http://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java Understanding JV ...
- Objective-C Memory Management
Objective-C Memory Management Using Reference Counting 每一个从NSObject派生的对象都继承了对应的内存管理的行为.这些类的内部存在一个称为r ...
- Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm
目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...
- Android内存管理(2)HUNTING YOUR LEAKS: MEMORY MANAGEMENT IN ANDROID PART 2
from: http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of- ...
- Android内存管理(1)WRANGLING DALVIK: MEMORY MANAGEMENT IN ANDROID PART 1
from : http://www.raizlabs.com/dev/2014/03/wrangling-dalvik-memory-management-in-android-part-1-of-2 ...
- Understanding Memory Management(2)
Understanding Memory Management Memory management is the process of allocating new objects and remov ...
- Java Memory Management(1)
Java Memory Management, with its built-in garbage collection, is one of the language’s finest achiev ...
- ural1037 Memory Management
Memory Management Time limit: 2.0 secondMemory limit: 64 MB Background Don't you know that at school ...
随机推荐
- Linux ssh的使用
1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...
- Page.Response.Buffer与Response.Redirect一起用报错“无法在发送 HTTP 标头之后进行重定向”
Page.Response.Buffer与Response.Redirect一起用报错“无法在发送 HTTP 标头之后进行重定向” 原因还未知..
- 【反演复习计划】【bzoj3529】数表
Orz PoPoQQQ大爷 按照他ppt的解法,这题可以划归到之前的题了OrzOrz 跪wy写的题解(Stealth Assassin)https://www.luogu.org/wiki/show? ...
- sudo cd为什么不能够执行
问题描述 我想要cd到/etc/docker,但是它给我一个权限不够的错误,然后,我想到使用sudo cd /etc/docker时,它告诉我sudo: cd:找不到命令. 于是,郁闷的我就去上网找了 ...
- Java中的标记接口(zz)
1.什么是标记接口? Java中把没有定义任何方法和常量的接口称之为标记接口,我们经常使用的比较多的是“”Serializable“”,这个接口也是没有定义人任何方法和常量的. 2.标记接口的作用? ...
- thinkphp5最美跳转页面
声明下:此教程来自TP官网,如果需要看原文,请点击一下链接 http://www.thinkphp.cn/code/3437.html 先给大家看下效果: 直接撸代码: 第一步:为了增加对移动设备 ...
- 本地配置环境打开项目出现404/本地wampserver配置伪静态以及php.ini配置
本地wamp/phpstudy实现虚拟主机后,出现了500错误看日志看到.htaccess: Invalid command ‘RewriteEngine’, perhaps misspelled o ...
- 最小生成树的Prim算法
构造最小生成树的Prim算法 假设G=(V,E)为一连通网,其中V为网中所有顶点的集合,E为网中所有带权边的集合.设置两个新的集合U和T,其中集合U用于存放G的最小生成树的顶点,集合T用于 ...
- mongodb复制集搭建
注:mongodb当前版本是3.4.3 1.准备三个虚拟机做服务器 192.168.168.129:27017 192.168.168.130:27017 192.168.168.131:27017 ...
- 二维字符数组利用gets()函数输入
举例: ][]; ;i<;i++) gets(a[i]); a是二维字符数组的数组名,相当于一维数组的指针, 所以a[i]就相当于指向第i个数组的指针,类型就相当于char *,相当于字符串.