GLES1: Texture parameters
Note: minimum buffer size is now checked for texture parameters in
GLES2.
- Mipmap generation hint
- Crop rect
- Update test expectations
BUG=angleproject:2306
Change-Id: Ib459b8191111732a1326b44f2226b72ca297325a
Reviewed-on: https://chromium-review.googlesource.com/1111575
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Lingfeng Yang <lfy@google.com>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 6a5894e..603a930 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -22,6 +22,7 @@
#include "libANGLE/angletypes.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/queryconversions.h"
+#include "libANGLE/queryutils.h"
#include "libANGLE/validationES2.h"
#include "libANGLE/validationES3.h"
@@ -522,6 +523,24 @@
}
}
+// GLES1 texture parameters are a small subset of the others
+bool IsValidGLES1TextureParameter(GLenum pname)
+{
+ switch (pname)
+ {
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_WRAP_R:
+ case GL_GENERATE_MIPMAP:
+ case GL_TEXTURE_CROP_RECT_OES:
+ return true;
+ default:
+ return false;
+ }
+}
+
} // anonymous namespace
void SetRobustLengthParam(GLsizei *length, GLsizei value)
@@ -5435,6 +5454,12 @@
return false;
}
+ if (context->getClientMajorVersion() == 1 && !IsValidGLES1TextureParameter(pname))
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
+ return false;
+ }
+
switch (pname)
{
case GL_TEXTURE_MAG_FILTER:
@@ -5501,6 +5526,16 @@
}
break;
+ case GL_GENERATE_MIPMAP:
+ case GL_TEXTURE_CROP_RECT_OES:
+ // TODO(lfy@google.com): Restrict to GL_OES_draw_texture
+ // after GL_OES_draw_texture functionality implemented
+ if (context->getClientMajorVersion() > 1)
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), GLES1Only);
+ return false;
+ }
+ break;
default:
ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
return false;
@@ -5508,7 +5543,7 @@
if (length)
{
- *length = 1;
+ *length = GetTexParameterCount(pname);
}
return true;
}
@@ -5865,13 +5900,19 @@
return false;
}
- const GLsizei minBufSize = 1;
+ const GLsizei minBufSize = GetTexParameterCount(pname);
if (bufSize >= 0 && bufSize < minBufSize)
{
ANGLE_VALIDATION_ERR(context, InvalidOperation(), InsufficientBufferSize);
return false;
}
+ if (context->getClientMajorVersion() == 1 && !IsValidGLES1TextureParameter(pname))
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
+ return false;
+ }
+
switch (pname)
{
case GL_TEXTURE_WRAP_R:
@@ -5899,6 +5940,14 @@
}
break;
+ case GL_GENERATE_MIPMAP:
+ case GL_TEXTURE_CROP_RECT_OES:
+ if (context->getClientMajorVersion() > 1)
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), GLES1Only);
+ return false;
+ }
+ break;
default:
break;
}
@@ -6083,6 +6132,14 @@
}
break;
+ case GL_GENERATE_MIPMAP:
+ case GL_TEXTURE_CROP_RECT_OES:
+ if (context->getClientMajorVersion() > 1)
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), GLES1Only);
+ return false;
+ }
+ break;
default:
ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
return false;