Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/ir.c:
if (!(breakable_cf_info = cf_flattener_find_innermost_breakable_cf_construct(flattener)))
{
FIXME("Unhandled break instruction.\n");
return VKD3D_ERROR_INVALID_SHADER;
}
if (breakable_cf_info->current_block == VKD3D_BLOCK_LOOP)
{
cf_flattener_emit_unconditional_branch(flattener, breakable_cf_info->u.loop.merge_block_id);
}
else if (breakable_cf_info->current_block == VKD3D_BLOCK_SWITCH)
{
/* The current case block may have already been ended by an
* unconditional continue instruction. */
if (breakable_cf_info->inside_block)
I don't think this can happen any more, after the `remove_dead_code()` pass. I added an `assert(breakable_cf_info->inside_block);` at line 1865 and it never hit on my collection of shaders.