[Mesa-dev] [PATCH 2/2] i965: Enable ext_framebuffer_multisample_blit_scaled on intel h/w

Matt Turner mattst88 at gmail.com
Wed Jun 5 10:17:24 PDT 2013


On Tue, Jun 4, 2013 at 6:20 PM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
> This patch enables ext_framebuffer_multisample_blit_scaled extension
> on intel h/w >= gen6.
>
> Note: Patches for piglit tests to verify this functionality are out
> for review on piglit mailing list. Tests pass for all of the scaling
> factors from 0.1 to 2.4.
>
> Comment from Paul Berry on my previous implementation:
> "I have some concerns about the image quality of the method you've
> implemented.  As I understand it, the primary use case of this extension
> is to allow the client to do multisampled rendering at slightly less
> than screen resolution (e.g. 720p instead of 1080p), and then blit the
> result to the screen in one step while keeping most of the quality
> benefits of multisampling.  Since your implementation is effectively
> equivalent to downsampling and then blitting using GL_NEAREST filtering,
> my fear is that it will lead to blocky artifacts that are severe enough
> to negate the benefit of multisampling in the first place.
>
> Before we turn this extension on in the Intel driver, I'd like to look
> at a comparison of:
>
> (1) your technique
> (2) downsampling followed by scaling with GL_LINEAR filtering
> (3) The nVidia implementation, in GL_SCALED_RESOLVE_FASTEST_EXT mode
> (4) The nVidia implementation, in GL_SCALED_RESOLVE_NICEST_EXT mode
> (5) Just rendering the image directly to the single-sampled destination
> buffer"
>
> My latest implementation uses bilinear filtering and addresses all of
> the above concerns. It produces images which are free from blocky
> artifacts and show big improvement in visual quality. Here is a link
> to an image comparing the rendering quality on Intel and NVIDIA drivers:
> https://www.dropbox.com/s/m90lqqrj2vjps3g/scaled-blit.png
>
> Piglit tests to verify the implementation can be found at:
> https://github.com/aphogat/piglit.git
> Branch: blit-1
>
> Accuracy tests:
> ext_framebuffer_multisample-blit-scaled-glsl
> ext_framebuffer_multisample-negative-blit-scaled
> Visual quality test:
> ext_framebuffer_multisample-blit-scaled
>
> While generating these images I came across a bug in NVIDIA's proprietary
> OpenGL 4.3 linux driver. While doing glBlitFramebuffer() driver ignores
> scissor operation.
> From OpenGL 4.3 specification:
> "When values are written to the draw buffers, blit operations bypass
> most of the fragment pipeline. The only fragment operations which affect
> a blit are the pixel ownership test, the scissor test, and sRGB conversion
> (see section 17.3.9). Color, depth, and stencil masks (see section 17.4.2)
> are ignored."
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
>  src/mesa/drivers/dri/intel/intel_extensions.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c
> index 5cb2fa3..23bc757 100644
> --- a/src/mesa/drivers/dri/intel/intel_extensions.c
> +++ b/src/mesa/drivers/dri/intel/intel_extensions.c
> @@ -94,6 +94,7 @@ intelInitExtensions(struct gl_context *ctx)
>     if (intel->gen >= 6) {
>        ctx->Extensions.EXT_framebuffer_multisample = true;
>        ctx->Extensions.EXT_transform_feedback = true;
> +      ctx->Extensions.EXT_framebuffer_multisample_blit_scaled = true;

Put this immediately after EXT_framebuffer_multisample?


More information about the mesa-dev mailing list