Compartir a través de


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.

Sintaxis

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 normalmente se rellenan a través de recursos en montones de carga.
D3D12_HEAP_TYPE_UPLOAD
Valor: 2
Especifica un montón usado para la carga. 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, siga 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 se deben crear con D3D12_RESOURCE_STATE_GENERIC_READ y no se pueden cambiar de este. Normalmente, la dirección de CPU de dichos montones no es eficaz para las lecturas de CPU.

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

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

  • Cargar 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.

  • Cargar datos constantes que solo se usan en 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 el 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 memoria caché de CPU es la escritura diferida, lo que resulta favorable para varias lecturas de CPU de línea de sub caché.

Los recursos de este montón se deben crear 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, multimotor, 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 información, consulte

D3D12_FEATURE_ARCHITECTURE,
D3D12_FEATURE_DATA_ARCHITECTURE, y
getCustomHeapProperties.

Observaciones

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 básicamente 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 neutrales de arquitectura del adaptador deben suponer que hay dos grupos de memoria disponibles, donde el grupo con mayor 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 cargar en GPU o volver a leer desde GPU.

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

Requisitos

Requisito Valor
encabezado de d3d12.h

Consulte también

enumeraciones de Core

montón de descriptores de