diff options
author | Matt Turner <[email protected]> | 2015-11-19 21:51:37 -0800 |
---|---|---|
committer | Matt Turner <[email protected]> | 2015-11-24 09:58:33 -0800 |
commit | 2d8c5299032d229c8f6e936db5644cd53716e6c1 (patch) | |
tree | d2857fc24dd94a099b25e7c7460968f2cab3ea99 /src/mesa/drivers/dri/i965/brw_shader.h | |
parent | 799f924073c62c3a012c48a51895b46ad621e36c (diff) |
i965: Prevent implicit upcasts to brw_reg.
Now that backend_reg inherits from brw_reg, we have to be careful to
avoid the object slicing problem.
Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_shader.h')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_shader.h | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h index abf04cfb89c..d78e552934e 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.h +++ b/src/mesa/drivers/dri/i965/brw_shader.h @@ -39,11 +39,25 @@ #define MAX_VGRF_SIZE 16 #ifdef __cplusplus -struct backend_reg : public brw_reg +struct backend_reg : private brw_reg { backend_reg() {} backend_reg(const struct brw_reg ®) : brw_reg(reg) {} + const brw_reg &as_brw_reg() const + { + assert(file == ARF || file == FIXED_GRF || file == MRF || file == IMM); + assert(reg_offset == 0); + return static_cast<const brw_reg &>(*this); + } + + brw_reg &as_brw_reg() + { + assert(file == ARF || file == FIXED_GRF || file == MRF || file == IMM); + assert(reg_offset == 0); + return static_cast<brw_reg &>(*this); + } + bool equals(const backend_reg &r) const; bool is_zero() const; @@ -63,6 +77,25 @@ struct backend_reg : public brw_reg * For uniforms, this is in units of 1 float. */ uint16_t reg_offset; + + using brw_reg::type; + using brw_reg::file; + using brw_reg::negate; + using brw_reg::abs; + using brw_reg::address_mode; + using brw_reg::subnr; + using brw_reg::nr; + + using brw_reg::swizzle; + using brw_reg::writemask; + using brw_reg::indirect_offset; + using brw_reg::vstride; + using brw_reg::width; + using brw_reg::hstride; + + using brw_reg::f; + using brw_reg::d; + using brw_reg::ud; }; #endif |