Performance improvements

This commit is contained in:
Luke Benstead 2019-11-30 10:07:41 +00:00
parent 62b53f0fb1
commit a280dac778

View File

@ -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() {