radeon/llvm: Don't use lp_build_swizzle_aos() for swizzles

This function assumes that lp_build_context::type is a vector type,
which is not true for r600 or radeonsi.

This fixes an assertion failure using glamor 2D accel.
This commit is contained in:
Tom Stellard 2012-07-12 10:41:39 -04:00
parent 185fc9a5ef
commit f92873be2c

View file

@ -65,14 +65,19 @@ static LLVMValueRef emit_swizzle(
unsigned swizzle_z,
unsigned swizzle_w)
{
unsigned char swizzles[4];
swizzles[0] = swizzle_x;
swizzles[1] = swizzle_y;
swizzles[2] = swizzle_z;
swizzles[3] = swizzle_w;
LLVMValueRef swizzles[4];
LLVMTypeRef i32t =
LLVMInt32TypeInContext(bld_base->base.gallivm->context);
swizzles[0] = LLVMConstInt(i32t, swizzle_x, 0);
swizzles[1] = LLVMConstInt(i32t, swizzle_y, 0);
swizzles[2] = LLVMConstInt(i32t, swizzle_z, 0);
swizzles[3] = LLVMConstInt(i32t, swizzle_w, 0);
return lp_build_swizzle_aos(&bld_base->base, value, swizzles);
return LLVMBuildShuffleVector(bld_base->base.gallivm->builder,
value,
LLVMGetUndef(LLVMTypeOf(value)),
LLVMConstVector(swizzles, 4), "");
}
static LLVMValueRef