diff options
author | Ian Romanick <[email protected]> | 2011-09-30 16:24:35 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2011-10-01 22:16:06 -0700 |
commit | fe006a74f6fd1ddeec778226111938193a995a6c (patch) | |
tree | 572ce28a0bb38615488c8bcfc59f6473d37f358b | |
parent | dd9574d7a585bd470f2fe28f73e6d31430293dc9 (diff) |
i965/vs: Fix swizzle related assertion
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 <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
-rw-r--r-- | 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 5815e31732e..94206842399 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -1472,7 +1472,8 @@ 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)); src->swizzle = swizzle_for_size(type->vector_elements); vec4_instruction *inst = emit(MOV(*dst, *src)); |