summaryrefslogtreecommitdiff
path: root/arm9/lib/NitroSDK/src/GX_g3.c
blob: 45b6b11baba59aa1665477c23f293a5d1f182fbc (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
30
31
32
33
34
35
#include "global.h"
#include "gx.h"


ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){
    displaylist->length = r2;
    displaylist->bottom = r1;
    displaylist->curr_cmd = r1;
    displaylist->curr_param = (u32 *)r1 + 1;
    displaylist->param0_cmd_flg = 0x0;
}

ARM_FUNC s32 G3_EndMakeDL(struct GXDLInfo *displaylist){
    if (displaylist->bottom == (u32 *)displaylist->curr_cmd)
        return 0;
    //pads the buffer with 0 to 4byte alignment if needed
    switch((u32)displaylist->curr_cmd & 0x3)
    {
    case 0:
        return displaylist->curr_cmd - (u8 *)displaylist->bottom;
    case 1:
        *displaylist->curr_cmd++ = 0x0;
    case 2:
        *displaylist->curr_cmd++ = 0x0;
    case 3:
        *displaylist->curr_cmd++ = 0x0;
    }
    if (displaylist->param0_cmd_flg)
    {
        *displaylist->curr_param++ = 0x0;
        displaylist->param0_cmd_flg = 0x0;
    }
    displaylist->curr_cmd = (u8 *)displaylist->curr_param;
    return displaylist->curr_cmd - (u8 *)displaylist->bottom;
}