ARB VP v 1 0 en GPULib comunicacin
ARB VP v 1. 0 en GPULib: comunicación GPULib ↔ Driver 8 de Julio del 2004
Comunicación de VP GPULib ↔ driver de b. GPU n Qué produce el ensamblador? : ¨ Código binario Shaders GPU → Los operandos de la instrucción apuntan un (banco, registro) de la GPU. ¨ Contenido de los bancos → Donde las instrucciones esperan encontrar los operandos según el texto del programa.
Comunicación de VP GPULib ↔ driver de b. GPU n Ejemplo: El banco de parametros/constantes PARAM vector = {0, 0, 0, 1}; (Valores conocidos en tiempo de compilación) Acceso de las instrucciones: DP 4 r 3, r 2, vector; MOV r 0, {0, 0, 0, 1}; DP 4 r 3, r 2, (Bank. Id = 3, Reg. Id = 0) Parameters Bank: Id = 3 T 0. 0 1. 0 C
Comunicación de VP GPULib ↔ driver de b. GPU n Ejemplo: El banco de parametros/constantes PARAM vector = program. local[23]; Parameters Bank: Id = 3 T PARAM vector = program. env[17]; 0. 0 1. 0 C Valores desconocidos en tiempo de compilación. Se definen y actualizan con las llamadas a la librería una vez compilado el programa: 23. 0 0. 0 L 17. 0 0. 0 E gl. Program. Local. Parameter 4 f. ARB( GL_VERTEX_PROGRAM_ARB, index, x, y, z, w ) gl. Program. Env. Parameter 4 f. ARB( GL_VERTEX_PROGRAM_ARB, index, x, y, z, w )
Comunicación de VP GPULib ↔ driver de b. GPU n Ejemplo: El banco de parametros/constantes PARAM mvp[] = { state. matrix. mvp. rows[0. . 2] }; Parameters Bank: Id = 3 T Valores desconocidos en tiempo de compilación. Se actualizan automáticamente con cada cambio de estado Open. GL 0. 0 1. 0 C 23. 0 0. 0 L 17. 0 0. 0 E 226. 0 0. 0 S 226. 0 1. 0 0. 0 S 226. 0 2. 0 0. 0 S
Comunicación de VP GPULib ↔ driver de b. GPU n Porqué todo en el mismo banco? ¨ Podemos mezclar tipos de parametros en la declaración de un parametro: PARAM localparams[] = ¨Y { program. local[32], {0, 0, 0, 0}, program. env[62. . 65], state. matrix. projection. row[1. . 2] }; acceder al parametro a través de registro: DP 4 r 3, r 2, localparams[ addr. x + 4 ];
Comunicación de VP GPULib ↔ driver de b. GPU n Qué enviamos a la GPU? ¨ Código binario GPU producido por el ensamblador. ¨ Banco de parametros con los valores correctos actuales: n n n Registros C: Tal cual Registros L y E: Con los valores actuales correspondientes de parametros locales y env. Registros S: ¨ ¨ Valores del estado Open. GL actual. Con cada cambio de estado (fuera del gl. Begin() i gl. End()) se actualiza de nuevo el banco → Queda por definir bien esta sincronización
Comunicación de VP GPULib ↔ driver de b. GPU gl. Program. Local. Parameter 4 f. ARB ( GL_VERTEX_PROGRAM_ARB, 23, 1. 0, 2. 0, 3. 0, 4. 0 ) gl. Rotatef(72. 0, 0. 0, 1. 0) Parameters Bank: Id = 3 T 0. 0 1. 0 C 23. 0 1. 0 0. 0 2. 0 0. 0 3. 0 0. 0 4. 0 L 17. 0 0. 0 E 226. 0 72. 0 0. 0 S 226. 0 0. 0 1. 0 0. 0 S 226. 0 0. 0 2. 0 0. 0 1. 0 0. 0 S
- Slides: 8