#include "utils.h" #include #include 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; } void gpu_free(SceUID uid) { void *mem = NULL; if (sceKernelGetMemBlockBase(uid, &mem) < 0) return; sceGxmUnmapMemory(mem); sceKernelFreeMemBlock(uid); } void *vertex_usse_alloc(unsigned int size, SceUID *uid, unsigned int *usse_offset) { void *mem = NULL; size = ALIGN(size, 4096); *uid = sceKernelAllocMemBlock("vertex_usse", SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, size, NULL); if (sceKernelGetMemBlockBase(*uid, &mem) < 0) return NULL; if (sceGxmMapVertexUsseMemory(mem, size, usse_offset) < 0) return NULL; return mem; } void vertex_usse_free(SceUID uid) { void *mem = NULL; if (sceKernelGetMemBlockBase(uid, &mem) < 0) return; sceGxmUnmapVertexUsseMemory(mem); sceKernelFreeMemBlock(uid); } void *fragment_usse_alloc(unsigned int size, SceUID *uid, unsigned int *usse_offset) { void *mem = NULL; size = ALIGN(size, 4096); *uid = sceKernelAllocMemBlock("fragment_usse", SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, size, NULL); if (sceKernelGetMemBlockBase(*uid, &mem) < 0) return NULL; if (sceGxmMapFragmentUsseMemory(mem, size, usse_offset) < 0) return NULL; return mem; } void fragment_usse_free(SceUID uid) { void *mem = NULL; if (sceKernelGetMemBlockBase(uid, &mem) < 0) return; sceGxmUnmapFragmentUsseMemory(mem); sceKernelFreeMemBlock(uid); } void matrix_init_orthographic(float *m, float left, float right, float bottom, float top, float near, float far) { m[0x0] = 2.0f/(right-left); m[0x4] = 0.0f; m[0x8] = 0.0f; m[0xC] = -(right+left)/(right-left); m[0x1] = 0.0f; m[0x5] = 2.0f/(top-bottom); m[0x9] = 0.0f; m[0xD] = -(top+bottom)/(top-bottom); m[0x2] = 0.0f; m[0x6] = 0.0f; m[0xA] = -2.0f/(far-near); m[0xE] = (far+near)/(far-near); m[0x3] = 0.0f; m[0x7] = 0.0f; m[0xB] = 0.0f; m[0xF] = 1.0f; }