diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index 9ebbc18ea..b2b290eae 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -935,7 +935,6 @@ GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params[0] = programData->getLinkStatus(); } break; -#ifdef NV_WAR //validate status should not return GL_TRUE if link failed case GL_VALIDATE_STATUS: { @@ -949,7 +948,6 @@ GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params[0] = GL_FALSE; } break; -#endif default: ctx->dispatcher().glGetProgramiv(globalProgramName,pname,params); } @@ -1300,19 +1298,17 @@ GL_APICALL void GL_APIENTRY glReleaseShaderCompiler(void){ GL_APICALL void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height){ GET_CTX(); GLenum internal = internalformat; -#ifdef NV_WAR switch (internalformat) { case GL_RGB565: internal = GL_RGB; break; case GL_RGB5_A1: - internal = GL_RGBA4; + internal = GL_RGBA; break; default: internal = internalformat; break; } -#endif ctx->dispatcher().glRenderbufferStorageEXT(target,internal,width,height); } @@ -1405,10 +1401,8 @@ GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint inte } if (type==GL_HALF_FLOAT_OES) type = GL_HALF_FLOAT_NV; -#ifdef NV_WAR if (pixels==NULL && type==GL_UNSIGNED_SHORT_5_5_5_1) type = GL_UNSIGNED_SHORT; -#endif ctx->dispatcher().glTexImage2D(target,level,internalformat,width,height,border,format,type,pixels); } diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.cpp index 784c0d3ea..57ebca5db 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.cpp @@ -15,10 +15,11 @@ void ShaderParser::setSrc(const Version& ver,GLsizei count,const GLchar** string } clearParsedSrc(); - if(getenv("NV_WAR")) + const char *forceVersion = getenv("GOOGLE_GLES_FORCE_GLSL_VERSION"); + if (forceVersion) { fprintf(stderr, "Workaround for nVidia's liberal shader compilation - adding #version token to shader\n"); - parseGLSLversion(); + parseGLSLversion(forceVersion); } /* version 1.30.10 is the first version of GLSL Language containing precision qualifiers @@ -52,10 +53,10 @@ void ShaderParser::parseOriginalSrc() { m_parsedSrc+=m_src; } -void ShaderParser::parseGLSLversion() { +void ShaderParser::parseGLSLversion(const char *forceVersion) { //if no version definition is found if (m_src.find("#version ", 0) == std::string::npos) { - m_parsedSrc += "#version 100\n"; + m_parsedSrc += std::string("#version ") + std::string(forceVersion) + std::string("\n"); } } diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.h b/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.h index ca2c69fa9..70641d5d6 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.h +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/ShaderParser.h @@ -18,7 +18,7 @@ public: private: void parseOriginalSrc(); - void parseGLSLversion(); + void parseGLSLversion(const char *forceVersion); void parseOmitPrecision(); void parseExtendDefaultPrecision(); void clearParsedSrc();