case ir_unop_sign:
assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT ||
ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT ||
- ir->operands[0]->type->base_type == GLSL_TYPE_DOUBLE);
+ ir->operands[0]->type->base_type == GLSL_TYPE_DOUBLE ||
+ ir->operands[0]->type->base_type == GLSL_TYPE_INT64);
assert(ir->type == ir->operands[0]->type);
break;
assert(ir->type->base_type == GLSL_TYPE_INT);
break;
+ case ir_unop_ballot:
+ assert(ir->type == glsl_type::uint64_t_type);
+ assert(ir->operands[0]->type == glsl_type::bool_type);
+ break;
+
+ case ir_binop_read_invocation:
+ assert(ir->operands[1]->type == glsl_type::uint_type);
+ /* fall-through */
+ case ir_unop_read_first_invocation:
+ assert(ir->type == ir->operands[0]->type);
+ assert(ir->type->is_scalar() || ir->type->is_vector());
+ assert(ir->type->base_type == GLSL_TYPE_FLOAT ||
+ ir->type->base_type == GLSL_TYPE_INT ||
+ ir->type->base_type == GLSL_TYPE_UINT);
+ break;
+
case ir_unop_vote_any:
case ir_unop_vote_all:
case ir_unop_vote_eq: