[Piglit] [PATCH v2] arb_provoking_vertex: Test flat shading with clipped geometry
danylo
danylo.piliaiev at gmail.com
Thu Jun 14 14:08:00 UTC 2018
I took a second look at 'clipflat' test and it doesn't test edge case in
question. 'clipflat' test doesn't fail on i965/gen9 while my test fails
(and passes on Radeon/sw), the difference is the necessity for my test
to have at least three vertices out of screen which have distinct color
from vertices left on screen.
-Danil
On 14.06.18 15:35, Brian Paul wrote:
> Does this test do anything that isn't already done by the existing
> clipflat.c test?
>
> -Brian
>
> On 06/14/2018 03:41 AM, Danylo Piliaiev wrote:
>> There is a hardware bug in i965/gen9+ with provoking vertices.
>> Test if workaround works correctly.
>>
>> Ref:
>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.freedesktop.org%2Fshow_bug.cgi%3Fid%3D103047&data=02%7C01%7Cbrianp%40vmware.com%7Cf6ec4bfb4928411d446708d5d1db05bf%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C1%7C636645660990175348&sdata=1XPX5QNMBxDkNPHQnH9ydaq5NjCqBdDmWId5pl0vnb8%3D&reserved=0
>>
>> v2: - Vertices now have distinctive color
>> - Update message to reflect a nature of the bug which was
>> clarified by Kenneth. He will also provide workaround later.
>>
>> Signed-off-by: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
>> ---
>> tests/opengl.py | 1 +
>> tests/spec/arb_provoking_vertex/CMakeLists.gl.txt | 1 +
>> .../clipped-geometry-flatshading.c | 81
>> ++++++++++++++++++++++
>> 3 files changed, 83 insertions(+)
>> create mode 100644
>> tests/spec/arb_provoking_vertex/clipped-geometry-flatshading.c
>>
>> diff --git a/tests/opengl.py b/tests/opengl.py
>> index 3109a5e..313b22b 100644
>> --- a/tests/opengl.py
>> +++ b/tests/opengl.py
>> @@ -2205,6 +2205,7 @@ with profile.test_list.group_manager(
>> g(['arb-provoking-vertex-control'], run_concurrent=False)
>> g(['arb-provoking-vertex-initial'], run_concurrent=False)
>> g(['arb-provoking-vertex-render'], run_concurrent=False)
>> + g(['arb-provoking-vertex-clipped-geometry-flatshading'],
>> run_concurrent=False)
>> g(['arb-quads-follow-provoking-vertex'], run_concurrent=False)
>> g(['arb-xfb-before-flatshading'], run_concurrent=False)
>> diff --git a/tests/spec/arb_provoking_vertex/CMakeLists.gl.txt
>> b/tests/spec/arb_provoking_vertex/CMakeLists.gl.txt
>> index 6dd15bb..3acffc6 100644
>> --- a/tests/spec/arb_provoking_vertex/CMakeLists.gl.txt
>> +++ b/tests/spec/arb_provoking_vertex/CMakeLists.gl.txt
>> @@ -11,6 +11,7 @@ link_libraries (
>> piglit_add_executable (arb-provoking-vertex-control
>> provoking-vertex-control.c)
>> piglit_add_executable (arb-provoking-vertex-initial
>> provoking-vertex-initial.c)
>> piglit_add_executable (arb-provoking-vertex-render render.c)
>> +piglit_add_executable
>> (arb-provoking-vertex-clipped-geometry-flatshading
>> clipped-geometry-flatshading.c)
>> piglit_add_executable (arb-quads-follow-provoking-vertex
>> quads-follow-provoking-vertex.c)
>> piglit_add_executable (arb-xfb-before-flatshading
>> xfb-before-flatshading.c)
>> diff --git
>> a/tests/spec/arb_provoking_vertex/clipped-geometry-flatshading.c
>> b/tests/spec/arb_provoking_vertex/clipped-geometry-flatshading.c
>> new file mode 100644
>> index 0000000..72acb4d
>> --- /dev/null
>> +++ b/tests/spec/arb_provoking_vertex/clipped-geometry-flatshading.c
>> @@ -0,0 +1,81 @@
>> +/*
>> + * Copyright © 2018 Danylo Piliaiev
>> + *
>> + * Permission is hereby granted, free of charge, to any person
>> obtaining a
>> + * copy of this software and associated documentation files (the
>> "Software"),
>> + * to deal in the Software without restriction, including without
>> limitation
>> + * the rights to use, copy, modify, merge, publish, distribute,
>> sublicense,
>> + * and/or sell copies of the Software, and to permit persons to whom
>> the
>> + * Software is furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice (including
>> the next
>> + * paragraph) shall be included in all copies or substantial
>> portions of the
>> + * Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
>> EVENT SHALL
>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
>> OR OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING
>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>> OTHER DEALINGS
>> + * IN THE SOFTWARE.
>> + */
>> +
>> +/**
>> + * Test that provoking vertex works as expected when part of the
>> geometry
>> + * is clipped when flat shading is enabled.
>> + *
>> + *
>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.freedesktop.org%2Fshow_bug.cgi%3Fid%3D103047&data=02%7C01%7Cbrianp%40vmware.com%7Cf6ec4bfb4928411d446708d5d1db05bf%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C1%7C636645660990175348&sdata=1XPX5QNMBxDkNPHQnH9ydaq5NjCqBdDmWId5pl0vnb8%3D&reserved=0
>> + */
>> +
>> +#include "piglit-util-gl.h"
>> +
>> +PIGLIT_GL_TEST_CONFIG_BEGIN
>> + config.supports_gl_compat_version = 10;
>> + config.khr_no_error_support = PIGLIT_NO_ERRORS;
>> +PIGLIT_GL_TEST_CONFIG_END
>> +
>> +void
>> +piglit_init(int argc, char **argv)
>> +{
>> + piglit_require_extension("GL_EXT_provoking_vertex");
>> + piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
>> +
>> + glShadeModel(GL_FLAT);
>> +}
>> +
>> +enum piglit_result
>> +piglit_display(void)
>> +{
>> + static const float red[3] = {1, 0, 0},
>> + green[3] = {0, 1, 0},
>> + blue[3] = {0, 0, 1},
>> + yellow[3] = {1, 1, 0},
>> + cyan[3] = {0, 1, 1};
>> +
>> + bool pass = true;
>> +
>> + glClear(GL_COLOR_BUFFER_BIT);
>> + glProvokingVertexEXT(GL_LAST_VERTEX_CONVENTION_EXT);
>> +
>> + const int y1 = piglit_height / 3;
>> +
>> + glBegin(GL_TRIANGLE_STRIP);
>> + glColor3fv(cyan);
>> + glVertex3i(piglit_width + 1, y1, 0);
>> + glColor3fv(yellow);
>> + glVertex3i(piglit_width + 2, y1, 0);
>> + glColor3fv(blue);
>> + glVertex3i(piglit_width + 3, y1, 0);
>> + glColor3fv(green);
>> + glVertex3i(piglit_width / 2, y1 * 2, 0);
>> + glColor3fv(red);
>> + glVertex3i(piglit_width - 1, y1 * 2, 0);
>> + glEnd();
>> +
>> + pass = pass && piglit_probe_pixel_rgb(piglit_width - 2, y1 * 3 /
>> 2, red);
>> +
>> + piglit_present_results();
>> +
>> + return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>> +}
>>
>
More information about the Piglit
mailing list