磁贴池调整大小

如果使用 ID3D11DeviceContext2::ResizeTilePool API 来扩展磁贴池,则应用程序需要更多工作集来映射到磁贴池中;如果需要较少的空间,请使用 ID3D11DeviceContext2::ResizeTilePool API 来扩大磁贴池。 应用程序的另一个选项是为新的平铺资源分配其他磁贴池。 但是,如果任何单个平铺资源所需的空间比其平铺池中最初可用的空间多,则增加磁贴池是一个不错的选择。 平铺资源不能同时将映射映射到多个磁贴池。

磁贴池扩大后,显示驱动程序将通过一个或多个新分配空间将额外的磁贴添加到末端。 各个分配空间的细分内容对应用程序不可见。 磁贴池中的现有内存保持不变,到该内存的现有平铺资源映射保持不变。

缩小磁贴池时,将从末端移除磁贴。 磁贴被移除后,空间可能会小于最初的分配空间大小,最小降至 0,这意味着新映射无法通过新大小的空间。 但是,通过新大小的空间的现有映射将保持不变并且可供使用。 只要指向驱动程序用于磁贴池内存的任何部分分配空间的映射保留,显示驱动程序将保留内存。 如果缩小后,部分内存因有对应的磁贴映射而一直保持活动状态,随后再次扩大(任何容量的)磁贴池时,将在进行任何额外分配之前先重用现有内存以提供扩大操作所需的空间大小。

为了能够保存内存,应用程序不仅需要缩小磁贴池,还需要移除/重映射通过新的较小磁贴池末端的现有映射。

缩小(和移除映射)操作不一定能立即节约内存。 内存释放取决于显示驱动程序用于磁贴池的基础分配空间的粒度。 如果缩小后恰好能空出显示驱动程序分配空间,则显示驱动程序可释放此空间。 如果磁贴池曾被扩大,则缩小至原有大小(并相应移除/重映射磁贴映射)最有可能实现内存节约,但在大小与显示驱动程序选择的基础分配空间大小不完全一致的情况下无法保证。

映射到磁贴池