replace _mesa_logbase2 with util_logbase2
[mesa.git] / src / mesa / state_tracker / st_cb_blit.c
index cfcf3f7aae0ad1897f61819073d715e693c3e2d2..73068b795f6879060ddba65394992fde5c8f7243 100644 (file)
@@ -30,7 +30,7 @@
   *   Brian Paul
   */
 
-#include "main/imports.h"
+#include "util/imports.h"
 #include "main/image.h"
 #include "main/macros.h"
 
 #include "st_cb_fbo.h"
 #include "st_manager.h"
 #include "st_scissor.h"
+#include "st_util.h"
 
-#include "util/u_format.h"
-
-static void
-st_adjust_blit_for_srgb(struct pipe_blit_info *blit, bool framebuffer_srgb)
-{
-   if (!framebuffer_srgb) {
-      blit->dst.format = util_format_linear(blit->dst.format);
-      blit->src.format = util_format_linear(blit->src.format);
-   }
-}
+#include "util/format/u_format.h"
 
 static void
 st_BlitFramebuffer(struct gl_context *ctx,
@@ -183,78 +175,65 @@ st_BlitFramebuffer(struct gl_context *ctx,
    if (mask & GL_COLOR_BUFFER_BIT) {
       struct gl_renderbuffer_attachment *srcAtt =
          &readFB->Attachment[readFB->_ColorReadBufferIndex];
+      GLuint i;
 
       blit.mask = PIPE_MASK_RGBA;
 
       if (srcAtt->Type == GL_TEXTURE) {
          struct st_texture_object *srcObj = st_texture_object(srcAtt->Texture);
-         GLuint i;
 
          if (!srcObj || !srcObj->pt) {
             return;
          }
 
-         for (i = 0; i < drawFB->_NumColorDrawBuffers; i++) {
-            struct st_renderbuffer *dstRb =
-               st_renderbuffer(drawFB->_ColorDrawBuffers[i]);
-
-            if (dstRb) {
-               struct pipe_surface *dstSurf = dstRb->surface;
-
-               if (dstSurf) {
-                  blit.dst.resource = dstSurf->texture;
-                  blit.dst.level = dstSurf->u.tex.level;
-                  blit.dst.box.z = dstSurf->u.tex.first_layer;
-                  blit.dst.format = dstSurf->format;
-
-                  blit.src.resource = srcObj->pt;
-                  blit.src.level = srcAtt->TextureLevel;
-                  blit.src.box.z = srcAtt->Zoffset + srcAtt->CubeMapFace;
-                  blit.src.format = srcObj->pt->format;
-
-                  st_adjust_blit_for_srgb(&blit, ctx->Color.sRGBEnabled);
+         blit.src.resource = srcObj->pt;
+         blit.src.level = srcAtt->TextureLevel;
+         blit.src.box.z = srcAtt->Zoffset + srcAtt->CubeMapFace;
+         blit.src.format = srcObj->pt->format;
 
-                  st->pipe->blit(st->pipe, &blit);
-                  dstRb->defined = true; /* front buffer tracking */
-               }
-            }
-         }
+         if (!ctx->Color.sRGBEnabled)
+            blit.src.format = util_format_linear(blit.src.format);
       }
       else {
          struct st_renderbuffer *srcRb =
             st_renderbuffer(readFB->_ColorReadBuffer);
          struct pipe_surface *srcSurf;
-         GLuint i;
 
-         if (!srcRb || !srcRb->surface) {
+         if (!srcRb)
+            return;
+
+         st_update_renderbuffer_surface(st, srcRb);
+
+         if (!srcRb->surface)
             return;
-         }
 
          srcSurf = srcRb->surface;
 
-         for (i = 0; i < drawFB->_NumColorDrawBuffers; i++) {
-            struct st_renderbuffer *dstRb =
-               st_renderbuffer(drawFB->_ColorDrawBuffers[i]);
+         blit.src.resource = srcSurf->texture;
+         blit.src.level = srcSurf->u.tex.level;
+         blit.src.box.z = srcSurf->u.tex.first_layer;
+         blit.src.format = srcSurf->format;
+      }
+
+      for (i = 0; i < drawFB->_NumColorDrawBuffers; i++) {
+         struct st_renderbuffer *dstRb =
+            st_renderbuffer(drawFB->_ColorDrawBuffers[i]);
 
-            if (dstRb) {
-               struct pipe_surface *dstSurf = dstRb->surface;
+         if (dstRb) {
+            struct pipe_surface *dstSurf;
 
-               if (dstSurf) {
-                  blit.dst.resource = dstSurf->texture;
-                  blit.dst.level = dstSurf->u.tex.level;
-                  blit.dst.box.z = dstSurf->u.tex.first_layer;
-                  blit.dst.format = dstSurf->format;
+            st_update_renderbuffer_surface(st, dstRb);
 
-                  blit.src.resource = srcSurf->texture;
-                  blit.src.level = srcSurf->u.tex.level;
-                  blit.src.box.z = srcSurf->u.tex.first_layer;
-                  blit.src.format = srcSurf->format;
+            dstSurf = dstRb->surface;
 
-                  st_adjust_blit_for_srgb(&blit, ctx->Color.sRGBEnabled);
+            if (dstSurf) {
+               blit.dst.resource = dstSurf->texture;
+               blit.dst.level = dstSurf->u.tex.level;
+               blit.dst.box.z = dstSurf->u.tex.first_layer;
+               blit.dst.format = dstSurf->format;
 
-                  st->pipe->blit(st->pipe, &blit);
-                  dstRb->defined = true; /* front buffer tracking */
-               }
+               st->pipe->blit(st->pipe, &blit);
+               dstRb->defined = true; /* front buffer tracking */
             }
          }
       }