turnip: fix tile layout logic
authorJonathan Marek <jonathan@marek.ca>
Thu, 12 Dec 2019 21:55:15 +0000 (16:55 -0500)
committerJonathan Marek <jonathan@marek.ca>
Fri, 13 Dec 2019 01:33:17 +0000 (20:33 -0500)
Use DIV_ROUND_UP and stop trying to increase the tile_count width/height
once tile_align_w/tile_align_h are reached.

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/freedreno/vulkan/tu_cmd_buffer.c

index c0c308ed31bf965a92107456c36f5f63e997e0bf..3af7c13ed095c641ec9a53f54fad0c4421d5f1f4 100644 (file)
@@ -170,14 +170,16 @@ tu_tiling_config_update_tile_layout(struct tu_tiling_config *tiling,
 
    /* do not exceed gmem size */
    while (tu_tiling_config_update_gmem_layout(tiling, dev) != VK_SUCCESS) {
-      if (tiling->tile0.extent.width > tiling->tile0.extent.height) {
+      if (tiling->tile0.extent.width > MAX2(tile_align_w, tiling->tile0.extent.height)) {
          tiling->tile_count.width++;
          tiling->tile0.extent.width =
-            align(ra_width / tiling->tile_count.width, tile_align_w);
+            align(DIV_ROUND_UP(ra_width, tiling->tile_count.width), tile_align_w);
       } else {
+         /* if this assert fails then layout is impossible.. */
+         assert(tiling->tile0.extent.height > tile_align_h);
          tiling->tile_count.height++;
          tiling->tile0.extent.height =
-            align(ra_height / tiling->tile_count.height, tile_align_h);
+            align(DIV_ROUND_UP(ra_height, tiling->tile_count.height), tile_align_h);
       }
    }
 }