Direct3D 12 尝鲜(二): Fence

(转载请注明出处)

正如上节末尾所说, 出现了运行时错误:

D3D12 ERROR: ID3D12CommandAllocator::Reset: A command allocator is being reset before previous executions associated with the allocator have completed. [ EXECUTION ERROR #548: COMMAND_ALLOCATOR_SYNC]

就是说要在相关执行完成后才能重置, 在自己的第一印象中, 认为提交呈现(Present)后, 所有的操纵就完成了, 但这样似乎不是这样的, 微软在这里有提到:

Waiting for frame rendering is probably the coarsest way to be certain that the GPU has finished. At a finer grain, you can again use fences

就是说, 等待帧渲染完毕就认为GPU工作完毕了, 这种做法不够好, 最好使用Fence:

好了, 篱笆来了, 路障来了, 微软你不再来个钉刺带?╮( ̄▽ ̄)╭



Fence对应的接口就是ID3D12Fence了,可以利用ID3D12Device::CreateFence创建这个接口, 具体代码就不累述了, 很简单.

这个Fence是以帧为单位的, 可以等待所有针对这一帧的命令.利用ID3D12Fence::SetEventOnCompletionID3D12CommandQueue::Signal进行信号操作, 完了之后等待即可, 以帧为单位。

不过还有个ID3D12Fence::Signal, 看来有可能ID3D12CommandQueue::Signal会调用这个方法, 否则这个Fence没有能与命令绑定的方法.

所以大致渲染流程就是:

  1. Fence -> SetEventOnCompletion
  2. 执行命令
  3. 提交呈现
  4. Queue -> Signal
  5. WaitForXXXXXXXObject


结合上次, 这次就很简单了. 还有就是我试了下将3放在5后面, 也(貌似?)没问题, 不过根据微软的表述, 还是放在Signal前面.

所附代码下载:

点击这里


时间: 2024-08-21 22:14:36

Direct3D 12 尝鲜(二): Fence的相关文章

Direct3D 12 尝鲜(四): 旋转的彩色立方体

(转载请注明出处) 有点时间没更新了,原因是找了一个多星期的bug结果发现是少了一次加法运算.... 不过反正没人看也就没影响啦!_(:3」∠)_ 这次的目的是做一个旋转的彩色立方体: 这是自己在学D3D11的时候做过的一个例子,现在搬到D3D12上, 这次增加的内容有: 常量缓存 深度缓存 顶点/索引缓存 常量缓存, 常量缓存可以放一些GPU只读的数据, 这里就是存放的是转换矩阵,D3D12中,常量缓存是以256字节对齐的(D3D12_CONSTANT_BUFFER_DATA_PLACEMEN

Direct3D 12 尝鲜(五): SDK 更新

(转载请注明出处) 又是一个月, 微软在Build2015中公布了不少关于Win10的新闻, 又在N卡公布的支持DX12显卡中看到了我的垃圾显卡(GT640M LE)居然在支持范围,高高兴兴地直接换物理机安装上Win10, 升级了SDK, VS2015变成了RC版. 不过失望了是显卡支持的仅仅是D3D12 level11.0, 不能用level12.0,不知道会不会更新支持. Win10SDK也更新了, 我们在意的自然是D3D12部分. 对于目前, 改变如下: 1. Helper类/函数 被分离

Direct3D 12 尝鲜: 基本呈现

(转载请注明出处) 请叫我挖坑狂魔_(:3」∠)_ 微软前几天发布了Win10的开发工具,希望使用的童鞋可以加入windows insider计划 进行下载. 下面是我的环境: Windows 10 Technical Preview Build 10041 Visual Studio 2015 CTP 6 Visual Studio Tools for Windows 10 当然,使用的是虚拟机. D3D12文档可以在官方文档里面进行查看,里面有编程向导与API文档. 不过, 这个文档也是初步

二、大数据生态圈尝鲜

Title: 二.大数据生态圈尝鲜 Author: Martin Date: 2016-02-24 18:00 Summary: 先通过几张图对大数据的生态圈有个宏观的认知, 搞清楚有哪些知识点需要掌握, 这些知识点后面都会详细讲解. 技术生态圈: hadoop生态圈: spark生态圈: 企业生态圈: 来自为知笔记(Wiz)

15.EVE-NG小众镜像,助力尝鲜!

文章列表(关注微信公众号EmulatedLab,及时获取文章以及下载链接) 1.EVE-NG介绍(EVE-NG最好用的模拟器,仿真环境时代来临!) 2.EVE-NG安装过程介绍 3.EVE-NG导入Dynamips和IOL 4.EVE-NG导入QEMU镜像 5.EVE-NG关联SecureCRT,VNC,Wireshark 6.EVE-NG网卡桥接,带您走进更高级的实验 7.EVE-NG硬盘扩容,存储海量镜像 8.EVE-NG定制个人镜像,脚本快速导入 9.EVE-NG容纳H3C.Huawei,

【响应式】foundation栅格布局的“尝鲜”与“填坑”

提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙初步一下foundation的灵活和强大 何为"踩坑"?就是我把我使用的时候踩过的坑给标个记号,这样大伙用的时候就可以"绕道而行"啦! 没错今天我这篇文章讲的就是北方酱左手边的那个看起来温(diao)文(de)尔(yi)雅(bi)的山羊先生:foundation!: 文章主

屌丝就爱尝鲜头——java8再判断

这节,我们来通过具体的实例来看看Java8的具体用法. 首当其冲,就是lambda用法. 这里的案例,就是用lambda来实现runnable接口,我们知道以前用匿名内部类的方式来实现runnable接口,这种方法晦涩难懂,用lambda表达式实现以后,这样的代码清爽了不少.上两种对比的代码: public static void main(String[] args) { new Runnable() { public void run() { System.out.println("这是匿名

屌丝就爱尝鲜头——java8总结晒一晒

前两节讨论了那么多,这节就是两个议题,讨论了新增的日期的api,再说一说我的Java8的一些心得体会了. 首先,我们必须要搞清楚Java 8 为什么要增加新的日期的api,这是由于老的日期api非常的繁琐,使用起来非常不方便,Java作者奉行这变者通不变者死的原则,于是增加了这些api.下面,我们总点介绍这几个类--LocalDate类.LocalTime类.LocalDateTime类.DateTimeFormatter类,zoneDate类.一个个来看: Ⅰ.LocalDate类--返回日期

屌丝就爱尝鲜头——java8初体验

Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分别是Java SE8.Java SE Emebbled 8.Java ME8. Java SE8较以往的系统增强的功能有: ①增强了对集合式操作语言--lambda表达式的支持,"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演