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 
+          */
+         fb->Visual.sRGBCapable = true;
         rgbFormat = MESA_FORMAT_ARGB8888;
+      }
 
       /* setup the hardware-based renderbuffers */
       rb = intel_create_renderbuffer(rgbFormat);
-- 
1.7.10.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to