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&#39;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 &#39;redefine_user_buffer&#39;, which notifies a driver that a subrange of a user buffer should be reuploaded, and also redefines its size.<br>

<br>I&#39;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>

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