| uniform float2x2 testMatrix2x2; |
| uniform float3x3 testMatrix3x3; |
| uniform float4 testInputs; |
| uniform half4 colorRed, colorGreen; |
| uniform half unknownInput; |
| |
| bool test_mat2_mat2() { |
| float2x2 m, mm; |
| const float2x2 i = float2x2(1.0); |
| const float2x2 z = float2x2(0.0); |
| const float2x2 s = float2x2(float4(1.0)); |
| |
| m = testMatrix2x2 * i; |
| m = i * testMatrix2x2; |
| |
| m = m * i; |
| m = i * m; |
| m *= i; |
| |
| m = m / s; |
| m /= s; |
| |
| m = m + z; |
| m = z + m; |
| m += z; |
| |
| m = m - z; |
| m = z - m; // negates |
| m -= z; |
| |
| mm = m * z; |
| mm = z * m; |
| |
| return m == -testMatrix2x2 && mm == z; |
| } |
| |
| bool test_mat3_mat3() { |
| float3x3 m, mm; |
| const float3x3 i = float3x3(1.0); |
| const float3x3 z = float3x3(0.0); |
| const float3x3 s = float3x3(float3(1.0), float3(1.0), float3(1.0)); |
| |
| m = testMatrix3x3 * i; |
| m = i * testMatrix3x3; |
| |
| m = m * i; |
| m = i * m; |
| m *= i; |
| |
| m = m / s; |
| m /= s; |
| |
| m = m + z; |
| m = z + m; |
| m += z; |
| |
| m = m - z; |
| m = z - m; // negates |
| m -= z; |
| |
| mm = m * z; |
| mm = z * m; |
| |
| return m == -testMatrix3x3 && mm == z; |
| } |
| |
| bool test_mat4_mat4() { |
| float4x4 testMatrix4x4 = float4x4(testInputs, testInputs, testInputs, testInputs); |
| |
| float4x4 m, mm; |
| const float4x4 i = float4x4(1.0); |
| const float4x4 z = float4x4(0.0); |
| const float4x4 s = float4x4(float4(1.0), float4(1.0), float4(1.0), float4(1.0)); |
| |
| m = testMatrix4x4 * i; |
| m = i * testMatrix4x4; |
| |
| m = m * i; |
| m = i * m; |
| m *= i; |
| |
| m = m / s; |
| m /= s; |
| |
| m = m + z; |
| m = z + m; |
| m += z; |
| |
| m = m - z; |
| m = z - m; // negates |
| m -= z; |
| |
| mm = m * z; |
| mm = z * m; |
| |
| return m == -testMatrix4x4 && mm == z; |
| } |
| |
| half4 main(float2 coords) { |
| return test_mat2_mat2() && |
| test_mat3_mat3() && |
| test_mat4_mat4() ? colorGreen : colorRed; |
| } |