gallium/targets: Haiku softpipe, perform better framebuffer validation
authorAlexander von Gluck IV <kallisti5@unixzen.com>
Mon, 25 Aug 2014 14:32:42 +0000 (14:32 +0000)
committerAlexander von Gluck IV <kallisti5@unixzen.com>
Fri, 29 Aug 2014 01:27:26 +0000 (21:27 -0400)
* Check for back left attachment as well
* Set and act on pipe format none

Ack'ed by Emil Velikov <emil.l.velikov@gmail.com>

src/gallium/targets/haiku-softpipe/GalliumFramebuffer.cpp

index 84c8bd2baef0c12aff26217fd1978a01ab24fc15..d6bfdb41b84590650170e1a0eef6527def46a64b 100644 (file)
@@ -100,8 +100,10 @@ hgl_framebuffer_validate(struct st_context_iface* stctx,
        
                        switch(statts[i]) {
                                case ST_ATTACHMENT_FRONT_LEFT:
+                               case ST_ATTACHMENT_BACK_LEFT:
                                        format = context->stVisual->color_format;
-                                       bind = PIPE_BIND_RENDER_TARGET;
+                                       bind = PIPE_BIND_DISPLAY_TARGET
+                                               | PIPE_BIND_RENDER_TARGET;
                                        break;
                                case ST_ATTACHMENT_DEPTH_STENCIL:
                                        format = context->stVisual->depth_stencil_format;
@@ -112,14 +114,18 @@ hgl_framebuffer_validate(struct st_context_iface* stctx,
                                        bind = PIPE_BIND_RENDER_TARGET;
                                        break;
                                default:
-                                       ERROR("%s: Unexpected attachment type!\n", __func__);
+                                       format = PIPE_FORMAT_NONE;
+                                       break;
                        }
-                       templat.format = format;
-                       templat.bind = bind;
 
-                       struct pipe_screen* screen = context->manager->screen;
-                       context->textures[i] = screen->resource_create(screen, &templat);
-                       out[i] = context->textures[i];
+                       if (format != PIPE_FORMAT_NONE) {
+                               templat.format = format;
+                               templat.bind = bind;
+
+                               struct pipe_screen* screen = context->manager->screen;
+                               context->textures[i] = screen->resource_create(screen, &templat);
+                               out[i] = context->textures[i];
+                       }
                }
        }