Lines Matching defs:deref
230 get_io_offset(nir_builder *b, nir_deref_instr *deref,
236 nir_deref_path_init(&path, deref, NULL);
283 unreachable("Unsupported deref type");
672 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
673 if (!nir_deref_mode_is_one_of(deref, state->modes))
676 nir_variable *var = nir_deref_instr_get_variable(deref);
689 if (nir_deref_instr_is_known_out_of_bounds(deref)) {
720 offset = get_io_offset(b, deref, is_arrayed ? &array_index : NULL,
729 component_offset, deref->type);
734 component_offset, deref->type);
743 component_offset, deref->type);
794 * managed uniforms to turn deref-based access into a simpler model using
798 * deref chains are complete and contain no casts.
1191 nir_get_explicit_deref_range(nir_deref_instr *deref,
1197 uint32_t range = glsl_get_explicit_size(deref->type, false);
1200 nir_deref_instr *parent = nir_deref_instr_parent(deref);
1202 switch (deref->deref_type) {
1206 const unsigned stride = nir_deref_instr_array_stride(deref);
1213 if (deref->deref_type != nir_deref_type_array_wildcard &&
1214 nir_src_is_const(deref->arr.index)) {
1215 base += stride * nir_src_as_uint(deref->arr.index);
1228 base += glsl_get_struct_field_offset(parent->type, deref->strct.index);
1233 nir_instr *parent_instr = deref->parent.ssa->parent_instr;
1284 deref = parent;
1336 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
1504 nir_variable *var = nir_deref_instr_get_variable(deref);
1520 nir_get_explicit_deref_range(deref, addr_format, &base, &range);
1855 nir_explicit_io_address_from_deref(nir_builder *b, nir_deref_instr *deref,
1859 assert(deref->dest.is_ssa);
1860 switch (deref->deref_type) {
1862 return build_addr_for_var(b, deref->var, addr_format);
1866 unsigned stride = nir_deref_instr_array_stride(deref);
1870 nir_ssa_def *index = nir_ssa_for_src(b, deref->arr.index, 1);
1879 if (deref->arr.in_bounds && deref->deref_type == nir_deref_type_array) {
1887 return build_addr_iadd(b, base_addr, addr_format, deref->modes, offset);
1895 nir_deref_instr *parent = nir_deref_instr_parent(deref);
1897 deref->strct.index);
1900 deref->modes, offset);
1908 unreachable("Invalid NIR deref type");
1919 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
1920 unsigned vec_stride = glsl_get_explicit_stride(deref->type);
1921 unsigned scalar_size = type_scalar_size_bytes(deref->type);
1922 assert(vec_stride == 0 || glsl_type_is_vector(deref->type));
1926 if (!nir_get_explicit_deref_align(deref, true, &align_mul, &align_offset)) {
1927 /* If we don't have an alignment from the deref, assume scalar */
1940 deref->modes,
1943 addr_format, deref->modes,
1952 deref->modes, align_mul, align_offset,
1970 deref->modes,
1973 deref->modes, align_mul,
1979 deref->modes, align_mul, align_offset,
1987 deref->modes,
1999 deref->modes, align_mul, align_offset,
2006 build_explicit_io_atomic(b, intrin, addr, addr_format, deref->modes);
2016 nir_get_explicit_deref_align(nir_deref_instr *deref,
2021 if (deref->deref_type == nir_deref_type_var) {
2030 *align_offset = deref->var->data.driver_location % 256;
2034 /* If we're a cast deref that has an alignment, use that. */
2035 if (deref->deref_type == nir_deref_type_cast && deref->cast.align_mul > 0) {
2036 *align_mul = deref->cast.align_mul;
2037 *align_offset = deref->cast.align_offset;
2042 nir_deref_instr *parent = nir_deref_instr_parent(deref);
2044 assert(deref->deref_type == nir_deref_type_cast);
2047 unsigned type_align = glsl_get_explicit_alignment(deref->type);
2064 switch (deref->deref_type) {
2071 const unsigned stride = nir_deref_instr_array_stride(deref);
2075 if (deref->deref_type != nir_deref_type_array_wildcard &&
2076 nir_src_is_const(deref->arr.index)) {
2077 unsigned offset = nir_src_as_uint(deref->arr.index) * stride;
2081 /* If this is a wildcard or an indirect deref, we have to go with the
2092 deref->strct.index);
2103 assert(deref->cast.align_mul == 0);
2113 lower_explicit_io_deref(nir_builder *b, nir_deref_instr *deref,
2116 /* Just delete the deref if it's not used. We can't use
2118 * one deref which could break our list walking since we walk the list
2121 assert(list_is_empty(&deref->dest.ssa.if_uses));
2122 if (list_is_empty(&deref->dest.ssa.uses)) {
2123 nir_instr_remove(&deref->instr);
2127 b->cursor = nir_after_instr(&deref->instr);
2130 if (deref->deref_type != nir_deref_type_var) {
2131 assert(deref->parent.is_ssa);
2132 base_addr = deref->parent.ssa;
2135 nir_ssa_def *addr = nir_explicit_io_address_from_deref(b, deref, base_addr,
2137 assert(addr->bit_size == deref->dest.ssa.bit_size);
2138 assert(addr->num_components == deref->dest.ssa.num_components);
2140 nir_instr_remove(&deref->instr);
2141 nir_ssa_def_rewrite_uses(&deref->dest.ssa, addr);
2158 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
2160 assert(glsl_type_is_array(deref->type));
2161 assert(glsl_get_length(deref->type) == 0);
2162 assert(nir_deref_mode_is(deref, nir_var_mem_ssbo));
2163 unsigned stride = glsl_get_explicit_stride(deref->type);
2166 nir_ssa_def *addr = &deref->dest.ssa;
2214 /* Walk in reverse order so that we can see the full deref chain when we
2222 nir_deref_instr *deref = nir_instr_as_deref(instr);
2223 if (nir_deref_mode_is_in_set(deref, modes)) {
2224 lower_explicit_io_deref(&b, deref, addr_format);
2251 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
2252 if (nir_deref_mode_is_in_set(deref, modes)) {
2260 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
2261 if (nir_deref_mode_is_in_set(deref, modes)) {
2269 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
2270 if (nir_deref_mode_is_in_set(deref, modes)) {
2312 * deref chain backwards and simply replacing each deref, one at a time, with
2321 * the deref chain.
2361 nir_deref_instr *deref = nir_instr_as_deref(instr);
2362 if (!nir_deref_mode_is_in_set(deref, modes))
2367 glsl_get_explicit_type_for_size_align(deref->type, type_info, &size, &alignment);
2368 if (new_type != deref->type) {
2370 deref->type = new_type;
2372 if (deref->deref_type == nir_deref_type_cast) {
2375 if (new_stride != deref->cast.ptr_stride) {
2376 deref->cast.ptr_stride = new_stride;
2966 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
2967 if (!nir_deref_mode_is(deref, nir_var_shader_in))
2971 nir_variable *var = nir_deref_instr_get_variable(deref);