nir/validate: Ensure that outputs are write-only and inputs are read-only

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
Jason Ekstrand 2014-12-03 14:47:17 -08:00
parent 26865f858d
commit faad82b4e7

View file

@ -330,6 +330,29 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
validate_deref_var(instr->variables[i], state);
}
switch (instr->intrinsic) {
case nir_intrinsic_load_var_vec1:
case nir_intrinsic_load_var_vec2:
case nir_intrinsic_load_var_vec3:
case nir_intrinsic_load_var_vec4:
assert(instr->variables[0]->var->data.mode != nir_var_shader_out);
break;
case nir_intrinsic_store_var_vec1:
case nir_intrinsic_store_var_vec2:
case nir_intrinsic_store_var_vec3:
case nir_intrinsic_store_var_vec4:
assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&
instr->variables[0]->var->data.mode != nir_var_uniform);
break;
case nir_intrinsic_copy_var:
assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&
instr->variables[0]->var->data.mode != nir_var_uniform);
assert(instr->variables[1]->var->data.mode != nir_var_shader_out);
break;
default:
break;
}
if (instr->has_predicate)
validate_src(&instr->predicate, state);
}