c opengl assembly graphics

¿Ejemplo del "ejemplo del mundo" del controlador de gráficos?



opengl assembly (1)

  • Paso 1 : Comprenda la GPU particular a la que se dirige (Arquitectura, registro y detalles de transmisión). Me temo que para muchas de las GPU, estos detalles pueden ser de propiedad exclusiva y es posible que no los consigas. (Pero como mencionaste, en tu caso las especificaciones están disponibles)
  • Paso 2 : agregue algunas llamadas en su controlador que puedan consultar registros / detalles desde el controlador.
  • Paso 3 : agregue algunas llamadas en su controlador para modificar registros. (Modo de cambio, etc.)
  • Paso 4 : Puedes verificar cómo dibujar un triángulo / quad en tu GPU con un color constante. Intente implementar clear screen (funcionalidad similar a glClear ) dibujando un cuadriciclo grande o 2 triángulos o 1 triángulo de dimensión doble de la pantalla o enviando algún comando claro. (Cualquiera sea el método que admita la GPU) Si está dibujando un triángulo o un cuadrángulo, use el sistema NDC (coordenadas de dispositivo normalizadas) y prefiera trabajar en el sistema de ventanas Raw o NWS (sistema de ventanas nulo). El sistema de ventanas es responsable de mostrar su framebuffer de salida después de la composición o algún procesamiento posterior. Por Raw o NWS, me refiero a mostrar el framebuffer directamente en la pantalla.
  • Paso 5 (la mayoría de las cosas son opcionales) : Implementar un dibujo complejo. Esto puede incluir el soporte de otros modos de dibujo como pixel, línea, banda triangular, abanico triangular, etc. y soporte de textura, iluminación, transformación e interacción con otros sistemas de ventanas. Para este paso, necesitará aprender ensamblaje. Pero note, este no es un ensamble de x86 o de brazo (CPU), sino que es un ensamblaje de GPU especializado en el manejo de SIMD .
  • Paso 6 : Implementar la funcionalidad de la plantilla. Prepare una galería de símbolos de hello world en su programa. Borre la pantalla con color 1. Aplique la galería de símbolos y borre la pantalla nuevamente con color 2. Ahora tiene hello world escrito en color 2 con color 1 como fondo.

Motivación para hacer todo esto es: Quieres hacer esto. Y esto será genial.

La desmotivación para hacer esto es: posible indisponibilidad de las especificaciones de la GPU, curva de aprendizaje para el ensamblaje de la GPU, complejidad de los gráficos.

Mi recomendación: si las especificaciones de GPU (junto con el ensamblaje) están disponibles para usted, le sugiero que implemente un subconjunto de cualquier conjunto de API disponible (por ejemplo, abra vg y abra GLES 1.1). Para leer más sobre este conjunto de API, visite el sitio web de khronos .

¿Cuáles son los pasos necesarios para crear un controlador de GPU que represente píxeles en una pantalla? Básicamente es el ejemplo más simple de "hello world" de crear un controlador de GPU, como encender la pantalla de color rojo o simplemente mostrar un solo píxel. ¿Dónde comienzas?

Me gustaría piratear la GPU directamente, sin ninguna abstracción C u OpenGL ni nada de eso. Estoy usando Mac OSX, y creo que tengo la tarjeta gráfica Intel HD i7, por lo que estos documentos parecían una buena opción:

El proyecto Mesa3D dice que hay una serie de controladores de código abierto, y Wikipedia dice que Intel produce estos documentos para que pueda escribir un controlador de código abierto si lo desea, pero no explica cómo.

También me encontré con Graphics Programming Black Book de Michael Abrash , que explica mucho.

Sin embargo, eso es demasiado para morderlo todo a la vez. Y no parece haber ninguna información sobre cómo empezar a hackear un controlador de GPU, un proyecto de "hello world".

Por ejemplo:

  • Para aprender a ensamblar, puede brew install nasm , escribir un ensamblaje, compilar y ejecutarlo para imprimir "hello world".
  • Para aprender Arduino, puede conectar una placa Arduino en su computadora a través de un cable USB, instalar su software y cargar un código C directamente en la placa y ejecutarlo, para mostrar una luz LED parpadeante.

¿Cómo haces ese mismo tipo de cosas para la tarjeta gráfica?

El ejemplo de Hello World no necesariamente tiene que funcionar (¡aunque sería genial si lo hiciera!); incluso sería útil resumir lo que tomaría en un sentido de nivel superior / práctico. Si no es posible en una Mac, o incluso en Linux, sería bueno saberlo. Pero incluso entonces, la pregunta sigue siendo, ¿dónde empiezas a escribir un controlador de gráficos?