summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2017-10-22 18:20:14 +0200
committerBenjamin Otte <otte@redhat.com>2017-10-30 02:58:03 +0100
commitac95c0606ab7a769b2a525874f8d87af47e923e0 (patch)
tree6e05f3248f4c53cc9c79c83c759daf795cd86fbb
parente304738cfb8958686ecddba0062950db674d65e9 (diff)
downloadgtk+-ac95c0606ab7a769b2a525874f8d87af47e923e0.tar.gz
gsksl: Add a special case for vector-to-vector casts
We don't have to extract all components and fold them back together if the vectors already have the same size. Just cast them.
-rw-r--r--gsk/gskslexpression.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gsk/gskslexpression.c b/gsk/gskslexpression.c
index fcbeb3c020..b4d18a56c6 100644
--- a/gsk/gskslexpression.c
+++ b/gsk/gskslexpression.c
@@ -978,6 +978,12 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
}
return gsk_spv_writer_composite_construct (writer, type, ids, cols);
}
+ else if (constructor->n_arguments == 1 && gsk_sl_type_is_vector (type) && gsk_sl_type_is_vector (value_type)
+ && gsk_sl_type_get_length (type) == gsk_sl_type_get_length (value_type))
+ {
+ value_id = gsk_sl_expression_write_spv (constructor->arguments[0], writer);
+ return gsk_spv_writer_convert (writer, value_id, value_type, type);
+ }
else
{
gsize n_components = gsk_sl_type_get_n_components (type);