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> > !color_mask[i]) { > perf_debug("Falling back to plain clear on %dx%d buffer because > of color mask\n", > irb->mt->logical_width0, irb->mt->logical_height0); _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev