On Fri, Feb 6, 2015 at 6:42 AM, Francisco Jerez <curroje...@riseup.net> wrote: > If the source type differs from the original type of the constant we > need to bit-cast it before propagating, otherwise the original type > information will be lost. If the constant was a vector float there > isn't much we can do, because the result of bit-casting the component > values of a vector float cannot itself be represented as an immediate. > --- > src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp > b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp > index 81567d2..0a961ce 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp > +++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp > @@ -113,6 +113,16 @@ try_constant_propagate(struct brw_context *brw, > vec4_instruction *inst, > if (value.file != IMM) > return false; > > + if (value.type == BRW_REGISTER_TYPE_VF) { > + /* The result of bit-casting the component values of a vector float > + * cannot in general be represented as an immediate. > + */ > + if (inst->src[arg].type != BRW_REGISTER_TYPE_F) > + return false; > + } else { > + value.type = inst->src[arg].type; > + } > + > if (inst->src[arg].abs) { > if (!brw_abs_immediate(value.type, &value.fixed_hw_reg)) { > return false;
Wow. Did you hit this in practice? Actually, I suspect this might be the cause of https://bugs.freedesktop.org/show_bug.cgi?id=86811 (only reacquired a BDW recently, so never investigated) Hm, but running the test with INTEL_DEVID_OVERRIDE and INTEL_DEBUG=vec4vs doesn't show the VF immediate being propagated into the shift, so perhaps it's not the problem. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev