nv50: alloc_reg on reg_instance
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Wed, 30 Dec 2009 23:37:47 +0000 (00:37 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 31 Dec 2009 13:34:26 +0000 (14:34 +0100)
If we create multiple instances of an nv50_reg referencing
them same resource, register allocation from alloc_reg has
to be done with the original nv50_reg.

src/gallium/drivers/nv50/nv50_program.c

index 739621a5b32ce6d550720317dea34fec919bb9f2..295725a6c06531cf1ad04146368cb6e8b867989b 100644 (file)
@@ -163,20 +163,6 @@ struct nv50_pc {
        uint8_t edgeflag_out;
 };
 
-static INLINE struct nv50_reg *
-reg_instance(struct nv50_pc *pc, struct nv50_reg *reg)
-{
-       struct nv50_reg *ri;
-
-       assert(pc->reg_instance_nr < 16);
-       ri = &pc->reg_instances[pc->reg_instance_nr++];
-       if (reg) {
-               *ri = *reg;
-               reg->mod = 0;
-       }
-       return ri;
-}
-
 static INLINE void
 ctor_reg(struct nv50_reg *reg, unsigned type, int index, int hw)
 {
@@ -255,6 +241,21 @@ alloc_reg(struct nv50_pc *pc, struct nv50_reg *reg)
        assert(0);
 }
 
+static INLINE struct nv50_reg *
+reg_instance(struct nv50_pc *pc, struct nv50_reg *reg)
+{
+       struct nv50_reg *ri;
+
+       assert(pc->reg_instance_nr < 16);
+       ri = &pc->reg_instances[pc->reg_instance_nr++];
+       if (reg) {
+               alloc_reg(pc, reg);
+               *ri = *reg;
+               reg->mod = 0;
+       }
+       return ri;
+}
+
 /* XXX: For shaders that aren't executed linearly (e.g. shaders that
  * contain loops), we need to assign all hw regs to TGSI TEMPs early,
  * lest we risk temp_temps overwriting regs alloc'd "later".