> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12_FEATURE_DATA_ARCHITECTURE1

> Proporciona detalles sobre las características de la arquitectura de cada adaptador, de modo que la aplicación pueda optimizarse mejor para determinadas propiedades del adaptador.

Proporciona detalles sobre las características de la arquitectura de cada adaptador, de modo que la aplicación pueda optimizarse mejor para determinadas propiedades del adaptador.
<div class="alert">**Nota**  Esta estructura, introducida en Windows 10, versión 1703 (Creators' Update), reemplaza a la estructura [D3D12\_FEATURE\_DATA\_ARCHITECTURE](/reference/graphics/d3d12/structs/d3d12_feature_data_architecture_public). Si su aplicación tiene como destino Windows 10, versión 1703 (Creators' Update) o superior, use **D3D12\_FEATURE\_DATA\_ARCHITECTURE1** (y [D3D12\_FEATURE\_ARCHITECTURE1](/reference/graphics/d3d12/enums/d3d12_feature_public)).</div><div> </div>

## Sintaxis

```cpp theme={null}
typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1
{
    UINT NodeIndex;
    BOOL TileBasedRenderer;
    BOOL UMA;
    BOOL CacheCoherentUMA;
    BOOL IsolatedMMU;
} D3D12_FEATURE_DATA_ARCHITECTURE1
```

### Miembros

*NodeIndex*\
Tipo: UINT

En el funcionamiento con varios adaptadores, esto indica qué adaptador físico del dispositivo es relevante.
Consulte [Sistemas de varios adaptadores](https://learn.microsoft.com/en-us/windows/win32/direct3d12/multi-engine).
La aplicación rellena **NodeIndex** antes de llamar a [CheckFeatureSupport](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public), ya que la aplicación puede recuperar detalles sobre la arquitectura de cada adaptador.

*TileBasedRenderer*\
Tipo: BOOL

Especifica si el hardware y el controlador admiten un representador basado en mosaicos.
El entorno de ejecución establece este miembro en **TRUE** si el hardware y el controlador admiten un representador basado en mosaicos.

*UMA*\
Tipo: BOOL

Especifica si el hardware y el controlador admiten UMA.
El entorno de ejecución establece este miembro en **TRUE** si el hardware y el controlador admiten UMA.

*CacheCoherentUMA*\
Tipo: BOOL

Especifica si el hardware y el controlador admiten UMA coherente con caché.
El entorno de ejecución establece este miembro en **TRUE** si el hardware y el controlador admiten UMA coherente con caché.

*IsolatedMMU*\
Tipo: BOOL

[SAL](https://learn.microsoft.com/en-us/visualstudio/code-quality/annotating-structs-and-classes): <code>*Out*</code>

Especifica si el hardware y el controlador admiten una unidad de administración de memoria (MMU) aislada.
El entorno de ejecución establece este miembro en **TRUE** si la GPU respeta las propiedades de la tabla de páginas de la CPU, como **MEM\_WRITE\_WATCH** (para obtener más información, consulte [VirtualAlloc](https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc)) y **PAGE\_READONLY** (para obtener más información, consulte [Constantes de protección de memoria](https://learn.microsoft.com/en-us/windows/win32/Memory/memory-protection-constants)).

Si es **TRUE**, la aplicación debe procurar no usar con la GPU memoria con estas propiedades de tabla de páginas, ya que la GPU podría desencadenar estas propiedades de tabla de páginas de maneras inesperadas. Por ejemplo, las operaciones de escritura de la GPU pueden tener una granularidad mayor de la que la aplicación espera, en particular las escrituras desde los sombreadores. Es posible que algunas páginas con supervisión de escritura aparezcan como modificadas (dirty), incluso cuando no resulte obvio cómo las escrituras de la GPU pueden haberlas afectado. Las operaciones de la GPU asociadas a los escenarios de uso de montones de carga y lectura diferida funcionan bien con las páginas con supervisión de escritura, pero en ocasiones pueden generar falsos positivos que se pueden ignorar con seguridad.

## Comentarios

<h3><a id="How_to_use_UMA_and_CacheCoherentUMA" /><a id="how_to_use_uma_and_cachecoherentuma" /><a id="HOW_TO_USE_UMA_AND_CACHECOHERENTUMA" />Cómo usar UMA y CacheCoherentUMA</h3>
Las aplicaciones de D3D12 deben ocuparse de administrar la residencia de la memoria y de proporcionar las propiedades de montón óptimas.
Las aplicaciones de D3D12 pueden mantenerse simples y ejecutarse razonablemente bien en muchas arquitecturas de GPU administrando únicamente la residencia de los recursos en los montones [D3D12\_HEAP\_TYPE](/reference/graphics/d3d12/enums/d3d12_heap_type_public)\_DEFAULT.
Esas aplicaciones solo necesitan llamar a [IDXGIAdapter3::QueryVideoMemoryInfo](https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_4/nf-dxgi1_4-idxgiadapter3-queryvideomemoryinfo) para DXGI\_MEMORY\_SEGMENT\_GROUP\_LOCAL,
y deben tolerar que D3D12\_HEAP\_TYPE\_UPLOAD y D3D12\_HEAP\_TYPE\_READBACK provengan de ese mismo grupo de segmentos de memoria.

Sin embargo, un diseño tan simple es demasiado restrictivo para las aplicaciones que llevan los límites al máximo.
Por lo tanto, D3D12\_FEATURE\_DATA\_ARCHITECTURE ayuda a las aplicaciones a optimizarse mejor para las propiedades del adaptador subyacente.

Es posible que algunas aplicaciones quieran optimizarse mejor para los adaptadores discretos y asumir la complejidad adicional de administrar los presupuestos tanto de la memoria del sistema como de la memoria de vídeo.
Si el tamaño de los montones de carga rivaliza con el tamaño de las texturas predeterminadas, se dispone de casi el doble de utilización de memoria.
Al admitir estas optimizaciones, una aplicación puede detectar dos presupuestos de residencia o reconocer que **UMA** es **false**.

Es posible que algunas aplicaciones quieran optimizarse mejor para los adaptadores integrados/UMA, especialmente las interesadas en prolongar la duración de la batería en dispositivos móviles.
Las aplicaciones de D3D12 simples se ven obligadas a copiar datos entre montones con distintas atribuciones, cuando no siempre es necesario en UMA.
Sin embargo, la propiedad UMA, por sí sola, abarca un área gris razonablemente imprecisa de diseños de GPU.
No dé por hecho que UMA significa que toda la memoria accesible desde la GPU se puede hacer accesible libremente desde la CPU, porque no es así.
Hay una propiedad que se ajusta más a ese tipo de razonamiento: **CacheCoherentUMA**.

Cuando **CacheCoherentUMA** es **false**, se dispone de un único presupuesto de residencia, pero el diseño UMA suele beneficiarse de las tres atribuciones de montón.
Existen oportunidades para eliminar la copia de recursos mediante un uso inteligente de los recursos y montones de carga y lectura diferida, que proporcionan acceso de la CPU a la memoria.
No obstante, esas oportunidades no son claras.
Por lo tanto, las aplicaciones deben ser prudentes; y es aconsejable experimentar en una variedad de sistemas "UMA", ya que puede estar justificado recurrir a habilitar o excluir determinados identificadores de dispositivo.
Se recomienda comprender la arquitectura de memoria de la GPU y cómo los tipos de montón se traducen en propiedades de caché.
La viabilidad del éxito depende probablemente de la frecuencia con la que cada procesador lee o escribe los datos, del tamaño y la localidad de los accesos a los datos, etc.
Para desarrolladores avanzados: cuando **UMA** es true y **CacheCoherentUMA** es **false**, la característica más singular de estos adaptadores es que los montones de carga siguen siendo de combinación de escritura.
Sin embargo, algunos adaptadores UMA se benefician tanto de la propiedad de sin acceso de CPU como de la de combinación de escritura de los montones predeterminados y de carga.
Consulte [GetCustomHeapProperties](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_getcustomheapproperties_public) para obtener más detalles.

Cuando **CacheCoherentUMA** es true, las aplicaciones pueden plantearse con más firmeza abandonar la atribución de montones y usar en todas partes el equivalente de montón personalizado de los montones de carga.
Las optimizaciones de UMA de copia cero, como las que ofrece
[WriteToSubresource](/reference/graphics/d3d12/interfaces/id3d12resource/methods/id3d12resource_writetosubresource_public), se recomiendan de forma más general, ya que más escenarios simplemente se beneficiarán del uso compartido.
El modelo de memoria es muy propicio para más escenarios y una adopción más amplia.
Es posible que sigan existiendo algunos casos extremos en los que los beneficios no se obtengan fácilmente, pero deberían ser mucho más raros y menos perjudiciales que otras opciones.
Para desarrolladores avanzados: **CacheCoherentUMA** significa que una cantidad significativa de las cachés de la jerarquía de memoria también están unificadas o integradas entre la CPU y la GPU.
La característica observable más singular es que los montones de carga son en realidad de reescritura (write-back) en **CacheCoherentUMA**.
Para estas arquitecturas, el uso de la combinación de escritura en los montones de carga suele ser perjudicial.

La gran mayoría de las aplicaciones de un solo adaptador deberían ignorar los detalles de bajo nivel.
Como es habitual, las aplicaciones de un solo adaptador pueden simplificar el panorama y asegurarse de que las escrituras de la CPU en los montones de carga usen patrones compatibles con la combinación de escritura.
Los detalles de nivel inferior ayudan a reforzar los conceptos para las aplicaciones de varios adaptadores.
Es probable que las aplicaciones de varios adaptadores necesiten comprender las propiedades de la arquitectura de los adaptadores lo suficientemente bien como para elegir las propiedades de montón personalizado óptimas para mover datos de forma eficaz entre adaptadores.

## Requisitos

**Encabezado:** d3d12\_xs.h o d3d12\_x.h\
**Biblioteca:** d3d12\_xs.lib o d3d12\_x.lib\
**Plataformas compatibles**: consolas XBOX Series y familia XBOX One

## Consulte también

[Estructuras principales](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)

[D3D12\_FEATURE](/reference/graphics/d3d12/enums/d3d12_feature_public)


## Related topics

- [D3D12_FEATURE_DATA_ARCHITECTURE](/es/reference/graphics/d3d12/structs/d3d12_feature_data_architecture_public.md)
- [D3D12_FEATURE](/es/reference/graphics/d3d12/enums/d3d12_feature_public.md)
- [D3D12_DESCRIPTOR_RANGE1](/es/reference/graphics/d3d12/structs/d3d12_descriptor_range1_public.md)
- [D3D12_ROOT_DESCRIPTOR_TABLE1](/es/reference/graphics/d3d12/structs/d3d12_root_descriptor_table1_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS](/es/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options_public.md)
