ID3D11DeviceContext2::ResizeTilePool 方法 (d3d11_2.h)
调整磁贴池的大小。
语法
HRESULT ResizeTilePool(
[in] ID3D11Buffer *pTilePool,
[in] UINT64 NewSizeInBytes
);
参数
[in] pTilePool
类型: ID3D11Buffer*
指向 ID3D11Buffer 的指针,用于调整磁贴池的大小。
[in] NewSizeInBytes
类型: UINT64
磁贴池的新大小(以字节为单位)。 大小必须是 64 KB 或 0 的倍数。
返回值
类型: HRESULT
如果成功,则返回S_OK;否则, 返回下列值之一:
- 如果新的磁贴池大小不是 64 KB 或 0 的倍数,则返回 E_INVALIDARG 。
- 如果调用导致驱动程序必须为新的页表映射分配空间,但内存不足,则返回 E_OUTOFMEMORY 。
- 如果视频卡已实际从系统中删除,或者视频卡的驱动程序升级,则返回DXGI_ERROR_DEVICE_REMOVED。
注解
ResizeTilePool 增加或减小磁贴池的大小,具体取决于应用是否需要为映射到它的平铺资源增加或减少工作集。 应用可以为新的平铺资源分配额外的磁贴池,但如果任何单个平铺资源需要的空间超过其磁贴池中最初可用的空间,该应用可以增加资源磁贴池的大小。 平铺资源不能同时映射到多个磁贴池。
增加磁贴池的大小时,驱动程序通过一个或多个新分配将其他磁贴添加到磁贴池的末尾;你的应用无法检测到新分配的细分。 磁贴池中的现有内存保持不变,到该内存的现有平铺资源映射保持不变。
减小磁贴池的大小时,会从末尾删除磁贴, (这甚至低于初始分配大小(降至 0) )。 这意味着新映射不能超过新大小。 但是,通过新大小的空间的现有映射将保持不变并且可供使用。 只要映射到用于磁贴池内存的分配的任何部分,内存就保持活动状态。 如果在减少后,由于磁贴映射指向该内存而使一些内存保持活动状态,并且磁贴池 (再次增加任何) 量,则先重用现有内存,再进行任何额外的分配,以便为增加的大小提供服务。
为了节省内存,应用不仅必须减少磁贴池,而且必须删除和重新映射超过新的较小磁贴池大小的末尾的现有映射。
减少 (和删除映射) 不一定能立即节省内存。 内存的释放取决于驱动程序对磁贴池的基础分配的粒度。 当磁贴池大小的减小恰好足以使驱动程序分配未使用时,驱动程序可以释放分配。 如果增加磁贴池,然后减小到以前的大小 (并相应地删除和重新映射磁贴映射) ,则很可能节省内存。 但是,如果大小与驱动程序选择的基础分配大小不完全一致,则无法保证此方案。
有关平铺资源的详细信息,请参阅 平铺资源。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8.1 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2012 R2 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | d3d11_2.h |
Library | D3D11.lib |