uniform half4 colorRed, colorGreen; bool test() { const float floatOne = 1; const int intOne = 1; const half4 half4One = half4(1); const int4 int4One = int4(1); bool ok = true; // Typecasting a constant scalar variable should fold away. ok = ok && (int(floatOne) == intOne); ok = ok && (float(intOne) == floatOne); // Typecasting a constant vector variable should fold away. ok = ok && (int4(half4One) == int4One); ok = ok && (half4(int4One) == half4One); // More complex cases should also fold. ok = ok && (int4(half4One) == int4(intOne)); // cast(vector) == splat(scalar) ok = ok && (half4(int4One) == half4(half(floatOne))); // cast(vector) == splat(cast(scalar)) ok = ok && (half4(intOne) == half4(float4(floatOne))); // splatcast(sclr) == cast(splat(sclr)) return ok; } half4 main(float2 coords) { return test() ? colorGreen : colorRed; }