Skip to content

shader compilation bug #77

@Redninja106

Description

@Redninja106

this code makes the shader compiler crash and burn and explode

        if (color.A == 0)
        {
            ColorF shadow = shadowMap.SampleUV(uv);

            int shadowIdxA = (int)float.Floor(shadowIndex);
            int shadowIdxB = (int)float.Ceiling(shadowIndex);

            bool inShadowA = IsInShadow(shadow, shadowIdxA);
            bool inShadowB = IsInShadow(shadow, shadowIdxB);

            if (inShadowA && inShadowB)
            {
                return new(0, 0, 0, .5f);
            }
            if (inShadowA)
            {
                float x = ShaderIntrinsics.Fract(shadowIndex);
                return ColorF.Lerp(new ColorF(.0f, .0f, .0f, .5f), new ColorF(.0f, .0f, .0f, .0f), x);
            }
            if (inShadowB)
            {
                float x = ShaderIntrinsics.Fract(shadowIndex);
                return ColorF.Lerp(new ColorF(.0f, .0f, .0f, .0f), new ColorF(.0f, .0f, .0f, .5f), 1f - x);
            }

            ShaderIntrinsics.Discard();
        }

offending compiler output:

((!(var8 && var9)) ? {
46 |            ((!(var8)) ? {
47 |                ((!(var9)) ? discard : {
48 |                    var11 = SimulationFramework_ColorF_Lerp(vec4(0.0000000, 0.0000000, 0.0000000, 0.0000000), vec4(0.0000000, 0.0000000, 0.0000000, 0.5000000), 1.0000000 - fract(shadowIndex));
49 |                    return var11;
50 |                });
51 |            } : {
52 |                var11 = SimulationFramework_ColorF_Lerp(vec4(0.0000000, 0.0000000, 0.0000000, 0.5000000), vec4(0.0000000, 0.0000000, 0.0000000, 0.0000000), fract(shadowIndex));
53 |                return var11;
54 |            });
55 |        } : {
56 |            var11 = vec4(0.0000000, 0.0000000, 0.0000000, 0.5000000);
57 |            return var11;
58 |        });

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions