diff options
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/swrast/s_depth.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c index c70fdeabb5a..abc034c7f24 100644 --- a/src/mesa/swrast/s_depth.c +++ b/src/mesa/swrast/s_depth.c @@ -1296,8 +1296,9 @@ _swrast_clear_depth_buffer( GLcontext *ctx, struct gl_renderbuffer *rb ) * memory, or perhaps the driver mmap'd the zbuffer memory. */ if (rb->DataType == GL_UNSIGNED_SHORT) { - if (width == rb->Width && - (clearValue & 0xff) == ((clearValue >> 8) & 0xff)) { + if ((clearValue & 0xff) == ((clearValue >> 8) & 0xff) && + ((GLushort *) rb->GetPointer(ctx, rb, 0, 0) + width == + (GLushort *) rb->GetPointer(ctx, rb, 0, 1))) { /* optimized case */ GLushort *dst = (GLushort *) rb->GetPointer(ctx, rb, x, y); GLuint len = width * height * sizeof(GLushort); @@ -1328,25 +1329,21 @@ _swrast_clear_depth_buffer( GLcontext *ctx, struct gl_renderbuffer *rb ) else { /* Direct access not possible. Use PutRow to write new values. */ if (rb->DataType == GL_UNSIGNED_SHORT) { - GLushort clearRow[MAX_WIDTH]; - GLint i, j; - for (j = 0; j < width; j++) { - clearRow[j] = clearValue; - } + GLushort clearVal16 = (GLushort) (clearValue & 0xffff); + GLint i; for (i = 0; i < height; i++) { - rb->PutRow(ctx, rb, width, x, y + i, clearRow, NULL); + rb->PutMonoRow(ctx, rb, width, x, y + i, &clearVal16, NULL); } } - else { - GLuint clearRow[MAX_WIDTH]; - GLint i, j; - assert(rb->DataType == GL_UNSIGNED_INT); - for (j = 0; j < width; j++) { - clearRow[j] = clearValue; - } + else if (rb->DataType == GL_UNSIGNED_INT) { + GLint i; + ASSERT(sizeof(clearValue) == sizeof(GLuint)); for (i = 0; i < height; i++) { - rb->PutRow(ctx, rb, width, x, y + i, clearRow, NULL); + rb->PutMonoRow(ctx, rb, width, x, y + i, &clearValue, NULL); } } + else { + _mesa_problem(ctx, "bad depth renderbuffer DataType"); + } } } |