<div class="gmail_quote">On Tue, Feb 8, 2011 at 10:39 PM, Keith Whitwell <span dir="ltr">&lt;<a href="mailto:keithw@vmware.com" target="_blank">keithw@vmware.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">



<div>On Tue, 2011-02-08 at 22:29 +0100, Marek Olšák wrote:<br>
&gt;<br>
&gt;<br>
&gt; Keith,<br>
&gt;<br>
&gt; redefine_user_buffer() would be a good compromise and I believe the<br>
&gt; performance hit wouldn&#39;t be so noticable. It would also allow partial<br>
&gt; uploads of constants in a user buffer, which is something we&#39;d like to<br>
&gt; have<br>
&gt; too.<br>
&gt;<br>
&gt; Currently, st/mesa in st_draw_vbo is doing:<br>
&gt; - N calls to resource_destroy<br>
&gt; - some unnecessary computations<br>
&gt; - N calls to user_buffer_create<br>
&gt; - 1 call to set_vertex_buffers<br>
&gt; - 1 call to set_vertex_elements_state<br>
&gt;<br>
&gt; If we can replace this by N calls to redefine_user_buffer, then I am<br>
&gt; all for<br>
&gt; it, provided neither _NEW_ARRAY nor _NEW_PROGRAM is dirty of course.<br>
&gt;<br>
&gt; Can the function look, let&#39;s say, like this?<br>
&gt;<br>
&gt; void redefine_user_buffer(struct pipe_context *, struct pipe_resource<br>
&gt; *,<br>
&gt; const struct pipe_box *);<br>
&gt;<br>
<br>
</div>That looks good, but wouldn&#39;t you also want to be able to change the<br>
size of the userbuffer?  I can see you might be able to implicitly grow<br>
the buffer this way (when box-&gt;x +  box-&gt;width &gt; resource-&gt;width0), but<br>
that&#39;s fairly obtuse and it doesn&#39;t permit shrinking.<br>
<br>
So perhaps as above with a &quot;unsigned new_width0&quot; parameter?<br></blockquote><div><br></div></div>I had in mind that width0 would be ~0, but I guess that&#39;s not nice. What about this?<br><br>void redefine_user_buffer(<br>



        struct pipe_context*,<br>        struct pipe_resource*,<br>        unsigned offset,<br>        unsigned size);<br><br>and new width0 would implicitly be offset+size;<br><br>Marek<br>