mc-imperial / spirv-control-flow

Formal modelling of SPIR-V control flow using Alloy
Apache License 2.0
2 stars 0 forks source link

MESA: NIR validation failed after nir_opt_if #11

Open Jack-Clark opened 2 years ago

Jack-Clark commented 2 years ago

When running the amber file in the attached archive, I get the following error:

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 813ee839be2), 22.0 (commit 4a8d3189fdb) and on main (e11bedb9f5d).

$ 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)