<div dir="ltr"><br><br>On Wed, Sep 9, 2015 at 11:30 AM, Ian Romanick <<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>> wrote:<br>> I'm pretty sure our implementation of this extension is complete<br>> rubbish.  I have attached an image from the blit-scaled test.  This<br>> result cannot be useful to anyone.<br>><div><font color="#000000">Resending it with link to the image in place of big attachment.</font></div><div><font color="#000000"><br>Paul Berry and I agreed to follow the "NVIDIA Implementation Details"<br>given in the extension spec. i965 driver currently use bilinear filtering<br>for both SCALED_RESOLVE_FASTEST and SCALED_RESOLVE_NICEST.<br>Do you think the implementation doesn't match what is suggested in<br>the spec? I'll be happy to work on improving the implementation if you<br>have any specific comments.<br><br>Extension spec mentions the potential loss of quality when using a<br>single pass scaled resolve blit. Also the quality of image generated<br>depends on sample count and scaling factor. I vaguely remember<br>Paul mentioned the scaling factor of ~1.5, beyond which single pass<br>scaled resolve blit quickly becomes useless. I think the attached<br>image is using a scaling factor of 2.4.<br><br>Below link shows an old image generated by me doing the quality<br>comparison with Nvidia's proprietary driver implementation. I posted<br>the image on mesa-dev before enabling the extension on i965. Please<br>see the images under "New implementation" for the comparison.<br>Image:</font><a href="https://www.dropbox.com/s/z4ebhx0lwfmui8m/scaled-blit.png?dl=0" target="_blank"> https://www.dropbox.com/s/z4ebhx0lwfmui8m/scaled-blit.png?dl=0</a><br><br>> On 09/09/2015 11:16 AM, Ian Romanick wrote:<br>>> On 09/09/2015 11:13 AM, Ian Romanick wrote:<br>>>> From: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com" target="_blank">ian.d.romanick@intel.com</a>><br>>>><br>>>> Previously the result of the complicated clamp() expression just dropped<br>>>> on the floor: clamp does not modify any of its parameters.  Looking at<br>>>> the surrounding code, I believe this is supposed to modify the value of<br>>>> tex_coord.<br>>>><br>>>> This change (along with a change to avoid the use of<br>>>> brw_blorp_framebuffer) does not affect any existing piglit tests.  I'm<br>>>> not sure what this clamp is trying to accomplish, so I'm not sure how to<br>>>> write a test to exercise this path.<br>>><br>>> I just noticed that the piglit test contains the same incorrect shader<br>>> as meta for the "reference" implementation.<br>>><br>>>> I also noticed another bug in this code.  There is no way the array<br>>>> texture case could possibly work.  This will generate code for the<br>>>> TEXEL_FETCH macro like:<br>>>><br>>>>     #define TEXEL_FETCH(coord) texelFetch(texSampler, ivec3(coord), sample_map[int(2 * fract(coord.x))]);<br>>>><br>>>> Since the coord parameter of this macro is a vec2 at all invocations, no<br>>>> expansion of this macro will even compile.<br>>>><br>>>> Signed-off-by: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com" target="_blank">ian.d.romanick@intel.com</a>><br>>>> Cc: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>><br>>>> Cc: Topi Pohjolainen <<a href="mailto:topi.pohjolainen@intel.com" target="_blank">topi.pohjolainen@intel.com</a>><br>>>> Cc: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com" target="_blank">jordan.l.justen@intel.com</a>><br>>>> ---<br>>>>  src/mesa/drivers/common/meta_blit.c | 4 ++--<br>>>>  1 file changed, 2 insertions(+), 2 deletions(-)<br>>>><br>>>> diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c<br>>>> index 71d18de..a41fe42 100644<br>>>> --- a/src/mesa/drivers/common/meta_blit.c<br>>>> +++ b/src/mesa/drivers/common/meta_blit.c<br>>>> @@ -187,8 +187,8 @@ setup_glsl_msaa_blit_scaled_shader(struct gl_context *ctx,<br>>>>                                 "   vec2 tex_coord = texCoords - s_0_offset;\n"<br>>>>                                 "\n"<br>>>>                                 "   tex_coord *= scale;\n"<br>>>> -                               "   clamp(tex_coord.x, 0.0f, scale.x * src_width - 1.0f);\n"<br>>>> -                               "   clamp(tex_coord.y, 0.0f, scale.y * src_height - 1.0f);\n"<br>>>> +                               "   tex_coord.x = clamp(tex_coord.x, 0.0f, scale.x * src_width - 1.0f);\n"<br>>>> +                               "   tex_coord.y = clamp(tex_coord.y, 0.0f, scale.y * src_height - 1.0f);\n"<br>>>>                                 "   interp = fract(tex_coord);\n"<br>>>>                                 "   tex_coord = ivec2(tex_coord) * scale_inv;\n"<br>>>>                                 "\n"<br>>><br>>> _______________________________________________<br>>> mesa-dev mailing list<br>>> <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>>> <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>>><br>><br>><br>> _______________________________________________<br>> mesa-dev mailing list<br>> <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>> <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>></div></div>