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 <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:

committed by
Eric Anholt

parent
dd9574d7a5
commit
fe006a74f6
@@ -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));
|
||||
|
Reference in New Issue
Block a user