Commit cbb80f5f by Krzysztof Kosiński

Accept GL_TEXTURE_MAX_ANISOTROPY_EXT for samplers.

This usage is not explicitly specified in EXT_texture_filter_anisotropic, but in practice all notable ES 3.0 implementations treat maximum anisotropy as sampler state. Furthermore, it's already accepted as a valid sampler parameter by ValidateSamplerObjectParameter in Context.cpp. This avoids a crash when calling glSamplerParameteri(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.f); Bug: b/79951966 Change-Id: I4013f621781fc74a0fbfbf14ab326871fbb87b7c Reviewed-on: https://swiftshader-review.googlesource.com/18908Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarKrzysztof Kosiński <krzysio@google.com>
parent 607771b4
......@@ -11,12 +11,12 @@
Google Inc.
Nicolas Capens <capn@google.com>
Alexis Htu <sugoi@google.com>
Alexis Hétu <sugoi@google.com>
Shannon Woods <shannonwoods@google.com>
Corentin Wallez <cwallez@google.com>
Greg Hartman <ghartman@google.com>
Ping-Hao Wu <pinghao@google.com>
Maxime Grgoire <mgregoire@google.com>
Maxime Grégoire <mgregoire@google.com>
Veranika Liaukevich <veranika@google.com>
John Bauman <jbauman@google.com>
Keun Soo Yim <yim@google.com>
......@@ -24,6 +24,7 @@ Google Inc.
Philippe Hamel <hamelphi@google.com>
Daniel Toyama <kenjitoyama@google.com>
Meng-Lin Wu <marleymoo@google.com>
Krzysztof Kosiński <krzysio@google.com>
TransGaming Inc.
Nicolas Capens
......@@ -31,4 +32,4 @@ TransGaming Inc.
Jim MacArthur
Daniel Koch
Luther Johnson
Rob Stepinski
\ No newline at end of file
Rob Stepinski
......@@ -1734,16 +1734,17 @@ void Context::samplerParameteri(GLuint sampler, GLenum pname, GLint param)
switch(pname)
{
case GL_TEXTURE_MIN_FILTER: samplerObject->setMinFilter(static_cast<GLenum>(param)); break;
case GL_TEXTURE_MAG_FILTER: samplerObject->setMagFilter(static_cast<GLenum>(param)); break;
case GL_TEXTURE_WRAP_S: samplerObject->setWrapS(static_cast<GLenum>(param)); break;
case GL_TEXTURE_WRAP_T: samplerObject->setWrapT(static_cast<GLenum>(param)); break;
case GL_TEXTURE_WRAP_R: samplerObject->setWrapR(static_cast<GLenum>(param)); break;
case GL_TEXTURE_MIN_LOD: samplerObject->setMinLod(static_cast<GLfloat>(param)); break;
case GL_TEXTURE_MAX_LOD: samplerObject->setMaxLod(static_cast<GLfloat>(param)); break;
case GL_TEXTURE_COMPARE_MODE: samplerObject->setCompareMode(static_cast<GLenum>(param)); break;
case GL_TEXTURE_COMPARE_FUNC: samplerObject->setCompareFunc(static_cast<GLenum>(param)); break;
default: UNREACHABLE(pname); break;
case GL_TEXTURE_MIN_FILTER: samplerObject->setMinFilter(static_cast<GLenum>(param)); break;
case GL_TEXTURE_MAG_FILTER: samplerObject->setMagFilter(static_cast<GLenum>(param)); break;
case GL_TEXTURE_WRAP_S: samplerObject->setWrapS(static_cast<GLenum>(param)); break;
case GL_TEXTURE_WRAP_T: samplerObject->setWrapT(static_cast<GLenum>(param)); break;
case GL_TEXTURE_WRAP_R: samplerObject->setWrapR(static_cast<GLenum>(param)); break;
case GL_TEXTURE_MIN_LOD: samplerObject->setMinLod(static_cast<GLfloat>(param)); break;
case GL_TEXTURE_MAX_LOD: samplerObject->setMaxLod(static_cast<GLfloat>(param)); break;
case GL_TEXTURE_COMPARE_MODE: samplerObject->setCompareMode(static_cast<GLenum>(param)); break;
case GL_TEXTURE_COMPARE_FUNC: samplerObject->setCompareFunc(static_cast<GLenum>(param)); break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: samplerObject->setMaxAnisotropy(static_cast<GLfloat>(param)); break;
default: UNREACHABLE(pname); break;
}
}
......@@ -1756,16 +1757,17 @@ void Context::samplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
switch(pname)
{
case GL_TEXTURE_MIN_FILTER: samplerObject->setMinFilter(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_MAG_FILTER: samplerObject->setMagFilter(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_WRAP_S: samplerObject->setWrapS(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_WRAP_T: samplerObject->setWrapT(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_WRAP_R: samplerObject->setWrapR(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_MIN_LOD: samplerObject->setMinLod(param); break;
case GL_TEXTURE_MAX_LOD: samplerObject->setMaxLod(param); break;
case GL_TEXTURE_COMPARE_MODE: samplerObject->setCompareMode(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_COMPARE_FUNC: samplerObject->setCompareFunc(static_cast<GLenum>(roundf(param))); break;
default: UNREACHABLE(pname); break;
case GL_TEXTURE_MIN_FILTER: samplerObject->setMinFilter(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_MAG_FILTER: samplerObject->setMagFilter(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_WRAP_S: samplerObject->setWrapS(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_WRAP_T: samplerObject->setWrapT(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_WRAP_R: samplerObject->setWrapR(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_MIN_LOD: samplerObject->setMinLod(param); break;
case GL_TEXTURE_MAX_LOD: samplerObject->setMaxLod(param); break;
case GL_TEXTURE_COMPARE_MODE: samplerObject->setCompareMode(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_COMPARE_FUNC: samplerObject->setCompareFunc(static_cast<GLenum>(roundf(param))); break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: samplerObject->setMaxAnisotropy(param); break;
default: UNREACHABLE(pname); break;
}
}
......@@ -1778,16 +1780,17 @@ GLint Context::getSamplerParameteri(GLuint sampler, GLenum pname)
switch(pname)
{
case GL_TEXTURE_MIN_FILTER: return static_cast<GLint>(samplerObject->getMinFilter());
case GL_TEXTURE_MAG_FILTER: return static_cast<GLint>(samplerObject->getMagFilter());
case GL_TEXTURE_WRAP_S: return static_cast<GLint>(samplerObject->getWrapS());
case GL_TEXTURE_WRAP_T: return static_cast<GLint>(samplerObject->getWrapT());
case GL_TEXTURE_WRAP_R: return static_cast<GLint>(samplerObject->getWrapR());
case GL_TEXTURE_MIN_LOD: return static_cast<GLint>(roundf(samplerObject->getMinLod()));
case GL_TEXTURE_MAX_LOD: return static_cast<GLint>(roundf(samplerObject->getMaxLod()));
case GL_TEXTURE_COMPARE_MODE: return static_cast<GLint>(samplerObject->getCompareMode());
case GL_TEXTURE_COMPARE_FUNC: return static_cast<GLint>(samplerObject->getCompareFunc());
default: UNREACHABLE(pname); return 0;
case GL_TEXTURE_MIN_FILTER: return static_cast<GLint>(samplerObject->getMinFilter());
case GL_TEXTURE_MAG_FILTER: return static_cast<GLint>(samplerObject->getMagFilter());
case GL_TEXTURE_WRAP_S: return static_cast<GLint>(samplerObject->getWrapS());
case GL_TEXTURE_WRAP_T: return static_cast<GLint>(samplerObject->getWrapT());
case GL_TEXTURE_WRAP_R: return static_cast<GLint>(samplerObject->getWrapR());
case GL_TEXTURE_MIN_LOD: return static_cast<GLint>(roundf(samplerObject->getMinLod()));
case GL_TEXTURE_MAX_LOD: return static_cast<GLint>(roundf(samplerObject->getMaxLod()));
case GL_TEXTURE_COMPARE_MODE: return static_cast<GLint>(samplerObject->getCompareMode());
case GL_TEXTURE_COMPARE_FUNC: return static_cast<GLint>(samplerObject->getCompareFunc());
case GL_TEXTURE_MAX_ANISOTROPY_EXT: return static_cast<GLint>(samplerObject->getMaxAnisotropy());
default: UNREACHABLE(pname); return 0;
}
}
......@@ -1800,16 +1803,17 @@ GLfloat Context::getSamplerParameterf(GLuint sampler, GLenum pname)
switch(pname)
{
case GL_TEXTURE_MIN_FILTER: return static_cast<GLfloat>(samplerObject->getMinFilter());
case GL_TEXTURE_MAG_FILTER: return static_cast<GLfloat>(samplerObject->getMagFilter());
case GL_TEXTURE_WRAP_S: return static_cast<GLfloat>(samplerObject->getWrapS());
case GL_TEXTURE_WRAP_T: return static_cast<GLfloat>(samplerObject->getWrapT());
case GL_TEXTURE_WRAP_R: return static_cast<GLfloat>(samplerObject->getWrapR());
case GL_TEXTURE_MIN_LOD: return samplerObject->getMinLod();
case GL_TEXTURE_MAX_LOD: return samplerObject->getMaxLod();
case GL_TEXTURE_COMPARE_MODE: return static_cast<GLfloat>(samplerObject->getCompareMode());
case GL_TEXTURE_COMPARE_FUNC: return static_cast<GLfloat>(samplerObject->getCompareFunc());
default: UNREACHABLE(pname); return 0;
case GL_TEXTURE_MIN_FILTER: return static_cast<GLfloat>(samplerObject->getMinFilter());
case GL_TEXTURE_MAG_FILTER: return static_cast<GLfloat>(samplerObject->getMagFilter());
case GL_TEXTURE_WRAP_S: return static_cast<GLfloat>(samplerObject->getWrapS());
case GL_TEXTURE_WRAP_T: return static_cast<GLfloat>(samplerObject->getWrapT());
case GL_TEXTURE_WRAP_R: return static_cast<GLfloat>(samplerObject->getWrapR());
case GL_TEXTURE_MIN_LOD: return samplerObject->getMinLod();
case GL_TEXTURE_MAX_LOD: return samplerObject->getMaxLod();
case GL_TEXTURE_COMPARE_MODE: return static_cast<GLfloat>(samplerObject->getCompareMode());
case GL_TEXTURE_COMPARE_FUNC: return static_cast<GLfloat>(samplerObject->getCompareFunc());
case GL_TEXTURE_MAX_ANISOTROPY_EXT: return samplerObject->getMaxAnisotropy();
default: UNREACHABLE(pname); return 0;
}
}
......@@ -3123,7 +3127,7 @@ void Context::applyTextures(sw::SamplerType samplerType)
if(texture->isSamplerComplete())
{
GLenum wrapS, wrapT, wrapR, minFilter, magFilter, compFunc, compMode;
GLfloat minLOD, maxLOD;
GLfloat minLOD, maxLOD, maxAnisotropy;
Sampler *samplerObject = mState.sampler[textureUnit];
if(samplerObject)
......@@ -3137,6 +3141,7 @@ void Context::applyTextures(sw::SamplerType samplerType)
maxLOD = samplerObject->getMaxLod();
compFunc = samplerObject->getCompareFunc();
compMode = samplerObject->getCompareMode();
maxAnisotropy = samplerObject->getMaxAnisotropy();
}
else
{
......@@ -3149,9 +3154,9 @@ void Context::applyTextures(sw::SamplerType samplerType)
maxLOD = texture->getMaxLOD();
compFunc = texture->getCompareFunc();
compMode = texture->getCompareMode();
maxAnisotropy = texture->getMaxAnisotropy();
}
GLfloat maxAnisotropy = texture->getMaxAnisotropy();
GLint baseLevel = texture->getBaseLevel();
GLint maxLevel = texture->getMaxLevel();
GLenum swizzleR = texture->getSwizzleR();
......
......@@ -41,6 +41,7 @@ public:
mMaxLod = 1000.0f;
mCompareMode = GL_NONE;
mCompareFunc = GL_LEQUAL;
mMaxAnisotropy = 1.0f;
}
void setMinFilter(GLenum minFilter) { mMinFilter = minFilter; }
......@@ -52,6 +53,7 @@ public:
void setMaxLod(GLfloat maxLod) { mMaxLod = maxLod; }
void setCompareMode(GLenum compareMode) { mCompareMode = compareMode; }
void setCompareFunc(GLenum compareFunc) { mCompareFunc = compareFunc; }
void setMaxAnisotropy(GLfloat maxAnisotropy) { mMaxAnisotropy = maxAnisotropy; }
GLenum getMinFilter() const { return mMinFilter; }
GLenum getMagFilter() const { return mMagFilter; }
......@@ -62,6 +64,7 @@ public:
GLfloat getMaxLod() const { return mMaxLod; }
GLenum getCompareMode() const { return mCompareMode; }
GLenum getCompareFunc() const { return mCompareFunc; }
GLfloat getMaxAnisotropy() const { return mMaxAnisotropy; }
private:
GLenum mMinFilter;
......@@ -75,6 +78,7 @@ private:
GLfloat mMaxLod;
GLenum mCompareMode;
GLenum mCompareFunc;
GLfloat mMaxAnisotropy;
};
}
......
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