enumeración D3D12_HEAP_TYPE (d3d12.h)

Especifica el tipo de montón. Cuando residen, los montones residen en un grupo de memoria física determinado con determinadas propiedades de caché de CPU.

Syntax

typedef enum D3D12_HEAP_TYPE {
  D3D12_HEAP_TYPE_DEFAULT = 1,
  D3D12_HEAP_TYPE_UPLOAD = 2,
  D3D12_HEAP_TYPE_READBACK = 3,
  D3D12_HEAP_TYPE_CUSTOM = 4,
  D3D12_HEAP_TYPE_GPU_UPLOAD
} ;

Constantes

 
D3D12_HEAP_TYPE_DEFAULT
Valor: 1
Especifica el montón predeterminado. Este tipo de montón experimenta el mayor ancho de banda para la GPU, pero no puede proporcionar acceso a la CPU. La GPU puede leer y escribir en la memoria de este grupo y se pueden cambiar las barreras de transición de recursos. Se espera que la mayoría de los montones y recursos se encuentren aquí y se rellenan normalmente a través de recursos en montones de carga.
D3D12_HEAP_TYPE_UPLOAD
Valor: 2
Especifica un montón usado para cargar. Este tipo de montón tiene el acceso de CPU optimizado para la carga en la GPU, pero no experimenta la cantidad máxima de ancho de banda para la GPU. Este tipo de montón es mejor para los datos CPU-write-once, GPU-read-once; pero GPU-read-once es más estricta de lo necesario. GPU-read-once-or-from-cache es un caso de uso aceptable para los datos; pero estos usos son difíciles de juzgar debido a diferentes diseños y tamaños de caché de GPU. En caso de duda, péguese en la definición de GPU-read-once o perfile la diferencia en muchas GPU entre copiar los datos en un montón de _DEFAULT frente a leer los datos de un montón de _UPLOAD.

Los recursos de este montón deben crearse con D3D12_RESOURCE_STATE_GENERIC_READ y no se pueden cambiar de este modo. Normalmente, la dirección de CPU de estos montones no es eficaz para las lecturas de CPU.

A continuación se muestran los usos típicos de _UPLOAD montones:

  • Inicialización de recursos en un montón de _DEFAULT con datos de la CPU.

  • Carga de datos dinámicos en un búfer de constantes leído, repetidamente, por cada vértice o píxel.



Es probable que los siguientes no sean buenos usos para _UPLOAD montones:

  • Volver a inicializar el contenido de un recurso cada fotograma.

  • Cargando datos constantes que solo se usan todas las demás llamadas a Draw, donde cada Draw usa una cantidad no trivial de otros datos.

D3D12_HEAP_TYPE_READBACK
Valor: 3
Especifica un montón usado para volver a leer. Este tipo de montón tiene un acceso de CPU optimizado para leer datos desde la GPU, pero no experimenta la cantidad máxima de ancho de banda para la GPU. Este tipo de montón es el mejor para los datos legibles por GPU-write-once. El comportamiento de la caché de CPU es la reescritura, lo que resulta favorable para varias lecturas de CPU de línea de sub caché.

Los recursos de este montón deben crearse con D3D12_RESOURCE_STATE_COPY_DEST y no se pueden cambiar de este.
D3D12_HEAP_TYPE_CUSTOM
Valor: 4
Especifica un montón personalizado. La aplicación puede especificar directamente el grupo de memoria y las propiedades de caché de CPU, lo que puede ser útil para las optimizaciones de UMA, varios motores, varios adaptadores u otros casos especiales. Para ello, se espera que la aplicación comprenda la arquitectura del adaptador para tomar la decisión correcta. Para obtener más detalles, vea

D3D12_FEATURE_ARCHITECTURE,
D3D12_FEATURE_DATA_ARCHITECTURE y
GetCustomHeapProperties.

Comentarios

Esta enumeración la usan los siguientes elementos de API:

Los tipos de montón se dividen en dos categorías: tipos de montón abstractos y tipos de montón personalizados.

Los siguientes son tipos de montón abstractos:

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
A continuación se muestra un tipo de montón personalizado:
  • D3D12_HEAP_TYPE_CUSTOM
Los tipos de montón abstractos (_DEFAULT, _UPLOAD y _READBACK) son útiles para simplificar la escritura de aplicaciones neutras del adaptador, ya que estas aplicaciones no necesitan tener en cuenta la arquitectura de memoria del adaptador. Para usar un tipo de montón abstracto para simplificar la escritura de aplicaciones neutras del adaptador, la aplicación trata esencialmente el adaptador como si fuera un adaptador NUMA o discreto. Sin embargo, el uso de los tipos de montón permite una traducción eficaz para adaptadores de UMA. Las aplicaciones neutras de la arquitectura del adaptador deben suponer que hay dos grupos de memoria disponibles, donde el grupo con más ancho de banda de GPU no puede proporcionar acceso a la CPU. El grupo con el ancho de banda de GPU mínimo puede tener acceso a la CPU; pero debe optimizarse para la carga en GPU o para la lectura diferida desde GPU.

Tenga en cuenta que las texturas (a diferencia de los búferes) no pueden ser de tipo montón UPLOAD o READBACK.

Requisitos

Requisito Valor
Header d3d12.h

Consulte también

Enumeraciones principales

Montones de descriptores