Compartir a través de


Elección de un recurso

Un recurso es una colección de datos que usa la canalización 3D. La creación de recursos y la definición de su comportamiento es el primer paso para programar la aplicación. En esta guía se describen los temas básicos para elegir los recursos necesarios para la aplicación.

Identificación de las fases de canalización que necesitan recursos

El primer paso es elegir la fase de canalización de gráficos (o fases) que usará un recurso. Es decir, identifique cada fase que leerá datos de un recurso, así como las fases que escribirán datos en un recurso. Conocer las fases de canalización en las que se usarán los recursos determina las API a las que se llamará para enlazar el recurso a la fase.

En esta tabla se enumeran los tipos de recursos que se pueden enlazar a cada fase de canalización. Incluye si el recurso se puede enlazar como entrada o salida.

Fase de canalización Entrada o salida Resource Tipo de recurso
Ensamblador de entrada In Búfer de vértices Búfer
Ensamblador de entrada In Búfer de índice Búfer
Fases del sombreador In Shader-ResourceView Buffer, Texture1D, Texture2D, Texture3D
Fases del sombreador In Búfer de constantes de sombreador Búfer
Salida de flujo Fuera Búfer Búfer
Fusión de salida Fuera Vista de destino de representación Buffer, Texture1D, Texture2D, Texture3D
Fusión de salida Fuera Vista profundidad/galería de símbolos Texture1D, Texture2D

 

Identificar cómo se usará cada recurso

Una vez que haya elegido las fases de canalización que usará la aplicación (y, por tanto, los recursos que requerirá cada fase), el siguiente paso es determinar cómo se usará cada recurso, es decir, si la CPU o la GPU pueden acceder a un recurso.

El hardware en el que se ejecuta la aplicación tendrá un mínimo de al menos una CPU y una GPU. Para elegir un valor de uso, tenga en cuenta qué tipo de procesador debe leer o escribir en el recurso de las siguientes opciones.

Resource Usage Se puede actualizar mediante Frecuencia de actualización
Valor predeterminado GPU infrecuentemente
Dinámica CPU frecuente
Ensayo GPU N/D
Inmutable CPU (solo en tiempo de creación de recursos) N/D

 

El uso predeterminado debe usarse para un recurso que se espera que actualice la CPU con poca frecuencia (menos de una vez por fotograma). Idealmente, la CPU nunca escribiría directamente en un recurso con uso predeterminado para evitar posibles penalizaciones de rendimiento.

El uso dinámico debe usarse para un recurso que la CPU se actualiza con relativamente frecuencia (una o más por fotograma). Un escenario típico de un recurso dinámico sería crear búferes de vértices e índices dinámicos que se rellenarían en tiempo de ejecución con datos sobre la geometría visible desde el punto de vista del usuario para cada fotograma. Estos búferes se usarían para representar solo la geometría visible para el usuario para ese marco.

El uso provisional debe usarse para copiar datos hacia y desde otros recursos. Un escenario típico sería copiar datos en un recurso con uso predeterminado (al que la CPU no puede acceder) a un recurso con uso provisional (al que puede acceder la CPU).

Los recursos inmutables deben usarse cuando los datos del recurso nunca cambiarán.

Otra manera de examinar la misma idea es pensar en lo que hace una aplicación con un recurso.

Uso de la aplicación del recurso Resource Usage
Cargar una vez y nunca actualizar Inmutable o predeterminado
La aplicación rellena el recurso repetidamente Dinámica
Representación a Textura Valor predeterminado
Acceso a la CPU de datos de GPU Ensayo

 

Si no está seguro de qué uso elegir, comience con el uso predeterminado, ya que se espera que sea el caso más común. Un búfer sombreador-constante es el tipo de recurso que siempre debe tener el uso predeterminado.

Enlace de recursos a fases de canalización

Un recurso se puede enlazar a más de una fase de canalización al mismo tiempo, siempre que se cumplan las restricciones especificadas al crear el recurso. Estas restricciones se especifican como marcas de uso, marcas de enlace o marcas de acceso de CPU. En concreto, un recurso se puede enlazar como entrada y una salida simultáneamente, siempre y cuando no se pueda leer y escribir parte de un recurso al mismo tiempo.

Al enlazar un recurso, piense en cómo la GPU y la CPU accederán al recurso. Los recursos diseñados para un único propósito (no usan varias marcas de uso, enlace y acceso de CPU) darán lugar a un mejor rendimiento.

Por ejemplo, considere el caso de un destino de representación que se usa como textura varias veces. Puede ser más rápido tener dos recursos: un destino de representación y una textura usada como recurso de sombreador. Cada recurso solo usaría una marca de enlace, que indica "destino de representación" o "recurso de sombreador". Los datos se copiarían de la textura de destino de representación a la textura del sombreador.

Esta técnica de este ejemplo puede mejorar el rendimiento al aislar la escritura de destino de representación de la lectura de textura del sombreador. La única manera de asegurarse es implementar ambos enfoques y medir la diferencia de rendimiento en su aplicación concreta.

Recursos