[GLESv3] Invalidate index range cache on buffer unmap/flush

Fixes incorrect out of bounds validation messages
while playing Vector 2 (ES 3.1 game)

Change-Id: I7290b6a1ba0417d897f119d5d7695c2c16d64e39
diff --git a/system/GLESv2_enc/GL2Encoder.cpp b/system/GLESv2_enc/GL2Encoder.cpp
index c45249b..e25833b 100755
--- a/system/GLESv2_enc/GL2Encoder.cpp
+++ b/system/GLESv2_enc/GL2Encoder.cpp
@@ -2442,6 +2442,15 @@
     RET_AND_SET_ERROR_IF(!buf, GL_INVALID_VALUE, GL_FALSE);
     RET_AND_SET_ERROR_IF(!buf->m_mapped, GL_INVALID_OPERATION, GL_FALSE);
 
+    if (buf->m_mappedAccess & GL_MAP_WRITE_BIT) {
+        // invalide index range cache here
+        if (buf->m_mappedAccess & GL_MAP_INVALIDATE_BUFFER_BIT) {
+            buf->m_indexRangeCache.invalidateRange(0, buf->m_size);
+        } else {
+            buf->m_indexRangeCache.invalidateRange(buf->m_mappedOffset, buf->m_mappedLength);
+        }
+    }
+
     GLboolean host_res = GL_TRUE;
 
     ctx->glUnmapBufferAEMU(
@@ -2479,6 +2488,9 @@
     SET_ERROR_IF(offset + length > buf->m_mappedLength, GL_INVALID_VALUE);
 
     GLintptr totalOffset = buf->m_mappedOffset + offset;
+
+    buf->m_indexRangeCache.invalidateRange(totalOffset, length);
+
     ctx->glFlushMappedBufferRangeAEMU(
             ctx, target,
             totalOffset,