softpipe: Use mag texture filter also for clamped lod == 0
authorGert Wollny <gert.wollny@collabora.com>
Thu, 4 Apr 2019 09:34:26 +0000 (11:34 +0200)
committerGert Wollny <gert.wollny@collabora.com>
Fri, 5 Apr 2019 07:07:45 +0000 (09:07 +0200)
Follow the spec when selecting the magnification filter (OpenGL 4.5,
section 8.14):

  If λ(x, y) is less than or equal to the constant c (see section 8.15)
  the texture is said to be magnified;

While we're here also silence a potential warning about implicit float
to double conversion.

v2: Update commit message to contain a reference to the spec as pointed
    out by Eric.

Fixes a number of dEQP GLES2 and GLES3 test out of:
 dEQP-GLES2.functional.texture.filtering.*
 dEQP-GLES2.functional.texture.vertex.2d.filtering.*
 dEQP-GLES3.functional.texture.vertex.*.filtering.*
 dEQP-GLES3.functional.texture.filtering.*
 dEQP-GLES3.functional.texture.shadow.2d.*

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/softpipe/sp_tex_sample.c

index 26d38296073b55b4f352de9b65edbc164e2a913a..1b40e3545bdbd677650a03d9d939385d16f844c2 100644 (file)
@@ -1956,7 +1956,7 @@ mip_filter_linear(const struct sp_sampler_view *sp_sview,
       args.p = p[j];
       args.face_id = filt_args->faces[j];
 
-      if (lod[j] < 0.0) {
+      if (lod[j] <= 0.0) {
          args.level = psview->u.tex.first_level;
          mag_filter(sp_sview, sp_samp, &args, &rgba[0][j]);
       }
@@ -2040,7 +2040,7 @@ mip_filter_nearest(const struct sp_sampler_view *sp_sview,
       args.p = p[j];
       args.face_id = filt_args->faces[j];
 
-      if (lod[j] < 0.0) {
+      if (lod[j] <= 0.0) {
          args.level = psview->u.tex.first_level;
          mag_filter(sp_sview, sp_samp, &args, &rgba[0][j]);
       } else {
@@ -2100,7 +2100,7 @@ mip_filter_none(const struct sp_sampler_view *sp_sview,
       args.t = t[j];
       args.p = p[j];
       args.face_id = filt_args->faces[j];
-      if (lod[j] < 0.0) {
+      if (lod[j] <= 0.0f) {
          mag_filter(sp_sview, sp_samp, &args, &rgba[0][j]);
       }
       else {