On 10/25/2013 03:26 PM, Marek Olšák wrote: [snip] >> At least for Ivybridge, I think I want this software path 100% of the >> time. We may want to remove the stall on Haswell as a later optimization. > > I'd like to have a dedicated flag for this fallback like we have > Const.PrimitiveRestartInSoftware, in case we need to implement the > query for something else.
Sure, that seems reasonable. I'll send out a proposed patch and CC you. >> It sounds like for Gallium, you already have a decent GPU-only solution. >> I tried to follow that code to understand how it works, and got lost >> after jumping through around 5 files...which is probably just my poor >> understanding of the Gallium architecture. > > Gallium doesn't do anything, the interface is pretty much the same as > the vbo one. > > On the hardware side, there are 4 counters containing the number of > bytes written to each TFB buffer. If TFB is started, the counters are > set to 0. Everytime TFB is ended or paused, the counters are stored > for each buffer in memory. When resuming TFB, the counters are simply > loaded from memory. > > When we have to do DrawTransformFeedback, we copy the value of the > counter from memory to a special draw register. Since the value is in > bytes, we also have to set the TFB buffer stride to another special > draw register. That's all. The hardware then calculates count = > bytes/stride before drawing. Oh, interesting! I would have expected it to count in vertices, but bytes - that's pretty clever. If the units were the same on i965, I would've definitely done it that way...it makes a lot of sense. [snip] >> I hadn't thought about non-VBO vertex uploads. What does Gallium do in >> that case? Has it just been broken this whole time? > > Yes, it has, I completely forgot about it. :( > >> >> I guess I figured drivers would either implement this hook, or do the >> tfb_vertcount approach, but not both. Maybe that's a bad assumption. > > For vertex uploads and vertex fetch fallbacks (where we translate and > align vertex buffers to what a gallium driver supports - > util/u_vbuf.c), we can use a query like the one you want to add. > However, gallium drivers should use the tfb_vertcount approach (AKA > pipe_draw_info::count_from_stream_output) whenever they see it's not > NULL. Since most Gallium hardware drivers will never see non-VBO > vertex data or an unsupported vertex format, it's the only approach > they have to implement. > > Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev