延迟上下文中的映射

本部分仅适用于 Windows 7 及更高版本以及 Windows 操作系统的 Windows Server 2008 R2 及更高版本。

运行时可以通过调用驱动程序的 ResourceMap 函数) 在延迟上下文中映射动态资源 (,因为 Direct3D 版本 11 API 可确保首次使用映射的动态资源放弃先前的内容。 最佳选择是在连续使用原始动态资源的每个放弃上创建新的动态资源。 需要创建此别名资源,以便允许在延迟上下文时间线中对虚拟动态资源执行的操作不会影响直接上下文时间线中对虚拟动态资源执行的操作。 请记住,延迟上下文只是记录在调用驱动程序的 CommandListExecute 函数期间最终实现的操作。 使用动态资源时,将保留应用程序的原始意图,并将写入组合 GPU 可访问的内存提供给应用程序 (即,内存针对一次性 CPU 上传) 进行优化。

每个资源映射都可以直接提供指向别名资源的指针。 延迟的上下文录制需要额外的负担来实现这种类型的别名。 例如,延迟的上下文录制可能需要为别名纹理创建新视图。 与驱动程序别名的集成是必要的,而且似乎可以这样做。 执行命令列表时, (最后一个本地上下文创建的资源,以满足映射-丢弃调用) 必须替换为支持动态资源的“当前”资源,以直接上下文等方式。

在延迟上下文、映射丢弃调用之后,以及调用驱动程序的 CommandListExecute 函数(其中本地延迟上下文资源最好交换为“当前”资源的即时上下文版本)后,仍必须支持调用驱动程序的 ResourceCopy 函数以将资源复制到动态资源。 不经常使用调用驱动程序的 ResourceCopy 函数和动态资源目标,因此应使用写入时复制机制。 如果调用 的 ResourceCopy 会影响映射丢弃调用后延迟上下文中的动态资源,或者在将命令列表本地资源保存为当前资源的即时上下文上,则应在概念上分配新资源以提供副本的新目标,并且如果操作是 ResourceCopyRegion) ,则必须将旧资源复制到新资源 (。