From 056cce93db52af2f022a4e5c95d3c6afa07ad95c Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 24 Oct 2017 07:37:16 +0200 Subject: [PATCH] gsksltype: Make sure blocks can't be compared Testcase included --- gsk/gsksltype.c | 12 +++++++++--- .../gsksl/errors/block-array-member-comparison.glsl | 8 ++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 testsuite/gsksl/errors/block-array-member-comparison.glsl diff --git a/gsk/gsksltype.c b/gsk/gsksltype.c index ed144f4e0c..4668d7040a 100644 --- a/gsk/gsksltype.c +++ b/gsk/gsksltype.c @@ -1195,7 +1195,7 @@ gsk_sl_type_array_get_n_members (const GskSlType *type) static const GskSlTypeMember * gsk_sl_type_array_get_member (const GskSlType *type, - guint n) + guint n) { return NULL; } @@ -1204,7 +1204,13 @@ static gboolean gsk_sl_type_array_can_convert (const GskSlType *target, const GskSlType *source) { - return gsk_sl_type_equal (target, source); + const GskSlTypeArray *target_array = (const GskSlTypeArray *) target; + const GskSlTypeArray *source_array = (const GskSlTypeArray *) source; + + /* Blocks are equal but cannot be converted to each other. + * So arrays (of arrays) of blocks... */ + return gsk_sl_type_equal (target, source) + && gsk_sl_type_can_convert (target_array->type, source_array->type); } static gboolean @@ -1854,7 +1860,7 @@ static gboolean gsk_sl_type_block_can_convert (const GskSlType *target, const GskSlType *source) { - return gsk_sl_type_equal (target, source); + return FALSE; } static guint32 diff --git a/testsuite/gsksl/errors/block-array-member-comparison.glsl b/testsuite/gsksl/errors/block-array-member-comparison.glsl new file mode 100644 index 0000000000..0d26bf6667 --- /dev/null +++ b/testsuite/gsksl/errors/block-array-member-comparison.glsl @@ -0,0 +1,8 @@ +uniform Foo { + int x; +} x[2][3][4]; + +void main() +{ + bool t = x[1] == x[0]; +}