#pragma once u32 LoadSpuImage(vfsStream& stream, u32& spu_ep); enum { SYS_SPU_THREAD_GROUP_JOIN_GROUP_EXIT = 0x0001, SYS_SPU_THREAD_GROUP_JOIN_ALL_THREADS_EXIT = 0x0002, SYS_SPU_THREAD_GROUP_JOIN_TERMINATED = 0x0004 }; enum { SYS_SPU_SEGMENT_TYPE_COPY = 0x0001, SYS_SPU_SEGMENT_TYPE_FILL = 0x0002, SYS_SPU_SEGMENT_TYPE_INFO = 0x0004, }; struct sys_spu_thread_group_attribute { be_t name_len; be_t name_addr; be_t type; /* struct {} option; */ be_t ct; // memory container id }; struct sys_spu_thread_attribute { be_t name_addr; be_t name_len; be_t option; }; struct sys_spu_thread_argument { be_t arg1; be_t arg2; be_t arg3; be_t arg4; }; struct sys_spu_image { be_t type; be_t entry_point; be_t segs_addr; //temporarily used as offset of LS image after elf loading be_t nsegs; }; struct sys_spu_segment { be_t type; be_t ls_start; be_t size; be_t src; }; struct SpuGroupInfo { std::vector list; std::atomic lock; std::string m_name; int m_prio; int m_type; int m_ct; SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) : m_name(name) , m_prio(prio) , m_type(type) , m_ct(ct) , lock(0) { num = 256; list.resize(num); for (u32 i = 0; i < num; i++) { list[i] = 0; } } };