diff options
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | 31 |
1 files 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 0d1f24950e6..006aa68a0b4 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, |