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:
parent
7daba1fe65
commit
26c533f167
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue