OpenGL2: Disable the VAO cache by default

The VAO surface cache uses glBufferSubData and triggers a very slow
path in some GLES implementations. Specifically I have observed 10x
frame times under Emscripten with ANGLE/Metal on macOS and with Mali
on Android.

Co-authored-by: Zack Middleton <zack@cloemail.com>
Co-authored-by: WofWca <wofwca@protonmail.com>
This commit is contained in:
James Darpinian 2024-07-07 15:42:36 -07:00 committed by Zack Middleton
parent 8d2c2b42a5
commit dac3062dde
3 changed files with 9 additions and 0 deletions

View File

@ -228,6 +228,8 @@ cvar_t *r_saveFontData;
cvar_t *r_marksOnTriangleMeshes;
cvar_t *r_vaoCache;
cvar_t *r_aviMotionJpegQuality;
cvar_t *r_screenshotJpegQuality;
@ -1433,6 +1435,8 @@ void R_Register( void )
r_marksOnTriangleMeshes = ri.Cvar_Get("r_marksOnTriangleMeshes", "0", CVAR_ARCHIVE);
r_vaoCache = ri.Cvar_Get("r_vaoCache", "0", CVAR_ARCHIVE);
r_aviMotionJpegQuality = ri.Cvar_Get("r_aviMotionJpegQuality", "90", CVAR_ARCHIVE);
r_screenshotJpegQuality = ri.Cvar_Get("r_screenshotJpegQuality", "90", CVAR_ARCHIVE);

View File

@ -1848,6 +1848,8 @@ extern cvar_t *r_printShaders;
extern cvar_t *r_marksOnTriangleMeshes;
extern cvar_t *r_vaoCache;
//====================================================================
static ID_INLINE qboolean ShaderRequiresCPUDeforms(const shader_t * shader)

View File

@ -409,6 +409,9 @@ static qboolean RB_SurfaceVaoCached(int numVerts, srfVert_t *verts, int numIndex
qboolean recycleIndexBuffer = qfalse;
qboolean endSurface = qfalse;
if (!r_vaoCache->integer)
return qfalse;
if (!(!ShaderRequiresCPUDeforms(tess.shader) && !tess.shader->isSky && !tess.shader->isPortal))
return qfalse;