Commit bc90a480 by Geoff Lang

Added TEXTURE_SWIZZLE_* parameters to the texture sampler state and API queries.

Change-Id: I20aff392ec4cd9e49424afae94a862fdd8eef9b8 Reviewed-on: https://chromium-review.googlesource.com/177030Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Commit-Queue: Shannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent ed883f54
...@@ -62,6 +62,10 @@ Texture::Texture(rx::Renderer *renderer, GLuint id, GLenum target) : RefCountObj ...@@ -62,6 +62,10 @@ Texture::Texture(rx::Renderer *renderer, GLuint id, GLenum target) : RefCountObj
mSamplerState.lodOffset = 0; mSamplerState.lodOffset = 0;
mSamplerState.compareMode = GL_NONE; mSamplerState.compareMode = GL_NONE;
mSamplerState.compareFunc = GL_LEQUAL; mSamplerState.compareFunc = GL_LEQUAL;
mSamplerState.swizzleRed = GL_RED;
mSamplerState.swizzleGreen = GL_GREEN;
mSamplerState.swizzleBlue = GL_BLUE;
mSamplerState.swizzleAlpha = GL_ALPHA;
mUsage = GL_NONE; mUsage = GL_NONE;
mDirtyImages = true; mDirtyImages = true;
...@@ -130,6 +134,26 @@ void Texture::setCompareFunc(GLenum func) ...@@ -130,6 +134,26 @@ void Texture::setCompareFunc(GLenum func)
mSamplerState.compareFunc = func; mSamplerState.compareFunc = func;
} }
void Texture::setSwizzleRed(GLenum swizzle)
{
mSamplerState.swizzleRed = swizzle;
}
void Texture::setSwizzleGreen(GLenum swizzle)
{
mSamplerState.swizzleGreen = swizzle;
}
void Texture::setSwizzleBlue(GLenum swizzle)
{
mSamplerState.swizzleBlue = swizzle;
}
void Texture::setSwizzleAlpha(GLenum swizzle)
{
mSamplerState.swizzleAlpha = swizzle;
}
void Texture::setUsage(GLenum usage) void Texture::setUsage(GLenum usage)
{ {
mUsage = usage; mUsage = usage;
...@@ -165,6 +189,34 @@ float Texture::getMaxAnisotropy() const ...@@ -165,6 +189,34 @@ float Texture::getMaxAnisotropy() const
return mSamplerState.maxAnisotropy; return mSamplerState.maxAnisotropy;
} }
GLenum Texture::getSwizzleRed() const
{
return mSamplerState.swizzleRed;
}
GLenum Texture::getSwizzleGreen() const
{
return mSamplerState.swizzleGreen;
}
GLenum Texture::getSwizzleBlue() const
{
return mSamplerState.swizzleBlue;
}
GLenum Texture::getSwizzleAlpha() const
{
return mSamplerState.swizzleAlpha;
}
bool Texture::isSwizzled() const
{
return mSamplerState.swizzleRed != GL_RED ||
mSamplerState.swizzleGreen != GL_GREEN ||
mSamplerState.swizzleBlue != GL_BLUE ||
mSamplerState.swizzleAlpha != GL_ALPHA;
}
int Texture::getLodOffset() int Texture::getLodOffset()
{ {
rx::TextureStorageInterface *texture = getNativeTexture(); rx::TextureStorageInterface *texture = getNativeTexture();
......
...@@ -77,6 +77,10 @@ class Texture : public RefCountObject ...@@ -77,6 +77,10 @@ class Texture : public RefCountObject
void setMaxAnisotropy(float textureMaxAnisotropy, float contextMaxAnisotropy); void setMaxAnisotropy(float textureMaxAnisotropy, float contextMaxAnisotropy);
void setCompareMode(GLenum mode); void setCompareMode(GLenum mode);
void setCompareFunc(GLenum func); void setCompareFunc(GLenum func);
void setSwizzleRed(GLenum swizzle);
void setSwizzleGreen(GLenum swizzle);
void setSwizzleBlue(GLenum swizzle);
void setSwizzleAlpha(GLenum swizzle);
void setUsage(GLenum usage); void setUsage(GLenum usage);
GLenum getMinFilter() const; GLenum getMinFilter() const;
...@@ -85,6 +89,11 @@ class Texture : public RefCountObject ...@@ -85,6 +89,11 @@ class Texture : public RefCountObject
GLenum getWrapT() const; GLenum getWrapT() const;
GLenum getWrapR() const; GLenum getWrapR() const;
float getMaxAnisotropy() const; float getMaxAnisotropy() const;
GLenum getSwizzleRed() const;
GLenum getSwizzleGreen() const;
GLenum getSwizzleBlue() const;
GLenum getSwizzleAlpha() const;
bool isSwizzled() const;
int getLodOffset(); int getLodOffset();
void getSamplerState(SamplerState *sampler); void getSamplerState(SamplerState *sampler);
GLenum getUsage() const; GLenum getUsage() const;
......
...@@ -152,6 +152,11 @@ struct SamplerState ...@@ -152,6 +152,11 @@ struct SamplerState
GLenum compareMode; GLenum compareMode;
GLenum compareFunc; GLenum compareFunc;
GLenum swizzleRed;
GLenum swizzleGreen;
GLenum swizzleBlue;
GLenum swizzleAlpha;
}; };
struct ClearParameters struct ClearParameters
......
...@@ -3751,6 +3751,34 @@ void __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) ...@@ -3751,6 +3751,34 @@ void __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
} }
*params = (GLfloat)texture->getMaxAnisotropy(); *params = (GLfloat)texture->getMaxAnisotropy();
break; break;
case GL_TEXTURE_SWIZZLE_R:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = (GLfloat)texture->getSwizzleRed();
break;
case GL_TEXTURE_SWIZZLE_G:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = (GLfloat)texture->getSwizzleGreen();
break;
case GL_TEXTURE_SWIZZLE_B:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = (GLfloat)texture->getSwizzleBlue();
break;
case GL_TEXTURE_SWIZZLE_A:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = (GLfloat)texture->getSwizzleAlpha();
break;
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -3821,6 +3849,34 @@ void __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) ...@@ -3821,6 +3849,34 @@ void __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
} }
*params = (GLint)texture->getMaxAnisotropy(); *params = (GLint)texture->getMaxAnisotropy();
break; break;
case GL_TEXTURE_SWIZZLE_R:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = texture->getSwizzleRed();
break;
case GL_TEXTURE_SWIZZLE_G:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = texture->getSwizzleGreen();
break;
case GL_TEXTURE_SWIZZLE_B:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = texture->getSwizzleBlue();
break;
case GL_TEXTURE_SWIZZLE_A:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
*params = texture->getSwizzleAlpha();
break;
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
...@@ -5181,11 +5237,11 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param) ...@@ -5181,11 +5237,11 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param)
case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(static_cast<GLfloat>(param), context->getTextureMaxAnisotropy()); break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(static_cast<GLfloat>(param), context->getTextureMaxAnisotropy()); break;
case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(gl::uiround<GLenum>(param)); break; case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(gl::uiround<GLenum>(param)); break; case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_SWIZZLE_G: texture->setSwizzleGreen(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_SWIZZLE_B: texture->setSwizzleBlue(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_SWIZZLE_A: texture->setSwizzleAlpha(gl::uiround<GLenum>(param)); break;
case GL_TEXTURE_SWIZZLE_R:
case GL_TEXTURE_SWIZZLE_G:
case GL_TEXTURE_SWIZZLE_B:
case GL_TEXTURE_SWIZZLE_A:
case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_BASE_LEVEL:
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
...@@ -5241,11 +5297,11 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param) ...@@ -5241,11 +5297,11 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param)
case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy((float)param, context->getTextureMaxAnisotropy()); break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy((float)param, context->getTextureMaxAnisotropy()); break;
case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode((GLenum)param); break; case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode((GLenum)param); break;
case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc((GLenum)param); break; case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc((GLenum)param); break;
case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed((GLenum)param); break;
case GL_TEXTURE_SWIZZLE_G: texture->setSwizzleGreen((GLenum)param); break;
case GL_TEXTURE_SWIZZLE_B: texture->setSwizzleBlue((GLenum)param); break;
case GL_TEXTURE_SWIZZLE_A: texture->setSwizzleAlpha((GLenum)param); break;
case GL_TEXTURE_SWIZZLE_R:
case GL_TEXTURE_SWIZZLE_G:
case GL_TEXTURE_SWIZZLE_B:
case GL_TEXTURE_SWIZZLE_A:
case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_BASE_LEVEL:
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
......
...@@ -575,6 +575,20 @@ bool ValidateTexParamParameters(gl::Context *context, GLenum pname, GLint param) ...@@ -575,6 +575,20 @@ bool ValidateTexParamParameters(gl::Context *context, GLenum pname, GLint param)
case GL_TEXTURE_SWIZZLE_G: case GL_TEXTURE_SWIZZLE_G:
case GL_TEXTURE_SWIZZLE_B: case GL_TEXTURE_SWIZZLE_B:
case GL_TEXTURE_SWIZZLE_A: case GL_TEXTURE_SWIZZLE_A:
switch (param)
{
case GL_RED:
case GL_GREEN:
case GL_BLUE:
case GL_ALPHA:
case GL_ZERO:
case GL_ONE:
return true;
default:
return gl::error(GL_INVALID_ENUM, false);
}
break;
case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_BASE_LEVEL:
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
UNIMPLEMENTED(); UNIMPLEMENTED();
......
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