gallivm: New function to fetch a pixel into a 4xfloat AoS vector.
This commit is contained in:
parent
b29fcc7b3a
commit
e08d0cc165
|
@ -42,16 +42,9 @@ struct util_format_description;
|
|||
struct lp_type;
|
||||
|
||||
|
||||
boolean
|
||||
lp_format_is_rgba8(const struct util_format_description *desc);
|
||||
|
||||
|
||||
void
|
||||
lp_build_format_swizzle_soa(const struct util_format_description *format_desc,
|
||||
struct lp_type type,
|
||||
const LLVMValueRef *unswizzled,
|
||||
LLVMValueRef *swizzled);
|
||||
|
||||
/*
|
||||
* AoS
|
||||
*/
|
||||
|
||||
LLVMValueRef
|
||||
lp_build_unpack_rgba_aos(LLVMBuilderRef builder,
|
||||
|
@ -71,6 +64,21 @@ lp_build_pack_rgba_aos(LLVMBuilderRef builder,
|
|||
const struct util_format_description *desc,
|
||||
LLVMValueRef rgba);
|
||||
|
||||
LLVMValueRef
|
||||
lp_build_fetch_rgba_aos(LLVMBuilderRef builder,
|
||||
const struct util_format_description *format_desc,
|
||||
LLVMValueRef ptr);
|
||||
|
||||
|
||||
/*
|
||||
* SoA
|
||||
*/
|
||||
|
||||
void
|
||||
lp_build_format_swizzle_soa(const struct util_format_description *format_desc,
|
||||
struct lp_type type,
|
||||
const LLVMValueRef *unswizzled,
|
||||
LLVMValueRef *swizzled);
|
||||
|
||||
void
|
||||
lp_build_unpack_rgba_soa(LLVMBuilderRef builder,
|
||||
|
|
|
@ -378,3 +378,35 @@ lp_build_pack_rgba_aos(LLVMBuilderRef builder,
|
|||
|
||||
return packed;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fetch a pixel into a 4 float AoS.
|
||||
*/
|
||||
LLVMValueRef
|
||||
lp_build_fetch_rgba_aos(LLVMBuilderRef builder,
|
||||
const struct util_format_description *format_desc,
|
||||
LLVMValueRef ptr)
|
||||
{
|
||||
if (format_desc->layout == UTIL_FORMAT_LAYOUT_PLAIN &&
|
||||
(format_desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB ||
|
||||
format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) &&
|
||||
format_desc->block.width == 1 &&
|
||||
format_desc->block.height == 1 &&
|
||||
format_desc->block.bits <= 32 &&
|
||||
format_desc->channel[0].type != UTIL_FORMAT_TYPE_FLOAT)
|
||||
{
|
||||
LLVMValueRef packed;
|
||||
|
||||
ptr = LLVMBuildBitCast(builder, ptr,
|
||||
LLVMPointerType(LLVMIntType(format_desc->block.bits), 0) , "");
|
||||
|
||||
packed = LLVMBuildLoad(builder, ptr, "packed");
|
||||
|
||||
return lp_build_unpack_rgba_aos(builder, format_desc, packed);
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
return LLVMGetUndef(LLVMVectorType(LLVMFloatType(), 4));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue