softpipe/aniso: move DDQ calculation to after scaling.
authorDave Airlie <airlied@redhat.com>
Fri, 16 Jul 2021 02:28:57 +0000 (12:28 +1000)
committerDave Airlie <airlied@redhat.com>
Sun, 18 Jul 2021 06:16:26 +0000 (16:16 +1000)
I've read the papers on EWA filters and it seems like the calculate
DDQ = 2 * A after the scaling of A happens. This seems to make
things less blurry and more like real aniso.

Fixes: 2135aba8 ("softpipe: Constify variables")
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11917>

src/gallium/drivers/softpipe/sp_tex_sample.c

index 8725930..7372150 100644 (file)
@@ -2385,15 +2385,6 @@ img_filter_2d_ewa(const struct sp_sampler_view *sp_sview,
    float weight_buffer[TGSI_QUAD_SIZE];
    int j;
 
-   /* For each quad, the du and dx values are the same and so the ellipse is
-    * also the same. Note that texel/image access can only be performed using
-    * a quad, i.e. it is not possible to get the pixel value for a single
-    * tex coord. In order to have a better performance, the access is buffered
-    * using the s_buffer/t_buffer and weight_buffer. Only when the buffer is
-    * full, then the pixel values are read from the image.
-    */
-   const float ddq = 2 * A;
-
    /* Scale ellipse formula to directly index the Filter Lookup Table.
     * i.e. scale so that F = WEIGHT_LUT_SIZE-1
     */
@@ -2403,6 +2394,15 @@ img_filter_2d_ewa(const struct sp_sampler_view *sp_sview,
    C *= formScale;
    /* F *= formScale; */ /* no need to scale F as we don't use it below here */
 
+   /* For each quad, the du and dx values are the same and so the ellipse is
+    * also the same. Note that texel/image access can only be performed using
+    * a quad, i.e. it is not possible to get the pixel value for a single
+    * tex coord. In order to have a better performance, the access is buffered
+    * using the s_buffer/t_buffer and weight_buffer. Only when the buffer is
+    * full, then the pixel values are read from the image.
+    */
+   const float ddq = 2 * A;
+
    args.level = level;
    args.offset = offset;