From e16a46bdd9b0966b72da229bd67344661b8866cc Mon Sep 17 00:00:00 2001 From: Rinnegatamante Date: Mon, 19 Oct 2020 22:15:51 +0200 Subject: [PATCH] Using a separate mempool for Immediate 3D. --- src/gl/gl3device.cpp | 36 ++++++++++++++++++++++--------- src/gl/gl3immed.cpp | 14 ++++++------ src/gl/shaders/default.vert | 2 +- src/gl/shaders/default_vs_gl3.inc | 2 +- src/gl/shaders/matfx_env.vert | 2 +- src/gl/shaders/matfx_gl3.inc | 2 +- src/gl/shaders/skin.vert | 2 +- src/gl/shaders/skin_gl3.inc | 2 +- 8 files changed, 40 insertions(+), 22 deletions(-) diff --git a/src/gl/gl3device.cpp b/src/gl/gl3device.cpp index 1f3d708..db7c610 100644 --- a/src/gl/gl3device.cpp +++ b/src/gl/gl3device.cpp @@ -20,11 +20,17 @@ extern uint16_t *gIndices; extern float *gVertexBuffer; extern uint16_t *gIndicesPtr; +uint16_t *gIndicesIm2DPtr; +uint16_t *gIndicesIm3DPtr; extern float *gVertexBufferPtr; +float *gVertexBufferIm2DPtr; +float *gVertexBufferIm3DPtr; uint16_t *gConstIndices; float *gVertexBufferIm2D; +float *gVertexBufferIm3D; uint16_t *gIndicesIm2D; +uint16_t *gIndicesIm3D; namespace rw { namespace gl3 { @@ -1156,10 +1162,12 @@ showRaster(Raster *raster, uint32 flags) vglWaitVblankStart(GL_FALSE); vglStopRendering(); vglStartRendering(); - gVertexBuffer = gVertexBufferPtr; - gVertexBufferIm2D = gVertexBufferPtr + 0xC00000; - gIndices = gIndicesPtr; - gIndicesIm2D = gIndicesPtr + 0x300000; + gVertexBuffer = gVertexBufferPtr; + gVertexBufferIm2D = gVertexBufferIm2DPtr; + gVertexBufferIm3D = gVertexBufferIm3DPtr; + gIndices = gIndicesPtr; + gIndicesIm2D = gIndicesIm2DPtr; + gIndicesIm3D = gIndicesIm3DPtr; #endif //log2file("showRaster called"); @@ -1409,13 +1417,21 @@ initOpenGL(void) resetRenderState(); - gVertexBufferPtr = (float*)malloc(0x1800000); - gIndicesPtr = (uint16_t*)malloc(0x600000); + gVertexBufferPtr = (float*)malloc(0x1800000); + gVertexBufferIm2DPtr = (float*)malloc(0x500000); + gVertexBufferIm3DPtr = (float*)malloc(0x500000); + gIndicesPtr = (uint16_t*)malloc(0x600000); + gIndicesIm2DPtr = (uint16_t*)malloc(0x600000); + gIndicesIm3DPtr = (uint16_t*)malloc(0x600000); + gConstIndices = (uint16_t*)malloc(sizeof(uint16_t) * 512); - gVertexBuffer = gVertexBufferPtr; - gVertexBufferIm2D = gVertexBufferPtr + 0xC00000; - gIndices = gIndicesPtr; - gIndicesIm2D = gIndicesPtr + 0x300000; + + gVertexBuffer = gVertexBufferPtr; + gVertexBufferIm2D = gVertexBufferIm2DPtr; + gVertexBufferIm3D = gVertexBufferIm3DPtr; + gIndices = gIndicesPtr; + gIndicesIm2D = gIndicesIm2DPtr; + gIndicesIm3D = gIndicesIm3DPtr; for (uint16_t i = 0; i < 512; i++) { gConstIndices[i] = i; diff --git a/src/gl/gl3immed.cpp b/src/gl/gl3immed.cpp index 578f9cc..f37213a 100644 --- a/src/gl/gl3immed.cpp +++ b/src/gl/gl3immed.cpp @@ -18,6 +18,8 @@ extern float *gVertexBuffer; extern float *gVertexBufferIm2D; extern uint16_t *gIndicesIm2D; +extern float *gVertexBufferIm3D; +extern uint16_t *gIndicesIm3D; extern uint16_t *gIndices; extern uint16_t *gConstIndices; @@ -215,9 +217,9 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags) if((flags & im3d::VERTEXUV) == 0) SetRenderStatePtr(TEXTURERASTER, nil); - memcpy_neon(gVertexBufferIm2D, vertices, numVertices*sizeof(Im3DVertex)); - vglVertexAttribPointerMapped(0, gVertexBufferIm2D); - gVertexBufferIm2D += numVertices*(sizeof(Im3DVertex)/sizeof(float)); + memcpy_neon(gVertexBufferIm3D, vertices, numVertices*sizeof(Im3DVertex)); + vglVertexAttribPointerMapped(0, gVertexBufferIm3D); + gVertexBufferIm3D += numVertices*(sizeof(Im3DVertex)/sizeof(float)); #ifndef RW_GL_USE_VAOS //setAttribPointers(im3dattribDesc, 3); @@ -236,9 +238,9 @@ im3DRenderPrimitive(PrimitiveType primType) void im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices) { - memcpy_neon(gIndicesIm2D, indices, numIndices * 2); - vglIndexPointerMapped(gIndicesIm2D); - gIndicesIm2D += numIndices; + memcpy_neon(gIndicesIm3D, indices, numIndices * 2); + vglIndexPointerMapped(gIndicesIm3D); + gIndicesIm3D += numIndices; flushCache(); vglDrawObjects(primTypeMap[primType], numIndices, GL_FALSE); diff --git a/src/gl/shaders/default.vert b/src/gl/shaders/default.vert index 71b3d5f..044b6e0 100644 --- a/src/gl/shaders/default.vert +++ b/src/gl/shaders/default.vert @@ -19,7 +19,7 @@ void main( float4 out gl_Position : POSITION ) { float4 Vertex = mul(float4(in_pos, 1.0), u_world); - gl_Position = mul(Vertex, u_view * u_proj); + gl_Position = mul(mul(Vertex, u_view), u_proj); float3 Normal = mul(in_normal, float3x3(u_world)); v_tex0 = in_tex0; diff --git a/src/gl/shaders/default_vs_gl3.inc b/src/gl/shaders/default_vs_gl3.inc index 9624d97..5b0a70b 100644 --- a/src/gl/shaders/default_vs_gl3.inc +++ b/src/gl/shaders/default_vs_gl3.inc @@ -20,7 +20,7 @@ const char *default_vert_src = " float4 out gl_Position : POSITION\n" ") {\n" " float4 Vertex = mul(float4(in_pos, 1.0), u_world);\n" -" gl_Position = mul(Vertex, u_view * u_proj);\n" +" gl_Position = mul(mul(Vertex, u_view), u_proj);\n" " float3 Normal = mul(in_normal, float3x3(u_world));\n" " v_tex0 = in_tex0;\n" diff --git a/src/gl/shaders/matfx_env.vert b/src/gl/shaders/matfx_env.vert index 014884d..458b6da 100644 --- a/src/gl/shaders/matfx_env.vert +++ b/src/gl/shaders/matfx_env.vert @@ -21,7 +21,7 @@ void main( float4 out gl_Position : POSITION ) { float4 Vertex = mul(float4(in_pos, 1.0), u_world); - gl_Position = mul(Vertex, u_view * u_proj); + gl_Position = mul(mul(Vertex, u_view), u_proj); float3 Normal = mul(in_normal, float3x3(u_world)); v_tex0 = in_tex0; diff --git a/src/gl/shaders/matfx_gl3.inc b/src/gl/shaders/matfx_gl3.inc index babf1b1..5d2b2e1 100644 --- a/src/gl/shaders/matfx_gl3.inc +++ b/src/gl/shaders/matfx_gl3.inc @@ -22,7 +22,7 @@ const char *matfx_env_vert_src = " float4 out gl_Position : POSITION\n" ") {\n" " float4 Vertex = mul(float4(in_pos, 1.0), u_world);\n" -" gl_Position = mul(Vertex, u_view * u_proj);\n" +" gl_Position = mul(mul(Vertex, u_view), u_proj);\n" " float3 Normal = mul(in_normal, float3x3(u_world));\n" " v_tex0 = in_tex0;\n" diff --git a/src/gl/shaders/skin.vert b/src/gl/shaders/skin.vert index 5235353..49277be 100644 --- a/src/gl/shaders/skin.vert +++ b/src/gl/shaders/skin.vert @@ -30,7 +30,7 @@ void main( } float4 Vertex = mul(float4(SkinVertex, 1.0), u_world); - gl_Position = mul(Vertex, u_view * u_proj); + gl_Position = mul(mul(Vertex, u_view), u_proj); float3 Normal = mul(SkinNormal, float3x3(u_world)); v_tex0 = in_tex0; diff --git a/src/gl/shaders/skin_gl3.inc b/src/gl/shaders/skin_gl3.inc index dae7bbc..97b68df 100644 --- a/src/gl/shaders/skin_gl3.inc +++ b/src/gl/shaders/skin_gl3.inc @@ -31,7 +31,7 @@ const char *skin_vert_src = " }\n" " \n" " float4 Vertex = mul(float4(SkinVertex, 1.0), u_world);\n" -" gl_Position = mul(Vertex, u_view * u_proj);\n" +" gl_Position = mul(mul(Vertex, u_view), u_proj);\n" " float3 Normal = mul(SkinNormal, float3x3(u_world));\n" " v_tex0 = in_tex0;\n"