aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2020-05-08 16:13:59 -0700
committerMarge Bot <[email protected]>2020-05-12 18:16:48 +0000
commit6a49d9c396b61ef2556afba59c495c45bfab0202 (patch)
tree5a9b2fe5050bebf06806ee697fe5a22fe833deab /src
parent96b5a70f45612642265d7192e04e90206a4c260f (diff)
freedreno/gmem: add div_align() helper
Signed-off-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4976>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/freedreno/freedreno_gmem.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.c b/src/gallium/drivers/freedreno/freedreno_gmem.c
index 382eb59a384..7110e2a7485 100644
--- a/src/gallium/drivers/freedreno/freedreno_gmem.c
+++ b/src/gallium/drivers/freedreno/freedreno_gmem.c
@@ -118,6 +118,12 @@ static uint32_t bin_width(struct fd_screen *screen)
return 512;
}
+static unsigned
+div_align(unsigned num, unsigned denom, unsigned al)
+{
+ return align(DIV_ROUND_UP(num, denom), al);
+}
+
static uint32_t
total_size(struct gmem_key *key, uint32_t bin_w, uint32_t bin_h,
struct fd_gmem_stateobj *gmem)
@@ -166,15 +172,15 @@ gmem_stateobj_init(struct fd_screen *screen, struct gmem_key *key)
uint32_t tpp_x, tpp_y;
int tile_n[npipes];
- bin_w = align(key->width, gmem_alignw);
- bin_h = align(key->height, gmem_alignh);
+ bin_w = div_align(key->width, 1, gmem_alignw);
+ bin_h = div_align(key->height, 1, gmem_alignh);
/* first, find a bin width that satisfies the maximum width
* restrictions:
*/
while (bin_w > max_width) {
nbins_x++;
- bin_w = align(key->width / nbins_x, gmem_alignw);
+ bin_w = div_align(key->width, nbins_x, gmem_alignw);
}
if (fd_mesa_debug & FD_DBG_MSGS) {
@@ -191,10 +197,10 @@ gmem_stateobj_init(struct fd_screen *screen, struct gmem_key *key)
while (total_size(key, bin_w, bin_h, gmem) > gmem_size) {
if (bin_w > bin_h) {
nbins_x++;
- bin_w = align(key->width / nbins_x, gmem_alignw);
+ bin_w = div_align(key->width, nbins_x, gmem_alignw);
} else {
nbins_y++;
- bin_h = align(key->height / nbins_y, gmem_alignh);
+ bin_h = div_align(key->height, nbins_y, gmem_alignh);
}
}