diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c index 0a51a868bae..ba978a06ad6 100644 --- a/src/mesa/main/clear.c +++ b/src/mesa/main/clear.c @@ -738,8 +738,20 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, GLint drawbuffer, 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 */