[Mesa-dev] [PATCH] i965: Fix border color handling for deprecated SNORM formats.
Ian Romanick
idr at freedesktop.org
Wed Jan 2 10:35:39 PST 2013
On 12/20/2012 04:07 PM, Eric Anholt wrote:
> We don't have native hardware support for these, so they get promoted to
> RGBA, in which case we don't have hardware dealing with the channel
> swizzling for us.
>
> Fixes piglit EXT_texture_snorm/texwrap formats bordercolor (-swizzled).
> ---
> src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | 31 ++++++++++++++++++++--
> 1 file changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
> index 0d1f249..006aa68 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
> @@ -89,7 +89,8 @@ upload_default_color(struct brw_context *brw, struct gl_sampler_object *sampler,
> struct gl_texture_image *firstImage = texObj->Image[0][texObj->BaseLevel];
> float color[4];
>
> - if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
> + switch (firstImage->_BaseFormat) {
> + case GL_DEPTH_COMPONENT:
> /* GL specs that border color for depth textures is taken from the
> * R channel, while the hardware uses A. Spam R into all the
> * channels for safety.
> @@ -98,11 +99,37 @@ upload_default_color(struct brw_context *brw, struct gl_sampler_object *sampler,
> color[1] = sampler->BorderColor.f[0];
> color[2] = sampler->BorderColor.f[0];
> color[3] = sampler->BorderColor.f[0];
> - } else {
> + break;
> + case GL_ALPHA:
> + color[0] = 0.0;
> + color[1] = 0.0;
> + color[2] = 0.0;
> + color[3] = sampler->BorderColor.f[3];
> + break;
> + case GL_INTENSITY:
> + color[0] = sampler->BorderColor.f[0];
> + color[1] = sampler->BorderColor.f[0];
> + color[2] = sampler->BorderColor.f[0];
> + color[3] = sampler->BorderColor.f[0];
> + break;
> + case GL_LUMINANCE:
> + color[0] = sampler->BorderColor.f[0];
> + color[1] = sampler->BorderColor.f[0];
> + color[2] = sampler->BorderColor.f[0];
> + color[3] = 1.0;
> + break;
> + case GL_LUMINANCE_ALPHA:
> + color[0] = sampler->BorderColor.f[0];
> + color[1] = sampler->BorderColor.f[0];
> + color[2] = sampler->BorderColor.f[0];
> + color[3] = sampler->BorderColor.f[3];
> + break;
> + default:
> color[0] = sampler->BorderColor.f[0];
> color[1] = sampler->BorderColor.f[1];
> color[2] = sampler->BorderColor.f[2];
> color[3] = sampler->BorderColor.f[3];
Is this the correct handing for RED / RG? If it's not, it's a
pre-existing issue. I haven't reviewed that part of the spec recently...
> + break;
> }
>
> /* In some cases we use an RGBA surface format for GL RGB textures,
>
More information about the mesa-dev
mailing list