Lines Matching defs:state
53 gather_buffer_access(struct access_state *state, nir_ssa_def *def, bool read, bool write)
55 state->buffers_read |= read;
56 state->buffers_written |= write;
62 state->shader, nir_chase_binding(nir_src_for_ssa(def)));
65 _mesa_set_add(state->vars_read, var);
67 _mesa_set_add(state->vars_written, var);
69 nir_foreach_variable_with_modes(possible_var, state->shader, nir_var_mem_ssbo) {
71 _mesa_set_add(state->vars_read, possible_var);
73 _mesa_set_add(state->vars_written, possible_var);
79 gather_intrinsic(struct access_state *state, nir_intrinsic_instr *instr)
111 state->buffers_read |= read;
112 state->buffers_written |= write;
114 state->images_read |= read;
115 state->images_written |= write;
120 _mesa_set_add(state->vars_read, var);
123 _mesa_set_add(state->vars_written, var);
147 state->buffers_read |= read;
148 state->buffers_written |= write;
150 state->images_read |= read;
151 state->images_written |= write;
176 gather_buffer_access(state, ssbo ? instr->src[0].ssa : NULL,
188 process_variable(struct access_state *state, nir_variable *var)
205 if (is_buffer ? !state->buffers_written : !state->images_written)
207 else if ((access & ACCESS_RESTRICT) && !_mesa_set_search(state->vars_written, var))
211 if (state->infer_non_readable && !(access & ACCESS_NON_READABLE)) {
212 if (is_buffer ? !state->buffers_read : !state->images_read)
214 else if ((access & ACCESS_RESTRICT) && !_mesa_set_search(state->vars_read, var))
224 update_access(struct access_state *state, nir_intrinsic_instr *instr, bool is_buffer, bool is_global)
236 state->shader, nir_chase_binding(instr->src[0]));
242 is_memory_readonly |= !state->buffers_written && !state->images_written;
243 is_memory_writeonly |= !state->buffers_read && !state->images_read;
245 is_memory_readonly |= is_buffer ? !state->buffers_written : !state->images_written;
246 is_memory_writeonly |= is_buffer ? !state->buffers_read : !state->images_read;
251 if (state->infer_non_readable && is_memory_writeonly)
262 process_intrinsic(struct access_state *state, nir_intrinsic_instr *instr)
268 return update_access(state, instr, nir_intrinsic_image_dim(instr) == GLSL_SAMPLER_DIM_BUF,
274 return update_access(state, instr, false, true);
276 return update_access(state, instr, true, false);
289 return update_access(state, instr, is_buffer, false);
298 opt_access_impl(struct access_state *state,
306 progress |= process_intrinsic(state,
326 struct access_state state = {
341 gather_intrinsic(&state, nir_instr_as_intrinsic(instr));
349 state.buffers_written |= state.images_written;
350 state.images_written |= state.buffers_written;
351 state.buffers_read |= state.images_read;
352 state.images_read |= state.buffers_read;
359 var_progress |= process_variable(&state, var);
363 progress |= opt_access_impl(&state, func->impl);
378 _mesa_set_destroy(state.vars_read, NULL);
379 _mesa_set_destroy(state.vars_written, NULL);