Commit 7dbd5595 authored by Paul Berry's avatar Paul Berry
Browse files

Transform feedback: Add tests of integral output types.



When GLSL version 1.30 is supported, transform feedback can output
integral types (uint, int, uvec, and ivec).  This patch expands the
existing EXT_transform_feedback/output-type tests to validate those
integral types.

Verified on the closed-source nVidia Linux driver and on Mesa master
using Intel Sandy Bridge.
Reviewed-by: Emma Anholt's avatarEric Anholt <eric@anholt.net>
parent afc328a7
......@@ -1474,6 +1474,22 @@ ext_transform_feedback['output-type mat4x3'] = PlainExecTest(['ext_transform_fee
ext_transform_feedback['output-type mat4x3[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'mat4x3[2]'])
ext_transform_feedback['output-type mat4'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'mat4'])
ext_transform_feedback['output-type mat4[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'mat4[2]'])
ext_transform_feedback['output-type int'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'int'])
ext_transform_feedback['output-type int[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'int[2]'])
ext_transform_feedback['output-type ivec2'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'ivec2'])
ext_transform_feedback['output-type ivec2[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'ivec2[2]'])
ext_transform_feedback['output-type ivec3'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'ivec3'])
ext_transform_feedback['output-type ivec3[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'ivec3[2]'])
ext_transform_feedback['output-type ivec4'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'ivec4'])
ext_transform_feedback['output-type ivec4[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'ivec4[2]'])
ext_transform_feedback['output-type uint'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uint'])
ext_transform_feedback['output-type uint[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uint[2]'])
ext_transform_feedback['output-type uvec2'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uvec2'])
ext_transform_feedback['output-type uvec2[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uvec2[2]'])
ext_transform_feedback['output-type uvec3'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uvec3'])
ext_transform_feedback['output-type uvec3[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uvec3[2]'])
ext_transform_feedback['output-type uvec4'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uvec4'])
ext_transform_feedback['output-type uvec4[2]'] = PlainExecTest(['ext_transform_feedback-output-type', '-auto', 'uvec4[2]'])
arb_transform_feedback2 = Group()
spec['ARB_transform_feedback2'] = arb_transform_feedback2
......
......@@ -39,8 +39,10 @@ struct test_desc {
const char *vs;
unsigned num_varyings;
const char *varyings[16];
bool is_floating_point;
unsigned num_elements;
float expected[256];
float expected_float[256];
GLint expected_int[256];
} tests[] = {
{
"float", /* name */
......@@ -55,8 +57,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
1, /* num_elements, expected */
{666}
true, /* is_floating_point */
1, /* num_elements, expected_float, expected_int */
{666}, {}
},
{
"float[2]", /* name */
......@@ -71,8 +74,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
2, /* num_elements, expected */
{666, 0.123}
true, /* is_floating_point */
2, /* num_elements, expected_float, expected_int */
{666, 0.123}, {}
},
{
"vec2", /* name */
......@@ -87,8 +91,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
2, /* num_elements, expected */
{666, 999}
true, /* is_floating_point */
2, /* num_elements, expected_float, expected_int */
{666, 999}, {}
},
{
"vec2[2]", /* name */
......@@ -103,8 +108,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
4, /* num_elements, expected */
{666, 999, -1.5, -20.0}
true, /* is_floating_point */
4, /* num_elements, expected_float, expected_int */
{666, 999, -1.5, -20.0}, {}
},
{
"vec3", /* name */
......@@ -119,8 +125,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
3, /* num_elements, expected */
{666, 999, -2}
true, /* is_floating_point */
3, /* num_elements, expected_float, expected_int */
{666, 999, -2}, {}
},
{
"vec3[2]", /* name */
......@@ -135,8 +142,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
6, /* num_elements, expected */
{666, 999, -2, 0.4, 1.4, 3.5}
true, /* is_floating_point */
6, /* num_elements, expected_float, expected_int */
{666, 999, -2, 0.4, 1.4, 3.5}, {}
},
{
"vec4", /* name */
......@@ -151,8 +159,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
4, /* num_elements, expected */
{0.666, 666, 999, -2}
true, /* is_floating_point */
4, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2}, {}
},
{
"vec4[2]", /* name */
......@@ -167,8 +176,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
8, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4, 30.0, 40.0}
true, /* is_floating_point */
8, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30.0, 40.0}, {}
},
{
"mat2", /* name */
......@@ -183,8 +193,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
4, /* num_elements, expected */
{0.666, 666, 999, -2}
true, /* is_floating_point */
4, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2}, {}
},
{
"mat2[2]", /* name */
......@@ -200,8 +211,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
8, /* num_elements, expected */
{0.666, 666, 999, -2, 0.34, 0.65, 0.14, -0.97}
true, /* is_floating_point */
8, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.34, 0.65, 0.14, -0.97}, {}
},
{
"mat2x3", /* name */
......@@ -216,8 +228,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
6, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4}
true, /* is_floating_point */
6, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4}, {}
},
{
"mat2x3[2]", /* name */
......@@ -233,8 +246,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
12, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4, 0.34, 0.12, -10.0, 30.1, 5.3, 9.8}
true, /* is_floating_point */
12, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 0.34, 0.12, -10.0, 30.1, 5.3, 9.8}, {}
},
{
"mat2x4", /* name */
......@@ -249,8 +263,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
8, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40}
true, /* is_floating_point */
8, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40}, {}
},
{
"mat2x4[2]", /* name */
......@@ -266,8 +281,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
16, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40, 0.12, 0.24, 0.34, 0.56, 0.67, 0.78, 0.89, 0.04}
true, /* is_floating_point */
16, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40, 0.12, 0.24, 0.34, 0.56, 0.67, 0.78, 0.89, 0.04}, {}
},
{
"mat3x2", /* name */
......@@ -283,8 +299,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
6, /* num_elements, expected */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0}
true, /* is_floating_point */
6, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0}, {}
},
{
"mat3x2[2]", /* name */
......@@ -300,8 +317,9 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
12, /* num_elements, expected */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 0.98, 0.87, 0.76, 0.65, 0.54, 0.43}
true, /* is_floating_point */
12, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 0.98, 0.87, 0.76, 0.65, 0.54, 0.43}, {}
},
{
"mat3", /* name */
......@@ -318,8 +336,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
9, /* num_elements, expected */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 3.0, 0.3, -10.0}
true, /* is_floating_point */
9, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 3.0, 0.3, -10.0}, {}
},
{
"mat3[2]", /* name */
......@@ -337,9 +356,10 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
18, /* num_elements, expected */
true, /* is_floating_point */
18, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 3.0, 0.3, -10.0,
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6, 8.0}
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6, 8.0}, {}
},
{
"mat3x4", /* name */
......@@ -357,8 +377,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
12, /* num_elements, expected */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 3.0, 0.3, -10.0, 0.4, -4.1, -5.9}
true, /* is_floating_point */
12, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 3.0, 0.3, -10.0, 0.4, -4.1, -5.9}, {}
},
{
"mat3x4[2]", /* name */
......@@ -376,9 +397,10 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
24, /* num_elements, expected */
true, /* is_floating_point */
24, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0, 0.2, 5.0, 3.0, 0.3, -10.0, 0.4, -4.1, -5.9,
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6, 8.0, 0.4, -4.1, -5.9}
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6, 8.0, 0.4, -4.1, -5.9}, {}
},
{
"mat4x2", /* name */
......@@ -393,8 +415,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
8, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40}
true, /* is_floating_point */
8, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40}, {}
},
{
"mat4x2[2]", /* name */
......@@ -410,9 +433,10 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
16, /* num_elements, expected */
true, /* is_floating_point */
16, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40,
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6}
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6}, {}
},
{
"mat4x3", /* name */
......@@ -429,8 +453,9 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
12, /* num_elements, expected */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40, 0.3, 0.2, 0.1, 0.4}
true, /* is_floating_point */
12, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40, 0.3, 0.2, 0.1, 0.4}, {}
},
{
"mat4x3[2]", /* name */
......@@ -449,9 +474,10 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
24, /* num_elements, expected */
true, /* is_floating_point */
24, /* num_elements, expected_float, expected_int */
{0.666, 666, 999, -2, 0.5, -0.4, 30, 40, 0.3, 0.2, 0.1, 0.4,
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6, 8.0, 0.4, -4.1, -5.9}
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6, 8.0, 0.4, -4.1, -5.9}, {}
},
{
"mat4", /* name */
......@@ -469,11 +495,12 @@ struct test_desc {
1, /* num_varyings, varyings */
{"r"},
16, /* num_elements, expected */
true, /* is_floating_point */
16, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0,
0.2, 5.0, 3.0, 0.3,
-10.0, 20.1, 52.4, -34.3,
45.0, 56.0, 67.0, 78.0}
45.0, 56.0, 67.0, 78.0}, {}
},
{
"mat4[2]", /* name */
......@@ -491,13 +518,298 @@ struct test_desc {
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
32, /* num_elements, expected */
true, /* is_floating_point */
32, /* num_elements, expected_float, expected_int */
{0.666, 666.0, 999.0, -2.0,
0.2, 5.0, 3.0, 0.3,
-10.0, 20.1, 52.4, -34.3,
45.0, 56.0, 67.0, 78.0,
20.0, 10.0, 5.0, 90.0, -4.0, 3.4, -2.3, -8.6,
8.0, 0.4, -4.1, -5.9, -10.0, 0.4, -4.1, -5.9}
8.0, 0.4, -4.1, -5.9, -10.0, 0.4, -4.1, -5.9}, {}
},
{
"int", /* name */
"#version 130\n"
"flat out int r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = 2145948354;"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
1, /* num_elements, expected_float, expected_int */
{}, {2145948354}
},
{
"int[2]", /* name */
"#version 130\n"
"flat out int[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = int[2](-362245257,"
" 2074398469);"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
2, /* num_elements, expected_float, expected_int */
{}, {-362245257, 2074398469}
},
{
"ivec2", /* name */
"#version 130\n"
"flat out ivec2 r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = ivec2(408918569, -69869318);"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
2, /* num_elements, expected_float, expected_int */
{}, {408918569, -69869318}
},
{
"ivec2[2]", /* name */
"#version 130\n"
"flat out ivec2[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = ivec2[2](ivec2(5703639, 654049542),"
" ivec2(82927237, -1489678625));"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
4, /* num_elements, expected_float, expected_int */
{}, {5703639, 654049542, 82927237, -1489678625}
},
{
"ivec3", /* name */
"#version 130\n"
"flat out ivec3 r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = ivec3(1402620337, -931103284, -1922128750);"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
3, /* num_elements, expected_float, expected_int */
{}, {1402620337, -931103284, -1922128750}
},
{
"ivec3[2]", /* name */
"#version 130\n"
"flat out ivec3[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = ivec3[2](ivec3(819762795, 292214138, 207695021),"
" ivec3(-541769145, -896550370, -322088831));"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
6, /* num_elements, expected_float, expected_int */
{}, {819762795, 292214138, 207695021,
-541769145, -896550370, -322088831}
},
{
"ivec4", /* name */
"#version 130\n"
"flat out ivec4 r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = ivec4(1979209158, -791559088, -992849733, -59981678);"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
4, /* num_elements, expected_float, expected_int */
{}, {1979209158, -791559088, -992849733, -59981678}
},
{
"ivec4[2]", /* name */
"#version 130\n"
"flat out ivec4[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = ivec4[2](ivec4(-764612129, 395402837, -1260359913, 936205122),"
" ivec4(-1510453781, -707590649, -760434930, -1756396083));"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
8, /* num_elements, expected_float, expected_int */
{}, {-764612129, 395402837, -1260359913, 936205122,
-1510453781, -707590649, -760434930, -1756396083}
},
{
"uint", /* name */
"#version 130\n"
"flat out uint r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = 2230472931u;"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
1, /* num_elements, expected_float, expected_int */
{}, {2230472931u}
},
{
"uint[2]", /* name */
"#version 130\n"
"flat out uint[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = uint[2](4073369952u,"
" 1026348970u);"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
2, /* num_elements, expected_float, expected_int */
{}, {4073369952u, 1026348970u}
},
{
"uvec2", /* name */
"#version 130\n"
"flat out uvec2 r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = uvec2(1214092884u, 3587337147u);"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
2, /* num_elements, expected_float, expected_int */
{}, {1214092884u, 3587337147u}
},
{
"uvec2[2]", /* name */
"#version 130\n"
"flat out uvec2[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = uvec2[2](uvec2(1011258288u, 684916166u),"
" uvec2(381807053u, 3306523233u));"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
4, /* num_elements, expected_float, expected_int */
{}, {1011258288u, 684916166u, 381807053u, 3306523233u}
},
{
"uvec3", /* name */
"#version 130\n"
"flat out uvec3 r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = uvec3(1076370307u, 1186562996u, 3616039281u);"
"}",
1, /* num_varyings, varyings */
{"r"},
false, /* is_floating_point */
3, /* num_elements, expected_float, expected_int */
{}, {1076370307u, 1186562996u, 3616039281u}
},
{
"uvec3[2]", /* name */
"#version 130\n"
"flat out uvec3[2] r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = uvec3[2](uvec3(2984731006u, 2324137892u, 876349448u),"
" uvec3(2493082028u, 1481747175u, 1530233730u));"
"}",
2, /* num_varyings, varyings */
{"r[0]", "r[1]"},
false, /* is_floating_point */
6, /* num_elements, expected_float, expected_int */
{}, {2984731006u, 2324137892u, 876349448u,
2493082028u, 1481747175u, 1530233730u}
},
{
"uvec4", /* name */
"#version 130\n"
"flat out uvec4 r;" /* vs */
"void main() {"
" gl_Position = ftransform();"
" r = uvec4(3046379279u, 3265138790u, 4109383147u, 2654056480u);"
"}",
1, /* num_varyings, varyings */