summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/ir3/ir3.c
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2016-04-24 14:01:58 -0400
committerRob Clark <[email protected]>2016-04-25 17:09:09 -0400
commit8fe20762433dafc8d6df3a14db7074c1ddf99120 (patch)
treeafb848d8b8899a3752bc6c9154213c3e53ee6ae1 /src/gallium/drivers/freedreno/ir3/ir3.c
parent27cf3b00527b29da2df6cf2ac9f1779187f203d9 (diff)
freedreno/ir3: convert over to ralloc
The home-grown heap scheme (which is ultra-simple but probably not good to always allocate and memset such a chunk of memory up front) was a remnant of fdre (where the ir originally came from). But since we have ralloc in mesa, lets just use that instead. Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3/ir3.c')
-rw-r--r--src/gallium/drivers/freedreno/ir3/ir3.c41
1 files changed, 6 insertions, 35 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.c b/src/gallium/drivers/freedreno/ir3/ir3.c
index f512142c535..1406856a4a0 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3.c
@@ -30,48 +30,23 @@
#include <stdbool.h>
#include <errno.h>
+#include "util/ralloc.h"
+
#include "freedreno_util.h"
#include "instr-a3xx.h"
-#define CHUNK_SZ 1020
-
-struct ir3_heap_chunk {
- struct ir3_heap_chunk *next;
- uint32_t heap[CHUNK_SZ];
-};
-
-static void grow_heap(struct ir3 *shader)
-{
- struct ir3_heap_chunk *chunk = calloc(1, sizeof(*chunk));
- chunk->next = shader->chunk;
- shader->chunk = chunk;
- shader->heap_idx = 0;
-}
-
/* simple allocator to carve allocations out of an up-front allocated heap,
* so that we can free everything easily in one shot.
*/
void * ir3_alloc(struct ir3 *shader, int sz)
{
- void *ptr;
-
- sz = align(sz, 4) / 4;
-
- if ((shader->heap_idx + sz) > CHUNK_SZ)
- grow_heap(shader);
-
- ptr = &shader->chunk->heap[shader->heap_idx];
- shader->heap_idx += sz;
-
- return ptr;
+ return ralloc_size(shader, sz);
}
struct ir3 * ir3_create(struct ir3_compiler *compiler,
unsigned nin, unsigned nout)
{
- struct ir3 *shader = calloc(1, sizeof(struct ir3));
-
- grow_heap(shader);
+ struct ir3 *shader = ralloc(compiler, struct ir3);
shader->compiler = compiler;
shader->ninputs = nin;
@@ -88,17 +63,13 @@ struct ir3 * ir3_create(struct ir3_compiler *compiler,
void ir3_destroy(struct ir3 *shader)
{
- while (shader->chunk) {
- struct ir3_heap_chunk *chunk = shader->chunk;
- shader->chunk = chunk->next;
- free(chunk);
- }
+ /* TODO convert the dynamic array to ralloc too: */
free(shader->indirects);
free(shader->predicates);
free(shader->baryfs);
free(shader->keeps);
free(shader->astc_srgb);
- free(shader);
+ ralloc_free(shader);
}
#define iassert(cond) do { \