gallivm: Add a function to generate lp_type for a format.
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
cd548836a1
commit
71c6fe76c0
|
@ -58,13 +58,7 @@ lp_build_fetch_rgba_aos_array(struct gallivm_state *gallivm,
|
|||
LLVMValueRef ptr, res = NULL;
|
||||
struct lp_type src_type;
|
||||
|
||||
memset(&src_type, 0, sizeof src_type);
|
||||
src_type.floating = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT;
|
||||
src_type.fixed = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FIXED;
|
||||
src_type.sign = format_desc->channel[0].type != UTIL_FORMAT_TYPE_UNSIGNED;
|
||||
src_type.norm = format_desc->channel[0].normalized;
|
||||
src_type.width = format_desc->channel[0].size;
|
||||
src_type.length = format_desc->nr_channels;
|
||||
lp_type_from_format_desc(&src_type, format_desc);
|
||||
|
||||
assert(src_type.length <= dst_type.length);
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#define LP_BLD_TYPE_H
|
||||
|
||||
|
||||
#include "util/u_format.h"
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "gallivm/lp_bld.h"
|
||||
|
||||
|
@ -165,6 +166,35 @@ struct lp_build_context
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Converts a format description into an lp_type.
|
||||
*
|
||||
* Only works with "array formats".
|
||||
*
|
||||
* e.g. With PIPE_FORMAT_R32G32B32A32_FLOAT returns an lp_type with float[4]
|
||||
*/
|
||||
static INLINE void
|
||||
lp_type_from_format_desc(struct lp_type* type, const struct util_format_description *format_desc)
|
||||
{
|
||||
assert(util_format_is_array(format_desc));
|
||||
|
||||
memset(type, 0, sizeof(struct lp_type));
|
||||
type->floating = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT;
|
||||
type->fixed = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FIXED;
|
||||
type->sign = format_desc->channel[0].type != UTIL_FORMAT_TYPE_UNSIGNED;
|
||||
type->norm = format_desc->channel[0].normalized;
|
||||
type->width = format_desc->channel[0].size;
|
||||
type->length = format_desc->nr_channels;
|
||||
}
|
||||
|
||||
|
||||
static INLINE void
|
||||
lp_type_from_format(struct lp_type* type, enum pipe_format format)
|
||||
{
|
||||
lp_type_from_format_desc(type, util_format_description(format));
|
||||
}
|
||||
|
||||
|
||||
static INLINE unsigned
|
||||
lp_type_width(struct lp_type type)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue