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 CONFIG_H
#define MAX_TEXTURE_COUNT 512 #define MAX_TEXTURE_COUNT 512 //@Todo: or 1088 explain why increased. mrneo240
#endif // CONFIG_H #endif // CONFIG_H

View File

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

View File

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

View File

@ -94,24 +94,28 @@ void APIENTRY glKosSwapBuffers() {
TRACE(); TRACE();
profiler_push(__func__); PROFILER_PUSH(__func__);
pvr_wait_ready(); pvr_wait_ready();
pvr_scene_begin(); pvr_scene_begin();
QACR0 = QACRTA; QACR0 = QACRTA;
QACR1 = QACRTA; QACR1 = QACRTA;
pvr_list_begin(PVR_LIST_OP_POLY); pvr_list_begin(PVR_LIST_OP_POLY);
pvr_list_submit(OP_LIST.vector.data, OP_LIST.vector.size); 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_finish();
pvr_list_begin(PVR_LIST_PT_POLY); pvr_list_begin(PVR_LIST_PT_POLY);
pvr_list_submit(PT_LIST.vector.data, PT_LIST.vector.size); 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_finish();
pvr_list_begin(PVR_LIST_TR_POLY); pvr_list_begin(PVR_LIST_TR_POLY);
pvr_list_submit(TR_LIST.vector.data, TR_LIST.vector.size); 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_list_finish();
pvr_scene_finish(); pvr_scene_finish();
@ -119,11 +123,12 @@ void APIENTRY glKosSwapBuffers() {
aligned_vector_clear(&PT_LIST.vector); aligned_vector_clear(&PT_LIST.vector);
aligned_vector_clear(&TR_LIST.vector); aligned_vector_clear(&TR_LIST.vector);
profiler_checkpoint("scene"); PROFILER_CHECKPOINT("scene");
profiler_pop(); PROFILER_POP();
#ifdef PROFILER_COMPILE
if(frame_count++ > 100) { if(frame_count++ > 100) {
profiler_print_stats(); profiler_print_stats();
frame_count = 0; 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); *d1 = (r << 11 | g << 5 | b);
} else { } else {
fprintf(stderr, "ERROR: Unsupported PVR format for mipmap generation"); fprintf(stderr, "ERROR: Unsupported PVR format for mipmap generation");
_glKosThrowError(GL_INVALID_OPERATION, "glGenerateMipmapEXT"); _glKosThrowError(GL_INVALID_OPERATION, __func__);
_glKosPrintError(); _glKosPrintError();
return GL_FALSE; return GL_FALSE;
} }

View File

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

View File

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

View File

@ -16,3 +16,14 @@ void profiler_print_stats();
void profiler_enable(); void profiler_enable();
void profiler_disable(); 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) { if(!found) {
_glKosThrowError(GL_INVALID_ENUM, func); //_glKosThrowError(GL_INVALID_ENUM, func);
_glKosPrintError(); //_glKosPrintError();
printf("GL_INVALID_ENUM when calling %s\n",func);
return GL_TRUE; return GL_TRUE;
} }
@ -567,9 +568,11 @@ void APIENTRY glGetFloatv(GLenum pname, GLfloat* params) {
switch(pname) { switch(pname) {
case GL_PROJECTION_MATRIX: case GL_PROJECTION_MATRIX:
memcpy(params, _glGetProjectionMatrix(), sizeof(float) * 16); memcpy(params, _glGetProjectionMatrix(), sizeof(float) * 16);
case GL_MODELVIEW_MATRIX:
memcpy(params, _glGetModelViewMatrix(), sizeof(float) * 16);
break; break;
default: default:
_glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv"); _glKosThrowError(GL_INVALID_ENUM, __func__);
_glKosPrintError(); _glKosPrintError();
break; break;
} }
@ -611,7 +614,7 @@ void APIENTRY glGetIntegerv(GLenum pname, GLint *params) {
} }
} break; } break;
default: default:
_glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv"); _glKosThrowError(GL_INVALID_ENUM, __func__);
_glKosPrintError(); _glKosPrintError();
break; break;
} }

View File

@ -55,7 +55,7 @@ void _glApplyColorTable() {
GLushort i = 0; GLushort i = 0;
for(; i < src->width; ++i) { for(; i < src->width; ++i) {
GLubyte* entry = &src->data[i * 4]; 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; 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(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); TEXTURE_UNITS[ACTIVE_TEXTURE] = (TextureObject*) named_array_get(&TEXTURE_OBJECTS, texture);
} else { } else {
TEXTURE_UNITS[ACTIVE_TEXTURE] = NULL; TEXTURE_UNITS[ACTIVE_TEXTURE] = NULL;
@ -264,9 +263,9 @@ void APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param) {
GLubyte failures = 0; GLubyte failures = 0;
failures += _glCheckValidEnum(target, target_values, __func__); /*failures += _glCheckValidEnum(target, target_values, __func__);
failures += _glCheckValidEnum(pname, pname_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]; 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) { static TextureConversionFunc _determineConversion(GLint internalFormat, GLenum format, GLenum type) {
printf("attempted conversion: %x -> %x, %x \n", internalFormat, format, type);
switch(internalFormat) { switch(internalFormat) {
case GL_ALPHA: { case GL_ALPHA: {
if(type == GL_UNSIGNED_BYTE && format == GL_RGBA) { 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) { GLenum format, GLenum type, const GLvoid *data) {
TRACE(); 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) { if(target != GL_TEXTURE_2D) {
_glKosThrowError(GL_INVALID_ENUM, "glTexImage2D-tex2d"); _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) { void APIENTRY glTexParameterf(GLenum target, GLenum pname, GLint param) {
glTexParameteri(target, pname, (GLint)param); glTexParameteri(target, pname, (GLint)param);
} }

View File

@ -12,6 +12,17 @@
#include "named_array.h" #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) { void named_array_init(NamedArray* array, unsigned int element_size, unsigned int max_elements) {
array->element_size = element_size; array->element_size = element_size;
array->max_element_count = max_elements; 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) { char named_array_used(NamedArray* array, unsigned int id) {
id--;
unsigned int i = id / 8; unsigned int i = id / 8;
unsigned int j = id % 8; unsigned int j = id % 8;
unsigned char v = array->used_markers[i] & (unsigned char) (1 << j); unsigned char v = array->used_markers[i] & (unsigned char) (1 << j);
return !!(v); 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) { void* named_array_reserve(NamedArray* array, unsigned int id) {
if(!named_array_used(array, id)) { if(!named_array_used(array, id)) {
unsigned int j = (id % 8) - 1; unsigned int j = (id % 8);
unsigned int i = id / 8; unsigned int i = id / 8;
assert(!named_array_used(array, id));
array->used_markers[i] |= (unsigned char) 1 << j; array->used_markers[i] |= (unsigned char) 1 << j;
assert(named_array_used(array, id)); assert(named_array_used(array, id));