mirror of
https://github.com/libretro/RetroArch
synced 2025-01-31 06:32:48 +00:00
107 lines
2.3 KiB
C
107 lines
2.3 KiB
C
#include "utils.h"
|
|
#include <math.h>
|
|
#include <string.h>
|
|
|
|
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;
|
|
}
|