mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 23:18:20 +02:00
meta: Fix blitting a framebuffer with renderbuffer attachment
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-attachments-blit-scaled-linear test. Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com> CC: "9.2" <mesa-stable@lists.freedesktop.org> CC: "9.1" <mesa-stable@lists.freedesktop.org> Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
parent
a2061eea0f
commit
d944a6144f
1 changed files with 15 additions and 10 deletions
|
|
@ -1884,19 +1884,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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue