获取此适配器上资源集合所需的内存大小和对齐方式。
Syntax
D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
[in] UINT visibleMask,
[in] UINT numResourceDescs,
[in] const D3D12_RESOURCE_DESC *pResourceDescs
);
参数
[in] visibleMask
类型: UINT
对于单 GPU作,请将此项设置为零。 如果有多个 GPU 节点,则设置位以标识节点(设备的物理适配器)。 掩码中的每个位对应于单个节点。 另请参阅 多适配器系统。
[in] numResourceDescs
类型: UINT
pResourceDescs 数组中的资源描述符数。
[in] pResourceDescs
类型: const D3D12_RESOURCE_DESC*
描述要获取相关信息的资源的 D3D12_RESOURCE_DESC 结构的数组。
返回值
类型: D3D12_RESOURCE_ALLOCATION_INFO
D3D12_RESOURCE_ALLOCATION_INFO结构,提供有关为指定资源数组分配的视频内存的信息。
如果发生错误, D3D12_RESOURCE_ALLOCATION_INFO::SizeInBytes 等于 UINT64_MAX。
注解
使用 CreatePlacedResource 时,应用程序必须使用 GetResourceAllocationInfo 来了解纹理资源的大小和对齐特征。 此方法的结果因特定适配器而异,必须被视为此适配器和驱动程序版本的唯一。
应用程序无法使用 GetResourceAllocationInfo 的输出来了解纹理的打包 mip 属性。 若要了解纹理的打包 mip 属性,应用程序必须使用 GetResourceTiling。
纹理资源大小与 GetResourceTiling 返回的信息大相径庭,因为某些适配器体系结构为纹理分配额外的内存,以减少常见呈现方案中的有效带宽。 这甚至包括对其纹理布局有约束或具有标准化纹理布局的纹理。 使用 CreateReservedResource 和 UpdateTileMappings 的应用程序无法稀疏映射或重新映射该额外内存,因此 GetResourceTiling 不会报告该内存。
当不使用严格对齐时,应用程序可以使用 GetResourceAllocationInfo 获取缓冲区资源(D3D12_RESOURCE_DIMENSION_BUFFER)。 未紧密对齐的缓冲区在所有适配器上的大小相同,这只是大于或等于 D3D12_RESOURCE_DESC::Width 的 64KB 的最小倍数。
传入多个资源说明时,将使用用于计算结构大小和对齐方式的C++算法。 例如,一个三元素数组,其中包含两个小 64KB 对齐的资源和一个小 4MB 对齐的资源,根据数组的顺序报告不同的大小。 如果 4MB 对齐的资源位于中间,则生成的 大小 为 12MB。 否则,生成的 大小 为 8MB。 返回的 Alignment 始终为 4MB,因为它是资源数组中所有对齐方式的超集。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | Windows操作系统 |
| Header | d3d12.h |
| Library | D3D12.lib |
| DLL | D3D12.dll |