gallium/util: make util_copy_framebuffer_state(src=NULL) work

Be more consistent with the other u_inlines util_copy_xyz_state()
helpers and support NULL src.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Rob Clark 2016-06-11 09:21:10 -04:00 committed by Rob Clark
parent 660cd3de4a
commit def044376a

View file

@ -86,22 +86,37 @@ util_copy_framebuffer_state(struct pipe_framebuffer_state *dst,
{ {
unsigned i; unsigned i;
dst->width = src->width; if (src) {
dst->height = src->height; dst->width = src->width;
dst->height = src->height;
dst->samples = src->samples; dst->samples = src->samples;
dst->layers = src->layers; dst->layers = src->layers;
for (i = 0; i < src->nr_cbufs; i++) for (i = 0; i < src->nr_cbufs; i++)
pipe_surface_reference(&dst->cbufs[i], src->cbufs[i]); pipe_surface_reference(&dst->cbufs[i], src->cbufs[i]);
/* Set remaining dest cbuf pointers to NULL */ /* Set remaining dest cbuf pointers to NULL */
for ( ; i < ARRAY_SIZE(dst->cbufs); i++) for ( ; i < ARRAY_SIZE(dst->cbufs); i++)
pipe_surface_reference(&dst->cbufs[i], NULL); pipe_surface_reference(&dst->cbufs[i], NULL);
dst->nr_cbufs = src->nr_cbufs; dst->nr_cbufs = src->nr_cbufs;
pipe_surface_reference(&dst->zsbuf, src->zsbuf); pipe_surface_reference(&dst->zsbuf, src->zsbuf);
} else {
dst->width = 0;
dst->height = 0;
dst->samples = 0;
dst->layers = 0;
for (i = 0 ; i < ARRAY_SIZE(dst->cbufs); i++)
pipe_surface_reference(&dst->cbufs[i], NULL);
dst->nr_cbufs = 0;
pipe_surface_reference(&dst->zsbuf, NULL);
}
} }