Implement state tracking for BASE/MAX_LEVEL, and MIN/MAX_LOD.
BUG=angle:596
Change-Id: I773720a19b766c7a6930967983db0a34e84f2790
Reviewed-on: https://chromium-review.googlesource.com/193235
Tested-by: Nicolas Capens <nicolascapens@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 9a77408..25ba855 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -59,7 +59,10 @@
mSamplerState.wrapT = GL_REPEAT;
mSamplerState.wrapR = GL_REPEAT;
mSamplerState.maxAnisotropy = 1.0f;
- mSamplerState.lodOffset = 0;
+ mSamplerState.baseLevel = 0;
+ mSamplerState.maxLevel = 1000;
+ mSamplerState.minLod = -1000.0f;
+ mSamplerState.maxLod = 1000.0f;
mSamplerState.compareMode = GL_NONE;
mSamplerState.compareFunc = GL_LEQUAL;
mSamplerState.swizzleRed = GL_RED;
@@ -154,6 +157,26 @@
mSamplerState.swizzleAlpha = swizzle;
}
+void Texture::setBaseLevel(GLint baseLevel)
+{
+ mSamplerState.baseLevel = baseLevel;
+}
+
+void Texture::setMaxLevel(GLint maxLevel)
+{
+ mSamplerState.maxLevel = maxLevel;
+}
+
+void Texture::setMinLod(GLfloat minLod)
+{
+ mSamplerState.minLod = minLod;
+}
+
+void Texture::setMaxLod(GLfloat maxLod)
+{
+ mSamplerState.maxLod = maxLod;
+}
+
void Texture::setUsage(GLenum usage)
{
mUsage = usage;
@@ -209,6 +232,26 @@
return mSamplerState.swizzleAlpha;
}
+GLint Texture::getBaseLevel() const
+{
+ return mSamplerState.baseLevel;
+}
+
+GLint Texture::getMaxLevel() const
+{
+ return mSamplerState.maxLevel;
+}
+
+GLfloat Texture::getMinLod() const
+{
+ return mSamplerState.minLod;
+}
+
+GLfloat Texture::getMaxLod() const
+{
+ return mSamplerState.maxLod;
+}
+
bool Texture::isSwizzled() const
{
return mSamplerState.swizzleRed != GL_RED ||
@@ -217,16 +260,14 @@
mSamplerState.swizzleAlpha != GL_ALPHA;
}
-int Texture::getTopLevel()
-{
- rx::TextureStorageInterface *texture = getNativeTexture();
- return texture ? texture->getTopLevel() : 0;
-}
-
void Texture::getSamplerState(SamplerState *sampler)
{
*sampler = mSamplerState;
- sampler->lodOffset = getTopLevel();
+
+ // Offset the effective base level by the texture storage's top level
+ rx::TextureStorageInterface *texture = getNativeTexture();
+ int topLevel = texture ? texture->getTopLevel() : 0;
+ sampler->baseLevel = topLevel + mSamplerState.baseLevel;
}
GLenum Texture::getUsage() const