Skip to content

Conversation

@Kbz-8
Copy link
Contributor

@Kbz-8 Kbz-8 commented Jan 19, 2026

Fixes issue #86 by adding current loop counter increment right before each continue. Current implementation may be sub-optimal but really simple.

For example, the fix makes this code

[entry(frag)]
fn main()
{
    let value = 1.0;
    for i in 1 -> 5
    {
		if (i == 2)
			continue;
		for j in 1 -> 5
		{
        	if (j == 3)
				continue;
			for k in 1 -> 5
			{
				if (k == 4)
					continue;
				value *= f32(i) + f32(j);
			}
		}
    }
}

generate this GLSL

void main()
{
	float value = 1.0;
	{
		int i = 1;
		int _nzsl_to = 5;
		while (i < _nzsl_to)
		{
			if (i == 2)
			{
				i += 1;
				continue;
			}

			{
				int j = 1;
				int _nzsl_to_2 = 5;
				while (j < _nzsl_to_2)
				{
					if (j == 3)
					{
						j += 1;
						continue;
					}

					{
						int k = 1;
						int _nzsl_to_3 = 5;
						while (k < _nzsl_to_3)
						{
							if (k == 4)
							{
								k += 1;
								continue;
							}

							value *= (float(i)) + (float(j));
							k += 1;
						}

					}

					j += 1;
				}

			}

			i += 1;
		}

	}

}

The fix also works in SPIR-V

@Kbz-8 Kbz-8 requested a review from SirLynix January 19, 2026 13:55
@Kbz-8 Kbz-8 requested a review from SirLynix January 19, 2026 15:40
@SirLynix
Copy link
Contributor

LGTM, thank you

@SirLynix SirLynix merged commit 96de6b0 into NazaraEngine:main Jan 19, 2026
26 of 66 checks passed
@Kbz-8 Kbz-8 deleted the spirv-for-loop-fix branch January 19, 2026 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants