st/mesa: call update_renderbuffer_surface for sRGB renderbuffers, too
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 20 Jul 2012 18:57:45 +0000 (20:57 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sat, 28 Jul 2012 11:14:30 +0000 (13:14 +0200)
sRGBEnabled should affect both textures and renderbuffers, so we need
to check/update the pipe_surface format for both.

Fixes, for instance, rendering appearing too bright in wine applications
using sRGB multisample renderbuffers.

NOTE: This is a candidate for the 8.0 branch.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/state_tracker/st_atom_framebuffer.c

index 6f94a47c6b5e33eb0689b555fbfd3d700897d090..a10dbfbd0ec2138ae6327b2f1a708eb40de9a95d 100644 (file)
@@ -53,7 +53,7 @@ update_renderbuffer_surface(struct st_context *st,
                             struct st_renderbuffer *strb)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_resource *resource = strb->rtt->pt;
+   struct pipe_resource *resource = strb->rtt ? strb->rtt->pt : strb->texture;
    int rtt_width = strb->Base.Width;
    int rtt_height = strb->Base.Height;
    enum pipe_format format = st->ctx->Color.sRGBEnabled ? resource->format : util_format_linear(resource->format);
@@ -121,7 +121,8 @@ update_framebuffer_state( struct st_context *st )
 
       if (strb) {
          /*printf("--------- framebuffer surface rtt %p\n", strb->rtt);*/
-         if (strb->rtt) {
+         if (strb->rtt ||
+             (strb->texture && util_format_is_srgb(strb->texture->format))) {
             /* rendering to a GL texture, may have to update surface */
             update_renderbuffer_surface(st, strb);
          }