From 44902ed1fa84525fbb959dc22357cb42214c185b Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Tue, 24 Nov 2015 17:01:03 +0100 Subject: [PATCH] i965/meta-fast-clear: Disable GL_FRAMEBUFFER_SRGB during clear Adds MESA_META_FRAMEBUFFER_SRGB to the meta save state so that GL_FRAMEBUFFER_SRGB will be disabled when performing the fast clear. That way the render surface state will be programmed with the linear equivalent format during the clear. This is important for Gen9 because the SRGB formats are not marked as losslessly compressible so in theory they aren't support for fast clears. It shouldn't make any difference whether GL_FRAMEBUFFER_SRGB is enabled for the fast clear operation because the color is not actually written to the framebuffer so there is no chance for the hardware to apply the SRGB conversion on it anyway. Reviewed-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_meta_fast_clear.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 cf0e56b5244..a8b16b6d79e 100644 --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c @@ -505,8 +505,21 @@ fast_clear_attachments(struct brw_context *brw, uint32_t fast_clear_buffers, struct rect fast_clear_rect) { + struct gl_context *ctx = &brw->ctx; + const bool srgb_enabled = ctx->Color.sRGBEnabled; + assert(brw->gen >= 9); + /* Make sure the GL_FRAMEBUFFER_SRGB is disabled during fast clear so that + * the surface state will always be uploaded with a linear buffer. SRGB + * buffers are not supported on Gen9 because they are not marked as + * losslessly compressible. This shouldn't matter for the fast clear + * because the color is not written to the framebuffer yet so the hardware + * doesn't need to do any SRGB conversion. + */ + if (srgb_enabled) + _mesa_set_framebuffer_srgb(ctx, GL_FALSE); + brw_bind_rep_write_shader(brw, (float *) fast_clear_color); /* SKL+ also has a resolve mode for compressed render targets and thus more @@ -533,6 +546,9 @@ fast_clear_attachments(struct brw_context *brw, } set_fast_clear_op(brw, 0); + + if (srgb_enabled) + _mesa_set_framebuffer_srgb(ctx, GL_TRUE); } bool -- 2.30.2