Commit 92cd7ac9 by Nicolas Capens Committed by Nicolas Capens

Fix using base internal format for CopyTexImage validation.

Change-Id: Iddd32408b090f00cbae15a76cab064d699f5098b Reviewed-on: https://swiftshader-review.googlesource.com/16968Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent bb2bcae3
...@@ -617,9 +617,11 @@ namespace es2 ...@@ -617,9 +617,11 @@ namespace es2
return error(GL_INVALID_OPERATION, false); return error(GL_INVALID_OPERATION, false);
} }
GLenum baseFormat = GetBaseInternalFormat(textureFormat);
// [OpenGL ES 2.0.24] table 3.9 // [OpenGL ES 2.0.24] table 3.9
// [OpenGL ES 3.0.5] table 3.16 // [OpenGL ES 3.0.5] table 3.16
switch(textureFormat) switch(baseFormat)
{ {
case GL_ALPHA: case GL_ALPHA:
if(colorbufferFormat != GL_RGBA4 && if(colorbufferFormat != GL_RGBA4 &&
...@@ -1272,6 +1274,83 @@ namespace es2 ...@@ -1272,6 +1274,83 @@ namespace es2
return 1; return 1;
} }
GLenum GetBaseInternalFormat(GLint internalformat)
{
switch(internalformat)
{
// [OpenGL ES 3.0 Table 3.13]
case GL_R8: return GL_RED;
case GL_R8_SNORM: return GL_RED;
case GL_RG8: return GL_RG;
case GL_RG8_SNORM: return GL_RG;
case GL_RGB8: return GL_RGB;
case GL_RGB8_SNORM: return GL_RGB;
case GL_RGB565: return GL_RGB;
case GL_RGBA4: return GL_RGBA;
case GL_RGB5_A1: return GL_RGBA;
case GL_RGBA8: return GL_RGBA;
case GL_RGBA8_SNORM: return GL_RGBA;
case GL_RGB10_A2: return GL_RGBA;
case GL_RGB10_A2UI: return GL_RGBA;
case GL_SRGB8: return GL_RGB;
case GL_SRGB8_ALPHA8: return GL_RGBA;
case GL_R16F: return GL_RED;
case GL_RG16F: return GL_RG;
case GL_RGB16F: return GL_RGB;
case GL_RGBA16F: return GL_RGBA;
case GL_R32F: return GL_RED;
case GL_RG32F: return GL_RG;
case GL_RGB32F: return GL_RGB;
case GL_RGBA32F: return GL_RGBA;
case GL_R11F_G11F_B10F: return GL_RGB;
case GL_RGB9_E5: return GL_RGB;
case GL_R8I: return GL_RED;
case GL_R8UI: return GL_RED;
case GL_R16I: return GL_RED;
case GL_R16UI: return GL_RED;
case GL_R32I: return GL_RED;
case GL_R32UI: return GL_RED;
case GL_RG8I: return GL_RG;
case GL_RG8UI: return GL_RG;
case GL_RG16I: return GL_RG;
case GL_RG16UI: return GL_RG;
case GL_RG32I: return GL_RG;
case GL_RG32UI: return GL_RG;
case GL_RGB8I: return GL_RGB;
case GL_RGB8UI: return GL_RGB;
case GL_RGB16I: return GL_RGB;
case GL_RGB16UI: return GL_RGB;
case GL_RGB32I: return GL_RGB;
case GL_RGB32UI: return GL_RGB;
case GL_RGBA8I: return GL_RGBA;
case GL_RGBA8UI: return GL_RGBA;
case GL_RGBA16I: return GL_RGBA;
case GL_RGBA16UI: return GL_RGBA;
case GL_RGBA32I: return GL_RGBA;
case GL_RGBA32UI: return GL_RGBA;
// GL_EXT_texture_storage
case GL_ALPHA8_EXT: return GL_ALPHA;
case GL_LUMINANCE8_ALPHA8_EXT: return GL_LUMINANCE_ALPHA;
case GL_LUMINANCE8_EXT: return GL_LUMINANCE;
case GL_BGRA8_EXT: return GL_BGRA_EXT; // GL_APPLE_texture_format_BGRA8888
case GL_DEPTH_COMPONENT24: return GL_DEPTH_COMPONENT;
case GL_DEPTH_COMPONENT32_OES: return GL_DEPTH_COMPONENT;
case GL_DEPTH_COMPONENT32F: return GL_DEPTH_COMPONENT;
case GL_DEPTH_COMPONENT16: return GL_DEPTH_COMPONENT;
case GL_DEPTH32F_STENCIL8: return GL_DEPTH_STENCIL;
case GL_DEPTH24_STENCIL8: return GL_DEPTH_STENCIL;
case GL_STENCIL_INDEX8: return GL_STENCIL_INDEX_OES;
default:
UNREACHABLE(internalformat);
break;
}
return GL_NONE;
}
bool IsColorRenderable(GLint internalformat, GLint clientVersion) bool IsColorRenderable(GLint internalformat, GLint clientVersion)
{ {
if(IsCompressed(internalformat, clientVersion)) if(IsCompressed(internalformat, clientVersion))
......
...@@ -57,6 +57,7 @@ namespace es2 ...@@ -57,6 +57,7 @@ namespace es2
bool IsTextureTarget(GLenum target); bool IsTextureTarget(GLenum target);
GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLint clientVersion); GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLint clientVersion);
GLsizei GetTypeSize(GLenum type); GLsizei GetTypeSize(GLenum type);
GLenum GetBaseInternalFormat(GLint internalformat);
bool IsColorRenderable(GLint internalformat, GLint clientVersion); bool IsColorRenderable(GLint internalformat, GLint clientVersion);
bool IsDepthRenderable(GLint internalformat, GLint clientVersion); bool IsDepthRenderable(GLint internalformat, GLint clientVersion);
......
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