diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/pipe/softpipe/sp_clear.c | 3 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/sp_region.c | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/pipe/softpipe/sp_clear.c b/src/mesa/pipe/softpipe/sp_clear.c index 6e5e510637..caa6ac1c84 100644 --- a/src/mesa/pipe/softpipe/sp_clear.c +++ b/src/mesa/pipe/softpipe/sp_clear.c @@ -55,5 +55,8 @@ softpipe_clear(struct pipe_context *pipe, struct pipe_surface *ps, w = softpipe->framebuffer.cbufs[0]->width; h = softpipe->framebuffer.cbufs[0]->height; + assert(w <= ps->region->pitch); + assert(h <= ps->region->height); + pipe->region_fill(pipe, ps->region, 0, x, y, w, h, clearValue); } diff --git a/src/mesa/pipe/softpipe/sp_region.c b/src/mesa/pipe/softpipe/sp_region.c index 231ea1ea22..25d0a419aa 100644 --- a/src/mesa/pipe/softpipe/sp_region.c +++ b/src/mesa/pipe/softpipe/sp_region.c @@ -33,6 +33,7 @@ #include "sp_context.h" #include "sp_region.h" +#include "pipe/p_util.h" #include "pipe/p_winsys.h" #include "pipe/p_defines.h" @@ -86,7 +87,7 @@ sp_region_alloc(struct pipe_context *pipe, unsigned cpp, unsigned width, unsigned height, unsigned flags) { struct softpipe_context *sp = softpipe_context( pipe ); - struct pipe_region *region = calloc(sizeof(*region), 1); + struct pipe_region *region = CALLOC_STRUCT(pipe_region); const unsigned alignment = 64; region->cpp = cpp; @@ -94,6 +95,8 @@ sp_region_alloc(struct pipe_context *pipe, region->height = height; region->refcount = 1; + assert(region->pitch > 0); + region->buffer = sp->pipe.winsys->buffer_create( sp->pipe.winsys, alignment ); /* NULL data --> just allocate the space */ @@ -233,6 +236,9 @@ sp_region_fill(struct pipe_context *pipe, { unsigned i, j; + assert(dst->pitch > 0); + assert(width <= dst->pitch); + (void)pipe->region_map(pipe, dst); switch (dst->cpp) { |