intel/compiler: avoid 64bit SEL_EXEC on MTL
On MTL, instructions with DF type are unordered, executed in the math pipe. This means that they require different SWSB dependency handling, and also that in some cases such as MOVs it's generally faster to simply use 2 smaller ordered moves than a single unordered MOV. One problem we have with the current code is that generate_code() is not setting the proper SWSB dependencies for the generated DF MOVs, causing some tests to fail. One solution would be to fix generate_code() by making it set the appropriate dependencies. This was the first patch I wrote. Another solution to this problem, pointed to us by Curro, is to change required_exec_type() so we use UD instructions instead of DF, just like we do with platforms that don't have 64 bit instructions, which means there won't be anything to fix in generate_code(). The second solution is what this patch implements. This fixes at least: - dEQP-VK.subgroups.arithmetic.framebuffer.subgroupmin_double_vertex Thanks to Francisco Jerez for all the major help provided with this problem. Credits-to: Francisco Jerez <currojerez@riseup.net> Reviewed-by: Francisco Jerez <currojerez@riseup.net> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20072>
This commit is contained in:
@@ -155,7 +155,8 @@ namespace {
|
||||
return t;
|
||||
|
||||
case SHADER_OPCODE_SEL_EXEC:
|
||||
if (!has_64bit && type_sz(t) > 4)
|
||||
if ((!has_64bit || intel_device_info_is_mtl(devinfo)) &&
|
||||
type_sz(t) > 4)
|
||||
return BRW_REGISTER_TYPE_UD;
|
||||
else
|
||||
return t;
|
||||
|
Reference in New Issue
Block a user