D3DLOCK详解

转自:http://blog.csdn.net/blues1021/article/details/41408419

翻译自:http://msdn.microsoft.com/zh-cn/library/windows/desktop/bb172568(v=vs.85).aspx

一个或者多个组合的锁定选项,用来描述资源锁定类型的表现。

D3DLOCK_DISCARD:

使用方式会强制为:D3DUSAGE_DYNAMIC。

应用程序将会丢弃锁定区域内的所有内存。CPU不会因锁定而等待,可以有效的提高程序性能。对于顶点和索引缓存,整个缓存都会锁定使用后被丢弃。这个选项只有对用

D3DUSAGE_DYNAMIC使用方式创建的资源是合法的。

不合理的LOCK会严重影响程序性能,因为一般LOCK需要等待COMMANDBUFFER前面的绘制指令全部执行完毕才能返回,

否则很可能修改正在使用的资源,从LOCK返回到修改完毕UNLOCK这段时间GPU全部处于空闲状态,没有合理使用GPU和CPU的并行性,

DX8.0引进了一个新的LOCK标志D3DLOCK_DISCARD,表示不会读取资源,只会全写资源,这样驱动和RUNTIME配合来了个瞒天过海,

立即返回给应用程序另外块VM地址指针,而原指针在本次UNLOCK之后被丢弃不再使用,这样CPU LOCK无需等待GPU使用资源完毕,

能继续操作图形资源(顶点缓冲和索引缓冲),这技术叫VB IB换名(renaming)。

D3DLOCK_DONOTWAIT:

当显卡驱动没有能够马上锁定表面的时候,允许应用程序返回CPU循环。如果没有能够马上锁定,将会返回

D3DERR_WASSTILLDRAWING。这个锁定只能用在用CreateOffscreenPlainSurface, CreateRenderTarget,

or CreateDepthStencilSurface创建的表面,这个标记通常可以被后台缓存使用.

D3DLOCK_NO_DIRTY_UPDATE:

默认情况下锁定一个资源会添加脏区域,这个选项避免该资源的这个脏区域状态的任何改变。应用程序可以使用这个选项,

当它被锁定,在这个区域有额外的信息需要被更新的时候。也就是不是指定脏区域的才能改变。

D3DLOCK_NOOVERWRITE:

使用方式会强制为:D3DUSAGE_DYNAMIC,可以进行动态更新。

引入这个锁定标记是因为在渲染期间,用其它方式锁定了资源,该资源不能被更新。这个标记可以使用在当应用程序,需要将

资源数据append data附加到末尾的时候。需要说明的是,在这个资源正在使用期间锁定该资源显卡驱动会马上返回;

资源不在使用期间,显卡驱动必须去使用资源,使用完锁定函数才返回。

D3DLOCK_NOSYSLOCK:

默认的显存锁定需要保留一个系统内存的临界区域,保证在锁定期间没有显卡模式的改变会发生。这个选项让系统内存临界区域

不要在锁定期间被保留。

锁定操作室time consuming耗时的,但是可以让系统去做其它的事情,例如响应鼠标的点击。这个选项对于耗时比较长的锁定是

很有用的,例如用软件渲染方式锁定一块后台缓存,不然adversely不利于系统的响应。

D3DLOCK_READONLY:

应用程序不能写这块缓存。这个选项让资源保存在非本地的格式,可以节省解锁时候的再压缩,可以提高锁定解锁效率。可以有效的提高程序的性能。

时间: 2024-08-09 10:29:43

D3DLOCK详解的相关文章

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A

HttpServletResponse和HttpServletRequest详解

HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息.下表是接口HttpServletRequest的常用方法. 说明:HttpServ

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

netstat状态详解

一.生产服务器netstat tcp连接状态................................................................................ 2 1.1生产服务器某个业务LVS负载均衡上连接状态数量............................................... 2 1.2生产服务器某个业务web上连接状态数量...............................................

详解go语言的array和slice 【二】

上一篇  详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量,在操作新slice时,如果新slice的容量大于长度时,添加新元素依然后使源的相应元素改变.这一篇里我会讲解到如何避免这些问题,以及迭代.和做为方法参数方面的知识点. slice的长度和容量设置为同一个值 如果在创建新的slice时我们把

13.Linux键盘按键驱动 (详解)

版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介绍以下几个结构体使用和函数,下面代码中会用到 1)input_dev驱动设备结构体中常用成员如下: struct input_dev { void *private; const char *name; //设备名字 const char *ph