Use a Caps structure to store extension and texture format support.
Removes support for fallbacks in D3D9 texture formats. The fallback
formats did not work properly anyways.
BUG=angle:658
Change-Id: Idfa5183bf71fd8ebf4608f940f9d93177b9eff08
Reviewed-on: https://chromium-review.googlesource.com/200813
Tested-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index bf3cd0f..08894b7 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -1676,7 +1676,7 @@
case GL_UNSIGNED_SHORT:
break;
case GL_UNSIGNED_INT:
- if (!context->supports32bitIndices())
+ if (!context->getCaps().extensions.elementIndexUint)
{
return gl::error(GL_INVALID_ENUM);
}
@@ -1732,7 +1732,7 @@
case GL_UNSIGNED_SHORT:
break;
case GL_UNSIGNED_INT:
- if (!context->supports32bitIndices())
+ if (!context->getCaps().extensions.elementIndexUint)
{
return gl::error(GL_INVALID_ENUM);
}
@@ -2095,19 +2095,19 @@
// Internally, all texture formats are sized so checking if the format
// is color renderable and filterable will not fail.
- bool validRenderable = (gl::IsColorRenderingSupported(internalFormat, context) ||
+ const gl::TextureCaps &formatCaps = context->getCaps().textureCaps.get(internalFormat);
+
+ bool validRenderable = (formatCaps.colorRendering ||
gl::IsSizedInternalFormat(internalFormat, context->getClientVersion()));
- if (gl::IsDepthRenderingSupported(internalFormat, context) ||
- gl::IsFormatCompressed(internalFormat, context->getClientVersion()) ||
- !gl::IsTextureFilteringSupported(internalFormat, context) ||
- !validRenderable)
+ if (formatCaps.depthRendering || gl::IsFormatCompressed(internalFormat, context->getClientVersion()) ||
+ !formatCaps.filtering || !validRenderable)
{
return gl::error(GL_INVALID_OPERATION);
}
// Non-power of 2 ES2 check
- if (!context->supportsNonPower2Texture() && (!gl::isPow2(texture->getBaseLevelWidth()) || !gl::isPow2(texture->getBaseLevelHeight())))
+ if (!context->getCaps().extensions.textureNPOT && (!gl::isPow2(texture->getBaseLevelWidth()) || !gl::isPow2(texture->getBaseLevelHeight())))
{
ASSERT(context->getClientVersion() <= 2 && (target == GL_TEXTURE_2D || target == GL_TEXTURE_CUBE_MAP));
return gl::error(GL_INVALID_OPERATION);
@@ -3202,14 +3202,11 @@
case GL_RENDERBUFFER_DEPTH_SIZE: *params = attachment->getDepthSize(); break;
case GL_RENDERBUFFER_STENCIL_SIZE: *params = attachment->getStencilSize(); break;
case GL_RENDERBUFFER_SAMPLES_ANGLE:
- if (context->getMaxSupportedSamples() != 0)
- {
- *params = attachment->getSamples();
- }
- else
+ if (!context->getCaps().extensions.framebufferMultisample)
{
return gl::error(GL_INVALID_ENUM);
}
+ *params = attachment->getSamples();
break;
default:
return gl::error(GL_INVALID_ENUM);
@@ -3444,7 +3441,7 @@
return (GLubyte*)"OpenGL ES GLSL ES 3.00 (ANGLE " ANGLE_VERSION_STRING ")";
}
case GL_EXTENSIONS:
- return (GLubyte*)((context != NULL) ? context->getCombinedExtensionsString() : "");
+ return (GLubyte*)((context != NULL) ? context->getExtensionString() : "");
default:
return gl::error(GL_INVALID_ENUM, (GLubyte*)NULL);
}
@@ -3508,7 +3505,7 @@
*params = (GLfloat)texture->getUsage();
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- if (!context->supportsTextureFilterAnisotropy())
+ if (!context->getCaps().extensions.textureFilterAnisotropic)
{
return gl::error(GL_INVALID_ENUM);
}
@@ -3634,7 +3631,7 @@
*params = texture->getUsage();
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- if (!context->supportsTextureFilterAnisotropy())
+ if (!context->getCaps().extensions.textureFilterAnisotropic)
{
return gl::error(GL_INVALID_ENUM);
}
@@ -5014,7 +5011,7 @@
case GL_TEXTURE_MIN_FILTER: texture->setMinFilter(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_MAG_FILTER: texture->setMagFilter(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_USAGE_ANGLE: texture->setUsage(gl::uiround<GLenum>(param)); break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(param, context->getTextureMaxAnisotropy()); break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(param, context->getCaps().extensions.maxTextureAnisotropy); break;
case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed(gl::uiround<GLenum>(param)); break;
@@ -5070,7 +5067,7 @@
case GL_TEXTURE_MIN_FILTER: texture->setMinFilter((GLenum)param); break;
case GL_TEXTURE_MAG_FILTER: texture->setMagFilter((GLenum)param); break;
case GL_TEXTURE_USAGE_ANGLE: texture->setUsage((GLenum)param); break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy((float)param, context->getTextureMaxAnisotropy()); break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy((float)param, context->getCaps().extensions.maxTextureAnisotropy); break;
case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode((GLenum)param); break;
case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc((GLenum)param); break;
case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed((GLenum)param); break;
@@ -5107,6 +5104,11 @@
if (context)
{
+ if (!context->getCaps().extensions.textureStorage)
+ {
+ return gl::error(GL_INVALID_OPERATION);
+ }
+
if (context->getClientVersion() < 3 &&
!ValidateES2TexStorageParameters(context, target, levels, internalformat, width, height))
{
@@ -8105,11 +8107,11 @@
return gl::error(GL_INVALID_ENUM, reinterpret_cast<GLubyte*>(NULL));
}
- if (index >= context->getNumExtensions())
+ if (index >= context->getExtensionStringCount())
{
return gl::error(GL_INVALID_VALUE, reinterpret_cast<GLubyte*>(NULL));
}
-
+
return reinterpret_cast<const GLubyte*>(context->getExtensionString(index));
}
}
@@ -9725,9 +9727,8 @@
return gl::error(GL_INVALID_OPERATION);
}
- if (!gl::IsColorRenderingSupported(internalformat, context) &&
- !gl::IsDepthRenderingSupported(internalformat, context) &&
- !gl::IsStencilRenderingSupported(internalformat, context))
+ const gl::TextureCaps &formatCaps = context->getCaps().textureCaps.get(internalformat);
+ if (!formatCaps.colorRendering && !formatCaps.depthRendering && !formatCaps.stencilRendering)
{
return gl::error(GL_INVALID_ENUM);
}
@@ -9954,11 +9955,6 @@
if (context)
{
- if (!context->supportsPBOs())
- {
- return gl::error(GL_INVALID_OPERATION);
- }
-
if (!gl::ValidBufferTarget(context, target))
{
return gl::error(GL_INVALID_ENUM);