From: Dave Airlie Date: Thu, 9 Jun 2016 00:08:50 +0000 (+1000) Subject: glsl: Add 64-bit integer support to some operations. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9ba9a7f854dd702364d0aaa02cb7fbf44aea5888;p=mesa.git glsl: Add 64-bit integer support to some operations. This adds 64-bit integer support to some AST and IR operations where it is needed. Signed-off-by: Dave Airlie Reviewed-by: Ian Romanick --- diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index ffb57403f7a..486a0b8f3ee 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -533,12 +533,12 @@ bit_logic_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b, * (|). The operands must be of type signed or unsigned integers or * integer vectors." */ - if (!type_a->is_integer()) { + if (!type_a->is_integer_32_64()) { _mesa_glsl_error(loc, state, "LHS of `%s' must be an integer", ast_expression::operator_string(op)); return glsl_type::error_type; } - if (!type_b->is_integer()) { + if (!type_b->is_integer_32_64()) { _mesa_glsl_error(loc, state, "RHS of `%s' must be an integer", ast_expression::operator_string(op)); return glsl_type::error_type; @@ -619,11 +619,11 @@ modulus_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b, * "The operator modulus (%) operates on signed or unsigned integers or * integer vectors." */ - if (!type_a->is_integer()) { + if (!type_a->is_integer_32_64()) { _mesa_glsl_error(loc, state, "LHS of operator %% must be an integer"); return glsl_type::error_type; } - if (!type_b->is_integer()) { + if (!type_b->is_integer_32_64()) { _mesa_glsl_error(loc, state, "RHS of operator %% must be an integer"); return glsl_type::error_type; } @@ -741,7 +741,7 @@ shift_result_type(const struct glsl_type *type_a, * must be signed or unsigned integers or integer vectors. One operand * can be signed while the other is unsigned." */ - if (!type_a->is_integer()) { + if (!type_a->is_integer_32_64()) { _mesa_glsl_error(loc, state, "LHS of operator %s must be an integer or " "integer vector", ast_expression::operator_string(op)); return glsl_type::error_type; @@ -1561,7 +1561,7 @@ ast_expression::do_hir(exec_list *instructions, error_emitted = true; } - if (!op[0]->type->is_integer()) { + if (!op[0]->type->is_integer_32_64()) { _mesa_glsl_error(&loc, state, "operand of `~' must be an integer"); error_emitted = true; } diff --git a/src/compiler/glsl/ir_validate.cpp b/src/compiler/glsl/ir_validate.cpp index 97c695ceb94..4f13754e74e 100644 --- a/src/compiler/glsl/ir_validate.cpp +++ b/src/compiler/glsl/ir_validate.cpp @@ -653,7 +653,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_binop_lshift: case ir_binop_rshift: - assert(ir->operands[0]->type->is_integer() && + assert(ir->operands[0]->type->is_integer_32_64() && ir->operands[1]->type->is_integer()); if (ir->operands[0]->type->is_scalar()) { assert(ir->operands[1]->type->is_scalar()); @@ -671,7 +671,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_binop_bit_or: assert(ir->operands[0]->type->base_type == ir->operands[1]->type->base_type); - assert(ir->type->is_integer()); + assert(ir->type->is_integer_32_64()); if (ir->operands[0]->type->is_vector() && ir->operands[1]->type->is_vector()) { assert(ir->operands[0]->type->vector_elements ==