ES31: Implement glGetTexLevelParameter{i|f}v entry point
BUG=angleproject:1679
TEST=dEQP-GLES31.functional.state_query.texture_level.*
Change-Id: I36cc7406199fc0c3c1585ad48f010d7dba5fe9e4
Reviewed-on: https://chromium-review.googlesource.com/414250
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/queryutils.cpp b/src/libANGLE/queryutils.cpp
index 5f26549..bbdbc52 100644
--- a/src/libANGLE/queryutils.cpp
+++ b/src/libANGLE/queryutils.cpp
@@ -26,6 +26,86 @@
namespace
{
template <typename ParamType>
+void QueryTexLevelParameterBase(const Texture *texture,
+ GLenum target,
+ GLint level,
+ GLenum pname,
+ ParamType *params)
+{
+ ASSERT(texture != nullptr);
+ const InternalFormat *info = texture->getTextureState().getImageDesc(target, level).format.info;
+
+ switch (pname)
+ {
+ case GL_TEXTURE_RED_TYPE:
+ *params = ConvertFromGLenum<ParamType>(info->redBits ? info->componentType : GL_NONE);
+ break;
+ case GL_TEXTURE_GREEN_TYPE:
+ *params = ConvertFromGLenum<ParamType>(info->greenBits ? info->componentType : GL_NONE);
+ break;
+ case GL_TEXTURE_BLUE_TYPE:
+ *params = ConvertFromGLenum<ParamType>(info->blueBits ? info->componentType : GL_NONE);
+ break;
+ case GL_TEXTURE_ALPHA_TYPE:
+ *params = ConvertFromGLenum<ParamType>(info->alphaBits ? info->componentType : GL_NONE);
+ break;
+ case GL_TEXTURE_DEPTH_TYPE:
+ *params = ConvertFromGLenum<ParamType>(info->depthBits ? info->componentType : GL_NONE);
+ break;
+ case GL_TEXTURE_RED_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->redBits);
+ break;
+ case GL_TEXTURE_GREEN_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->greenBits);
+ break;
+ case GL_TEXTURE_BLUE_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->blueBits);
+ break;
+ case GL_TEXTURE_ALPHA_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->alphaBits);
+ break;
+ case GL_TEXTURE_DEPTH_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->depthBits);
+ break;
+ case GL_TEXTURE_STENCIL_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->stencilBits);
+ break;
+ case GL_TEXTURE_SHARED_SIZE:
+ *params = ConvertFromGLuint<ParamType>(info->sharedBits);
+ break;
+ case GL_TEXTURE_INTERNAL_FORMAT:
+ *params =
+ ConvertFromGLenum<ParamType>(info->internalFormat ? info->internalFormat : GL_RGBA);
+ break;
+ case GL_TEXTURE_WIDTH:
+ *params =
+ ConvertFromGLint<ParamType>(static_cast<GLint>(texture->getWidth(target, level)));
+ break;
+ case GL_TEXTURE_HEIGHT:
+ *params =
+ ConvertFromGLint<ParamType>(static_cast<GLint>(texture->getHeight(target, level)));
+ break;
+ case GL_TEXTURE_DEPTH:
+ *params =
+ ConvertFromGLint<ParamType>(static_cast<GLint>(texture->getDepth(target, level)));
+ break;
+ case GL_TEXTURE_SAMPLES:
+ *params = ConvertFromGLint<ParamType>(texture->getSamples(target, level));
+ break;
+ case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
+ *params =
+ ConvertFromGLboolean<ParamType>(texture->getFixedSampleLocations(target, level));
+ break;
+ case GL_TEXTURE_COMPRESSED:
+ *params = ConvertFromGLboolean<ParamType>(info->compressed);
+ break;
+ default:
+ UNREACHABLE();
+ break;
+ }
+}
+
+template <typename ParamType>
void QueryTexParameterBase(const Texture *texture, GLenum pname, ParamType *params)
{
ASSERT(texture != nullptr);
@@ -599,6 +679,24 @@
}
}
+void QueryTexLevelParameterfv(const Texture *texture,
+ GLenum target,
+ GLint level,
+ GLenum pname,
+ GLfloat *params)
+{
+ QueryTexLevelParameterBase(texture, target, level, pname, params);
+}
+
+void QueryTexLevelParameteriv(const Texture *texture,
+ GLenum target,
+ GLint level,
+ GLenum pname,
+ GLint *params)
+{
+ QueryTexLevelParameterBase(texture, target, level, pname, params);
+}
+
void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params)
{
QueryTexParameterBase(texture, pname, params);