ID3D12Device::GetResourceAllocationInfo(UINT,UINT,constD3D12_RESOURCE_DESC*) 方法 (d3d12.h)

获取此适配器上资源集合所需的内存大小和对齐方式。

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 返回的信息大相径庭,因为某些适配器体系结构为纹理分配额外的内存,以减少常见呈现方案中的有效带宽。 这甚至包括对其纹理布局有约束或具有标准化纹理布局的纹理。 使用 CreateReservedResourceUpdateTileMappings 的应用程序无法稀疏映射或重新映射该额外内存,因此 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

另请参阅

ID3D12Device