Move the API parameter validation out of Fence.cpp to libGLESv2.cpp.

TRAC #23446

Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Authored-by: Jamie Madill
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index b08ce3a..30ae7e6 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -4018,6 +4018,11 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
+            if (fenceObject->isFence() != GL_TRUE)
+            {
+                return gl::error(GL_INVALID_OPERATION);
+            }
+
             fenceObject->finishFence();
         }
     }
@@ -4900,7 +4905,21 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            fenceObject->getFenceiv(pname, params);
+            if (fenceObject->isFence() != GL_TRUE)
+            {
+                return gl::error(GL_INVALID_OPERATION);
+            }
+
+            switch (pname)
+            {
+              case GL_FENCE_STATUS_NV:
+              case GL_FENCE_CONDITION_NV:
+                break;
+
+              default: return gl::error(GL_INVALID_ENUM);
+            }
+
+            params[0] = fenceObject->getFencei(pname);
         }
     }
     catch(std::bad_alloc&)
@@ -7056,6 +7075,11 @@
                 return gl::error(GL_INVALID_OPERATION, GL_TRUE);
             }
 
+            if (fenceObject->isFence() != GL_TRUE)
+            {
+                return gl::error(GL_INVALID_OPERATION, GL_TRUE);
+            }
+
             return fenceObject->testFence();
         }
     }