NIR validation failed after nir_opt_if
When I run amber -t spv1.3 -v 1.1 reduced-nir-validation-bug.amber
from the attached-archive, I get the following output:
NIR validation failed after nir_opt_if
3 errors:
shader: MESA_SHADER_COMPUTE
source_sha1: {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}
workgroup-size: 1, 1, 1
shared-size: 0
inputs: 0
outputs: 0
uniforms: 0
shared: 0
ray queries: 0
decl_var ssbo INTERP_MODE_NONE restrict readonly block @0 (~0, 0, 2)
decl_var ssbo INTERP_MODE_NONE restrict readonly block @1 (~0, 0, 1)
decl_var ssbo INTERP_MODE_NONE restrict writeonly block @2 (~0, 0, 4)
decl_function main (0 params)
impl main {
decl_var INTERP_MODE_NONE uint @3
decl_var INTERP_MODE_NONE uint @4
decl_var INTERP_MODE_NONE uint @5
decl_var INTERP_MODE_NONE bool cont
block block_0:
/* preds: */
vec1 32 ssa_64 = load_const (0x00000000 = 0.000000)
vec1 32 ssa_52 = load_const (0x00000001 = 0.000000)
vec1 32 ssa_51 = load_const (0x0000000e = 0.000000)
vec1 32 ssa_38 = load_const (0x0000000f = 0.000000)
/* succs: block_1 */
loop {
block block_1:
/* preds: block_0 block_6 block_7 */
vec1 32 ssa_106 = phi block_0: ssa_64, block_6: ssa_106, block_7: ssa_53
vec1 32 ssa_105 = phi block_0: ssa_64, block_6: ssa_14, block_7: ssa_14
vec1 32 ssa_104 = phi block_0: ssa_64, block_6: ssa_28, block_7: ssa_28
vec4 32 ssa_5 = intrinsic vulkan_resource_index (ssa_64) (desc_set=0, binding=1, desc_type=SSBO /*7*/)
vec4 32 ssa_6 = intrinsic load_vulkan_descriptor (ssa_5) (desc_type=SSBO /*7*/)
vec4 32 ssa_7 = deref_cast (block *)ssa_6 (ssbo block) /* ptr_stride=0, align_mul=0, align_offset=0 */
vec4 32 ssa_8 = deref_struct &ssa_7->field0 (ssbo uint[2]) /* &((block *)ssa_6)->field0 */
vec4 32 ssa_9 = deref_array &(*ssa_8)[ssa_105] (ssbo uint) /* &((block *)ssa_6)->field0[ssa_105] */
vec1 32 ssa_10 = intrinsic load_deref (ssa_9) (access=80)
vec1 1 ssa_12 = ieq ssa_10, ssa_52
vec1 1 ssa_107 = inot ssa_12
vec1 32 ssa_14 = iadd ssa_105, ssa_52
/* succs: block_2 block_3 */
if ssa_107 {
block block_2:
/* preds: block_1 */
break
/* succs: block_8 */
} else {
block block_3:
/* preds: block_1 */
/* succs: block_4 */
}
block block_4:
/* preds: block_3 */
vec4 32 ssa_19 = intrinsic vulkan_resource_index (ssa_64) (desc_set=0, binding=2, desc_type=SSBO /*7*/)
vec4 32 ssa_20 = intrinsic load_vulkan_descriptor (ssa_19) (desc_type=SSBO /*7*/)
vec4 32 ssa_21 = deref_cast (block *)ssa_20 (ssbo block) /* ptr_stride=0, align_mul=0, align_offset=0 */
vec4 32 ssa_22 = deref_struct &ssa_21->field0 (ssbo uint[1]) /* &((block *)ssa_20)->field0 */
vec4 32 ssa_23 = deref_array &(*ssa_22)[ssa_104] (ssbo uint) /* &((block *)ssa_20)->field0[ssa_104] */
vec1 32 ssa_24 = intrinsic load_deref (ssa_23) (access=80)
vec1 1 ssa_26 = ieq ssa_24, ssa_52
vec1 32 ssa_28 = iadd ssa_104, ssa_52
/* succs: block_5 block_6 */
if ssa_26 {
block block_5:
/* preds: block_4 */
vec4 32 ssa_33 = intrinsic vulkan_resource_index (ssa_64) (desc_set=0, binding=4, desc_type=SSBO /*7*/)
vec4 32 ssa_34 = intrinsic load_vulkan_descriptor (ssa_33) (desc_type=SSBO /*7*/)
vec4 32 ssa_35 = deref_cast (block *)ssa_34 (ssbo block) /* ptr_stride=0, align_mul=0, align_offset=0 */
vec4 32 ssa_36 = deref_struct &ssa_35->field0 (ssbo uint[14]) /* &((block *)ssa_34)->field0 */
vec4 32 ssa_37 = deref_array &(*ssa_36)[ssa_106] (ssbo uint) /* &((block *)ssa_34)->field0[ssa_106] */
intrinsic store_deref (ssa_37, ssa_38) (wrmask=x /*1*/, access=8)
vec1 32 ssa_40 = iadd ssa_106, ssa_52
vec4 32 ssa_46 = intrinsic vulkan_resource_index (ssa_64) (desc_set=0, binding=4, desc_type=SSBO /*7*/)
vec4 32 ssa_47 = intrinsic load_vulkan_descriptor (ssa_46) (desc_type=SSBO /*7*/)
vec4 32 ssa_48 = deref_cast (block *)ssa_47 (ssbo block) /* ptr_stride=0, align_mul=0, align_offset=0 */
vec4 32 ssa_49 = deref_struct &ssa_48->field0 (ssbo uint[14]) /* &((block *)ssa_47)->field0 */
vec4 32 ssa_50 = deref_array &(*ssa_49)[ssa_76] (ssbo uint) /* &((block *)ssa_47)->field0[ssa_76] */
error: entry (../src/compiler/nir/nir_validate.c:205)
intrinsic store_deref (ssa_50, ssa_51) (wrmask=x /*1*/, access=8)
vec1 32 ssa_53 = iadd ssa_76, ssa_52
error: entry (../src/compiler/nir/nir_validate.c:205)
/* succs: block_7 */
} else {
block block_6:
/* preds: block_4 */
continue
/* succs: block_1 */
}
block block_7:
/* preds: block_5 */
vec1 32 ssa_76 = phi block_5: ssa_40
/* succs: block_1 */
}
block block_8:
/* preds: block_2 */
/* succs: block_9 */
block block_9:
}
1 additional errors:
error: state->ssa_srcs->entries == 0 (../src/compiler/nir/nir_validate.c:1667)
Aborted (core dumped)
I can reproduce this on branch 21.3 (commit 813ee839), 22.0 (commit 4a8d3189) and on main (e11bedb9). I think the issue is potentially related to #3282 (closed).
$ glxinfo | grep Mesa
client glx vendor string: Mesa Project and SGI
Device: Mesa Intel(R) Xe Graphics (TGL GT2) (0x9a49)
OpenGL renderer string: Mesa Intel(R) Xe Graphics (TGL GT2)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 22.1.0-devel (git-e11bedb9f5)
OpenGL version string: 4.6 (Compatibility Profile) Mesa 22.1.0-devel (git-e11bedb9f5)
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 22.1.0-devel (git-e11bedb9f5)