Método ID3D12Device::GetCopyableFootprints (d3d12.h)
Obtiene un diseño de recursos que se puede copiar. Ayuda al relleno de la aplicación D3D12_PLACED_SUBRESOURCE_FOOTPRINT y D3D12_SUBRESOURCE_FOOTPRINT cuando se coloca espacio en montones de carga.
Sintaxis
void GetCopyableFootprints(
[in] const D3D12_RESOURCE_DESC *pResourceDesc,
[in] UINT FirstSubresource,
[in] UINT NumSubresources,
UINT64 BaseOffset,
[out, optional] D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
[out, optional] UINT *pNumRows,
[out, optional] UINT64 *pRowSizeInBytes,
[out, optional] UINT64 *pTotalBytes
);
Parámetros
[in] pResourceDesc
Tipo: const D3D12_RESOURCE_DESC*
Descripción del recurso, como puntero a una estructura de D3D12_RESOURCE_DESC .
[in] FirstSubresource
Tipo: UINT
Índice del primer subrecurso del recurso. El intervalo de valores válidos es de 0 a D3D12_REQ_SUBRESOURCES.
[in] NumSubresources
Tipo: UINT
Número de subrecursos del recurso. El intervalo de valores válidos es de 0 a (D3D12_REQ_SUBRESOURCES - FirstSubresource).
BaseOffset
Tipo: UINT64
Desplazamiento, en bytes, al recurso.
[out, optional] pLayouts
Tipo: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
Puntero a una matriz (de longitud NumSubresources) de D3D12_PLACED_SUBRESOURCE_FOOTPRINT estructuras, que se rellenarán con la descripción y colocación de cada subrecurso.
[out, optional] pNumRows
Tipo: UINT*
Puntero a una matriz (de longitud NumSubresources) de variables de enteros, que se rellenarán con el número de filas de cada subrecurso.
[out, optional] pRowSizeInBytes
Tipo: UINT64*
Puntero a una matriz (de longitud NumSubresources) de variables enteras, cada entrada que se va a rellenar con el tamaño sin rellenar en bytes de una fila, de cada subrecurso.
Por ejemplo, si un recurso Texture2D tiene un ancho de 32 bytes por píxel de 4,
a continuación, pRowSizeInBytes devuelve 128.
pRowSizeInBytes no debe confundirse con el tono de fila, ya que examinar pLayouts y obtener el tono de fila de que le dará 256 a medida que está alineado con D3D12_TEXTURE_DATA_PITCH_ALIGNMENT.
[out, optional] pTotalBytes
Tipo: UINT64*
Puntero a una variable de entero, que se va a rellenar con el tamaño total, en bytes.
Valor devuelto
None
Observaciones
Esta rutina ayuda a la aplicación a rellenar D3D12_PLACED_SUBRESOURCE_FOOTPRINT y D3D12_SUBRESOURCE_FOOTPRINT estructuras, cuando se coloca espacio en montones de carga. Las estructuras resultantes son independientes del adaptador de GPU, lo que significa que los valores no variarán de un adaptador de GPU a otro. GetCopyableFootprints usa detalles especificados sobre formatos de recursos, diseños de textura y requisitos de alineación (de la estructura D3D12_RESOURCE_DESC ) para rellenar las estructuras de subrecursos. Las aplicaciones tienen acceso a todos estos detalles, por lo que este método, o una variación, se pueden escribir como parte de la aplicación.
Ejemplos
El ejemplo D3D12Multithreading usa ID3D12Device::GetCopyableFootprints de la siguiente manera:
// Returns required size of a buffer to be used for data upload
inline UINT64 GetRequiredIntermediateSize(
_In_ ID3D12Resource* pDestinationResource,
_In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
{
D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
UINT64 RequiredSize = 0;
ID3D12Device* pDevice;
pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize);
pDevice->Release();
return RequiredSize;
}
Consulte el código de ejemplo en la referencia de D3D12.
Requisitos
Plataforma de destino | Windows |
Encabezado | d3d12.h |
Library | D3d12.lib |
Archivo DLL | D3d12.dll |