From 772468f2b673201231b78bcf8db52b8a5676f0ca Mon Sep 17 00:00:00 2001 From: Liran Date: Sun, 24 Jul 2011 10:41:27 +0300 Subject: [PATCH] GLES2 translator: workaround for nvidia bug with GL_VALIDATE_STAUS nvidia may return GL_VALIDATE_STATUS = GL_TRUE even when the program does not link this change checks for GL_LINK_STATUS when GL_VALIDATE_STATUS is queried Change-Id: Ia9f5da9c71b8666ce929d8cc2a44639bc947eecb --- .../host/libs/Translator/GLES_V2/GLESv2Imp.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 685c67241..9ebbc18ea 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -935,6 +935,21 @@ 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: + { + ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,program); + SET_ERROR_IF(!objData.Ptr() ,GL_INVALID_OPERATION); + SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION); + ProgramData* programData = (ProgramData*)objData.Ptr(); + if (programData->getLinkStatus()==GL_TRUE) + ctx->dispatcher().glGetProgramiv(globalProgramName,pname,params); + else + params[0] = GL_FALSE; + } + break; +#endif default: ctx->dispatcher().glGetProgramiv(globalProgramName,pname,params); }