dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.5
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.6
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.10
dEQP-GLES3.functional.fence_sync.wait_sync_smalldraw
dEQP-GLES3.functional.fence_sync.wait_sync_largedraw
dEQP-GLES3.functional.fence_sync.client_wait_sync_smalldraw
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.8
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.10
dEQP-GLES3.functional.fence_sync.wait_sync_smalldraw
dEQP-GLES3.functional.fence_sync.wait_sync_largedraw
dEQP-GLES3.functional.fence_sync.client_wait_sync_smalldraw
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.8
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.10
dEQP-GLES3.functional.fence_sync.wait_sync_smalldraw
dEQP-GLES3.functional.fence_sync.wait_sync_largedraw
dEQP-GLES3.functional.fence_sync.client_wait_sync_smalldraw
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.8
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.10
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.1
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.2
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.3
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.4
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.5
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.6
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.7
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.8
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.9
+dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.10
dEQP-GLES3.functional.fence_sync.wait_sync_smalldraw
dEQP-GLES3.functional.fence_sync.wait_sync_largedraw
dEQP-GLES3.functional.fence_sync.client_wait_sync_smalldraw
KHR-GLES31.core.program_interface_query.uniform-block-types
KHR-GLES31.core.program_interface_query.uniform-block-array
KHR-GLES31.core.program_interface_query.transform-feedback-types
+KHR-GLES31.core.program_interface_query.transform-feedback-types-full-array-capture
KHR-GLES31.core.program_interface_query.atomic-counters
KHR-GLES31.core.program_interface_query.atomic-counters-one-buffer
KHR-GLES31.core.program_interface_query.ssb-types
KHR-GLES31.core.program_interface_query.uniform-block-types
KHR-GLES31.core.program_interface_query.uniform-block-array
KHR-GLES31.core.program_interface_query.transform-feedback-types
+KHR-GLES31.core.program_interface_query.transform-feedback-types-full-array-capture
KHR-GLES31.core.program_interface_query.atomic-counters
KHR-GLES31.core.program_interface_query.atomic-counters-one-buffer
KHR-GLES31.core.program_interface_query.ssb-types
KHR-GLES31.core.program_interface_query.uniform-block-types
KHR-GLES31.core.program_interface_query.uniform-block-array
KHR-GLES31.core.program_interface_query.transform-feedback-types
+KHR-GLES31.core.program_interface_query.transform-feedback-types-full-array-capture
KHR-GLES31.core.program_interface_query.atomic-counters
KHR-GLES31.core.program_interface_query.atomic-counters-one-buffer
KHR-GLES31.core.program_interface_query.ssb-types
}
};
+class TransformFeedbackTypesFullArrayCapture : public SimpleShaders
+{
+ virtual std::string Title()
+ {
+ return "Transform Feedback Varying Types Without Element Capture";
+ }
+
+ virtual std::string ShadersDesc()
+ {
+ return "fallthrough fragment and vertex shaders with different types of out variables used";
+ }
+
+ virtual std::string PurposeExt()
+ {
+ return "\n\n Purpose is to verify calls using GL_TRANSFORM_FEEDBACK_VARYING as an interface param.\n";
+ }
+
+ virtual std::string VertexShader()
+ {
+ return "#version 310 es \n"
+ "in vec4 position; \n"
+ ""
+ "flat out highp vec4 a; \n"
+ "out mediump float b[2]; \n"
+ "flat out highp uvec2 c; \n"
+ "flat out highp uint d; \n"
+ "out mediump vec3 e[2]; \n"
+ "flat out int f; \n"
+ ""
+ "void main(void) \n"
+ "{ \n"
+ " vec4 pos; \n"
+ " a = vec4(1); \n"
+ " b[0] = 1.1; \n"
+ " b[1] = 1.1; \n"
+ " c = uvec2(1u); \n"
+ " d = 1u; \n"
+ " e[0] = vec3(1.1); \n"
+ " e[1] = vec3(1.1); \n"
+ " f = 1; \n"
+ " gl_Position = position; \n"
+ "}";
+ }
+
+ virtual long Run()
+ {
+ GLuint program = CreateProgram(VertexShader().c_str(), FragmentShader().c_str(), false);
+ glBindAttribLocation(program, 0, "position");
+ const char* varyings[5] = { "a", "b", "c", "d", "e" };
+ glTransformFeedbackVaryings(program, 5, varyings, GL_INTERLEAVED_ATTRIBS);
+ LinkProgram(program);
+
+ long error = NO_ERROR;
+
+ VerifyGetProgramInterfaceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, GL_ACTIVE_RESOURCES, 5, error);
+ VerifyGetProgramInterfaceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, GL_MAX_NAME_LENGTH, 2, error);
+
+ std::map<std::string, GLuint> indices;
+ VerifyGetProgramResourceIndex(program, GL_TRANSFORM_FEEDBACK_VARYING, indices, "a", error);
+ VerifyGetProgramResourceIndex(program, GL_TRANSFORM_FEEDBACK_VARYING, indices, "b", error);
+ VerifyGetProgramResourceIndex(program, GL_TRANSFORM_FEEDBACK_VARYING, indices, "c", error);
+ VerifyGetProgramResourceIndex(program, GL_TRANSFORM_FEEDBACK_VARYING, indices, "d", error);
+ VerifyGetProgramResourceIndex(program, GL_TRANSFORM_FEEDBACK_VARYING, indices, "e", error);
+
+ VerifyGetProgramResourceName(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["a"], "a", error);
+ VerifyGetProgramResourceName(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["b"], "b", error);
+ VerifyGetProgramResourceName(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["c"], "c", error);
+ VerifyGetProgramResourceName(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["d"], "d", error);
+ VerifyGetProgramResourceName(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["e"], "e", error);
+
+ GLenum props[] = { GL_NAME_LENGTH, GL_TYPE, GL_ARRAY_SIZE };
+ GLint expected[] = { 2, GL_FLOAT_VEC4, 1 };
+ VerifyGetProgramResourceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["a"], 3, props, 3, expected, error);
+ GLint expected2[] = { 2, GL_FLOAT, 2 };
+ VerifyGetProgramResourceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["b"], 3, props, 3, expected2, error);
+ GLint expected3[] = { 2, GL_UNSIGNED_INT_VEC2, 1 };
+ VerifyGetProgramResourceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["c"], 3, props, 3, expected3, error);
+ GLint expected4[] = { 2, GL_UNSIGNED_INT, 1 };
+ VerifyGetProgramResourceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["d"], 3, props, 3, expected4, error);
+ GLint expected5[] = { 2, GL_FLOAT_VEC3, 2 };
+ VerifyGetProgramResourceiv(program, GL_TRANSFORM_FEEDBACK_VARYING, indices["e"], 3, props, 3, expected5, error);
+
+ glDeleteProgram(program);
+ return error;
+ }
+};
+
class AtomicCounterSimple : public ComputeShaderTest
{
public:
addChild(new TestSubcase(m_context, "uniform-block-types", TestSubcase::Create<UniformBlockTypes>));
addChild(new TestSubcase(m_context, "uniform-block-array", TestSubcase::Create<UniformBlockArray>));
addChild(new TestSubcase(m_context, "transform-feedback-types", TestSubcase::Create<TransformFeedbackTypes>));
+ addChild(new TestSubcase(m_context, "transform-feedback-types-full-array-capture",
+ TestSubcase::Create<TransformFeedbackTypesFullArrayCapture>));
addChild(new TestSubcase(m_context, "atomic-counters", TestSubcase::Create<AtomicCounterSimple>));
addChild(
new TestSubcase(m_context, "atomic-counters-one-buffer", TestSubcase::Create<AtomicCounterSimpleOneBuffer>));
void SetupTransformFeedback(GLuint program)
{
- const char* const varying_name[] = { "count[0]", "count[1]", "count[2]", "count[3]" };
- glTransformFeedbackVaryings(program, 4, varying_name, GL_INTERLEAVED_ATTRIBS);
+ const char* const varying_name = "count";
+ glTransformFeedbackVaryings(program, 1, &varying_name, GL_INTERLEAVED_ATTRIBS);
}
inline bool Equal(const ivec4& result, const ivec4& expected)
}
/* setup XFB */
{
- const GLchar* const v[15] = { "attrib[0]", "attrib[1]", "attrib[2]", "attrib[3]", "attrib[4]",
- "attrib[5]", "attrib[6]", "attrib[7]", "attrib[8]", "attrib[9]",
- "attrib[10]", "attrib[11]", "attrib[12]", "attrib[13]", "attrib[14]" };
- glTransformFeedbackVaryings(m_po, 15, v, GL_INTERLEAVED_ATTRIBS);
+ const GLchar* const v = "attrib";
+ glTransformFeedbackVaryings(m_po, 1, &v, GL_INTERLEAVED_ATTRIBS);
}
glLinkProgram(m_po);
if (!CheckProgram(m_po))
}
/* setup XFB */
{
- const GLchar* const v[15] = { "attribi[0]", "attribi[1]", "attribi[2]", "attribi[3]", "attribi[4]",
- "attribi[5]", "attribi[6]", "attribi[7]", "attribui[0]", "attribui[1]",
- "attribui[2]", "attribui[3]", "attribui[4]", "attribui[5]", "attribui[6]" };
- glTransformFeedbackVaryings(m_po, 15, v, GL_INTERLEAVED_ATTRIBS);
+ const GLchar* const v[2] = { "attribi", "attribui" };
+ glTransformFeedbackVaryings(m_po, 2, v, GL_INTERLEAVED_ATTRIBS);
}
glLinkProgram(m_po);
if (!CheckProgram(m_po))
class RandomCase : public TransformFeedbackCase
{
public:
- RandomCase (Context& context, const char* name, const char* desc, deUint32 bufferType, deUint32 primitiveType, deUint32 seed)
+ RandomCase (Context& context, const char* name, const char* desc, deUint32 bufferType, deUint32 primitiveType, deUint32 seed, bool elementCapture)
: TransformFeedbackCase (context, name, desc, bufferType, primitiveType)
, m_seed (seed)
+ , m_elementCapture (elementCapture)
{
}
if (var.type.isArrayType())
{
- const bool captureFull = rnd.getFloat() < captureFullArrayWeight;
+ const bool captureFull = m_elementCapture ? (rnd.getFloat() < captureFullArrayWeight) : true;
if (captureFull)
tfCandidates.push_back(var.name);
}
private:
- deUint32 m_seed;
+ deUint32 m_seed;
+ bool m_elementCapture;
};
} // TransformFeedback
for (int ndx = 0; ndx < 10; ndx++)
{
deUint32 seed = deInt32Hash(bufferMode) ^ deInt32Hash(primitiveType) ^ deInt32Hash(ndx);
- primitiveGroup->addChild(new RandomCase(m_context, de::toString(ndx+1).c_str(), "", bufferMode, primitiveType, seed));
+ primitiveGroup->addChild(new RandomCase(m_context, de::toString(ndx+1).c_str(), "", bufferMode, primitiveType, seed, true));
+ }
+ }
+ }
+ }
+
+ // .random_full_array_capture
+ {
+ tcu::TestCaseGroup* randomNecGroup = new tcu::TestCaseGroup(m_testCtx, "random_full_array_capture", "Randomized transform feedback cases without array element capture");
+ addChild(randomNecGroup);
+
+ for (int bufferModeNdx = 0; bufferModeNdx < DE_LENGTH_OF_ARRAY(bufferModes); bufferModeNdx++)
+ {
+ tcu::TestCaseGroup* modeGroup = new tcu::TestCaseGroup(m_testCtx, bufferModes[bufferModeNdx].name, "");
+ deUint32 bufferMode = bufferModes[bufferModeNdx].mode;
+ randomNecGroup->addChild(modeGroup);
+
+ for (int primitiveTypeNdx = 0; primitiveTypeNdx < DE_LENGTH_OF_ARRAY(primitiveTypes); primitiveTypeNdx++)
+ {
+ tcu::TestCaseGroup* primitiveGroup = new tcu::TestCaseGroup(m_testCtx, primitiveTypes[primitiveTypeNdx].name, "");
+ deUint32 primitiveType = primitiveTypes[primitiveTypeNdx].type;
+ modeGroup->addChild(primitiveGroup);
+
+ for (int ndx = 0; ndx < 10; ndx++)
+ {
+ deUint32 seed = deInt32Hash(bufferMode) ^ deInt32Hash(primitiveType) ^ deInt32Hash(ndx);
+ primitiveGroup->addChild(new RandomCase(m_context, de::toString(ndx+1).c_str(), "", bufferMode, primitiveType, seed, false));
}
}
}