Lines Matching refs:variant
73 struct draw_gs_llvm_variant *variant;
86 struct draw_tcs_llvm_variant *variant;
100 struct draw_tes_llvm_variant *variant;
711 create_jit_types(struct draw_llvm_variant *variant)
713 struct gallivm_state *gallivm = variant->gallivm;
715 variant->context_type = create_jit_context_type(gallivm, "draw_jit_context");
716 variant->context_ptr_type = LLVMPointerType(variant->context_type, 0);
718 variant->buffer_type = create_jit_dvbuffer_type(gallivm, "draw_vertex_buffer");
719 variant->buffer_ptr_type = LLVMPointerType(variant->buffer_type, 0);
721 variant->vb_type = create_jit_vertex_buffer_type(gallivm, "pipe_vertex_buffer");
722 variant->vb_ptr_type = LLVMPointerType(variant->vb_type, 0);
727 get_context_ptr_type(struct draw_llvm_variant *variant)
729 if (!variant->context_ptr_type)
730 create_jit_types(variant);
731 return variant->context_ptr_type;
736 get_buffer_ptr_type(struct draw_llvm_variant *variant)
738 if (!variant->buffer_ptr_type)
739 create_jit_types(variant);
740 return variant->buffer_ptr_type;
745 get_vb_ptr_type(struct draw_llvm_variant *variant)
747 if (!variant->vb_ptr_type)
748 create_jit_types(variant);
749 return variant->vb_ptr_type;
753 get_vertex_header_ptr_type(struct draw_llvm_variant *variant)
755 assert(variant->vertex_header_ptr_type);
756 return variant->vertex_header_ptr_type;
857 struct draw_llvm_variant *variant;
864 variant = MALLOC(sizeof *variant +
866 sizeof variant->key);
867 if (!variant)
870 variant->llvm = llvm;
871 variant->shader = shader;
872 memcpy(&variant->key, key, shader->variant_key_size);
875 variant->shader->variants_cached);
890 variant->gallivm = gallivm_create(module_name, llvm->context, &cached);
892 create_jit_types(variant);
899 draw_llvm_dump_variant_key(&variant->key);
902 variant->vertex_header_type = create_jit_vertex_header(variant->gallivm, num_inputs);
903 variant->vertex_header_ptr_type = LLVMPointerType(variant->vertex_header_type, 0);
905 draw_llvm_generate(llvm, variant);
907 gallivm_compile_module(variant->gallivm);
909 variant->jit_func = (draw_jit_vert_func)
910 gallivm_jit_function(variant->gallivm, variant->function);
916 gallivm_free_ir(variant->gallivm);
918 variant->list_item_global.base = variant;
919 variant->list_item_local.base = variant;
920 /*variant->no = */shader->variants_created++;
921 variant->list_item_global.base = variant;
923 return variant;
955 generate_vs(struct draw_llvm_variant *variant,
967 struct draw_llvm *llvm = variant->llvm;
970 draw_jit_context_vs_constants(variant, context_ptr);
972 draw_jit_context_num_vs_constants(variant, context_ptr);
974 draw_jit_context_vs_ssbos(variant, context_ptr);
976 draw_jit_context_num_vs_ssbos(variant, context_ptr);
993 params.aniso_filter_table = draw_jit_context_aniso_filter_table(variant, context_ptr);
997 lp_build_nir_soa(variant->gallivm,
1002 lp_build_tgsi_soa(variant->gallivm,
1009 do_clamp_vertex_color(variant->gallivm,
1431 generate_viewport(struct draw_llvm_variant *variant,
1438 struct gallivm_state *gallivm = variant->gallivm;
1440 const unsigned pos = variant->llvm->draw->vs.position_output;
1444 LLVMValueRef vp_ptr = draw_jit_context_viewports(variant, context_ptr);
1794 struct draw_gs_llvm_variant *variant = gs_iface->variant;
1795 struct gallivm_state *gallivm = variant->gallivm;
1802 lp_build_const_int32(gallivm, variant->shader->base.primitive_boundary);
1803 LLVMValueRef io = variant->io_ptr;
1805 const struct tgsi_shader_info *gs_info = &variant->shader->base.info;
1815 lp_build_const_int32(gallivm, variant->shader->base.primitive_boundary - 1), "");
1819 LLVMValueRef cnd = LLVMBuildICmp(builder, LLVMIntULT, stream_idx, lp_build_const_int32(gallivm, variant->shader->base.num_vertex_streams), "");
1824 if (variant->key.clamp_vertex_color) {
1828 convert_to_aos(gallivm, variant->vertex_header_type,
1845 struct draw_gs_llvm_variant *variant = gs_iface->variant;
1846 struct gallivm_state *gallivm = variant->gallivm;
1849 draw_gs_jit_prim_lengths(variant, variant->context_ptr);
1864 prims_emitted = LLVMBuildMul(gallivm->builder, prims_emitted, lp_build_const_int32(gallivm, variant->shader->base.num_vertex_streams), "");
1880 struct draw_gs_llvm_variant *variant = gs_iface->variant;
1881 struct gallivm_state *gallivm = variant->gallivm;
1884 draw_gs_jit_emitted_vertices(variant, variant->context_ptr);
1886 draw_gs_jit_emitted_prims(variant, variant->context_ptr);
1897 draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant)
1899 struct gallivm_state *gallivm = variant->gallivm;
1932 struct draw_llvm_variant_key *key = &variant->key;
1957 arg_types[i++] = get_context_ptr_type(variant); /* context */
1958 arg_types[i++] = get_vertex_header_ptr_type(variant); /* vertex_header */
1959 arg_types[i++] = get_buffer_ptr_type(variant); /* vbuffers */
1963 arg_types[i++] = get_vb_ptr_type(variant); /* pipe_vertex_buffer's */
1975 variant->function = variant_func;
2090 vbuffer_ptr = LLVMBuildGEP2(builder, variant->buffer_type, vbuffers_ptr, &vb_index, 1, "");
2091 vb_info = LLVMBuildGEP2(builder, variant->vb_type, vb_ptr, &vb_index, 1, "");
2092 vb_stride[j] = draw_jit_vbuffer_stride(gallivm, variant->vb_type, vb_info);
2095 vb_buffer_offset = draw_jit_vbuffer_offset(gallivm, variant->vb_type, vb_info);
2096 map_ptr[j] = draw_jit_dvbuffer_map(gallivm, variant->buffer_type, vbuffer_ptr);
2097 buffer_size = draw_jit_dvbuffer_size(gallivm, variant->buffer_type, vbuffer_ptr);
2183 io = LLVMBuildGEP2(builder, variant->vertex_header_type, io_ptr, &io_itr, 1, "");
2297 generate_vs(variant,
2312 store_clip(gallivm, vs_type, variant->vertex_header_type, io, outputs, pos);
2323 variant->context_type,
2335 generate_viewport(variant, builder, vs_type, outputs, context_ptr);
2346 convert_to_aos(gallivm, variant->vertex_header_type, io, NULL, outputs, clipmask,
2665 draw_llvm_destroy_variant(struct draw_llvm_variant *variant)
2667 struct draw_llvm *llvm = variant->llvm;
2670 debug_printf("Deleting VS variant: %u vs variants,\t%u total variants\n",
2671 variant->shader->variants_cached, llvm->nr_variants);
2674 gallivm_destroy(variant->gallivm);
2676 list_del(&variant->list_item_local.list);
2677 variant->shader->variants_cached--;
2678 list_del(&variant->list_item_global.list);
2680 FREE(variant);
2708 get_gs_context_ptr_type(struct draw_gs_llvm_variant *variant)
2710 if (!variant->context_ptr_type)
2711 create_gs_jit_types(variant);
2712 return variant->context_ptr_type;
2716 generate_mask_value(struct draw_gs_llvm_variant *variant,
2719 struct gallivm_state *gallivm = variant->gallivm;
2727 variant->num_prims);
2740 struct draw_gs_llvm_variant *variant)
2742 struct gallivm_state *gallivm = variant->gallivm;
2761 const struct tgsi_token *tokens = variant->shader->base.state.tokens;
2766 const struct tgsi_shader_info *gs_info = &variant->shader->base.info;
2767 unsigned vector_length = variant->shader->base.vector_length;
2774 assert(variant->vertex_header_ptr_type);
2777 arg_types[0] = get_gs_context_ptr_type(variant); /* context */
2778 arg_types[1] = variant->input_array_type; /* input */
2779 arg_types[2] = LLVMPointerType(variant->vertex_header_ptr_type, 0); /* vertex_header */
2790 variant->function = variant_func;
2818 variant->context_ptr = context_ptr;
2819 variant->io_ptr = io_ptr;
2820 variant->num_prims = num_prims;
2827 gs_iface.variant = variant;
2846 consts_ptr = draw_gs_jit_context_constants(variant, context_ptr);
2848 draw_gs_jit_context_num_constants(variant, context_ptr);
2850 ssbos_ptr = draw_gs_jit_context_ssbos(variant, context_ptr);
2852 draw_gs_jit_context_num_ssbos(variant, context_ptr);
2855 sampler = draw_llvm_sampler_soa_create(variant->key.samplers,
2856 MAX2(variant->key.nr_samplers,
2857 variant->key.nr_sampler_views));
2858 image = draw_llvm_image_soa_create(draw_gs_llvm_variant_key_images(&variant->key),
2859 variant->key.nr_images);
2860 mask_val = generate_mask_value(variant, gs_type);
2872 draw_gs_llvm_dump_variant_key(&variant->key);
2890 params.gs_vertex_streams = variant->shader->base.num_vertex_streams;
2891 params.aniso_filter_table = draw_gs_jit_context_aniso_filter_table(variant, context_ptr);
2894 lp_build_tgsi_soa(variant->gallivm,
2899 lp_build_nir_soa(variant->gallivm,
2919 struct draw_gs_llvm_variant *variant;
2927 variant = MALLOC(sizeof *variant +
2929 sizeof variant->key);
2930 if (!variant)
2933 variant->llvm = llvm;
2934 variant->shader = shader;
2937 variant->shader->variants_cached);
2939 memcpy(&variant->key, key, shader->variant_key_size);
2954 variant->gallivm = gallivm_create(module_name, llvm->context, &cached);
2956 create_gs_jit_types(variant);
2958 variant->vertex_header_type = create_jit_vertex_header(variant->gallivm, num_outputs);
2959 variant->vertex_header_ptr_type = LLVMPointerType(variant->vertex_header_type, 0);
2961 draw_gs_llvm_generate(llvm, variant);
2963 gallivm_compile_module(variant->gallivm);
2965 variant->jit_func = (draw_gs_jit_func)
2966 gallivm_jit_function(variant->gallivm, variant->function);
2972 gallivm_free_ir(variant->gallivm);
2974 variant->list_item_global.base = variant;
2975 variant->list_item_local.base = variant;
2976 /*variant->no = */shader->variants_created++;
2977 variant->list_item_global.base = variant;
2979 return variant;
2983 draw_gs_llvm_destroy_variant(struct draw_gs_llvm_variant *variant)
2985 struct draw_llvm *llvm = variant->llvm;
2988 debug_printf("Deleting GS variant: %u gs variants,\t%u total variants\n",
2989 variant->shader->variants_cached, llvm->nr_gs_variants);
2992 gallivm_destroy(variant->gallivm);
2994 list_del(&variant->list_item_local.list);
2995 variant->shader->variants_cached--;
2996 list_del(&variant->list_item_global.list);
2998 FREE(variant);
3094 get_tcs_context_ptr_type(struct draw_tcs_llvm_variant *variant)
3096 if (!variant->context_ptr_type)
3097 create_tcs_jit_types(variant);
3098 return variant->context_ptr_type;
3307 generate_tcs_mask_value(struct draw_tcs_llvm_variant *variant,
3310 struct gallivm_state *gallivm = variant->gallivm;
3330 struct draw_tcs_llvm_variant *variant)
3332 struct gallivm_state *gallivm = variant->gallivm;
3355 unsigned vector_length = variant->shader->base.vector_length;
3363 arg_types[0] = get_tcs_context_ptr_type(variant); /* context */
3364 arg_types[1] = variant->input_array_type; /* input */
3365 arg_types[2] = variant->output_array_type;
3379 variant->function = variant_func;
3422 lp_build_context_init(&bldvec, variant->gallivm, lp_int_type(tcs_type));
3424 LLVMValueRef count = lp_build_const_int32(gallivm, variant->shader->base.vertices_out);
3429 unsigned count_align = util_align_npot(variant->shader->base.vertices_out, tcs_type.length);
3490 consts_ptr = draw_tcs_jit_context_constants(variant, context_ptr);
3492 draw_tcs_jit_context_num_constants(variant, context_ptr);
3494 ssbos_ptr = draw_tcs_jit_context_ssbos(variant, context_ptr);
3496 draw_tcs_jit_context_num_ssbos(variant, context_ptr);
3497 sampler = draw_llvm_sampler_soa_create(variant->key.samplers,
3498 MAX2(variant->key.nr_samplers,
3499 variant->key.nr_sampler_views));
3500 image = draw_llvm_image_soa_create(draw_tcs_llvm_variant_key_images(&variant->key),
3501 variant->key.nr_images);
3526 mask_val = generate_tcs_mask_value(variant, tcs_type, count, LLVMBuildMul(builder, counter, step, ""));
3553 params.aniso_filter_table = draw_tcs_jit_context_aniso_filter_table(variant, context_ptr);
3555 lp_build_nir_soa(variant->gallivm,
3584 struct draw_tcs_llvm_variant *variant;
3591 variant = MALLOC(sizeof *variant +
3592 shader->variant_key_size - sizeof variant->key);
3593 if (!variant)
3596 variant->llvm = llvm;
3597 variant->shader = shader;
3600 variant->shader->variants_cached);
3602 memcpy(&variant->key, key, shader->variant_key_size);
3618 variant->gallivm = gallivm_create(module_name, llvm->context, &cached);
3620 create_tcs_jit_types(variant);
3624 draw_tcs_llvm_dump_variant_key(&variant->key);
3627 draw_tcs_llvm_generate(llvm, variant);
3629 gallivm_compile_module(variant->gallivm);
3631 variant->jit_func = (draw_tcs_jit_func)
3632 gallivm_jit_function(variant->gallivm, variant->function);
3638 gallivm_free_ir(variant->gallivm);
3640 variant->list_item_global.base = variant;
3641 variant->list_item_local.base = variant;
3642 /*variant->no = */shader->variants_created++;
3643 variant->list_item_global.base = variant;
3645 return variant;
3649 draw_tcs_llvm_destroy_variant(struct draw_tcs_llvm_variant *variant)
3651 struct draw_llvm *llvm = variant->llvm;
3654 debug_printf("Deleting TCS variant: %u tcs variants,\t%u total variants\n",
3655 variant->shader->variants_cached, llvm->nr_tcs_variants);
3658 gallivm_destroy(variant->gallivm);
3660 list_del(&variant->list_item_local.list);
3661 variant->shader->variants_cached--;
3662 list_del(&variant->list_item_global.list);
3664 FREE(variant);
3755 get_tes_context_ptr_type(struct draw_tes_llvm_variant *variant)
3757 if (!variant->context_ptr_type)
3758 create_tes_jit_types(variant);
3759 return variant->context_ptr_type;
3763 generate_tes_mask_value(struct draw_tes_llvm_variant *variant,
3766 struct gallivm_state *gallivm = variant->gallivm;
3830 channel_vec = LLVMBuildGEP2(builder, tes->variant->input_array_deref_type, tes->input, indices, 3, "");
3840 res = LLVMBuildGEP2(builder, tes->variant->input_array_deref_type, tes->input, indices, 3, "");
3880 channel_vec = LLVMBuildGEP2(builder, tes->variant->input_array_deref_type, tes->input, indices, 3, "");
3890 res = LLVMBuildGEP2(builder, tes->variant->input_array_deref_type, tes->input, indices, 3, "");
3899 struct draw_tes_llvm_variant *variant)
3901 struct gallivm_state *gallivm = variant->gallivm;
3928 unsigned vector_length = variant->shader->base.vector_length;
3938 arg_types[0] = get_tes_context_ptr_type(variant); /* context */
3939 arg_types[1] = variant->input_array_type; /* input */
3940 arg_types[2] = variant->vertex_header_ptr_type;
3953 variant->function = variant_func;
3989 tes_iface.variant = variant;
4004 lp_build_context_init(&bldvec, variant->gallivm, lp_int_type(tes_type));
4005 consts_ptr = draw_tes_jit_context_constants(variant, context_ptr);
4007 draw_tes_jit_context_num_constants(variant, context_ptr);
4009 ssbos_ptr = draw_tes_jit_context_ssbos(variant, context_ptr);
4011 draw_tes_jit_context_num_ssbos(variant, context_ptr);
4012 sampler = draw_llvm_sampler_soa_create(variant->key.samplers,
4013 MAX2(variant->key.nr_samplers,
4014 variant->key.nr_sampler_views));
4015 image = draw_llvm_image_soa_create(draw_tes_llvm_variant_key_images(&variant->key),
4016 variant->key.nr_images);
4028 if (variant->key.primid_needed) {
4029 int slot = variant->key.primid_output;
4040 io = LLVMBuildGEP2(builder, variant->vertex_header_type, io_ptr, &lp_loop.counter, 1, "");
4041 mask_val = generate_tes_mask_value(variant, tes_type, num_tess_coord, lp_loop.counter);
4051 if (variant->shader->base.prim_mode == PIPE_PRIM_TRIANGLES) {
4080 params.aniso_filter_table = draw_tes_jit_context_aniso_filter_table(variant, context_ptr);
4082 lp_build_nir_soa(variant->gallivm,
4089 if (variant->key.clamp_vertex_color) {
4091 do_clamp_vertex_color(variant->gallivm,
4098 convert_to_aos(gallivm, variant->vertex_header_type, io, NULL, outputs, clipmask,
4114 struct draw_tes_llvm_variant *variant;
4121 variant = MALLOC(sizeof *variant +
4122 shader->variant_key_size - sizeof variant->key);
4123 if (!variant)
4126 variant->llvm = llvm;
4127 variant->shader = shader;
4130 variant->shader->variants_cached);
4132 memcpy(&variant->key, key, shader->variant_key_size);
4146 variant->gallivm = gallivm_create(module_name, llvm->context, &cached);
4148 create_tes_jit_types(variant);
4150 variant->vertex_header_type = create_jit_vertex_header(variant->gallivm, num_outputs);
4151 variant->vertex_header_ptr_type = LLVMPointerType(variant->vertex_header_type, 0);
4155 draw_tes_llvm_dump_variant_key(&variant->key);
4158 draw_tes_llvm_generate(llvm, variant);
4160 gallivm_compile_module(variant->gallivm);
4162 variant->jit_func = (draw_tes_jit_func)
4163 gallivm_jit_function(variant->gallivm, variant->function);
4169 gallivm_free_ir(variant->gallivm);
4171 variant->list_item_global.base = variant;
4172 variant->list_item_local.base = variant;
4173 /*variant->no = */shader->variants_created++;
4174 variant->list_item_global.base = variant;
4176 return variant;
4180 draw_tes_llvm_destroy_variant(struct draw_tes_llvm_variant *variant)
4182 struct draw_llvm *llvm = variant->llvm;
4185 debug_printf("Deleting TES variant: %u tes variants,\t%u total variants\n",
4186 variant->shader->variants_cached, llvm->nr_tes_variants);
4189 gallivm_destroy(variant->gallivm);
4191 list_del(&variant->list_item_local.list);
4192 variant->shader->variants_cached--;
4193 list_del(&variant->list_item_global.list);
4195 FREE(variant);