return rgba;
}
+/**
+ * Convert from <n x i32> packed GB_GR to <4n x i8> RGBA AoS
+ */
+static LLVMValueRef
+gbgr_to_rgba_aos(struct gallivm_state *gallivm,
+ unsigned n,
+ LLVMValueRef packed,
+ LLVMValueRef i)
+{
+ LLVMValueRef r, g, b;
+ LLVMValueRef rgba;
+
+ yuyv_to_yuv_soa(gallivm, n, packed, i, &g, &b, &r);
+ rgba = rgb_to_rgba_aos(gallivm, n, r, g, b);
+
+ return rgba;
+}
+
+/**
+ * Convert from <n x i32> packed BG_RG to <4n x i8> RGBA AoS
+ */
+static LLVMValueRef
+bgrg_to_rgba_aos(struct gallivm_state *gallivm,
+ unsigned n,
+ LLVMValueRef packed,
+ LLVMValueRef i)
+{
+ LLVMValueRef r, g, b;
+ LLVMValueRef rgba;
+
+ uyvy_to_yuv_soa(gallivm, n, packed, i, &g, &b, &r);
+ rgba = rgb_to_rgba_aos(gallivm, n, r, g, b);
+
+ return rgba;
+}
+
/**
* @param n is the number of pixels processed
* @param packed is a <n x i32> vector with the packed YUYV blocks
case PIPE_FORMAT_R8G8_R8B8_UNORM:
rgba = rgrb_to_rgba_aos(gallivm, n, packed, i);
break;
+ case PIPE_FORMAT_G8B8_G8R8_UNORM:
+ rgba = gbgr_to_rgba_aos(gallivm, n, packed, i);
+ break;
+ case PIPE_FORMAT_B8G8_R8G8_UNORM:
+ rgba = bgrg_to_rgba_aos(gallivm, n, packed, i);
+ break;
default:
assert(0);
rgba = LLVMGetUndef(LLVMVectorType(LLVMInt8TypeInContext(gallivm->context), 4*n));
case PIPE_FORMAT_G8R8_G8B8_UNORM:
case PIPE_FORMAT_G8R8_B8R8_UNORM:
case PIPE_FORMAT_R8G8_R8B8_UNORM:
+ case PIPE_FORMAT_G8B8_G8R8_UNORM:
+ case PIPE_FORMAT_B8G8_R8G8_UNORM:
case PIPE_FORMAT_R1_UNORM: /* doesn't make sense but ah well */
min_clamp = vec4_bld.zero;
max_clamp = vec4_bld.one;