Commit 83463115 by Nicolas Capens Committed by Nicolas Capens

Always create an OpenGL ES 3.0 context.

The EGL spec allows that on context creation, a newer, compatible version is returned. OpenGL ES 3.0 is stated to be backward compatible with OpenGL ES 2.0, so we can stop creating a context that is limited to OpenGL ES 2.0 features, and always return an OpenGL ES 3.0 context. This simplifies our code and maintenance a bit and reduces the risk of incorrect validation. Note that Appendix F of the OpenGL ES 3.0 specification lists changes in behavior that aren't entirely backward compatible with OpenGL ES 2.0: * OpenGL ES 3.0 requires that all cube map filtering be seamless. OpenGL ES 2.0 specified that a single cube map face be selected and used for filtering. See section 3.8.9.1. * OpenGL ES 3.0 specifies a zero-preserving mapping when converting back and forth between signed normalized fixed-point values and floating- point values. OpenGL ES 2.0 specified a mapping by which zeros are not preserved. See section 2.1.6. * OpenGL ES 3.0 requires that framebuffer objects not be shared between contexts. OpenGL ES 2.0 left it undefined whether framebuffer objects could be shared. See appendix D. Additional differences can stem from new extensions being exposed (e.g. GL_EXT_color_buffer_float), and framebuffer configurations that are newly supported or no longer supported (in particular we allowed separate depth and stencil attachments, which OpenGL ES 3.0 expressly disallows). See also https://gitlab.khronos.org/opengl/API/issues/82 Bug swiftshader:45 Change-Id: I90d72698d509b4f03263edcf7c67e44fcef0beb6 Reviewed-on: https://swiftshader-review.googlesource.com/19388Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 41b77484
......@@ -13,9 +13,9 @@
// limitations under the License.
#define MAJOR_VERSION 4
#define MINOR_VERSION 0
#define MINOR_VERSION 1
#define BUILD_VERSION 0
#define BUILD_REVISION 7
#define BUILD_REVISION 0
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
......
......@@ -576,7 +576,7 @@ EGLContext Display::createContext(EGLConfig configHandle, const egl::Context *sh
{
if(libGLESv2)
{
context = libGLESv2->es2CreateContext(this, shareContext, clientVersion, config);
context = libGLESv2->es2CreateContext(this, shareContext, config);
}
}
else
......
......@@ -430,7 +430,7 @@ struct State
class [[clang::lto_visibility_public]] Context : public egl::Context
{
public:
Context(egl::Display *display, const Context *shareContext, EGLint clientVersion, const egl::Config *config);
Context(egl::Display *display, const Context *shareContext, const egl::Config *config);
void makeCurrent(gl::Surface *surface) override;
EGLint getClientVersion() const override;
......@@ -725,7 +725,6 @@ private:
Query *createQuery(GLuint handle, GLenum type);
const EGLint clientVersion;
const egl::Config *const config;
State mState;
......
......@@ -329,8 +329,6 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
height = -1;
samples = -1;
GLint version = egl::getClientVersion();
for(int i = 0; i < MAX_COLOR_ATTACHMENTS; i++)
{
if(mColorbufferType[i] != GL_NONE)
......@@ -349,7 +347,7 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
if(IsRenderbuffer(mColorbufferType[i]))
{
if(!IsColorRenderable(colorbuffer->getFormat(), version))
if(!IsColorRenderable(colorbuffer->getFormat()))
{
return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
}
......@@ -358,7 +356,7 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
{
GLenum format = colorbuffer->getFormat();
if(!IsColorRenderable(format, version))
if(!IsColorRenderable(format))
{
return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
}
......@@ -382,11 +380,6 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
}
else
{
if(version < 3 && (width != colorbuffer->getWidth() || height != colorbuffer->getHeight()))
{
return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
}
if(samples != colorbuffer->getSamples())
{
return GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
......@@ -417,7 +410,7 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
if(IsRenderbuffer(mDepthbufferType))
{
if(!es2::IsDepthRenderable(depthbuffer->getFormat(), version))
if(!es2::IsDepthRenderable(depthbuffer->getFormat()))
{
return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
}
......@@ -443,11 +436,6 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
}
else
{
if(version < 3 && (width != depthbuffer->getWidth() || height != depthbuffer->getHeight()))
{
return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
}
if(samples != depthbuffer->getSamples())
{
return GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
......@@ -474,7 +462,7 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
if(IsRenderbuffer(mStencilbufferType))
{
if(!es2::IsStencilRenderable(stencilbuffer->getFormat(), version))
if(!es2::IsStencilRenderable(stencilbuffer->getFormat()))
{
return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
}
......@@ -502,11 +490,6 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
}
else
{
if(version < 3 && (width != stencilbuffer->getWidth() || height != stencilbuffer->getHeight()))
{
return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
}
if(samples != stencilbuffer->getSamples())
{
return GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
......@@ -517,7 +500,7 @@ GLenum Framebuffer::completeness(int &width, int &height, int &samples)
}
}
if((version >= 3) && depthbuffer && stencilbuffer && (depthbuffer != stencilbuffer))
if(depthbuffer && stencilbuffer && (depthbuffer != stencilbuffer))
{
// In the GLES 3.0 spec, section 4.4.4, Framebuffer Completeness:
// "The framebuffer object target is said to be framebuffer complete if all the following conditions are true:
......@@ -716,7 +699,7 @@ DefaultFramebuffer::DefaultFramebuffer()
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
{
GLenum defaultRenderbufferType = egl::getClientVersion() < 3 ? GL_RENDERBUFFER : GL_FRAMEBUFFER_DEFAULT;
GLenum defaultRenderbufferType = GL_FRAMEBUFFER_DEFAULT;
mColorbufferPointer[0] = new Renderbuffer(0, colorbuffer);
mColorbufferType[0] = defaultRenderbufferType;
......@@ -732,8 +715,8 @@ DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuf
mDepthbufferPointer = depthStencilRenderbuffer;
mStencilbufferPointer = depthStencilRenderbuffer;
mDepthbufferType = (depthStencilRenderbuffer->getDepthSize() != 0) ? defaultRenderbufferType : GL_NONE;
mStencilbufferType = (depthStencilRenderbuffer->getStencilSize() != 0) ? defaultRenderbufferType : GL_NONE;
mDepthbufferType = (depthStencilRenderbuffer->getDepthSize() != 0) ? GL_FRAMEBUFFER_DEFAULT : GL_NONE;
mStencilbufferType = (depthStencilRenderbuffer->getStencilSize() != 0) ? GL_FRAMEBUFFER_DEFAULT : GL_NONE;
}
}
......@@ -232,14 +232,6 @@ void Shader::compile()
}
shaderVersion = compiler->getShaderVersion();
int clientVersion = es2::getContext()->getClientVersion();
if(shaderVersion >= 300 && clientVersion < 3)
{
infoLog = "GLSL ES 3.00 is not supported by OpenGL ES 2.0 contexts";
success = false;
}
infoLog += compiler->getInfoSink().info.c_str();
if(!success)
......
......@@ -772,7 +772,7 @@ bool Texture2D::isMipmapComplete() const
bool Texture2D::isCompressed(GLenum target, GLint level) const
{
return IsCompressed(getFormat(target, level), egl::getClientVersion());
return IsCompressed(getFormat(target, level));
}
bool Texture2D::isDepth(GLenum target, GLint level) const
......@@ -1057,8 +1057,7 @@ void TextureCubeMap::setCompressedImage(GLenum target, GLint level, GLenum forma
image[face][level]->release();
}
int border = (egl::getClientVersion() >= 3) ? 1 : 0;
image[face][level] = egl::Image::create(this, width, height, 1, border, format);
image[face][level] = egl::Image::create(this, width, height, 1, 1, format);
if(!image[face][level])
{
......@@ -1242,7 +1241,7 @@ void TextureCubeMap::updateBorders(int level)
bool TextureCubeMap::isCompressed(GLenum target, GLint level) const
{
return IsCompressed(getFormat(target, level), egl::getClientVersion());
return IsCompressed(getFormat(target, level));
}
bool TextureCubeMap::isDepth(GLenum target, GLint level) const
......@@ -1264,8 +1263,7 @@ void TextureCubeMap::setImage(GLenum target, GLint level, GLsizei width, GLsizei
image[face][level]->release();
}
int border = (egl::getClientVersion() >= 3) ? 1 : 0;
image[face][level] = egl::Image::create(this, width, height, 1, border, internalformat);
image[face][level] = egl::Image::create(this, width, height, 1, 1, internalformat);
if(!image[face][level])
{
......@@ -1284,8 +1282,7 @@ void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum internalformat
image[face][level]->release();
}
int border = (egl::getClientVersion() >= 3) ? 1 : 0;
image[face][level] = egl::Image::create(this, width, height, 1, border, internalformat);
image[face][level] = egl::Image::create(this, width, height, 1, 1, internalformat);
if(!image[face][level])
{
......@@ -1377,8 +1374,7 @@ void TextureCubeMap::generateMipmaps()
image[f][i]->release();
}
int border = (egl::getClientVersion() >= 3) ? 1 : 0;
image[f][i] = egl::Image::create(this, std::max(image[f][mBaseLevel]->getWidth() >> i, 1), std::max(image[f][mBaseLevel]->getHeight() >> i, 1), 1, border, image[f][mBaseLevel]->getFormat());
image[f][i] = egl::Image::create(this, std::max(image[f][mBaseLevel]->getWidth() >> i, 1), std::max(image[f][mBaseLevel]->getHeight() >> i, 1), 1, 1, image[f][mBaseLevel]->getFormat());
if(!image[f][i])
{
......@@ -1782,7 +1778,7 @@ bool Texture3D::isMipmapComplete() const
bool Texture3D::isCompressed(GLenum target, GLint level) const
{
return IsCompressed(getFormat(target, level), egl::getClientVersion());
return IsCompressed(getFormat(target, level));
}
bool Texture3D::isDepth(GLenum target, GLint level) const
......
......@@ -1208,7 +1208,7 @@ void GL_APIENTRY Register(const char *licenseKey)
}
}
egl::Context *es2CreateContext(egl::Display *display, const egl::Context *shareContext, int clientVersion, const egl::Config *config);
egl::Context *es2CreateContext(egl::Display *display, const egl::Context *shareContext, const egl::Config *config);
extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname);
egl::Image *createBackBuffer(int width, int height, sw::Format format, int multiSampleDepth);
egl::Image *createBackBufferFromClientBuffer(const egl::ClientBuffer& clientBuffer);
......
......@@ -243,7 +243,7 @@ public:
void (*glGenerateMipmapOES)(GLenum target);
void (*glDrawBuffersEXT)(GLsizei n, const GLenum *bufs);
egl::Context *(*es2CreateContext)(egl::Display *display, const egl::Context *shareContext, int clientVersion, const egl::Config *config);
egl::Context *(*es2CreateContext)(egl::Display *display, const egl::Context *shareContext, const egl::Config *config);
__eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname);
egl::Image *(*createBackBuffer)(int width, int height, sw::Format format, int multiSampleDepth);
egl::Image *(*createBackBufferFromClientBuffer)(const egl::ClientBuffer& clientBuffer);
......
......@@ -368,7 +368,7 @@ GL_APICALL void GL_APIENTRY glTexImage3D(GLenum target, GLint level, GLint inter
if(context)
{
GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target, context->getClientVersion());
GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target);
if(validationError != GL_NO_ERROR)
{
return error(validationError);
......@@ -424,7 +424,7 @@ GL_APICALL void GL_APIENTRY glTexSubImage3D(GLenum target, GLint level, GLint xo
{
es2::Texture3D *texture = (target == GL_TEXTURE_3D) ? context->getTexture3D() : context->getTexture2DArray();
GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texture, context->getClientVersion());
GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texture);
if(validationError != GL_NO_ERROR)
{
return error(validationError);
......@@ -486,7 +486,7 @@ GL_APICALL void GL_APIENTRY glCopyTexSubImage3D(GLenum target, GLint level, GLin
GLenum colorbufferFormat = source->getFormat();
es2::Texture3D *texture = (target == GL_TEXTURE_3D) ? context->getTexture3D() : context->getTexture2DArray();
GLenum validationError = ValidateSubImageParams(false, true, target, level, xoffset, yoffset, zoffset, width, height, 1, GL_NONE, GL_NONE, texture, context->getClientVersion());
GLenum validationError = ValidateSubImageParams(false, true, target, level, xoffset, yoffset, zoffset, width, height, 1, GL_NONE, GL_NONE, texture);
if(validationError != GL_NO_ERROR)
{
return error(validationError);
......@@ -529,7 +529,7 @@ GL_APICALL void GL_APIENTRY glCompressedTexImage3D(GLenum target, GLint level, G
return error(GL_INVALID_VALUE);
}
if(!IsCompressed(internalformat, egl::getClientVersion()))
if(!IsCompressed(internalformat))
{
return error(GL_INVALID_ENUM);
}
......@@ -586,7 +586,7 @@ GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level
return error(GL_INVALID_VALUE);
}
if(!IsCompressed(format, egl::getClientVersion()))
if(!IsCompressed(format))
{
return error(GL_INVALID_ENUM);
}
......@@ -3634,7 +3634,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum
return error(GL_INVALID_OPERATION);
}
bool isCompressed = IsCompressed(internalformat, egl::getClientVersion());
bool isCompressed = IsCompressed(internalformat);
if(!IsSizedInternalFormat(internalformat) && !isCompressed)
{
return error(GL_INVALID_ENUM);
......@@ -3717,7 +3717,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum
return error(GL_INVALID_VALUE);
}
if(!IsSizedInternalFormat(internalformat) && !IsCompressed(internalformat, egl::getClientVersion()))
if(!IsSizedInternalFormat(internalformat) && !IsCompressed(internalformat))
{
return error(GL_INVALID_ENUM);
}
......@@ -3801,9 +3801,9 @@ GL_APICALL void GL_APIENTRY glGetInternalformativ(GLenum target, GLenum internal
if(internalformat == GL_RGB) internalformat = GL_RGB8;
if(internalformat == GL_RGBA) internalformat = GL_RGBA8;
if(!IsColorRenderable(internalformat, egl::getClientVersion()) &&
!IsDepthRenderable(internalformat, egl::getClientVersion()) &&
!IsStencilRenderable(internalformat, egl::getClientVersion()))
if(!IsColorRenderable(internalformat) &&
!IsDepthRenderable(internalformat) &&
!IsStencilRenderable(internalformat))
{
return error(GL_INVALID_ENUM);
}
......
......@@ -323,7 +323,7 @@ namespace es2
return -1;
}
bool IsCompressed(GLint internalformat, GLint clientVersion)
bool IsCompressed(GLint internalformat)
{
switch(internalformat)
{
......@@ -332,7 +332,6 @@ namespace es2
case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
case GL_ETC1_RGB8_OES:
return true;
case GL_COMPRESSED_R11_EAC:
case GL_COMPRESSED_SIGNED_R11_EAC:
case GL_COMPRESSED_RG11_EAC:
......@@ -343,7 +342,7 @@ namespace es2
case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
case GL_COMPRESSED_RGBA8_ETC2_EAC:
case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
return (clientVersion >= 3);
return true;
case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
......@@ -372,7 +371,7 @@ namespace es2
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
return ASTC_SUPPORT && (clientVersion >= 3);
return ASTC_SUPPORT;
default:
return false;
}
......@@ -455,7 +454,7 @@ namespace es2
}
GLenum ValidateSubImageParams(bool compressed, bool copy, GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, Texture *texture, GLint clientVersion)
GLsizei width, GLsizei height, GLenum format, GLenum type, Texture *texture)
{
if(!texture)
{
......@@ -473,7 +472,7 @@ namespace es2
}
else if(!copy) // CopyTexSubImage doesn't have format/type parameters.
{
GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target, clientVersion);
GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target);
if(validationError != GL_NO_ERROR)
{
return validationError;
......@@ -499,7 +498,7 @@ namespace es2
}
GLenum ValidateSubImageParams(bool compressed, bool copy, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, Texture *texture, GLint clientVersion)
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, Texture *texture)
{
if(!texture)
{
......@@ -515,7 +514,7 @@ namespace es2
{
GLenum sizedInternalFormat = texture->getFormat(target, level);
GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target, clientVersion);
GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target);
if(validationError != GL_NO_ERROR)
{
return validationError;
......@@ -624,7 +623,7 @@ namespace es2
return true;
}
bool IsValidReadPixelsFormatType(const Framebuffer *framebuffer, GLenum format, GLenum type, GLint clientVersion)
bool IsValidReadPixelsFormatType(const Framebuffer *framebuffer, GLenum format, GLenum type)
{
// GL_NV_read_depth
if(format == GL_DEPTH_COMPONENT)
......@@ -686,8 +685,6 @@ namespace es2
}
else if(IsSignedNonNormalizedInteger(internalformat))
{
ASSERT(clientVersion >= 3);
if(format == GL_RGBA_INTEGER && type == GL_INT)
{
return true;
......@@ -695,8 +692,6 @@ namespace es2
}
else if(IsUnsignedNonNormalizedInteger(internalformat))
{
ASSERT(clientVersion >= 3);
if(format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT)
{
return true;
......@@ -727,8 +722,6 @@ namespace es2
// Additional third combination accepted by OpenGL ES 3.0.
if(internalformat == GL_RGB10_A2)
{
ASSERT(clientVersion >= 3);
if(format == GL_RGBA && type == GL_UNSIGNED_INT_2_10_10_10_REV)
{
return true;
......@@ -783,7 +776,7 @@ namespace es2
return target == GL_TEXTURE_2D || IsCubemapTextureTarget(target) || target == GL_TEXTURE_3D || target == GL_TEXTURE_2D_ARRAY || target == GL_TEXTURE_RECTANGLE_ARB;
}
GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target, GLint clientVersion)
GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target)
{
switch(type)
{
......@@ -805,10 +798,6 @@ namespace es2
case GL_UNSIGNED_INT_10F_11F_11F_REV:
case GL_UNSIGNED_INT_5_9_9_9_REV:
case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
if(clientVersion < 3)
{
return GL_INVALID_ENUM;
}
break;
default:
return GL_INVALID_ENUM;
......@@ -846,10 +835,6 @@ namespace es2
case GL_RG_INTEGER:
case GL_RGB_INTEGER:
case GL_RGBA_INTEGER:
if(clientVersion < 3)
{
return GL_INVALID_ENUM;
}
break;
default:
return GL_INVALID_ENUM;
......@@ -1165,9 +1150,9 @@ namespace es2
return 1;
}
bool IsColorRenderable(GLint internalformat, GLint clientVersion)
bool IsColorRenderable(GLint internalformat)
{
if(IsCompressed(internalformat, clientVersion))
if(IsCompressed(internalformat))
{
return false;
}
......@@ -1188,9 +1173,8 @@ namespace es2
case GL_R32F:
case GL_RG32F:
case GL_RGB32F:
case GL_RGBA32F:
case GL_RGBA32F: // GL_EXT_color_buffer_float, OpenGL ES 3.0+ only.
case GL_BGRA8_EXT: // GL_EXT_texture_format_BGRA8888
return true;
case GL_R8UI:
case GL_R8I:
case GL_R16UI:
......@@ -1213,7 +1197,7 @@ namespace es2
case GL_RGBA32I:
case GL_RGBA32UI:
case GL_R11F_G11F_B10F:
return clientVersion >= 3;
return true;
case GL_R8_SNORM:
case GL_RG8_SNORM:
case GL_RGB8_SNORM:
......@@ -1242,9 +1226,9 @@ namespace es2
return false;
}
bool IsDepthRenderable(GLint internalformat, GLint clientVersion)
bool IsDepthRenderable(GLint internalformat)
{
if(IsCompressed(internalformat, clientVersion))
if(IsCompressed(internalformat))
{
return false;
}
......@@ -1255,10 +1239,9 @@ namespace es2
case GL_DEPTH_COMPONENT16:
case GL_DEPTH24_STENCIL8_OES: // GL_OES_packed_depth_stencil
case GL_DEPTH_COMPONENT32_OES: // GL_OES_depth32
return true;
case GL_DEPTH32F_STENCIL8:
case GL_DEPTH_COMPONENT32F:
return clientVersion >= 3;
return true;
case GL_STENCIL_INDEX8:
case GL_R8:
case GL_R8UI:
......@@ -1313,9 +1296,9 @@ namespace es2
return false;
}
bool IsStencilRenderable(GLint internalformat, GLint clientVersion)
bool IsStencilRenderable(GLint internalformat)
{
if(IsCompressed(internalformat, clientVersion))
if(IsCompressed(internalformat))
{
return false;
}
......@@ -1324,9 +1307,8 @@ namespace es2
{
case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES:
return true;
case GL_DEPTH32F_STENCIL8:
return clientVersion >= 3;
return true;
case GL_R8:
case GL_R8UI:
case GL_R8I:
......@@ -1384,7 +1366,7 @@ namespace es2
return false;
}
bool IsMipmappable(GLint internalformat, GLint clientVersion)
bool IsMipmappable(GLint internalformat)
{
if(internalformat == GL_NONE)
{
......@@ -1409,7 +1391,7 @@ namespace es2
case GL_LUMINANCE_ALPHA16F_EXT:
return true;
default:
return IsColorRenderable(internalformat, clientVersion);
return IsColorRenderable(internalformat);
}
}
......
......@@ -44,26 +44,26 @@ namespace es2
int AllocateFirstFreeBits(unsigned int *bits, unsigned int allocationSize, unsigned int bitsSize);
bool IsCompressed(GLint intenalformat, GLint clientVersion);
bool IsCompressed(GLint intenalformat);
bool IsSizedInternalFormat(GLint internalformat); // Not compressed.
GLenum ValidateSubImageParams(bool compressed, bool copy, GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, Texture *texture, GLint clientVersion);
GLsizei width, GLsizei height, GLenum format, GLenum type, Texture *texture);
GLenum ValidateSubImageParams(bool compressed, bool copy, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, Texture *texture, GLint clientVersion);
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, Texture *texture);
bool ValidateCopyFormats(GLenum textureFormat, GLenum colorbufferFormat);
bool IsValidReadPixelsFormatType(const Framebuffer *framebuffer, GLenum format, GLenum type, GLint clientVersion);
bool IsValidReadPixelsFormatType(const Framebuffer *framebuffer, GLenum format, GLenum type);
bool IsDepthTexture(GLenum format);
bool IsStencilTexture(GLenum format);
bool IsCubemapTextureTarget(GLenum target);
int CubeFaceIndex(GLenum cubeTarget);
bool IsTextureTarget(GLenum target);
GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target, GLint clientVersion);
GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target);
size_t GetTypeSize(GLenum type);
bool IsColorRenderable(GLint internalformat, GLint clientVersion);
bool IsDepthRenderable(GLint internalformat, GLint clientVersion);
bool IsStencilRenderable(GLint internalformat, GLint clientVersion);
bool IsMipmappable(GLint internalformat, GLint clientVersion);
bool IsColorRenderable(GLint internalformat);
bool IsDepthRenderable(GLint internalformat);
bool IsStencilRenderable(GLint internalformat);
bool IsMipmappable(GLint internalformat);
GLuint GetAlphaSize(GLint internalformat);
GLuint GetRedSize(GLint internalformat);
......
......@@ -136,7 +136,7 @@ protected:
EXPECT_TRUE(renderableType & EGL_OPENGL_ES2_BIT);
EGLint surfaceType = 0;
eglGetConfigAttrib(display, config, EGL_RENDERABLE_TYPE, &surfaceType);
eglGetConfigAttrib(display, config, EGL_SURFACE_TYPE, &surfaceType);
EXPECT_EQ(EGL_SUCCESS, eglGetError());
EXPECT_TRUE(surfaceType & EGL_WINDOW_BIT);
}
......@@ -333,9 +333,10 @@ TEST_F(SwiftShaderTest, Initalization)
EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
EXPECT_STREQ("Google SwiftShader", (const char*)glRenderer);
// SwiftShader return an OpenGL ES 3.0 context when a 2.0 context is requested, as allowed by the spec.
const GLubyte *glVersion = glGetString(GL_VERSION);
EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
EXPECT_THAT((const char*)glVersion, testing::HasSubstr("OpenGL ES 2.0 SwiftShader "));
EXPECT_THAT((const char*)glVersion, testing::HasSubstr("OpenGL ES 3.0 SwiftShader "));
Uninitialize();
}
......
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