r600g/compute: align items correctly
authorBruno Jiménez <brunojimen@gmail.com>
Mon, 19 May 2014 16:14:56 +0000 (18:14 +0200)
committerTom Stellard <thomas.stellard@amd.com>
Tue, 10 Jun 2014 19:29:57 +0000 (15:29 -0400)
Now, items whose size is a multiple of 1024 dw won't leave
1024 dw between itself and the following item

The rest of the cases is left as it was

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/r600/compute_memory_pool.c

index 01851add8cf967960893f0d2549dcb1d3b836132..2050f289475480ecbcc63734176f267ba7aa595e 100644 (file)
@@ -30,6 +30,7 @@
 #include "util/u_transfer.h"
 #include "util/u_surface.h"
 #include "util/u_pack_color.h"
+#include "util/u_math.h"
 #include "util/u_memory.h"
 #include "util/u_inlines.h"
 #include "util/u_framebuffer.h"
@@ -41,6 +42,7 @@
 #include "evergreen_compute_internal.h"
 #include <inttypes.h>
 
+#define ITEM_ALIGNMENT 1024
 /**
  * Creates a new pool
  */
@@ -112,8 +114,7 @@ int64_t compute_memory_prealloc_chunk(
                                return last_end;
                        }
 
-                       last_end = item->start_in_dw + item->size_in_dw;
-                       last_end += (1024 - last_end % 1024);
+                       last_end = item->start_in_dw + align(item->size_in_dw, ITEM_ALIGNMENT);
                }
        }
 
@@ -177,7 +178,7 @@ int compute_memory_grow_pool(struct compute_memory_pool* pool,
                if (pool->shadow == NULL)
                        return -1;
        } else {
-               new_size_in_dw += 1024 - (new_size_in_dw % 1024);
+               new_size_in_dw = align(new_size_in_dw, ITEM_ALIGNMENT);
 
                COMPUTE_DBG(pool->screen, "  Aligned size = %d (%d bytes)\n",
                        new_size_in_dw, new_size_in_dw * 4);
@@ -323,7 +324,7 @@ int compute_memory_finalize_pending(struct compute_memory_pool* pool,
                                need = pool->size_in_dw / 10;
                        }
 
-                       need += 1024 - (need % 1024);
+                       need = align(need, ITEM_ALIGNMENT);
 
                        err = compute_memory_grow_pool(pool,
                                        pipe,