summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2017-10-24 07:37:16 +0200
committerBenjamin Otte <otte@redhat.com>2017-10-30 02:58:03 +0100
commit056cce93db52af2f022a4e5c95d3c6afa07ad95c (patch)
treee0ae04d05da074b80889c6af420ea3f7042c2522
parent0bc120414c52406622f73105fb19454adf5a7e7a (diff)
downloadgtk+-056cce93db52af2f022a4e5c95d3c6afa07ad95c.tar.gz
gsksltype: Make sure blocks can't be compared
Testcase included
-rw-r--r--gsk/gsksltype.c12
-rw-r--r--testsuite/gsksl/errors/block-array-member-comparison.glsl8
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];
+}