From: Kenneth Graunke Date: Thu, 1 Jan 2015 02:06:41 +0000 (-0800) Subject: i965: Make the precompile ignore DEPTH_TEXTURE_MODE on Gen7.5+. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0b98b2bf535d6e6b6b02c0d47ea03f98adf42f15;p=mesa.git i965: Make the precompile ignore DEPTH_TEXTURE_MODE on Gen7.5+. Gen7.5+ platforms that support the "Shader Channel Select" feature leave key->tex.swizzles[i] as SWIZZLE_NOOP except when GL_DEPTH_TEXTURE_MODE is GL_ALPHA (which is really uncommon). So, the precompile should leave them as SWIZZLE_NOOP (aka SWIZZLE_XYZW) as well. We didn't notice this because prog->ShadowSamplers is not set correctly. The next patch will fix that problem. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=87886 Signed-off-by: Kenneth Graunke Reviewed-by: Matt Turner Reviewed-by: Chris Forbes --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index d46eca1e03f..8c7d780f352 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -3912,9 +3912,10 @@ brw_fs_precompile(struct gl_context *ctx, BRW_FS_VARYING_INPUT_MASK) > 16) key.input_slots_valid = fp->Base.InputsRead | VARYING_BIT_POS; + const bool has_shader_channel_select = brw->is_haswell || brw->gen >= 8; unsigned sampler_count = _mesa_fls(fp->Base.SamplersUsed); for (unsigned i = 0; i < sampler_count; i++) { - if (fp->Base.ShadowSamplers & (1 << i)) { + if (!has_shader_channel_select && (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); diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 4f10bdbc84f..c96bd847160 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -1949,11 +1949,13 @@ brw_vue_setup_prog_key_for_precompile(struct gl_context *ctx, struct brw_vue_prog_key *key, GLuint id, struct gl_program *prog) { + struct brw_context *brw = brw_context(ctx); key->program_string_id = id; + const bool has_shader_channel_select = brw->is_haswell || brw->gen >= 8; unsigned sampler_count = _mesa_fls(prog->SamplersUsed); for (unsigned i = 0; i < sampler_count; i++) { - if (prog->ShadowSamplers & (1 << i)) { + if (!has_shader_channel_select && (prog->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);