Método ID3D12Resource::WriteToSubresource (d3d12.h)
Usa la CPU para copiar datos en un subrecurso, lo que permite a la CPU modificar el contenido de la mayoría de las texturas con diseños no definidos.
Sintaxis
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
Parámetros
DstSubresource
Tipo: UINT
Especifica el índice del subrecurso.
[in, optional] pDstBox
Tipo: const D3D12_BOX*
Puntero a un cuadro que define la parte del subrecurso de destino en el que se van a copiar los datos del recurso. Si es NULL, los datos se escriben en el subrecurso de destino sin desplazamiento. Las dimensiones del origen deben ajustarse al destino (consulte D3D12_BOX).
Un cuadro vacío da como resultado una operación sin operación. Un cuadro está vacío si el valor superior es mayor o igual que el valor inferior, o el valor izquierdo es mayor o igual que el valor derecho, o el valor frontal es mayor o igual que el valor atrás. Cuando el cuadro está vacío, este método no realiza ninguna operación.
[in] pSrcData
Tipo: const void*
Puntero a los datos de origen en memoria.
SrcRowPitch
Tipo: UINT
Distancia de una fila de datos de origen a la fila siguiente.
SrcDepthPitch
Tipo: UINT
Distancia desde un segmento de profundidad de datos de origen hasta el siguiente.
Valor devuelto
Tipo: HRESULT
Este método devuelve uno de los códigos de retorno de Direct3D 12.
Comentarios
El recurso debe asignarse primero mediante Map. Las texturas deben estar en el estado D3D12_RESOURCE_STATE_COMMON para el acceso a la CPU a través de WriteToSubresource y ReadFromSubresource para que sea legal; pero los búferes no lo hacen.
Para mejorar la eficacia, asegúrese de que los límites y la alineación de las extensiones dentro del cuadro son ( 64 /[bytes por píxel] ) píxeles horizontalmente. Los límites verticales y la alineación deben ser 2 filas, excepto cuando se usan formatos de 1 byte por píxel, en cuyo caso se recomiendan 4 filas. Los segmentos de profundidad única por llamada se controlan de forma eficaz. Se recomienda, pero no es necesario proporcionar punteros y pasos que estén alineados con 128 bytes.
Al escribir en niveles de mapa mip secundarios, se recomienda usar un ancho y un alto mayores que los descritos anteriormente. Esto se debe a que los niveles de mapas mip pequeños pueden almacenarse realmente dentro de un bloque de memoria mayor, con una cantidad opaca de desplazamiento que puede interferir con la alineación con las líneas de caché.
WriteToSubresource y ReadFromSubresource permiten optimizaciones casi de copia cero para adaptadores de UMA, pero pueden afectar prohibitivamente a la eficacia de adaptadores NUMA discretos, ya que los datos de textura no pueden residir en la memoria de vídeo local. Las aplicaciones típicas deben mantenerse en técnicas de carga discretas, a menos que reconozcan que la arquitectura del adaptador es UMA. Para obtener más información sobre la carga, consulte CopyTextureRegion y para obtener más detalles sobre UMA, consulte D3D12_FEATURE_DATA_ARCHITECTURE.
En los sistemas UMA, esta rutina se puede usar para minimizar el costo de la copia de memoria a través de la optimización de bucles conocida como mosaico de bucles. Al dividir la carga en chucks que encajan cómodamente en la memoria caché de CPU, el ancho de banda efectivo entre la CPU y la memoria principal logra más estrechamente los máximos teóricos.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | d3d12.h |
Library | D3d12.lib |
Archivo DLL | D3d12.dll |