Bug 109328

Summary: [BSW BXT GLK] dEQP-VK.subgroups.arithmetic.subgroup regressions
Product: Mesa Reporter: Mark Janes <mark.a.janes>
Component: Drivers/DRI/i965Assignee: Francisco Jerez <currojerez>
Status: RESOLVED FIXED QA Contact: Intel 3D Bugs Mailing List <intel-3d-bugs>
Severity: normal    
Priority: medium Keywords: bisected, regression
Version: git   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Bug Depends on:    
Bug Blocks: 109535    

Description Mark Janes 2019-01-11 23:43:57 UTC
Many vulkan tests regressed due to:

cbea91eb57a501bebb1ca256a4ba7d15cb91c511
Author:     Francisco Jerez <currojerez@riseup.net>

intel/fs: Remove nasty open-coded CHV/BXT 64-bit workarounds.

---------------------------------------------------------------
Failures:
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_int_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uint_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_geometry_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_geometry_framebuffer
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_vertex_framebuffer

eg:
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_geometry_framebuffer
Standard Output:

6 / 1023 values passed

----------------------------------------------------------------------
Crashing tests:
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_int_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_int_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_uint_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_uint_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_graphic
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_compute
dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_graphic


eg:
deqp-vk: ../src/intel/compiler/brw_fs_generator.cpp:2496: int fs_generator::generate_code(const cfg_t*, int): Assertion `validated' failed.

------------------------------------------------------------------

The following assertions bisected to:
efa4e4bc5fc39cccc6d7103e9f15b795de3ee07c
Author:     Francisco Jerez <currojerez@riseup.net>

intel/fs: Introduce regioning lowering pass.

This legalization pass is meant to handle situations where the source
or destination regioning controls of an instruction are unsupported by
the hardware and need to be lowered away into separate instructions.
This should be more reliable and future-proof than the current
approach of handling CHV/BXT restrictions manually all over the
visitor.  The same mechanism is leveraged to lower unsupported type
conversions easily, which obsoletes the lower_conversions pass.

v2: Give conditional modifiers the same treatment as predicates for
    SEL instructions in lower_dst_modifiers() (Iago).  Special-case a
    couple of other instructions with inconsistent conditional mod
    semantics in lower_dst_modifiers() (Curro).


dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_graphic
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_compute
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_graphic
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_compute
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_graphic
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_compute
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_graphic
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_compute
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_graphic
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_compute
dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_graphic
dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_compute
dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_graphic
dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_compute
dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_graphic
dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_compute
dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_graphic
dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_compute
dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_graphic


eg:
deqp-vk: ../src/intel/compiler/brw_fs_generator.cpp:2496: int fs_generator::generate_code(const cfg_t*, int): Assertion `validated' failed.


Because these regressions occurred on atom platforms, i965 Mesa CI did not provide pre-merge warning to the developer.
Comment 1 Francisco Jerez 2019-01-12 19:30:16 UTC
I see what's going on.  Apparently the SHUFFLE virtual instruction used by Vulkan 1.1 subgroups operations doesn't behave correctly when its sources are aligned in a way that complies with the CHV/BXT restrictions for double-precision datatypes, and it's going to have to be special-cased in the regioning lowering pass.

Mark, is there some way I can force the CI to run on these "slow" platforms when I foresee potential regressions, so this doesn't happen again in the future?
Comment 2 Mark Janes 2019-01-14 19:01:22 UTC
You can re-execute your CI build with type "daily" to target atom systems.
Comment 3 Francisco Jerez 2019-01-19 00:11:54 UTC
The problem should be fixed by this series:

https://lists.freedesktop.org/archives/mesa-dev/2019-January/213802.html

Thanks for reporting!
Comment 4 Francisco Jerez 2019-02-21 23:15:13 UTC
Should be fixed in master now.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.