Performance improvements
This commit is contained in:
parent
62b53f0fb1
commit
a280dac778
33
GL/draw.c
33
GL/draw.c
|
@ -414,10 +414,10 @@ static void _readVertexData3ubARGB(const GLubyte* input, GLuint count, GLubyte s
|
||||||
|
|
||||||
static void _readVertexData4ubRevARGB(const GLubyte* input, GLuint count, GLubyte stride, GLubyte* output) {
|
static void _readVertexData4ubRevARGB(const GLubyte* input, GLuint count, GLubyte stride, GLubyte* output) {
|
||||||
ITERATE(count) {
|
ITERATE(count) {
|
||||||
output[0] = input[0];
|
output[B8IDX] = input[0];
|
||||||
output[1] = input[1];
|
output[G8IDX] = input[1];
|
||||||
output[2] = input[2];
|
output[R8IDX] = input[2];
|
||||||
output[3] = input[3];
|
output[A8IDX] = input[3];
|
||||||
|
|
||||||
input += stride;
|
input += stride;
|
||||||
output += sizeof(Vertex);
|
output += sizeof(Vertex);
|
||||||
|
@ -608,23 +608,22 @@ Vertex* _glSubmissionTargetEnd(SubmissionTarget* target) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void genTriangles(Vertex* output, GLuint count) {
|
static inline void genTriangles(Vertex* output, GLuint count) {
|
||||||
|
const GLuint tris = count / 3;
|
||||||
Vertex* it = output + 2;
|
Vertex* it = output + 2;
|
||||||
ITERATE(count / 3) {
|
ITERATE(tris) {
|
||||||
it->flags = PVR_CMD_VERTEX_EOL;
|
it->flags = PVR_CMD_VERTEX_EOL;
|
||||||
it += 3;
|
it += 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void genQuads(Vertex* output, GLuint count) {
|
static inline void genQuads(Vertex* output, GLuint count) {
|
||||||
Vertex* this = output + 2;
|
const GLuint quads = count / 4;
|
||||||
Vertex* next = output + 3;
|
Vertex* final = output + 3;
|
||||||
|
|
||||||
ITERATE(count / 4) {
|
ITERATE(quads) {
|
||||||
swapVertex(this, next);
|
swapVertex((final - 1), final);
|
||||||
next->flags = PVR_CMD_VERTEX_EOL;
|
final->flags = PVR_CMD_VERTEX_EOL;
|
||||||
|
final += 4;
|
||||||
this += 4;
|
|
||||||
next += 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -982,7 +981,7 @@ static void generate(SubmissionTarget* target, const GLenum mode, const GLsizei
|
||||||
typedef struct FastPath {
|
typedef struct FastPath {
|
||||||
float xyz[3];
|
float xyz[3];
|
||||||
float uv[2];
|
float uv[2];
|
||||||
uint32_t argb;
|
uint8_t bgra[4];
|
||||||
} FastPath;
|
} FastPath;
|
||||||
|
|
||||||
GLboolean readST = doTexture && doMultitexture;
|
GLboolean readST = doTexture && doMultitexture;
|
||||||
|
@ -993,7 +992,7 @@ static void generate(SubmissionTarget* target, const GLenum mode, const GLsizei
|
||||||
vertices->flags = PVR_CMD_VERTEX;
|
vertices->flags = PVR_CMD_VERTEX;
|
||||||
|
|
||||||
FastPath* srcV = (FastPath*) ((uint8_t*) VERTEX_POINTER.ptr + (VERTEX_POINTER.stride * j));
|
FastPath* srcV = (FastPath*) ((uint8_t*) VERTEX_POINTER.ptr + (VERTEX_POINTER.stride * j));
|
||||||
FastPath* dst = (FastPath*) &vertices->xyz;
|
FastPath* dst = (FastPath*) vertices->xyz;
|
||||||
*dst = *srcV;
|
*dst = *srcV;
|
||||||
|
|
||||||
if(doLighting) _readNormalData(j, 1, extras);
|
if(doLighting) _readNormalData(j, 1, extras);
|
||||||
|
@ -1426,6 +1425,8 @@ void APIENTRY glEnableClientState(GLenum cap) {
|
||||||
default:
|
default:
|
||||||
_glKosThrowError(GL_INVALID_ENUM, __func__);
|
_glKosThrowError(GL_INVALID_ENUM, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_glRecalcFastPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY glDisableClientState(GLenum cap) {
|
void APIENTRY glDisableClientState(GLenum cap) {
|
||||||
|
@ -1449,6 +1450,8 @@ void APIENTRY glDisableClientState(GLenum cap) {
|
||||||
default:
|
default:
|
||||||
_glKosThrowError(GL_INVALID_ENUM, __func__);
|
_glKosThrowError(GL_INVALID_ENUM, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_glRecalcFastPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint _glGetActiveClientTexture() {
|
GLuint _glGetActiveClientTexture() {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user