gallium/util: Add pixel->blocks box helper

There is a lot of unit confusion in Gallium due to pixels versus blocks
matching only with uncompressed textures. Add a helper to do a common
pixels->blocks unit conversion required in multiple drivers.

v2: Rename dst->blocks, src->pixels to avoid confusion about the units
to casual readers (Mike).

Note to mesa-stable maintainers: this is marked as Cc: mesa-stable so
the next patch (a set of bug fixes for Lima and Panfrost) can be
backported. It's not a bug fix in its own right, of course.

Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Reviewed-by: Emma Anholt <emma@anholt.net> [v1]
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14370>
This commit is contained in:
Alyssa Rosenzweig 2022-01-04 16:16:06 -05:00 committed by Marge Bot
parent 7daba1fe65
commit 26c533f167
1 changed files with 19 additions and 0 deletions

View File

@ -3,6 +3,7 @@
#include "pipe/p_state.h"
#include "util/u_math.h"
#include "util/format/u_format.h"
static inline void
u_box_1d(unsigned x, unsigned w, struct pipe_box *box)
@ -239,4 +240,22 @@ u_box_minify_3d(struct pipe_box *dst,
dst->depth = MAX2(src->depth >> l, 1);
}
/* Converts a box specified in pixels to an equivalent box specified
* in blocks, where the boxes represent a region-of-interest of an image with
* the given format. This is trivial (a copy) for uncompressed formats.
*/
static inline void
u_box_pixels_to_blocks(struct pipe_box *blocks,
const struct pipe_box *pixels, enum pipe_format format)
{
u_box_3d(
pixels->x / util_format_get_blockwidth(format),
pixels->y / util_format_get_blockheight(format),
pixels->z,
DIV_ROUND_UP(pixels->width, util_format_get_blockwidth(format)),
DIV_ROUND_UP(pixels->height, util_format_get_blockheight(format)),
pixels->depth,
blocks);
}
#endif