Texture rectangle related fixes and associated tests
Imported texture rectangle tests from angle and fixed all
texture rectangle related failures:
- Rectangle textures can be rendered to
- Rectangle textures only support level 0
- Rectangle textures can't be compressed
- glTexStorage2D can no longer create a texture larger
than the maximum size allowed
Change-Id: I089291c94aad79e244782a8d56dd224c7510d237
Reviewed-on: https://swiftshader-review.googlesource.com/16908
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 507f989..93f8e4c 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -761,7 +761,6 @@
switch(target)
{
case GL_TEXTURE_2D:
- case GL_TEXTURE_RECTANGLE_ARB:
if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
{
@@ -785,6 +784,7 @@
return error(GL_INVALID_VALUE);
}
break;
+ case GL_TEXTURE_RECTANGLE_ARB: // Rectangle textures cannot be compressed
default:
return error(GL_INVALID_ENUM);
}
@@ -920,8 +920,13 @@
{
switch(target)
{
- case GL_TEXTURE_2D:
case GL_TEXTURE_RECTANGLE_ARB:
+ if(level != 0)
+ {
+ return error(GL_INVALID_VALUE);
+ }
+ // Fall through
+ case GL_TEXTURE_2D:
if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
{
@@ -2038,7 +2043,7 @@
return error(GL_INVALID_ENUM);
}
- if((level != 0) && (clientVersion < 3))
+ if((level != 0) && ((clientVersion < 3) || (textarget == GL_TEXTURE_RECTANGLE_ARB)))
{
return error(GL_INVALID_VALUE);
}
@@ -4970,8 +4975,13 @@
switch(target)
{
- case GL_TEXTURE_2D:
case GL_TEXTURE_RECTANGLE_ARB:
+ if(level != 0)
+ {
+ return error(GL_INVALID_VALUE); // Defining level other than 0 is not allowed
+ }
+ // Fall through
+ case GL_TEXTURE_2D:
if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
{
@@ -5266,6 +5276,10 @@
}
break;
case GL_TEXTURE_BASE_LEVEL:
+ if((texture->getTarget() == GL_TEXTURE_RECTANGLE_ARB) && (param != 0))
+ {
+ return error(GL_INVALID_OPERATION); // Base level has to be 0
+ }
if(clientVersion < 3 || !texture->setBaseLevel(param))
{
return error(GL_INVALID_VALUE);