diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/state_tracker/st_cb_blit.c | 76 |
1 files changed, 26 insertions, 50 deletions
diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c index 8aa849b3fc0..564ad666655 100644 --- a/src/mesa/state_tracker/st_cb_blit.c +++ b/src/mesa/state_tracker/st_cb_blit.c @@ -174,53 +174,29 @@ 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]); + blit.src.resource = srcObj->pt; + blit.src.level = srcAtt->TextureLevel; + blit.src.box.z = srcAtt->Zoffset + srcAtt->CubeMapFace; + blit.src.format = srcObj->pt->format; - if (dstRb) { - struct pipe_surface *dstSurf; - - st_update_renderbuffer_surface(st, dstRb); - - 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; - - if (!ctx->Color.sRGBEnabled) - blit.src.format = util_format_linear(blit.src.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) return; @@ -232,31 +208,31 @@ st_BlitFramebuffer(struct gl_context *ctx, 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; + } - if (dstRb) { - struct pipe_surface *dstSurf; + for (i = 0; i < drawFB->_NumColorDrawBuffers; i++) { + struct st_renderbuffer *dstRb = + st_renderbuffer(drawFB->_ColorDrawBuffers[i]); - st_update_renderbuffer_surface(st, dstRb); + if (dstRb) { + struct pipe_surface *dstSurf; - dstSurf = dstRb->surface; + st_update_renderbuffer_surface(st, dstRb); - 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; + dstSurf = dstRb->surface; - 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; + 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 */ } } } |