On Tue, Jun 4, 2013 at 6:20 PM, Anuj Phogat <anuj.pho...@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.pho...@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? _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev