<div dir="ltr">On 4 June 2013 18:20, Anuj Phogat <span dir="ltr"><<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This patch enables ext_framebuffer_multisample_blit_scaled extension<br>
on intel h/w >= gen6.<br>
<br>
Note: Patches for piglit tests to verify this functionality are out<br>
for review on piglit mailing list. Tests pass for all of the scaling<br>
factors from 0.1 to 2.4.<br>
<br>
Comment from Paul Berry on my previous implementation:<br>
"I have some concerns about the image quality of the method you've<br>
implemented.  As I understand it, the primary use case of this extension<br>
is to allow the client to do multisampled rendering at slightly less<br>
than screen resolution (e.g. 720p instead of 1080p), and then blit the<br>
result to the screen in one step while keeping most of the quality<br>
benefits of multisampling.  Since your implementation is effectively<br>
equivalent to downsampling and then blitting using GL_NEAREST filtering,<br>
my fear is that it will lead to blocky artifacts that are severe enough<br>
to negate the benefit of multisampling in the first place.<br>
<br>
Before we turn this extension on in the Intel driver, I'd like to look<br>
at a comparison of:<br>
<br>
(1) your technique<br>
(2) downsampling followed by scaling with GL_LINEAR filtering<br>
(3) The nVidia implementation, in GL_SCALED_RESOLVE_FASTEST_EXT mode<br>
(4) The nVidia implementation, in GL_SCALED_RESOLVE_NICEST_EXT mode<br>
(5) Just rendering the image directly to the single-sampled destination<br>
buffer"<br>
<br>
My latest implementation uses bilinear filtering and addresses all of<br>
the above concerns. It produces images which are free from blocky<br>
artifacts and show big improvement in visual quality. Here is a link<br>
to an image comparing the rendering quality on Intel and NVIDIA drivers:<br>
<a href="https://www.dropbox.com/s/m90lqqrj2vjps3g/scaled-blit.png" target="_blank">https://www.dropbox.com/s/m90lqqrj2vjps3g/scaled-blit.png</a><br>
<br>
Piglit tests to verify the implementation can be found at:<br>
<a href="https://github.com/aphogat/piglit.git" target="_blank">https://github.com/aphogat/piglit.git</a><br>
Branch: blit-1<br>
<br>
Accuracy tests:<br>
ext_framebuffer_multisample-blit-scaled-glsl<br>
ext_framebuffer_multisample-negative-blit-scaled<br>
Visual quality test:<br>
ext_framebuffer_multisample-blit-scaled<br>
<br>
While generating these images I came across a bug in NVIDIA's proprietary<br>
OpenGL 4.3 linux driver. While doing glBlitFramebuffer() driver ignores<br>
scissor operation.<br>
>From OpenGL 4.3 specification:<br>
"When values are written to the draw buffers, blit operations bypass<br>
most of the fragment pipeline. The only fragment operations which affect<br>
a blit are the pixel ownership test, the scissor test, and sRGB conversion<br>
(see section 17.3.9). Color, depth, and stencil masks (see section 17.4.2)<br>
are ignored."<br></blockquote><div><br></div><div>Yeah, I've noticed bugs in this area before.  IIRC nVidia fails the "clip-and-scissor-blit" piglit tests.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Signed-off-by: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com">anuj.phogat@gmail.com</a>><br>
---<br>
 src/mesa/drivers/dri/intel/intel_extensions.c | 1 +<br>
 1 file changed, 1 insertion(+)<br>
<br>
diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c<br>
index 5cb2fa3..23bc757 100644<br>
--- a/src/mesa/drivers/dri/intel/intel_extensions.c<br>
+++ b/src/mesa/drivers/dri/intel/intel_extensions.c<br>
@@ -94,6 +94,7 @@ intelInitExtensions(struct gl_context *ctx)<br>
    if (intel->gen >= 6) {<br>
       ctx->Extensions.EXT_framebuffer_multisample = true;<br>
       ctx->Extensions.EXT_transform_feedback = true;<br>
+      ctx->Extensions.EXT_framebuffer_multisample_blit_scaled = true;<br>
       ctx->Extensions.ARB_blend_func_extended = !driQueryOptionb(&intel->optionCache, "disable_blend_func_extended");<br>
       ctx->Extensions.ARB_draw_buffers_blend = true;<br>
       ctx->Extensions.ARB_ES3_compatibility = true;<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.1.4<br>
<br>
</font></span></blockquote></div><br></div></div>