Commit 111a99e8 by Geoff Lang Committed by Commit Bot

Check that the requested extension is supported by the backend.

Previously, we would only check that the extension was requestable and not verify that the driver could support it. BUG=angleproject:1523 Change-Id: I5273920fc08a20beda54d4afaeb406c6c1c2056f Reviewed-on: https://chromium-review.googlesource.com/723559 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 02032bda
...@@ -2566,12 +2566,23 @@ size_t Context::getExtensionStringCount() const ...@@ -2566,12 +2566,23 @@ size_t Context::getExtensionStringCount() const
return mExtensionStrings.size(); return mExtensionStrings.size();
} }
bool Context::isExtensionRequestable(const char *name)
{
const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap();
auto extension = extensionInfos.find(name);
const Extensions &nativeExtensions = mImplementation->getNativeExtensions();
return extension != extensionInfos.end() && extension->second.Requestable &&
nativeExtensions.*(extension->second.ExtensionsMember);
}
void Context::requestExtension(const char *name) void Context::requestExtension(const char *name)
{ {
const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap(); const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap();
ASSERT(extensionInfos.find(name) != extensionInfos.end()); ASSERT(extensionInfos.find(name) != extensionInfos.end());
const auto &extension = extensionInfos.at(name); const auto &extension = extensionInfos.at(name);
ASSERT(extension.Requestable); ASSERT(extension.Requestable);
ASSERT(mImplementation->getNativeExtensions().*(extension.ExtensionsMember));
if (mExtensions.*(extension.ExtensionsMember)) if (mExtensions.*(extension.ExtensionsMember))
{ {
......
...@@ -909,6 +909,7 @@ class Context final : public ValidationContext ...@@ -909,6 +909,7 @@ class Context final : public ValidationContext
size_t getExtensionStringCount() const; size_t getExtensionStringCount() const;
bool isExtensionRequestable(const char *name);
void requestExtension(const char *name); void requestExtension(const char *name);
size_t getRequestableExtensionStringCount() const; size_t getRequestableExtensionStringCount() const;
......
...@@ -69,6 +69,7 @@ ContextNULL::ContextNULL(const gl::ContextState &state, AllocationTrackerNULL *a ...@@ -69,6 +69,7 @@ ContextNULL::ContextNULL(const gl::ContextState &state, AllocationTrackerNULL *a
mExtensions = gl::Extensions(); mExtensions = gl::Extensions();
mExtensions.fence = true; mExtensions.fence = true;
mExtensions.instancedArrays = true;
mExtensions.pixelBufferObject = true; mExtensions.pixelBufferObject = true;
mExtensions.mapBuffer = true; mExtensions.mapBuffer = true;
mExtensions.mapBufferRange = true; mExtensions.mapBufferRange = true;
......
...@@ -4224,7 +4224,7 @@ bool ValidateBufferSubData(ValidationContext *context, ...@@ -4224,7 +4224,7 @@ bool ValidateBufferSubData(ValidationContext *context,
return true; return true;
} }
bool ValidateRequestExtensionANGLE(ValidationContext *context, const GLchar *name) bool ValidateRequestExtensionANGLE(Context *context, const GLchar *name)
{ {
if (!context->getExtensions().requestExtension) if (!context->getExtensions().requestExtension)
{ {
...@@ -4232,9 +4232,7 @@ bool ValidateRequestExtensionANGLE(ValidationContext *context, const GLchar *nam ...@@ -4232,9 +4232,7 @@ bool ValidateRequestExtensionANGLE(ValidationContext *context, const GLchar *nam
return false; return false;
} }
const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap(); if (!context->isExtensionRequestable(name))
auto extension = extensionInfos.find(name);
if (extension == extensionInfos.end() || !extension->second.Requestable)
{ {
context->handleError(InvalidOperation() << "Extension " << name << " is not requestable."); context->handleError(InvalidOperation() << "Extension " << name << " is not requestable.");
return false; return false;
......
...@@ -357,7 +357,7 @@ bool ValidateBufferSubData(ValidationContext *context, ...@@ -357,7 +357,7 @@ bool ValidateBufferSubData(ValidationContext *context,
GLsizeiptr size, GLsizeiptr size,
const void *data); const void *data);
bool ValidateRequestExtensionANGLE(ValidationContext *context, const GLchar *name); bool ValidateRequestExtensionANGLE(Context *context, const GLchar *name);
bool ValidateActiveTexture(ValidationContext *context, GLenum texture); bool ValidateActiveTexture(ValidationContext *context, GLenum texture);
bool ValidateAttachShader(ValidationContext *context, GLuint program, GLuint shader); bool ValidateAttachShader(ValidationContext *context, GLuint program, GLuint shader);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment