diff options
author | Benjamin Otte <otte@redhat.com> | 2017-10-24 07:37:16 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2017-10-30 02:58:03 +0100 |
commit | 056cce93db52af2f022a4e5c95d3c6afa07ad95c (patch) | |
tree | e0ae04d05da074b80889c6af420ea3f7042c2522 | |
parent | 0bc120414c52406622f73105fb19454adf5a7e7a (diff) | |
download | gtk+-056cce93db52af2f022a4e5c95d3c6afa07ad95c.tar.gz |
gsksltype: Make sure blocks can't be compared
Testcase included
-rw-r--r-- | gsk/gsksltype.c | 12 | ||||
-rw-r--r-- | testsuite/gsksl/errors/block-array-member-comparison.glsl | 8 |
2 files changed, 17 insertions, 3 deletions
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]; +} |