i965: Use implicit backend_reg copy-constructor.
authorMatt Turner <mattst88@gmail.com>
Sat, 21 Nov 2015 05:18:26 +0000 (21:18 -0800)
committerMatt Turner <mattst88@gmail.com>
Tue, 24 Nov 2015 17:58:33 +0000 (09:58 -0800)
In order to do this, we have to change the signature of the
backend_reg(brw_reg) constructor to take a reference to a brw_reg in
order to avoid unresolvable ambiguity about which constructor is
actually being called in the other modifications in this patch.

As far as I understand it, the rule in C++ is that if multiple
constructors are available for parent classes, the one closest to you in
the class heirarchy is closen, but if one of them didn't take a
reference, that screws things up.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/mesa/drivers/dri/i965/brw_shader.h
src/mesa/drivers/dri/i965/brw_vec4.cpp

index 718a22520de7f34c93c0183d9d4774f4418ee06a..abf04cfb89cd2ff8433995ac4f99fd2f630c8fd2 100644 (file)
@@ -42,7 +42,7 @@
 struct backend_reg : public brw_reg
 {
    backend_reg() {}
-   backend_reg(struct brw_reg reg) : brw_reg(reg) {}
+   backend_reg(const struct brw_reg &reg) : brw_reg(reg) {}
 
    bool equals(const backend_reg &r) const;
 
index 9f748dcd1d8b4b194c2a6cb6fdfede65272b2672..9fc08573081fcf4b3701888dde28f0ffd8f095b2 100644 (file)
@@ -79,9 +79,8 @@ src_reg::src_reg(struct brw_reg reg) :
 }
 
 src_reg::src_reg(const dst_reg &reg) :
-   backend_reg(static_cast<struct brw_reg>(reg))
+   backend_reg(reg)
 {
-   this->reg_offset = reg.reg_offset;
    this->reladdr = reg.reladdr;
    this->swizzle = brw_swizzle_for_mask(reg.writemask);
 }
@@ -137,9 +136,8 @@ dst_reg::dst_reg(struct brw_reg reg) :
 }
 
 dst_reg::dst_reg(const src_reg &reg) :
-   backend_reg(static_cast<struct brw_reg>(reg))
+   backend_reg(reg)
 {
-   this->reg_offset = reg.reg_offset;
    this->writemask = brw_mask_for_swizzle(reg.swizzle);
    this->reladdr = reg.reladdr;
 }