On 05/11/2012 01:37 PM, Paul Berry wrote: > On 11 May 2012 12:40, Chad Versace <chad.vers...@linux.intel.com > <mailto:chad.vers...@linux.intel.com>> wrote: > > On 05/10/2012 11:21 AM, Paul Berry wrote: > > This patch enables MSAA for Gen6, by modifying intel_mipmap_tree to > > understand multisampled buffers, adapting the rendering pipeline setup > > to enable multisampled rendering, and adding multisample resolve > > operations to brw_blorp_blit.cpp. Some preparation work is also > > included for Gen7, but it is not yet enabled. > > > > MSAA support is still fairly preliminary. In particular, the > > following are not yet supported: > > - Fully general blits between MSAA and non-MSAA buffers. > > - Formats other than RGBA8, DEPTH24, and STENCIL8. > > - Centroid interpolation. > > - Coverage parameters (glSampleCoverage, GL_SAMPLE_ALPHA_TO_COVERAGE, > > GL_SAMPLE_ALPHA_TO_ONE, GL_SAMPLE_COVERAGE, GL_SAMPLE_COVERAGE_VALUE, > > GL_SAMPLE_COVERAGE_INVERT). > > > > Fixes piglit tests "EXT_framebuffer_multisample/accuracy" on > > i965/Gen6. > > > > v2: > > - In intel_alloc_renderbuffer_storage(), quantize the requested number > > of samples to the next higher sample count supported by the > > hardware. This ensures that a query of GL_SAMPLES will return the > > correct value. It also ensures that MSAA is fully disabled on Gen7 > > for now (since Gen7 MSAA support doesn't work yet). > > - When reading from a non-MSAA surface, ensure that s_is_zero is true > > so that we won't try to read from a nonexistent sample. > > --- > > src/mesa/drivers/dri/i965/Makefile.sources | 1 + > > src/mesa/drivers/dri/i965/brw_blorp.cpp | 10 +- > > src/mesa/drivers/dri/i965/brw_blorp.h | 30 ++- > > src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 332 > +++++++++++++++++--- > > src/mesa/drivers/dri/i965/brw_context.h | 8 + > > src/mesa/drivers/dri/i965/brw_defines.h | 7 + > > src/mesa/drivers/dri/i965/brw_misc_state.c | 33 +-- > > src/mesa/drivers/dri/i965/brw_state.h | 4 + > > src/mesa/drivers/dri/i965/brw_state_upload.c | 2 + > > src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 16 +- > > src/mesa/drivers/dri/i965/gen6_blorp.cpp | 44 ++-- > > src/mesa/drivers/dri/i965/gen6_multisample_state.c | 102 ++++++ > > src/mesa/drivers/dri/i965/gen6_sf_state.c | 15 +- > > src/mesa/drivers/dri/i965/gen6_wm_state.c | 12 + > > src/mesa/drivers/dri/i965/gen7_blorp.cpp | 20 +- > > src/mesa/drivers/dri/i965/gen7_sf_state.c | 14 +- > > src/mesa/drivers/dri/i965/gen7_wm_state.c | 18 +- > > src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 16 + > > src/mesa/drivers/dri/intel/intel_fbo.c | 31 ++- > > src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 52 +++- > > src/mesa/drivers/dri/intel/intel_mipmap_tree.h | 10 +- > > src/mesa/drivers/dri/intel/intel_tex_image.c | 3 +- > > src/mesa/drivers/dri/intel/intel_tex_validate.c | 3 +- > > 23 files changed, 662 insertions(+), 121 deletions(-) > > create mode 100644 src/mesa/drivers/dri/i965/gen6_multisample_state.c > > I tried reviewing this one, but the patch does so much at once that > I quickly got lost. And, anyway, I don't understand brw shaders. > > Do you intend to push this today regardless of receiving review? > I see that you have gen7 patches queued up dependent on this series. > > > Unfortunately, I was unable to find a way to break this patch and the > previous one into easily digestible incremental chunks. I developed them > incrementally, but you wouldn't want to see my development increments--they > were so full of missteps, bugs, reorganizations, and ground-up rewrites that > reviewing them would be a complete nightmare. When I cleaned up my > development branch, I had to squash together a lot of patches to avoid > introducing transient bugs and to keep related code together. Squashing > those things together resulted in the two mega-patches you see in this > series. I'm not proud of how big the patches are--it was the best I could do > considering how much of the rendering pipeline MSAA touches, and how much > work we have to go to in order to do MSAA blits. > > To compound the problem, the "blorp" code largely deals with creating a > custom WM program using GEN assembly. Despite our best efforts, this sort of > code is among the most difficult parts of the i965 driver to follow--witness > the complexity of the Gen4/5 clip, sf, and gs programs, which most of us have > had the good fortune not to be able to avoid during our time with Mesa (I had > to understand the clip program because I thought there was a bug in it back > when I was implementing clip distance, but it turned out to be a wild goose > chase). At the moment I think Eric and I (and possibly Ken) are the only > regular Mesa contributors who really understand a lot of the subtleties of > GEN assembly programming. > > The next series is, fortunately, much more incremental than this series > turned out to be, since it's just adapting the Gen6 blorp/msaa work for Gen7 > rather than building it from scratch. Unfortunately, anyone who wants to > review the work in the next series is going to have to understand what's > going on in this series, since the one builds on the other. > > I'm open to suggestions about how to proceed. Here are some possibilities: > > a) Since the series adds a significant chunk of functionality, doesn't > regress any piglit tests, and is a necessary prerequisite for the next > series, go ahead and push it without review. Disadvantage: sidestepping the > review process like this is a bad trend to set, and it makes us lose out on > the opportunity to find bugs. Also, since these patches introduce a new > component to the driver (the "blorp" component) there's a danger that if > nobody reviews them, the new component will turn into a "code ghetto" that > nobody feels comfortable working in except for me. Chad, I remember how glad > you were when I started looking at HiZ code so that you wouldn't be the only > one who understood it anymore. I don't want to create a parallel situation > with MSAA. > > b) Same as a), but in addition I spend some one-on-one time walking through > the code with anyone who is interested, so that I'm not the only person who > understands how it works. > > c) Don't push the code yet, and instead have a code review meeting on Monday. > Hopefully the code will be a lot easier to follow in a meeting format, where > I can answer questions on the fly. Advantage: we get the benefits of code > review, and those present in the meeting will hopefully be able to review the > next patch series. Plus, hopefully people will leave the meeting with a > better understanding of GEN assembly programming than they went in with. > Disadvantage: no transparency to those outside of Intel. If we decide to go > with this approach, I really want to insist that we have the meeting on > Monday, so that we don't delay these patches any longer than we have to. > > d) I spend a day or two breaking down the last two patches in this series > into a series of smaller increments that people can review. Advantage: the > review happens on the mailing list. Disadvantage: splitting the code up into > smaller increments is really not going to make it any more comprehensible > than it is already; it will just make for a lot of small emails rather than a > few big emails. Also there's a risk of introducing temporary breakages > (which will interfere with later bisection attempts), not to mention the fact > that this will add further delay to getting this feature implemented. > > I'm sensitive to the benefits of good code review and I would like to have > people's "reviewed-by"s if possible. But I'm also sensitive to the fact that > we're extremely under the gun for this feature (MSAA was supposed to be a > required feature of GL 3.0, and we released GL 3.0 support without it). So I > don't want to introduce any more delays than necessary. > > My preference at the moment is for alternative b). I would also be ok with > alternative c) but I know that a lot of y'all really don't enjoy meetings :)
My short email was largely an attempt to evoke suggestion (b). I think that's the best approach. Hopefully I'm not the only one who signs up for the braindump. I think (c) is the ideal situation, but everyone is so crunched for time that it may be difficult to get consensus for such a meeting. I don't want you to waste your time with (d). Monday morning, I think we should poke Ken and Eric to see if they want a MSAA braindump and try to do it sameday. ---- Chad Versace chad.vers...@linux.intel.com _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev