De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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

Historia [ editar ]

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

NVIDIA lanzó su primera tarjeta de video NV1 en 1995, que admitía el mapeo de texturas cuadráticas. Esto fue seguido por el Riva 128 (NV3) en 1997, proporcionando la primera aceleración de hardware para Direct3D .

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

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

  • EXT_texture_env_combine: proporcionó un método programable para combinar texturas.
  • NV_register_combiners - GeForce 256
  • NV_vertex_program - GeForce 3
  • NV_texture_shader - GeForce 3
  • NV_texture_shader3 - GeForce 4
  • NV_vertex_program2 - GeForce FX
  • NV_fragment_program - GeForce FX

Esto culminó con el lanzamiento de ARB en 2002 de

  • ARB_vertex_program [2]
  • ARB_fragment_program [3]

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

Los lenguajes de sombreado de alto nivel subsiguientes 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 los bucles y los condicionales, no están disponibles en el ensamblaje de 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 superior) y la Intel GMA 900 . [4] Sin embargo, el lenguaje ensamblador ARB estándar está solo al 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 ensamblaje 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 ensamblado ARB idioma [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 los sombreadores generados por máquina donde el ensamblaje sería más apropiado.

Detalles [ editar ]

ARB_vertex_program [ editar ]

La extensión ARB Vertex Program proporciona API para cargar instrucciones de ensamblaje ARBvp1.0, habilitar programas seleccionados y establecer 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_fragment_program [ editar ]

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

Los fragmentos de OpenGL son definiciones de píxeles interpoladas. 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 fragmentación. Los programas de fragmentos permiten a los desarrolladores modificar estas propiedades de píxeles antes de que se procesen en un búfer de cuadros para su visualización.

Parámetros de OpenGL [ editar ]

  • Los parámetros de atributo son atributos por vértice, como las normales de vértice.
  • Los parámetros locales se aplican a todo el conjunto de datos de un programa para una pasada de sombreado determinada.
  • Los parámetros de Env se aplican a todos los programas.

Variables ARB [ editar ]

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

Los registros son variables escalares en las que solo se puede direccionar un elemento.

  • Las variables ADDRESS son registros.
  • ATTRIB son atributos por vértice.
  • PARAM son propiedades uniformes: constantes, Env o Local.
  • Variables temporales TEMP .
  • ALIAS proporciona nombres alternativos para las variables.
  • OUTPUT designa las variables que se devuelven a la canalización.

Atributos de vértice [ editar ]

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

  • posición
  • peso
  • normal
  • color
  • fogcoord
  • texcoord
  • índice de matriz
  • attrib

Matrices de estado [ editar ]

El ensamblaje ARB admite las siguientes matrices de estado:

  • modelview
  • proyección
  • textura
  • paleta
  • programa

Se pueden utilizar los siguientes modificadores:

  • inverso
  • transponer
  • invtrans

Instrucciones de montaje de ARB [ editar ]

El ensamblaje ARB admite las siguientes instrucciones:

  • ABS - valor absoluto
  • AGREGAR - agregar
  • ARL - carga del registro de direcciones
  • DP3 - 3-componente de producto de punto
  • DP4 - 4-componente de producto de punto
  • DPH - producto escalar homogéneo
  • DST - vector de distancia
  • EX2 - base exponencial 2
  • EXP - base exponencial 2 (aproximada)
  • FLR - piso
  • FRC - fracción
  • LG2 - base logarítmica 2
  • LIT - calcular coeficientes de luz
  • LOG - logaritmo base 2 (aproximado)
  • MAD - multiplica y suma
  • MAX - máximo
  • MIN - mínimo
  • MOV - mover
  • MUL - multiplica
  • POW - exponente
  • RCP - recíproco
  • RSQ - raíz cuadrada recíproca
  • SGE - establecido en mayor o igual que
  • SLT : configurado en menos de
  • SUB - restar
  • SWZ - swizzle extendido
  • TEX - Búsqueda de texturas
  • XPD - producto cruzado

Ésta es sólo una lista parcial de instrucciones de montaje; se puede encontrar una referencia aquí: Shader Assembly Language (ARB / NV) Guía de referencia rápida para OpenGL .

El conjunto de ARB no proporciona instrucciones para el control de flujo o la ramificación. SGE y SLT pueden usarse para establecer o borrar condicionalmente vectores o registros.

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 [ editar ]

Un ejemplo de sombreador de vértices ARB trivial [ editar ]

!! ARBvp1.0TEMP vertexClip;DP4 vertexClip.x, state.matrix.mvp.row [0], vertex.position;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;MOV result.position, vertexClip;MOV result.color, vertex.color;MOV result.texcoord [0], vertex.texcoord;FINAL

Un ejemplo de sombreador de fragmentos ARB trivial [ editar ]

!! ARBfp1.0Color TEMP;MUL color, fragment.texcoord [0] .y, 2.0;AÑADIR color, 1.0, -color;ABS color, color;AÑADIR result.color, 1.0, -color;MOV result.color.a, 1.0;FINAL

Ver también [ editar ]

  • Junta de revisión de arquitectura OpenGL
  • Idiomas de sombreado
  • SPIR-V
  • Comparación de ensambladores

Referencias [ editar ]

  1. ^ Simon Green. "Historia de la programabilidad en OpenGL" (PDF) .
  2. ^ ARB. "ARB_vertex_program" .
  3. ^ ARB. "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" .