* inline functions. That way they get properly initialized at the top
* of the function and not at the top of its caller.
*/
- nir_lower_variable_initializers(shader, (nir_variable_mode)~0);
+ nir_lower_variable_initializers(shader, nir_var_all);
nir_lower_returns(shader);
nir_inline_functions(shader);
nir_opt_deref(shader);
} else if (op == nir_intrinsic_image_deref_load ||
op == nir_intrinsic_image_deref_store) {
instr->num_components = 4;
+ nir_intrinsic_set_type(instr,
+ nir_get_nir_type_for_glsl_base_type(type->sampled_type));
}
if (op == nir_intrinsic_image_deref_size ||
case ir_binop_logic_xor:
result = nir_ixor(&b, srcs[0], srcs[1]);
break;
- case ir_binop_lshift: result = nir_ishl(&b, srcs[0], srcs[1]); break;
+ case ir_binop_lshift: result = nir_ishl(&b, srcs[0], nir_u2u32(&b, srcs[1])); break;
case ir_binop_rshift:
- result = (type_is_signed(out_type)) ? nir_ishr(&b, srcs[0], srcs[1])
- : nir_ushr(&b, srcs[0], srcs[1]);
+ result = (type_is_signed(out_type)) ? nir_ishr(&b, srcs[0], nir_u2u32(&b, srcs[1]))
+ : nir_ushr(&b, srcs[0], nir_u2u32(&b, srcs[1]));
break;
case ir_binop_imul_high:
result = (out_type == GLSL_TYPE_INT) ? nir_imul_high(&b, srcs[0], srcs[1])
break;
case ir_binop_nequal:
if (type_is_float(types[0]))
- result = nir_fne(&b, srcs[0], srcs[1]);
+ result = nir_fneu(&b, srcs[0], srcs[1]);
else
result = nir_ine(&b, srcs[0], srcs[1]);
break;
case ir_binop_any_nequal:
if (type_is_float(types[0])) {
switch (ir->operands[0]->type->vector_elements) {
- case 1: result = nir_fne(&b, srcs[0], srcs[1]); break;
+ case 1: result = nir_fneu(&b, srcs[0], srcs[1]); break;
case 2: result = nir_bany_fnequal2(&b, srcs[0], srcs[1]); break;
case 3: result = nir_bany_fnequal3(&b, srcs[0], srcs[1]); break;
case 4: result = nir_bany_fnequal4(&b, srcs[0], srcs[1]); break;