virgl: work around bad assumptions in virglrenderer
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Tue, 11 Dec 2018 14:02:53 +0000 (14:02 +0000)
committerErik Faye-Lund <erik.faye-lund@collabora.com>
Thu, 13 Dec 2018 15:12:10 +0000 (16:12 +0100)
commite888f28d1fd9f125fc70b2f5d1b3c42d8f25ae53
tree03f16adb9d0699f9f2ddbe3aa46a623c847a7768
parent8447b64238773db0e365802315772d1819c1923f
virgl: work around bad assumptions in virglrenderer

Virglrenderer does the wrong thing when given an instance divisor;
it tries to use the element-index rather than the binding-index as
the argument to glVertexBindingDivisor(). This worked fine as long
as there was a 1:1 relationship between elements and bindings,
which was the case util 19a91841c34 "st/mesa: Use Array._DrawVAO in
st_atom_array.c.".

So let's detect instance divisors, and restore a 1:1 relationship in
that case. This will make old versions of virglrenderer behave
correctly. For newer versions, we can consider making a better
interface, where the instance divisor isn't specified per element,
but rather per binding. But let's save that for another day.

Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Fixes: 19a91841c34 "st/mesa: Use Array._DrawVAO in st_atom_array.c."
Reviewed-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Tested-By: Gert Wollny <gert.wollny@collabora.com>
src/gallium/drivers/virgl/virgl_context.c