Commit 112d81f1 by Alexis Hetu Committed by Alexis Hétu

Min LOD and Max LOD sampler parameters

Plumbing to send Min LOD and Max LOD from the Sampler object in the Context to the Renderer's texture's state. Change-Id: I6831a8e17d67e745d12a78176d566750d971ec76 Reviewed-on: https://swiftshader-review.googlesource.com/5510Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarMeng-Lin Wu <marleymoo@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 95ac1874
...@@ -3040,6 +3040,7 @@ void Context::applyTextures(sw::SamplerType samplerType) ...@@ -3040,6 +3040,7 @@ void Context::applyTextures(sw::SamplerType samplerType)
if(texture->isSamplerComplete()) if(texture->isSamplerComplete())
{ {
GLenum wrapS, wrapT, wrapR, minFilter, magFilter; GLenum wrapS, wrapT, wrapR, minFilter, magFilter;
GLfloat minLOD, maxLOD;
Sampler *samplerObject = mState.sampler[textureUnit]; Sampler *samplerObject = mState.sampler[textureUnit];
if(samplerObject) if(samplerObject)
...@@ -3049,6 +3050,8 @@ void Context::applyTextures(sw::SamplerType samplerType) ...@@ -3049,6 +3050,8 @@ void Context::applyTextures(sw::SamplerType samplerType)
wrapR = samplerObject->getWrapR(); wrapR = samplerObject->getWrapR();
minFilter = samplerObject->getMinFilter(); minFilter = samplerObject->getMinFilter();
magFilter = samplerObject->getMagFilter(); magFilter = samplerObject->getMagFilter();
minLOD = samplerObject->getMinLod();
maxLOD = samplerObject->getMaxLod();
} }
else else
{ {
...@@ -3057,6 +3060,8 @@ void Context::applyTextures(sw::SamplerType samplerType) ...@@ -3057,6 +3060,8 @@ void Context::applyTextures(sw::SamplerType samplerType)
wrapR = texture->getWrapR(); wrapR = texture->getWrapR();
minFilter = texture->getMinFilter(); minFilter = texture->getMinFilter();
magFilter = texture->getMagFilter(); magFilter = texture->getMagFilter();
minLOD = texture->getMinLOD();
maxLOD = texture->getMaxLOD();
} }
GLfloat maxAnisotropy = texture->getMaxAnisotropy(); GLfloat maxAnisotropy = texture->getMaxAnisotropy();
...@@ -3074,6 +3079,8 @@ void Context::applyTextures(sw::SamplerType samplerType) ...@@ -3074,6 +3079,8 @@ void Context::applyTextures(sw::SamplerType samplerType)
device->setSwizzleG(samplerType, samplerIndex, es2sw::ConvertSwizzleType(swizzleG)); device->setSwizzleG(samplerType, samplerIndex, es2sw::ConvertSwizzleType(swizzleG));
device->setSwizzleB(samplerType, samplerIndex, es2sw::ConvertSwizzleType(swizzleB)); device->setSwizzleB(samplerType, samplerIndex, es2sw::ConvertSwizzleType(swizzleB));
device->setSwizzleA(samplerType, samplerIndex, es2sw::ConvertSwizzleType(swizzleA)); device->setSwizzleA(samplerType, samplerIndex, es2sw::ConvertSwizzleType(swizzleA));
device->setMinLod(samplerType, samplerIndex, minLOD);
device->setMaxLod(samplerType, samplerIndex, maxLOD);
device->setBaseLevel(samplerType, samplerIndex, baseLevel); device->setBaseLevel(samplerType, samplerIndex, baseLevel);
device->setMaxLevel(samplerType, samplerIndex, maxLevel); device->setMaxLevel(samplerType, samplerIndex, maxLevel);
......
...@@ -498,6 +498,24 @@ namespace sw ...@@ -498,6 +498,24 @@ namespace sw
else ASSERT(false); else ASSERT(false);
} }
void PixelProcessor::setMinLod(unsigned int sampler, float minLod)
{
if(sampler < TEXTURE_IMAGE_UNITS)
{
context->sampler[sampler].setMinLod(minLod);
}
else ASSERT(false);
}
void PixelProcessor::setMaxLod(unsigned int sampler, float maxLod)
{
if(sampler < TEXTURE_IMAGE_UNITS)
{
context->sampler[sampler].setMaxLod(maxLod);
}
else ASSERT(false);
}
void PixelProcessor::setWriteSRGB(bool sRGB) void PixelProcessor::setWriteSRGB(bool sRGB)
{ {
context->setWriteSRGB(sRGB); context->setWriteSRGB(sRGB);
......
...@@ -237,6 +237,8 @@ namespace sw ...@@ -237,6 +237,8 @@ namespace sw
virtual void setSwizzleA(unsigned int sampler, SwizzleType swizzleA); virtual void setSwizzleA(unsigned int sampler, SwizzleType swizzleA);
virtual void setBaseLevel(unsigned int sampler, int baseLevel); virtual void setBaseLevel(unsigned int sampler, int baseLevel);
virtual void setMaxLevel(unsigned int sampler, int maxLevel); virtual void setMaxLevel(unsigned int sampler, int maxLevel);
virtual void setMinLod(unsigned int sampler, float minLod);
virtual void setMaxLod(unsigned int sampler, float maxLod);
virtual void setWriteSRGB(bool sRGB); virtual void setWriteSRGB(bool sRGB);
virtual void setDepthBufferEnable(bool depthBufferEnable); virtual void setDepthBufferEnable(bool depthBufferEnable);
......
...@@ -2371,6 +2371,30 @@ namespace sw ...@@ -2371,6 +2371,30 @@ namespace sw
} }
} }
void Renderer::setMinLod(SamplerType type, int sampler, float minLod)
{
if(type == SAMPLER_PIXEL)
{
PixelProcessor::setMinLod(sampler, minLod);
}
else
{
VertexProcessor::setMinLod(sampler, minLod);
}
}
void Renderer::setMaxLod(SamplerType type, int sampler, float maxLod)
{
if(type == SAMPLER_PIXEL)
{
PixelProcessor::setMaxLod(sampler, maxLod);
}
else
{
VertexProcessor::setMaxLod(sampler, maxLod);
}
}
void Renderer::setPointSpriteEnable(bool pointSpriteEnable) void Renderer::setPointSpriteEnable(bool pointSpriteEnable)
{ {
context->setPointSpriteEnable(pointSpriteEnable); context->setPointSpriteEnable(pointSpriteEnable);
......
...@@ -347,6 +347,8 @@ namespace sw ...@@ -347,6 +347,8 @@ namespace sw
virtual void setSwizzleA(SamplerType type, int sampler, SwizzleType swizzleA); virtual void setSwizzleA(SamplerType type, int sampler, SwizzleType swizzleA);
virtual void setBaseLevel(SamplerType type, int sampler, int baseLevel); virtual void setBaseLevel(SamplerType type, int sampler, int baseLevel);
virtual void setMaxLevel(SamplerType type, int sampler, int maxLevel); virtual void setMaxLevel(SamplerType type, int sampler, int maxLevel);
virtual void setMinLod(SamplerType type, int sampler, float minLod);
virtual void setMaxLod(SamplerType type, int sampler, float maxLod);
virtual void setPointSpriteEnable(bool pointSpriteEnable); virtual void setPointSpriteEnable(bool pointSpriteEnable);
virtual void setPointScaleEnable(bool pointScaleEnable); virtual void setPointScaleEnable(bool pointScaleEnable);
......
...@@ -73,6 +73,11 @@ namespace sw ...@@ -73,6 +73,11 @@ namespace sw
texture.LOD = 0.0f; texture.LOD = 0.0f;
exp2LOD = 1.0f; exp2LOD = 1.0f;
texture.baseLevel = 0;
texture.maxLevel = 1000;
texture.maxLod = 1000;
texture.minLod = -1000;
} }
Sampler::~Sampler() Sampler::~Sampler()
...@@ -344,6 +349,16 @@ namespace sw ...@@ -344,6 +349,16 @@ namespace sw
texture.maxLevel = maxLevel; texture.maxLevel = maxLevel;
} }
void Sampler::setMinLod(float minLod)
{
texture.minLod = minLod;
}
void Sampler::setMaxLod(float maxLod)
{
texture.maxLod = maxLod;
}
void Sampler::setFilterQuality(FilterType maximumFilterQuality) void Sampler::setFilterQuality(FilterType maximumFilterQuality)
{ {
Sampler::maximumTextureFilterQuality = maximumFilterQuality; Sampler::maximumTextureFilterQuality = maximumFilterQuality;
......
...@@ -69,6 +69,8 @@ namespace sw ...@@ -69,6 +69,8 @@ namespace sw
float maxAnisotropy; float maxAnisotropy;
int baseLevel; int baseLevel;
int maxLevel; int maxLevel;
float minLod;
float maxLod;
}; };
enum SamplerType enum SamplerType
...@@ -182,6 +184,8 @@ namespace sw ...@@ -182,6 +184,8 @@ namespace sw
void setSwizzleA(SwizzleType swizzleA); void setSwizzleA(SwizzleType swizzleA);
void setBaseLevel(int baseLevel); void setBaseLevel(int baseLevel);
void setMaxLevel(int maxLevel); void setMaxLevel(int maxLevel);
void setMinLod(float minLod);
void setMaxLod(float maxLod);
static void setFilterQuality(FilterType maximumFilterQuality); static void setFilterQuality(FilterType maximumFilterQuality);
static void setMipmapQuality(MipmapType maximumFilterQuality); static void setMipmapQuality(MipmapType maximumFilterQuality);
......
...@@ -656,6 +656,24 @@ namespace sw ...@@ -656,6 +656,24 @@ namespace sw
else ASSERT(false); else ASSERT(false);
} }
void VertexProcessor::setMinLod(unsigned int sampler, float minLod)
{
if(sampler < VERTEX_TEXTURE_IMAGE_UNITS)
{
context->sampler[TEXTURE_IMAGE_UNITS + sampler].setMinLod(minLod);
}
else ASSERT(false);
}
void VertexProcessor::setMaxLod(unsigned int sampler, float maxLod)
{
if(sampler < VERTEX_TEXTURE_IMAGE_UNITS)
{
context->sampler[TEXTURE_IMAGE_UNITS + sampler].setMaxLod(maxLod);
}
else ASSERT(false);
}
void VertexProcessor::setPointSize(float pointSize) void VertexProcessor::setPointSize(float pointSize)
{ {
point.pointSize = replicate(pointSize); point.pointSize = replicate(pointSize);
......
...@@ -262,6 +262,8 @@ namespace sw ...@@ -262,6 +262,8 @@ namespace sw
virtual void setSwizzleA(unsigned int sampler, SwizzleType swizzleA); virtual void setSwizzleA(unsigned int sampler, SwizzleType swizzleA);
virtual void setBaseLevel(unsigned int sampler, int baseLevel); virtual void setBaseLevel(unsigned int sampler, int baseLevel);
virtual void setMaxLevel(unsigned int sampler, int maxLevel); virtual void setMaxLevel(unsigned int sampler, int maxLevel);
virtual void setMinLod(unsigned int sampler, float minLod);
virtual void setMaxLod(unsigned int sampler, float maxLod);
virtual void setPointSize(float pointSize); virtual void setPointSize(float pointSize);
virtual void setPointSizeMin(float pointSizeMin); virtual void setPointSizeMin(float pointSizeMin);
......
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