<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: Times New Roman; font-size: 12pt; color: #000000'>Marek,<div><br></div><div>These patches look good, but have you covered the case where the application is changing the contents of vertex arrays without rebinding/notifying GL in any way?</div><div><br></div><div>eg. an app could do:</div><div><br></div><div>&nbsp;&nbsp;memcpy(varray, foo, ...);</div><div>&nbsp;&nbsp;glDrawArrays(...);</div><div>&nbsp;&nbsp;memcpy(varray, bar, ...);</div><div>&nbsp;&nbsp;glDrawArrays(...);</div><div><br></div><div>with these changes will drivers still notice the difference?</div><div><br></div><div>Keith<br><br><hr id="zwchr"><b>From: </b>"Marek Olšák" &lt;maraeo@gmail.com&gt;<br><b>To: </b>mesa-dev@lists.freedesktop.org<br><b>Sent: </b>Saturday, February 12, 2011 7:05:27 PM<br><b>Subject: </b>[Mesa-dev] [PATCH 0/6] Mesa/Gallium vertex array state optimizations<br><br>Hi,<br><br>this patch series optimizes vertex array state changes in Mesa/Gallium. The problem with the vbo module and st/mesa is that it re-binds vertex arrays every draw operation instead of only when they get changed by the application, and this series aims to address that issue.<br>

<br>Some new issues arose during the implemention though:<br><br>1) The VBO module didn't notify the underlying driver when it was changing buffer offsets and other vertex array properties. This is fixed in the 1st patch.<br>

<br>2) If we do not re-bind vertex arrays every draw operation, we must assure that the state is preserved after operations like glBlitFramebuffer. This is resolved in the 3rd patch using cso_cache.<br><br>3) Unfortunately, user buffers must be mutable in order to prevent re-binding vertex buffers because we have no way to know how large they are. Instead, a new context hook has been added to Gallium called 'redefine_user_buffer', which notifies a driver that a subrange of a user buffer should be reuploaded, and also redefines its size.<br>

<br>I've only tested softpipe and r300g and there were no regressions. r600g should also work and Christopher told me his Nouveau drivers should be ready for this series too.<br><br>Please review.<br><br>Marek Olšák (6):<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vbo: notify a driver that we change buffer offsets, strides, etc.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vbo: bind arrays only when necessary<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gallium: always save and restore vertex buffers using cso_cache<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gallium: remove pipe_vertex_buffer::max_index<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st/mesa: set vertex arrays state only when necessary<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gallium: notify drivers about possible changes in user buffer contents<br><br>Best regards<br>Marek<br>


<br>_______________________________________________<br>mesa-dev mailing list<br>mesa-dev@lists.freedesktop.org<br>http://lists.freedesktop.org/mailman/listinfo/mesa-dev<br></div></div></body></html>