Exemple #1
0
static void alloc_regs( struct brw_sf_compile *c )
{
    GLuint reg, i;

    /* Values computed by fixed function unit:
     */
    c->pv  = retype(brw_vec1_grf(1, 1), BRW_REGISTER_TYPE_D);
    c->det = brw_vec1_grf(1, 2);
    c->dx0 = brw_vec1_grf(1, 3);
    c->dx2 = brw_vec1_grf(1, 4);
    c->dy0 = brw_vec1_grf(1, 5);
    c->dy2 = brw_vec1_grf(1, 6);

    /* z and 1/w passed in seperately:
     */
    c->z[0]     = brw_vec1_grf(2, 0);
    c->inv_w[0] = brw_vec1_grf(2, 1);
    c->z[1]     = brw_vec1_grf(2, 2);
    c->inv_w[1] = brw_vec1_grf(2, 3);
    c->z[2]     = brw_vec1_grf(2, 4);
    c->inv_w[2] = brw_vec1_grf(2, 5);

    /* The vertices:
     */
    reg = 3;
    for (i = 0; i < c->nr_verts; i++) {
        c->vert[i] = brw_vec8_grf(reg, 0);
        reg += c->nr_attr_regs;
    }

    /* Temporaries, allocated after last vertex reg.
     */
    c->inv_det = brw_vec1_grf(reg, 0);
    reg++;
    c->a1_sub_a0 = brw_vec8_grf(reg, 0);
    reg++;
    c->a2_sub_a0 = brw_vec8_grf(reg, 0);
    reg++;
    c->tmp = brw_vec8_grf(reg, 0);
    reg++;

    /* Note grf allocation:
     */
    c->prog_data.total_grf = reg;


    /* Outputs of this program - interpolation coefficients for
     * rasterization:
     */
    c->m1Cx = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 1, 0);
    c->m2Cy = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 2, 0);
    c->m3C0 = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 3, 0);
}
static void
gen_PLN_MRF_GRF_GRF(struct brw_codegen *p)
{
   struct brw_reg m6 = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 6, 0);
   struct brw_reg interp = brw_vec1_grf(2, 0);
   struct brw_reg g4 = brw_vec8_grf(4, 0);

   brw_PLN(p, m6, interp, g4);
}
static void
gen_ADD_MRF_GRF_GRF(struct brw_codegen *p)
{
   struct brw_reg m6 = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 6, 0);
   struct brw_reg g2 = brw_vec8_grf(2, 0);
   struct brw_reg g4 = brw_vec8_grf(4, 0);

   brw_ADD(p, m6, g2, g4);
}