请求重命名分配

用户模式显示驱动程序应请求视频内存管理器重命名与图面关联的分配时,当应用程序指示放弃图面的内容作为锁定图面的请求的一部分 (例如顶点缓冲区) 。 Microsoft Direct3D 运行时传递 Discard 位字段标志以指示它不再需要图面的当前内容。 如果保存图面内容的当前分配正忙,驱动程序可以请求视频内存管理器分配新的分配来处理锁定请求,而不是在当前分配变为空闲状态之前停止应用程序线程。

用户模式显示驱动程序请求在调用 pfnLockCb 函数时,当驱动程序设置 D3DDDICB_LOCKFLAGS 结构的 Discard 成员时,视频内存管理器将重命名分配。 视频内存管理器根据分配当前是否繁忙以及当前内存状况确定是应重命名分配还是应导致应用程序停止,直到分配处于空闲状态。 对于要重命名的每个分配,视频内存管理器会维护一个分配列表,这些分配将连续用于锁定分配。 每次应用程序放弃分配内容时,视频内存管理器都会循环访问列表。 列表的长度取决于应用程序要求和内存压力。 视频内存管理器尝试将列表保留足够长的时间,以避免锁定请求上的应用程序线程停滞。 但是,在内存压力下,视频内存管理器可以剪裁列表以避免造成额外的内存压力。

若要对分配的重命名列表的长度施加限制,驱动程序会在创建分配时设置DXGK_ALLOCATIONINFO结构的 MaximumRenamingListLength 成员。 如果驱动程序将 MaximumRenamingListLength 设置为非零值,则视频内存管理器将确定重命名列表的适当长度,而不会超过驱动程序施加的限制。 如果驱动程序将 MaximumRenamingListLength 设置为 0,则内存管理器可以将重命名列表的大小增加到提高性能所需的任何大小。

请注意,当用户模式显示驱动程序设置 D3DDDICB_LOCKFLAGSDiscard 成员时,视频内存管理器不会调用显示微型端口驱动程序来为原始分配分配额外的分配。 视频内存管理器使用原始分配的创建参数创建所有额外的分配。 从显示微型端口驱动程序的角度来看,相同的分配在可能的多个同时段位置进行分页。