mesa: include mtypes.h less
[mesa.git] / src / mesa / program / program_parse.y
index 40bb92be0975ec9e160fa7827209f951efadc494..415ff2a28ecc3920570a488f11c3b90971d97d1a 100644 (file)
@@ -27,6 +27,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "main/errors.h"
 #include "main/mtypes.h"
 #include "main/imports.h"
 #include "program/program.h"
@@ -45,13 +46,13 @@ static struct asm_symbol *declare_variable(struct asm_parser_state *state,
     char *name, enum asm_type t, struct YYLTYPE *locp);
 
 static int add_state_reference(struct gl_program_parameter_list *param_list,
-    const gl_state_index tokens[STATE_LENGTH]);
+    const gl_state_index16 tokens[STATE_LENGTH]);
 
 static int initialize_symbol_from_state(struct gl_program *prog,
-    struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);
+    struct asm_symbol *param_var, const gl_state_index16 tokens[STATE_LENGTH]);
 
 static int initialize_symbol_from_param(struct gl_program *prog,
-    struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);
+    struct asm_symbol *param_var, const gl_state_index16 tokens[STATE_LENGTH]);
 
 static int initialize_symbol_from_const(struct gl_program *prog,
     struct asm_symbol *param_var, const struct asm_vector *vec,
@@ -136,7 +137,7 @@ static struct asm_instruction *asm_instruction_copy_ctor(
    unsigned attrib;
    int integer;
    float real;
-   gl_state_index state[STATE_LENGTH];
+   gl_state_index16 state[STATE_LENGTH];
    int negate;
    struct asm_vector vector;
    enum prog_opcode opcode;
@@ -186,7 +187,6 @@ static struct asm_instruction *asm_instruction_copy_ctor(
 %token TEX_SHADOW1D TEX_SHADOW2D TEX_SHADOWRECT
 %token TEX_ARRAY1D TEX_ARRAY2D TEX_ARRAYSHADOW1D TEX_ARRAYSHADOW2D 
 %token VERTEX VTXATTRIB
-%token WEIGHT
 
 %token <string> IDENTIFIER USED_IDENTIFIER
 %type <string> string
@@ -212,8 +212,6 @@ static struct asm_instruction *asm_instruction_copy_ctor(
 %type <sym> addrReg
 %type <swiz_mask> addrComponent addrWriteMask
 
-%type <dst_reg> ccMaskRule ccTest ccMaskRule2 ccTest2 optionalCcMask
-
 %type <result> resultBinding resultColBinding
 %type <integer> optFaceType optColorType
 %type <integer> optResultFaceType optResultColorType
@@ -350,7 +348,7 @@ statement: instruction ';'
              state->inst_tail = $1;
              $1->next = NULL;
 
-             state->prog->NumInstructions++;
+              state->prog->arb.NumInstructions++;
           }
        }
        | namingStatement ';'
@@ -359,12 +357,12 @@ statement: instruction ';'
 instruction: ALU_instruction
        {
           $$ = $1;
-          state->prog->NumAluInstructions++;
+           state->prog->arb.NumAluInstructions++;
        }
        | TexInstruction
        {
           $$ = $1;
-          state->prog->NumTexInstructions++;
+           state->prog->arb.NumTexInstructions++;
        }
        ;
 
@@ -390,8 +388,6 @@ ARL_instruction: ARL maskedAddrReg ',' scalarSrcReg
 
 VECTORop_instruction: VECTOR_OP maskedDstReg ',' swizzleSrcReg
        {
-          if ($1.Opcode == OPCODE_DDY)
-             state->fragment.UsesDFdy = 1;
           $$ = asm_instruction_copy_ctor(& $1, & $2, & $4, NULL, NULL);
        }
        ;
@@ -557,21 +553,6 @@ scalarSrcReg: optionalSign scalarUse
              $$.Base.Negate = ~$$.Base.Negate;
           }
        }
-       | optionalSign '|' scalarUse '|'
-       {
-          $$ = $3;
-
-          if (!state->option.NV_fragment) {
-             yyerror(& @2, state, "unexpected character '|'");
-             YYERROR;
-          }
-
-          if ($1) {
-             $$.Base.Negate = ~$$.Base.Negate;
-          }
-
-          $$.Base.Abs = 1;
-       }
        ;
 
 scalarUse:  srcReg scalarSuffix
@@ -581,23 +562,6 @@ scalarUse:  srcReg scalarSuffix
           $$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
                                                    $2.swizzle);
        }
-       | paramConstScalarUse
-       {
-          struct asm_symbol temp_sym;
-
-          if (!state->option.NV_fragment) {
-             yyerror(& @1, state, "expected scalar suffix");
-             YYERROR;
-          }
-
-          memset(& temp_sym, 0, sizeof(temp_sym));
-          temp_sym.param_binding_begin = ~0;
-          initialize_symbol_from_const(state->prog, & temp_sym, & $1, GL_TRUE);
-
-          set_src_reg_swz(& $$, PROGRAM_CONSTANT,
-                           temp_sym.param_binding_begin,
-                           temp_sym.param_binding_swizzle);
-       }
        ;
 
 swizzleSrcReg: optionalSign srcReg swizzleSuffix
@@ -611,32 +575,12 @@ swizzleSrcReg: optionalSign srcReg swizzleSuffix
           $$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
                                                    $3.swizzle);
        }
-       | optionalSign '|' srcReg swizzleSuffix '|'
-       {
-          $$ = $3;
-
-          if (!state->option.NV_fragment) {
-             yyerror(& @2, state, "unexpected character '|'");
-             YYERROR;
-          }
-
-          if ($1) {
-             $$.Base.Negate = ~$$.Base.Negate;
-          }
-
-          $$.Base.Abs = 1;
-          $$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
-                                                   $4.swizzle);
-       }
-
        ;
 
-maskedDstReg: dstReg optionalMask optionalCcMask
+maskedDstReg: dstReg optionalMask
        {
           $$ = $1;
           $$.WriteMask = $2.mask;
-          $$.CondMask = $3.CondMask;
-          $$.CondSwizzle = $3.CondSwizzle;
 
           if ($$.File == PROGRAM_OUTPUT) {
              /* Technically speaking, this should check that it is in
@@ -650,7 +594,7 @@ maskedDstReg: dstReg optionalMask optionalCcMask
                 YYERROR;
              }
 
-             state->prog->OutputsWritten |= BITFIELD64_BIT($$.Index);
+              state->prog->info.outputs_written |= BITFIELD64_BIT($$.Index);
           }
        }
        ;
@@ -780,7 +724,7 @@ extSwizSel: INTEGER
 srcReg: USED_IDENTIFIER /* temporaryReg | progParamSingle */
        {
           struct asm_symbol *const s = (struct asm_symbol *)
-             _mesa_symbol_table_find_symbol(state->st, 0, $1);
+              _mesa_symbol_table_find_symbol(state->st, $1);
 
           free($1);
 
@@ -808,7 +752,7 @@ srcReg: USED_IDENTIFIER /* temporaryReg | progParamSingle */
              break;
           case at_attrib:
              set_src_reg(& $$, PROGRAM_INPUT, s->attrib_binding);
-             state->prog->InputsRead |= BITFIELD64_BIT($$.Base.Index);
+              state->prog->info.inputs_read |= BITFIELD64_BIT($$.Base.Index);
 
              if (!validate_inputs(& @1, state)) {
                 YYERROR;
@@ -823,7 +767,7 @@ srcReg: USED_IDENTIFIER /* temporaryReg | progParamSingle */
        | attribBinding
        {
           set_src_reg(& $$, PROGRAM_INPUT, $1);
-          state->prog->InputsRead |= BITFIELD64_BIT($$.Base.Index);
+           state->prog->info.inputs_read |= BITFIELD64_BIT($$.Base.Index);
 
           if (!validate_inputs(& @1, state)) {
              YYERROR;
@@ -841,7 +785,7 @@ srcReg: USED_IDENTIFIER /* temporaryReg | progParamSingle */
           $$.Base.File = $1->param_binding_type;
 
           if ($3.Base.RelAddr) {
-              state->prog->IndirectRegisterFiles |= (1 << $$.Base.File);
+              state->prog->arb.IndirectRegisterFiles |= (1 << $$.Base.File);
              $1->param_accessed_indirectly = 1;
 
              $$.Base.RelAddr = 1;
@@ -868,7 +812,7 @@ dstReg: resultBinding
        | USED_IDENTIFIER /* temporaryReg | vertexResultReg */
        {
           struct asm_symbol *const s = (struct asm_symbol *)
-             _mesa_symbol_table_find_symbol(state->st, 0, $1);
+              _mesa_symbol_table_find_symbol(state->st, $1);
 
           free($1);
 
@@ -897,7 +841,7 @@ dstReg: resultBinding
 progParamArray: USED_IDENTIFIER
        {
           struct asm_symbol *const s = (struct asm_symbol *)
-             _mesa_symbol_table_find_symbol(state->st, 0, $1);
+              _mesa_symbol_table_find_symbol(state->st, $1);
 
           free($1);
 
@@ -970,7 +914,7 @@ addrRegNegOffset: INTEGER
 addrReg: USED_IDENTIFIER
        {
           struct asm_symbol *const s = (struct asm_symbol *)
-             _mesa_symbol_table_find_symbol(state->st, 0, $1);
+              _mesa_symbol_table_find_symbol(state->st, $1);
 
           free($1);
 
@@ -1022,79 +966,6 @@ optionalMask: MASK4 | MASK3 | MASK2 | MASK1
        |              { $$.swizzle = SWIZZLE_NOOP; $$.mask = WRITEMASK_XYZW; }
        ;
 
-optionalCcMask: '(' ccTest ')'
-       {
-          $$ = $2;
-       }
-       | '(' ccTest2 ')'
-       {
-          $$ = $2;
-       }
-       |
-       {
-          $$.CondMask = COND_TR;
-          $$.CondSwizzle = SWIZZLE_NOOP;
-       }
-       ;
-
-ccTest: ccMaskRule swizzleSuffix
-       {
-          $$ = $1;
-          $$.CondSwizzle = $2.swizzle;
-       }
-       ;
-
-ccTest2: ccMaskRule2 swizzleSuffix
-       {
-          $$ = $1;
-          $$.CondSwizzle = $2.swizzle;
-       }
-       ;
-
-ccMaskRule: IDENTIFIER
-       {
-          const int cond = _mesa_parse_cc($1);
-          if ((cond == 0) || ($1[2] != '\0')) {
-             char *const err_str =
-                make_error_string("invalid condition code \"%s\"", $1);
-
-             yyerror(& @1, state, (err_str != NULL)
-                     ? err_str : "invalid condition code");
-
-             if (err_str != NULL) {
-                free(err_str);
-             }
-
-             YYERROR;
-          }
-
-          $$.CondMask = cond;
-          $$.CondSwizzle = SWIZZLE_NOOP;
-       }
-       ;
-
-ccMaskRule2: USED_IDENTIFIER
-       {
-          const int cond = _mesa_parse_cc($1);
-          if ((cond == 0) || ($1[2] != '\0')) {
-             char *const err_str =
-                make_error_string("invalid condition code \"%s\"", $1);
-
-             yyerror(& @1, state, (err_str != NULL)
-                     ? err_str : "invalid condition code");
-
-             if (err_str != NULL) {
-                free(err_str);
-             }
-
-             YYERROR;
-          }
-
-          $$.CondMask = cond;
-          $$.CondSwizzle = SWIZZLE_NOOP;
-       }
-       ;
-
 namingStatement: ATTRIB_statement
        | PARAM_statement
        | TEMP_statement
@@ -1136,10 +1007,6 @@ vtxAttribItem: POSITION
        {
           $$ = VERT_ATTRIB_POS;
        }
-       | WEIGHT vtxOptWeightNum
-       {
-          $$ = VERT_ATTRIB_WEIGHT;
-       }
        | NORMAL
        {
           $$ = VERT_ATTRIB_NORMAL;
@@ -1178,7 +1045,6 @@ vtxAttribNum: INTEGER
        }
        ;
 
-vtxOptWeightNum:  | '[' vtxWeightNum ']';
 vtxWeightNum: INTEGER;
 
 fragAttribItem: POSITION
@@ -1923,46 +1789,7 @@ optionalSign: '+'        { $$ = FALSE; }
        |                { $$ = FALSE; }
        ;
 
-TEMP_statement: optVarSize TEMP { $<integer>$ = $2; } varNameList
-       ;
-
-optVarSize: string
-       {
-          /* NV_fragment_program_option defines the size qualifiers in a
-           * fairly broken way.  "SHORT" or "LONG" can optionally be used
-           * before TEMP or OUTPUT.  However, neither is a reserved word!
-           * This means that we have to parse it as an identifier, then check
-           * to make sure it's one of the valid values.  *sigh*
-           *
-           * In addition, the grammar in the extension spec does *not* allow
-           * the size specifier to be optional, but all known implementations
-           * do.
-           */
-          if (!state->option.NV_fragment) {
-             yyerror(& @1, state, "unexpected IDENTIFIER");
-             YYERROR;
-          }
-
-          if (strcmp("SHORT", $1) == 0) {
-          } else if (strcmp("LONG", $1) == 0) {
-          } else {
-             char *const err_str =
-                make_error_string("invalid storage size specifier \"%s\"",
-                                  $1);
-
-             yyerror(& @1, state, (err_str != NULL)
-                     ? err_str : "invalid storage size specifier");
-
-             if (err_str != NULL) {
-                free(err_str);
-             }
-
-             YYERROR;
-          }
-       }
-       |
-       {
-       }
+TEMP_statement: TEMP { $<integer>$ = $1; } varNameList
        ;
 
 ADDRESS_statement: ADDRESS { $<integer>$ = $1; } varNameList
@@ -1984,16 +1811,16 @@ varNameList: varNameList ',' IDENTIFIER
        }
        ;
 
-OUTPUT_statement: optVarSize OUTPUT IDENTIFIER '=' resultBinding
+OUTPUT_statement: OUTPUT IDENTIFIER '=' resultBinding
        {
           struct asm_symbol *const s =
-             declare_variable(state, $3, at_output, & @3);
+             declare_variable(state, $2, at_output, & @2);
 
           if (s == NULL) {
-             free($3);
+             free($2);
              YYERROR;
           } else {
-             s->output_binding = $5;
+             s->output_binding = $4;
           }
        }
        ;
@@ -2196,9 +2023,9 @@ legacyTexUnitNum: INTEGER
 ALIAS_statement: ALIAS IDENTIFIER '=' USED_IDENTIFIER
        {
           struct asm_symbol *exist = (struct asm_symbol *)
-             _mesa_symbol_table_find_symbol(state->st, 0, $2);
+              _mesa_symbol_table_find_symbol(state->st, $2);
           struct asm_symbol *target = (struct asm_symbol *)
-             _mesa_symbol_table_find_symbol(state->st, 0, $4);
+              _mesa_symbol_table_find_symbol(state->st, $4);
 
           free($4);
 
@@ -2214,7 +2041,7 @@ ALIAS_statement: ALIAS IDENTIFIER '=' USED_IDENTIFIER
                      "undefined variable binding in ALIAS statement");
              YYERROR;
           } else {
-             _mesa_symbol_table_add_symbol(state->st, 0, $2, target);
+              _mesa_symbol_table_add_symbol(state->st, $2, target);
           }
        }
        ;
@@ -2241,9 +2068,6 @@ asm_instruction_set_operands(struct asm_instruction *inst,
       inst->Base.DstReg = *dst;
    }
 
-   /* The only instruction that doesn't have any source registers is the
-    * condition-code based KIL instruction added by NV_fragment_program_option.
-    */
    if (src0 != NULL) {
       inst->Base.SrcReg[0] = src0->Base;
       inst->SrcReg[0] = *src0;
@@ -2299,10 +2123,7 @@ asm_instruction_copy_ctor(const struct prog_instruction *base,
    if (inst) {
       _mesa_init_instructions(& inst->Base, 1);
       inst->Base.Opcode = base->Opcode;
-      inst->Base.CondUpdate = base->CondUpdate;
-      inst->Base.CondDst = base->CondDst;
       inst->Base.Saturate = base->Saturate;
-      inst->Base.Precision = base->Precision;
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
@@ -2317,8 +2138,6 @@ init_dst_reg(struct prog_dst_register *r)
    memset(r, 0, sizeof(*r));
    r->File = PROGRAM_UNDEFINED;
    r->WriteMask = WRITEMASK_XYZW;
-   r->CondMask = COND_TR;
-   r->CondSwizzle = SWIZZLE_NOOP;
 }
 
 
@@ -2339,8 +2158,6 @@ set_dst_reg(struct prog_dst_register *r, gl_register_file file, GLint index)
    r->File = file;
    r->Index = index;
    r->WriteMask = WRITEMASK_XYZW;
-   r->CondMask = COND_TR;
-   r->CondSwizzle = SWIZZLE_NOOP;
 }
 
 
@@ -2396,9 +2213,30 @@ set_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,
 int
 validate_inputs(struct YYLTYPE *locp, struct asm_parser_state *state)
 {
-   const GLbitfield64 inputs = state->prog->InputsRead | state->InputsBound;
+   const GLbitfield64 inputs = state->prog->info.inputs_read | state->InputsBound;
+   GLbitfield ff_inputs = 0;
 
-   if (((inputs & VERT_BIT_FF_ALL) & (inputs >> VERT_ATTRIB_GENERIC0)) != 0) {
+   /* Since Mesa internal attribute indices are different from
+    * how NV_vertex_program defines attribute aliasing, we have to construct
+    * a separate usage mask based on how the aliasing is defined.
+    *
+    * Note that attribute aliasing is optional if NV_vertex_program is
+    * unsupported.
+    */
+   if (inputs & VERT_BIT_POS)
+      ff_inputs |= 1 << 0;
+   if (inputs & VERT_BIT_NORMAL)
+      ff_inputs |= 1 << 2;
+   if (inputs & VERT_BIT_COLOR0)
+      ff_inputs |= 1 << 3;
+   if (inputs & VERT_BIT_COLOR1)
+      ff_inputs |= 1 << 4;
+   if (inputs & VERT_BIT_FOG)
+      ff_inputs |= 1 << 5;
+
+   ff_inputs |= ((inputs & VERT_BIT_TEX_ALL) >> VERT_ATTRIB_TEX0) << 8;
+
+   if ((ff_inputs & (inputs >> VERT_ATTRIB_GENERIC0)) != 0) {
       yyerror(locp, state, "illegal use of generic attribute and name attribute");
       return 0;
    }
@@ -2413,7 +2251,7 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
 {
    struct asm_symbol *s = NULL;
    struct asm_symbol *exist = (struct asm_symbol *)
-      _mesa_symbol_table_find_symbol(state->st, 0, name);
+      _mesa_symbol_table_find_symbol(state->st, name);
 
 
    if (exist != NULL) {
@@ -2425,18 +2263,19 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
 
       switch (t) {
       case at_temp:
-        if (state->prog->NumTemporaries >= state->limits->MaxTemps) {
+         if (state->prog->arb.NumTemporaries >= state->limits->MaxTemps) {
            yyerror(locp, state, "too many temporaries declared");
            free(s);
            return NULL;
         }
 
-        s->temp_binding = state->prog->NumTemporaries;
-        state->prog->NumTemporaries++;
+         s->temp_binding = state->prog->arb.NumTemporaries;
+         state->prog->arb.NumTemporaries++;
         break;
 
       case at_address:
-        if (state->prog->NumAddressRegs >= state->limits->MaxAddressRegs) {
+         if (state->prog->arb.NumAddressRegs >=
+             state->limits->MaxAddressRegs) {
            yyerror(locp, state, "too many address registers declared");
            free(s);
            return NULL;
@@ -2444,14 +2283,14 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
 
         /* FINISHME: Add support for multiple address registers.
          */
-        state->prog->NumAddressRegs++;
+         state->prog->arb.NumAddressRegs++;
         break;
 
       default:
         break;
       }
 
-      _mesa_symbol_table_add_symbol(state->st, 0, s->name, s);
+      _mesa_symbol_table_add_symbol(state->st, s->name, s);
       s->next = state->sym;
       state->sym = s;
    }
@@ -2461,7 +2300,7 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
 
 
 int add_state_reference(struct gl_program_parameter_list *param_list,
-                       const gl_state_index tokens[STATE_LENGTH])
+                       const gl_state_index16 tokens[STATE_LENGTH])
 {
    const GLuint size = 4; /* XXX fix */
    char *name;
@@ -2469,7 +2308,7 @@ int add_state_reference(struct gl_program_parameter_list *param_list,
 
    name = _mesa_program_state_string(tokens);
    index = _mesa_add_parameter(param_list, PROGRAM_STATE_VAR, name,
-                               size, GL_NONE, NULL, tokens);
+                               size, GL_NONE, NULL, tokens, true);
    param_list->StateFlags |= _mesa_program_state_flags(tokens);
 
    /* free name string here since we duplicated it in add_parameter() */
@@ -2482,10 +2321,10 @@ int add_state_reference(struct gl_program_parameter_list *param_list,
 int
 initialize_symbol_from_state(struct gl_program *prog,
                             struct asm_symbol *param_var, 
-                            const gl_state_index tokens[STATE_LENGTH])
+                            const gl_state_index16 tokens[STATE_LENGTH])
 {
    int idx = -1;
-   gl_state_index state_tokens[STATE_LENGTH];
+   gl_state_index16 state_tokens[STATE_LENGTH];
 
 
    memcpy(state_tokens, tokens, sizeof(state_tokens));
@@ -2534,10 +2373,10 @@ initialize_symbol_from_state(struct gl_program *prog,
 int
 initialize_symbol_from_param(struct gl_program *prog,
                             struct asm_symbol *param_var, 
-                            const gl_state_index tokens[STATE_LENGTH])
+                            const gl_state_index16 tokens[STATE_LENGTH])
 {
    int idx = -1;
-   gl_state_index state_tokens[STATE_LENGTH];
+   gl_state_index16 state_tokens[STATE_LENGTH];
 
 
    memcpy(state_tokens, tokens, sizeof(state_tokens));
@@ -2689,7 +2528,7 @@ _mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *st
 
    /* Make a copy of the program string and force it to be NUL-terminated.
     */
-   strz = (GLubyte *) malloc(len + 1);
+   strz = (GLubyte *) ralloc_size(state->mem_ctx, len + 1);
    if (strz == NULL) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glProgramStringARB");
       return GL_FALSE;
@@ -2742,41 +2581,43 @@ _mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *st
    
    /* Add one instruction to store the "END" instruction.
     */
-   state->prog->Instructions =
-      _mesa_alloc_instructions(state->prog->NumInstructions + 1);
+   state->prog->arb.Instructions =
+      rzalloc_array(state->mem_ctx, struct prog_instruction,
+                    state->prog->arb.NumInstructions + 1);
 
-   if (state->prog->Instructions == NULL) {
+   if (state->prog->arb.Instructions == NULL) {
       goto error;
    }
 
    inst = state->inst_head;
-   for (i = 0; i < state->prog->NumInstructions; i++) {
+   for (i = 0; i < state->prog->arb.NumInstructions; i++) {
       struct asm_instruction *const temp = inst->next;
 
-      state->prog->Instructions[i] = inst->Base;
+      state->prog->arb.Instructions[i] = inst->Base;
       inst = temp;
    }
 
    /* Finally, tag on an OPCODE_END instruction */
    {
-      const GLuint numInst = state->prog->NumInstructions;
-      _mesa_init_instructions(state->prog->Instructions + numInst, 1);
-      state->prog->Instructions[numInst].Opcode = OPCODE_END;
+      const GLuint numInst = state->prog->arb.NumInstructions;
+      _mesa_init_instructions(state->prog->arb.Instructions + numInst, 1);
+      state->prog->arb.Instructions[numInst].Opcode = OPCODE_END;
    }
-   state->prog->NumInstructions++;
+   state->prog->arb.NumInstructions++;
 
-   state->prog->NumParameters = state->prog->Parameters->NumParameters;
-   state->prog->NumAttributes = _mesa_bitcount_64(state->prog->InputsRead);
+   state->prog->arb.NumParameters = state->prog->Parameters->NumParameters;
+   state->prog->arb.NumAttributes =
+      _mesa_bitcount_64(state->prog->info.inputs_read);
 
    /*
     * Initialize native counts to logical counts.  The device driver may
     * change them if program is translated into a hardware program.
     */
-   state->prog->NumNativeInstructions = state->prog->NumInstructions;
-   state->prog->NumNativeTemporaries = state->prog->NumTemporaries;
-   state->prog->NumNativeParameters = state->prog->NumParameters;
-   state->prog->NumNativeAttributes = state->prog->NumAttributes;
-   state->prog->NumNativeAddressRegs = state->prog->NumAddressRegs;
+   state->prog->arb.NumNativeInstructions = state->prog->arb.NumInstructions;
+   state->prog->arb.NumNativeTemporaries = state->prog->arb.NumTemporaries;
+   state->prog->arb.NumNativeParameters = state->prog->arb.NumParameters;
+   state->prog->arb.NumNativeAttributes = state->prog->arb.NumAttributes;
+   state->prog->arb.NumNativeAddressRegs = state->prog->arb.NumAddressRegs;
 
    result = GL_TRUE;