D3DLOCK的用法分析

本文探讨了Direct3D程序中资源锁定的重要性及其对性能的影响。重点分析了D3DLOCK_DISCARD和D3DLOCK_NOOVERWRITE两个标志位的作用,前者允许设备丢弃旧数据以提高效率;后者允许CPU和GPU并行工作,从而实现更高效的资源利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Direct3D 程序中,避免不了对已有的资源进行修改,为了保证安全,就必须对资源Lock。不合理的LOCK会严重影响程序性能,一般LOCK需要等待COMMAND BUFFER前面的绘制指令全部执行完毕才能返回,否则很可能修改正在使用的资源,从LOCK返回到修改完毕UNLOCK这段时间GPU全部处于空闲状态,没有合理使用GPU和CPU的并行性。
。针对不同需要,可对Lock修饰如下的Flag:
D3DLOCK_DISCARD
D3DLOCK_DONOTWAIT
D3DLOCK_NO_DIRTY_UPDATE
D3DLOCK_NOOVERWRITE
D3DLOCK_NOSYSLOCK
D3DLOCK_READONLY


目前,只对3DLOCK_DISCARD和D3DLOCK_NOOVERWRITE的用法进行分析。
D3DLOCK_DISCARD,该标识通知设备丢弃旧的数据而返回新的指针。这对性能有好处,因为设备在读取旧的数据时不必暂停管线,即CPU LOCK无需等待GPU使用资源完毕,才能继续操作图形资源。
(注意:只适用于动态缓冲区。The application discards all memory within the locked region. For vertex and index buffers, the entire buffer will be discarded. This option is only valid when the resource is created with dynamic usage)

D3DLOCK_NOOVERWRITE,表示CPU只更新顶点缓存中的部分数据(没有提交给dp的数据),不像默认参数0那样需要等待绘制结束。在CPU写入的同时,GPU可以并行的对其他部分的顶点值进行DMA等操作,所以可以保证gpu和cpu协同工作,没有idle产生而高效。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值