[Mesa-dev] [PATCH v2 14/28] glsl: Add support doubles in optimization passes
Ian Romanick
idr at freedesktop.org
Fri Feb 6 00:05:15 PST 2015
Does opt_algebraic also need updates?
On 02/06/2015 06:56 AM, Ilia Mirkin wrote:
> From: Dave Airlie <airlied at gmail.com>
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>
> ---
> src/glsl/opt_constant_propagation.cpp | 3 +++
> src/glsl/opt_minmax.cpp | 13 +++++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/src/glsl/opt_constant_propagation.cpp b/src/glsl/opt_constant_propagation.cpp
> index c334e12..90cc0c8 100644
> --- a/src/glsl/opt_constant_propagation.cpp
> +++ b/src/glsl/opt_constant_propagation.cpp
> @@ -194,6 +194,9 @@ ir_constant_propagation_visitor::handle_rvalue(ir_rvalue **rvalue)
> case GLSL_TYPE_FLOAT:
> data.f[i] = found->constant->value.f[rhs_channel];
> break;
> + case GLSL_TYPE_DOUBLE:
> + data.d[i] = found->constant->value.d[rhs_channel];
> + break;
> case GLSL_TYPE_INT:
> data.i[i] = found->constant->value.i[rhs_channel];
> break;
> diff --git a/src/glsl/opt_minmax.cpp b/src/glsl/opt_minmax.cpp
> index 32fb2d7..23d0b10 100644
> --- a/src/glsl/opt_minmax.cpp
> +++ b/src/glsl/opt_minmax.cpp
> @@ -133,6 +133,14 @@ compare_components(ir_constant *a, ir_constant *b)
> else
> foundequal = true;
> break;
> + case GLSL_TYPE_DOUBLE:
> + if (a->value.d[c0] < b->value.d[c1])
> + foundless = true;
> + else if (a->value.d[c0] > b->value.d[c1])
> + foundgreater = true;
> + else
> + foundequal = true;
> + break;
> default:
> unreachable("not reached");
> }
> @@ -178,6 +186,11 @@ combine_constant(bool ismin, ir_constant *a, ir_constant *b)
> (!ismin && b->value.f[i] > c->value.f[i]))
> c->value.f[i] = b->value.f[i];
> break;
> + case GLSL_TYPE_DOUBLE:
> + if ((ismin && b->value.d[i] < c->value.d[i]) ||
> + (!ismin && b->value.d[i] > c->value.d[i]))
> + c->value.d[i] = b->value.d[i];
> + break;
> default:
> assert(!"not reached");
> }
>
More information about the mesa-dev
mailing list