[Mesa-dev] [PATCH 3/3] i965: Flag ARGB8888 renderbuffers as sRGB capable and support it.

Kenneth Graunke kenneth at whitecape.org
Tue Jul 31 22:25:31 PDT 2012


On 07/31/2012 06:04 PM, Eric Anholt wrote:
> Fixes rendering in l4d2, which assumes sRGB capability without asking.  We
> could convince the app to ask for sRGB, except that we don't expose visuals
> with sRGB currently.  This gives the app the ability to choose sRGB rendering
> on the typical visual, without having to coordinate with the layer of software
> that's choosing the visual.
> ---
>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c  |    8 ++++++++
>  src/mesa/drivers/dri/i965/gen7_wm_surface_state.c |    8 ++++++++
>  src/mesa/drivers/dri/intel/intel_screen.c         |   11 ++++++++++-
>  3 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index 0744cc0..1b1b513 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -1118,6 +1118,14 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
>        else
>  	 format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
>        break;
> +
> +   case MESA_FORMAT_ARGB8888:
> +      if (fb->Visual.sRGBCapable && ctx->Color.sRGBEnabled)
> +	 format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB;
> +      else
> +	 format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
> +      break;
> +
>     default:
>        format = brw->render_target_format[rb_format];
>        if (unlikely(!brw->format_supported_as_render_target[rb_format])) {
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> index 4c127ab..26fc24f 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> @@ -493,6 +493,14 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
>        else
>  	 surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
>        break;
> +
> +   case MESA_FORMAT_ARGB8888:
> +      if (fb->Visual.sRGBCapable && ctx->Color.sRGBEnabled)
> +	 surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB;
> +      else
> +	 surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
> +      break;
> +
>     default:
>        assert(brw_render_target_supported(intel, rb));
>        surf->ss0.surface_format = brw->render_target_format[rb_format];
> diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
> index e8a4ad1..49e0fb5 100644
> --- a/src/mesa/drivers/dri/intel/intel_screen.c
> +++ b/src/mesa/drivers/dri/intel/intel_screen.c
> @@ -567,8 +567,17 @@ intelCreateBuffer(__DRIscreen * driScrnPriv,
>  	 rgbFormat = MESA_FORMAT_RGB565;
>        else if (mesaVis->alphaBits == 0)
>  	 rgbFormat = MESA_FORMAT_XRGB8888;
> -      else
> +      else {
> +         /* Allow sRGB rendering to this window, even without the app having
> +          * requested an sRGB visual.  Given that it's just a matter of
> +          * flipping to MESA_FORMAT_SARGB8 when setting up the renderbuffer,
> +          * there's little reason not to allow it.
> +          *
> +          * Otherwise, we'd have to make apps specifically request sRGB visuals and 
> +          */

You should probably finish your thought here.  Otherwise, this seems
sensible.

Patches 2 and 3 are:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

It'd be nice to see acks from some other folks though.

> +         fb->Visual.sRGBCapable = true;
>  	 rgbFormat = MESA_FORMAT_ARGB8888;
> +      }
>  
>        /* setup the hardware-based renderbuffers */
>        rb = intel_create_renderbuffer(rgbFormat);


More information about the mesa-dev mailing list