svga: fix vertex buffer binding issue
authorBrian Paul <brianp@vmware.com>
Tue, 25 Apr 2017 14:02:28 +0000 (08:02 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 26 Apr 2017 17:38:00 +0000 (11:38 -0600)
commit28feb63580e94085dd47d5391f9f6f20d69eea6c
tree6b50fd6950497f99f6182fcbe79825caa52f6a0b
parenta36a1ea80acfd28a36d89b2bfa914ab48768048d
svga: fix vertex buffer binding issue

When we ran Viewperf11's Maya-03 test 3 we saw warnings about flushing
the command buffer with mapped buffers.  This happened when transitioning
from hardware rendering to a 'draw' fallback path.

The problem is the util_set_vertex_buffers_count() function doesn't do
exactly what we want in svga_hwtnl_vertex_buffers().  In a case such as
dst_count=2, dst={bufA, bufB}, count=1 and src={bufC}, when the function
returns we'll have dst_count=2 and dst={bufC, bufB}.  What we really want
is dst_count=1 and dst={bufC, NULL}.  As it was, we were telling the svga
device that there were two vertex buffers when in fact we really only
needed one for the subsequent drawing command.

In this particular case, we first did hardware drawing with {bufA, bufB}
then we transitioned to the 'draw' module, consuming vertex data from
bufA and bufB and writing the new vertex data to bufC.  bufA and bufB are
mapped for reading when we flush the command buffer but should not be
referenced by the command buffer.  The above change fixes that.

No Piglit regressions.  Also tested with Viewperf, Google Earth, Heaven,
etc.

VMware bug 1842059

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_draw.c