enumeración D3D12_TEXTURE_LAYOUT (d3d12.h)
Especifica las opciones de diseño de textura.
Syntax
typedef enum D3D12_TEXTURE_LAYOUT {
D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;
Constantes
D3D12_TEXTURE_LAYOUT_UNKNOWN Valor: 0 Indica que el diseño es desconocido y es probable que dependa del adaptador. Durante la creación, el controlador elige el diseño más eficaz en función de otras propiedades de recursos, especialmente el tamaño de los recursos y las marcas. Prefiere esta opción a menos que se requiera cierta funcionalidad desde otro diseño de textura. Existen optimizaciones de carga de texturas de copia cero para arquitecturas de UMA; vea ID3D12Resource::WriteToSubresource. |
D3D12_TEXTURE_LAYOUT_ROW_MAJOR Valor: 1 Indica que los datos de la textura se almacenan en orden principal de fila (a veces denominado "orden lineal de tono"). Este diseño de textura localiza los elementos de textura consecutivos de una fila contiguamente en memoria, antes de los elementos de textura de la fila siguiente. Del mismo modo, los elementos de textura consecutivos de una profundidad o segmento de matriz determinados son contiguos en memoria antes de los elementos de textura de la siguiente profundidad o segmento de matriz. El relleno puede existir entre filas y entre segmentos de profundidad o matriz para alinear colecciones de datos. Un paso es la distancia en memoria entre filas, profundidad o segmentos de matriz; e incluye cualquier relleno. Este diseño de textura permite compartir los datos de textura entre varios adaptadores, cuando otros diseños no están disponibles. Se aplican muchas restricciones, ya que este diseño no suele ser eficaz para un uso extenso:
Los búferes se crean con D3D12_TEXTURE_LAYOUT_ROW_MAJOR, ya que los datos de textura principales de fila se pueden ubicar en ellos sin crear un objeto de textura. Esto se usa normalmente para cargar o leer datos de textura, especialmente para adaptadores discretos o NUMA. Sin embargo, también se pueden usar D3D12_TEXTURE_LAYOUT_ROW_MAJOR al serializar datos de textura entre GPU o adaptadores. Para obtener ejemplos de uso con ID3D12GraphicsCommandList::CopyTextureRegion, vea algunos de los temas siguientes: |
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE Valor: 2 Indica que el diseño dentro de mosaicos de 64 KB y el empaquetado mip de cola es hasta el controlador. No hay ningún patrón de swizzle estándar. Este diseño de textura se organiza en regiones contiguas de 64 KB, también conocidas como mosaicos, que contienen casi la cantidad equilaterales de número consecutivo de elementos de textura a lo largo de cada dimensión. Los iconos se organizan en orden principal de fila. Aunque no hay relleno entre iconos, normalmente hay elementos de textura sin usar en el último icono de cada dimensión. El diseño de los elementos de textura dentro del icono no está definido. Cada subrecurso sigue inmediatamente donde finaliza el subrecurso anterior y el orden del subrecurso sigue la misma secuencia que los ordinales de subrecursos. Sin embargo, el empaquetado mip de cola es específico del adaptador. Para obtener más información, consulte tiled resource tier y ID3D12Device::GetResourceTiling. Este diseño de textura permite escenarios de textura parcialmente residentes o dispersos cuando se usan junto con la funcionalidad de asignación de páginas de memoria virtual. Este diseño de textura debe usarse junto con ID3D12Device::CreateReservedResource para habilitar el uso de ID3D12CommandQueue::UpdateTileMappings. Algunas restricciones se aplican a las texturas con este diseño:
|
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE Valor: 3 Indica que una textura predeterminada usa el patrón swizzle estandarizado. Este diseño de textura se organiza de la misma manera que D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE es, salvo que se define el diseño de elementos de textura dentro del icono. El empaquetado mip de cola es específico del adaptador. Este diseño de textura permite optimizaciones al serializar datos entre varios adaptadores o entre la CPU y la GPU. La cantidad de copia se puede reducir cuando varios componentes comprenden el diseño de la memoria de textura. Este diseño suele ser más eficaz para un uso extenso que el diseño principal de fila, debido a la localidad invariable de rotación de los elementos de textura vecinos. Este diseño normalmente solo se puede usar con adaptadores que admiten swizzle estándar, pero existen excepciones para montones compartidos entre adaptadores. Las restricciones de este diseño son que no se admiten las siguientes:
|
Comentarios
La estructura D3D12_RESOURCE_DESC usa esta enumeración.
Esta enumeración controla el patrón swizzle de texturas predeterminadas y habilita la compatibilidad con mapas en texturas predeterminadas. Los autores de llamadas deben consultar D3D12_FEATURE_DATA_D3D12_OPTIONS para asegurarse de que se admite cada opción.
Los formatos estándar de swizzle se aplican dentro de cada fragmento de tamaño de página y las páginas se disponen en orden lineal con respecto al uno al otro. Un patrón de intercalación de 16 bits define la conversión de la ubicación intra-page pre-swizzled a la ubicación posterior al deslumbrado.
Para demostrarlo, considere el formato swizzle 2D 32bpp anterior. Esto se representa mediante las siguientes máscaras de intercalación, donde los bits de la izquierda son más significativos:
UINT xBytesMask = 1010 1010 1000 1111
UINT yMask = 0101 0101 0111 0000
Para calcular la dirección girada, se puede usar el código siguiente (donde se admite la instrucción intrínseca _pdep_u32 ):
UINT swizzledOffset = resourceBaseOffset +
_pdep_u32(xOffset, xBytesMask) +
_pdep_u32(yOffset, yBytesMask);
Requisitos
Requisito | Valor |
---|---|
Header | d3d12.h |
Consulte también
Optimizaciones de UMA: texturas accesibles de CPU y Swizzle estándar