static void *alloc_gpu_mem(uint32_t type, uint32_t size, uint32_t attribs, SceUID *uid) { int ret; void *mem = NULL; if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW) size = align_mem(size, 256 * 1024); else size = align_mem(size, 4 * 1024); *uid = sceKernelAllocMemBlock("gxm", type, size, NULL); printf("MemBlock uid: 0x%08X\n", *uid); ret = sceKernelGetMemBlockBase(*uid, &mem); printf("sceKernelGetMemBlockBase(): 0x%08X\n", ret); printf("MemBlockBase addr: %p\n", mem); if (ret != 0) { return NULL; } ret = sceGxmMapMemory(mem, size, attribs); printf("sceGxmMapMemory(): 0x%08X\n", ret); if (ret != 0) { return NULL; } return mem; }
void *gpu_alloc(SceKernelMemBlockType type, unsigned int size, unsigned int alignment, unsigned int attribs, SceUID *uid) { void *mem; if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW) { size = ALIGN(size, 256*1024); } else { size = ALIGN(size, 4*1024); } *uid = sceKernelAllocMemBlock("gpu_mem", type, size, NULL); if (*uid < 0) return NULL; if (sceKernelGetMemBlockBase(*uid, &mem) < 0) return NULL; if (sceGxmMapMemory(mem, size, attribs) < 0) return NULL; return mem; }