【DirectX12笔记】DX12 Do's And Don'ts暂时理解部分

DX12 Do's And Don'ts

命令提交-命令列表(CommandList)

1.将命令交给CmdList不会开始任何工作,只有调用ExecuteCommandList,将CmdList提交给命令队列后才开始在GPU工作
2.记录命令是CPU密集型操作,CmdList不是线程自由对象,最好将工作均匀分配在各个线程中,一个CmdList只在一个线程中访问(CmdQueue好像是线程安全的)。
3.建立和重置命令列表会产生一定成本,Fence会强制拆分CmdList(用于查询FenceValue?)
4...后面是Bundle的,我暂时对这方面没什么了解

管线状态对象(PSO)

1.PSO最好异步创建【没什么感受】
2.避免运行时的PSO编译,这可能导致停顿
3.尽可能减少PSO之间的状态变化,PSO不一定会映射到GPU上的原子状态变化
我的理解:可能GPU执行的时候PSO还未完全切换完毕,如果状态变化越小(例如Blend、图元类型、光栅化设置)等越小,出问题的可能性越低。
//一堆我理解不了的
4.同一命令队列(CmdQueue)不要再计算(Compute)和图形(Graphics)之间切换,这是很消耗性能的行为
5.不要打开/关闭曲面细分,这也是消耗性能的行为

根签名(Root Signature)

1.CBV不需要用描述符表索引,这意味着不需要描述符堆(Descriptor Heap)来储存。
2.CBV、SRV、UAV值缓存在CPU中,当检测到更改时再更改根签名中的内容(龙书中是用Dirty来对三缓冲结构程序进行常量缓冲区更新)
3.限制CBV、SRV、UAV的着色器可见阶段
体现在slotRootParameter的InitAsDescriptorTable方法第三个参数设置可见性,本人是在编译着色器后,用反射检查着色器可见阶段。
4.最小化根签名更改次数
原文提到,问题不在于根签名(RS)的更改,而是在更改之后,通常要初始化根签名。
由于不确定每个着色器的根签名是否一致,每个物体在渲染之前都要设置一下根签名,而更改RS同时也意味着CommandList的PSO要切换
【不同Shader的RS可能一致吗?或许有可能,但我感觉机会很小,根签名与对各View的引用顺序、着色器可见性有关,或许对着色器约定俗称,前三个是PerPass、PerObject、PerMaterial的CBV,再设置其他数据,能提高不同Shader的RS相同的几率,但这依旧只是一个方案】
以后在渲染前,可能要对物体渲染次序做排序或归类,用同样Shader的物体同时渲染。
5.不要将更新频率不同的CBV放到一个描述符表中
我的理解是:这里提到,在Haswell这种平台下,更新描述符表中一个CBV会导致表中所有的CBV进行更新。
6.不要再同一着色器阶段同时设置访问和拒绝标志,否则,除非访问标志是D3D12_SHADER_VISIBILITY_ALL,拒绝(deny)标志是不会生效的。
这个……属于编程失误了吧?
7.不要将常量SRV、UAV直接设置在RS中,除非有很多使用它们的绘制(draw)、调度(dispatch)
看龙书以及别人的代码,SRV一般都是用描述符表存的
8.更改RS后,不要使资源绑定保持未定义状态,切换RS会删除、清除之前根签名的资源绑定。

分配器(Allocator)

1.重用命令分配器(CmdAlloc)和命令列表(CmdList),每次绘制调用数量最好相似,预热后分配速度会更快。
这样的话,命令列表和分配器最好不要池化了。
2.一帧调用之前,分配器先调用Reset方法,否则分配器会持续增长,直到耗尽内存
3.不要总是创建分配器,而是重用分配器
4.不要释放(Release)/重用(Reset)仍在使用的分配器,这是非法的(一般用围栏值确定当前帧渲染完毕再Reset)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342