Files
aurora/lib/gx/attr_fmt.cpp
2026-06-12 12:19:41 -06:00

111 lines
2.0 KiB
C++

#include "gx.hpp"
#include "../internal.hpp"
#include "gx_fmt.hpp"
static aurora::Module Log("aurora::gx");
namespace aurora::gx {
u8 comp_type_size(GXAttr attr, GXCompType type) noexcept {
switch (attr) {
case GX_VA_PNMTXIDX:
case GX_VA_TEX0MTXIDX:
case GX_VA_TEX1MTXIDX:
case GX_VA_TEX2MTXIDX:
case GX_VA_TEX3MTXIDX:
case GX_VA_TEX4MTXIDX:
case GX_VA_TEX5MTXIDX:
case GX_VA_TEX6MTXIDX:
case GX_VA_TEX7MTXIDX:
return 1;
case GX_VA_CLR0:
case GX_VA_CLR1:
switch (type) {
case GX_RGB565:
case GX_RGBA4:
return 2;
case GX_RGB8:
case GX_RGBA6:
return 3;
case GX_RGBX8:
case GX_RGBA8:
return 4;
}
default:
switch (type) {
case GX_U8:
case GX_S8:
return 1;
case GX_U16:
case GX_S16:
return 2;
case GX_F32:
return 4;
default:
Log.fatal("comp_type_size: Unsupported component type {}", type);
}
}
}
u8 comp_cnt_count(GXAttr attr, GXCompCnt cnt) noexcept {
switch (attr) {
case GX_VA_PNMTXIDX:
case GX_VA_TEX0MTXIDX:
case GX_VA_TEX1MTXIDX:
case GX_VA_TEX2MTXIDX:
case GX_VA_TEX3MTXIDX:
case GX_VA_TEX4MTXIDX:
case GX_VA_TEX5MTXIDX:
case GX_VA_TEX6MTXIDX:
case GX_VA_TEX7MTXIDX:
return 1;
case GX_VA_POS:
switch (cnt) {
case GX_POS_XY:
return 2;
case GX_POS_XYZ:
return 3;
default:
break;
}
break;
case GX_VA_NRM:
switch (cnt) {
case GX_NRM_XYZ:
return 3;
case GX_NRM_NBT:
case GX_NRM_NBT3:
return 9;
default:
break;
}
break;
case GX_VA_CLR0:
case GX_VA_CLR1:
return 1;
case GX_VA_TEX0:
case GX_VA_TEX1:
case GX_VA_TEX2:
case GX_VA_TEX3:
case GX_VA_TEX4:
case GX_VA_TEX5:
case GX_VA_TEX6:
case GX_VA_TEX7:
switch (cnt) {
case GX_TEX_S:
return 1;
case GX_TEX_ST:
return 2;
default:
break;
}
break;
default:
break;
}
Log.fatal("comp_cnt_count: Unsupported attr/cnt {} {}", attr, cnt);
}
} // namespace aurora::gx