stringtranslate.com

Lista de visualización

Una lista de visualización , también llamada lista de comandos en Direct3D 12 y búfer de comandos en Vulkan , es una serie de comandos gráficos para que puedan ejecutarse posteriormente cuando se ejecute la lista. [1] Los sistemas que hacen uso de la funcionalidad de lista de visualización se denominan sistemas en modo retenido , mientras que los sistemas que no lo hacen se diferencian de los sistemas en modo inmediato . En OpenGL, las listas de visualización son útiles para volver a dibujar la misma geometría o aplicar un conjunto de cambios de estado varias veces. [2] [3] Este beneficio también se utiliza con las listas de comandos del paquete de Direct3D 12. En Direct3D 12 y Vulkan, las listas de visualización se utilizan regularmente para la grabación y ejecución por cuadro.

Apariciones en la funcionalidad de lista de visualización

Uno de los primeros sistemas con una lista de visualización real fueron las computadoras Atari de 8 bits . La lista de visualización (en realidad llamada así en la terminología de Atari) es una serie de instrucciones para ANTIC , el coprocesador de vídeo utilizado en estas máquinas. Este programa, almacenado en la memoria de la computadora y ejecutado por ANTIC en tiempo real, puede especificar líneas en blanco, cualquiera de los seis modos de texto y ocho modos de gráficos, qué secciones de la pantalla se pueden desplazar horizontal o verticalmente y activar la Lista de visualización. Interrupciones (llamadas interrupciones ráster o HBI en otros sistemas). [4]

La familia Amstrad PCW contiene una función de Lista de visualización llamada 'Roller RAM'. Se trata de un área de RAM de 512 bytes que consta de 256 vectores de 16 bits en RAM, uno para cada línea de la pantalla de 720 × 256 píxeles. Cada vector identifica la ubicación de 90 bytes de píxeles monocromáticos que contienen los estados de 720 píxeles de la línea. Los 90 bytes de los estados de 8 píxeles están espaciados a intervalos de 8 bytes, por lo que hay 7 bytes no utilizados entre cada byte de datos de píxeles. Esto se adapta a cómo la PCW orientada a texto construye un búfer de pantalla típico en la RAM, donde las 8 filas del primer carácter se almacenan en los primeros 8 bytes, las filas del segundo carácter en los 8 bytes siguientes, y así sucesivamente. El Roller RAM se implementó para acelerar el desplazamiento de la pantalla, ya que habría sido inaceptablemente lento para su Z80 de 3,4 MHz subir el buffer de pantalla de 23 KB "a mano", es decir, mediante software. La entrada inicial de Roller RAM utilizada al comienzo de una actualización de pantalla está controlada por un registro de E/S grabable Z80. Por lo tanto, la pantalla se puede desplazar simplemente cambiando este registro de E/S. [ cita necesaria ]

Otro sistema que utiliza una función similar a la Lista de visualización en el hardware es Amiga , que, no por coincidencia, también fue diseñado por algunas de las mismas personas que desarrollaron el hardware personalizado para las computadoras Atari de 8 bits. Una vez dirigido a producir un modo de visualización, continuaría haciéndolo automáticamente para cada línea de escaneo siguiente. La computadora también incluía un coprocesador dedicado, llamado " Copper ", que ejecutaba un programa simple o 'Copper List' destinado a modificar los registros del hardware en sincronización con la pantalla. Las instrucciones de la Lista de Copper podrían indicarle al Copper que espere a que la pantalla alcance una posición específica en la pantalla y luego cambie el contenido de los registros del hardware. De hecho, era un procesador dedicado a atender interrupciones rasterizadas . Workbench utilizó Copper para mezclar múltiples modos de visualización (múltiples resoluciones y paletas de colores en el monitor al mismo tiempo) y numerosos programas para crear efectos de arco iris y degradado en la pantalla. El Amiga Copper también fue capaz de reconfigurar el motor del sprite en la mitad del bastidor, con solo una línea de escaneo de retraso. Esto permitió que Amiga dibujara más de sus 8 sprites de hardware, siempre y cuando los sprites adicionales no compartieran líneas de exploración (o el espacio de una línea de exploración) con más de otros 7 sprites. es decir, siempre que al menos un objeto haya terminado de dibujarse, se podrá agregar otro objeto debajo de él en la pantalla. Además, el último chipset AGA de 32 bits permitió dibujar sprites más grandes (más píxeles por fila) manteniendo la misma multiplexación. El Amiga también tenía hardware dedicado de desplazamiento de bloques ("blitter"), que podía dibujar objetos más grandes en un framebuffer. Esto se usaba a menudo en lugar de, o además de, sprites. [ cita necesaria ]

En sistemas más primitivos, los resultados de una lista de visualización se pueden simular, aunque a costa de escribir con un uso intensivo de la CPU en ciertos modos de visualización, control de color u otros registros de efectos visuales en el dispositivo de vídeo, en lugar de ejecutar una serie de comandos de renderizado. por el dispositivo. Por lo tanto, se debe crear la imagen mostrada utilizando algún otro proceso de renderizado, ya sea antes o mientras se ejecuta la generación de visualización impulsada por la CPU. En muchos casos, la imagen también se modifica o se vuelve a renderizar entre fotogramas . Luego, la imagen se muestra de varias maneras, dependiendo de la forma exacta en que se implemente el código de visualización controlado por la CPU. [ cita necesaria ]

Ejemplos de los resultados posibles en estas máquinas más antiguas que requieren video controlado por CPU incluyen efectos como el modo FLI del Commodore 64/128 o Rainbow Processing en el ZX Spectrum. [ cita necesaria ]

Uso en OpenGL

Para delimitar una lista de visualización se utilizan las funciones glNewListy , y para ejecutar la lista se utiliza la función. Casi todos los comandos de representación que ocurren entre las llamadas a funciones se almacenan en la lista de visualización. Los comandos que afectan el estado del cliente no se almacenan en las listas de visualización. [5] Las listas de visualización se nombran con un valor entero y la creación de una lista de visualización con el mismo nombre que una ya creada anula la primera. [6]glEndListglCallList

La glNewListfunción espera dos argumentos: un número entero que representa el nombre de la lista y una enumeración para el modo de compilación. Los dos modos incluyen GL_COMPILE_AND_EXECUTE, que compila y ejecuta inmediatamente, y GL_COMPILE, que solo compila la lista. [7]

Las listas de visualización permiten el uso del patrón de representación en modo retenido , que es un sistema en el que los comandos gráficos se graban (retienen) para ejecutarlos sucesivamente en un momento posterior. Esto es contrario al modo inmediato , donde los comandos gráficos se ejecutan inmediatamente en las llamadas del cliente. [8]

Uso en Direct3D 12

Las listas de comandos se crean usando las funciones ID3D12Device::CreateCommandListo ID3D12Device4::CreateCommandList1. [9] Las listas de comandos se pueden crear en varios tipos: directo, paquete, cálculo, copia, decodificación de video, proceso de video y codificación de video. Las listas de comandos directos especifican que una lista de comandos puede ejecutar la GPU y no hereda ningún estado de la GPU. [10] Los paquetes se utilizan mejor para almacenar y ejecutar pequeños conjuntos de comandos cualquier número de veces. Esto se usa de manera diferente a las listas de comandos normales, donde los comandos almacenados en una lista de comandos generalmente se ejecutan solo una vez. [9] Las listas de comandos de cálculo se utilizan para cálculos generales, siendo un uso común el cálculo de mapas mip . [11] Una lista de comandos de copia es estrictamente para copiar y las listas de comandos de decodificación y proceso de video son para decodificación y procesamiento de video, respectivamente. [10]

Tras su creación, las listas de comandos están en estado de grabación. Las listas de comandos se pueden reutilizar llamando a la ID3D12GraphicsCommandList::Resetfunción. Después de grabar comandos, la lista de comandos debe salir del estado de grabación llamando a ID3D12GraphicsCommandList::Close. Luego, la lista de comandos se ejecuta llamando a ID3D12CommandQueue::ExecuteCommandLists. [9]

Deprecación

Las listas de visualización han quedado en gran medida obsoletas en las arquitecturas gráficas modernas, ya que representan un conjunto de comandos en el proceso de gráficos de funciones fijas . Las arquitecturas modernas utilizan sombreadores y objetos de búfer de vértices para evitar vincular el rendimiento de los gráficos a la CPU. Debido a la naturaleza de la lista de visualización, debe copiar cada comando y sus datos, lo que puede ser un problema para ciertos entornos donde la memoria es escasa y, en general, puede resultar ineficiente. [5] Sin embargo, Vulkan y Direct3D 12 todavía practican la funcionalidad de visualización de listas en forma de búferes de comandos y listas de comandos.

Ver también

Referencias

  1. ^ "Capítulo 7: Guía de programación OpenGL". www.glprogramming.com . Addison-Wesely . Consultado el 18 de noviembre de 2018 .
  2. ^ Guía de programación OpenGL: la guía oficial para aprender OpenGL, versión 1.1 (2ª ed.). Addison Wesley. 1997.ISBN 978-0201461381.
  3. ^ Mark Segal, Kurt Akeley, El diseño de la interfaz gráfica OpenGL. http://www.graphics.stanford.edu/courses/cs448a-01-fall/design_opengl.pdf
  4. ^ Pequeño, David; Pequeño, arenoso; En blanco, George (1983). El Atari creativo . ISBN 978-0-916688-34-9.
  5. ^ ab Martz, Paul (2006). OpenGL destilado (1ª ed.). PTG profesional de Addison-Wesley. ISBN 9780132701785. Consultado el 28 de diciembre de 2023 .
  6. ^ Wright, Richard S.; Haemel, Nicolás; Vendedores, Graham; Lipchak, Benjamín (2010). OpenGL SuperBible: referencia y tutorial completo (5ª ed.). Profesional de Addison-Wesley. ISBN 978-0-321-71261-5.
  7. ^ Blanco, Steve (9 de marzo de 2021). "Función glNewList (Gl.h) - Aplicaciones Win32". aprender.microsoft.com . Consultado el 28 de diciembre de 2023 .
  8. ^ Quinn Radich (30 de mayo de 2018). "Modo retenido versus modo inmediato". Aplicaciones Win32 . Microsoft . Consultado el 21 de diciembre de 2019 .
  9. ^ abc Blanco, Steven; Jenks, Alma; badasahog; Coulter, David; Kelly, Juan; Kinross, Austin; Wenzel, Maira; Jacobs, Mike; Satrán, Michael (30 de diciembre de 2021). "Creación y grabación de listas y paquetes de comandos: aplicaciones Win32". aprender.microsoft.com . Consultado el 5 de enero de 2024 .
  10. ^ ab White, Steve (14 de febrero de 2023). "D3D12_COMMAND_LIST_TYPE (d3d12.h) - Aplicaciones Win32". aprender.microsoft.com . Consultado el 6 de enero de 2024 .
  11. ^ Loggini, Riccardo (31 de octubre de 2020). "Computar sombreadores en D3D12". Ricardo Loggini . Consultado el 6 de enero de 2024 .

Otras lecturas