stringtranslate.com

Lenguaje ensamblador ARB

El lenguaje ensamblador ARB es un lenguaje de sombreado de bajo nivel , que se puede caracterizar como un lenguaje ensamblador . Fue creado por la Junta de Revisión de Arquitectura OpenGL (ARB) para estandarizar las instrucciones de la GPU que controlan la canalización de gráficos del hardware .

Historia

Texas Instruments creó el primer procesador de gráficos programable en 1985: el TMS34010 , que permitía a los desarrolladores cargar y ejecutar código en el procesador para controlar la salida de píxeles en una pantalla de vídeo. A esto le siguieron el TMS34020 y el TMS34082 en 1989, que proporcionaban salida de gráficos 3D programables.

Nvidia lanzó su primera tarjeta de video NV1 en 1995, que admitía mapeo de texturas cuadrático. A este le siguió el Riva 128 (NV3) en 1997, que proporcionó la primera aceleración de hardware para Direct3D .

Varios proveedores de tarjetas de video lanzaron sus propias placas aceleradas, cada una con su propio conjunto de instrucciones para las operaciones de GPU . La Junta de Revisión de Arquitectura OpenGL (ARB) se formó en 1992, en parte para establecer estándares para la industria de GPU.

La ARB y Nvidia establecieron una serie de extensiones OpenGL para estandarizar la programación de GPU: [1]

Esto culminó con el lanzamiento de ARB en 2002 de

Estas dos extensiones proporcionaron un estándar industrial para un lenguaje ensamblador que controlaba la canalización de GPU para vértices 3D y propiedades de píxeles interpolados, respectivamente.

Los lenguajes de sombreado de alto nivel posteriores a veces se compilan según este estándar ARB. Si bien ahora es más probable que los desarrolladores 3D utilicen un lenguaje de sombreado de alto nivel similar a C para la programación de GPU , el ensamblaje ARB tiene la ventaja de ser compatible con una amplia gama de hardware.

Sin embargo, tenga en cuenta que algunas funciones, como bucles y condicionales, no están disponibles en el ensamblado ARB y su uso requiere adoptar la extensión NV_gpu_program4 o el lenguaje de sombreado GLSL.

Todos los principales fabricantes de tarjetas gráficas han admitido el lenguaje ensamblador ARB durante años, desde la serie NVIDIA Geforce FX , las tarjetas basadas en AMD R300 (serie Radeon 9500 y superiores) y la Intel GMA 900 . [4] Sin embargo, el lenguaje ensamblador ARB estándar está solo en el nivel de Pixel Shader 2.0 y es anterior a GLSL , por lo que tiene muy pocas características. Si bien nVidia ha creado extensiones patentadas para los lenguajes ensambladores ARB que combinan la rápida velocidad de compilación del ensamblador ARB con las características modernas de OpenGL 3.x, introducidas con la serie GeForce 8 , la mayoría de las implementaciones OpenGL que no son de nVidia no proporcionan las extensiones patentadas de nVidia para el ensamblador ARB. lenguaje [5] y no ofrecen ninguna otra forma de acceder a todas las funciones del sombreador directamente en el ensamblaje, lo que obliga al uso de GLSL incluso para sombreadores generados por máquinas donde el ensamblaje sería más apropiado.

Detalles

ARB_vertex_programa

La extensión del programa ARB Vertex proporciona API para cargar instrucciones de ensamblaje ARBvp1.0, habilitar programas seleccionados y configurar varios parámetros de GPU.

Los programas de vértices se utilizan para modificar las propiedades de los vértices, como la posición, las normales y las coordenadas de textura, que se pasan al siguiente proceso de canalización: a menudo un sombreador de fragmentos; más recientemente, un sombreador de geometría.

ARB_fragmento_programa

La extensión ARB Fragment Program proporciona API para cargar instrucciones de ensamblaje ARBfp1.0, habilitar programas seleccionados y configurar varios parámetros de GPU.

Los fragmentos de OpenGL son definiciones de píxeles interpolados. El procesador de vértices de la GPU calcula todos los píxeles controlados por un conjunto de vértices, interpola su posición y otras propiedades y los pasa a su proceso de fragmentos. Los programas de fragmentos permiten a los desarrolladores modificar estas propiedades de píxeles antes de representarlos en un búfer de fotogramas para su visualización.

Parámetros OpenGL

variables BRA

Todas las variables de ensamblaje ARB son vectores float4, que pueden direccionarse mediante sufijos xyzw o rgba.

Los registros son variables escalares en las que sólo se puede abordar un elemento.

Atributos de vértice

El ensamblaje ARB admite los siguientes sufijos para atributos de vértice:

Matrices de estado

El ensamblaje ARB admite las siguientes matrices de estado:

Se pueden utilizar los siguientes modificadores:

Instrucciones de montaje ARB

El conjunto ARB admite las siguientes instrucciones:

Esta es sólo una lista parcial de instrucciones de montaje; Puede encontrar una referencia aquí: Guía de referencia rápida del lenguaje ensamblador Shader (ARB/NV) para OpenGL.

El conjunto ARB no proporciona instrucciones para control de flujo o bifurcación. SGE y SLT se pueden utilizar para establecer o borrar vectores o registros de forma condicional.

Las interfaces ARB no proporcionan ningún paso de compilación para el lenguaje ensamblador.

GL_NV_fragment_program_option amplía el lenguaje ARB_fragment_program con instrucciones adicionales. GL_NV_fragment_program2, GL_NV_vertex_program2_option y GL_NV_vertex_program3 lo amplían aún más.

Código de muestra

Un ejemplo de sombreador de vértices ARB trivial

!!ARBvp1.0TEMP vérticeClip;DP4 vertexClip.x, estado.matrix.mvp.row[0], vértice.posición;DP4 vertexClip.y, state.matrix.mvp.row[1], vertex.position;DP4 vertexClip.z, state.matrix.mvp.row[2], vertex.position;DP4 vertexClip.w, state.matrix.mvp.row[3], vertex.position;Resultado MOV.posición, vertexClip;Resultado MOV.color, vértice.color;Resultado MOV.texcoord[0], vértice.texcoord;FIN

Un ejemplo de sombreador de fragmentos ARB trivial

!!ARBfp1.0color TEMPERATURA;Color MUL, fragmento.texcoord[0].y, 2.0;AÑADIR color, 1.0, -color;Color ABS, color;AÑADIR resultado.color, 1.0, -color;Resultado MOV.color.a, 1.0;FIN

Ver también

Referencias

  1. ^ Simón verde. "Historia de la programabilidad en OpenGL" (PDF) .
  2. ^ ARA. "ARB_vertex_program".
  3. ^ ARA. "ARB_fragment_program".
  4. ^ Juegos de incendios forestales. "Lista de tarjetas gráficas y renderizadores OpenGL que admiten el lenguaje ensamblador ARB".
  5. ^ Juegos de incendios forestales. "Lista de tarjetas gráficas y renderizadores OpenGL que admiten las extensiones de nVidia al lenguaje ensamblador ARB".