diff options
author | Keith Whitwell <[email protected]> | 2010-05-27 15:48:38 +0100 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2010-06-07 16:34:55 +0100 |
commit | 258f433fffa67710d6424d3703528294133ada65 (patch) | |
tree | eeeaf289beec359187adde8edb684fa17d3d8345 /src/gallium/auxiliary/util | |
parent | ac7c8f7dd3649507f6a5dc4d5222124dd954cbfd (diff) |
util: add util_framebuffer_min_size
Diffstat (limited to 'src/gallium/auxiliary/util')
-rw-r--r-- | src/gallium/auxiliary/util/u_framebuffer.c | 35 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_framebuffer.h | 5 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_framebuffer.c b/src/gallium/auxiliary/util/u_framebuffer.c index bdac12dbca2..768ae9ceb5d 100644 --- a/src/gallium/auxiliary/util/u_framebuffer.c +++ b/src/gallium/auxiliary/util/u_framebuffer.c @@ -109,3 +109,38 @@ util_unreference_framebuffer_state(struct pipe_framebuffer_state *fb) fb->width = fb->height = 0; fb->nr_cbufs = 0; } + + +/* Where multiple sizes are allowed for framebuffer surfaces, find the + * minimum width and height of all bound surfaces. + */ +boolean +util_framebuffer_min_size(const struct pipe_framebuffer_state *fb, + unsigned *width, + unsigned *height) +{ + unsigned w = ~0; + unsigned h = ~0; + unsigned i; + + for (i = 0; i < fb->nr_cbufs; i++) { + w = MIN2(w, fb->cbufs[i]->width); + h = MIN2(h, fb->cbufs[i]->height); + } + + if (fb->zsbuf) { + w = MIN2(w, fb->zsbuf->width); + h = MIN2(h, fb->zsbuf->height); + } + + if (w == ~0) { + *width = 0; + *height = 0; + return FALSE; + } + else { + *width = w; + *height = h; + return TRUE; + } +} diff --git a/src/gallium/auxiliary/util/u_framebuffer.h b/src/gallium/auxiliary/util/u_framebuffer.h index adf1254e1b6..e7dc1e9e41d 100644 --- a/src/gallium/auxiliary/util/u_framebuffer.h +++ b/src/gallium/auxiliary/util/u_framebuffer.h @@ -46,4 +46,9 @@ extern void util_unreference_framebuffer_state(struct pipe_framebuffer_state *fb); +extern boolean +util_framebuffer_min_size(const struct pipe_framebuffer_state *fb, + unsigned *width, + unsigned *height); + #endif /* U_FRAMEBUFFER_H */ |