Hi,

I plan to commit this series this weekend. I've made minor
improvements to u_vbuf and addressed all concerns, and I have tested
r300g and r600g, and made sure that softpipe and llvmpipe don't use
this code. Here are the updated patches (starting with the cso
commit):
http://cgit.freedesktop.org/~mareko/mesa/log/?h=st-mesa-user-buf

What's missing:

1) Some drivers should handle PIPE_BIND_VERTEX_BUFFER in
is_format_supported and the new CAPs too. I can't do it, because I
don't know what the drivers are capable of.

2) The radeonsi driver hasn't been adapted yet. I don't have LLVM 3.1
at the moment, therefore I can't even compile the driver. I'll try to
take look at it this weekend unless someone else beats me to it.

Marek


On Wed, Apr 11, 2012 at 5:38 PM, Marek Olšák <mar...@gmail.com> wrote:
> A couple of problems may arise with this:
>
> 1) r300g and r600g rely on what u_vbuf does, so other state trackers should 
> either use u_vbuf too or be very careful about how they setup vertex buffers 
> and vertex elements. Not every combination of states works and u_vbuf is good 
> at not letting through what doesn't.
>
> 2) Drivers should properly handle PIPE_BIND_VERTEX_BUFFER in 
> is_format_supported.
>
> 3) u_vbuf always and unconditionally uploads user vertex buffers if it's 
> active. For example, if you only don't support PIPE_FORMAT_R64G64B64A64_FLOAT 
> as a vertex format, but otherwise support user vertex buffers, then u_vbuf 
> gets installed into cso_context and takes control. Drivers using the Draw 
> module should expose all vertex formats, the user-vertex-buffer CAP, and not 
> expose the buffer-alignment-restriction CAPs in order to avoid u_vbuf kicking 
> in.
>
> 4) Drivers should not crash when receiving NULL vertex buffers via 
> set_vertex_buffers. Such buffer are always unused by the vertex element 
> state. The thing is one of the codepaths in u_vbuf is using the translate 
> module, which usually takes a new vertex buffer slot. If you receive this in 
> set_vertex_buffers: count=4, buffers={NULL, NULL, NULL, buffer}, it means the 
> last buffer probably comes from translate and the other 3 were originally 
> user buffers, which u_vbuf never lets through, so they end up being NULL.
>
> (2) must be fixed in some drivers, (3) can be fixed in u_vbuf if needed. I 
> prefer (4) to be fixed in drivers.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to