}
static bool
-nir_lower_io_block(nir_block *block, void *void_state)
+nir_lower_io_block(nir_block *block,
+ struct lower_io_state *state)
{
- struct lower_io_state *state = void_state;
-
nir_builder *b = &state->builder;
nir_foreach_instr_safe(block, instr) {
nir_intrinsic_set_base(load,
intrin->variables[0]->var->data.driver_location);
+ if (load->intrinsic == nir_intrinsic_load_uniform) {
+ nir_intrinsic_set_range(load,
+ state->type_size(intrin->variables[0]->var->type));
+ }
+
if (per_vertex)
load->src[0] = nir_src_for_ssa(vertex_index);
state.modes = modes;
state.type_size = type_size;
- nir_foreach_block(impl, nir_lower_io_block, &state);
+ nir_foreach_block(block, impl) {
+ nir_lower_io_block(block, &state);
+ }
nir_metadata_preserve(impl, nir_metadata_block_index |
nir_metadata_dominance);
case nir_intrinsic_load_output:
case nir_intrinsic_load_uniform:
return &instr->src[0];
+ case nir_intrinsic_load_ubo:
+ case nir_intrinsic_load_ssbo:
case nir_intrinsic_load_per_vertex_input:
case nir_intrinsic_load_per_vertex_output:
case nir_intrinsic_store_output:
return &instr->src[1];
+ case nir_intrinsic_store_ssbo:
case nir_intrinsic_store_per_vertex_output:
return &instr->src[2];
default: