处理多个锁
使用 Direct3D 运行时,可以允许顶点缓冲区和索引缓冲区具有多个未完成的锁。 用户模式显示驱动程序必须以 与 Windows 2000 显示驱动程序模型中运行时相同的方式处理多个锁。
用户模式显示驱动程序不得对已锁定的资源调用其 LockAsync 函数失败。 也就是说,在第一次调用其 LockAsync 函数成功锁定该资源后,驱动程序无法对特定资源的 LockAsync 函数执行任何调用。 同样,在首次调用其 Lock 函数成功锁定该资源后,驱动程序不能失败对其锁定特定资源的 Lock 函数的任何调用。 运行时将其对驱动程序的 LockAsync 函数进行的每个调用与对驱动程序的 UnlockAsync 函数的调用相匹配。 运行时还通过调用驱动程序的 Unlock 函数来匹配对驱动程序的 Lock 函数进行的每个调用。
用户模式显示驱动程序无法调用其 UnlockAsync 函数,除非之前调用驱动程序的 LockAsync 函数时,D3DDDIARG_UNLOCKASYNC结构所描述的资源实际上未锁定。 同样,驱动程序不能失败对其 Unlock 函数的调用,除非 D3DDDIARG_UNLOCK 结构描述的资源实际上没有被之前调用驱动程序的 Lock 函数锁定。 在以前未锁定资源的情况下, UnlockAsync 和 Unlock 返回E_INVALIDARG。