[Mesa-dev] [PATCH] meta: Fix blitting a framebuffer with renderbuffer attachment
Anuj Phogat
anuj.phogat at gmail.com
Mon Aug 12 10:27:55 PDT 2013
On Mon, Aug 5, 2013 at 3:00 PM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
>
> This patch fixes a case of framebuffer blitting with renderbuffer
> as color attachment and GL_LINEAR filter. Meta implementation of
> glBlitFrambuffer() converts source color buffer to a texture and
> uses it to do the scaled blitting in to destination buffer. Using
> the exact source rectangle to create the texture does incorrect
> linear filtering along the edges. This patch makes the changes to
> extend the texture edges by one pixel in x, y directions. This
> ensures correct linear filtering.
>
> It fixes failing piglit fbo-linear-blit test. Patch for the testcase
> is on piglit mailing list.
Updated piglit test's name is: fbo-attachments-blit-scaled-linear.
Please take a look if the changes in this patch look good to you.
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
> src/mesa/drivers/common/meta.c | 25 +++++++++++++++----------
> 1 file changed, 15 insertions(+), 10 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index c62927c..155c4fa 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -1879,19 +1879,24 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx,
> const GLenum rb_base_format =
> _mesa_base_tex_format(ctx, colorReadRb->InternalFormat);
>
> - newTex = alloc_texture(tex, srcW, srcH, rb_base_format);
> - setup_copypix_texture(ctx, tex, newTex, srcX, srcY, srcW, srcH,
> + /* Using the exact source rectangle to create the texture does incorrect
> + * linear filtering along the edges. So, allocate the texture extended along
> + * edges by one pixel in x, y directions.
> + */
> + newTex = alloc_texture(tex, srcW + 2, srcH + 2, rb_base_format);
> + setup_copypix_texture(ctx, tex, newTex,
> + srcX - 1, srcY - 1, srcW + 2, srcH + 2,
> rb_base_format, filter);
> /* texcoords (after texture allocation!) */
> {
> - verts[0].s = 0.0F;
> - verts[0].t = 0.0F;
> - verts[1].s = tex->Sright;
> - verts[1].t = 0.0F;
> - verts[2].s = tex->Sright;
> - verts[2].t = tex->Ttop;
> - verts[3].s = 0.0F;
> - verts[3].t = tex->Ttop;
> + verts[0].s = 1.0F;
> + verts[0].t = 1.0F;
> + verts[1].s = tex->Sright - 1.0F;
> + verts[1].t = 1.0F;
> + verts[2].s = tex->Sright - 1.0F;
> + verts[2].t = tex->Ttop - 1.0F;
> + verts[3].s = 1.0F;
> + verts[3].t = tex->Ttop - 1.0F;
>
> /* upload new vertex data */
> _mesa_BufferSubData(GL_ARRAY_BUFFER_ARB, 0, sizeof(verts), verts);
> --
> 1.8.1.4
>
More information about the mesa-dev
mailing list