Has hecho una pregunta muy amplia y complicada. En realidad, usted ha pedido varias preguntas amplias y complicadas.
El software que tiene la administración final sobre el funcionamiento de cualquier hardware se denomina "controlador" del hardware. Naturalmente, para el hardware de gráficos, esto se llama el "controlador de gráficos". Como todos los controladores, el controlador de gráficos es efectivamente una parte instalable del sistema operativo; el sistema operativo es lo que permite que el controlador de gráficos haga su trabajo y hable con el hardware. Los dos trabajan de la mano.
Existen efectivamente dos tipos de llamadas D3D u OpenGL (hasta ahora conocidas como "la API"): las que hablan con el controlador y las que no. Cada llamada que realmente atrae algo necesita (eventualmente) hablar con el controlador, pero las llamadas que configuran llamadas de dibujo posteriores pueden almacenar datos localmente.
Cuando realiza una llamada de dibujo, la API realiza algunas comprobaciones para asegurarse de que usted, como usuario, haya realizado una llamada de representación válida. Si es así, la API tiene algunas opciones en cuanto a qué hacer. Resulta que hablar directamente con el controlador lleva mucho tiempo, independientemente de la cantidad de comandos que le dé cuando comience a hablar. Por lo tanto, lo que sucede a menudo es que la API almacena su llamada de representación y la devuelve inmediatamente. Luego, posiblemente en otro hilo, puede ver cuántas llamadas de representación se han almacenado. Si hay "suficiente", los reenviará al conductor. Esto se llama "clasificación".
El trabajo del conductor es tomar estas llamadas que se han reenviado y convertirlas en cosas que la GPU hará.
En esa misma línea, ¿dónde se define la canalización de gráficos? en el hardware gpu, el controlador o la biblioteca de software?
Esa es en realidad una pregunta bastante difícil en estos días, y cada vez es más complicado cada generación de hardware.
En los viejos tiempos, la construcción de la tubería de gráficos estaba rígidamente controlada por el hardware de la GPU. En estos días, esto es menos cierto, aunque hay algo de control de hardware. En hardware moderno (capaz de OpenGL 3.0 o Direct3D10 o superior), teóricamente sería posible, si tuviera acceso directo al controlador de gráficos, diseñar una API que utilizara una versión algo alterada de la interconexión de gráficos. Por lo tanto, las API dictan gran parte de cómo se ve la ruta de gráficos.
Cada etapa en la tubería de renderizado toma ciertos valores de la (s) etapa (s) preciosa (s) como entrada y genera una cierta cantidad de valores como salida. Una etapa es "programable" si el mecanismo para generar las salidas de las entradas implica la ejecución de un programa suministrado por el usuario, llamado "sombreador". Entonces, no hay tal cosa como una tubería programable (aún); solo etapas programables de una tubería fija.
Muchas gracias. Soy muy consciente de cuán amplia era mi pregunta ... Lo siento, pero gracias por tomarse el tiempo para darme una respuesta tan buena. Aclara muchas cosas Si lo hice bien, la API valida las llamadas, las agrupa y eventualmente llama al controlador a través de una llamada al sistema enviando las llamadas acumuladas. ¿Estas llamadas que llegan al controlador se parecen más al ensamblaje, a los comandos direct3d/opengl de alto nivel o a ninguno de los dos? – cloudraven
Un controlador es solo una .dll u otra forma de biblioteca que carga el sistema operativo. Es solo código regular, y recibe llamadas de función como el código normal. Lo que las estructuras de datos que se pasan al controlador parecen depender de la implementación (cambia incluso para los controladores en el mismo sistema operativo) y, en última instancia, irrelevante para cualquiera que no esté realmente escribiendo un controlador. –
Lo siento, llegué tan tarde, pero una pregunta de seguimiento: ¿cómo sabe la API (OpenGL o DirectX) cómo hablar con los diferentes controladores? ¿Hay controladores Nvidia, controladores AMD/ATI y muchas versiones de cada controlador? Una aplicación vincula contra una versión establecida de, p. OpenGL, entonces, si actualizo mi controlador, ¿cómo sabe la versión anterior de OpenGL cómo hablar con mi controlador?¿Cómo funciona la coordinación entre el controlador y OpenGL? – pomeroy