Updates and Fixes for comparable execution on pc
This commit is contained in:
parent
a124fa7ab2
commit
4e29678866
65
GL/draw.c
65
GL/draw.c
|
@ -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,
|
||||
|
@ -569,7 +572,7 @@ static inline void genElementsTriangleFan(
|
|||
GLsizei i = 3;
|
||||
ClipVertex* first = &output[0];
|
||||
|
||||
for(; i < count - 1; ++i) {
|
||||
for(; i < count - 1; ++i) {
|
||||
ClipVertex* next = &output[i + 1];
|
||||
ClipVertex* previous = &output[i - 1];
|
||||
ClipVertex* vertex = &output[i];
|
||||
|
@ -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
|
||||
);
|
||||
|
||||
swapVertex(&output[1], &output[2]);
|
||||
#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;
|
||||
}
|
||||
|
||||
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;
|
||||
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,
|
||||
|
@ -1046,7 +1070,7 @@ static void push(PVRHeader* header, ClipVertex* output, const GLsizei count, Pol
|
|||
cxt.list_type = activePolyList->list_type;
|
||||
|
||||
_glUpdatePVRTextureContext(&cxt, textureUnit);
|
||||
|
||||
|
||||
pvr_poly_compile(&header->hdr, &cxt);
|
||||
|
||||
/* Post-process the vertex list */
|
||||
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user