Home | History | Annotate | Download | only in gallivm

Lines Matching refs:bld

78 lp_build_sample_wrap_nearest_int(struct lp_build_sample_context *bld,
90 struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
91 LLVMBuilderRef builder = bld->gallivm->builder;
101 struct lp_build_context *coord_bld = &bld->coord_bld;
145 lp_build_sample_wrap_nearest_float(struct lp_build_sample_context *bld,
153 struct lp_build_context *coord_bld = &bld->coord_bld;
171 if (bld->static_sampler_state->normalized_coords) {
201 lp_build_coord_repeat_npot_linear_int(struct lp_build_sample_context *bld,
208 struct lp_build_context *coord_bld = &bld->coord_bld;
209 struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
221 coord_f = lp_build_mul_imm(&bld->coord_bld, coord_f, 256);
228 lp_build_context_init(&abs_coord_bld, bld->gallivm, abs_type);
232 i32_c128 = lp_build_const_int_vec(bld->gallivm, bld->int_coord_type, -128);
233 *coord0_i = LLVMBuildAdd(bld->gallivm->builder, *coord0_i, i32_c128, "");
236 i32_c255 = lp_build_const_int_vec(bld->gallivm, bld->int_coord_type, 255);
237 *weight_i = LLVMBuildAnd(bld->gallivm->builder, *coord0_i, i32_c255, "");
240 i32_c8 = lp_build_const_int_vec(bld->gallivm, bld->int_coord_type, 8);
241 *coord0_i = LLVMBuildAShr(bld->gallivm->builder, *coord0_i, i32_c8, "");
276 lp_build_sample_wrap_linear_int(struct lp_build_sample_context *bld,
291 struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
292 LLVMBuilderRef builder = bld->gallivm->builder;
316 LLVMValueRef length_f = lp_build_int_to_float(&bld->coord_bld, length);
318 offset = lp_build_int_to_float(&bld->coord_bld, offset);
319 offset = lp_build_div(&bld->coord_bld, offset, length_f);
320 coord_f = lp_build_add(&bld->coord_bld, coord_f, offset);
322 lp_build_coord_repeat_npot_linear_int(bld, coord_f,
325 mask = lp_build_compare(bld->gallivm, int_coord_bld->type,
370 LLVMValueRef length_f = lp_build_int_to_float(&bld->coord_bld, length);
372 offset = lp_build_int_to_float(&bld->coord_bld, offset);
373 offset = lp_build_div(&bld->coord_bld, offset, length_f);
374 coord_f = lp_build_add(&bld->coord_bld, coord_f, offset);
376 lp_build_coord_repeat_npot_linear_int(bld, coord_f,
381 mask = lp_build_compare(bld->gallivm, int_coord_bld->type,
443 lp_build_sample_wrap_linear_float(struct lp_build_sample_context *bld,
455 struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
456 struct lp_build_context *coord_bld = &bld->coord_bld;
457 LLVMBuilderRef builder = bld->gallivm->builder;
458 LLVMValueRef half = lp_build_const_vec(bld->gallivm, coord_bld->type, 0.5);
514 if (bld->static_sampler_state->normalized_coords) {
555 lp_build_sample_fetch_image_nearest(struct lp_build_sample_context *bld,
578 LLVMBuilderRef builder = bld->gallivm->builder;
584 lp_build_context_init(&u8n, bld->gallivm, lp_type_unorm(8, bld->vector_width));
585 u8n_vec_type = lp_build_vec_type(bld->gallivm, u8n.type);
587 fetch_type = lp_type_uint(bld->texel_type.width);
588 if (util_format_is_rgba8_variant(bld->format_desc)) {
593 rgba8 = lp_build_gather(bld->gallivm,
594 bld->texel_type.length,
595 bld->format_desc->block.bits,
603 rgba8 = lp_build_fetch_rgba_aos(bld->gallivm,
604 bld->format_desc,
610 bld->cache);
623 lp_build_sample_image_nearest(struct lp_build_sample_context *bld,
635 const unsigned dims = bld->dims;
644 lp_build_context_init(&i32, bld->gallivm, lp_type_int_vec(32, bld->vector_width));
646 lp_build_extract_image_sizes(bld,
647 &bld->int_size_bld,
648 bld->int_coord_type,
656 if (bld->static_sampler_state->normalized_coords) {
659 flt_size = lp_build_int_to_float(&bld->float_size_bld, int_size);
661 lp_build_unnormalized_coords(bld, flt_size, &s, &t, &r);
670 s_ipart = lp_build_ifloor(&bld->coord_bld, s);
672 t_ipart = lp_build_ifloor(&bld->coord_bld, t);
674 r_ipart = lp_build_ifloor(&bld->coord_bld, r);
688 x_stride = lp_build_const_vec(bld->gallivm,
689 bld->int_coord_bld.type,
690 bld->format_desc->block.bits/8);
693 lp_build_sample_wrap_nearest_int(bld,
694 bld->format_desc->block.width,
697 bld->static_texture_state->pot_width,
698 bld->static_sampler_state->wrap_s,
703 lp_build_sample_wrap_nearest_int(bld,
704 bld->format_desc->block.height,
707 bld->static_texture_state->pot_height,
708 bld->static_sampler_state->wrap_t,
710 offset = lp_build_add(&bld->int_coord_bld, offset, y_offset);
713 lp_build_sample_wrap_nearest_int(bld,
717 bld->static_texture_state->pot_depth,
718 bld->static_sampler_state->wrap_r,
720 offset = lp_build_add(&bld->int_coord_bld, offset, z_offset);
723 if (has_layer_coord(bld->static_texture_state->target)) {
726 z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
727 offset = lp_build_add(&bld->int_coord_bld, offset, z_offset);
730 offset = lp_build_add(&bld->int_coord_bld, offset, mipoffsets);
733 lp_build_sample_fetch_image_nearest(bld, data_ptr, offset,
747 lp_build_sample_image_nearest_afloat(struct lp_build_sample_context *bld,
759 const unsigned dims = bld->dims;
766 flt_size = lp_build_int_to_float(&bld->float_size_bld, int_size);
768 lp_build_extract_image_sizes(bld,
769 &bld->float_size_bld,
770 bld->coord_type,
777 lp_build_sample_wrap_nearest_float(bld,
779 bld->static_texture_state->pot_width,
780 bld->static_sampler_state->wrap_s,
784 lp_build_sample_wrap_nearest_float(bld,
786 bld->static_texture_state->pot_height,
787 bld->static_sampler_state->wrap_t,
791 lp_build_sample_wrap_nearest_float(bld,
793 bld->static_texture_state->pot_depth,
794 bld->static_sampler_state->wrap_r,
798 if (has_layer_coord(bld->static_texture_state->target)) {
812 lp_build_sample_offset(&bld->int_coord_bld,
813 bld->format_desc,
820 offset = lp_build_add(&bld->int_coord_bld, offset, mipoffsets);
823 lp_build_sample_fetch_image_nearest(bld, data_ptr, offset,
834 lp_build_sample_fetch_image_linear(struct lp_build_sample_context *bld,
844 const unsigned dims = bld->dims;
845 LLVMBuilderRef builder = bld->gallivm->builder;
848 LLVMTypeRef elem_type = LLVMInt32TypeInContext(bld->gallivm->context);
856 lp_build_context_init(&u8n, bld->gallivm, lp_type_unorm(8, bld->vector_width));
857 u8n_vec_type = lp_build_vec_type(bld->gallivm, u8n.type);
929 if (util_format_is_rgba8_variant(bld->format_desc)) {
935 fetch_type = lp_type_uint(bld->texel_type.width);
936 rgba8 = lp_build_gather(bld->gallivm,
937 bld->texel_type.length,
938 bld->format_desc->block.bits,
946 rgba8 = lp_build_fetch_rgba_aos(bld->gallivm,
947 bld->format_desc,
953 bld->cache);
964 if (bld->static_sampler_state->force_nearest_s) {
972 else if (bld->static_sampler_state->force_nearest_t) {
1022 lp_build_sample_image_linear(struct lp_build_sample_context *bld,
1034 const unsigned dims = bld->dims;
1035 LLVMBuilderRef builder = bld->gallivm->builder;
1050 lp_build_context_init(&i32, bld->gallivm, lp_type_int_vec(32, bld->vector_width));
1052 lp_build_extract_image_sizes(bld,
1053 &bld->int_size_bld,
1054 bld->int_coord_type,
1062 if (bld->static_sampler_state->normalized_coords) {
1067 scaled_size = lp_build_shl_imm(&bld->int_size_bld, int_size, 8);
1069 flt_size = lp_build_int_to_float(&bld->float_size_bld, scaled_size);
1071 lp_build_unnormalized_coords(bld, flt_size, &s, &t, &r);
1075 s = lp_build_mul_imm(&bld->coord_bld, s, 256);
1077 t = lp_build_mul_imm(&bld->coord_bld, t, 256);
1079 r = lp_build_mul_imm(&bld->coord_bld, r, 256);
1088 s = lp_build_iround(&bld->coord_bld, s);
1090 t = lp_build_iround(&bld->coord_bld, t);
1092 r = lp_build_iround(&bld->coord_bld, r);
1095 i32_c128 = lp_build_const_int_vec(bld->gallivm, i32.type, -128);
1096 if (!bld->static_sampler_state->force_nearest_s) {
1099 if (dims >= 2 && !bld->static_sampler_state->force_nearest_t) {
1107 i32_c8 = lp_build_const_int_vec(bld->gallivm, i32.type, 8);
1126 i32_c255 = lp_build_const_int_vec(bld->gallivm, i32.type, 255);
1134 x_stride = lp_build_const_vec(bld->gallivm, bld->int_coord_bld.type,
1135 bld->format_desc->block.bits/8);
1140 lp_build_sample_wrap_linear_int(bld,
1141 bld->format_desc->block.width,
1144 bld->static_texture_state->pot_width,
1145 bld->static_sampler_state->wrap_s,
1150 if (has_layer_coord(bld->static_texture_state->target)) {
1152 z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
1154 x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, z_offset);
1155 x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, z_offset);
1158 x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, mipoffsets);
1159 x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, mipoffsets);
1170 lp_build_sample_wrap_linear_int(bld,
1171 bld->format_desc->block.height,
1174 bld->static_texture_state->pot_height,
1175 bld->static_sampler_state->wrap_t,
1181 offset[z][0][x] = lp_build_add(&bld->int_coord_bld,
1183 offset[z][1][x] = lp_build_add(&bld->int_coord_bld,
1190 lp_build_sample_wrap_linear_int(bld,
1194 bld->static_texture_state->pot_depth,
1195 bld->static_sampler_state->wrap_r,
1200 offset[0][y][x] = lp_build_add(&bld->int_coord_bld,
1202 offset[1][y][x] = lp_build_add(&bld->int_coord_bld,
1208 lp_build_sample_fetch_image_linear(bld, data_ptr, offset,
1222 lp_build_sample_image_linear_afloat(struct lp_build_sample_context *bld,
1234 const unsigned dims = bld->dims;
1251 flt_size = lp_build_int_to_float(&bld->float_size_bld, int_size);
1253 lp_build_extract_image_sizes(bld,
1254 &bld->float_size_bld,
1255 bld->coord_type,
1262 lp_build_sample_wrap_linear_float(bld,
1263 bld->format_desc->block.width,
1265 bld->static_texture_state->pot_width,
1266 bld->static_sampler_state->wrap_s,
1269 bld->static_sampler_state->force_nearest_s);
1272 lp_build_sample_wrap_linear_float(bld,
1273 bld->format_desc->block.height,
1275 bld->static_texture_state->pot_height,
1276 bld->static_sampler_state->wrap_t,
1279 bld->static_sampler_state->force_nearest_t);
1282 lp_build_sample_wrap_linear_float(bld,
1285 bld->static_texture_state->pot_depth,
1286 bld->static_sampler_state->wrap_r,
1298 x_stride = lp_build_const_vec(bld->gallivm,
1299 bld->int_coord_bld.type,
1300 bld->format_desc->block.bits/8);
1309 lp_build_sample_partial_offset(&bld->int_coord_bld,
1310 bld->format_desc->block.width,
1313 lp_build_sample_partial_offset(&bld->int_coord_bld,
1314 bld->format_desc->block.width,
1319 if (has_layer_coord(bld->static_texture_state->target)) {
1321 z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
1323 x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, z_offset);
1324 x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, z_offset);
1327 x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, mipoffsets);
1328 x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, mipoffsets);
1339 lp_build_sample_partial_offset(&bld->int_coord_bld,
1340 bld->format_desc->block.height,
1343 lp_build_sample_partial_offset(&bld->int_coord_bld,
1344 bld->format_desc->block.height,
1349 offset[z][0][x] = lp_build_add(&bld->int_coord_bld,
1351 offset[z][1][x] = lp_build_add(&bld->int_coord_bld,
1359 lp_build_sample_partial_offset(&bld->int_coord_bld,
1363 lp_build_sample_partial_offset(&bld->int_coord_bld,
1369 offset[0][y][x] = lp_build_add(&bld->int_coord_bld,
1371 offset[1][y][x] = lp_build_add(&bld->int_coord_bld,
1377 lp_build_sample_fetch_image_linear(bld, data_ptr, offset,
1391 lp_build_sample_mipmap(struct lp_build_sample_context *bld,
1403 LLVMBuilderRef builder = bld->gallivm->builder;
1418 bld->coord_type.length > 4;
1421 lp_build_mipmap_level_sizes(bld, ilevel0,
1424 if (bld->num_mips == 1) {
1425 data_ptr0 = lp_build_get_mipmap_level(bld, ilevel0);
1429 data_ptr0 = bld->base_ptr;
1430 mipoff0 = lp_build_get_mip_offsets(bld, ilevel0);
1435 lp_build_sample_image_nearest_afloat(bld,
1443 lp_build_sample_image_linear_afloat(bld,
1452 lp_build_sample_image_nearest(bld,
1460 lp_build_sample_image_linear(bld,
1472 LLVMValueRef h16vec_scale = lp_build_const_vec(bld->gallivm,
1473 bld->lodf_bld.type, 256.0);
1474 LLVMTypeRef i32vec_type = bld->lodi_bld.vec_type;
1477 unsigned num_quads = bld->coord_bld.type.length / 4;
1484 if (bld->num_lods == 1) {
1486 lod_fpart, bld->lodi_bld.zero,
1501 lod_fpart = lp_build_max(&bld->lodi_bld, lod_fpart,
1502 bld->lodi_bld.zero);
1503 need_lerp = lp_build_any_true_range(&bld->lodi_bld, bld->num_lods, lod_fpart);
1506 lp_build_if(&if_ctx, bld->gallivm, need_lerp);
1510 lp_build_context_init(&u8n_bld, bld->gallivm, lp_type_unorm(8, bld->vector_width));
1513 lp_build_mipmap_level_sizes(bld, ilevel1,
1516 if (bld->num_mips == 1) {
1517 data_ptr1 = lp_build_get_mipmap_level(bld, ilevel1);
1520 data_ptr1 = bld->base_ptr;
1521 mipoff1 = lp_build_get_mip_offsets(bld, ilevel1);
1526 lp_build_sample_image_nearest_afloat(bld,
1533 lp_build_sample_image_linear_afloat(bld,
1542 lp_build_sample_image_nearest(bld,
1549 lp_build_sample_image_linear(bld,
1559 if (num_quads == 1 && bld->num_lods == 1) {
1564 unsigned num_chans_per_lod = 4 * bld->coord_type.length / bld->num_lods;
1565 LLVMTypeRef tmp_vec_type = LLVMVectorType(u8n_bld.elem_type, bld->lodi_bld.type.length);
1573 shuffle[i] = lp_build_const_int32(bld->gallivm, i / num_chans_per_lod);
1597 lp_build_sample_aos(struct lp_build_sample_context *bld,
1609 LLVMBuilderRef builder = bld->gallivm->builder;
1610 const unsigned mip_filter = bld->static_sampler_state->min_mip_filter;
1611 const unsigned min_filter = bld->static_sampler_state->min_img_filter;
1612 const unsigned mag_filter = bld->static_sampler_state->mag_img_filter;
1613 const unsigned dims = bld->dims;
1619 assert(lp_is_simple_wrap_mode(bld->static_sampler_state->wrap_s));
1621 assert(lp_is_simple_wrap_mode(bld->static_sampler_state->wrap_t));
1623 assert(lp_is_simple_wrap_mode(bld->static_sampler_state->wrap_r));
1627 lp_build_context_init(&u8n_bld, bld->gallivm, lp_type_unorm(8, bld->vector_width));
1633 packed_var = lp_build_alloca(bld->gallivm, u8n_bld.vec_type, "packed_var");
1637 lp_build_sample_mipmap(bld,
1654 if (bld->num_lods > 1)
1656 lp_build_const_int32(bld->gallivm, 0), "");
1659 LLVMInt1TypeInContext(bld->gallivm->context), "");
1661 lp_build_if(&if_ctx, bld->gallivm, lod_positive);
1664 lp_build_sample_mipmap(bld,
1673 lp_build_sample_mipmap(bld,
1687 lp_build_rgba8_to_fi32_soa(bld->gallivm,
1688 bld->texel_type,
1691 if (util_format_is_rgba8_variant(bld->format_desc)) {
1692 lp_build_format_swizzle_soa(bld->format_desc,
1693 &bld->texel_bld,