On Fri, Sep 05, 2014 at 10:25:52AM +0300, Pohjolainen, Topi wrote: > On Thu, Sep 04, 2014 at 05:15:29AM +0100, Dave Airlie wrote: > > This adds the guts of the fp64 implementation to the GLSL compiler. > > > > - builtin double types > > - double constant support > > - lexer parsing for double types (lf, LF) > > - enforcing flat on double fs inputs > > - double operations (d2f,f2d, pack/unpack, frexp - in 2 parts) > > - ir builder bits. > > - double constant expression handling > > > > v2: > > add has_double check (Ian) > > add d2i, i2d, d2u, u2d (Tapani + Ian) > > remove extra ->type setting (Ian) > > > > Signed-off-by: Dave Airlie <airl...@redhat.com> > > --- > > src/glsl/ast.h | 2 + > > src/glsl/ast_function.cpp | 32 +++++ > > src/glsl/ast_to_hir.cpp | 28 +++- > > src/glsl/builtin_type_macros.h | 16 +++ > > src/glsl/builtin_types.cpp | 30 +++++ > > src/glsl/glsl_lexer.ll | 42 +++++- > > src/glsl/glsl_parser.yy | 33 ++++- > > src/glsl/glsl_parser_extras.cpp | 4 + > > src/glsl/glsl_parser_extras.h | 5 + > > src/glsl/glsl_types.cpp | 74 +++++++++-- > > src/glsl/glsl_types.h | 18 ++- > > src/glsl/ir.cpp | 97 +++++++++++++- > > src/glsl/ir.h | 21 +++ > > src/glsl/ir_builder.cpp | 11 ++ > > src/glsl/ir_builder.h | 3 + > > src/glsl/ir_clone.cpp | 1 + > > src/glsl/ir_constant_expression.cpp | 232 > > ++++++++++++++++++++++++++++----- > > src/glsl/ir_print_visitor.cpp | 11 ++ > > src/glsl/ir_set_program_inouts.cpp | 24 +++- > > src/glsl/ir_validate.cpp | 61 ++++++++- > > src/glsl/link_uniform_initializers.cpp | 4 + > > src/glsl/link_uniforms.cpp | 2 + > > src/glsl/link_varyings.cpp | 3 +- > > src/mesa/program/ir_to_mesa.cpp | 10 ++ > > 24 files changed, 697 insertions(+), 67 deletions(-) > > > > diff --git a/src/glsl/ast.h b/src/glsl/ast.h > > index 15bf086..99274ed 100644 > > --- a/src/glsl/ast.h > > +++ b/src/glsl/ast.h > > @@ -189,6 +189,7 @@ enum ast_operators { > > ast_uint_constant, > > ast_float_constant, > > ast_bool_constant, > > + ast_double_constant, > > > > ast_sequence, > > ast_aggregate > > @@ -236,6 +237,7 @@ public: > > float float_constant; > > unsigned uint_constant; > > int bool_constant; > > + double double_constant; > > } primary_expression; > > > > > > diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp > > index 7130d61..6023d16 100644 > > --- a/src/glsl/ast_function.cpp > > +++ b/src/glsl/ast_function.cpp > > @@ -570,6 +570,9 @@ convert_component(ir_rvalue *src, const glsl_type > > *desired_type) > > result = new(ctx) ir_expression(ir_unop_i2u, > > new(ctx) ir_expression(ir_unop_b2i, src)); > > break; > > + case GLSL_TYPE_DOUBLE: > > + result = new(ctx) ir_expression(ir_unop_d2u, src); > > + break; > > } > > break; > > case GLSL_TYPE_INT: > > @@ -583,6 +586,9 @@ convert_component(ir_rvalue *src, const glsl_type > > *desired_type) > > case GLSL_TYPE_BOOL: > > result = new(ctx) ir_expression(ir_unop_b2i, src); > > break; > > + case GLSL_TYPE_DOUBLE: > > + result = new(ctx) ir_expression(ir_unop_d2i, src); > > + break; > > } > > break; > > case GLSL_TYPE_FLOAT: > > @@ -596,6 +602,9 @@ convert_component(ir_rvalue *src, const glsl_type > > *desired_type) > > case GLSL_TYPE_BOOL: > > result = new(ctx) ir_expression(ir_unop_b2f, desired_type, src, NULL); > > break; > > + case GLSL_TYPE_DOUBLE: > > + result = new(ctx) ir_expression(ir_unop_d2f, desired_type, src, NULL); > > + break; > > } > > break; > > case GLSL_TYPE_BOOL: > > @@ -610,8 +619,28 @@ convert_component(ir_rvalue *src, const glsl_type > > *desired_type) > > case GLSL_TYPE_FLOAT: > > result = new(ctx) ir_expression(ir_unop_f2b, desired_type, src, NULL); > > break; > > + case GLSL_TYPE_DOUBLE: > > + result = new(ctx) ir_expression(ir_unop_f2b, > > + new(ctx) ir_expression(ir_unop_d2f, src)); > > + break; > > } > > break; > > + case GLSL_TYPE_DOUBLE: > > + switch (b) { > > + case GLSL_TYPE_INT: > > + result = new(ctx) ir_expression(ir_unop_i2d, src); > > + break; > > + case GLSL_TYPE_UINT: > > + result = new(ctx) ir_expression(ir_unop_u2d, src); > > + break; > > + case GLSL_TYPE_BOOL: > > + result = new(ctx) ir_expression(ir_unop_f2d, > > + new(ctx) ir_expression(ir_unop_b2f, src)); > > + break; > > + case GLSL_TYPE_FLOAT: > > + result = new(ctx) ir_expression(ir_unop_f2d, desired_type, src, NULL); > > + break; > > + } > > } > > > > assert(result != NULL); > > @@ -1009,6 +1038,9 @@ emit_inline_vector_constructor(const glsl_type *type, > > case GLSL_TYPE_FLOAT: > > data.f[i + base_component] = c->get_float_component(i); > > break; > > + case GLSL_TYPE_DOUBLE: > > + data.d[i + base_component] = c->get_double_component(i); > > + break; > > case GLSL_TYPE_BOOL: > > data.b[i + base_component] = c->get_bool_component(i); > > break; > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > > index 897505c..6d79300 100644 > > --- a/src/glsl/ast_to_hir.cpp > > +++ b/src/glsl/ast_to_hir.cpp > > @@ -172,6 +172,7 @@ get_conversion_operation(const glsl_type *to, const > > glsl_type *from, > > switch (from->base_type) { > > case GLSL_TYPE_INT: return ir_unop_i2f; > > case GLSL_TYPE_UINT: return ir_unop_u2f; > > + case GLSL_TYPE_DOUBLE: return ir_unop_d2f; > > I still think this is the wrong way around. The spec: > > "No implicit conversions are provided to convert from unsigned to > signed integer types, from floating-point to integer types, or from > higher-precision to lower-precision types." > > And the way I read it, it is missing the conversion from float to double > which is listed in the spec: > > Modify Section 4.1.10, Implicit Conversions, p. 27 > > (modify table of implicit conversions) > > Can be implicitly > Type of expression converted to > --------------------- ------------------- > int uint(*), float, double > ivec2 uvec2(*), vec2, dvec2 > ivec3 uvec3(*), vec3, dvec3 > ivec4 uvec4(*), vec4, dvec4 > > uint float, double > uvec2 vec2, dvec2 > uvec3 vec3, dvec3 > uvec4 vec4, dvec4 > > float double
Ah, right. There is the patch number thirteen. It looks to me it should come before this patch, and we should drop this one-liner here? _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev