From 56175bc50504f2b10f8fc39e19c080ae03ec9811 Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sat, 24 Nov 2012 15:19:29 +0100 Subject: [PATCH] Defer blend, cull and depth test changes to draw command Avoid unnecessary state changes and reduces the amount of OpenGL calls. It also puts all the interesting logic at the same place, reducing the complexity a little. --- GPU/CMakeLists.txt | 1 + GPU/GLES/DisplayListInterpreter.cpp | 94 ++--------------------------- GPU/GLES/Framebuffer.cpp | 7 ++- GPU/GLES/StateMapping.cpp | 53 ++++++++++++++++ GPU/GLES/StateMapping.h | 17 ++++++ GPU/GLES/TransformPipeline.cpp | 35 ++++++++++- GPU/GPU.vcxproj | 2 + GPU/GPU.vcxproj.filters | 6 ++ GPU/GPUState.cpp | 2 + GPU/GPUState.h | 15 ++++- GPU/Null/NullGpu.cpp | 1 - Windows/OpenGLBase.cpp | 2 + Windows/PPSSPP.sln | 24 ++++---- android/jni/Android.mk | 1 + native | 2 +- 15 files changed, 153 insertions(+), 109 deletions(-) create mode 100644 GPU/GLES/StateMapping.cpp create mode 100644 GPU/GLES/StateMapping.h diff --git a/GPU/CMakeLists.txt b/GPU/CMakeLists.txt index dc8f31dd4d..803200ae6d 100644 --- a/GPU/CMakeLists.txt +++ b/GPU/CMakeLists.txt @@ -5,6 +5,7 @@ set(SRCS GLES/FragmentShaderGenerator.cpp GLES/Framebuffer.cpp GLES/ShaderManager.cpp + GLES/StateMapping.cpp GLES/TextureCache.cpp GLES/TransformPipeline.cpp GLES/VertexDecoder.cpp diff --git a/GPU/GLES/DisplayListInterpreter.cpp b/GPU/GLES/DisplayListInterpreter.cpp index 143ac18aa8..69b20b5c21 100644 --- a/GPU/GLES/DisplayListInterpreter.cpp +++ b/GPU/GLES/DisplayListInterpreter.cpp @@ -32,6 +32,7 @@ #include "../../Core/Host.h" #include "../../Core/Config.h" #include "../../Core/System.h" +#include "../../native/gfx_es2/gl_state.h" #include "../GPUState.h" #include "../ge_constants.h" @@ -136,9 +137,9 @@ void GLES_GPU::CopyDisplayToOutput() } DEBUG_LOG(HLE, "Displaying FBO %08x", vfb->fb_address); - glDisable(GL_BLEND); - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); + glstate.blend.disable(); + glstate.cullFace.disable(); + glstate.depthTest.disable(); fbo_bind_color_as_texture(vfb->fbo, 0); @@ -148,11 +149,6 @@ void GLES_GPU::CopyDisplayToOutput() shaderManager.DirtyShader(); shaderManager.DirtyUniform(DIRTY_ALL); gstate_c.textureChanged = true; - - // Restore some state - ExecuteOp(gstate.cmdmem[GE_CMD_ALPHABLENDENABLE], 0xFFFFFFFF); - ExecuteOp(gstate.cmdmem[GE_CMD_CULLFACEENABLE], 0xFFFFFFFF); - ExecuteOp(gstate.cmdmem[GE_CMD_ZTESTENABLE], 0xFFFFFFFF); } GLES_GPU::VirtualFramebuffer *GLES_GPU::GetDisplayFBO() @@ -327,11 +323,6 @@ void EnterClearMode(u32 data) bool updateZ = (data >> 10) & 1; glColorMask(colMask, colMask, colMask, alphaMask); glDepthMask(updateZ); // Update Z or not - // Note that depth test must be enabled for depth writes to go through! So we use GL_ALWAYS - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_ALWAYS); - glDisable(GL_CULL_FACE); // ?? } void LeaveClearMode() @@ -344,66 +335,9 @@ void LeaveClearMode() // Alpha test glDepthMask(1); glColorMask(1,1,1,1); - glEnDis(GL_DEPTH_TEST, gstate.zTestEnable & 1); - glDepthFunc(GL_LEQUAL); // TODO - glEnDis(GL_BLEND, gstate.alphaBlendEnable & 1); // dirtyshader? } -void SetBlendModePSP(u32 data) -{ - // This can't be done exactly as there are several PSP blend modes that are impossible to do on OpenGL ES 2.0, and some even on regular OpenGL for desktop. - - // HOWEVER - we should be able to approximate the 2x modes in the shader, although they will clip wrongly. - - const GLint aLookup[] = { - GL_DST_COLOR, - GL_ONE_MINUS_DST_COLOR, - GL_SRC_ALPHA, - GL_ONE_MINUS_SRC_ALPHA, - GL_DST_ALPHA, - GL_ONE_MINUS_DST_ALPHA, - GL_SRC_ALPHA, // should be 2x - GL_ONE_MINUS_SRC_ALPHA, // should be 2x - GL_DST_ALPHA, // should be 2x - GL_ONE_MINUS_DST_ALPHA, // should be 2x - and COLOR? - GL_ONE, // should be FIXA - }; - const GLint bLookup[] = { - GL_SRC_COLOR, - GL_ONE_MINUS_SRC_COLOR, - GL_SRC_ALPHA, - GL_ONE_MINUS_SRC_ALPHA, - GL_DST_ALPHA, - GL_ONE_MINUS_DST_ALPHA, - GL_SRC_ALPHA, // should be 2x - GL_ONE_MINUS_SRC_ALPHA, // should be 2x - GL_DST_ALPHA, // should be 2x - GL_ONE_MINUS_DST_ALPHA, // should be 2x - GL_ONE, // should be FIXB - }; - const GLint eqLookup[] = { - GL_FUNC_ADD, - GL_FUNC_SUBTRACT, - GL_FUNC_REVERSE_SUBTRACT, -#if defined(ANDROID) || defined(BLACKBERRY) - GL_FUNC_ADD, - GL_FUNC_ADD, - GL_FUNC_ADD, // should be abs(diff) -#else - GL_MIN, - GL_MAX, - GL_MAX, // should be abs(diff) -#endif - }; - int a = data & 0xF; - int b = (data >> 4) & 0xF; - int eq = (data >> 8) & 0x7; - glBlendFunc(aLookup[a], bLookup[b]); - glBlendEquation(eqLookup[eq]); -} - - void GLES_GPU::ExecuteOp(u32 op, u32 diff) { u32 cmd = op >> 24; @@ -533,13 +467,6 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) // Throughmode changed, let's make the proj matrix dirty. shaderManager.DirtyUniform(DIRTY_PROJMATRIX); } - if (data & GE_VTYPE_THROUGH) { - glDisable(GL_CULL_FACE); - } - else { - // this might get spammy - glEnDis(GL_CULL_FACE, gstate.cullfaceEnable & 1); - } // This sets through-mode or not, as well. break; @@ -597,7 +524,6 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) case GE_CMD_CULLFACEENABLE: DEBUG_LOG(G3D, "DL CullFace Enable: %i (ignoring)", data); - glEnDis(GL_CULL_FACE, data&1); break; case GE_CMD_TEXTUREMAPENABLE: @@ -938,8 +864,6 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) break; case GE_CMD_CULL: DEBUG_LOG(G3D,"DL cull: %06x", data); - glCullFace(data & 1 ? GL_FRONT : GL_BACK); - //glCullFace(data & 1 ? GL_BACK : GL_FRONT); break; case GE_CMD_LMODE: @@ -975,12 +899,10 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) ////////////////////////////////////////////////////////////////// case GE_CMD_ALPHABLENDENABLE: DEBUG_LOG(G3D,"DL Alpha blend enable: %d", data); - glEnDis(GL_BLEND, data); break; case GE_CMD_BLENDMODE: DEBUG_LOG(G3D,"DL Blend mode: %06x", data); - SetBlendModePSP(data); break; case GE_CMD_BLENDFIXEDA: @@ -1041,7 +963,6 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) ////////////////////////////////////////////////////////////////// case GE_CMD_ZTESTENABLE: - glEnDis(GL_DEPTH_TEST, data & 1); DEBUG_LOG(G3D,"DL Z test enable: %d", data & 1); break; @@ -1051,13 +972,6 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) case GE_CMD_ZTEST: { - static const GLuint ztests[8] = - { - GL_NEVER, GL_ALWAYS, GL_EQUAL, GL_NOTEQUAL, - GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL - }; - //glDepthFunc(ztests[data&7]); - glDepthFunc(GL_LEQUAL); DEBUG_LOG(G3D,"DL Z test mode: %i", data); } break; diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index d312645a22..6d9ea1b58f 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -28,6 +28,7 @@ #endif #include "gfx_es2/glsl_program.h" +#include "gfx_es2/gl_state.h" #include "math/lin/matrix4x4.h" #include "../../Core/Host.h" @@ -80,9 +81,9 @@ void DisplayDrawer_Init() glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); #endif - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glDisable(GL_BLEND); + glstate.cullFace.disable(); + glstate.depthTest.disable(); + glstate.blend.disable(); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glEnable(GL_TEXTURE_2D); diff --git a/GPU/GLES/StateMapping.cpp b/GPU/GLES/StateMapping.cpp new file mode 100644 index 0000000000..0d35e8e67c --- /dev/null +++ b/GPU/GLES/StateMapping.cpp @@ -0,0 +1,53 @@ +#include "StateMapping.h" + +const GLint aLookup[] = { + GL_DST_COLOR, + GL_ONE_MINUS_DST_COLOR, + GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, + GL_DST_ALPHA, + GL_ONE_MINUS_DST_ALPHA, + GL_SRC_ALPHA, // should be 2x + GL_ONE_MINUS_SRC_ALPHA, // should be 2x + GL_DST_ALPHA, // should be 2x + GL_ONE_MINUS_DST_ALPHA, // should be 2x - and COLOR? + GL_SRC_ALPHA, // should be FIXA +}; + +const GLint bLookup[] = { + GL_SRC_COLOR, + GL_ONE_MINUS_SRC_COLOR, + GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, + GL_DST_ALPHA, + GL_ONE_MINUS_DST_ALPHA, + GL_SRC_ALPHA, // should be 2x + GL_ONE_MINUS_SRC_ALPHA, // should be 2x + GL_DST_ALPHA, // should be 2x + GL_ONE_MINUS_DST_ALPHA, // should be 2x + GL_SRC_ALPHA, // should be FIXB +}; +const GLint eqLookup[] = { + GL_FUNC_ADD, + GL_FUNC_SUBTRACT, + GL_FUNC_REVERSE_SUBTRACT, +#if defined(ANDROID) || defined(BLACKBERRY) + GL_FUNC_ADD, + GL_FUNC_ADD, +#else + GL_MIN, + GL_MAX, +#endif + GL_FUNC_ADD, // should be abs(diff) +}; + +const GLint cullingMode[] = { + GL_BACK, + GL_FRONT, +}; + +const GLuint ztests[] = +{ + GL_NEVER, GL_ALWAYS, GL_EQUAL, GL_NOTEQUAL, + GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, +}; \ No newline at end of file diff --git a/GPU/GLES/StateMapping.h b/GPU/GLES/StateMapping.h new file mode 100644 index 0000000000..39977d7d8c --- /dev/null +++ b/GPU/GLES/StateMapping.h @@ -0,0 +1,17 @@ +#if defined(ANDROID) || defined(BLACKBERRY) +#include +#include +#else +#include +#if defined(__APPLE__) +#include +#else +#include +#endif +#endif + +extern const GLint aLookup[]; +extern const GLint bLookup[]; +extern const GLint eqLookup[]; +extern const GLint cullingMode[]; +extern const GLuint ztests[]; \ No newline at end of file diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index 8f355c679a..109f76575b 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -30,11 +30,13 @@ #include "../../Core/MemMap.h" #include "../../Core/Host.h" #include "../../Core/System.h" +#include "../../native/gfx_es2/gl_state.h" #include "../Math3D.h" #include "../GPUState.h" #include "../ge_constants.h" +#include "StateMapping.h" #include "TextureCache.h" #include "TransformPipeline.h" #include "VertexDecoder.h" @@ -218,7 +220,7 @@ void TransformAndDrawPrim(void *verts, void *inds, int prim, int vertexCount, Li // Check if anything needs updating if (gstate_c.textureChanged) { - if ((gstate.textureMapEnable & 1) && !(gstate.clearmode & 1)) + if ((gstate.textureMapEnable & 1) && !gstate.isModeClear()) { PSPSetTexture(); useTexCoord = true; @@ -524,6 +526,37 @@ void TransformAndDrawPrim(void *verts, void *inds, int prim, int vertexCount, Li } } + // Set cull + bool wantCull = !gstate.isModeClear() && !gstate.isModeThrough() && gstate.isCullEnabled(); + glstate.cullFace.set(wantCull); + + if(wantCull) { + u8 cullMode = gstate.getCullMode(); + glstate.cullFaceMode.set(cullingMode[cullMode]); + } + + // Set blend + bool wantBlend = !gstate.isModeClear() && (gstate.alphaBlendEnable & 1); + glstate.blend.set(wantBlend); + if(wantBlend) { + // This can't be done exactly as there are several PSP blend modes that are impossible to do on OpenGL ES 2.0, and some even on regular OpenGL for desktop. + // HOWEVER - we should be able to approximate the 2x modes in the shader, although they will clip wrongly. + u8 blendFuncA = gstate.getBlendFuncA(); + u8 blendFuncB = gstate.getBlendFuncB(); + u8 blendFuncEq = gstate.getBlendEq(); + + glstate.blendFunc.set(aLookup[blendFuncA], bLookup[blendFuncB]); + glstate.blendEquation.set(eqLookup[blendFuncEq]); + } + + bool wantDepthTest = gstate.isModeClear() || gstate.isDepthTestEnabled(); + glstate.depthTest.set(wantDepthTest); + if(wantDepthTest) { + // Force GL_ALWAYS if mode clear + u8 depthTestFunc = gstate.isModeClear() ? 1 : gstate.getDepthTestFunc(); + glstate.depthFunc.set(ztests[depthTestFunc]); + } + glEnableVertexAttribArray(program->a_position); if (useTexCoord && program->a_texcoord != -1) glEnableVertexAttribArray(program->a_texcoord); if (program->a_color0 != -1) glEnableVertexAttribArray(program->a_color0); diff --git a/GPU/GPU.vcxproj b/GPU/GPU.vcxproj index 07d90cf861..0f58cd8f1c 100644 --- a/GPU/GPU.vcxproj +++ b/GPU/GPU.vcxproj @@ -118,6 +118,7 @@ + @@ -132,6 +133,7 @@ + diff --git a/GPU/GPU.vcxproj.filters b/GPU/GPU.vcxproj.filters index fdf4719642..aad3ad15c2 100644 --- a/GPU/GPU.vcxproj.filters +++ b/GPU/GPU.vcxproj.filters @@ -54,6 +54,9 @@ Null + + GLES + @@ -89,6 +92,9 @@ Null + + GLES + diff --git a/GPU/GPUState.cpp b/GPU/GPUState.cpp index e4199a75bc..71ea830d28 100644 --- a/GPU/GPUState.cpp +++ b/GPU/GPUState.cpp @@ -46,6 +46,7 @@ void InitGfxState() for (int i = 0; i < 256; i++) { gstate.cmdmem[i] = i << 24; } + gstate.lightingEnable = 0x17000001; static const float identity4x3[12] = @@ -103,6 +104,7 @@ void ReapplyGfxState() gpu->ExecuteOp(gstate.cmdmem[GE_CMD_SCISSOR1], 0xFFFFFFFF); gpu->ExecuteOp(gstate.cmdmem[GE_CMD_SCISSOR2], 0xFFFFFFFF); */ + for (int i = GE_CMD_VERTEXTYPE; i < GE_CMD_BONEMATRIXNUMBER; i++) { gpu->ExecuteOp(gstate.cmdmem[i], 0xFFFFFFFF); diff --git a/GPU/GPUState.h b/GPU/GPUState.h index 3d71c73ff5..058d3887bb 100644 --- a/GPU/GPUState.h +++ b/GPU/GPUState.h @@ -18,6 +18,7 @@ #pragma once #include "../Globals.h" +#include "ge_constants.h" #include // TODO: this doesn't belong here @@ -237,6 +238,16 @@ struct GPUgstate float projMatrix[16]; float tgenMatrix[12]; float boneMatrix[8*12]; + + inline bool isModeThrough() const { return vertType & GE_VTYPE_THROUGH; } + inline bool isModeClear() const { return clearmode & 1; } + inline bool isCullEnabled() const { return cullfaceEnable & 1; } + inline u8 getCullMode() const { return cullmode & 1; } + inline u8 getBlendFuncA() const { return blend & 0xF; } + inline u8 getBlendFuncB() const { return (blend >> 4) & 0xF; } + inline u8 getBlendEq() const { return (blend >> 8) & 0x7; } + inline bool isDepthTestEnabled() const { return zTestEnable & 1; } + inline u8 getDepthTestFunc() const { return ztestfunc & 0x7; } }; // Real data in the context ends here @@ -286,8 +297,10 @@ struct GPUStatistics // Total statistics int numFrames; + }; + void InitGfxState(); void ShutdownGfxState(); void ReapplyGfxState(); @@ -314,4 +327,4 @@ class GPUInterface; extern GPUgstate gstate; extern GPUStateCache gstate_c; extern GPUInterface *gpu; -extern GPUStatistics gpuStats; \ No newline at end of file +extern GPUStatistics gpuStats; diff --git a/GPU/Null/NullGpu.cpp b/GPU/Null/NullGpu.cpp index 0445eecff4..23facd8802 100644 --- a/GPU/Null/NullGpu.cpp +++ b/GPU/Null/NullGpu.cpp @@ -713,7 +713,6 @@ void NullGPU::ExecuteOp(u32 op, u32 diff) case GE_CMD_ZTEST: { - //glDepthFunc(ztests[data&7]); DEBUG_LOG(G3D,"DL Z test mode: %i", data); } break; diff --git a/Windows/OpenGLBase.cpp b/Windows/OpenGLBase.cpp index 706d3c17e8..c55eb91a27 100644 --- a/Windows/OpenGLBase.cpp +++ b/Windows/OpenGLBase.cpp @@ -14,6 +14,7 @@ #include #include // Header File For The OpenGL32 Library +#include "../native/gfx_es2/gl_state.h" #include "OpenGLBase.h" @@ -138,6 +139,7 @@ bool GL_Init(HWND window) setVSync(0); glewInit(); + glstate.Initialize(); GL_Resized(); // Set Up Our Perspective GL Screen diff --git a/Windows/PPSSPP.sln b/Windows/PPSSPP.sln index 0ee6604d92..e412061fdb 100644 --- a/Windows/PPSSPP.sln +++ b/Windows/PPSSPP.sln @@ -1,8 +1,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPSSPPWindows", "PPSSPP.vcxproj", "{567AF8DB-42C1-4D08-96CD-D70A2DFEFC6B}" ProjectSection(ProjectDependencies) = postProject - {E8B58922-9827-493D-81E0-4B6E6BD77171} = {E8B58922-9827-493D-81E0-4B6E6BD77171} + {C4DF647E-80EA-4111-A0A8-218B1B711E18} = {C4DF647E-80EA-4111-A0A8-218B1B711E18} {F761046E-6C38-4428-A5F1-38391A37BB34} = {F761046E-6C38-4428-A5F1-38391A37BB34} {457F45D2-556F-47BC-A31D-AFF0D15BEAED} = {457F45D2-556F-47BC-A31D-AFF0D15BEAED} {3FCDBAE2-5103-4350-9A8E-848CE9C73195} = {3FCDBAE2-5103-4350-9A8E-848CE9C73195} @@ -19,13 +19,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GPU", "..\GPU\GPU.vcxproj", EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "..\Core\Core.vcxproj", "{533F1D30-D04D-47CC-AD71-20F658907E36}" ProjectSection(ProjectDependencies) = postProject - {E8B58922-9827-493D-81E0-4B6E6BD77171} = {E8B58922-9827-493D-81E0-4B6E6BD77171} + {C4DF647E-80EA-4111-A0A8-218B1B711E18} = {C4DF647E-80EA-4111-A0A8-218B1B711E18} {F761046E-6C38-4428-A5F1-38391A37BB34} = {F761046E-6C38-4428-A5F1-38391A37BB34} {457F45D2-556F-47BC-A31D-AFF0D15BEAED} = {457F45D2-556F-47BC-A31D-AFF0D15BEAED} {3FCDBAE2-5103-4350-9A8E-848CE9C73195} = {3FCDBAE2-5103-4350-9A8E-848CE9C73195} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "native", "..\native\native.vcxproj", "{E8B58922-9827-493D-81E0-4B6E6BD77171}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "native", "..\native\native.vcxproj", "{C4DF647E-80EA-4111-A0A8-218B1B711E18}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPSSPPHeadless", "..\headless\Headless.vcxproj", "{EE9BD869-CAA3-447D-8328-294D90DE2C1F}" EndProject @@ -79,14 +79,14 @@ Global {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|Win32.Build.0 = Release|Win32 {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|x64.ActiveCfg = Release|x64 {533F1D30-D04D-47CC-AD71-20F658907E36}.Release|x64.Build.0 = Release|x64 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Debug|Win32.ActiveCfg = Debug|Win32 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Debug|Win32.Build.0 = Debug|Win32 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Debug|x64.ActiveCfg = Debug|x64 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Debug|x64.Build.0 = Debug|x64 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Release|Win32.ActiveCfg = Release|Win32 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Release|Win32.Build.0 = Release|Win32 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Release|x64.ActiveCfg = Release|x64 - {E8B58922-9827-493D-81E0-4B6E6BD77171}.Release|x64.Build.0 = Release|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|Win32.Build.0 = Debug|Win32 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|x64.ActiveCfg = Debug|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Debug|x64.Build.0 = Debug|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|Win32.ActiveCfg = Release|Win32 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|Win32.Build.0 = Release|Win32 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|x64.ActiveCfg = Release|x64 + {C4DF647E-80EA-4111-A0A8-218B1B711E18}.Release|x64.Build.0 = Release|x64 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|Win32.ActiveCfg = Debug|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|Win32.Build.0 = Debug|Win32 {EE9BD869-CAA3-447D-8328-294D90DE2C1F}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/android/jni/Android.mk b/android/jni/Android.mk index a98a774767..c45fc270d3 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -72,6 +72,7 @@ LOCAL_SRC_FILES := \ $(SRC)/GPU/GLES/DisplayListInterpreter.cpp \ $(SRC)/GPU/GLES/TextureCache.cpp \ $(SRC)/GPU/GLES/TransformPipeline.cpp \ + $(SRC)/GPU/GLES/StateMapping.cpp \ $(SRC)/GPU/GLES/VertexDecoder.cpp \ $(SRC)/GPU/GLES/ShaderManager.cpp \ $(SRC)/GPU/GLES/VertexShaderGenerator.cpp \ diff --git a/native b/native index 84f741b21d..8900d99779 160000 --- a/native +++ b/native @@ -1 +1 @@ -Subproject commit 84f741b21dbaa5cc5f67a9399549648df86cd886 +Subproject commit 8900d99779d836cf4a016809277003518d0b2a7c