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]; + break; } /* In some cases we use an RGBA surface format for GL RGB textures, -- 1.7.10.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev