diff options
Diffstat (limited to 'src/mesa/main/clear.c')
-rw-r--r-- | src/mesa/main/clear.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c index ca0ecd95b8c..0a51a868bae 100644 --- a/src/mesa/main/clear.c +++ b/src/mesa/main/clear.c @@ -30,6 +30,7 @@ +#include "glformats.h" #include "glheader.h" #include "clear.h" #include "context.h" @@ -589,7 +590,20 @@ clear_bufferfv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer, * hook instead. */ const GLclampd clearSave = ctx->Depth.Clear; - ctx->Depth.Clear = *value; + + /* Page 263 (page 279 of the PDF) of the OpenGL 3.0 spec says: + * + * "If buffer is DEPTH, drawbuffer must be zero, and value points + * to the single depth value to clear the depth buffer to. + * 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 is_float_depth = + _mesa_has_depth_float_channel(rb->InternalFormat); + ctx->Depth.Clear = is_float_depth ? *value : SATURATE(*value); + ctx->Driver.Clear(ctx, BUFFER_BIT_DEPTH); ctx->Depth.Clear = clearSave; } |