Freigeben über


ID3D12Device::GetCopyableFootprints-Methode (d3d12.h)

Ruft ein Ressourcenlayout ab, das kopiert werden kann. Unterstützt die App beim Ausfüllen von D3D12_PLACED_SUBRESOURCE_FOOTPRINT und D3D12_SUBRESOURCE_FOOTPRINT beim Unterzuweisen von Speicherplatz in Upload heaps.

Syntax

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
);

Parameters

[in] pResourceDesc

Typ: const D3D12_RESOURCE_DESC*

Eine Beschreibung der Ressource als Zeiger auf eine D3D12_RESOURCE_DESC Struktur.

[in] FirstSubresource

Typ: UINT

Index der ersten Unterressource in der Ressource. Der Bereich gültiger Werte ist 0 bis D3D12_REQ_SUBRESOURCES.

[in] NumSubresources

Typ: UINT

Die Anzahl der Unterressourcen in der Ressource. Der Bereich gültiger Werte beträgt 0 bis (D3D12_REQ_SUBRESOURCES - FirstSubresource).

BaseOffset

Typ: UINT64

Der Offset in Byte, der dem Offset der einzelnen D3D12_PLACED_SUBRESOURCE_FOOTPRINT im pLayouts-Array hinzugefügt wird.

[out, optional] pLayouts

Typ: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*

Ein Zeiger auf ein Array (der Länge NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT Strukturen, das mit der Beschreibung und Platzierung jeder Unterressource gefüllt werden soll.

[out, optional] pNumRows

Typ: UINT*

Ein Zeiger auf ein Array (der Länge NumSubresources) von ganzzahligen Variablen, der mit der Anzahl der Zeilen für jede Unterressource gefüllt werden soll.

[out, optional] pRowSizeInBytes

Typ: UINT64*

Ein Zeiger auf ein Array (der Länge NumSubresources) von Ganzzahlvariablen, jeder Eintrag, der mit der nicht geblockten Größe in Byte einer Zeile gefüllt werden soll, jeder Unterressource.

Wenn beispielsweise eine Texture2D-Ressource eine Breite von 32 und Bytes pro Pixel 4 aufweist,

dann gibt pRowSizeInBytes 128 zurück.

pRowSizeInBytes sollten nicht mit Zeilenabstand verwechselt werden, da pLayouts untersucht und der Zeilenabstand von dieser 256 erhalten wird, da sie an D3D12_TEXTURE_DATA_PITCH_ALIGNMENT ausgerichtet ist.

[out, optional] pTotalBytes

Typ: UINT64*

Ein Zeiger auf eine ganzzahlige Variable, die mit der Gesamtgröße in Byte gefüllt werden soll. Wenn pResourceDesc ungültig ist, wird der Wert von pTotalBytes auf UINT64_MAX festgelegt.

Rückgabewert

None

Remarks

Diese Routine unterstützt die Anwendung beim Ausfüllen von D3D12_PLACED_SUBRESOURCE_FOOTPRINT - und D3D12_SUBRESOURCE_FOOTPRINT-Strukturen beim Unterzuweisen von Speicherplatz in Upload-Heaps. Die resultierenden Strukturen sind GPU-Adapteragnostisch, was bedeutet, dass die Werte nicht von einem GPU-Adapter zum nächsten variieren. GetCopyableFootprints verwendet angegebene Details zu Ressourcenformaten, Texturlayouts und Ausrichtungsanforderungen (aus der D3D12_RESOURCE_DESC Struktur), um die Unterressourcenstrukturen auszufüllen. Anwendungen haben Zugriff auf alle diese Details, sodass diese Methode oder eine Variation davon als Teil der App geschrieben werden kann.

Examples

Das D3D12Multithreading-Beispiel verwendet ID3D12Device::GetCopyableFootprints wie folgt:

// 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;
}

Weitere Informationen finden Sie im Beispielcode in der D3D12-Referenz.

Requirements

Requirement Value
Zielplattform Windows
Header d3d12.h
Library D3d12.lib
DLL D3d12.dll

Siehe auch

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device