[Mesa-dev] [PATCH] DD: Refactor BlitFramebuffer.

Laura Ekstrand laura at jlekstrand.net
Mon Feb 2 10:25:01 PST 2015


I broke out some of the whitespace:
http://cgit.freedesktop.org/~ldeks/mesa/commit/?h=adsa-framebuffers&id=ebe159fa9a6b1d98d63862bf89044028e67a4377
.

Here is the (hopefully cleaner) BlitFramebuffers refactor:
http://cgit.freedesktop.org/~ldeks/mesa/commit/?h=adsa-framebuffers&id=fc85665eaa9aff824051333848540958dd07cbd0

Laura

On Mon, Feb 2, 2015 at 7:52 AM, Brian Paul <brianp at vmware.com> wrote:

> I'd have put the swrast whitespace changes in a separate commit, but it's
> not a big deal.
>
> Reviewed-by: Brian Paul <brianp at vmware.com>
>
>
>
> On 01/30/2015 05:25 PM, Laura Ekstrand wrote:
>
>> In preparation for glBlitNamedFramebuffer, the DD table function
>> BlitFramebuffer needs to accept two arbitrary framebuffer objects rather
>> than assuming ctx->ReadBuffer and ctx->DrawBuffer.
>> ---
>>   src/mesa/drivers/common/meta.c                    |  3 +-
>>   src/mesa/drivers/common/meta.h                    |  4 +++
>>   src/mesa/drivers/common/meta_blit.c               | 32
>> +++++++++++------
>>   src/mesa/drivers/common/meta_copy_image.c         |  3 +-
>>   src/mesa/drivers/common/meta_tex_subimage.c       | 12 ++++---
>>   src/mesa/drivers/dri/i915/intel_fbo.c             | 14 ++++----
>>   src/mesa/drivers/dri/i965/brw_blorp_blit.cpp      | 15 ++++----
>>   src/mesa/drivers/dri/i965/brw_context.h           |  4 +++
>>   src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c | 10 +++---
>>   src/mesa/drivers/dri/i965/brw_meta_util.c         |  5 ++-
>>   src/mesa/drivers/dri/i965/brw_meta_util.h         |  2 ++
>>   src/mesa/drivers/dri/i965/intel_fbo.c             | 16 +++++----
>>   src/mesa/main/blit.c                              |  2 +-
>>   src/mesa/main/dd.h                                |  2 ++
>>   src/mesa/main/image.c                             | 14 ++++----
>>   src/mesa/main/image.h                             |  3 ++
>>   src/mesa/state_tracker/st_cb_blit.c               |  6 ++--
>>   src/mesa/swrast/s_blit.c                          | 43
>> ++++++++++++-----------
>>   src/mesa/swrast/s_copypix.c                       | 25 ++++++-------
>>   src/mesa/swrast/swrast.h                          | 18 ++++++----
>>   20 files changed, 140 insertions(+), 93 deletions(-)
>>
>> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/
>> meta.c
>> index 8b73cb9..bb00730 100644
>> --- a/src/mesa/drivers/common/meta.c
>> +++ b/src/mesa/drivers/common/meta.c
>> @@ -2793,7 +2793,8 @@ copytexsubimage_using_blit_framebuffer(struct
>> gl_context *ctx, GLuint dims,
>>       * are too strict for CopyTexImage.  We know meta will be fine with
>> format
>>       * changes.
>>       */
>> -   mask = _mesa_meta_BlitFramebuffer(ctx, x, y,
>> +   mask = _mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer,
>> ctx->DrawBuffer,
>> +                                     x, y,
>>                                        x + width, y + height,
>>                                        xoffset, yoffset,
>>                                        xoffset + width, yoffset + height,
>> diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/
>> meta.h
>> index 3b9e05e..e7d894d 100644
>> --- a/src/mesa/drivers/common/meta.h
>> +++ b/src/mesa/drivers/common/meta.h
>> @@ -475,12 +475,16 @@ _mesa_meta_setup_sampler(struct gl_context *ctx,
>>
>>   extern GLbitfield
>>   _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
>> +                           const struct gl_framebuffer *readFb,
>> +                           const struct gl_framebuffer *drawFb,
>>                              GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                              GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                              GLbitfield mask, GLenum filter);
>>
>>   extern void
>>   _mesa_meta_and_swrast_BlitFramebuffer(struct gl_context *ctx,
>> +                                      struct gl_framebuffer *readFb,
>> +                                      struct gl_framebuffer *drawFb,
>>                                         GLint srcX0, GLint srcY0,
>>                                         GLint srcX1, GLint srcY1,
>>                                         GLint dstX0, GLint dstY0,
>> diff --git a/src/mesa/drivers/common/meta_blit.c
>> b/src/mesa/drivers/common/meta_blit.c
>> index 4212d94..3406be1 100644
>> --- a/src/mesa/drivers/common/meta_blit.c
>> +++ b/src/mesa/drivers/common/meta_blit.c
>> @@ -232,6 +232,7 @@ setup_glsl_msaa_blit_scaled_shader(struct gl_context
>> *ctx,
>>   static void
>>   setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>>                               struct blit_state *blit,
>> +                            const struct gl_framebuffer *drawFb,
>>                               struct gl_renderbuffer *src_rb,
>>                               GLenum target)
>>   {
>> @@ -267,7 +268,7 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>>      /* Update the assert if we plan to support more than 16X MSAA. */
>>      assert(shader_offset >= 0 && shader_offset <= 4);
>>
>> -   if (ctx->DrawBuffer->Visual.samples > 1) {
>> +   if (drawFb->Visual.samples > 1) {
>>         /* If you're calling meta_BlitFramebuffer with the destination
>>          * multisampled, this is the only path that will work -- swrast
>> and
>>          * CopyTexImage won't work on it either.
>> @@ -508,6 +509,7 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>>   static void
>>   setup_glsl_blit_framebuffer(struct gl_context *ctx,
>>                               struct blit_state *blit,
>> +                            const struct gl_framebuffer *drawFb,
>>                               struct gl_renderbuffer *src_rb,
>>                               GLenum target, GLenum filter,
>>                               bool is_scaled_blit,
>> @@ -530,7 +532,7 @@ setup_glsl_blit_framebuffer(struct gl_context *ctx,
>>      if (is_target_multisample && is_filter_scaled_resolve &&
>> is_scaled_blit) {
>>         setup_glsl_msaa_blit_scaled_shader(ctx, blit, src_rb, target,
>> filter);
>>      } else if (is_target_multisample) {
>> -      setup_glsl_msaa_blit_shader(ctx, blit, src_rb, target);
>> +      setup_glsl_msaa_blit_shader(ctx, blit, drawFb, src_rb, target);
>>      } else {
>>         _mesa_meta_setup_blit_shader(ctx, target, do_depth,
>>                                      do_depth ? &blit->shaders_with_depth
>> @@ -546,12 +548,13 @@ setup_glsl_blit_framebuffer(struct gl_context *ctx,
>>    */
>>   static bool
>>   blitframebuffer_texture(struct gl_context *ctx,
>> +                        const struct gl_framebuffer *readFb,
>> +                        const struct gl_framebuffer *drawFb,
>>                           GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                           GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                           GLenum filter, GLint flipX, GLint flipY,
>>                           GLboolean glsl_version, GLboolean do_depth)
>>   {
>> -   const struct gl_framebuffer *readFb = ctx->ReadBuffer;
>>      int att_index = do_depth ? BUFFER_DEPTH :
>> readFb->_ColorReadBufferIndex;
>>      const struct gl_renderbuffer_attachment *readAtt =
>>         &readFb->Attachment[att_index];
>> @@ -645,7 +648,7 @@ blitframebuffer_texture(struct gl_context *ctx,
>>      scaled_blit = dstW != srcW || dstH != srcH;
>>
>>      if (glsl_version) {
>> -      setup_glsl_blit_framebuffer(ctx, blit, rb, target, filter,
>> scaled_blit,
>> +      setup_glsl_blit_framebuffer(ctx, blit, drawFb, rb, target,
>> filter, scaled_blit,
>>                                     do_depth);
>>      }
>>      else {
>> @@ -681,7 +684,7 @@ blitframebuffer_texture(struct gl_context *ctx,
>>       */
>>      if (ctx->Extensions.EXT_texture_sRGB_decode) {
>>         if (_mesa_get_format_color_encoding(rb->Format) == GL_SRGB &&
>> -          ctx->DrawBuffer->Visual.sRGBCapable) {
>> +          drawFb->Visual.sRGBCapable) {
>>            _mesa_SamplerParameteri(fb_tex_blit.sampler,
>>                                    GL_TEXTURE_SRGB_DECODE_EXT,
>> GL_DECODE_EXT);
>>            _mesa_set_framebuffer_srgb(ctx, GL_TRUE);
>> @@ -873,6 +876,8 @@ _mesa_meta_setup_sampler(struct gl_context *ctx,
>>    */
>>   GLbitfield
>>   _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
>> +                           const struct gl_framebuffer *readFb,
>> +                           const struct gl_framebuffer *drawFb,
>>                              GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                              GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                              GLbitfield mask, GLenum filter)
>> @@ -894,7 +899,7 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
>>                                         ctx->Extensions.ARB_fragment_
>> shader;
>>
>>      /* Multisample texture blit support requires texture multisample. */
>> -   if (ctx->ReadBuffer->Visual.samples > 0 &&
>> +   if (readFb->Visual.samples > 0 &&
>>          !ctx->Extensions.ARB_texture_multisample) {
>>         return mask;
>>      }
>> @@ -902,7 +907,8 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
>>      /* Clip a copy of the blit coordinates. If these differ from the
>> input
>>       * coordinates, then we'll set the scissor.
>>       */
>> -   if (!_mesa_clip_blit(ctx, &clip.srcX0, &clip.srcY0, &clip.srcX1,
>> &clip.srcY1,
>> +   if (!_mesa_clip_blit(ctx, readFb, drawFb,
>> +                        &clip.srcX0, &clip.srcY0, &clip.srcX1,
>> &clip.srcY1,
>>                           &clip.dstX0, &clip.dstY0, &clip.dstX1,
>> &clip.dstY1)) {
>>         /* clipped/scissored everything away */
>>         return 0;
>> @@ -930,7 +936,8 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
>>
>>      /* Try faster, direct texture approach first */
>>      if (mask & GL_COLOR_BUFFER_BIT) {
>> -      if (blitframebuffer_texture(ctx, srcX0, srcY0, srcX1, srcY1,
>> +      if (blitframebuffer_texture(ctx, readFb, drawFb,
>> +                                  srcX0, srcY0, srcX1, srcY1,
>>                                     dstX0, dstY0, dstX1, dstY1,
>>                                     filter, dstFlipX, dstFlipY,
>>                                     use_glsl_version, false)) {
>> @@ -939,7 +946,8 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
>>      }
>>
>>      if (mask & GL_DEPTH_BUFFER_BIT && use_glsl_version) {
>> -      if (blitframebuffer_texture(ctx, srcX0, srcY0, srcX1, srcY1,
>> +      if (blitframebuffer_texture(ctx, readFb, drawFb,
>> +                                  srcX0, srcY0, srcX1, srcY1,
>>                                     dstX0, dstY0, dstX1, dstY1,
>>                                     filter, dstFlipX, dstFlipY,
>>                                     use_glsl_version, true)) {
>> @@ -975,20 +983,22 @@ _mesa_meta_glsl_blit_cleanup(struct blit_state
>> *blit)
>>
>>   void
>>   _mesa_meta_and_swrast_BlitFramebuffer(struct gl_context *ctx,
>> +                                      struct gl_framebuffer *readFb,
>> +                                      struct gl_framebuffer *drawFb,
>>                                         GLint srcX0, GLint srcY0,
>>                                         GLint srcX1, GLint srcY1,
>>                                         GLint dstX0, GLint dstY0,
>>                                         GLint dstX1, GLint dstY1,
>>                                         GLbitfield mask, GLenum filter)
>>   {
>> -   mask = _mesa_meta_BlitFramebuffer(ctx,
>> +   mask = _mesa_meta_BlitFramebuffer(ctx, readFb, drawFb,
>>                                        srcX0, srcY0, srcX1, srcY1,
>>                                        dstX0, dstY0, dstX1, dstY1,
>>                                        mask, filter);
>>      if (mask == 0x0)
>>         return;
>>
>> -   _swrast_BlitFramebuffer(ctx,
>> +   _swrast_BlitFramebuffer(ctx, readFb, drawFb,
>>                              srcX0, srcY0, srcX1, srcY1,
>>                              dstX0, dstY0, dstX1, dstY1,
>>                              mask, filter);
>> diff --git a/src/mesa/drivers/common/meta_copy_image.c
>> b/src/mesa/drivers/common/meta_copy_image.c
>> index fc0cbaf..1729766 100644
>> --- a/src/mesa/drivers/common/meta_copy_image.c
>> +++ b/src/mesa/drivers/common/meta_copy_image.c
>> @@ -189,7 +189,8 @@ _mesa_meta_CopyImageSubData_uncompressed(struct
>> gl_context *ctx,
>>       * We have already created views to ensure that the texture formats
>>       * match.
>>       */
>> -   ctx->Driver.BlitFramebuffer(ctx, src_x, src_y,
>> +   ctx->Driver.BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> +                               src_x, src_y,
>>                                  src_x + src_width, src_y + src_height,
>>                                  dst_x, dst_y,
>>                                  dst_x + src_width, dst_y + src_height,
>> diff --git a/src/mesa/drivers/common/meta_tex_subimage.c
>> b/src/mesa/drivers/common/meta_tex_subimage.c
>> index 977ee5a..68c8273 100644
>> --- a/src/mesa/drivers/common/meta_tex_subimage.c
>> +++ b/src/mesa/drivers/common/meta_tex_subimage.c
>> @@ -206,7 +206,8 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx,
>> GLuint dims,
>>
>>      _mesa_update_state(ctx);
>>
>> -   if (_mesa_meta_BlitFramebuffer(ctx, 0, 0, width, height,
>> +   if (_mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> +                                  0, 0, width, height,
>>                                     xoffset, yoffset,
>>                                     xoffset + width, yoffset + height,
>>                                     GL_COLOR_BUFFER_BIT, GL_NEAREST))
>> @@ -220,7 +221,8 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx,
>> GLuint dims,
>>
>>         _mesa_update_state(ctx);
>>
>> -      _mesa_meta_BlitFramebuffer(ctx, 0, 0, width, height,
>> +      _mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> +                                 0, 0, width, height,
>>                                    xoffset, yoffset,
>>                                    xoffset + width, yoffset + height,
>>                                    GL_COLOR_BUFFER_BIT, GL_NEAREST);
>> @@ -324,7 +326,8 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context
>> *ctx, GLuint dims,
>>
>>      _mesa_update_state(ctx);
>>
>> -   if (_mesa_meta_BlitFramebuffer(ctx, xoffset, yoffset,
>> +   if (_mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> +                                  xoffset, yoffset,
>>                                     xoffset + width, yoffset + height,
>>                                     0, 0, width, height,
>>                                     GL_COLOR_BUFFER_BIT, GL_NEAREST))
>> @@ -338,7 +341,8 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context
>> *ctx, GLuint dims,
>>
>>         _mesa_update_state(ctx);
>>
>> -      _mesa_meta_BlitFramebuffer(ctx, xoffset, yoffset,
>> +      _mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> +                                 xoffset, yoffset,
>>                                    xoffset + width, yoffset + height,
>>                                    0, 0, width, height,
>>                                    GL_COLOR_BUFFER_BIT, GL_NEAREST);
>> diff --git a/src/mesa/drivers/dri/i915/intel_fbo.c
>> b/src/mesa/drivers/dri/i915/intel_fbo.c
>> index eb88a60..d4abd27 100644
>> --- a/src/mesa/drivers/dri/i915/intel_fbo.c
>> +++ b/src/mesa/drivers/dri/i915/intel_fbo.c
>> @@ -649,6 +649,8 @@ intel_validate_framebuffer(struct gl_context *ctx,
>> struct gl_framebuffer *fb)
>>    */
>>   static GLbitfield
>>   intel_blit_framebuffer_with_blitter(struct gl_context *ctx,
>> +                                    const struct gl_framebuffer *readFb,
>> +                                    const struct gl_framebuffer *drawFb,
>>                                       GLint srcX0, GLint srcY0,
>>                                       GLint srcX1, GLint srcY1,
>>                                       GLint dstX0, GLint dstY0,
>> @@ -659,8 +661,6 @@ intel_blit_framebuffer_with_blitter(struct
>> gl_context *ctx,
>>
>>      if (mask & GL_COLOR_BUFFER_BIT) {
>>         GLint i;
>> -      const struct gl_framebuffer *drawFb = ctx->DrawBuffer;
>> -      const struct gl_framebuffer *readFb = ctx->ReadBuffer;
>>         struct gl_renderbuffer *src_rb = readFb->_ColorReadBuffer;
>>         struct intel_renderbuffer *src_irb = intel_renderbuffer(src_rb);
>>
>> @@ -696,8 +696,8 @@ intel_blit_framebuffer_with_blitter(struct
>> gl_context *ctx,
>>          * results are undefined if any destination pixels have a
>> dependency on
>>          * source pixels.
>>          */
>> -      for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
>> -         struct gl_renderbuffer *dst_rb = ctx->DrawBuffer->_
>> ColorDrawBuffers[i];
>> +      for (i = 0; i < drawFb->_NumColorDrawBuffers; i++) {
>> +         struct gl_renderbuffer *dst_rb = drawFb->_ColorDrawBuffers[i];
>>            struct intel_renderbuffer *dst_irb =
>> intel_renderbuffer(dst_rb);
>>
>>            if (!dst_irb) {
>> @@ -738,12 +738,14 @@ intel_blit_framebuffer_with_blitter(struct
>> gl_context *ctx,
>>
>>   static void
>>   intel_blit_framebuffer(struct gl_context *ctx,
>> +                       struct gl_framebuffer *readFb,
>> +                       struct gl_framebuffer *drawFb,
>>                          GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                          GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                          GLbitfield mask, GLenum filter)
>>   {
>>      /* Try using the BLT engine. */
>> -   mask = intel_blit_framebuffer_with_blitter(ctx,
>> +   mask = intel_blit_framebuffer_with_blitter(ctx, readFb, drawFb,
>>                                                 srcX0, srcY0, srcX1,
>> srcY1,
>>                                                 dstX0, dstY0, dstX1,
>> dstY1,
>>                                                 mask, filter);
>> @@ -751,7 +753,7 @@ intel_blit_framebuffer(struct gl_context *ctx,
>>         return;
>>
>>
>> -   _mesa_meta_and_swrast_BlitFramebuffer(ctx,
>> +   _mesa_meta_and_swrast_BlitFramebuffer(ctx, readFb, drawFb,
>>                                            srcX0, srcY0, srcX1, srcY1,
>>                                            dstX0, dstY0, dstX1, dstY1,
>>                                            mask, filter);
>> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
>> b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
>> index 936feaf..10a53dc 100644
>> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
>> @@ -125,6 +125,8 @@ do_blorp_blit(struct brw_context *brw, GLbitfield
>> buffer_bit,
>>
>>   static bool
>>   try_blorp_blit(struct brw_context *brw,
>> +               const struct gl_framebuffer *read_fb,
>> +               const struct gl_framebuffer *draw_fb,
>>                  GLfloat srcX0, GLfloat srcY0, GLfloat srcX1, GLfloat
>> srcY1,
>>                  GLfloat dstX0, GLfloat dstY0, GLfloat dstX1, GLfloat
>> dstY1,
>>                  GLenum filter, GLbitfield buffer_bit)
>> @@ -136,11 +138,8 @@ try_blorp_blit(struct brw_context *brw,
>>       */
>>      intel_prepare_render(brw);
>>
>> -   const struct gl_framebuffer *read_fb = ctx->ReadBuffer;
>> -   const struct gl_framebuffer *draw_fb = ctx->DrawBuffer;
>> -
>>      bool mirror_x, mirror_y;
>> -   if (brw_meta_mirror_clip_and_scissor(ctx,
>> +   if (brw_meta_mirror_clip_and_scissor(ctx, read_fb, draw_fb,
>>                                           &srcX0, &srcY0, &srcX1, &srcY1,
>>                                           &dstX0, &dstY0, &dstX1, &dstY1,
>>                                           &mirror_x, &mirror_y))
>> @@ -154,8 +153,8 @@ try_blorp_blit(struct brw_context *brw,
>>      switch (buffer_bit) {
>>      case GL_COLOR_BUFFER_BIT:
>>         src_irb = intel_renderbuffer(read_fb->_ColorReadBuffer);
>> -      for (unsigned i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers;
>> ++i) {
>> -         dst_irb = intel_renderbuffer(ctx->
>> DrawBuffer->_ColorDrawBuffers[i]);
>> +      for (unsigned i = 0; i < draw_fb->_NumColorDrawBuffers; ++i) {
>> +         dst_irb = intel_renderbuffer(draw_fb->_ColorDrawBuffers[i]);
>>          if (dst_irb)
>>               do_blorp_blit(brw, buffer_bit,
>>                             src_irb, src_irb->Base.Base.Format,
>> @@ -317,6 +316,8 @@ brw_blorp_copytexsubimage(struct brw_context *brw,
>>
>>   GLbitfield
>>   brw_blorp_framebuffer(struct brw_context *brw,
>> +                      struct gl_framebuffer *readFb,
>> +                      struct gl_framebuffer *drawFb,
>>                         GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                         GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                         GLbitfield mask, GLenum filter)
>> @@ -333,7 +334,7 @@ brw_blorp_framebuffer(struct brw_context *brw,
>>
>>      for (unsigned int i = 0; i < ARRAY_SIZE(buffer_bits); ++i) {
>>         if ((mask & buffer_bits[i]) &&
>> -       try_blorp_blit(brw,
>> +       try_blorp_blit(brw, readFb, drawFb,
>>                         srcX0, srcY0, srcX1, srcY1,
>>                         dstX0, dstY0, dstX1, dstY1,
>>                         filter, buffer_bits[i])) {
>> diff --git a/src/mesa/drivers/dri/i965/brw_context.h
>> b/src/mesa/drivers/dri/i965/brw_context.h
>> index a4b29fa..c34a49d 100644
>> --- a/src/mesa/drivers/dri/i965/brw_context.h
>> +++ b/src/mesa/drivers/dri/i965/brw_context.h
>> @@ -1490,6 +1490,8 @@ void brw_meta_updownsample(struct brw_context *brw,
>>                              struct intel_mipmap_tree *dst);
>>
>>   void brw_meta_fbo_stencil_blit(struct brw_context *brw,
>> +                               struct gl_framebuffer *read_fb,
>> +                               struct gl_framebuffer *draw_fb,
>>                                  GLfloat srcX0, GLfloat srcY0,
>>                                  GLfloat srcX1, GLfloat srcY1,
>>                                  GLfloat dstX0, GLfloat dstY0,
>> @@ -1714,6 +1716,8 @@ gen7_resume_transform_feedback(struct gl_context
>> *ctx,
>>   /* brw_blorp_blit.cpp */
>>   GLbitfield
>>   brw_blorp_framebuffer(struct brw_context *brw,
>> +                      struct gl_framebuffer *readFb,
>> +                      struct gl_framebuffer *drawFb,
>>                         GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                         GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                         GLbitfield mask, GLenum filter);
>> diff --git a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
>> b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
>> index b9b481b..fc7018d 100644
>> --- a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
>> +++ b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
>> @@ -460,15 +460,17 @@ error:
>>
>>   void
>>   brw_meta_fbo_stencil_blit(struct brw_context *brw,
>> +                          struct gl_framebuffer *read_fb,
>> +                          struct gl_framebuffer *draw_fb,
>>                             GLfloat src_x0, GLfloat src_y0,
>>                             GLfloat src_x1, GLfloat src_y1,
>>                             GLfloat dst_x0, GLfloat dst_y0,
>>                             GLfloat dst_x1, GLfloat dst_y1)
>>   {
>>      struct gl_context *ctx = &brw->ctx;
>> -   struct gl_renderbuffer *draw_fb =
>> -      ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
>> -   const struct intel_renderbuffer *dst_irb =
>> intel_renderbuffer(draw_fb);
>> +   struct gl_renderbuffer *draw_rb =
>> +      draw_fb->Attachment[BUFFER_STENCIL].Renderbuffer;
>> +   const struct intel_renderbuffer *dst_irb =
>> intel_renderbuffer(draw_rb);
>>      struct intel_mipmap_tree *dst_mt = dst_irb->mt;
>>
>>      if (!dst_mt)
>> @@ -478,7 +480,7 @@ brw_meta_fbo_stencil_blit(struct brw_context *brw,
>>         dst_mt = dst_mt->stencil_mt;
>>
>>      bool mirror_x, mirror_y;
>> -   if (brw_meta_mirror_clip_and_scissor(ctx,
>> +   if (brw_meta_mirror_clip_and_scissor(ctx, read_fb, draw_fb,
>>                                           &src_x0, &src_y0, &src_x1,
>> &src_y1,
>>                                           &dst_x0, &dst_y0, &dst_x1,
>> &dst_y1,
>>                                           &mirror_x, &mirror_y))
>> diff --git a/src/mesa/drivers/dri/i965/brw_meta_util.c
>> b/src/mesa/drivers/dri/i965/brw_meta_util.c
>> index 72ed96c..a3b0604 100644
>> --- a/src/mesa/drivers/dri/i965/brw_meta_util.c
>> +++ b/src/mesa/drivers/dri/i965/brw_meta_util.c
>> @@ -104,15 +104,14 @@ clip_or_scissor(bool mirror,
>>
>>   bool
>>   brw_meta_mirror_clip_and_scissor(const struct gl_context *ctx,
>> +                                 const struct gl_framebuffer *read_fb,
>> +                                 const struct gl_framebuffer *draw_fb,
>>                                    GLfloat *srcX0, GLfloat *srcY0,
>>                                    GLfloat *srcX1, GLfloat *srcY1,
>>                                    GLfloat *dstX0, GLfloat *dstY0,
>>                                    GLfloat *dstX1, GLfloat *dstY1,
>>                                    bool *mirror_x, bool *mirror_y)
>>   {
>> -   const struct gl_framebuffer *read_fb = ctx->ReadBuffer;
>> -   const struct gl_framebuffer *draw_fb = ctx->DrawBuffer;
>> -
>>      *mirror_x = false;
>>      *mirror_y = false;
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_meta_util.h
>> b/src/mesa/drivers/dri/i965/brw_meta_util.h
>> index ccd8642..dc9dff2 100644
>> --- a/src/mesa/drivers/dri/i965/brw_meta_util.h
>> +++ b/src/mesa/drivers/dri/i965/brw_meta_util.h
>> @@ -33,6 +33,8 @@ extern "C" {
>>
>>   bool
>>   brw_meta_mirror_clip_and_scissor(const struct gl_context *ctx,
>> +                                 const struct gl_framebuffer *read_fb,
>> +                                 const struct gl_framebuffer *draw_fb,
>>                                    GLfloat *srcX0, GLfloat *srcY0,
>>                                    GLfloat *srcX1, GLfloat *srcY1,
>>                                    GLfloat *dstX0, GLfloat *dstY0,
>> diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c
>> b/src/mesa/drivers/dri/i965/intel_fbo.c
>> index 7bdf995..da31c6f 100644
>> --- a/src/mesa/drivers/dri/i965/intel_fbo.c
>> +++ b/src/mesa/drivers/dri/i965/intel_fbo.c
>> @@ -779,6 +779,8 @@ intel_validate_framebuffer(struct gl_context *ctx,
>> struct gl_framebuffer *fb)
>>    */
>>   static GLbitfield
>>   intel_blit_framebuffer_with_blitter(struct gl_context *ctx,
>> +                                    const struct gl_framebuffer *readFb,
>> +                                    const struct gl_framebuffer *drawFb,
>>                                       GLint srcX0, GLint srcY0,
>>                                       GLint srcX1, GLint srcY1,
>>                                       GLint dstX0, GLint dstY0,
>> @@ -794,8 +796,6 @@ intel_blit_framebuffer_with_blitter(struct
>> gl_context *ctx,
>>
>>      if (mask & GL_COLOR_BUFFER_BIT) {
>>         GLint i;
>> -      const struct gl_framebuffer *drawFb = ctx->DrawBuffer;
>> -      const struct gl_framebuffer *readFb = ctx->ReadBuffer;
>>         struct gl_renderbuffer *src_rb = readFb->_ColorReadBuffer;
>>         struct intel_renderbuffer *src_irb = intel_renderbuffer(src_rb);
>>
>> @@ -863,6 +863,8 @@ intel_blit_framebuffer_with_blitter(struct
>> gl_context *ctx,
>>
>>   static void
>>   intel_blit_framebuffer(struct gl_context *ctx,
>> +                       struct gl_framebuffer *readFb,
>> +                       struct gl_framebuffer *drawFb,
>>                          GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                          GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                          GLbitfield mask, GLenum filter)
>> @@ -876,7 +878,7 @@ intel_blit_framebuffer(struct gl_context *ctx,
>>      if (!_mesa_check_conditional_render(ctx))
>>         return;
>>
>> -   mask = brw_blorp_framebuffer(brw,
>> +   mask = brw_blorp_framebuffer(brw, readFb, drawFb,
>>                                   srcX0, srcY0, srcX1, srcY1,
>>                                   dstX0, dstY0, dstX1, dstY1,
>>                                   mask, filter);
>> @@ -884,7 +886,7 @@ intel_blit_framebuffer(struct gl_context *ctx,
>>         return;
>>
>>      if (brw->gen >= 8 && (mask & GL_STENCIL_BUFFER_BIT)) {
>> -      brw_meta_fbo_stencil_blit(brw_context(ctx),
>> +      brw_meta_fbo_stencil_blit(brw_context(ctx), readFb, drawFb,
>>                                   srcX0, srcY0, srcX1, srcY1,
>>                                   dstX0, dstY0, dstX1, dstY1);
>>         mask &= ~GL_STENCIL_BUFFER_BIT;
>> @@ -893,21 +895,21 @@ intel_blit_framebuffer(struct gl_context *ctx,
>>      }
>>
>>      /* Try using the BLT engine. */
>> -   mask = intel_blit_framebuffer_with_blitter(ctx,
>> +   mask = intel_blit_framebuffer_with_blitter(ctx, readFb, drawFb,
>>                                                 srcX0, srcY0, srcX1,
>> srcY1,
>>                                                 dstX0, dstY0, dstX1,
>> dstY1,
>>                                                 mask, filter);
>>      if (mask == 0x0)
>>         return;
>>
>> -   mask = _mesa_meta_BlitFramebuffer(ctx,
>> +   mask = _mesa_meta_BlitFramebuffer(ctx, readFb, drawFb,
>>                                        srcX0, srcY0, srcX1, srcY1,
>>                                        dstX0, dstY0, dstX1, dstY1,
>>                                        mask, filter);
>>      if (mask == 0x0)
>>         return;
>>
>> -   _swrast_BlitFramebuffer(ctx,
>> +   _swrast_BlitFramebuffer(ctx, readFb, drawFb,
>>                              srcX0, srcY0, srcX1, srcY1,
>>                              dstX0, dstY0, dstX1, dstY1,
>>                              mask, filter);
>> diff --git a/src/mesa/main/blit.c b/src/mesa/main/blit.c
>> index 0b70a3d..b97b564 100644
>> --- a/src/mesa/main/blit.c
>> +++ b/src/mesa/main/blit.c
>> @@ -506,7 +506,7 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint
>> srcX1, GLint srcY1,
>>      }
>>
>>      ASSERT(ctx->Driver.BlitFramebuffer);
>> -   ctx->Driver.BlitFramebuffer(ctx,
>> +   ctx->Driver.BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>>                                  srcX0, srcY0, srcX1, srcY1,
>>                                  dstX0, dstY0, dstX1, dstY1,
>>                                  mask, filter);
>> diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
>> index 6883e18..40f68b4 100644
>> --- a/src/mesa/main/dd.h
>> +++ b/src/mesa/main/dd.h
>> @@ -713,6 +713,8 @@ struct dd_function_table {
>>                                  struct gl_framebuffer *fb);
>>      /*@}*/
>>      void (*BlitFramebuffer)(struct gl_context *ctx,
>> +                           struct gl_framebuffer *readFb,
>> +                           struct gl_framebuffer *drawFb,
>>                              GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                              GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                              GLbitfield mask, GLenum filter);
>> diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
>> index 9ad97c5..c37900c 100644
>> --- a/src/mesa/main/image.c
>> +++ b/src/mesa/main/image.c
>> @@ -861,19 +861,21 @@ clip_left_or_bottom(GLint *srcX0, GLint *srcX1,
>>    */
>>   GLboolean
>>   _mesa_clip_blit(struct gl_context *ctx,
>> +                const struct gl_framebuffer *readFb,
>> +                const struct gl_framebuffer *drawFb,
>>                   GLint *srcX0, GLint *srcY0, GLint *srcX1, GLint *srcY1,
>>                   GLint *dstX0, GLint *dstY0, GLint *dstX1, GLint *dstY1)
>>   {
>>      const GLint srcXmin = 0;
>> -   const GLint srcXmax = ctx->ReadBuffer->Width;
>> +   const GLint srcXmax = readFb->Width;
>>      const GLint srcYmin = 0;
>> -   const GLint srcYmax = ctx->ReadBuffer->Height;
>> +   const GLint srcYmax = readFb->Height;
>>
>>      /* these include scissor bounds */
>> -   const GLint dstXmin = ctx->DrawBuffer->_Xmin;
>> -   const GLint dstXmax = ctx->DrawBuffer->_Xmax;
>> -   const GLint dstYmin = ctx->DrawBuffer->_Ymin;
>> -   const GLint dstYmax = ctx->DrawBuffer->_Ymax;
>> +   const GLint dstXmin = drawFb->_Xmin;
>> +   const GLint dstXmax = drawFb->_Xmax;
>> +   const GLint dstYmin = drawFb->_Ymin;
>> +   const GLint dstYmax = drawFb->_Ymax;
>>
>>      /*
>>      printf("PreClipX:  src: %d .. %d  dst: %d .. %d\n",
>> diff --git a/src/mesa/main/image.h b/src/mesa/main/image.h
>> index 44863cc..501586b 100644
>> --- a/src/mesa/main/image.h
>> +++ b/src/mesa/main/image.h
>> @@ -32,6 +32,7 @@
>>
>>   struct gl_context;
>>   struct gl_pixelstore_attrib;
>> +struct gl_framebuffer;
>>
>>   extern void
>>   _mesa_swap2_copy(GLushort *dst, GLushort *src, GLuint n);
>> @@ -140,6 +141,8 @@ _mesa_clip_to_region(GLint xmin, GLint ymin,
>>
>>   extern GLboolean
>>   _mesa_clip_blit(struct gl_context *ctx,
>> +                const struct gl_framebuffer *readFb,
>> +                const struct gl_framebuffer *drawFb,
>>                   GLint *srcX0, GLint *srcY0, GLint *srcX1, GLint *srcY1,
>>                   GLint *dstX0, GLint *dstY0, GLint *dstX1, GLint *dstY1);
>>
>> diff --git a/src/mesa/state_tracker/st_cb_blit.c
>> b/src/mesa/state_tracker/st_cb_blit.c
>> index 9c33f4e..bbaedd1 100644
>> --- a/src/mesa/state_tracker/st_cb_blit.c
>> +++ b/src/mesa/state_tracker/st_cb_blit.c
>> @@ -73,6 +73,8 @@ st_adjust_blit_for_msaa_resolve(struct pipe_blit_info
>> *blit)
>>
>>   static void
>>   st_BlitFramebuffer(struct gl_context *ctx,
>> +                   struct gl_framebuffer *readFB,
>> +                   struct gl_framebuffer *drawFB,
>>                      GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
>>                      GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
>>                      GLbitfield mask, GLenum filter)
>> @@ -83,8 +85,6 @@ st_BlitFramebuffer(struct gl_context *ctx,
>>      const uint pFilter = ((filter == GL_NEAREST)
>>                            ? PIPE_TEX_FILTER_NEAREST
>>                            : PIPE_TEX_FILTER_LINEAR);
>> -   struct gl_framebuffer *readFB = ctx->ReadBuffer;
>> -   struct gl_framebuffer *drawFB = ctx->DrawBuffer;
>>      struct {
>>         GLint srcX0, srcY0, srcX1, srcY1;
>>         GLint dstX0, dstY0, dstX1, dstY1;
>> @@ -108,7 +108,7 @@ st_BlitFramebuffer(struct gl_context *ctx,
>>       *
>>       * XXX: This should depend on mask !
>>       */
>> -   if (!_mesa_clip_blit(ctx,
>> +   if (!_mesa_clip_blit(ctx, readFB, drawFB,
>>                           &clip.srcX0, &clip.srcY0, &clip.srcX1,
>> &clip.srcY1,
>>                           &clip.dstX0, &clip.dstY0, &clip.dstX1,
>> &clip.dstY1)) {
>>         return; /* nothing to draw/blit */
>> diff --git a/src/mesa/swrast/s_blit.c b/src/mesa/swrast/s_blit.c
>> index e3b45f1..16e5b8c 100644
>> --- a/src/mesa/swrast/s_blit.c
>> +++ b/src/mesa/swrast/s_blit.c
>> @@ -107,14 +107,14 @@ RESAMPLE(resample_row_16, GLuint, 4)
>>    */
>>   static void
>>   blit_nearest(struct gl_context *ctx,
>> +             struct gl_framebuffer *readFb,
>> +             struct gl_framebuffer *drawFb,
>>                GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
>>                GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
>>                GLbitfield buffer)
>>   {
>>      struct gl_renderbuffer *readRb, *drawRb = NULL;
>>      struct gl_renderbuffer_attachment *readAtt = NULL, *drawAtt = NULL;
>> -   struct gl_framebuffer *readFb = ctx->ReadBuffer;
>> -   struct gl_framebuffer *drawFb = ctx->DrawBuffer;
>>      GLuint numDrawBuffers = 0;
>>      GLuint i;
>>
>> @@ -508,11 +508,11 @@ resample_linear_row_float(GLint srcWidth, GLint
>> dstWidth,
>>    */
>>   static void
>>   blit_linear(struct gl_context *ctx,
>> +            struct gl_framebuffer *readFb,
>> +            struct gl_framebuffer *drawFb,
>>               GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
>>               GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1)
>>   {
>> -   struct gl_framebuffer *drawFb = ctx->DrawBuffer;
>> -   struct gl_framebuffer *readFb = ctx->ReadBuffer;
>>      struct gl_renderbuffer *readRb = readFb->_ColorReadBuffer;
>>      struct gl_renderbuffer_attachment *readAtt =
>>         &readFb->Attachment[readFb->_ColorReadBufferIndex];
>> @@ -733,6 +733,8 @@ fail_no_memory:
>>    */
>>   void
>>   _swrast_BlitFramebuffer(struct gl_context *ctx,
>> +                        struct gl_framebuffer *readFb,
>> +                        struct gl_framebuffer *drawFb,
>>                           GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                           GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                           GLbitfield mask, GLenum filter)
>> @@ -756,7 +758,7 @@ _swrast_BlitFramebuffer(struct gl_context *ctx,
>>      if (!_mesa_check_conditional_render(ctx))
>>         return; /* Do not blit */
>>
>> -   if (!_mesa_clip_blit(ctx, &srcX0, &srcY0, &srcX1, &srcY1,
>> +   if (!_mesa_clip_blit(ctx, readFb, drawFb, &srcX0, &srcY0, &srcX1,
>> &srcY1,
>>                           &dstX0, &dstY0, &dstX1, &dstY1)) {
>>         return;
>>      }
>> @@ -775,33 +777,34 @@ _swrast_BlitFramebuffer(struct gl_context *ctx,
>>          dstY0 < dstY1) {
>>         for (i = 0; i < 3; i++) {
>>            if (mask & buffers[i]) {
>> -           if (swrast_fast_copy_pixels(ctx,
>> -                                       srcX0, srcY0,
>> -                                       srcX1 - srcX0, srcY1 - srcY0,
>> -                                       dstX0, dstY0,
>> -                                       buffer_enums[i])) {
>> -              mask &= ~buffers[i];
>> -           }
>> -        }
>> +            if (swrast_fast_copy_pixels(ctx,
>> +                                        readFb, drawFb,
>> +                                        srcX0, srcY0,
>> +                                        srcX1 - srcX0, srcY1 - srcY0,
>> +                                        dstX0, dstY0,
>> +                                        buffer_enums[i])) {
>> +               mask &= ~buffers[i];
>> +            }
>> +         }
>>         }
>>
>>         if (!mask)
>> -        return;
>> +         return;
>>      }
>>
>>      if (filter == GL_NEAREST) {
>>         for (i = 0; i < 3; i++) {
>> -        if (mask & buffers[i]) {
>> -           blit_nearest(ctx,  srcX0, srcY0, srcX1, srcY1,
>> -                        dstX0, dstY0, dstX1, dstY1, buffers[i]);
>> -        }
>> +          if (mask & buffers[i]) {
>> +             blit_nearest(ctx, readFb, drawFb, srcX0, srcY0, srcX1,
>> srcY1,
>> +                          dstX0, dstY0, dstX1, dstY1, buffers[i]);
>> +          }
>>         }
>>      }
>>      else {
>>         ASSERT(filter == GL_LINEAR);
>>         if (mask & GL_COLOR_BUFFER_BIT) {  /* depth/stencil not allowed */
>> -        blit_linear(ctx,  srcX0, srcY0, srcX1, srcY1,
>> -                    dstX0, dstY0, dstX1, dstY1);
>> +         blit_linear(ctx, readFb, drawFb, srcX0, srcY0, srcX1, srcY1,
>> +                     dstX0, dstY0, dstX1, dstY1);
>>         }
>>      }
>>
>> diff --git a/src/mesa/swrast/s_copypix.c b/src/mesa/swrast/s_copypix.c
>> index d001734..e21c69d 100644
>> --- a/src/mesa/swrast/s_copypix.c
>> +++ b/src/mesa/swrast/s_copypix.c
>> @@ -442,11 +442,11 @@ end:
>>    */
>>   GLboolean
>>   swrast_fast_copy_pixels(struct gl_context *ctx,
>> -                       GLint srcX, GLint srcY, GLsizei width, GLsizei
>> height,
>> -                       GLint dstX, GLint dstY, GLenum type)
>> +                        struct gl_framebuffer *srcFb,
>> +                        struct gl_framebuffer *dstFb,
>> +                        GLint srcX, GLint srcY, GLsizei width, GLsizei
>> height,
>> +                        GLint dstX, GLint dstY, GLenum type)
>>   {
>> -   struct gl_framebuffer *srcFb = ctx->ReadBuffer;
>> -   struct gl_framebuffer *dstFb = ctx->DrawBuffer;
>>      struct gl_renderbuffer *srcRb, *dstRb;
>>      GLint row;
>>      GLuint pixelBytes, widthInBytes;
>> @@ -620,9 +620,9 @@ map_readbuffer(struct gl_context *ctx, GLenum type)
>>    * By time we get here, all parameters will have been error-checked.
>>    */
>>   void
>> -_swrast_CopyPixels( struct gl_context *ctx,
>> -                   GLint srcx, GLint srcy, GLsizei width, GLsizei height,
>> -                   GLint destx, GLint desty, GLenum type )
>> +_swrast_CopyPixels(struct gl_context *ctx,
>> +                   GLint srcx, GLint srcy, GLsizei width, GLsizei height,
>> +                   GLint destx, GLint desty, GLenum type)
>>   {
>>      SWcontext *swrast = SWRAST_CONTEXT(ctx);
>>      struct gl_renderbuffer *rb;
>> @@ -634,11 +634,12 @@ _swrast_CopyPixels( struct gl_context *ctx,
>>         _swrast_validate_derived( ctx );
>>
>>      if (!(SWRAST_CONTEXT(ctx)->_RasterMask != 0x0 ||
>> -        ctx->Pixel.ZoomX != 1.0F ||
>> -        ctx->Pixel.ZoomY != 1.0F ||
>> -        ctx->_ImageTransferState) &&
>> -       swrast_fast_copy_pixels(ctx, srcx, srcy, width, height, destx,
>> desty,
>> -                              type)) {
>> +       ctx->Pixel.ZoomX != 1.0F ||
>> +       ctx->Pixel.ZoomY != 1.0F ||
>> +       ctx->_ImageTransferState) &&
>> +      swrast_fast_copy_pixels(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> +                              srcx, srcy, width, height, destx, desty,
>> +                              type)) {
>>         /* all done */
>>         return;
>>      }
>> diff --git a/src/mesa/swrast/swrast.h b/src/mesa/swrast/swrast.h
>> index ac3dbe3..a89dc6c 100644
>> --- a/src/mesa/swrast/swrast.h
>> +++ b/src/mesa/swrast/swrast.h
>> @@ -132,16 +132,18 @@ _swrast_Bitmap( struct gl_context *ctx,
>>                 const GLubyte *bitmap );
>>
>>   extern void
>> -_swrast_CopyPixels( struct gl_context *ctx,
>> -                   GLint srcx, GLint srcy,
>> -                   GLint destx, GLint desty,
>> -                   GLsizei width, GLsizei height,
>> -                   GLenum type );
>> +_swrast_CopyPixels(struct gl_context *ctx,
>> +                   GLint srcx, GLint srcy,
>> +                   GLint destx, GLint desty,
>> +                   GLsizei width, GLsizei height,
>> +                   GLenum type);
>>
>>   extern GLboolean
>>   swrast_fast_copy_pixels(struct gl_context *ctx,
>> -                       GLint srcX, GLint srcY, GLsizei width, GLsizei
>> height,
>> -                       GLint dstX, GLint dstY, GLenum type);
>> +                        struct gl_framebuffer *srcFb,
>> +                        struct gl_framebuffer *dstFb,
>> +                        GLint srcX, GLint srcY, GLsizei width, GLsizei
>> height,
>> +                        GLint dstX, GLint dstY, GLenum type);
>>
>>   extern void
>>   _swrast_DrawPixels( struct gl_context *ctx,
>> @@ -153,6 +155,8 @@ _swrast_DrawPixels( struct gl_context *ctx,
>>
>>   extern void
>>   _swrast_BlitFramebuffer(struct gl_context *ctx,
>> +                        struct gl_framebuffer *readFb,
>> +                        struct gl_framebuffer *drawFb,
>>                           GLint srcX0, GLint srcY0, GLint srcX1, GLint
>> srcY1,
>>                           GLint dstX0, GLint dstY0, GLint dstX1, GLint
>> dstY1,
>>                           GLbitfield mask, GLenum filter);
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150202/6a3c26d7/attachment-0001.html>


More information about the mesa-dev mailing list