Home | History | Annotate | Download | only in gallivm

Lines Matching refs:bld

178    LLVMTypeRef int_type = LLVMInt32TypeInContext(mask->bld->gallivm->context);
179 LLVMBuilderRef builder = mask->bld->gallivm->builder;
190 ctx->loop_limiter = lp_build_alloca(mask->bld->gallivm,
198 static void lp_exec_mask_init(struct lp_exec_mask *mask, struct lp_build_context *bld)
200 mask->bld = bld;
206 mask->int_vec_type = lp_build_int_vec_type(bld->gallivm, mask->bld->type);
224 LLVMBuilderRef builder = mask->bld->gallivm->builder;
269 LLVMBuilderRef builder = mask->bld->gallivm->builder;
290 LLVMBuilderRef builder = mask->bld->gallivm->builder;
324 LLVMBuilderRef builder = mask->bld->gallivm->builder;
342 ctx->break_var = lp_build_alloca(mask->bld->gallivm, mask->int_vec_type, "");
345 ctx->loop_block = lp_build_insert_new_block(mask->bld->gallivm, "bgnloop");
358 LLVMBuilderRef builder = mask->bld->gallivm->builder;
390 mask->switch_mask = LLVMConstNull(mask->bld->int_vec_type);
408 LLVMBuilderRef builder = mask->bld->gallivm->builder;
431 LLVMBuilderRef builder = mask->bld->gallivm->builder;
447 LLVMBuilderRef builder = mask->bld->gallivm->builder;
450 LLVMTypeRef int_type = LLVMInt32TypeInContext(mask->bld->gallivm->context);
452 mask->bld->type.width *
453 mask->bld->type.length);
505 endloop = lp_build_insert_new_block(mask->bld->gallivm, "endloop");
558 LLVMBuilderRef builder = mask->bld->gallivm->builder;
610 LLVMBuilderRef builder = mask->bld->gallivm->builder;
622 casemask = lp_build_cmp(mask->bld, PIPE_FUNC_EQUAL, caseval, ctx->switch_val);
686 LLVMBuilderRef builder = mask->bld->gallivm->builder;
760 LLVMBuilderRef builder = mask->bld->gallivm->builder;
802 LLVMBuilderRef builder = mask->bld->gallivm->builder;
857 get_file_ptr(struct lp_build_tgsi_soa_context *bld,
862 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
868 array_of_vars = bld->temps;
869 var_of_array = bld->temps_array;
872 array_of_vars = bld->outputs;
873 var_of_array = bld->outputs_array;
882 if (bld->indirect_files & (1 << file)) {
883 LLVMValueRef lindex = lp_build_const_int32(bld->bld_base.base.gallivm, index * 4 + chan);
887 assert(index <= bld->bld_base.info->file_max[file]);
900 lp_get_temp_ptr_soa(struct lp_build_tgsi_soa_context *bld,
904 return get_file_ptr(bld, TGSI_FILE_TEMPORARY, index, chan);
914 lp_get_output_ptr(struct lp_build_tgsi_soa_context *bld,
918 return get_file_ptr(bld, TGSI_FILE_OUTPUT, index, chan);
927 gather_outputs(struct lp_build_tgsi_soa_context * bld)
929 if ((bld->indirect_files & (1 << TGSI_FILE_OUTPUT))) {
931 assert(bld->bld_base.info->num_outputs <=
932 bld->bld_base.info->file_max[TGSI_FILE_OUTPUT] + 1);
933 for (index = 0; index < bld->bld_base.info->num_outputs; ++index) {
935 bld->outputs[index][chan] = lp_get_output_ptr(bld, index, chan);
956 struct lp_build_context *bld = &bld_base->base;
963 res = bld->undef;
991 for (i = 0; i < bld
996 di = lp_build_const_int32(bld->gallivm, i);
998 si = lp_build_const_int32(bld->gallivm, i >> 1);
1024 res = lp_build_select(bld, overflow_mask, bld->zero, res);
1035 emit_mask_scatter(struct lp_build_tgsi_soa_context *bld,
1042 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1059 for (i = 0; i < bld->bld_base.base.type.length; i++) {
1074 real_val = lp_build_select(&bld->elem_bld, scalar_pred, val, dst_val);
1091 get_indirect_index(struct lp_build_tgsi_soa_context *bld,
1095 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
1096 struct lp_build_context *uint_bld = &bld->bld_base.uint_bld;
1104 assert(bld->indirect_files & (1 << reg_file));
1106 base = lp_build_const_int_vec(bld->bld_base.base.gallivm, uint_bld->type, reg_index);
1112 bld->addr[indirect_reg->Index][swizzle],
1117 rel = lp_get_temp_ptr_soa(bld, indirect_reg->Index, swizzle);
1140 max_index = lp_build_const_int_vec(bld->bld_base.base.gallivm,
1142 bld->bld_base.info->file_max[reg_file]);
1226 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1244 consts_ptr = bld->consts[dimension];
1245 num_consts = bld->consts_sizes[dimension];
1255 indirect_index = get_indirect_index(bld,
1329 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1330 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1355 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1356 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1360 if (bld->use_immediates_array || reg->Register.Indirect) {
1366 imms_array = LLVMBuildBitCast(builder, bld->imms_array, fptr_type, "");
1372 indirect_index = get_indirect_index(bld,
1397 bld->imms_array, &lindex, 1, "");
1408 bld->imms_array, &lindex1, 1, "");
1415 res = bld->immediates[reg->Register.Index][swizzle];
1417 res = emit_fetch_64bit(bld_base, stype, res, bld->immediates[reg->Register.Index][swizzle + 1]);
1434 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1435 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1446 indirect_index = get_indirect_index(bld,
1463 inputs_array = LLVMBuildBitCast(builder, bld->inputs_array, fptr_type, "");
1468 if (bld->indirect_files & (1 << TGSI_FILE_INPUT)) {
1472 bld->inputs_array, &lindex, 1, "");
1483 bld->inputs_array, &lindex1, 1, "");
1489 res = bld->inputs[reg->Register.Index][swizzle];
1491 res = emit_fetch_64bit(bld_base, stype, res, bld->inputs[reg->Register.Index][swizzle + 1]);
1513 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1514 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1515 const struct tgsi_shader_info *info = bld->bld_base.info;
1526 res = bld->system_values.prim_id;
1534 attrib_index = get_indirect_index(bld,
1543 vertex_index = get_indirect_index(bld,
1551 res = bld->gs_iface->fetch_input(bld->gs_iface, bld_base,
1562 res2 = bld->gs_iface->fetch_input(bld->gs_iface, bld_base,
1586 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1587 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1597 indirect_index = get_indirect_index(bld,
1615 temps_array = LLVMBuildBitCast(builder, bld->temps_array, fptr_type, "");
1622 temp_ptr = lp_get_temp_ptr_soa(bld, reg->Register.Index, swizzle);
1628 temp_ptr2 = lp_get_temp_ptr_soa(bld, reg->Register.Index, swizzle + 1);
1653 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1654 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
1655 const struct tgsi_shader_info *info = bld->bld_base.info;
1664 res = lp_build_broadcast_scalar(&bld_base->uint_bld, bld->system_values.instance_id);
1669 res = bld->system_values.vertex_id;
1674 res = bld->system_values.vertex_id_nobase;
1679 res = bld->system_values.basevertex;
1684 res = bld->system_values.prim_id;
1689 res = lp_build_broadcast_scalar(&bld_base->uint_bld, bld->system_values.invocation_id);
1718 struct lp_build_tgsi_soa_context *bld,
1730 *ddx = lp_build_ddx(&bld->bld_base.base, src);
1733 *ddy = lp_build_ddy(&bld->bld_base.base, src);
1742 struct lp_build_tgsi_soa_context *bld,
1746 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
1777 bld->preds[index][swizzle], "");
1786 value = lp_build_compare(bld->bld_base.base.gallivm,
1787 bld->bld_base.base.type,
1790 bld->bld_base.base.zero);
1819 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1844 lp_exec_mask_store(&bld->exec_mask, float_bld, pred, temp, chan_ptr);
1845 lp_exec_mask_store(&bld->exec_mask, float_bld, pred, temp2, chan_ptr2);
1860 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
1887 indirect_index = get_indirect_index(bld,
1916 outputs_array = LLVMBuildBitCast(builder, bld->outputs_array, fptr_type, "");
1919 emit_mask_scatter(bld, outputs_array, index_vec, value,
1920 &bld->exec_mask, pred);
1923 LLVMValueRef out_ptr = lp_get_output_ptr(bld, reg->Register.Index,
1927 LLVMValueRef out_ptr2 = lp_get_output_ptr(bld, reg->Register.Index,
1932 lp_exec_mask_store(&bld->exec_mask, float_bld, pred, value, out_ptr);
1954 temps_array = LLVMBuildBitCast(builder, bld->temps_array, fptr_type, "");
1957 emit_mask_scatter(bld, temps_array, index_vec, value,
1958 &bld->exec_mask, pred);
1962 temp_ptr = lp_get_temp_ptr_soa(bld, reg->Register.Index, chan_index);
1965 LLVMValueRef temp_ptr2 = lp_get_temp_ptr_soa(bld,
1972 lp_exec_mask_store(&bld->exec_mask, float_bld, pred, value, temp_ptr);
1980 lp_exec_mask_store(&bld->exec_mask, int_bld, pred, value,
1981 bld->addr[reg->Register.Index][chan_index]);
1987 lp_exec_mask_store(&bld->exec_mask, float_bld, pred, value,
1988 bld->preds[reg->Register.Index][chan_index]);
2009 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
2025 if (bld->exec_mask.has_mask) {
2026 lp_build_print_value(gallivm, " mask = ", bld->exec_mask.exec_mask);
2040 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
2045 emit_fetch_predicate( bld, inst, pred );
2148 emit_tex( struct lp_build_tgsi_soa_context *bld,
2170 if (!bld->sampler) {
2173 texel[i] = bld->bld_base.base.undef;
2251 lod = lp_build_emit_fetch(&bld->bld_base, inst, 1, 0);
2254 lod = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3);
2262 lod_property = lp_build_lod_property(&bld->bld_base, inst, 0);
2266 oow = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3);
2267 oow = lp_build_rcp(&bld->bld_base.base, oow);
2271 coords[i] = lp_build_emit_fetch(&bld->bld_base, inst, 0, i);
2273 coords[i] = lp_build_mul(&bld->bld_base.base, coords[i], oow);
2276 coords[i] = bld->bld_base.base.undef;
2282 coords[3] = lp_build_emit_fetch(&bld->bld_base, inst, 0, layer_coord);
2285 coords[2] = lp_build_emit_fetch(&bld->bld_base, inst, 0, layer_coord);
2288 coords[2] = lp_build_mul(&bld->bld_base.base, coords[2], oow);
2294 coords[4] = lp_build_emit_fetch(&bld->bld_base, inst, 1, 0);
2297 coords[4] = lp_build_emit_fetch(&bld->bld_base, inst, 0, shadow_coord);
2300 coords[4] = lp_build_mul(&bld->bld_base.base, coords[4], oow);
2307 derivs.ddx[dim] = lp_build_emit_fetch(&bld->bld_base, inst, 1, dim);
2308 derivs.ddy[dim] = lp_build_emit_fetch(&bld->bld_base, inst, 2, dim);
2315 if (bld->bld_base.info->processor == PIPE_SHADER_FRAGMENT) {
2334 offsets[dim] = lp_build_emit_fetch_texoffset(&bld->bld_base, inst, 0, dim);
2338 params.type = bld->bld_base.base.type;
2342 params.context_ptr = bld->context_ptr;
2343 params.thread_data_ptr = bld->thread_data_ptr;
2349 bld->sampler->emit_tex_sample(bld->sampler,
2350 bld->bld_base.base.gallivm,
2355 emit_sample(struct lp_build_tgsi_soa_context *bld,
2361 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
2376 if (!bld->sampler) {
2379 texel[i] = bld->bld_base.base.undef;
2396 switch (bld->sv[texture_unit].Resource) {
2436 lod = lp_build_emit_fetch(&bld->bld_base, inst, 3, 0);
2443 lod_property = lp_build_lod_property(&bld->bld_base, inst, 0);
2448 lod = lp_build_const_vec(gallivm, bld->bld_base.base.type, 0.0F);
2452 coords[i] = lp_build_emit_fetch(&bld->bld_base, inst, 0, i);
2455 coords[i] = bld->bld_base.base.undef;
2461 coords[3] = lp_build_emit_fetch(&bld->bld_base, inst, 0, layer_coord);
2463 coords[2] = lp_build_emit_fetch(&bld->bld_base, inst, 0, layer_coord);
2468 coords[4] = lp_build_emit_fetch(&bld->bld_base, inst, 3, 0);
2475 derivs.ddx[dim] = lp_build_emit_fetch(&bld->bld_base, inst, 3, dim);
2476 derivs.ddy[dim] = lp_build_emit_fetch(&bld->bld_base, inst, 4, dim);
2483 if (bld->bld_base.info->processor == PIPE_SHADER_FRAGMENT) {
2501 offsets[dim] = lp_build_emit_fetch_texoffset(&bld->bld_base, inst, 0, dim);
2506 params.type = bld->bld_base.base.type;
2510 params.context_ptr = bld->context_ptr;
2511 params.thread_data_ptr = bld->thread_data_ptr;
2517 bld->sampler->emit_tex_sample(bld->sampler,
2518 bld->bld_base.base.gallivm,
2531 lp_build_swizzle_soa_inplace(&bld->bld_base.base, texel, swizzles);
2536 emit_fetch_texels( struct lp_build_tgsi_soa_context *bld,
2542 LLVMValueRef coord_undef = LLVMGetUndef(bld->bld_base.base.int_vec_type);
2554 if (!bld->sampler) {
2565 target = bld->sv[unit].Resource;
2603 explicit_lod = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3);
2604 lod_property = lp_build_lod_property(&bld->bld_base, inst, 0);
2612 coords[i] = lp_build_emit_fetch(&bld->bld_base, inst, 0, i);
2619 coords[2] = lp_build_emit_fetch(&bld->bld_base, inst, 0, layer_coord);
2625 offsets[dim] = lp_build_emit_fetch_texoffset(&bld->bld_base, inst, 0, dim);
2630 params.type = bld->bld_base.base.type;
2639 params.context_ptr = bld->context_ptr;
2640 params.thread_data_ptr = bld->thread_data_ptr;
2647 bld->sampler->emit_tex_sample(bld->sampler,
2648 bld->bld_base.base.gallivm,
2662 lp_build_swizzle_soa_inplace(&bld->bld_base.base, texel, swizzles);
2667 emit_size_query( struct lp_build_tgsi_soa_context *bld,
2681 target = bld->sv[unit].Resource;
2697 if (!bld->sampler) {
2700 sizes_out[i] = bld->bld_base.int_bld.undef;
2705 explicit_lod = lp_build_emit_fetch(&bld->bld_base, inst, 0, 0);
2706 lod_property = lp_build_lod_property(&bld->bld_base, inst, 0);
2716 params.int_type = bld->bld_base.int_bld.type;
2719 params.context_ptr = bld->context_ptr;
2725 bld->sampler->emit_size_query(bld->sampler,
2726 bld->bld_base.base.gallivm,
2731 near_end_of_shader(struct lp_build_tgsi_soa_context *bld,
2739 if (pc + i >= bld->bld_base.info->num_instructions)
2742 opcode = bld->bld_base.instructions[pc + i].Instruction.Opcode;
2785 struct lp_build_tgsi_soa_context *bld,
2789 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
2807 terms[swizzle] = lp_build_emit_fetch(&bld->bld_base, inst, 0, chan_index );
2818 chan_mask = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_GEQUAL, terms[chan_index], bld->bld_base.base.zero);
2827 if (bld->exec_mask.has_mask) {
2829 invmask = LLVMBuildNot(builder, bld->exec_mask.exec_mask, "kilp");
2833 lp_build_mask_update(bld->mask, mask);
2834 if (!near_end_of_shader(bld, pc))
2835 lp_build_mask_check(bld->mask);
2845 emit_kill(struct lp_build_tgsi_soa_context *bld,
2848 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
2854 if (bld->exec_mask.has_mask) {
2855 mask = LLVMBuildNot(builder, bld->exec_mask.exec_mask, "kilp");
2858 LLVMValueRef zero = LLVMConstNull(bld->bld_base.base.int_vec_type);
2862 lp_build_mask_update(bld->mask, mask);
2864 if (!near_end_of_shader(bld, pc))
2865 lp_build_mask_check(bld->mask);
2874 emit_dump_file(struct lp_build_tgsi_soa_context *bld,
2877 const struct tgsi_shader_info *info = bld->bld_base.info;
2878 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
2923 res = bld->bld_base.emit_fetch_funcs[file](&bld->bld_base, &reg, TGSI_TYPE_FLOAT, chan);
2928 res = bld->inputs[index][chan];
2933 reg_ptr = lp_get_temp_ptr_soa(bld, index, chan);
2937 reg_ptr = lp_get_output_ptr(bld, index, chan);
2957 struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
2958 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
2959 LLVMTypeRef vec_type = bld->bld_base.base.vec_type;
2964 assert(last <= bld->bld_base.info->file_max[decl->Declaration.File]);
2968 if (!(bld->indirect_files & (1 << TGSI_FILE_TEMPORARY))) {
2972 bld->temps[idx][i] = lp_build_alloca(gallivm, vec_type, "temp");
2978 if (!(bld->indirect_files & (1 << TGSI_FILE_OUTPUT))) {
2981 bld->outputs[idx][i] = lp_build_alloca(gallivm,
2997 bld->addr[idx][i] = lp_build_alloca(gallivm, bld_base->base.int_vec_type, "addr");
3005 bld->preds[idx][i] = lp_build_alloca(gallivm, vec_type,
3017 bld->sv[idx] = decl->SamplerView;
3034 bld->consts[idx2D] =
3035 lp_build_array_get(gallivm, bld->consts_ptr, index2D);
3036 bld->consts_sizes[idx2D] =
3037 lp_build_array_get(gallivm, bld->const_sizes_ptr, index2D);
3052 struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
3086 if (bld->use_immediates_array) {
3087 unsigned index = bld->num_immediates;
3088 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
3091 assert(bld->indirect_files & (1 << TGSI_FILE_IMMEDIATE));
3094 bld->bld_base.base.gallivm, index * 4 + i);
3096 bld->imms_array, &lindex, 1, "");
3103 assert(bld->num_immediates < LP_MAX_INLINED_IMMEDIATES);
3106 bld->immediates[bld->num_immediates][i] = imms[i];
3108 if (bld->indirect_files & (1 << TGSI_FILE_IMMEDIATE)) {
3109 unsigned index = bld->num_immediates;
3110 struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
3114 bld->bld_base.base.gallivm, index * 4 + i);
3116 bld->imms_array, &lindex, 1, "");
3118 bld->immediates[index][i],
3124 bld->num_immediates++;
3133 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3135 emit_fetch_deriv(bld, emit_data->args[0], NULL,
3145 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3147 emit_fetch_deriv(bld, emit_data->args[0], NULL, NULL,
3157 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3159 emit_kill(bld, bld_base->pc - 1);
3168 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3170 emit_kill_if(bld, emit_data->inst, bld_base->pc - 1);
3179 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3181 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_NONE,
3191 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3193 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_NONE,
3203 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3205 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_LOD_BIAS,
3215 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3217 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_LOD_BIAS,
3227 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3229 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV,
3239 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3241 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_EXPLICIT_LOD,
3251 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3253 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_EXPLICIT_LOD,
3263 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3265 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_PROJECTED,
3275 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3277 emit_tex(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_NONE,
3287 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3289 emit_size_query(bld, emit_data->inst, emit_data->output, FALSE);
3298 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3300 emit_fetch_texels(bld, emit_data->inst, emit_data->output, FALSE);
3309 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3311 emit_fetch_texels(bld, emit_data->inst, emit_data->output, TRUE);
3320 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3322 emit_sample(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_NONE,
3332 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3334 emit_sample(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_LOD_BIAS,
3344 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3346 emit_sample(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_NONE,
3356 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3358 emit_sample(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_LOD_ZERO,
3368 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3370 emit_sample(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV,
3380 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3382 emit_sample(bld, emit_data->inst, LP_BLD_TEX_MODIFIER_EXPLICIT_LOD,
3392 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3394 emit_size_query(bld, emit_data->inst, emit_data->output, TRUE);
3400 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3401 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
3402 struct lp_exec_mask *exec_mask = &bld->exec_mask;
3405 return lp_build_mask_value(bld->mask);
3407 return LLVMBuildAnd(builder, lp_build_mask_value(bld->mask),
3441 clamp_mask_to_max_output_vertices(struct lp_build_tgsi_soa_context * bld,
3445 LLVMBuilderRef builder = bld
3446 struct lp_build_context *int_bld = &bld->bld_base.int_bld;
3449 bld->max_output_vertices_vec);
3460 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3461 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
3463 if (bld->gs_iface->emit_vertex) {
3466 LLVMBuildLoad(builder, bld->total_emitted_vertices_vec_ptr, "");
3467 mask = clamp_mask_to_max_output_vertices(bld, mask,
3469 gather_outputs(bld);
3470 bld->gs_iface->emit_vertex(bld->gs_iface, &bld->bld_base,
3471 bld->outputs,
3473 increment_vec_ptr_by_mask(bld_base, bld->emitted_vertices_vec_ptr,
3475 increment_vec_ptr_by_mask(bld_base, bld->total_emitted_vertices_vec_ptr,
3478 lp_build_print_value(bld->bld_base.base.gallivm,
3481 lp_build_print_value(bld->bld_base.base.gallivm,
3493 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3494 LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
3496 if (bld->gs_iface->end_primitive) {
3499 LLVMBuildLoad(builder, bld->emitted_vertices_vec_ptr, "");
3501 LLVMBuildLoad(builder, bld->emitted_prims_vec_ptr, "");
3512 bld->gs_iface->end_primitive(bld->gs_iface, &bld->bld_base,
3517 lp_build_print_value(bld->bld_base.base.gallivm,
3520 lp_build_print_value(bld->bld_base.base.gallivm,
3523 lp_build_print_value(bld->bld_base.base.gallivm,
3526 bld->emitted_prims_vec_ptr, ""));
3528 increment_vec_ptr_by_mask(bld_base, bld->emitted_prims_vec_ptr,
3530 clear_uint_vec_ptr_from_mask(bld_base, bld->emitted_vertices_vec_ptr,
3533 lp_build_print_value(bld->bld_base.base.gallivm,
3536 bld->emitted_vertices_vec_ptr, ""));
3548 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3550 if (bld->gs_iface->end_primitive) {
3562 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3564 lp_exec_mask_call(&bld->exec_mask, emit_data->inst->Label.Label,
3574 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3576 lp_exec_mask_ret(&bld->exec_mask, &bld_base->pc);
3585 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3587 lp_exec_break(&bld->exec_mask, bld_base);
3596 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3605 lp_exec_break_condition(&bld->exec_mask, cond);
3615 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3618 emit_data->args[0], bld->bld_base.base.zero);
3619 lp_exec_mask_cond_push(&bld->exec_mask, tmp);
3629 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3634 lp_exec_mask_cond_push(&bld->exec_mask, tmp);
3643 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3645 lp_exec_case(&bld->exec_mask, emit_data->args[0]);
3654 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3656 lp_exec_default(&bld->exec_mask, bld_base);
3665 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3667 lp_exec_switch(&bld->exec_mask, emit_data->args[0]);
3676 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3678 lp_exec_endswitch(&bld->exec_mask, bld_base);
3687 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3689 lp_exec_bgnloop(&bld->exec_mask);
3698 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3700 lp_exec_mask_bgnsub(&bld->exec_mask);
3709 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3711 lp_exec_mask_cond_invert(&bld->exec_mask);
3720 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3722 lp_exec_mask_cond_pop(&bld->exec_mask);
3731 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3733 lp_exec_endloop(bld_base->base.gallivm, &bld->exec_mask);
3742 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3744 lp_exec_mask_endsub(&bld->exec_mask, &bld_base->pc);
3753 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3755 lp_exec_continue(&bld->exec_mask);
3760 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3763 if (bld->indirect_files & (1 << TGSI_FILE_TEMPORARY)) {
3767 bld->temps_array = lp_build_array_alloca(gallivm,
3772 if (bld->indirect_files & (1 << TGSI_FILE_OUTPUT)) {
3776 bld->outputs_array = lp_build_array_alloca(gallivm,
3781 if (bld->indirect_files & (1 << TGSI_FILE_IMMEDIATE)) {
3785 bld->imms_array = lp_build_array_alloca(gallivm,
3792 if (bld->indirect_files & (1 << TGSI_FILE_INPUT) && !bld->gs_iface) {
3797 bld->inputs_array = lp_build_array_alloca(gallivm,
3809 LLVMBuildGEP(gallivm->builder, bld->inputs_array,
3811 LLVMValueRef value = bld->inputs[index][chan];
3818 if (bld->gs_iface) {
3819 struct lp_build_context *uint_bld = &bld->bld_base.uint_bld;
3820 bld->emitted_prims_vec_ptr =
3824 bld->emitted_vertices_vec_ptr =
3828 bld->total_emitted_vertices_vec_ptr =
3834 bld->emitted_prims_vec_ptr);
3836 bld->emitted_vertices_vec_ptr);
3838 bld->total_emitted_vertices_vec_ptr);
3843 emit_dump_file(bld, TGSI_FILE_CONSTANT);
3844 if (!bld->gs_iface)
3845 emit_dump_file(bld, TGSI_FILE_INPUT);
3851 struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
3857 emit_dump_file(bld, TGSI_FILE_TEMPORARY);
3859 emit_dump_file(bld, TGSI_FILE_OUTPUT);
3865 if (bld->gs_iface) {
3871 end_primitive_masked(bld_base, lp_build_mask_value(bld->mask));
3874 LLVMBuildLoad(builder, bld->total_emitted_vertices_vec_ptr, "");
3876 LLVMBuildLoad(builder, bld->emitted_prims_vec_ptr, "");
3878 bld->gs_iface->gs_epilogue(bld->gs_iface,
3879 &bld->bld_base,
3883 gather_outputs(bld);
3903 struct lp_build_tgsi_soa_context bld;
3914 memset(&bld, 0, sizeof bld);
3915 lp_build_context_init(&bld.bld_base.base, gallivm, type);
3916 lp_build_context_init(&bld.bld_base.uint_bld, gallivm, lp_uint_type(type));
3917 lp_build_context_init(&bld.bld_base.int_bld, gallivm, lp_int_type(type));
3918 lp_build_context_init(&bld.elem_bld, gallivm, lp_elem_type(type));
3923 lp_build_context_init(&bld.bld_base.dbl_bld, gallivm, dbl_type);
3929 lp_build_context_init(&bld.bld_base.uint64_bld, gallivm, uint64_type);
3935 lp_build_context_init(&bld.bld_base.int64_bld, gallivm, int64_type);
3937 bld.mask = mask;
3938 bld.inputs = inputs;
3939 bld.outputs = outputs;
3940 bld.consts_ptr = consts_ptr;
3941 bld.const_sizes_ptr = const_sizes_ptr;
3942 bld.sampler = sampler;
3943 bld.bld_base.info = info;
3944 bld.indirect_files = info->indirect_files;
3945 bld.context_ptr = context_ptr;
3946 bld.thread_data_ptr = thread_data_ptr;
3954 bld.indirect_files |= (1 << TGSI_FILE_TEMPORARY);
3961 bld.use_immediates_array =
3963 if (bld.use_immediates_array) {
3964 bld.indirect_files |= (1 << TGSI_FILE_IMMEDIATE);
3968 bld.bld_base.soa = TRUE;
3969 bld.bld_base.emit_debug = emit_debug;
3970 bld.bld_base.emit_fetch_funcs[TGSI_FILE_CONSTANT] = emit_fetch_constant;
3971 bld.bld_base.emit_fetch_funcs[TGSI_FILE_IMMEDIATE] = emit_fetch_immediate;
3972 bld.bld_base.emit_fetch_funcs[TGSI_FILE_INPUT] = emit_fetch_input;
3973 bld.bld_base.emit_fetch_funcs[TGSI_FILE_TEMPORARY] = emit_fetch_temporary;
3974 bld.bld_base.emit_fetch_funcs[TGSI_FILE_SYSTEM_VALUE] = emit_fetch_system_value;
3975 bld.bld_base.emit_store = emit_store;
3977 bld.bld_base.emit_declaration = lp_emit_declaration_soa;
3978 bld.bld_base.emit_immediate = lp_emit_immediate_soa;
3980 bld.bld_base.emit_prologue = emit_prologue;
3981 bld.bld_base.emit_epilogue = emit_epilogue;
3984 lp_set_default_actions_cpu(&bld.bld_base);
3986 bld.bld_base.op_actions[TGSI_OPCODE_BGNLOOP].emit = bgnloop_emit;
3987 bld.bld_base.op_actions[TGSI_OPCODE_BGNSUB].emit = bgnsub_emit;
3988 bld.bld_base.op_actions[TGSI_OPCODE_BRK].emit = brk_emit;
3989 bld.bld_base.op_actions[TGSI_OPCODE_BREAKC].emit = breakc_emit;
3990 bld.bld_base.op_actions[TGSI_OPCODE_CAL].emit = cal_emit;
3991 bld.bld_base.op_actions[TGSI_OPCODE_CASE].emit = case_emit;
3992 bld.bld_base.op_actions[TGSI_OPCODE_CONT].emit = cont_emit;
3993 bld.bld_base.op_actions[TGSI_OPCODE_DDX].emit = ddx_emit;
3994 bld.bld_base.op_actions[TGSI_OPCODE_DDY].emit = ddy_emit;
3995 bld.bld_base.op_actions[TGSI_OPCODE_DEFAULT].emit = default_emit;
3996 bld.bld_base.op_actions[TGSI_OPCODE_ELSE].emit = else_emit;
3997 bld.bld_base.op_actions[TGSI_OPCODE_ENDIF].emit = endif_emit;
3998 bld.bld_base.op_actions[TGSI_OPCODE_ENDLOOP].emit = endloop_emit;
3999 bld.bld_base.op_actions[TGSI_OPCODE_ENDSUB].emit = endsub_emit;
4000 bld.bld_base.op_actions[TGSI_OPCODE_ENDSWITCH].emit = endswitch_emit;
4001 bld.bld_base.op_actions[TGSI_OPCODE_IF].emit = if_emit;
4002 bld.bld_base.op_actions[TGSI_OPCODE_UIF].emit = uif_emit;
4003 bld.bld_base.op_actions[TGSI_OPCODE_KILL_IF].emit = kill_if_emit;
4004 bld.bld_base.op_actions[TGSI_OPCODE_KILL].emit = kill_emit;
4005 bld.bld_base.op_actions[TGSI_OPCODE_RET].emit = ret_emit;
4006 bld.bld_base.op_actions[TGSI_OPCODE_SWITCH].emit = switch_emit;
4007 bld.bld_base.op_actions[TGSI_OPCODE_TEX].emit = tex_emit;
4008 bld.bld_base.op_actions[TGSI_OPCODE_TXB].emit = txb_emit;
4009 bld.bld_base.op_actions[TGSI_OPCODE_TXD].emit = txd_emit;
4010 bld.bld_base.op_actions[TGSI_OPCODE_TXL].emit = txl_emit;
4011 bld.bld_base.op_actions[TGSI_OPCODE_TXP].emit = txp_emit;
4012 bld.bld_base.op_actions[TGSI_OPCODE_TXQ].emit = txq_emit;
4013 bld.bld_base.op_actions[TGSI_OPCODE_TXF].emit = txf_emit;
4014 bld.bld_base.op_actions[TGSI_OPCODE_TEX2].emit = tex2_emit;
4015 bld.bld_base.op_actions[TGSI_OPCODE_TXB2].emit = txb2_emit;
4016 bld.bld_base.op_actions[TGSI_OPCODE_TXL2].emit = txl2_emit;
4017 bld.bld_base.op_actions[TGSI_OPCODE_TG4].emit = tg4_emit;
4019 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE].emit = sample_emit;
4020 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_B].emit = sample_b_emit;
4021 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_C].emit = sample_c_emit;
4022 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_C_LZ].emit = sample_c_lz_emit;
4023 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_D].emit = sample_d_emit;
4024 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_I].emit = sample_i_emit;
4025 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_I_MS].emit = sample_i_emit;
4026 bld.bld_base.op_actions[TGSI_OPCODE_SAMPLE_L].emit = sample_l_emit;
4027 bld.bld_base.op_actions[TGSI_OPCODE_SVIEWINFO].emit = sviewinfo_emit;
4038 bld.indirect_files |= (1 << TGSI_FILE_INPUT);
4039 bld.gs_iface = gs_iface;
4040 bld.bld_base.emit_fetch_funcs[TGSI_FILE_INPUT] = emit_fetch_gs_input;
4041 bld.bld_base.op_actions[TGSI_OPCODE_EMIT].emit = emit_vertex;
4042 bld.bld_base.op_actions[TGSI_OPCODE_ENDPRIM].emit = end_primitive;
4049 bld.max_output_vertices_vec =
4050 lp_build_const_int_vec(gallivm, bld.bld_base.int_bld.type,
4054 lp_exec_mask_init(&bld.exec_mask, &bld.bld_base.int_bld);
4056 bld.system_values = *system_values;
4058 lp_build_tgsi_llvm(&bld.bld_base, tokens);
4075 lp_exec_mask_fini(&bld.exec_mask);