summaryrefslogtreecommitdiff
path: root/src/code/gfxalloc.c
blob: 62b63c5465e86e090f8e799a36ed2928a1b167bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "gfxalloc.h"
#include "alignment.h"

Gfx* gfxopen(Gfx* gfxHead) {
    return gfxHead + 1;
}

Gfx* gfxclose(Gfx* gfxHead, Gfx* gfx) {
    if (gfxHead + 1 != gfx) {
        gSPBranchList(gfxHead, gfx);
        return gfx;
    } else {
        gSPNoOp(gfxHead);
        return gfxHead;
    }
}

void* gfxalloc(Gfx** gfxP, size_t size) {
    u8* ptr;
    Gfx* dst;

    size = ALIGN8(size);
    ptr = (u8*)(*gfxP + 1);
    dst = (Gfx*)(ptr + size);
    gSPBranchList(*gfxP, dst);

    *gfxP = dst;
    return ptr;
}