-
Notifications
You must be signed in to change notification settings - Fork 7
Compiler Interface
The shader-compiler is located in a separate shared object, /usr/lib/libcgdrv.s
parially understood:
struct CgCtx {
/* 80 bytes large */
unsigned int unknown00;
const char *error; /* error string */
const char *log; /* compile log */
size_t unknown12; /* size of... something! The driver mallocs a buffer of this size right on return. */
void *unknown16; /* pointer (0x248 bytes) */
unsigned int unknown20; /* small int (1) */
void *unknown24; /* pointer (0x220 bytes) */
unsigned int unknown28; /* size of unknown6 */
void *unknown32; /* pointer */
unsigned int unknown36; /* NULL / 0x0*/
unsigned int unknown40; /* huge value (0x40a273d0) */
unsigned int *unknown44; /* poiner to unknown40 */
unsigned int unknown48; /* NULL / 0x0 */
unsigned int unknown52; /* NULL / 0x0 */
void *unknown56; /* pointer to 0x80 bytes buffer */
unsigned int unknown60; /* small int (3 -- this happes to be the fd of /dev/nvmap... coincidence?) */
unsigned int unknown64; /* small int (0x40) */
unsigned int unknown68; /* NULL / 0x0 */
unsigned int unknown72; /* small int (1) */
unsigned int unknown76; /* NULL / 0x0 */
}
void *CgDrv_Create(void)
int CgDrv_Compile(void *ctx, int unknown1, int shader_type, const char *str, size_t str_len, int unknown2)
unknown:
CgDrv_CleanUp
CgDrv_Delete
binary format:
struct AR20_binary {
char signature[8] = {'A', 'R', '2', '0', '-', 'B', 'I', 'N'};
uint32_t unknown08;
uint32_t instruction_count; /* not sure about this */
char binary[1];
}
offset 0: 'AR20-BIN' - signature
offset 8: 01 00 00 00 - unknown
offset 12: 01 00 00 00 - instruction count?
offset 16: program (?)
example "gl_FragColor = vec4(1.0, 0.0, 1.0, 0.5)":
00072754 41 52 32 30 2D 42 49 4E 01 00 00 00 01 00 00 00 |AR20-BIN........|
00072764 01 00 41 25 00 00 00 00 01 00 00 15 00 00 00 00 |..A%............|
00072774 01 00 01 26 00 00 00 00 01 00 01 27 00 00 00 00 |...&.......'....|
00072784 01 00 01 28 01 00 00 00 08 00 04 28 E8 27 01 00 |...(.......(.'..|
00072794 00 F2 41 3F C8 47 01 00 00 F2 41 3F E8 A7 01 00 |..A?.G....A?....|
000727A4 00 F2 41 3F 08 C8 01 00 00 F2 41 3F 01 00 06 28 |..A?......A?...(|
000727B4 00 00 00 00 01 00 01 29 05 80 02 00 |.......)........|
example "gl_FragColor = vec4(0.0, 1.0, 1.0, 0.5)":
00072404 41 52 32 30 2D 42 49 4E 01 00 00 00 01 00 00 00 |AR20-BIN........|
00072414 01 00 41 25 00 00 00 00 01 00 00 15 00 00 00 00 |..A%............|
00072424 01 00 01 26 00 00 00 00 01 00 01 27 00 00 00 00 |...&.......'....|
00072434 01 00 01 28 01 00 00 00 08 00 04 28 C8 27 01 00 |...(.......(.'..|
00072444 00 F2 41 3F E8 47 01 00 00 F2 41 3F E8 A7 01 00 |..A?.G....A?....|
00072454 00 F2 41 3F 08 C8 01 00 00 F2 41 3F 01 00 06 28 |..A?......A?...(|
00072464 00 00 00 00 01 00 01 29 05 80 02 00 |.......)........|
example2 "gl_FragColor = vec4(gl_FragCoord.xy, 1.0, 0.5)":
000774DC 41 52 32 30 2D 42 49 4E 01 00 00 00 01 00 00 00 |AR20-BIN........|
000774EC 01 00 41 25 00 00 00 00 01 00 00 15 00 00 00 00 |..A%............|
000774FC 01 00 01 26 00 00 00 00 01 00 01 27 00 00 00 00 |...&.......'....|
0007750C 01 00 01 28 01 00 00 00 08 00 04 28 00 32 01 00 |...(.......(.2..|
0007751C 00 10 42 3F 40 52 01 00 00 00 42 45 E8 A7 01 00 |..B?@R....BE....|
0007752C 00 F2 41 3F 88 C8 01 00 00 F2 41 3F 01 00 06 28 |..A?......A?...(|
0007753C 00 00 00 00 01 00 01 29 05 80 02 00 |.......)........|
example3 "gl_FragColor = vec4(gl_FragCoord.xy * gl_FragCoord.xy, 1.0, 0.5)":
0007514C 41 52 32 30 2D 42 49 4E 02 00 00 00 02 00 00 00 |AR20-BIN........|
0007515C 02 00 41 25 00 00 00 00 00 00 00 00 01 00 00 15 |..A%............|
0007516C 00 00 00 00 02 00 01 26 00 00 00 00 00 00 00 00 |.......&........|
0007517C 02 00 01 27 00 00 00 00 00 00 00 00 02 00 01 28 |...'...........(|
0007518C 01 00 00 00 05 00 00 00 10 00 04 28 00 72 01 00 |...........(.r..|
0007519C 00 10 42 3F 40 F2 01 00 00 00 42 46 00 72 03 00 |..B?@.....BF.r..|
000751AC 00 20 02 42 E8 A7 03 00 00 F2 41 3F 00 32 03 00 |. .B......A?.2..|
000751BC 00 A0 01 30 08 C7 03 00 00 F2 41 3F 40 46 03 00 |...0......A?@F..|
000751CC 00 F2 01 32 00 08 00 00 00 00 00 00 02 00 06 28 |...2...........(|
000751DC 00 00 00 00 00 00 00 00 02 00 01 29 00 00 00 00 |...........)....|
000751EC 05 80 02 00 |................|
example4 "gl_FragColor = vec4(gl_FragCoord.xy + gl_FragCoord.xy, 1.0, 0.5)"
0007515C 41 52 32 30 2D 42 49 4E 02 00 00 00 02 00 00 00 |AR20-BIN........|
0007516C 02 00 41 25 00 00 00 00 00 00 00 00 01 00 00 15 |..A%............|
0007517C 00 00 00 00 02 00 01 26 00 00 00 00 00 00 00 00 |.......&........|
0007518C 02 00 01 27 00 00 00 00 00 00 00 00 02 00 01 28 |...'...........(|
0007519C 01 00 00 00 05 00 00 00 10 00 04 28 00 72 01 00 |...........(.r..|
000751AC 00 10 42 3F 40 F2 01 00 00 00 42 45 E8 A7 03 00 |..B?@.....BE....|
000751BC 00 F2 41 3F 88 C8 03 00 00 F2 41 3F 00 26 03 00 |..A?......A?.&..|
000751CC 00 F2 49 3F 40 46 03 00 00 F2 49 3F E8 E7 0F 00 |..I?@F....I?....|
000751DC 00 F2 41 3E E8 E7 0F 00 00 F2 41 3E 02 00 06 28 |..A>......A>...(|
000751EC 00 00 00 00 00 00 00 00 02 00 01 29 00 00 00 00 |...........)....|
000751FC 05 80 02 00 |................|
example5 "gl_FragColor = vec4(gl_FragCoord.xy + gl_FragCoord.xy, gl_FragCoord.xy * gl_FragCoord.xy)"
000779C0 41 52 32 30 2D 42 49 4E 02 00 00 00 02 00 00 00 |AR20-BIN........|
000779D0 02 00 41 25 00 00 00 00 00 00 00 00 01 00 00 15 |..A%............|
000779E0 00 00 00 00 02 00 01 26 00 00 00 00 00 00 00 00 |.......&........|
000779F0 02 00 01 27 00 00 00 00 00 00 00 00 02 00 01 28 |...'...........(|
00077A00 01 00 00 00 05 00 00 00 10 00 04 28 00 72 01 00 |...........(.r..|
00077A10 00 C0 41 3F 40 F2 03 00 00 00 42 42 00 F2 01 00 |..A?@.....BB....|
00077A20 00 D0 01 38 00 00 D8 00 20 07 00 00 00 B2 01 00 |...8.... .......|
00077A30 00 A0 01 30 00 26 01 00 00 F2 49 3F 40 46 01 00 |...0.&....I?@F..|
00077A40 00 F2 49 3F 40 C6 01 00 00 F2 01 32 02 00 06 28 |..I?@......2...(|
00077A50 00 00 00 00 00 00 00 00 02 00 01 29 05 80 02 00 |...........)....|
00077A60 00 00 00 00 |................|
example6 "gl_FragColor = vec4(cos(gl_FragCoord.xy), 1.0, 0.5)":
00072E0C 41 52 32 30 2D 42 49 4E 01 00 00 00 05 00 00 00 |AR20-BIN........|
00072E1C 05 00 41 25 00 00 00 00 00 00 00 00 00 00 00 00 |..A%............|
00072E2C 00 00 00 00 00 00 00 00 01 00 00 15 00 00 00 00 |................|
00072E3C 05 00 01 26 00 00 00 00 01 00 00 00 05 00 00 00 |...&............|
00072E4C 09 00 00 00 0D 00 00 00 08 00 04 26 00 00 C0 0E |...........&....|
00072E5C 00 00 00 00 00 00 C0 0A 00 00 00 00 00 00 C0 0D |................|
00072E6C 00 00 00 00 00 00 C0 09 00 00 00 00 05 00 01 27 |...............'|
00072E7C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00072E8C 00 00 00 00 05 00 01 28 01 00 00 00 00 00 00 00 |.......(........|
00072E9C 00 00 00 00 05 00 00 00 09 00 00 00 18 00 04 28 |...............(|
00072EAC 40 F2 01 00 00 00 42 45 00 72 01 00 00 10 42 3F |@.....BE.r....B?|
00072EBC E8 A7 00 00 00 F2 41 3F 88 C8 00 00 00 F2 41 3F |......A?......A?|
00072ECC C0 40 00 00 00 F2 41 3F E8 E7 0F 00 00 F2 41 3E |.@....A?......A>|
00072EDC E8 E7 0F 00 00 F2 41 3E E8 E7 0F 00 00 F2 41 3E |......A>......A>|
00072EEC 80 20 00 00 00 F2 41 3F E8 E7 0F 00 00 F2 41 3E |. ....A?......A>|
00072EFC E8 E7 0F 00 00 F2 41 3E E8 E7 0F 00 00 F2 41 3E |......A>......A>|
00072F0C 05 00 06 28 00 00 00 00 00 00 00 00 00 00 00 00 |...(............|
00072F1C 00 00 00 00 00 00 00 00 05 00 01 29 00 00 00 00 |...........)....|
00072F2C 00 00 00 00 00 00 00 00 00 00 00 00 05 00 02 00 |................|
There's some pragmas to enable blending etc:
#pragma profilepragma blendoperation( gl_FragColor, GL_FUNC_ADD, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD, GL_ONE, GL_ONE), #pragma profilepragma depthmask(false), #pragma profilepragma stencilmask(false) and #pragma profilepragma coveragemask(dont_care)