i965/vec4: Fix confusion between SWIZZLE and BRW_SWIZZLE macros.
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 28 Nov 2013 06:21:45 +0000 (22:21 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 12 Feb 2014 22:39:42 +0000 (23:39 +0100)
Most of the VEC4 back-end agrees on src_reg::swizzle being one of the
BRW_SWIZZLE macros defined in brw_reg.h, except in two places where we
use Mesa's SWIZZLE macros.  There is even a doxygen comment saying
that Mesa's macros are the right ones.  They are incompatible swizzle
representations (3 bits vs. 2 bits per component), and the code using
Mesa's works by pure luck.  Fix it.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/i965/brw_vec4.cpp
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp

index 920508118b46a621a6bd05b80c2a6fb2bdb7f169..dd23ed48fe11e0202df70423af88a6e7fb3e8739 100644 (file)
@@ -76,7 +76,7 @@ src_reg::src_reg(register_file file, int reg, const glsl_type *type)
    if (type && (type->is_scalar() || type->is_vector() || type->is_matrix()))
       this->swizzle = swizzle_for_size(type->vector_elements);
    else
-      this->swizzle = SWIZZLE_XYZW;
+      this->swizzle = BRW_SWIZZLE_XYZW;
 }
 
 /** Generic unset register constructor. */
index 1cf74dbbb0ba3be21d808cbe1af927e8716c5f69..cfee16518b5afb6efcf2ba2fb8ffdbd18b930255 100644 (file)
@@ -135,7 +135,7 @@ public:
 
    explicit src_reg(dst_reg reg);
 
-   GLuint swizzle; /**< SWIZZLE_XYZW swizzles from Mesa. */
+   GLuint swizzle; /**< BRW_SWIZZLE_XYZW macros from brw_reg.h. */
    bool negate;
    bool abs;
 
index d5163c78a7b850a61f0cb3b7cb0fb48c874a9065..3bdb2423215e43b116a9d8cdecf491809781e150 100644 (file)
@@ -473,14 +473,14 @@ vec4_visitor::emit_pack_half_2x16(dst_reg dst, src_reg src0)
    /* Give the write-channels of dst the form:
     *   0xhhhh0000
     */
-   tmp_src.swizzle = SWIZZLE_Y;
+   tmp_src.swizzle = BRW_SWIZZLE_YYYY;
    emit(SHL(dst, tmp_src, src_reg(16u)));
 
    /* Finally, give the write-channels of dst the form of packHalf2x16's
     * output:
     *   0xhhhhllll
     */
-   tmp_src.swizzle = SWIZZLE_X;
+   tmp_src.swizzle = BRW_SWIZZLE_XXXX;
    emit(OR(dst, src_reg(dst), tmp_src));
 }