Commit d3d06863 by Alexis Hetu Committed by Alexis Hétu

Added state query for immutable levels

Added immutable levels info to Texture and added the query. Change-Id: I900a3c433dcc63b8113b1f623da3518c00680e16 Reviewed-on: https://swiftshader-review.googlesource.com/4751Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 423fd912
......@@ -40,6 +40,7 @@ Texture::Texture(GLuint name) : egl::Texture(name)
mCompareFunc = GL_LEQUAL;
mCompareMode = GL_NONE;
mImmutableFormat = GL_FALSE;
mImmutableLevels = 0;
mMaxLevel = 1000;
mMaxLOD = 1000;
mMinLOD = -1000;
......@@ -214,10 +215,10 @@ bool Texture::setCompareMode(GLenum compareMode)
}
}
bool Texture::setImmutableFormat(GLboolean immutableFormat)
void Texture::makeImmutable(GLsizei levels)
{
mImmutableFormat = immutableFormat;
return true;
mImmutableFormat = GL_TRUE;
mImmutableLevels = levels;
}
bool Texture::setMaxLevel(GLint maxLevel)
......@@ -352,6 +353,10 @@ GLboolean Texture::getImmutableFormat() const
{
return mImmutableFormat;
}
GLsizei Texture::getImmutableLevels() const
{
return mImmutableLevels;
}
GLint Texture::getMaxLevel() const
{
return mMaxLevel;
......
......@@ -70,7 +70,7 @@ public:
bool setBaseLevel(GLint baseLevel);
bool setCompareFunc(GLenum compareFunc);
bool setCompareMode(GLenum compareMode);
bool setImmutableFormat(GLboolean immutableFormat);
void makeImmutable(GLsizei levels);
bool setMaxLevel(GLint maxLevel);
bool setMaxLOD(GLfloat maxLOD);
bool setMinLOD(GLfloat minLOD);
......@@ -89,6 +89,7 @@ public:
GLenum getCompareFunc() const;
GLenum getCompareMode() const;
GLboolean getImmutableFormat() const;
GLsizei getImmutableLevels() const;
GLint getMaxLevel() const;
GLfloat getMaxLOD() const;
GLfloat getMinLOD() const;
......@@ -139,6 +140,7 @@ protected:
GLenum mCompareFunc;
GLenum mCompareMode;
GLboolean mImmutableFormat;
GLsizei mImmutableLevels;
GLint mMaxLevel;
GLfloat mMaxLOD;
GLfloat mMinLOD;
......
......@@ -3719,6 +3719,13 @@ void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
break;
}
else return error(GL_INVALID_ENUM);
case GL_TEXTURE_IMMUTABLE_LEVELS:
if(clientVersion >= 3)
{
*params = (GLfloat)texture->getImmutableLevels();
break;
}
else return error(GL_INVALID_ENUM);
case GL_TEXTURE_MAX_LEVEL:
if(clientVersion >= 3)
{
......@@ -3865,6 +3872,13 @@ void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
break;
}
else return error(GL_INVALID_ENUM);
case GL_TEXTURE_IMMUTABLE_LEVELS:
if(clientVersion >= 3)
{
*params = (GLint)texture->getImmutableLevels();
break;
}
else return error(GL_INVALID_ENUM);
case GL_TEXTURE_MAX_LEVEL:
if(clientVersion >= 3)
{
......@@ -5970,12 +5984,6 @@ void TexParameterf(GLenum target, GLenum pname, GLfloat param)
return error(GL_INVALID_VALUE);
}
break;
case GL_TEXTURE_IMMUTABLE_FORMAT:
if(clientVersion < 3 || !texture->setImmutableFormat((GLboolean)param))
{
return error(GL_INVALID_VALUE);
}
break;
case GL_TEXTURE_MAX_LEVEL:
if(clientVersion < 3 || !texture->setMaxLevel((GLint)(roundf(param))))
{
......@@ -6125,12 +6133,6 @@ void TexParameteri(GLenum target, GLenum pname, GLint param)
return error(GL_INVALID_VALUE);
}
break;
case GL_TEXTURE_IMMUTABLE_FORMAT:
if(clientVersion < 3 || !texture->setImmutableFormat((GLboolean)param))
{
return error(GL_INVALID_VALUE);
}
break;
case GL_TEXTURE_MAX_LEVEL:
if(clientVersion < 3 || !texture->setMaxLevel(param))
{
......
......@@ -3859,7 +3859,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum
width = std::max(1, (width / 2));
height = std::max(1, (height / 2));
}
texture->setImmutableFormat(GL_TRUE);
texture->makeImmutable(levels);
}
break;
case GL_TEXTURE_CUBE_MAP:
......@@ -3879,7 +3879,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum
width = std::max(1, (width / 2));
height = std::max(1, (height / 2));
}
texture->setImmutableFormat(GL_TRUE);
texture->makeImmutable(levels);
}
break;
default:
......@@ -3930,7 +3930,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum
height = std::max(1, (height / 2));
depth = std::max(1, (depth / 2));
}
texture->setImmutableFormat(GL_TRUE);
texture->makeImmutable(levels);
}
break;
case GL_TEXTURE_2D_ARRAY:
......@@ -3955,7 +3955,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum
width = std::max(1, (width / 2));
height = std::max(1, (height / 2));
}
texture->setImmutableFormat(GL_TRUE);
texture->makeImmutable(levels);
}
break;
default:
......
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