Patches 9-11: Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>
On 29.11.2016 04:25, Ian Romanick wrote:
From: Dave Airlie <airl...@redhat.com> This adds support to call the new operations on conversions. v2 (idr): Delete an unnecessary break-statement. Noticed by Matt. Add a missing blank line. Noticed by Ian. v3 (idr): "cut them down later" => Remove ir_unop_b2u64 and ir_unop_u642b. Handle these with extra i2u or u2i casts just like uint(bool) and bool(uint) conversion is done. Signed-off-by: Dave Airlie <airl...@redhat.com> Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> [v1] Reviewed-by: Matt Turner <matts...@gmail.com> [v2] --- src/compiler/glsl/ast_function.cpp | 79 ++++++++++++++++++++++++++++++++++++++ src/compiler/glsl/ast_to_hir.cpp | 20 ++++++++++ 2 files changed, 99 insertions(+) diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp index 3265712..2a2c17b 100644 --- a/src/compiler/glsl/ast_function.cpp +++ b/src/compiler/glsl/ast_function.cpp @@ -760,6 +760,12 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_DOUBLE: result = new(ctx) ir_expression(ir_unop_d2u, src); break; + case GLSL_TYPE_UINT64: + result = new(ctx) ir_expression(ir_unop_u642u, src); + break; + case GLSL_TYPE_INT64: + result = new(ctx) ir_expression(ir_unop_i642u, src); + break; } break; case GLSL_TYPE_INT: @@ -776,6 +782,12 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_DOUBLE: result = new(ctx) ir_expression(ir_unop_d2i, src); break; + case GLSL_TYPE_UINT64: + result = new(ctx) ir_expression(ir_unop_u642i, src); + break; + case GLSL_TYPE_INT64: + result = new(ctx) ir_expression(ir_unop_i642i, src); + break; } break; case GLSL_TYPE_FLOAT: @@ -792,6 +804,12 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_DOUBLE: result = new(ctx) ir_expression(ir_unop_d2f, desired_type, src, NULL); break; + case GLSL_TYPE_UINT64: + result = new(ctx) ir_expression(ir_unop_u642f, desired_type, src, NULL); + break; + case GLSL_TYPE_INT64: + result = new(ctx) ir_expression(ir_unop_i642f, desired_type, src, NULL); + break; } break; case GLSL_TYPE_BOOL: @@ -810,6 +828,14 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_DOUBLE: result = new(ctx) ir_expression(ir_unop_d2b, desired_type, src, NULL); break; + case GLSL_TYPE_UINT64: + result = new(ctx) ir_expression(ir_unop_i642b, + new(ctx) ir_expression(ir_unop_u642i64, + src)); + break; + case GLSL_TYPE_INT64: + result = new(ctx) ir_expression(ir_unop_i642b, desired_type, src, NULL); + break; } break; case GLSL_TYPE_DOUBLE: @@ -828,7 +854,60 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_FLOAT: result = new(ctx) ir_expression(ir_unop_f2d, desired_type, src, NULL); break; + case GLSL_TYPE_UINT64: + result = new(ctx) ir_expression(ir_unop_u642d, desired_type, src, NULL); + break; + case GLSL_TYPE_INT64: + result = new(ctx) ir_expression(ir_unop_i642d, desired_type, src, NULL); + break; } + break; + case GLSL_TYPE_UINT64: + switch (b) { + case GLSL_TYPE_INT: + result = new(ctx) ir_expression(ir_unop_i2u64, src); + break; + case GLSL_TYPE_UINT: + result = new(ctx) ir_expression(ir_unop_u2u64, src); + break; + case GLSL_TYPE_BOOL: + result = new(ctx) ir_expression(ir_unop_i642u64, + new(ctx) ir_expression(ir_unop_b2i64, + src)); + break; + case GLSL_TYPE_FLOAT: + result = new(ctx) ir_expression(ir_unop_f2u64, src); + break; + case GLSL_TYPE_DOUBLE: + result = new(ctx) ir_expression(ir_unop_d2u64, src); + break; + case GLSL_TYPE_INT64: + result = new(ctx) ir_expression(ir_unop_i642u64, src); + break; + } + break; + case GLSL_TYPE_INT64: + switch (b) { + case GLSL_TYPE_INT: + result = new(ctx) ir_expression(ir_unop_i2i64, src); + break; + case GLSL_TYPE_UINT: + result = new(ctx) ir_expression(ir_unop_u2i64, src); + break; + case GLSL_TYPE_BOOL: + result = new(ctx) ir_expression(ir_unop_b2i64, src); + break; + case GLSL_TYPE_FLOAT: + result = new(ctx) ir_expression(ir_unop_f2i64, src); + break; + case GLSL_TYPE_DOUBLE: + result = new(ctx) ir_expression(ir_unop_d2i64, src); + break; + case GLSL_TYPE_UINT64: + result = new(ctx) ir_expression(ir_unop_u642i64, src); + break; + } + break; } assert(result != NULL); diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index b7c113f..79b9b9e 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -259,6 +259,26 @@ get_implicit_conversion_operation(const glsl_type *to, const glsl_type *from, case GLSL_TYPE_INT: return ir_unop_i2d; case GLSL_TYPE_UINT: return ir_unop_u2d; case GLSL_TYPE_FLOAT: return ir_unop_f2d; + case GLSL_TYPE_INT64: return ir_unop_i642d; + case GLSL_TYPE_UINT64: return ir_unop_u642d; + default: return (ir_expression_operation)0; + } + + case GLSL_TYPE_UINT64: + if (!state->has_int64()) + return (ir_expression_operation)0; + switch (from->base_type) { + case GLSL_TYPE_INT: return ir_unop_i2u64; + case GLSL_TYPE_UINT: return ir_unop_u2u64; + case GLSL_TYPE_INT64: return ir_unop_i642u64; + default: return (ir_expression_operation)0; + } + + case GLSL_TYPE_INT64: + if (!state->has_int64()) + return (ir_expression_operation)0; + switch (from->base_type) { + case GLSL_TYPE_INT: return ir_unop_i2i64; default: return (ir_expression_operation)0; }
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev