From 580143e5e264f1295a60adef2d5836eaf967bf62 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 31 May 2014 18:55:00 -0700 Subject: [PATCH] Disable vertex arrays before depal as well. --- GPU/GLES/GLES_GPU.cpp | 1 + GPU/GLES/ShaderManager.cpp | 3 +-- GPU/GLES/TextureCache.cpp | 21 ++++++++++++--------- GPU/GLES/TextureCache.h | 5 +++++ GPU/GPUState.h | 2 -- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/GPU/GLES/GLES_GPU.cpp b/GPU/GLES/GLES_GPU.cpp index 18b7451429..3ccd375063 100644 --- a/GPU/GLES/GLES_GPU.cpp +++ b/GPU/GLES/GLES_GPU.cpp @@ -411,6 +411,7 @@ GLES_GPU::GLES_GPU() framebufferManager_.SetShaderManager(shaderManager_); textureCache_.SetFramebufferManager(&framebufferManager_); textureCache_.SetDepalShaderCache(&depalShaderCache_); + textureCache_.SetShaderManager(shaderManager_); // Sanity check gstate if ((int *)&gstate.transferstart - (int *)&gstate != 0xEA) { diff --git a/GPU/GLES/ShaderManager.cpp b/GPU/GLES/ShaderManager.cpp index 3d1ecf7db8..8872960182 100644 --- a/GPU/GLES/ShaderManager.cpp +++ b/GPU/GLES/ShaderManager.cpp @@ -684,11 +684,10 @@ Shader *ShaderManager::ApplyVertexShader(int prim, u32 vertType) { LinkedShader *ShaderManager::ApplyFragmentShader(Shader *vs, int prim, u32 vertType) { FragmentShaderID FSID; ComputeFragmentShaderID(&FSID); - if (lastVShaderSame_ && FSID == lastFSID_ && !gstate_c.shaderChanged) { + if (lastVShaderSame_ && FSID == lastFSID_) { lastShader_->UpdateUniforms(vertType); return lastShader_; } - gstate_c.shaderChanged = false; lastFSID_ = FSID; diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index 958be67070..3345dce644 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -28,6 +28,7 @@ #include "GPU/GLES/Framebuffer.h" #include "GPU/GLES/FragmentShaderGenerator.h" #include "GPU/GLES/DepalettizeShader.h" +#include "GPU/GLES/ShaderManager.h" #include "GPU/Common/TextureDecoder.h" #include "Core/Config.h" #include "Core/Host.h" @@ -916,13 +917,17 @@ void TextureCache::SetTextureFramebuffer(TexCacheEntry *entry) { }; static const GLubyte indices[4] = { 0, 1, 3, 2 }; + shaderManager_->DirtyLastShader(); + glUseProgram(program); - gstate_c.shaderChanged = true; + + GLint a_position = glGetAttribLocation(program, "a_position"); + GLint a_texcoord0 = glGetAttribLocation(program, "a_texcoord0"); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - glEnableVertexAttribArray(0); - glEnableVertexAttribArray(1); + glEnableVertexAttribArray(a_position); + glEnableVertexAttribArray(a_texcoord0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, clutTexture); @@ -944,14 +949,12 @@ void TextureCache::SetTextureFramebuffer(TexCacheEntry *entry) { #endif glViewport(0, 0, entry->framebuffer->renderWidth, entry->framebuffer->renderHeight); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 12, pos); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 8, uv); + glVertexAttribPointer(a_position, 3, GL_FLOAT, GL_FALSE, 12, pos); + glVertexAttribPointer(a_texcoord0, 2, GL_FLOAT, GL_FALSE, 8, uv); glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indices); + glDisableVertexAttribArray(a_position); + glDisableVertexAttribArray(a_texcoord0); - /* - glDisableVertexAttribArray(0); - glDisableVertexAttribArray(1); - */ fbo_bind_color_as_texture(entry->depalFBO, 0); glstate.Restore(); framebufferManager_->RebindFramebuffer(); diff --git a/GPU/GLES/TextureCache.h b/GPU/GLES/TextureCache.h index 8ee87e5d6d..4b2bcfd3c7 100644 --- a/GPU/GLES/TextureCache.h +++ b/GPU/GLES/TextureCache.h @@ -28,6 +28,7 @@ struct VirtualFramebuffer; class FramebufferManager; class DepalShaderCache; +class ShaderManager; enum TextureFiltering { AUTO = 1, @@ -74,6 +75,9 @@ public: void SetDepalShaderCache(DepalShaderCache *dpCache) { depalShaderCache_ = dpCache; } + void SetShaderManager(ShaderManager *sm) { + shaderManager_ = sm; + } size_t NumLoadedTextures() const { return cache.size(); @@ -203,6 +207,7 @@ private: int decimationCounter_; FramebufferManager *framebufferManager_; DepalShaderCache *depalShaderCache_; + ShaderManager *shaderManager_; }; GLenum getClutDestFormat(GEPaletteFormat format); diff --git a/GPU/GPUState.h b/GPU/GPUState.h index ca8b668ca1..b8e79488e7 100644 --- a/GPU/GPUState.h +++ b/GPU/GPUState.h @@ -453,8 +453,6 @@ struct GPUStateCache bool textureSimpleAlpha; bool vertexFullAlpha; bool framebufChanged; - // Doesn't need savestating. - bool shaderChanged; int skipDrawReason;