From c08302670bd737baf9c4503e09ce91c647a42531 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 6 Apr 2022 14:12:09 -0700 Subject: [PATCH] intel/compiler: Fix sample_d messages on DG2 DG2 can only do sample_d and sample_d_c on 1D and 2D surfaces. The maximum number of gradient components and coordinate components should be 2. In spite of this limitation, the Bspec lists a mysterious R component before the min_lod, so the maximum coordinate components is 3. Fixes the following Vulkan CTS failures on DG2: dEQP-VK.glsl.texture_functions.texturegradclamp.isampler1d_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.isampler2d_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_fixed_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.sampler1d_float_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_fixed_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.sampler2d_float_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.usampler1d_fragment dEQP-VK.glsl.texture_functions.texturegradclamp.usampler2d_fragment The Fixes: tag below is a bit misleading. This commit fixes some test cases similar to ones fixed by the Fixes: commit. I just want to make sure this commit gets applied everywhere that commit was also applied. Fixes: 635ed58e527 ("intel/compiler: Lower txd for 3D samplers on XeHP.") Reviewed-by: Kenneth Graunke Part-of: --- src/intel/compiler/brw_fs.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 507aca8c0af..fc7602c48cd 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -5215,9 +5215,22 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, fs_inst *inst, opcode op, if (min_lod.file != BAD_FILE) { /* Account for all of the missing coordinate sources */ - length += 4 - coord_components; - if (op == SHADER_OPCODE_TXD) - length += (3 - grad_components) * 2; + if (op == SHADER_OPCODE_TXD && devinfo->verx10 >= 125) { + /* On DG2 and newer platforms, sample_d can only be used with 1D and + * 2D surfaces, so the maximum number of gradient components is 2. + * In spite of this limitation, the Bspec lists a mysterious R + * component before the min_lod, so the maximum coordinate components + * is 3. + * + * Wa_1209978020 + */ + length += 3 - coord_components; + length += (2 - grad_components) * 2; + } else { + length += 4 - coord_components; + if (op == SHADER_OPCODE_TXD) + length += (3 - grad_components) * 2; + } bld.MOV(sources[length++], min_lod); }