mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
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>
(cherry picked from commit 26c533f167)
This commit is contained in:
parent
a324d79e5e
commit
0d427406ce
2 changed files with 20 additions and 1 deletions
|
|
@ -805,7 +805,7 @@
|
|||
"description": "gallium/util: Add pixel->blocks box helper",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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…
Add table
Reference in a new issue