Skip to content
Snippets Groups Projects
Commit 8e33c96e authored by Kenneth Graunke's avatar Kenneth Graunke Committed by Emil Velikov
Browse files

i965: Fix clear code for ignoring colormask for XRGB formats on Gen9+.


In commit cda886a4, 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: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ben Widawsky's avatarBen Widawsky <ben@bwidawsk.net>
Reviewed-by: default avatarTopi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: default avatarIago Toral Quiroga <itoral@igalia.com>
(cherry picked from commit 73b01e27)
parent c15dcb1a
No related branches found
Tags mesa-18.0.0-rc3
No related merge requests found
...@@ -651,6 +651,7 @@ brw_meta_fast_clear(struct brw_context *brw, struct gl_framebuffer *fb, ...@@ -651,6 +651,7 @@ brw_meta_fast_clear(struct brw_context *brw, struct gl_framebuffer *fb,
GLubyte *color_mask = ctx->Color.ColorMask[buf]; GLubyte *color_mask = ctx->Color.ColorMask[buf];
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (_mesa_format_has_color_component(irb->mt->format, i) && if (_mesa_format_has_color_component(irb->mt->format, i) &&
!(i == 3 && irb->Base.Base._BaseFormat == GL_RGB) &&
!color_mask[i]) { !color_mask[i]) {
perf_debug("Falling back to plain clear on %dx%d buffer because of color mask\n", perf_debug("Falling back to plain clear on %dx%d buffer because of color mask\n",
irb->mt->logical_width0, irb->mt->logical_height0); irb->mt->logical_width0, irb->mt->logical_height0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment