mesa: Clamp some depth values in glClearBufferfi

OpenGL 3.0 spec, section 4.2.3 "Clearing the Buffers":

   depth and stencil are the values to clear the depth and stencil
   buffers to, respectively. Clamping and type conversion for
   fixed-point depth buffers are performed in the same fashion as for
   ClearDepth.

Enables iris to pass the clearbuffer-depth-stencil piglit test.

Cc: mesa-stable
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7410>
(cherry picked from commit 2e713313a29422b38435c91f8277c1893fcad095)
diff --git a/.pick_status.json b/.pick_status.json
index ad51376..2396e4e 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -1084,7 +1084,7 @@
         "description": "mesa: Clamp some depth values in glClearBufferfi",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c
index 0a51a86..ba978a0 100644
--- a/src/mesa/main/clear.c
+++ b/src/mesa/main/clear.c
@@ -738,8 +738,20 @@
       const GLclampd clearDepthSave = ctx->Depth.Clear;
       const GLuint clearStencilSave = ctx->Stencil.Clear;
 
-      /* set new clear values */
-      ctx->Depth.Clear = depth;
+      /* set new clear values
+       *
+       * Page 263 (page 279 of the PDF) of the OpenGL 3.0 spec says:
+       *
+       *     "depth and stencil are the values to clear the depth and stencil
+       *     buffers to, respectively. Clamping and type conversion for
+       *     fixed-point depth buffers are performed in the same fashion as
+       *     for ClearDepth."
+       */
+      const struct gl_renderbuffer *rb =
+         ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer;
+      const bool has_float_depth = rb &&
+         _mesa_has_depth_float_channel(rb->InternalFormat);
+      ctx->Depth.Clear = has_float_depth ? depth : SATURATE(depth);
       ctx->Stencil.Clear = stencil;
 
       /* clear buffers */