请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 1918|回复: 2

大牛问个问题 [复制链接]

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2009-3-27
积分
4214
发表于 2016-8-26 01:58:10 |显示全部楼层
你在上次把引擎升级到D3D12的时候说过一个有关 Resource Binding 的事。
我记得当时你说过 DescriptorHeap 在每个 DrawCall 的时候都重新创建,用完释放。
当时是为了解决bug的临时方法,现在是如何解决这个问题的?

这个 DescriptorHeap 每个 CommandList 只能SRV/Sampler一样一个实在不好用,我想知道大牛现在是如何优化的?

我现在的实现是每个 CommandList 把一个 RenderTarget 画完,这就需要这个 CommandList 中所有 DrawCall 用到的 资源必须全部在 Heap 中。
我现在的实现是在 Execute 这个 CommandList 之前先计算所需要的 Heap 大小,如果当前 Heap 够大直接用,如果不够大就删了重建一个够大的,然后把所需要的资源 View CopyDescriptor 过来。

我也了解过别的方法,比如有的说建立一个怒大 Heap(SDK中说Heap中最大可以建立100万个 Descriptor) 把所有加载进来的资源的 View 全都 Create 在其中。但是这种方法无法估计一个场景到底有多少资源,而且还面临着有的资源释放需要标记其空余出来的 View 地方的管理问题。

我想问问大牛对这些问题优化的看法。

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2009-3-27
积分
4214
发表于 2016-8-30 20:08:23 |显示全部楼层
附带再问一个问题,从一个 Heap 拷贝 Descriptor 到另一个 Heap 和直接在一个 Heap 中创建 Descriptor 哪个快?

使用道具 举报

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2009-3-31
积分
14435
发表于 2016-9-11 01:11:34 |显示全部楼层
你看KlayGE的D3D12代码就知道了。

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-9-20 15:26 , Processed in 0.098476 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部