i965/vec4: Add vector float immediate infrastructure.
authorMatt Turner <mattst88@gmail.com>
Sun, 9 Mar 2014 01:22:22 +0000 (17:22 -0800)
committerMatt Turner <mattst88@gmail.com>
Wed, 26 Nov 2014 01:29:02 +0000 (17:29 -0800)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vec4.cpp
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_generator.cpp

index f1d59bda8462458608aeed3653a27870b05c81cb..db6f6a38ffabe07f759a8758d66417ea7bd6a020 100644 (file)
@@ -112,6 +112,18 @@ src_reg::src_reg(int32_t i)
    this->fixed_hw_reg.dw1.d = i;
 }
 
+src_reg::src_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3)
+{
+   init();
+
+   this->file = IMM;
+   this->type = BRW_REGISTER_TYPE_VF;
+   this->fixed_hw_reg.dw1.ud = (vf0 <<  0) |
+                               (vf1 <<  8) |
+                               (vf2 << 16) |
+                               (vf3 << 24);
+}
+
 src_reg::src_reg(struct brw_reg reg)
 {
    init();
@@ -1396,6 +1408,13 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
          case BRW_REGISTER_TYPE_UD:
             fprintf(file, "%uU", inst->src[i].fixed_hw_reg.dw1.ud);
             break;
+         case BRW_REGISTER_TYPE_VF:
+            fprintf(stderr, "[%-gF, %-gF, %-gF, %-gF]",
+                    brw_vf_to_float((inst->src[i].fixed_hw_reg.dw1.ud >>  0) & 0xff),
+                    brw_vf_to_float((inst->src[i].fixed_hw_reg.dw1.ud >>  8) & 0xff),
+                    brw_vf_to_float((inst->src[i].fixed_hw_reg.dw1.ud >> 16) & 0xff),
+                    brw_vf_to_float((inst->src[i].fixed_hw_reg.dw1.ud >> 24) & 0xff));
+            break;
          default:
             fprintf(file, "???");
             break;
index aac5954557c75181470e0e1a8ee6b2f7fcaa5960..a8e972aed5108a7a54edee74f343ceeb9146ede7 100644 (file)
@@ -102,6 +102,7 @@ public:
    src_reg(float f);
    src_reg(uint32_t u);
    src_reg(int32_t i);
+   src_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3);
    src_reg(struct brw_reg reg);
 
    bool equals(const src_reg &r) const;
index 6a70a2f3839121610fde0ae55fc449f60d4ad849..058b2baa09837781cff7a19452162d98696bc09d 100644 (file)
@@ -92,6 +92,9 @@ vec4_instruction::get_src(const struct brw_vec4_prog_data *prog_data, int i)
       case BRW_REGISTER_TYPE_UD:
         brw_reg = brw_imm_ud(src[i].fixed_hw_reg.dw1.ud);
         break;
+      case BRW_REGISTER_TYPE_VF:
+         brw_reg = brw_imm_vf(src[i].fixed_hw_reg.dw1.ud);
+         break;
       default:
         unreachable("not reached");
       }