gallivm: clarify unsigned vs. signed integer type construction

The lp_int_type() function was creating an unsigned type.  So rename
that function to lp_uint_type() and create new lp_int_type() that
creates a signed type.
This commit is contained in:
Brian Paul 2010-02-26 17:44:10 -07:00
parent 8e7a8d6593
commit 38110fd1c3
3 changed files with 43 additions and 19 deletions

View File

@ -70,8 +70,8 @@ struct lp_build_sample_context
struct lp_build_context coord_bld;
/** Integer coordinates */
struct lp_type int_coord_type;
struct lp_build_context int_coord_bld;
struct lp_type uint_coord_type;
struct lp_build_context uint_coord_bld;
/** Output texels type and build context */
struct lp_type texel_type;
@ -90,7 +90,7 @@ lp_build_sample_texel_soa(struct lp_build_sample_context *bld,
LLVMValueRef offset;
LLVMValueRef packed;
offset = lp_build_sample_offset(&bld->int_coord_bld,
offset = lp_build_sample_offset(&bld->uint_coord_bld,
bld->format_desc,
x, y, y_stride,
data_ptr);
@ -121,7 +121,7 @@ lp_build_sample_packed(struct lp_build_sample_context *bld,
{
LLVMValueRef offset;
offset = lp_build_sample_offset(&bld->int_coord_bld,
offset = lp_build_sample_offset(&bld->uint_coord_bld,
bld->format_desc,
x, y, y_stride,
data_ptr);
@ -145,10 +145,10 @@ lp_build_sample_wrap(struct lp_build_sample_context *bld,
boolean is_pot,
unsigned wrap_mode)
{
struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
struct lp_build_context *uint_coord_bld = &bld->uint_coord_bld;
LLVMValueRef length_minus_one;
length_minus_one = lp_build_sub(int_coord_bld, length, int_coord_bld->one);
length_minus_one = lp_build_sub(uint_coord_bld, length, uint_coord_bld->one);
switch(wrap_mode) {
case PIPE_TEX_WRAP_REPEAT:
@ -161,8 +161,8 @@ lp_build_sample_wrap(struct lp_build_sample_context *bld,
break;
case PIPE_TEX_WRAP_CLAMP:
coord = lp_build_max(int_coord_bld, coord, int_coord_bld->zero);
coord = lp_build_min(int_coord_bld, coord, length_minus_one);
coord = lp_build_max(uint_coord_bld, coord, uint_coord_bld->zero);
coord = lp_build_min(uint_coord_bld, coord, length_minus_one);
break;
case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
@ -174,8 +174,8 @@ lp_build_sample_wrap(struct lp_build_sample_context *bld,
/* FIXME */
_debug_printf("llvmpipe: failed to translate texture wrap mode %s\n",
util_dump_tex_wrap(wrap_mode, TRUE));
coord = lp_build_max(int_coord_bld, coord, int_coord_bld->zero);
coord = lp_build_min(int_coord_bld, coord, length_minus_one);
coord = lp_build_max(uint_coord_bld, coord, uint_coord_bld->zero);
coord = lp_build_min(uint_coord_bld, coord, length_minus_one);
break;
default:
@ -249,8 +249,8 @@ lp_build_sample_2d_linear_soa(struct lp_build_sample_context *bld,
x0 = lp_build_sample_wrap(bld, x0, width, bld->static_state->pot_width, bld->static_state->wrap_s);
y0 = lp_build_sample_wrap(bld, y0, height, bld->static_state->pot_height, bld->static_state->wrap_t);
x1 = lp_build_add(&bld->int_coord_bld, x0, bld->int_coord_bld.one);
y1 = lp_build_add(&bld->int_coord_bld, y0, bld->int_coord_bld.one);
x1 = lp_build_add(&bld->uint_coord_bld, x0, bld->uint_coord_bld.one);
y1 = lp_build_add(&bld->uint_coord_bld, y0, bld->uint_coord_bld.one);
x1 = lp_build_sample_wrap(bld, x1, width, bld->static_state->pot_width, bld->static_state->wrap_s);
y1 = lp_build_sample_wrap(bld, y1, height, bld->static_state->pot_height, bld->static_state->wrap_t);
@ -358,8 +358,8 @@ lp_build_sample_2d_linear_aos(struct lp_build_sample_context *bld,
x0 = lp_build_sample_wrap(bld, x0, width, bld->static_state->pot_width, bld->static_state->wrap_s);
y0 = lp_build_sample_wrap(bld, y0, height, bld->static_state->pot_height, bld->static_state->wrap_t);
x1 = lp_build_add(&bld->int_coord_bld, x0, bld->int_coord_bld.one);
y1 = lp_build_add(&bld->int_coord_bld, y0, bld->int_coord_bld.one);
x1 = lp_build_add(&bld->uint_coord_bld, x0, bld->uint_coord_bld.one);
y1 = lp_build_add(&bld->uint_coord_bld, y0, bld->uint_coord_bld.one);
x1 = lp_build_sample_wrap(bld, x1, width, bld->static_state->pot_width, bld->static_state->wrap_s);
y1 = lp_build_sample_wrap(bld, y1, height, bld->static_state->pot_height, bld->static_state->wrap_t);
@ -545,10 +545,10 @@ lp_build_sample_soa(LLVMBuilderRef builder,
bld.dynamic_state = dynamic_state;
bld.format_desc = util_format_description(static_state->format);
bld.coord_type = type;
bld.int_coord_type = lp_int_type(type);
bld.uint_coord_type = lp_uint_type(type);
bld.texel_type = type;
lp_build_context_init(&bld.coord_bld, builder, bld.coord_type);
lp_build_context_init(&bld.int_coord_bld, builder, bld.int_coord_type);
lp_build_context_init(&bld.uint_coord_bld, builder, bld.uint_coord_type);
lp_build_context_init(&bld.texel_bld, builder, bld.texel_type);
/* Get the dynamic state */
@ -561,9 +561,9 @@ lp_build_sample_soa(LLVMBuilderRef builder,
t = coords[1];
p = coords[2];
width = lp_build_broadcast_scalar(&bld.int_coord_bld, width);
height = lp_build_broadcast_scalar(&bld.int_coord_bld, height);
stride = lp_build_broadcast_scalar(&bld.int_coord_bld, stride);
width = lp_build_broadcast_scalar(&bld.uint_coord_bld, width);
height = lp_build_broadcast_scalar(&bld.uint_coord_bld, height);
stride = lp_build_broadcast_scalar(&bld.uint_coord_bld, stride);
if(static_state->target == PIPE_TEXTURE_1D)
t = bld.coord_bld.zero;

View File

@ -178,6 +178,25 @@ lp_build_int32_vec4_type(void)
}
/**
* Create unsigned integer type variation of given type.
*/
struct lp_type
lp_uint_type(struct lp_type type)
{
struct lp_type res_type;
memset(&res_type, 0, sizeof res_type);
res_type.width = type.width;
res_type.length = type.length;
return res_type;
}
/**
* Create signed integer type variation of given type.
*/
struct lp_type
lp_int_type(struct lp_type type)
{
@ -186,6 +205,7 @@ lp_int_type(struct lp_type type)
memset(&res_type, 0, sizeof res_type);
res_type.width = type.width;
res_type.length = type.length;
res_type.sign = 1;
return res_type;
}

View File

@ -256,6 +256,10 @@ LLVMTypeRef
lp_build_int32_vec4_type(void);
struct lp_type
lp_uint_type(struct lp_type type);
struct lp_type
lp_int_type(struct lp_type type);