enumeración D3D11_USAGE (d3d11.h)

Identifica el uso esperado de recursos durante la representación. El uso refleja directamente si la CPU o la unidad de procesamiento de gráficos (GPU) pueden acceder a un recurso.

Syntax

typedef enum D3D11_USAGE {
  D3D11_USAGE_DEFAULT = 0,
  D3D11_USAGE_IMMUTABLE = 1,
  D3D11_USAGE_DYNAMIC = 2,
  D3D11_USAGE_STAGING = 3
} ;

Constantes

 
D3D11_USAGE_DEFAULT
Valor: 0
Recurso que requiere acceso de lectura y escritura mediante la GPU. Es probable que sea la opción de uso más común.
D3D11_USAGE_IMMUTABLE
Valor: 1
Recurso que solo puede leer la GPU. No se puede escribir mediante la GPU y no se puede acceder a él en absoluto mediante la CPU. Este tipo de recurso se debe inicializar cuando se crea, ya que no se puede cambiar después de la creación.
D3D11_USAGE_DYNAMIC
Valor: 2
Un recurso al que puede acceder tanto la GPU (solo lectura) como la CPU (solo escritura). Un recurso dinámico es una buena opción para un recurso que la CPU actualizará al menos una vez por fotograma. Para actualizar un recurso dinámico, use un método Map .

Para obtener información sobre cómo usar recursos dinámicos, consulte Cómo: Usar recursos dinámicos.
D3D11_USAGE_STAGING
Valor: 3
Recurso que admite la transferencia de datos (copia) desde la GPU a la CPU.

Comentarios

Una aplicación identifica la forma en que se va a usar un recurso (su uso) en una descripción de recursos. Hay varias estructuras para crear recursos, como: D3D11_TEXTURE1D_DESC, D3D11_TEXTURE2D_DESC, D3D11_TEXTURE3D_DESC y D3D11_BUFFER_DESC.

Diferencias entre Direct3D 9 y Direct3D 10/11:

En Direct3D 9, especifique el tipo de memoria en la que se debe crear un recurso en el momento de la creación de recursos (mediante D3DPOOL). Fue el trabajo de una aplicación decidir qué grupo de memoria proporcionaría la mejor combinación de funcionalidad y rendimiento.

En Direct3D 10/11, una aplicación ya no especifica en qué tipo de memoria (el grupo) se va a crear un recurso. En su lugar, especifique el uso previsto del recurso y deje que el tiempo de ejecución (en conjunto con el controlador y un administrador de memoria) elija el tipo de memoria que logrará el mejor rendimiento.

 

Restricciones de uso de recursos

Cada uso determina un equilibrio entre la accesibilidad de la CPU y la accesibilidad para la GPU. En general, el acceso de mayor rendimiento para uno de estos dos procesadores significa un acceso de menor rendimiento para el otro. En cualquier extremo se encuentran los usos de D3D11_USAGE_DEFAULT y D3D11_USAGE_STAGING . D3D11_USAGE_DEFAULT restringe el acceso casi por completo a la GPU. D3D11_USAGE_STAGING restringe el acceso casi por completo a la CPU y solo permite una transferencia de datos (copia) de un recurso entre la GPU y la CPU. Puede realizar estas operaciones de copia a través de los métodos ID3D11DeviceContext::CopySubresourceRegion e ID3D11DeviceContext::CopyResource . También puede usar estos métodos de copia para copiar datos entre dos recursos del mismo uso. También puede usar el método ID3D11DeviceContext::UpdateSubresource para copiar memoria directamente desde un puntero proporcionado por la CPU a cualquier recurso, lo más útil es un recurso con D3D11_USAGE_DEFAULT.

D3D11_USAGE_DYNAMIC uso es un caso especial que optimiza el flujo de datos de CPU a GPU cuando la CPU genera esos datos sobre la marcha y envía esos datos con alta frecuencia. D3D11_USAGE_DYNAMIC se usa normalmente en recursos con datos de vértice y en búferes de constantes. Use los métodos ID3D11DeviceContext::Map e ID3D11DeviceContext::Unmap para escribir datos en estos recursos. Para lograr el máximo rendimiento de los datos consumidos en serie, como los datos de vértices, use la secuencia de D3D11_MAP_WRITE_NO_OVERWRITE y D3D11_MAP_WRITE_DISCARD . Para obtener más información sobre esta secuencia, consulte Uso común de D3D11_MAP_WRITE_DISCARD con D3D11_MAP_WRITE_NO_OVERWRITE.

D3D11_USAGE_IMMUTABLE uso es otro caso especial que hace que la GPU genere datos una sola vez al crear un recurso. D3D11_USAGE_IMMUTABLE es adecuado para datos como texturas, ya que normalmente estos datos se leen en la memoria desde algún formato de archivo. Por lo tanto, al crear una textura con D3D11_USAGE_IMMUTABLE, la GPU lee directamente esa textura en la memoria.

Use la tabla siguiente para elegir el uso que mejor describe cómo tendrá acceso el recurso a la CPU o la GPU. Por supuesto, habrá inconvenientes en el rendimiento.

Resource Usage Default Dinámica Inmutable Ensayo
GPU-Read Sí¹
GPU-Write Sí¹
CPU-Read Sí¹
CPU-Write Sí¹
 

1: la lectura o escritura de GPU de un recurso con el uso de D3D11_USAGE_STAGING está restringida a las operaciones de copia. Use ID3D11DeviceContext::CopySubresourceRegion e ID3D11DeviceContext::CopyResource para estas operaciones de copia. Además, dado que los formatos de galería de símbolos de profundidad y los diseños de varias muestras son detalles de implementación de un diseño de GPU determinado, el sistema operativo no puede exponer estos formatos y diseños a la CPU en general. Por lo tanto, los recursos de almacenamiento provisional no pueden ser un búfer de galería de símbolos de profundidad ni un destino de representación de muestreo múltiple.

Nota Técnicamente, puede usar ID3D11DeviceContext::UpdateSubresource para copiar en un recurso con cualquier uso excepto D3D11_USAGE_IMMUTABLE. Sin embargo, se recomienda usar ID3D11DeviceContext::UpdateSubresource para actualizar solo un recurso con D3D11_USAGE_DEFAULT. Se recomienda usar ID3D11DeviceContext::Map e ID3D11DeviceContext::Unmap para actualizar recursos con D3D11_USAGE_DYNAMIC porque es el propósito específico de los recursos de D3D11_USAGE_DYNAMIC y, por tanto, es la ruta de acceso más optimizada.
 
Tenga en cuentaD3D11_USAGE_DYNAMIC los recursos consumen funcionalidades de hardware específicas. Por lo tanto, úselos con moderación. El controlador de pantalla normalmente asigna memoria para D3D11_USAGE_DYNAMIC recursos con un algoritmo de almacenamiento en caché que favorece las escrituras de CPU y dificulta las lecturas de CPU. Además, es posible que la memoria subyacente a los recursos de D3D11_USAGE_DYNAMIC no sea la misma para las llamadas sucesivas a ID3D11DeviceContext::Map. Por lo tanto, no espere un alto rendimiento o incluso lecturas coherentes de CPU de D3D11_USAGE_DYNAMIC recursos.
 
NotaID3D11DeviceContext::CopyStructureCount es un caso especial de copia de GPU a CPU. Use ID3D11DeviceContext::CopyStructureCount solo con vistas de acceso desordenadas (UAV) de búferes.
 

Opciones de enlace de recursos

Para maximizar el rendimiento, no todas las opciones de uso de recursos se pueden usar como recursos de entrada o salida en la canalización. En esta tabla se identifican estas limitaciones.
El recurso se puede enlazar como Default Dinámica Inmutable Ensayo
Entrada en una fase Sí² Sí³
Salida de una fase Sí²
 
  • 2 - Si se enlaza como entrada y salida mediante vistas diferentes, cada vista debe usar subrecursos diferentes.
  • 3 : el recurso solo se puede crear con un único subrecurso. El recurso no puede ser una matriz de texturas. El recurso no puede ser una cadena de mapas mip.

Requisitos

Requisito Valor
Header d3d11.h

Consulte también

Enumeraciones de recursos