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:
|
case GL_QUADS:
|
||||||
return &_buildQuad;
|
return &_buildQuad;
|
||||||
break;
|
break;
|
||||||
case GL_TRIANGLE_FAN:
|
|
||||||
case GL_POLYGON:
|
case GL_POLYGON:
|
||||||
|
case GL_TRIANGLE_FAN:
|
||||||
return &_buildTriangleFan;
|
return &_buildTriangleFan;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -459,7 +459,7 @@ static inline PolyBuildFunc _calcBuildFunc(const GLenum type) {
|
||||||
|
|
||||||
return &_buildStrip;
|
return &_buildStrip;
|
||||||
}
|
}
|
||||||
|
#include <assert.h>
|
||||||
static inline void nullFloatParseFunc(GLfloat* out, const GLubyte* in) {}
|
static inline void nullFloatParseFunc(GLfloat* out, const GLubyte* in) {}
|
||||||
|
|
||||||
static inline void genElementsCommon(
|
static inline void genElementsCommon(
|
||||||
|
@ -480,6 +480,8 @@ static inline void genElementsCommon(
|
||||||
const FloatParseFunc normalFunc = (doLighting) ? _calcNormalParseFunc() : &nullFloatParseFunc;
|
const FloatParseFunc normalFunc = (doLighting) ? _calcNormalParseFunc() : &nullFloatParseFunc;
|
||||||
|
|
||||||
const IndexParseFunc indexFunc = _calcParseIndexFunc(type);
|
const IndexParseFunc indexFunc = _calcParseIndexFunc(type);
|
||||||
|
assert(vertexFunc);
|
||||||
|
assert(diffuseFunc);
|
||||||
|
|
||||||
GLsizei i = 0;
|
GLsizei i = 0;
|
||||||
const GLubyte* idx = iptr;
|
const GLubyte* idx = iptr;
|
||||||
|
@ -546,6 +548,7 @@ static inline void genElementsQuads(
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void genElementsTriangleFan(
|
static inline void genElementsTriangleFan(
|
||||||
|
|
||||||
ClipVertex* output,
|
ClipVertex* output,
|
||||||
GLsizei count,
|
GLsizei count,
|
||||||
const GLubyte* iptr, GLuint istride, GLenum type,
|
const GLubyte* iptr, GLuint istride, GLenum type,
|
||||||
|
@ -569,7 +572,7 @@ static inline void genElementsTriangleFan(
|
||||||
GLsizei i = 3;
|
GLsizei i = 3;
|
||||||
ClipVertex* first = &output[0];
|
ClipVertex* first = &output[0];
|
||||||
|
|
||||||
for(; i < count - 1; ++i) {
|
for(; i < count - 1; ++i) {
|
||||||
ClipVertex* next = &output[i + 1];
|
ClipVertex* next = &output[i + 1];
|
||||||
ClipVertex* previous = &output[i - 1];
|
ClipVertex* previous = &output[i - 1];
|
||||||
ClipVertex* vertex = &output[i];
|
ClipVertex* vertex = &output[i];
|
||||||
|
@ -742,6 +745,8 @@ static void genArraysTriangleStrip(
|
||||||
output[count - 1].flags = PVR_CMD_VERTEX_EOL;
|
output[count - 1].flags = PVR_CMD_VERTEX_EOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ClipVertex buffer[MAX_POLYGON_SIZE];
|
||||||
|
|
||||||
static void genArraysTriangleFan(
|
static void genArraysTriangleFan(
|
||||||
ClipVertex* output,
|
ClipVertex* output,
|
||||||
GLsizei count,
|
GLsizei count,
|
||||||
|
@ -758,25 +763,43 @@ static void genArraysTriangleFan(
|
||||||
doTexture, doMultitexture, doLighting
|
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;
|
output[2].flags = PVR_CMD_VERTEX_EOL;
|
||||||
|
|
||||||
GLsizei i = 3;
|
GLsizei i = 3, target = 3;
|
||||||
ClipVertex* first = &output[0];
|
ClipVertex* first = &output[0];
|
||||||
|
#if TRACE_ENABLED
|
||||||
|
printf("%s(%s[%d]): Triangle!\n",__func__, __FILE__,__LINE__);
|
||||||
|
#endif
|
||||||
|
|
||||||
for(; i < count - 1; ++i) {
|
for(; i < count; ++i) {
|
||||||
ClipVertex* next = &output[i + 1];
|
output[target++] = *first;
|
||||||
ClipVertex* previous = &output[i - 1];
|
output[target++] = buffer[i - 1];
|
||||||
ClipVertex* vertex = &output[i];
|
output[target] = buffer[i];
|
||||||
|
#if TRACE_ENABLED
|
||||||
*next = *first;
|
printf("%s(%s[%d]): Triangle!\n",__func__, __FILE__,__LINE__);
|
||||||
|
printf("%s(%s[%d]):\tvert(%f,%f,%f)\n",__func__, __FILE__,__LINE__,
|
||||||
swapVertex(next, vertex);
|
(*first).xyz[0],(*first).xyz[1],(*first).xyz[2]);
|
||||||
|
printf("%s(%s[%d]):\tvert(%f,%f,%f)\n",__func__, __FILE__,__LINE__,
|
||||||
vertex = next + 1;
|
(buffer[i - 1]).xyz[0],(buffer[i - 1]).xyz[1],(buffer[i - 1]).xyz[2]);
|
||||||
*vertex = *previous;
|
printf("%s(%s[%d]):\tvert(%f,%f,%f)\n",__func__, __FILE__,__LINE__,
|
||||||
|
(buffer[i]).xyz[0],(buffer[i]).xyz[1],(buffer[i]).xyz[2]);
|
||||||
vertex->flags = PVR_CMD_VERTEX_EOL;
|
#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
|
doTexture, doMultitexture, doLighting
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case GL_POLYGON:
|
||||||
case GL_TRIANGLE_FAN:
|
case GL_TRIANGLE_FAN:
|
||||||
genArraysTriangleFan(
|
genArraysTriangleFan(
|
||||||
output,
|
output,
|
||||||
|
@ -873,7 +897,7 @@ static void generate(ClipVertex* output, const GLenum mode, const GLsizei first,
|
||||||
nptr, nstride,
|
nptr, nstride,
|
||||||
doTexture, doMultitexture, doLighting
|
doTexture, doMultitexture, doLighting
|
||||||
);
|
);
|
||||||
} else if(mode == GL_TRIANGLE_FAN) {
|
} else if(mode == GL_TRIANGLE_FAN || mode == GL_POLYGON) {
|
||||||
genElementsTriangleFan(
|
genElementsTriangleFan(
|
||||||
output,
|
output,
|
||||||
count,
|
count,
|
||||||
|
@ -1046,7 +1070,7 @@ static void push(PVRHeader* header, ClipVertex* output, const GLsizei count, Pol
|
||||||
cxt.list_type = activePolyList->list_type;
|
cxt.list_type = activePolyList->list_type;
|
||||||
|
|
||||||
_glUpdatePVRTextureContext(&cxt, textureUnit);
|
_glUpdatePVRTextureContext(&cxt, textureUnit);
|
||||||
|
|
||||||
pvr_poly_compile(&header->hdr, &cxt);
|
pvr_poly_compile(&header->hdr, &cxt);
|
||||||
|
|
||||||
/* Post-process the vertex list */
|
/* Post-process the vertex list */
|
||||||
|
@ -1061,6 +1085,7 @@ static void push(PVRHeader* header, ClipVertex* output, const GLsizei count, Pol
|
||||||
#define DEBUG_CLIPPING 0
|
#define DEBUG_CLIPPING 0
|
||||||
|
|
||||||
static void submitVertices(GLenum mode, GLsizei first, GLsizei count, GLenum type, const GLvoid* indices) {
|
static void submitVertices(GLenum mode, GLsizei first, GLsizei count, GLenum type, const GLvoid* indices) {
|
||||||
|
TRACE();
|
||||||
/* Do nothing if vertices aren't enabled */
|
/* Do nothing if vertices aren't enabled */
|
||||||
if(!(ENABLED_VERTEX_ATTRIBUTES & VERTEX_ENABLED_FLAG)) {
|
if(!(ENABLED_VERTEX_ATTRIBUTES & VERTEX_ENABLED_FLAG)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -96,8 +96,8 @@ void APIENTRY glKosSwapBuffers() {
|
||||||
|
|
||||||
PROFILER_PUSH(__func__);
|
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:\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: glTexImage mem free:%d\n",pvr_mem_available());
|
||||||
|
|
||||||
pvr_wait_ready();
|
pvr_wait_ready();
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#define NORMAL_ENABLED_FLAG (1 << 4)
|
#define NORMAL_ENABLED_FLAG (1 << 4)
|
||||||
|
|
||||||
#define MAX_TEXTURE_SIZE 1024
|
#define MAX_TEXTURE_SIZE 1024
|
||||||
|
#define MAX_POLYGON_SIZE 18
|
||||||
|
|
||||||
#define CLIP_VERTEX_INT_PADDING 6
|
#define CLIP_VERTEX_INT_PADDING 6
|
||||||
|
|
||||||
|
|
|
@ -696,6 +696,7 @@ static GLboolean _isSupportedFormat(GLenum format) {
|
||||||
case GL_RGBA:
|
case GL_RGBA:
|
||||||
case GL_BGRA:
|
case GL_BGRA:
|
||||||
case GL_COLOR_INDEX:
|
case GL_COLOR_INDEX:
|
||||||
|
case GL_LUMINANCE:
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
default:
|
default:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
@ -942,7 +943,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat,
|
||||||
source += stride;
|
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) {
|
void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user