Lines Matching defs:var
129 nir_variable *var = nir_deref_instr_get_variable(nir_instr_as_deref(intr->src[0].ssa->parent_instr));
130 if (var->data.mode != nir_var_shader_in)
132 if (!glsl_type_is_64bit(var->type) || !glsl_type_is_vector(var->type) || glsl_get_vector_elements(var->type) < 3)
136 nir_variable *var2 = nir_variable_clone(var, b->shader);
141 unsigned total_num_components = glsl_get_vector_elements(var->type);
143 var2->type = glsl_vector_type(glsl_get_base_type(var->type), glsl_get_vector_elements(var->type) - 2);
145 var->type = glsl_vector_type(glsl_get_base_type(var->type), 2);
150 nir_ssa_def *load = nir_load_var(b, var);
186 nir_variable *var = nir_deref_instr_get_variable(nir_instr_as_deref(intr->src[0].ssa->parent_instr));
187 if (var->data.mode != nir_var_shader_in)
189 if (glsl_get_bit_size(var->type) != 64 || glsl_get_base_type(var->type) >= GLSL_TYPE_SAMPLER)
192 unsigned num_components = glsl_get_vector_elements(var->type);
194 switch (glsl_get_base_type(var->type)) {
207 var->type = glsl_vector_type(base_type, num_components * 2);
211 nir_ssa_def *load = nir_load_var(b, var);
322 nir_variable *var = nir_find_variable_with_location(shader, nir_var_shader_out, FRAG_RESULT_DATA1);
323 if (var) {
324 var->data.location = FRAG_RESULT_DATA0;
325 var->data.index = 1;
490 nir_foreach_variable_with_modes(var, shader, nir_var_mem_ssbo | nir_var_mem_ubo) {
491 unsigned idx = glsl_get_explicit_stride(glsl_get_struct_field(glsl_without_array(var->type), 0)) >> 1;
492 if (var->data.mode == nir_var_mem_ssbo) {
494 bo.ssbo[idx] = var;
496 if (var->data.driver_location) {
498 bo.ubo[idx] = var;
501 bo.uniforms[idx] = var;
515 nir_variable *var = NULL;
522 var = bo->ssbo[nir_dest_bit_size(intr->dest) >> 4];
527 var = bo->ssbo[nir_dest_bit_size(intr->dest) >> 4];
532 var = bo->uniforms[nir_dest_bit_size(intr->dest) >> 4];
534 var = bo->ubo[nir_dest_bit_size(intr->dest) >> 4];
545 const struct glsl_type *strct_type = glsl_get_array_element(var->type);
631 nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
632 if (!var->data.fb_fetch_output)
635 nir_variable *fbfetch = nir_variable_clone(var, b->shader);
658 nir_foreach_shader_out_variable(var, shader) {
659 if (var->data.fb_fetch_output) {
660 *fbfetch = var;
675 nir_foreach_shader_out_variable(var, s) {
676 if (var->data.location == VARYING_SLOT_PSIZ) {
678 have_psiz |= !!var->data.explicit_location;
689 nir_foreach_shader_out_variable(var, nir) {
690 if (var->data.location == location)
698 nir_foreach_shader_out_variable(var, nir) {
699 if (var->data.location == location) {
700 unsigned count_slots = glsl_count_vec4_slots(var->type, false, false);
703 out = var;
710 nir_foreach_shader_out_variable(var, nir) {
711 if (var->data.location == location &&
712 (var->data.location_frac == location_frac ||
713 (glsl_type_is_array(var->type) ? glsl_array_size(var->type) : glsl_get_vector_elements(var->type)) >= location_frac + 1)) {
714 if (location != VARYING_SLOT_PSIZ || !have_psiz || var->data.explicit_location)
715 return var;
783 get_slot_components(nir_variable *var, unsigned slot, unsigned so_slot)
785 assert(var && slot < var->data.location + glsl_count_vec4_slots(var->type, false, false));
786 const struct glsl_type *orig_type = var->type;
787 const struct glsl_type *type = glsl_without_array(var->type);
836 nir_foreach_shader_out_variable(var, zs->nir) {
837 if (var->data.location == VARYING_SLOT_PSIZ && !var->data.explicit_location)
854 nir_variable *var = NULL;
856 while (!var)
857 var = find_var_with_location_frac(zs->nir, slot--, output->start_component, have_psiz);
858 if (var->data.location == VARYING_SLOT_PSIZ)
859 psiz = var;
862 if (var->data.explicit_xfb_buffer) {
869 bool is_struct = glsl_type_is_struct_or_ifc(glsl_without_array(var->type));
870 unsigned num_components = get_slot_components(var, slot, so_slot);
875 var->data.explicit_xfb_buffer = 1;
876 var->data.xfb.buffer = output->output_buffer;
877 var->data.xfb.stride = so_info->stride[output->output_buffer] * 4;
878 var->data.offset = output->dst_offset * 4;
879 var->data.stream = output->stream;
904 nir_variable *var = NULL;
905 while (!var)
906 var = find_var_with_location_frac(zs->nir, slot--, output->start_component, have_psiz);
908 if (var->data.is_xfb)
911 unsigned num_slots = glsl_count_vec4_slots(var->type, false, false);
914 slot = var->data.location + j;
926 unsigned num_components = get_slot_components(var, slot, var->data.location);
927 if (glsl_type_is_array(var->type) && !glsl_type_is_struct_or_ifc(glsl_without_array(var->type)))
928 num_components /= glsl_array_size(var->type);
942 var->data.explicit_xfb_buffer = 1;
943 var->data.xfb.buffer = output->output_buffer;
944 var->data.xfb.stride = so_info->stride[output->output_buffer] * 4;
945 var->data.offset = output->dst_offset * 4;
946 var->data.stream = output->stream;
948 if (glsl_type_is_array(var->type) && glsl_array_size(var->type) > 1 && glsl_type_is_interface(glsl_without_array(var->type)))
949 zs->sinfo.so_propagate |= BITFIELD_BIT(var->data.location - VARYING_SLOT_VAR0);
952 slot = var->data.location + j;
987 nir_variable *var = nir_deref_instr_get_variable(deref);
988 if (var != split[0])
1010 nir_foreach_variable_with_modes(var, nir, nir_var_shader_in)
1011 bits |= BITFIELD_BIT(var->data.driver_location);
1017 nir_variable *var = nir_find_variable_with_driver_location(nir, nir_var_shader_in, location);
1018 assert(var);
1019 split[0] = var;
1020 bits |= BITFIELD_BIT(var->data.driver_location);
1021 const struct glsl_type *new_type = glsl_type_is_scalar(var->type) ? var->type : glsl_get_array_element(var->type);
1022 unsigned num_components = glsl_get_vector_elements(var->type);
1025 split[i+1] = nir_variable_clone(var, nir);
1026 split[i+1]->name = ralloc_asprintf(nir, "%s_split%u", var->name, i);
1028 split[i+1]->type = !i && num_components == 4 ? var->type : new_type;
1035 var->data.mode = nir_var_shader_temp;
1168 nir_variable *var, **ptr;
1179 var = *ptr;
1180 if (!var) {
1182 var = bo->ssbo[32 >> 4];
1185 var = bo->uniforms[32 >> 4];
1187 var = bo->ubo[32 >> 4];
1189 var = nir_variable_clone(var, shader);
1190 *ptr = var;
1191 nir_shader_add_variable(shader, var);
1196 unsigned array_size = glsl_get_length(var->type);
1197 const struct glsl_type *bare_type = glsl_without_array(var->type);
1210 var->type = glsl_array_type(glsl_struct_type(fields, glsl_get_length(bare_type), "struct", false), array_size, 0);
1211 var->data.driver_location = idx;
1213 return var;
1257 nir_variable *var = get_bo_var(b->shader, bo, true, src, nir_dest_bit_size(intr->dest));
1258 nir_deref_instr *deref_var = nir_build_deref_var(b, var);
1294 nir_variable *var = NULL;
1315 var = get_bo_var(b->shader, bo, true, src, nir_src_bit_size(intr->src[0]));
1321 var = get_bo_var(b->shader, bo, true, src, nir_dest_bit_size(intr->dest));
1326 var = get_bo_var(b->shader, bo, false, src, nir_dest_bit_size(intr->dest));
1333 assert(var);
1335 nir_deref_instr *deref_var = nir_build_deref_var(b, var);
1336 nir_ssa_def *idx = !ssbo && var->data.driver_location ? nir_iadd_imm(b, src->ssa, -1) : src->ssa;
1337 if (!ssbo && bo->first_ubo && var->data.driver_location)
1371 assign_producer_var_io(gl_shader_stage stage, nir_variable *var, unsigned *reserved, unsigned char *slot_map)
1373 unsigned slot = var->data.location;
1388 var->data.driver_location = UINT_MAX;
1392 if (var->data.patch) {
1399 if (nir_is_arrayed_io(var, stage))
1400 num_slots = glsl_count_vec4_slots(glsl_get_array_element(var->type), false, false);
1402 num_slots = glsl_count_vec4_slots(var->type, false, false);
1409 var->data.driver_location = slot;
1414 is_texcoord(gl_shader_stage stage, const nir_variable *var)
1418 return var->data.location >= VARYING_SLOT_TEX0 &&
1419 var->data.location <= VARYING_SLOT_TEX7;
1423 assign_consumer_var_io(gl_shader_stage stage, nir_variable *var, unsigned *reserved, unsigned char *slot_map)
1425 unsigned slot = var->data.location;
1439 var->data.driver_location = UINT_MAX;
1442 if (var->data.patch) {
1447 if (stage != MESA_SHADER_TESS_CTRL && !is_texcoord(stage, var))
1455 var->data.driver_location = slot_map[slot];
1464 nir_variable *var = data;
1472 if (deref_var != var)
1489 nir_variable *var = nir_find_variable_with_location(producer, nir_var_shader_out, VARYING_SLOT_PSIZ);
1490 if (var && !var->data.explicit_location) {
1491 var->data.mode = nir_var_shader_temp;
1499 nir_foreach_variable_with_modes(var, consumer, nir_var_shader_in)
1500 assign_producer_var_io(consumer->info.stage, var, &reserved, slot_map);
1501 nir_foreach_variable_with_modes_safe(var, producer, nir_var_shader_out) {
1502 if (!assign_consumer_var_io(producer->info.stage, var, &reserved, slot_map))
1507 nir_foreach_variable_with_modes(var, producer, nir_var_shader_out)
1508 assign_producer_var_io(producer->info.stage, var, &reserved, slot_map);
1509 nir_foreach_variable_with_modes_safe(var, consumer, nir_var_shader_in) {
1510 if (!assign_consumer_var_io(consumer->info.stage, var, &reserved, slot_map)) {
1513 nir_shader_instructions_pass(consumer, rewrite_and_discard_read, nir_metadata_dominance, var);
1526 rewrite_64bit_type(nir_shader *nir, const struct glsl_type *type, nir_variable *var)
1532 return glsl_array_type(rewrite_64bit_type(nir, child, var), elements, stride);
1545 var->data.is_xfb = true;
1547 fields[i].type = rewrite_64bit_type(nir, f->type, var);
1614 nir_foreach_variable_with_modes(var, shader, nir_var_shader_in | nir_var_shader_out) {
1615 if (!glsl_type_contains_64bit(var->type))
1617 var->type = rewrite_64bit_type(shader, var->type, var);
1632 if (nir_deref_instr_get_variable(deref) != var)
1649 deref->type = var->type;
1651 deref->type = rewrite_64bit_type(shader, deref->type, var);
1659 if (nir_intrinsic_get_var(intr, 0) != var)
1849 nir_foreach_shader_out_variable(var, nir) {
1850 const struct glsl_type *base_type = glsl_without_array(var->type);
1855 if (!glsl_type_is_struct(var->type) || glsl_get_length(var->type) == 1)
1857 if (glsl_count_attribute_slots(var->type, false) == 1)
1860 for (unsigned i = 0; i < glsl_get_length(var->type); i++) {
1861 members[i] = nir_variable_clone(var, nir);
1862 members[i]->type = glsl_get_struct_field(var->type, i);
1863 members[i]->name = (void*)glsl_get_struct_elem_name(var->type, i);
1881 if (nir_deref_instr_get_variable(deref) != var)
1904 var->data.mode = nir_var_shader_temp;
2024 find_var_deref(nir_shader *nir, nir_variable *var)
2035 if (deref->deref_type == nir_deref_type_var && deref->var == var)
2046 nir_foreach_shader_in_variable_safe(var, nir) {
2047 if (!find_var_deref(nir, var))
2048 var->data.mode = nir_var_shader_temp;
2050 nir_foreach_shader_out_variable_safe(var, nir) {
2051 if (!find_var_deref(nir, var))
2052 var->data.mode = nir_var_shader_temp;
2119 nir_foreach_shader_out_variable(var, nir) {
2120 if (var->data.location == FRAG_RESULT_SAMPLE_MASK)
2121 var->data.mode = nir_var_shader_temp;
2135 nir_foreach_shader_in_variable(var, nir)
2136 var->data.sample = true;
2228 nir_foreach_variable_with_modes(var, shader, nir_var_mem_ssbo | nir_var_mem_ubo) {
2229 const struct glsl_type *type = glsl_without_array(var->type);
2233 unsigned size = glsl_count_attribute_slots(glsl_type_is_array(var->type) ? var->type : type, false);
2234 const struct glsl_type *interface_type = var->interface_type ? glsl_without_array(var->interface_type) : NULL;
2240 if (var->data.mode == nir_var_mem_ubo) {
2241 if (var->data.driver_location)
2252 var->data.mode = nir_var_shader_temp;
2264 nir_variable *var = nir_variable_create(shader, nir_var_mem_ubo,
2267 var->interface_type = var->type;
2268 var->data.mode = nir_var_mem_ubo;
2269 var->data.driver_location = 0;
2281 nir_variable *var = nir_variable_create(shader, nir_var_mem_ubo,
2284 var->interface_type = var->type;
2285 var->data.mode = nir_var_mem_ubo;
2286 var->data.driver_location = first_ubo + !!shader->info.first_ubo_is_default_ubo;
2300 nir_variable *var = nir_variable_create(shader, nir_var_mem_ssbo,
2303 var->interface_type = var->type;
2304 var->data.mode = nir_var_mem_ssbo;
2305 var->data.driver_location = first_ssbo;
2386 nir_variable *var;
2389 var = nir_variable_create(nir, nir_var_uniform, glsl_array_type(sampler_type, ZINK_MAX_BINDLESS_HANDLES, 0), "bindless_texture");
2390 var->data.descriptor_set = descriptor_set;
2391 var->data.driver_location = var->data.binding = binding;
2392 return var;
2400 nir_variable *var;
2403 var = nir_variable_create(nir, nir_var_image, glsl_array_type(image_type, ZINK_MAX_BINDLESS_HANDLES, 0), "bindless_image");
2404 var->data.descriptor_set = descriptor_set;
2405 var->data.driver_location = var->data.binding = binding;
2406 var->data.image.format = PIPE_FORMAT_R8G8B8A8_UNORM;
2407 return var;
2422 nir_variable *var = tex->sampler_dim == GLSL_SAMPLER_DIM_BUF ? bindless->bindless[1] : bindless->bindless[0];
2423 if (!var)
2424 var = create_bindless_texture(b->shader, tex, bindless->bindless_set);
2426 nir_deref_instr *deref = nir_build_deref_var(b, var);
2427 if (glsl_type_is_array(var->type))
2439 unsigned needed_components = glsl_get_sampler_coordinate_components(glsl_without_array(var->type));
2488 nir_variable *var = dim == GLSL_SAMPLER_DIM_BUF ? bindless->bindless[3] : bindless->bindless[2];
2489 if (!var)
2490 var = create_bindless_image(b->shader, dim, bindless->bindless_set);
2493 nir_deref_instr *deref = nir_build_deref_var(b, var);
2494 if (glsl_type_is_array(var->type))
2523 nir_variable *var = nir_deref_instr_get_variable(src_deref);
2524 if (var->data.bindless)
2526 if (var->data.mode != nir_var_shader_in && var->data.mode != nir_var_shader_out)
2528 if (!glsl_type_is_image(var->type) && !glsl_type_is_sampler(var->type))
2531 var->type = glsl_int64_t_type();
2532 var->data.bindless = 1;
2534 nir_deref_instr *deref = nir_build_deref_var(b, var);
2584 handle_bindless_var(nir_shader *nir, nir_variable *var, const struct glsl_type *type, struct zink_bindless_info *bindless)
2588 handle_bindless_var(nir, var, glsl_get_struct_field(type, i), bindless);
2615 bindless->bindless[binding] = nir_variable_clone(var, nir);
2624 assert(glsl_get_sampler_dim(glsl_without_array(bindless->bindless[binding]->type)) == glsl_get_sampler_dim(glsl_without_array(var->type)));
2626 var->data.mode = nir_var_shader_temp;
2726 nir_foreach_variable_with_modes(var, shader, nir_var_uniform | nir_var_image) {
2727 const struct glsl_type *type = glsl_without_array(var->type);
2728 unsigned length = glsl_get_length(var->type);
2732 var->type = type != var->type ? glsl_array_type(sampler, length, glsl_get_explicit_stride(var->type)) : sampler;
2775 nir_variable *var =
2780 glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1;
2781 BITSET_SET_RANGE(shader->info.images_used, var->data.binding,
2782 var->data.binding + (MAX2(size, 1) - 1));
2792 nir_variable *var = nir_intrinsic_get_var(intr, 0);
2793 if (util_format_is_float(var->data.image.format))
2899 nir_variable *var = NULL;
2901 var = nir_deref_instr_get_variable(nir_src_as_deref(tex->src[handle].src));
2908 var = img;
2914 assert(var);
2915 const struct glsl_type *type = glsl_without_array(var->type);
3099 nir_foreach_variable_with_modes(var, nir, nir_var_shader_in | nir_var_shader_out) {
3100 var->data.is_xfb = false;
3101 if (glsl_type_is_image(var->type) || glsl_type_is_sampler(var->type)) {
3114 foreach_list_typed_reverse_safe(nir_variable, var, node, &nir->variables) {
3115 if (_nir_shader_variable_has_mode(var, nir_var_uniform |
3120 const struct glsl_type *type = glsl_without_array(var->type);
3121 if (var->data.mode == nir_var_mem_ubo) {
3124 var->data.descriptor_set = !!var->data.driver_location;
3125 var->data.binding = !var->data.driver_location ? nir->info.stage :
3128 var->data.driver_location,
3130 assert(var->data.driver_location || var->data.binding < 10);
3131 VkDescriptorType vktype = !var->data.driver_location ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
3132 int binding = var->data.binding;
3134 ret->bindings[ztype][ret->num_bindings[ztype]].index = var->data.driver_location;
3137 ret->bindings[ztype][ret->num_bindings[ztype]].size = glsl_get_length(var->type);
3140 } else if (var->data.mode == nir_var_mem_ssbo) {
3142 var->data.descriptor_set = screen->desc_set_id[ztype];
3143 var->data.binding = zink_binding(nir->info.stage,
3145 var->data.driver_location,
3147 ret->bindings[ztype][ret->num_bindings[ztype]].index = var->data.driver_location;
3148 ret->bindings[ztype][ret->num_bindings[ztype]].binding = var->data.binding;
3150 ret->bindings[ztype][ret->num_bindings[ztype]].size = glsl_get_length(var->type);
3154 assert(var->data.mode == nir_var_uniform ||
3155 var->data.mode == nir_var_image);
3156 if (var->data.bindless) {
3158 handle_bindless_var(nir, var, type, &bindless);
3164 var->data.driver_location = var->data.binding;
3165 var->data.descriptor_set = screen->desc_set_id[ztype];
3166 var->data.binding = zink_binding(nir->info.stage, vktype, var->data.driver_location, screen->compact_descriptors);
3167 ret->bindings[ztype][ret->num_bindings[ztype]].index = var->data.driver_location;
3168 ret->bindings[ztype][ret->num_bindings[ztype]].binding = var->data.binding;
3170 if (glsl_type_is_array(var->type))
3171 ret->bindings[ztype][ret->num_bindings[ztype]].size = glsl_get_aoa_size(var->type);
3188 nir_foreach_shader_out_variable(var, nir)
3189 var->data.explicit_xfb_buffer = 0;
3195 nir_foreach_shader_out_variable(var, nir) {
3196 if (var->data.location == VARYING_SLOT_PSIZ) {
3197 if (!var->data.explicit_location)
3200 psiz = var;
3341 nir_foreach_shader_out_variable(var, vs->nir) {
3342 const struct glsl_type *type = var->type;
3343 const struct glsl_type *in_type = var->type;
3344 const struct glsl_type *out_type = var->type;
3346 snprintf(buf, sizeof(buf), "%s_out", var->name);
3350 nir_variable *in = nir_variable_create(nir, nir_var_shader_in, in_type, var->name);
3352 out->data.location = in->data.location = var->data.location;
3353 out->data.location_frac = in->data.location_frac = var->data.location_frac;