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
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 685c672..9ebbc18 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 @@
                 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);
         }