From 85b24b07512c5f3f05c5a3eb9561598ace97526c Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sun, 26 Aug 2012 00:34:03 -0700 Subject: [PATCH] i965/fs: Assume shadow sampler swizzling is . Our previous assumption, SWIZZLE_XYZW, was completely bogus for depth textures. There are no Y, Z, or W components. DEPTH_TEXTURE_MODE has three options: - GL_LUMINANCE: - GL_INTENSITY: - GL_ALPHA: <0, 0, 0, X> The default value is GL_LUMINANCE, and most applications don't seem to alter DEPTH_TEXTURE_MODE. Make that our precompile guess. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt --- src/mesa/drivers/dri/i965/brw_fs.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index d896b008fd7..a8d55ffc35e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2179,8 +2179,14 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) key.clamp_fragment_color = true; for (int i = 0; i < MAX_SAMPLERS; i++) { - /* FINISHME: depth compares might use (0,0,0,W) for example */ - key.tex.swizzles[i] = SWIZZLE_XYZW; + if (fp->Base.ShadowSamplers & (1 << i)) { + /* Assume DEPTH_TEXTURE_MODE is the default: X, X, X, 1 */ + key.tex.swizzles[i] = + MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_ONE); + } else { + /* Color sampler: assume no swizzling. */ + key.tex.swizzles[i] = SWIZZLE_XYZW; + } } if (fp->Base.InputsRead & FRAG_BIT_WPOS) { -- 2.30.2