diff options
author | marha <marha@users.sourceforge.net> | 2013-01-17 09:22:05 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-01-17 09:22:05 +0100 |
commit | 4fc6b34d1c14cc61f553ca59264d0909656933f3 (patch) | |
tree | b6dd33c595a9eb22ecb2f2f2630abfa12772d6c5 /mesalib/src/mesa/state_tracker/st_cb_blit.c | |
parent | 811d1bcf6d61ea49551abdd7f2294c5af2776913 (diff) | |
download | vcxsrv-4fc6b34d1c14cc61f553ca59264d0909656933f3.tar.gz vcxsrv-4fc6b34d1c14cc61f553ca59264d0909656933f3.tar.bz2 vcxsrv-4fc6b34d1c14cc61f553ca59264d0909656933f3.zip |
fontconfig libxcb mesa xkbcomp git update 17 jan 2013
fontconfig: 671bcb34e23ed03b1f564af35560db81f8b12b96
libxcb: 0dd8f8d26a758bc385e79d9239bf6ef2e3d7bf13
mesa: 56c01d81094795286828ecb83713e043695e905a
xkbcomp: ed1b90216e59e6b3ac6ac5fd2faca8e056c76caa
Diffstat (limited to 'mesalib/src/mesa/state_tracker/st_cb_blit.c')
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_cb_blit.c | 90 |
1 files changed, 56 insertions, 34 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_cb_blit.c b/mesalib/src/mesa/state_tracker/st_cb_blit.c index 603c8d4b4..ddef2707a 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_blit.c +++ b/mesalib/src/mesa/state_tracker/st_cb_blit.c @@ -184,48 +184,70 @@ st_BlitFramebuffer(struct gl_context *ctx, blit.mask = PIPE_MASK_RGBA; if (srcAtt->Type == GL_TEXTURE) { - struct st_texture_object *srcObj = - st_texture_object(srcAtt->Texture); - struct st_renderbuffer *dstRb = - st_renderbuffer(drawFB->_ColorDrawBuffers[0]); - struct pipe_surface *dstSurf = dstRb->surface; - - assert(srcObj->pt); - if (!srcObj->pt) { + struct st_texture_object *srcObj = st_texture_object(srcAtt->Texture); + GLuint i; + + if (!srcObj || !srcObj->pt) { return; } - blit.dst.resource = dstSurf->texture; - blit.dst.level = dstSurf->u.tex.level; - blit.dst.box.z = dstSurf->u.tex.first_layer; - blit.dst.format = util_format_linear(dstSurf->format); + 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 = util_format_linear(srcObj->pt->format); + if (dstRb) { + struct pipe_surface *dstSurf = dstRb->surface; - st->pipe->blit(st->pipe, &blit); + 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 = util_format_linear(dstSurf->format); + + blit.src.resource = srcObj->pt; + blit.src.level = srcAtt->TextureLevel; + blit.src.box.z = srcAtt->Zoffset + srcAtt->CubeMapFace; + blit.src.format = util_format_linear(srcObj->pt->format); + + st->pipe->blit(st->pipe, &blit); + } + } + } } else { struct st_renderbuffer *srcRb = st_renderbuffer(readFB->_ColorReadBuffer); - struct st_renderbuffer *dstRb = - st_renderbuffer(drawFB->_ColorDrawBuffers[0]); - struct pipe_surface *srcSurf = srcRb->surface; - struct pipe_surface *dstSurf = dstRb->surface; + struct pipe_surface *srcSurf; + GLuint i; - blit.dst.resource = dstSurf->texture; - blit.dst.level = dstSurf->u.tex.level; - blit.dst.box.z = dstSurf->u.tex.first_layer; - blit.dst.format = util_format_linear(dstSurf->format); + if (!srcRb || !srcRb->surface) { + return; + } - blit.src.resource = srcSurf->texture; - blit.src.level = srcSurf->u.tex.level; - blit.src.box.z = srcSurf->u.tex.first_layer; - blit.src.format = util_format_linear(srcSurf->format); + srcSurf = srcRb->surface; - st->pipe->blit(st->pipe, &blit); + 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 = util_format_linear(dstSurf->format); + + blit.src.resource = srcSurf->texture; + blit.src.level = srcSurf->u.tex.level; + blit.src.box.z = srcSurf->u.tex.first_layer; + blit.src.format = util_format_linear(srcSurf->format); + + st->pipe->blit(st->pipe, &blit); + } + } + } } } @@ -243,16 +265,16 @@ st_BlitFramebuffer(struct gl_context *ctx, &drawFB->Attachment[BUFFER_STENCIL]; struct st_renderbuffer *srcDepthRb = - st_renderbuffer(readFB->Attachment[BUFFER_DEPTH].Renderbuffer); + st_renderbuffer(srcDepth->Renderbuffer); struct st_renderbuffer *dstDepthRb = - st_renderbuffer(drawFB->Attachment[BUFFER_DEPTH].Renderbuffer); + st_renderbuffer(dstDepth->Renderbuffer); struct pipe_surface *dstDepthSurf = dstDepthRb ? dstDepthRb->surface : NULL; struct st_renderbuffer *srcStencilRb = - st_renderbuffer(readFB->Attachment[BUFFER_STENCIL].Renderbuffer); + st_renderbuffer(srcStencil->Renderbuffer); struct st_renderbuffer *dstStencilRb = - st_renderbuffer(drawFB->Attachment[BUFFER_STENCIL].Renderbuffer); + st_renderbuffer(dstStencil->Renderbuffer); struct pipe_surface *dstStencilSurf = dstStencilRb ? dstStencilRb->surface : NULL; |