summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Charifi <guillaume.charifi@sfr.fr>2018-02-20 14:30:06 +0100
committerMarek Olšák <marek.olsak@amd.com>2018-03-14 14:46:51 -0400
commit388ed470811e2def86deed723a9e88eda8cef14f (patch)
treebce3da78788b26bb802238be6d856dbe71406b60
parent7dd261ac50f2c3ba9b58d3dfd78cfc2938c82c9d (diff)
st/mesa: Factorize duplicate code in st_BlitFramebuffer()
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/mesa/state_tracker/st_cb_blit.c76
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 8aa849b3fc..564ad66665 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 */
}
}
}