1 Oct 2011 01:24
[PATCH] i965: Fix swizzle related assertion
Ian Romanick <idr <at> freedesktop.org>
2011-09-30 23:24:35 GMT
2011-09-30 23:24:35 GMT
From: Ian Romanick <ian.d.romanick <at> intel.com>
As innocuous as it seemed, ebca47a basically broke the world (e.g.,
>200 piglit regressions). In vec4_visitor::emit_block_move,
src->swizzle was expected to be BRW_SWIZZLE_NOOP before setting it to
a swizzle that would replicate the existing channels of the source
type to a vec4 (e.g., .xyyy for a vec2).
The original assertion seems to have been a little bogus. In addition
to being BRW_SWIZZLE_NOOP, src->swizzle might already be a swizzle
that would replicate the existing channels of the source type to a
vec4. In other words, it might already have the value that we're
about to assign to it.
Signed-off-by: Ian Romanick <ian.d.romanick <at> intel.com>
---
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 5815e31..9420684 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
<at> <at> -1472,7 +1472,8 <at> <at> vec4_visitor::emit_block_move(dst_reg *dst, src_reg *src,
dst->writemask = (1 << type->vector_elements) - 1;
/* Do we need to worry about swizzling a swizzle? */
- assert(src->swizzle == BRW_SWIZZLE_NOOP);
+ assert(src->swizzle == BRW_SWIZZLE_NOOP
+ || src->swizzle == swizzle_for_size(type->vector_elements));
(Continue reading)
RSS Feed