Implement ANGLE_program_cache_control extensions.
This will give the browsers the ability to control the cache size,
query and populate the contents, and trim cache contents on memory
pressure.
BUG=angleproject:1897
Change-Id: I6edaa7d307b890223db98792d5b074e4a7fdfaa4
Reviewed-on: https://chromium-review.googlesource.com/563606
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index 63f196c..2635c76 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -63,7 +63,8 @@
mMultiSampling(false),
mSampleAlphaToOne(false),
mFramebufferSRGB(true),
- mRobustResourceInit(false)
+ mRobustResourceInit(false),
+ mProgramBinaryCacheEnabled(false)
{
}
@@ -75,7 +76,8 @@
bool debug,
bool bindGeneratesResource,
bool clientArraysEnabled,
- bool robustResourceInit)
+ bool robustResourceInit,
+ bool programBinaryCacheEnabled)
{
const Caps &caps = context->getCaps();
const Extensions &extensions = context->getExtensions();
@@ -186,6 +188,7 @@
mPathStencilMask = std::numeric_limits<GLuint>::max();
mRobustResourceInit = robustResourceInit;
+ mProgramBinaryCacheEnabled = programBinaryCacheEnabled;
}
void State::reset(const Context *context)
@@ -687,7 +690,12 @@
return getFramebufferSRGB();
case GL_CONTEXT_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
return mRobustResourceInit;
- default: UNREACHABLE(); return false;
+ case GL_PROGRAM_CACHE_ENABLED_ANGLE:
+ return mProgramBinaryCacheEnabled;
+
+ default:
+ UNREACHABLE();
+ return false;
}
}
@@ -1666,6 +1674,10 @@
case GL_CONTEXT_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
*params = mRobustResourceInit ? GL_TRUE : GL_FALSE;
break;
+ case GL_PROGRAM_CACHE_ENABLED_ANGLE:
+ *params = mProgramBinaryCacheEnabled ? GL_TRUE : GL_FALSE;
+ break;
+
default:
UNREACHABLE();
break;