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 <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user