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) ...@@ -40,6 +40,7 @@ Texture::Texture(GLuint name) : egl::Texture(name)
mCompareFunc = GL_LEQUAL; mCompareFunc = GL_LEQUAL;
mCompareMode = GL_NONE; mCompareMode = GL_NONE;
mImmutableFormat = GL_FALSE; mImmutableFormat = GL_FALSE;
mImmutableLevels = 0;
mMaxLevel = 1000; mMaxLevel = 1000;
mMaxLOD = 1000; mMaxLOD = 1000;
mMinLOD = -1000; mMinLOD = -1000;
...@@ -214,10 +215,10 @@ bool Texture::setCompareMode(GLenum compareMode) ...@@ -214,10 +215,10 @@ bool Texture::setCompareMode(GLenum compareMode)
} }
} }
bool Texture::setImmutableFormat(GLboolean immutableFormat) void Texture::makeImmutable(GLsizei levels)
{ {
mImmutableFormat = immutableFormat; mImmutableFormat = GL_TRUE;
return true; mImmutableLevels = levels;
} }
bool Texture::setMaxLevel(GLint maxLevel) bool Texture::setMaxLevel(GLint maxLevel)
...@@ -352,6 +353,10 @@ GLboolean Texture::getImmutableFormat() const ...@@ -352,6 +353,10 @@ GLboolean Texture::getImmutableFormat() const
{ {
return mImmutableFormat; return mImmutableFormat;
} }
GLsizei Texture::getImmutableLevels() const
{
return mImmutableLevels;
}
GLint Texture::getMaxLevel() const GLint Texture::getMaxLevel() const
{ {
return mMaxLevel; return mMaxLevel;
......
...@@ -70,7 +70,7 @@ public: ...@@ -70,7 +70,7 @@ public:
bool setBaseLevel(GLint baseLevel); bool setBaseLevel(GLint baseLevel);
bool setCompareFunc(GLenum compareFunc); bool setCompareFunc(GLenum compareFunc);
bool setCompareMode(GLenum compareMode); bool setCompareMode(GLenum compareMode);
bool setImmutableFormat(GLboolean immutableFormat); void makeImmutable(GLsizei levels);
bool setMaxLevel(GLint maxLevel); bool setMaxLevel(GLint maxLevel);
bool setMaxLOD(GLfloat maxLOD); bool setMaxLOD(GLfloat maxLOD);
bool setMinLOD(GLfloat minLOD); bool setMinLOD(GLfloat minLOD);
...@@ -89,6 +89,7 @@ public: ...@@ -89,6 +89,7 @@ public:
GLenum getCompareFunc() const; GLenum getCompareFunc() const;
GLenum getCompareMode() const; GLenum getCompareMode() const;
GLboolean getImmutableFormat() const; GLboolean getImmutableFormat() const;
GLsizei getImmutableLevels() const;
GLint getMaxLevel() const; GLint getMaxLevel() const;
GLfloat getMaxLOD() const; GLfloat getMaxLOD() const;
GLfloat getMinLOD() const; GLfloat getMinLOD() const;
...@@ -139,6 +140,7 @@ protected: ...@@ -139,6 +140,7 @@ protected:
GLenum mCompareFunc; GLenum mCompareFunc;
GLenum mCompareMode; GLenum mCompareMode;
GLboolean mImmutableFormat; GLboolean mImmutableFormat;
GLsizei mImmutableLevels;
GLint mMaxLevel; GLint mMaxLevel;
GLfloat mMaxLOD; GLfloat mMaxLOD;
GLfloat mMinLOD; GLfloat mMinLOD;
......
...@@ -3719,6 +3719,13 @@ void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) ...@@ -3719,6 +3719,13 @@ void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
break; break;
} }
else return error(GL_INVALID_ENUM); 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: case GL_TEXTURE_MAX_LEVEL:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
...@@ -3865,6 +3872,13 @@ void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) ...@@ -3865,6 +3872,13 @@ void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
break; break;
} }
else return error(GL_INVALID_ENUM); 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: case GL_TEXTURE_MAX_LEVEL:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
...@@ -5970,12 +5984,6 @@ void TexParameterf(GLenum target, GLenum pname, GLfloat param) ...@@ -5970,12 +5984,6 @@ void TexParameterf(GLenum target, GLenum pname, GLfloat param)
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
break; break;
case GL_TEXTURE_IMMUTABLE_FORMAT:
if(clientVersion < 3 || !texture->setImmutableFormat((GLboolean)param))
{
return error(GL_INVALID_VALUE);
}
break;
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
if(clientVersion < 3 || !texture->setMaxLevel((GLint)(roundf(param)))) if(clientVersion < 3 || !texture->setMaxLevel((GLint)(roundf(param))))
{ {
...@@ -6125,12 +6133,6 @@ void TexParameteri(GLenum target, GLenum pname, GLint param) ...@@ -6125,12 +6133,6 @@ void TexParameteri(GLenum target, GLenum pname, GLint param)
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
break; break;
case GL_TEXTURE_IMMUTABLE_FORMAT:
if(clientVersion < 3 || !texture->setImmutableFormat((GLboolean)param))
{
return error(GL_INVALID_VALUE);
}
break;
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
if(clientVersion < 3 || !texture->setMaxLevel(param)) if(clientVersion < 3 || !texture->setMaxLevel(param))
{ {
......
...@@ -3859,7 +3859,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum ...@@ -3859,7 +3859,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum
width = std::max(1, (width / 2)); width = std::max(1, (width / 2));
height = std::max(1, (height / 2)); height = std::max(1, (height / 2));
} }
texture->setImmutableFormat(GL_TRUE); texture->makeImmutable(levels);
} }
break; break;
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
...@@ -3879,7 +3879,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum ...@@ -3879,7 +3879,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum
width = std::max(1, (width / 2)); width = std::max(1, (width / 2));
height = std::max(1, (height / 2)); height = std::max(1, (height / 2));
} }
texture->setImmutableFormat(GL_TRUE); texture->makeImmutable(levels);
} }
break; break;
default: default:
...@@ -3930,7 +3930,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum ...@@ -3930,7 +3930,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum
height = std::max(1, (height / 2)); height = std::max(1, (height / 2));
depth = std::max(1, (depth / 2)); depth = std::max(1, (depth / 2));
} }
texture->setImmutableFormat(GL_TRUE); texture->makeImmutable(levels);
} }
break; break;
case GL_TEXTURE_2D_ARRAY: case GL_TEXTURE_2D_ARRAY:
...@@ -3955,7 +3955,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum ...@@ -3955,7 +3955,7 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum
width = std::max(1, (width / 2)); width = std::max(1, (width / 2));
height = std::max(1, (height / 2)); height = std::max(1, (height / 2));
} }
texture->setImmutableFormat(GL_TRUE); texture->makeImmutable(levels);
} }
break; break;
default: 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