This commit is contained in:
Hayden K 2019-03-03 14:08:16 -05:00
parent 4dadbcb20d
commit 3553fdf19d
11 changed files with 65 additions and 34 deletions

View File

@ -2,7 +2,7 @@
#define CONFIG_H
#define MAX_TEXTURE_COUNT 512
#define MAX_TEXTURE_COUNT 512 //@Todo: or 1088 explain why increased. mrneo240
#endif // CONFIG_H

View File

@ -1288,7 +1288,7 @@ void APIENTRY glEnableClientState(GLenum cap) {
(ENABLED_VERTEX_ATTRIBUTES |= UV_ENABLED_FLAG);
break;
default:
_glKosThrowError(GL_INVALID_ENUM, "glEnableClientState");
_glKosThrowError(GL_INVALID_ENUM, __func__);
}
}
@ -1311,7 +1311,7 @@ void APIENTRY glDisableClientState(GLenum cap) {
(ENABLED_VERTEX_ATTRIBUTES &= ~UV_ENABLED_FLAG);
break;
default:
_glKosThrowError(GL_INVALID_ENUM, "glDisableClientState");
_glKosThrowError(GL_INVALID_ENUM, __func__);
}
}
@ -1324,7 +1324,7 @@ void APIENTRY glClientActiveTextureARB(GLenum texture) {
//TRACE();
if(texture < GL_TEXTURE0_ARB || texture > GL_TEXTURE0_ARB + MAX_TEXTURE_UNITS) {
_glKosThrowError(GL_INVALID_ENUM, "glClientActiveTextureARB");
_glKosThrowError(GL_INVALID_ENUM, __func__);
}
if(_glKosHasError()) {

View File

@ -57,6 +57,7 @@ void _glKosPrintError() {
}
fprintf(stderr, "GL ERROR: %s when calling %s\n", _glErrorEnumAsString(last_error), error_function);
_glKosResetError();
}
GLenum glGetError(void) {

View File

@ -94,24 +94,28 @@ void APIENTRY glKosSwapBuffers() {
TRACE();
profiler_push(__func__);
PROFILER_PUSH(__func__);
pvr_wait_ready();
pvr_scene_begin();
QACR0 = QACRTA;
QACR1 = QACRTA;
pvr_list_begin(PVR_LIST_OP_POLY);
pvr_list_submit(OP_LIST.vector.data, OP_LIST.vector.size);
printf("OP_POLY: data: %p size:%d\n",OP_LIST.vector.data,OP_LIST.vector.size);
pvr_list_finish();
pvr_list_begin(PVR_LIST_PT_POLY);
pvr_list_submit(PT_LIST.vector.data, PT_LIST.vector.size);
printf("PT_POLY: data: %p size:%d\n",PT_LIST.vector.data,PT_LIST.vector.size);
pvr_list_finish();
pvr_list_begin(PVR_LIST_TR_POLY);
pvr_list_submit(TR_LIST.vector.data, TR_LIST.vector.size);
printf("TR_POLY: data: %p size:%d\n",TR_LIST.vector.data,TR_LIST.vector.size);
pvr_list_finish();
pvr_scene_finish();
@ -119,11 +123,12 @@ void APIENTRY glKosSwapBuffers() {
aligned_vector_clear(&PT_LIST.vector);
aligned_vector_clear(&TR_LIST.vector);
profiler_checkpoint("scene");
profiler_pop();
PROFILER_CHECKPOINT("scene");
PROFILER_POP();
#ifdef PROFILER_COMPILE
if(frame_count++ > 100) {
profiler_print_stats();
frame_count = 0;
}
#endif
}

View File

@ -186,7 +186,7 @@ GLboolean _glCalculateAverageTexel(const GLubyte* src, const GLuint srcWidth, co
*d1 = (r << 11 | g << 5 | b);
} else {
fprintf(stderr, "ERROR: Unsupported PVR format for mipmap generation");
_glKosThrowError(GL_INVALID_OPERATION, "glGenerateMipmapEXT");
_glKosThrowError(GL_INVALID_OPERATION, __func__);
_glKosPrintError();
return GL_FALSE;
}

View File

@ -9,7 +9,7 @@
#define DEG2RAD (0.01745329251994329576923690768489)
/* Viewport mapping */
static GLfloat gl_viewport_scale[3], gl_viewport_offset[3];
//static GLfloat gl_viewport_scale[3], gl_viewport_offset[3];
/* Depth range */
static GLclampf gl_depthrange_near, gl_depthrange_far;
@ -33,6 +33,10 @@ static const matrix_t IDENTITY = {
void APIENTRY glDepthRange(GLclampf n, GLclampf f);
matrix_t* _glGetModelViewMatrix() {
return (matrix_t*) stack_top(&MATRIX_STACKS[0]);
}
matrix_t* _glGetProjectionMatrix() {
return (matrix_t*) stack_top(&MATRIX_STACKS[1]);
}

View File

@ -6,7 +6,7 @@
#include "../containers/named_array.h"
#include "./clip.h"
#define TRACE_ENABLED 1
#define TRACE_ENABLED 0
#define TRACE() if(TRACE_ENABLED) {fprintf(stderr, "%s\n", __func__);}
#define VERTEX_ENABLED_FLAG (1 << 0)

View File

@ -16,3 +16,14 @@ void profiler_print_stats();
void profiler_enable();
void profiler_disable();
#define PROFILER_COMPILE 0
#ifdef PROFILER_COMPILE
#define PROFILER_PUSH(S) profiler_push(S)
#define PROFILER_CHECKPOINT(P) profiler_checkpoint(P)
#define PROFILER_POP() profiler_pop()
#else
#define PROFILER_PUSH(S) do {} while (0)
#define PROFILER_CHECKPOINT(P) do {} while (0)
#define PROFILER_POP() do {} while (0)
#endif

View File

@ -135,8 +135,9 @@ GLboolean _glCheckValidEnum(GLint param, GLenum* values, const char* func) {
}
if(!found) {
_glKosThrowError(GL_INVALID_ENUM, func);
_glKosPrintError();
//_glKosThrowError(GL_INVALID_ENUM, func);
//_glKosPrintError();
printf("GL_INVALID_ENUM when calling %s\n",func);
return GL_TRUE;
}
@ -567,9 +568,11 @@ void APIENTRY glGetFloatv(GLenum pname, GLfloat* params) {
switch(pname) {
case GL_PROJECTION_MATRIX:
memcpy(params, _glGetProjectionMatrix(), sizeof(float) * 16);
case GL_MODELVIEW_MATRIX:
memcpy(params, _glGetModelViewMatrix(), sizeof(float) * 16);
break;
default:
_glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv");
_glKosThrowError(GL_INVALID_ENUM, __func__);
_glKosPrintError();
break;
}
@ -611,7 +614,7 @@ void APIENTRY glGetIntegerv(GLenum pname, GLint *params) {
}
} break;
default:
_glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv");
_glKosThrowError(GL_INVALID_ENUM, __func__);
_glKosPrintError();
break;
}

View File

@ -55,7 +55,7 @@ void _glApplyColorTable() {
GLushort i = 0;
for(; i < src->width; ++i) {
GLubyte* entry = &src->data[i * 4];
pvr_set_pal_entry(i, PACK_ARGB8888(entry[3], entry[1], entry[2], entry[0]));
pvr_set_pal_entry(i, PACK_ARGB8888(entry[3], entry[0], entry[1], entry[2]));
}
}
@ -241,14 +241,13 @@ void APIENTRY glBindTexture(GLenum target, GLuint texture) {
return;
}
/* If this didn't come from glGenTextures, then we should initialize the
* texture the first time it's bound */
if(!named_array_used(&TEXTURE_OBJECTS, texture)) {
TextureObject* txr = named_array_reserve(&TEXTURE_OBJECTS, texture);
_glInitializeTextureObject(txr, texture);
}
if(texture) {
/* If this didn't come from glGenTextures, then we should initialize the
* texture the first time it's bound */
if(!named_array_used(&TEXTURE_OBJECTS, texture)) {
TextureObject* txr = named_array_reserve(&TEXTURE_OBJECTS, texture);
_glInitializeTextureObject(txr, texture);
}
TEXTURE_UNITS[ACTIVE_TEXTURE] = (TextureObject*) named_array_get(&TEXTURE_OBJECTS, texture);
} else {
TEXTURE_UNITS[ACTIVE_TEXTURE] = NULL;
@ -264,9 +263,9 @@ void APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param) {
GLubyte failures = 0;
failures += _glCheckValidEnum(target, target_values, __func__);
/*failures += _glCheckValidEnum(target, target_values, __func__);
failures += _glCheckValidEnum(pname, pname_values, __func__);
failures += _glCheckValidEnum(param, param_values, __func__);
failures += _glCheckValidEnum(param, param_values, __func__);*/
TextureObject* active = TEXTURE_UNITS[ACTIVE_TEXTURE];
@ -591,7 +590,6 @@ static inline void _i8_to_i8(const GLubyte* source, GLubyte* dest) {
}
static TextureConversionFunc _determineConversion(GLint internalFormat, GLenum format, GLenum type) {
printf("attempted conversion: %x -> %x, %x \n", internalFormat, format, type);
switch(internalFormat) {
case GL_ALPHA: {
if(type == GL_UNSIGNED_BYTE && format == GL_RGBA) {
@ -690,8 +688,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat,
GLenum format, GLenum type, const GLvoid *data) {
TRACE();
printf("glTexImage2D(%x, %d, %x, %d, %d, %d ,%x, %x, *data) \n", target, level, internalFormat,width, height, border, format, type);
if(target != GL_TEXTURE_2D) {
_glKosThrowError(GL_INVALID_ENUM, "glTexImage2D-tex2d");
}
@ -870,6 +867,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat,
}
}
}
void APIENTRY glTexParameterf(GLenum target, GLenum pname, GLint param) {
glTexParameteri(target, pname, (GLint)param);
}

View File

@ -12,6 +12,17 @@
#include "named_array.h"
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
#define BYTE_TO_BINARY(byte) \
(byte & 0x80 ? '1' : '0'), \
(byte & 0x40 ? '1' : '0'), \
(byte & 0x20 ? '1' : '0'), \
(byte & 0x10 ? '1' : '0'), \
(byte & 0x08 ? '1' : '0'), \
(byte & 0x04 ? '1' : '0'), \
(byte & 0x02 ? '1' : '0'), \
(byte & 0x01 ? '1' : '0')
void named_array_init(NamedArray* array, unsigned int element_size, unsigned int max_elements) {
array->element_size = element_size;
array->max_element_count = max_elements;
@ -31,11 +42,10 @@ void named_array_init(NamedArray* array, unsigned int element_size, unsigned int
}
char named_array_used(NamedArray* array, unsigned int id) {
id--;
unsigned int i = id / 8;
unsigned int j = id % 8;
unsigned char v = array->used_markers[i] & (unsigned char) (1 << j);
return !!(v);
}
@ -60,10 +70,9 @@ void* named_array_alloc(NamedArray* array, unsigned int* new_id) {
void* named_array_reserve(NamedArray* array, unsigned int id) {
if(!named_array_used(array, id)) {
unsigned int j = (id % 8) - 1;
unsigned int j = (id % 8);
unsigned int i = id / 8;
assert(!named_array_used(array, id));
array->used_markers[i] |= (unsigned char) 1 << j;
assert(named_array_used(array, id));