[Piglit] [PATCH] transform_feedback: extend testing of generated names for api matching

Timothy Arceri timothy.arceri at collabora.com
Sat Mar 12 23:08:37 UTC 2016


This tests an interface block array which has and array as a member,
importantly the members array size is large than the blocks array size.

This exposes a bug in Mesa where we incorrectly use the blocks array
size as well as the members after lowering the named interface block.

So Mesa thinks a valid name is:

WithInstArray[0].g[0][0] when it should be WithInstArray[0].g[0]

Running this on the Nvidia blob produces an error message which indicates
they have a similar bug:

   "Failed to link: error: Transform feedback varying WithInstArray[0].g[2]
   has index 2, but the array size is 2."
---
 .../execution/interface-blocks-api-access-members.c    | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/tests/spec/glsl-1.50/execution/interface-blocks-api-access-members.c b/tests/spec/glsl-1.50/execution/interface-blocks-api-access-members.c
index 22b6295..85a89b6 100644
--- a/tests/spec/glsl-1.50/execution/interface-blocks-api-access-members.c
+++ b/tests/spec/glsl-1.50/execution/interface-blocks-api-access-members.c
@@ -67,16 +67,20 @@ static const char *gstext =
 	"out WithInstArray {\n"
 	"	float e;\n"
 	"	vec3 f;\n"
-	"} instArray[3];\n"
+	"	float g[3];\n"
+	"} instArray[2];\n"
 	"void main()\n"
 	"{\n"
 	"	a = 1.0;\n"
 	"	b = vec3(2.0);\n"
 	"	inst.c = 3.0;\n"
 	"	inst.d = vec3(4.0);\n"
-	"	for(int i = 0; i < 3; i++) {\n"
-	"		instArray[i].e = 5.0 + 2 * i;\n"
-	"		instArray[i].f = vec3(6.0 + 2 * i);\n"
+	"	for(int i = 0; i < 2; i++) {\n"
+	"		instArray[i].e = 5.0 + 5 * i;\n"
+	"		instArray[i].f = vec3(6.0 + 5 * i);\n"
+	"		for(int j = 0; j < 3; j++) {\n"
+	"			instArray[i].g[j] = instArray[i].e + 2.0 + j;\n"
+	"		}\n"
 	"	}\n"
 	"}\n";
 
@@ -88,7 +92,8 @@ static const char *valid_varying_names[] = {
 	"WithInst.c", "WithInst.d",
 	"WithInstArray[0].e", "WithInstArray[0].f",
 	"WithInstArray[1].e", "WithInstArray[1].f",
-	"WithInstArray[2].e", "WithInstArray[2].f"
+	"WithInstArray[0].g[0]", "WithInstArray[0].g[1]", "WithInstArray[0].g[2]",
+	"WithInstArray[1].g[0]", "WithInstArray[1].g[1]", "WithInstArray[1].g[2]"
 };
 
 static const char *invalid_varying_names[] = {
@@ -100,7 +105,8 @@ static const char *invalid_varying_names[] = {
 	"WithInstArray.e", "WithInstArray.f",
 	"instArray[0].e", "instArray[0].f",
 	"instArray[1].e", "instArray[1].f",
-	"instArray[2].e", "instArray[2].f"
+	"instArray[0].g[0]", "instArray[0].g[1]", "instArray[0].g[2]",
+	"instArray[1].g[0]", "instArray[1].g[1]", "instArray[1].g[2]"
 };
 
 void
-- 
2.5.0



More information about the Piglit mailing list