Switch to yalloc
This commit is contained in:
parent
ddf23974bd
commit
425a0c2af1
33
GL/texture.c
33
GL/texture.c
|
@ -9,8 +9,15 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "../include/glext.h"
|
#include "../include/glext.h"
|
||||||
#include "../include/glkos.h"
|
#include "../include/glkos.h"
|
||||||
|
|
||||||
|
#include "yalloc/yalloc.h"
|
||||||
|
|
||||||
#include <kos/string.h>
|
#include <kos/string.h>
|
||||||
|
|
||||||
|
/* We always leave this amount of vram unallocated to prevent
|
||||||
|
* issues with the allocator */
|
||||||
|
#define PVR_MEM_BUFFER_SIZE (64 * 1024)
|
||||||
|
|
||||||
#define CLAMP_U (1<<1)
|
#define CLAMP_U (1<<1)
|
||||||
#define CLAMP_V (1<<0)
|
#define CLAMP_V (1<<0)
|
||||||
|
|
||||||
|
@ -26,6 +33,9 @@ static GLboolean BANKS_USED[4]; // Each time a 256 colour bank is used, this is
|
||||||
static GLboolean SUBBANKS_USED[4][16]; // 4 counts of the used 16 colour banks within the 256 ones
|
static GLboolean SUBBANKS_USED[4][16]; // 4 counts of the used 16 colour banks within the 256 ones
|
||||||
static GLenum INTERNAL_PALETTE_FORMAT = GL_RGBA4;
|
static GLenum INTERNAL_PALETTE_FORMAT = GL_RGBA4;
|
||||||
|
|
||||||
|
static void* YALLOC_BASE = NULL;
|
||||||
|
static size_t YALLOC_SIZE = 0;
|
||||||
|
|
||||||
static TexturePalette* _initTexturePalette() {
|
static TexturePalette* _initTexturePalette() {
|
||||||
TexturePalette* palette = (TexturePalette*) malloc(sizeof(TexturePalette));
|
TexturePalette* palette = (TexturePalette*) malloc(sizeof(TexturePalette));
|
||||||
assert(palette);
|
assert(palette);
|
||||||
|
@ -307,6 +317,11 @@ GLubyte _glInitTextures() {
|
||||||
|
|
||||||
memset((void*) BANKS_USED, 0x0, sizeof(BANKS_USED));
|
memset((void*) BANKS_USED, 0x0, sizeof(BANKS_USED));
|
||||||
memset((void*) SUBBANKS_USED, 0x0, sizeof(SUBBANKS_USED));
|
memset((void*) SUBBANKS_USED, 0x0, sizeof(SUBBANKS_USED));
|
||||||
|
|
||||||
|
size_t vram_free = pvr_mem_available();
|
||||||
|
YALLOC_SIZE = vram_free - PVR_MEM_BUFFER_SIZE; /* Take all but 64kb VRAM */
|
||||||
|
YALLOC_BASE = pvr_mem_malloc(YALLOC_SIZE);
|
||||||
|
yalloc_init(YALLOC_BASE, YALLOC_SIZE);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,7 +408,7 @@ void APIENTRY glDeleteTextures(GLsizei n, GLuint *textures) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(txr->data) {
|
if(txr->data) {
|
||||||
pvr_mem_free(txr->data);
|
yalloc_free(YALLOC_BASE, txr->data);
|
||||||
txr->data = NULL;
|
txr->data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -594,13 +609,15 @@ void APIENTRY glCompressedTexImage2DARB(GLenum target,
|
||||||
active->isCompressed = GL_TRUE;
|
active->isCompressed = GL_TRUE;
|
||||||
|
|
||||||
/* Odds are slim new data is same size as old, so free always */
|
/* Odds are slim new data is same size as old, so free always */
|
||||||
if(active->data)
|
if(active->data) {
|
||||||
pvr_mem_free(active->data);
|
yalloc_free(YALLOC_BASE, active->data);
|
||||||
|
}
|
||||||
|
|
||||||
active->data = pvr_mem_malloc(imageSize);
|
active->data = yalloc_alloc(YALLOC_BASE, imageSize);
|
||||||
|
|
||||||
if(data)
|
if(data) {
|
||||||
sq_cpy(active->data, data, imageSize);
|
sq_cpy(active->data, data, imageSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GLint _cleanInternalFormat(GLint internalFormat) {
|
static GLint _cleanInternalFormat(GLint internalFormat) {
|
||||||
|
@ -897,7 +914,7 @@ GLboolean _glIsMipmapComplete(const TextureObject* obj) {
|
||||||
}
|
}
|
||||||
|
|
||||||
GLsizei i = 0;
|
GLsizei i = 0;
|
||||||
for(; i < obj->mipmapCount; ++i) {
|
for(; i < (GLubyte) obj->mipmapCount; ++i) {
|
||||||
if((obj->mipmap & (1 << i)) == 0) {
|
if((obj->mipmap & (1 << i)) == 0) {
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -924,13 +941,13 @@ void _glAllocateSpaceForMipmaps(TextureObject* active) {
|
||||||
memcpy(temp, active->data, size);
|
memcpy(temp, active->data, size);
|
||||||
|
|
||||||
/* Free the PVR data */
|
/* Free the PVR data */
|
||||||
pvr_mem_free(active->data);
|
yalloc_free(YALLOC_BASE, active->data);
|
||||||
active->data = NULL;
|
active->data = NULL;
|
||||||
|
|
||||||
/* Figure out how much room to allocate for mipmaps */
|
/* Figure out how much room to allocate for mipmaps */
|
||||||
GLuint bytes = _glGetMipmapDataSize(active);
|
GLuint bytes = _glGetMipmapDataSize(active);
|
||||||
|
|
||||||
active->data = pvr_mem_malloc(bytes);
|
active->data = yalloc_alloc(YALLOC_BASE, bytes);
|
||||||
|
|
||||||
/* If there was existing data, then copy it where it should go */
|
/* If there was existing data, then copy it where it should go */
|
||||||
memcpy(_glGetMipmapLocation(active, 0), temp, size);
|
memcpy(_glGetMipmapLocation(active, 0), temp, size);
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#define GLDC_VERSION "1.2.0alpha"
|
|
Loading…
Reference in New Issue
Block a user