2#include <c3d/attribs.h>
6 memset(info, 0,
sizeof(*info));
7 info->flags[1] = 0xFFF << 16;
12 if (info->attrCount == 12)
return -1;
13 int id = info->attrCount++;
14 if (regId < 0) regId = id;
16 info->flags[0] |= GPU_ATTRIBFMT(
id,
count, format);
18 info->flags[1] |= GPU_ATTRIBFMT(
id-8,
count, format);
20 info->flags[1] = (info->flags[1] &~ (0xF0000000 | BIT(
id+16))) | (
id << 28);
21 info->permutation |= regId << (
id*4);
27 if (info->attrCount == 12)
return -1;
28 int id = info->attrCount++;
29 if (regId < 0) regId = id;
31 info->flags[1] = (info->flags[1] &~ 0xF0000000) | (
id << 28);
32 info->permutation |= regId << (
id*4);
55 memcpy(&ctx->
attrInfo, info,
sizeof(*info));
61 GPUCMD_AddIncrementalWrites(GPUREG_ATTRIBBUFFERS_FORMAT_LOW, (u32*)info->flags,
sizeof(info->flags)/
sizeof(u32));
62 GPUCMD_AddMaskedWrite(GPUREG_VSH_INPUTBUFFER_CONFIG, 0xB, 0xA0000000 | (info->attrCount - 1));
63 GPUCMD_AddWrite(GPUREG_VSH_NUM_ATTR, info->attrCount - 1);
64 GPUCMD_AddIncrementalWrites(GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW, (u32*)&info->permutation, 2);
int AttrInfo_AddLoader(C3D_AttrInfo *info, int regId, GPU_FORMATS format, int count)
void C3D_SetAttrInfo(C3D_AttrInfo *info)
int AttrInfo_AddFixed(C3D_AttrInfo *info, int regId)
void AttrInfo_Init(C3D_AttrInfo *info)
void C3Di_AttrInfoBind(C3D_AttrInfo *info)
C3D_AttrInfo * C3D_GetAttrInfo(void)