On Thursday, April 21, 2016 10:00:57 AM PDT Iago Toral wrote: > On Wed, 2016-04-20 at 18:38 -0700, Kenneth Graunke wrote: > > In commit cda886a4851ab767fba40e8474d6fa8190347e4f, Neil made us stop > > advertising RGBX formats on Gen9+, as the hardware apparently no longer > > has working fast clear support for those formats. Instead, we just > > fall back to RGBA formats, and use SCS to override alpha to 1.0. > > > > This is fine, but had one unintended side effect: it made us fall back > > to slow clears when the color mask disables alpha. Normally, we ignore > > the color mask for non-existent channels. This includes alpha for XRGB > > formats as writing garbage to the X channel is harmless. But, now that > > we use RGBA, we think there's a real alpha channel, and can't do the > > optimization. > > > > To hack around this, check if _BaseFormat is GL_RGB and ignore alpha. > > > > Improves WebGL Aquarium performance on Skylake GT3e by about 50% > > by letting it use repclears instead of slow clears. > > > > Cc: Ben Widawsky <b...@bwidawsk.net> > > Cc: Topi Pohjolainen <topi.pohjolai...@intel.com> > > Cc: mesa-sta...@lists.freedesktop.org > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > > --- > > src/mesa/drivers/dri/i965/brw_meta_fast_clear.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c b/src/mesa/ drivers/dri/i965/brw_meta_fast_clear.c > > index 1fb5dc8..5d89294 100644 > > --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c > > +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c > > @@ -645,6 +645,7 @@ brw_meta_fast_clear(struct brw_context *brw, struct gl_framebuffer *fb, > > GLubyte *color_mask = ctx->Color.ColorMask[buf]; > > for (int i = 0; i < 4; i++) { > > if (_mesa_format_has_color_component(irb->mt->format, i) && > > + !(i == 3 && irb->Base.Base._BaseFormat == GL_RGB) && > > I was wondering if we could generalize the fix so we just ignore any > channels that are not present in the base format. Something like this: > > i <= _mesa_base_format_component_count(irb->Base.Base._BaseFormat) > > Basically, we do the same check we do against the mesa format, but with > the base format. > > What do you think? > > Either way, > Reviewed-by: Iago Toral Quiroga <ito...@igalia.com>
That seems like a good idea - I figured there had to be a function like _mesa_base_format_component_count(), but I didn't find it when writing the patch. We'd need a little more code - _mesa_base_format_component_count() can return -1 in some cases, so we'd need to override it to 4. It's doable. As far as I know, the only cases where this will be useful is XRGB and maybe luminance/intensity. For luminance/intensity, I think the right solution is to use RED formats. So, for all practical purposes, this should be good enough. Also, Topi's just about on the verge of replacing the meta fast clear code with BLORP clears. So this is all going away - I mostly wanted a quick fix that could be backported to stable and the ChromeOS tree. So I think I'll go with the patch as is, as it's tested, and we can try and do this more generally in the new BLORP framework. Thanks!
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev