We make scalar sources in 3src instructions use subnr instead of swizzles because they don't really use swizzles.
With doubles it is more complicated because we use vstride=0 in more scenarios in which they don't produce scalar regions. Also RepCtrl=1 is not allowed with 64-bit operands, so we should avoid this. --- src/mesa/drivers/dri/i965/brw_vec4.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 45d49e9..190581e 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -1961,9 +1961,12 @@ vec4_visitor::convert_to_hw_regs() if (inst->is_3src(devinfo)) { /* 3-src instructions with scalar sources support arbitrary subnr, * but don't actually use swizzles. Convert swizzle into subnr. + * Skip this for double-precision instructions: RepCtrl=1 is not + * allowed for them and need special handling. */ for (int i = 0; i < 3; i++) { - if (inst->src[i].vstride == BRW_VERTICAL_STRIDE_0) { + if (inst->src[i].vstride == BRW_VERTICAL_STRIDE_0 && + type_sz(inst->src[i].type) < 8) { assert(brw_is_single_value_swizzle(inst->src[i].swizzle)); inst->src[i].subnr += 4 * BRW_GET_SWZ(inst->src[i].swizzle, 0); } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev