I'm pretty sure that helps llvmpipe too. Reviewed-by: Roland Scheidegger <srol...@vmware.com>
Am 26.12.2017 um 07:55 schrieb Kenneth Graunke: > OpenGL defines two equations for converting from signed-normalized > to floating point data. These are: > > f = (2c + 1)/(2^b - 1) (equation 2.2) > f = max{c/2^(b-1) - 1), -1.0} (equation 2.3) > > ARB_vertex_type_2_10_10_10_rev specifies equation 2.2 is to be used. > > However, OpenGL 4.2 switched to use equation 2.3 in all scenarios. > This matched an earlier OpenGL ES 3.0 decision to only have one formula, > as well as a DirectX decision to change to equation 2.3. Some hardware > also only supports equation 2.3. So, basically no one can rely on > equation 2.2 happening, and some people do rely on 2.3. > > This patch continues to require equation 2.3 for GL 4.2+, but relaxes > the test to allow either behavior for earlier GL versions. > > See the following discussion for more details: > https://lists.freedesktop.org/archives/mesa-dev/2013-August/042680.html > > This makes this test pass on i965 with Haswell and later. > --- > .../draw-vertices-2101010.c | 48 > ++++++++++++++-------- > 1 file changed, 32 insertions(+), 16 deletions(-) > > diff --git > a/tests/spec/arb_vertex_type_2_10_10_10_rev/draw-vertices-2101010.c > b/tests/spec/arb_vertex_type_2_10_10_10_rev/draw-vertices-2101010.c > index 661fa9ca2..5ce4c0655 100644 > --- a/tests/spec/arb_vertex_type_2_10_10_10_rev/draw-vertices-2101010.c > +++ b/tests/spec/arb_vertex_type_2_10_10_10_rev/draw-vertices-2101010.c > @@ -187,20 +187,28 @@ static void test_int_vertices_abi(float x1, float y1, > float x2, float y2, int in > struct test { > void (*test)(float x1, float y1, float x2, float y2, int index); > int index; > - float expected_color[4]; > + float expected_color_equation_22[4]; > + float expected_color_equation_23[4]; > const char *name; > }; > > struct test tests[] = { > - {test_packed_int_vertices, 0, {1, 1, 1, 1}, "Int vertices - 2/10/10/10"}, > - {test_packed_int_vertices, 1, {1, 1, 1, 1}, "Unsigned Int vertices - > 2/10/10/10"}, > - {test_packed_int_color_vertices, 0, {1, 0, 0, 0.333}, "Int Color - > 2/10/10/10"}, > - {test_packed_int_color_vertices, 1, {1, 0, 0, 0}, "Unsigned Int Color - > 2/10/10/10"}, > - {test_packed_int_color_vertices, 2, {0, 0, 1, 0.333}, "Int BGRA Color - > 2/10/10/10"}, > - {test_packed_int_color_vertices, 3, {0, 0, 1, 0}, "Unsigned Int BGRA > Color - 2/10/10/10"}, > - > - {test_int_vertices_abi, 0, {1, 0, 0, 1}, "Int 2/10/10/10 - test ABI" }, > - {test_int_vertices_abi, 1, {1, 0, 0, 1}, "Unsigned 2/10/10/10 - test > ABI" }, > + {test_packed_int_vertices, 0, {1, 1, 1, 1}, {1, 1, 1, 1}, > + "Int vertices - 2/10/10/10"}, > + {test_packed_int_vertices, 1, {1, 1, 1, 1}, {1, 1, 1, 1}, > + "Unsigned Int vertices - 2/10/10/10"}, > + {test_packed_int_color_vertices, 0, {1, 0, 0, 0.333}, {1, 0, 0, 0}, > + "Int Color - 2/10/10/10"}, > + {test_packed_int_color_vertices, 1, {1, 0, 0, 0}, {1, 0, 0, 0}, > + "Unsigned Int Color - 2/10/10/10"}, > + {test_packed_int_color_vertices, 2, {0, 0, 1, 0.333}, {0, 0, 1, 0}, > + "Int BGRA Color - 2/10/10/10"}, > + {test_packed_int_color_vertices, 3, {0, 0, 1, 0}, {0, 0, 1, 0}, > + "Unsigned Int BGRA Color - 2/10/10/10"}, > + {test_int_vertices_abi, 0, {1, 0, 0, 1}, {1, 0, 0, 1}, > + "Int 2/10/10/10 - test ABI" }, > + {test_int_vertices_abi, 1, {1, 0, 0, 1}, {1, 0, 0, 1}, > + "Unsigned 2/10/10/10 - test ABI" }, > {0} > }; > > @@ -213,7 +221,7 @@ piglit_display(void) > /* To know what this is all about, see: > * http://lists.freedesktop.org/archives/mesa-dev/2013-August/042680.html > */ > - GLboolean snorm_equation_23 = piglit_get_gl_version() >= 42; > + bool require_snorm_equation_23 = piglit_get_gl_version() >= 42; > > glClear(GL_COLOR_BUFFER_BIT); > glEnableClientState(GL_VERTEX_ARRAY); > @@ -222,14 +230,22 @@ piglit_display(void) > for (i = 0; tests[i].test; i++) { > glBindBuffer(GL_ARRAY_BUFFER, 0); > > - if (snorm_equation_23 && fabs(tests[i].expected_color[3] - 0.333) < > 0.0001) > - tests[i].expected_color[3] = 0; > - > - printf("%s\n", tests[i].name); > tests[i].test(x, y, x+20, y+20, tests[i].index); > if (!piglit_check_gl_error(GL_NO_ERROR)) > piglit_report_result(PIGLIT_FAIL); > - pass = piglit_probe_pixel_rgba(x+5, y+5, tests[i].expected_color) && > pass; > + > + printf("%s\n", tests[i].name); > + > + if (require_snorm_equation_23) { > + pass = piglit_probe_pixel_rgba(x+5, y+5, > tests[i].expected_color_equation_23) && pass; > + } else { > + bool equation_22_pass = piglit_probe_pixel_rgba(x+5, y+5, > tests[i].expected_color_equation_22); > + bool equation_23_pass = piglit_probe_pixel_rgba(x+5, y+5, > tests[i].expected_color_equation_23); > + if (!equation_22_pass && equation_23_pass) { > + printf("warning: driver uses GL 4.2+ rules for signed > normalized to float conversions\n"); > + } > + pass = (equation_22_pass || equation_23_pass) && pass; > + } > > x += 20; > if (x > 300) { > _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit