gallivm: Add a function to generate lp_type for a format.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
James Benton 2012-05-30 14:38:52 +01:00 committed by José Fonseca
parent cd548836a1
commit 71c6fe76c0
2 changed files with 31 additions and 7 deletions

View File

@ -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);

View File

@ -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)
{