Revert "[Impeller] change default sampler descriptor to use nearest mip level and remove kNone (#40460)" (#40481)

Revert "[Impeller] change default sampler descriptor to use nearest mip level and remove kNone"
diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc
index 50d09c9..aab4fbd 100644
--- a/impeller/aiks/aiks_unittests.cc
+++ b/impeller/aiks/aiks_unittests.cc
@@ -128,7 +128,8 @@
         Entity::TileMode::kClamp, Entity::TileMode::kRepeat,
         Entity::TileMode::kMirror, Entity::TileMode::kDecal};
     const char* mip_filter_names[] = {"None", "Nearest", "Linear"};
-    const MipFilter mip_filters[] = {MipFilter::kNearest, MipFilter::kLinear};
+    const MipFilter mip_filters[] = {MipFilter::kNone, MipFilter::kNearest,
+                                     MipFilter::kLinear};
     const char* min_mag_filter_names[] = {"Nearest", "Linear"};
     const MinMagFilter min_mag_filters[] = {MinMagFilter::kNearest,
                                             MinMagFilter::kLinear};
diff --git a/impeller/entity/contents/text_contents.cc b/impeller/entity/contents/text_contents.cc
index 5d420db..5f675eb 100644
--- a/impeller/entity/contents/text_contents.cc
+++ b/impeller/entity/contents/text_contents.cc
@@ -114,7 +114,7 @@
     sampler_desc.min_filter = MinMagFilter::kLinear;
     sampler_desc.mag_filter = MinMagFilter::kLinear;
   }
-  sampler_desc.mip_filter = MipFilter::kNearest;
+  sampler_desc.mip_filter = MipFilter::kNone;
 
   typename FS::FragInfo frag_info;
   frag_info.text_color = ToVector(color.Premultiply());
diff --git a/impeller/renderer/backend/gles/sampler_gles.cc b/impeller/renderer/backend/gles/sampler_gles.cc
index 47f2ce5..72fea36 100644
--- a/impeller/renderer/backend/gles/sampler_gles.cc
+++ b/impeller/renderer/backend/gles/sampler_gles.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include "impeller/renderer/backend/gles/sampler_gles.h"
-#include <iostream>
 
 #include "impeller/renderer/backend/gles/formats_gles.h"
 #include "impeller/renderer/backend/gles/proc_table_gles.h"
@@ -20,19 +19,15 @@
   return true;
 }
 
-static GLint ToParam(MinMagFilter minmag_filter,
-                     std::optional<MipFilter> mip_filter = std::nullopt) {
-  if (!mip_filter.has_value()) {
-    switch (minmag_filter) {
-      case MinMagFilter::kNearest:
-        return GL_NEAREST;
-      case MinMagFilter::kLinear:
-        return GL_LINEAR;
-    }
-    FML_UNREACHABLE();
-  }
-
-  switch (mip_filter.value()) {
+static GLint ToParam(MinMagFilter minmag_filter, MipFilter mip_filter) {
+  switch (mip_filter) {
+    case MipFilter::kNone:
+      switch (minmag_filter) {
+        case MinMagFilter::kNearest:
+          return GL_NEAREST;
+        case MinMagFilter::kLinear:
+          return GL_LINEAR;
+      }
     case MipFilter::kNearest:
       switch (minmag_filter) {
         case MinMagFilter::kNearest:
@@ -74,17 +69,12 @@
   if (!target.has_value()) {
     return false;
   }
+
   const auto& desc = GetDescriptor();
-
-  std::optional<MipFilter> mip_filter = std::nullopt;
-  if (texture.GetTextureDescriptor().mip_count > 1) {
-    mip_filter = desc.mip_filter;
-  }
-
   gl.TexParameteri(target.value(), GL_TEXTURE_MIN_FILTER,
-                   ToParam(desc.min_filter, mip_filter));
+                   ToParam(desc.min_filter, desc.mip_filter));
   gl.TexParameteri(target.value(), GL_TEXTURE_MAG_FILTER,
-                   ToParam(desc.mag_filter));
+                   ToParam(desc.mag_filter, MipFilter::kNone));
   gl.TexParameteri(target.value(), GL_TEXTURE_WRAP_S,
                    ToAddressMode(desc.width_address_mode));
   gl.TexParameteri(target.value(), GL_TEXTURE_WRAP_T,
diff --git a/impeller/renderer/backend/metal/formats_mtl.h b/impeller/renderer/backend/metal/formats_mtl.h
index 5330117..85a9423 100644
--- a/impeller/renderer/backend/metal/formats_mtl.h
+++ b/impeller/renderer/backend/metal/formats_mtl.h
@@ -332,6 +332,8 @@
 
 constexpr MTLSamplerMipFilter ToMTLSamplerMipFilter(MipFilter filter) {
   switch (filter) {
+    case MipFilter::kNone:
+      return MTLSamplerMipFilterNotMipmapped;
     case MipFilter::kNearest:
       return MTLSamplerMipFilterNearest;
     case MipFilter::kLinear:
diff --git a/impeller/renderer/backend/vulkan/formats_vk.h b/impeller/renderer/backend/vulkan/formats_vk.h
index d2f532f..83ea4ac 100644
--- a/impeller/renderer/backend/vulkan/formats_vk.h
+++ b/impeller/renderer/backend/vulkan/formats_vk.h
@@ -225,6 +225,8 @@
       return vk::SamplerMipmapMode::eNearest;
     case MipFilter::kLinear:
       return vk::SamplerMipmapMode::eLinear;
+    case MipFilter::kNone:
+      return vk::SamplerMipmapMode::eNearest;
   }
 
   FML_UNREACHABLE();
diff --git a/impeller/renderer/formats.h b/impeller/renderer/formats.h
index 817b065..170a068 100644
--- a/impeller/renderer/formats.h
+++ b/impeller/renderer/formats.h
@@ -247,6 +247,8 @@
 };
 
 enum class MipFilter {
+  /// Always sample from mip level 0. Other mip levels are ignored.
+  kNone,
   /// Sample from the nearest mip level.
   kNearest,
   /// Sample from the two nearest mip levels and linearly interpolate between
diff --git a/impeller/renderer/renderer_unittests.cc b/impeller/renderer/renderer_unittests.cc
index d8a44de..fa2d823 100644
--- a/impeller/renderer/renderer_unittests.cc
+++ b/impeller/renderer/renderer_unittests.cc
@@ -724,14 +724,15 @@
 
   bool first_frame = true;
   Renderer::RenderCallback callback = [&](RenderTarget& render_target) {
-    const char* mip_filter_names[] = {"Nearest", "Linear"};
-    const MipFilter mip_filters[] = {MipFilter::kNearest, MipFilter::kLinear};
+    const char* mip_filter_names[] = {"None", "Nearest", "Linear"};
+    const MipFilter mip_filters[] = {MipFilter::kNone, MipFilter::kNearest,
+                                     MipFilter::kLinear};
     const char* min_filter_names[] = {"Nearest", "Linear"};
     const MinMagFilter min_filters[] = {MinMagFilter::kNearest,
                                         MinMagFilter::kLinear};
 
     // UI state.
-    static int selected_mip_filter = 1;
+    static int selected_mip_filter = 2;
     static int selected_min_filter = 0;
     static float lod = 4.5;
 
diff --git a/impeller/renderer/sampler_descriptor.h b/impeller/renderer/sampler_descriptor.h
index 60678da..01d0f29 100644
--- a/impeller/renderer/sampler_descriptor.h
+++ b/impeller/renderer/sampler_descriptor.h
@@ -18,7 +18,7 @@
 struct SamplerDescriptor final : public Comparable<SamplerDescriptor> {
   MinMagFilter min_filter = MinMagFilter::kNearest;
   MinMagFilter mag_filter = MinMagFilter::kNearest;
-  MipFilter mip_filter = MipFilter::kNearest;
+  MipFilter mip_filter = MipFilter::kNone;
 
   SamplerAddressMode width_address_mode = SamplerAddressMode::kClampToEdge;
   SamplerAddressMode height_address_mode = SamplerAddressMode::kClampToEdge;
diff --git a/impeller/scene/geometry.cc b/impeller/scene/geometry.cc
index ed6eda6..7abc74f 100644
--- a/impeller/scene/geometry.cc
+++ b/impeller/scene/geometry.cc
@@ -246,7 +246,7 @@
   SamplerDescriptor sampler_desc;
   sampler_desc.min_filter = MinMagFilter::kNearest;
   sampler_desc.mag_filter = MinMagFilter::kNearest;
-  sampler_desc.mip_filter = MipFilter::kNearest;
+  sampler_desc.mip_filter = MipFilter::kNone;
   sampler_desc.width_address_mode = SamplerAddressMode::kRepeat;
   sampler_desc.label = "NN Repeat";