Updates and Fixes for comparable execution on pc

This commit is contained in:
Hayden K 2019-03-07 19:49:24 -05:00
parent a124fa7ab2
commit 4e29678866
4 changed files with 50 additions and 23 deletions

View File

@ -449,8 +449,8 @@ static inline PolyBuildFunc _calcBuildFunc(const GLenum type) {
case GL_QUADS:
return &_buildQuad;
break;
case GL_TRIANGLE_FAN:
case GL_POLYGON:
case GL_TRIANGLE_FAN:
return &_buildTriangleFan;
break;
default:
@ -459,7 +459,7 @@ static inline PolyBuildFunc _calcBuildFunc(const GLenum type) {
return &_buildStrip;
}
#include <assert.h>
static inline void nullFloatParseFunc(GLfloat* out, const GLubyte* in) {}
static inline void genElementsCommon(
@ -480,6 +480,8 @@ static inline void genElementsCommon(
const FloatParseFunc normalFunc = (doLighting) ? _calcNormalParseFunc() : &nullFloatParseFunc;
const IndexParseFunc indexFunc = _calcParseIndexFunc(type);
assert(vertexFunc);
assert(diffuseFunc);
GLsizei i = 0;
const GLubyte* idx = iptr;
@ -546,6 +548,7 @@ static inline void genElementsQuads(
}
static inline void genElementsTriangleFan(
ClipVertex* output,
GLsizei count,
const GLubyte* iptr, GLuint istride, GLenum type,
@ -742,6 +745,8 @@ static void genArraysTriangleStrip(
output[count - 1].flags = PVR_CMD_VERTEX_EOL;
}
static ClipVertex buffer[MAX_POLYGON_SIZE];
static void genArraysTriangleFan(
ClipVertex* output,
GLsizei count,
@ -758,25 +763,43 @@ static void genArraysTriangleFan(
doTexture, doMultitexture, doLighting
);
#if TRACE_ENABLED
printf("%s(%s[%d]): count: %d\n",__func__, __FILE__,__LINE__, count);
#endif
assert(count <= MAX_POLYGON_SIZE);
if(count <=3){
swapVertex(&output[1], &output[2]);
output[2].flags = PVR_CMD_VERTEX_EOL;
return;
}
GLsizei i = 3;
memcpy(buffer, output, sizeof(ClipVertex) * count);
// First 3 vertices are in the right place, just end early
//swapVertex(&output[1], &output[2]);
output[2].flags = PVR_CMD_VERTEX_EOL;
GLsizei i = 3, target = 3;
ClipVertex* first = &output[0];
#if TRACE_ENABLED
printf("%s(%s[%d]): Triangle!\n",__func__, __FILE__,__LINE__);
#endif
for(; i < count - 1; ++i) {
ClipVertex* next = &output[i + 1];
ClipVertex* previous = &output[i - 1];
ClipVertex* vertex = &output[i];
*next = *first;
swapVertex(next, vertex);
vertex = next + 1;
*vertex = *previous;
vertex->flags = PVR_CMD_VERTEX_EOL;
for(; i < count; ++i) {
output[target++] = *first;
output[target++] = buffer[i - 1];
output[target] = buffer[i];
#if TRACE_ENABLED
printf("%s(%s[%d]): Triangle!\n",__func__, __FILE__,__LINE__);
printf("%s(%s[%d]):\tvert(%f,%f,%f)\n",__func__, __FILE__,__LINE__,
(*first).xyz[0],(*first).xyz[1],(*first).xyz[2]);
printf("%s(%s[%d]):\tvert(%f,%f,%f)\n",__func__, __FILE__,__LINE__,
(buffer[i - 1]).xyz[0],(buffer[i - 1]).xyz[1],(buffer[i - 1]).xyz[2]);
printf("%s(%s[%d]):\tvert(%f,%f,%f)\n",__func__, __FILE__,__LINE__,
(buffer[i]).xyz[0],(buffer[i]).xyz[1],(buffer[i]).xyz[2]);
#endif
output[target++].flags = PVR_CMD_VERTEX_EOL;
}
}
@ -824,6 +847,7 @@ static void generate(ClipVertex* output, const GLenum mode, const GLsizei first,
doTexture, doMultitexture, doLighting
);
break;
case GL_POLYGON:
case GL_TRIANGLE_FAN:
genArraysTriangleFan(
output,
@ -873,7 +897,7 @@ static void generate(ClipVertex* output, const GLenum mode, const GLsizei first,
nptr, nstride,
doTexture, doMultitexture, doLighting
);
} else if(mode == GL_TRIANGLE_FAN) {
} else if(mode == GL_TRIANGLE_FAN || mode == GL_POLYGON) {
genElementsTriangleFan(
output,
count,
@ -1061,6 +1085,7 @@ static void push(PVRHeader* header, ClipVertex* output, const GLsizei count, Pol
#define DEBUG_CLIPPING 0
static void submitVertices(GLenum mode, GLsizei first, GLsizei count, GLenum type, const GLvoid* indices) {
TRACE();
/* Do nothing if vertices aren't enabled */
if(!(ENABLED_VERTEX_ATTRIBUTES & VERTEX_ENABLED_FLAG)) {
return;

View File

@ -96,8 +96,8 @@ void APIENTRY glKosSwapBuffers() {
PROFILER_PUSH(__func__);
printf("Flush:\n\tOP:%d\n\tPT:%d\n\tTR:%d\n",OP_LIST.vector.size,PT_LIST.vector.size,TR_LIST.vector.size);
printf("Flush: glTexImage mem free:%d\n",pvr_mem_available());
//printf("Flush:\n\tOP:%d\n\tPT:%d\n\tTR:%d\n",OP_LIST.vector.size,PT_LIST.vector.size,TR_LIST.vector.size);
//printf("Flush: glTexImage mem free:%d\n",pvr_mem_available());
pvr_wait_ready();

View File

@ -16,6 +16,7 @@
#define NORMAL_ENABLED_FLAG (1 << 4)
#define MAX_TEXTURE_SIZE 1024
#define MAX_POLYGON_SIZE 18
#define CLIP_VERTEX_INT_PADDING 6

View File

@ -696,6 +696,7 @@ static GLboolean _isSupportedFormat(GLenum format) {
case GL_RGBA:
case GL_BGRA:
case GL_COLOR_INDEX:
case GL_LUMINANCE:
return GL_TRUE;
default:
return GL_FALSE;
@ -942,7 +943,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat,
source += stride;
}
}
printf("GLdc: glTexImage mem free:%d\n",pvr_mem_available());
//printf("GLdc: glTexImage mem free:%d\n",pvr_mem_available());
}
void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) {