[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,