#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