Metodo ID3D12Resource::WriteToSubresource (d3d12.h)
Usa la CPU per copiare i dati in una sottoresource, consentendo alla CPU di modificare il contenuto della maggior parte delle trame con layout non definiti.
Sintassi
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
Parametri
DstSubresource
Tipo: UINT
Specifica l'indice della sottoresource.
[in, optional] pDstBox
Tipo: const D3D12_BOX*
Puntatore a una casella che definisce la parte della sottoresource di destinazione in cui copiare i dati della risorsa. Se NULL, i dati vengono scritti nella sottoresource di destinazione senza offset. Le dimensioni dell'origine devono adattarsi alla destinazione (vedere D3D12_BOX).
Una casella vuota genera un no-op. Una casella è vuota se il valore superiore è maggiore o uguale al valore inferiore oppure il valore sinistro è maggiore o uguale al valore destro oppure il valore anteriore è maggiore o uguale al valore posteriore. Quando la casella è vuota, questo metodo non esegue alcuna operazione.
[in] pSrcData
Tipo: const void*
Puntatore ai dati di origine in memoria.
SrcRowPitch
Tipo: UINT
Distanza da una riga di dati di origine alla riga successiva.
SrcDepthPitch
Tipo: UINT
Distanza da una sezione approfondita dei dati di origine alla successiva.
Valore restituito
Tipo: HRESULT
Questo metodo restituisce uno dei codici restituiti Direct3D 12.
Commenti
La risorsa deve prima essere mappata usando Map. Le trame devono trovarsi nello stato D3D12_RESOURCE_STATE_COMMON per l'accesso alla CPU tramite WriteToSubresource e ReadFromSubresource per essere legali; ma i buffer non sono.
Per l'efficienza, assicurarsi che i limiti e l'allineamento degli extent all'interno della casella siano ( 64 / [byte per pixel] ) pixel in orizzontale. I limiti verticali e l'allineamento devono essere 2 righe, tranne quando vengono usati formati da 1 byte per pixel, in cui sono consigliate 4 righe. Le sezioni di profondità singole per chiamata vengono gestite in modo efficiente. È consigliabile ma non è necessario fornire puntatori e passi che sono allineati a 128 byte.
Quando si scrive in livelli di mipmap secondari, è consigliabile usare larghezza e altezze maggiori rispetto a quelle descritte in precedenza. Questo perché i piccoli livelli di mipmap possono effettivamente essere archiviati all'interno di un blocco di memoria più grande, con una quantità opaca di offset che può interferire con l'allineamento alle righe della cache.
WriteToSubresource e ReadFromSubresource abilitano ottimizzazioni di copia quasi zero per le schede UMA, ma possono compromettere in modo proibitivo l'efficienza delle schede discrete/NUMA perché i dati della trama non possono risiedere nella memoria video locale. Le applicazioni tipiche devono attenersi a tecniche di caricamento discrete, a meno che non riconoscano l'architettura dell'adattatore è UMA. Per altre informazioni sul caricamento, vedere CopyTextureRegion e per altri dettagli su UMA, vedere D3D12_FEATURE_DATA_ARCHITECTURE.
Nei sistemi UMA, questa routine può essere usata per ridurre al minimo il costo della copia della memoria tramite l'ottimizzazione del ciclo nota come ottimizzazione ciclo. Suddividendo il caricamento in blocchi che si adattano comodamente nella cache della CPU, la larghezza di banda effettiva tra la CPU e la memoria principale raggiunge più strettamente i massimi teorici.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | d3d12.h |
Libreria | D3d12.lib |
DLL | D3d12.dll |