panfrost: Fix gl_PointSize out of GL_POINTS
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 2 Jun 2020 00:44:19 +0000 (20:44 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 3 Jun 2020 22:58:46 +0000 (22:58 +0000)
commit0ef527928c6acc63ce88a8df023b64d2a5c4468c
tree3186eb4845dc4333295f79731b9da3a1e7342023
parent3f8abd867616fc4ceccb2877cd1e629232397fb4
panfrost: Fix gl_PointSize out of GL_POINTS

In this case, vs->writes_point_size is true as the VS writes
gl_PointSize, but panfrost_writes_points_size() is false as we are not
drawing points so the hardware doesn't process it. Thus the varying
descriptor is emitted but elements is never written. When the VS runs,
it will attempt to write to elements, a NULL pointer.

The behaviour is architecture-independent. On Midgard, the write
silently fails, hence why this bug was never noticed before. On Bifrost,
this raises an MMU fault.

The fix is to set the format to VARYING_DISCARD to ignore the write.

Noticed on Neverball.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5290>
src/gallium/drivers/panfrost/pan_cmdstream.c