SPIRV-Cross/shaders-msl/comp/shared-matrix-array-of-array.comp

66 lines
2.4 KiB
Plaintext
Raw Normal View History

#version 450
layout(local_size_x = 1) in;
layout(std140, binding = 0) buffer block { highp uint passed; };
struct S1 {
mediump mat4x3 a[2];
lowp float b;
lowp vec2 c[3];
};
struct S2 {
highp ivec4 a;
bool b[3][1][3];
};
bool compare_float (highp float a, highp float b) { return abs(a - b) < 0.05; }
bool compare_vec2 (highp vec2 a, highp vec2 b) { return compare_float(a.x, b.x)&&compare_float(a.y, b.y); }
bool compare_vec3 (highp vec3 a, highp vec3 b) { return compare_float(a.x, b.x)&&compare_float(a.y, b.y)&&compare_float(a.z, b.z); }
bool compare_mat4x3 (highp mat4x3 a, highp mat4x3 b){ return compare_vec3(a[0], b[0])&&compare_vec3(a[1], b[1])&&compare_vec3(a[2], b[2])&&compare_vec3(a[3], b[3]); }
bool compare_ivec4 (highp ivec4 a, highp ivec4 b) { return a == b; }
bool compare_bool (bool a, bool b) { return a == b; }
shared S1 s1;
shared S2 s2;
void main (void) {
s1.a[0] = mat4x3(0.0, 2.0, -8.0, 6.0, 7.0, 5.0, -6.0, 1.0, 9.0, -4.0, -3.0, 4.0);
s1.a[1] = mat4x3(4.0, 9.0, -9.0, -8.0, -9.0, 8.0, 0.0, 4.0, -4.0, 7.0, 2.0, -1.0);
s1.b = 7.0;
s1.c[0] = vec2(-5.0, -4.0);
s1.c[1] = vec2(3.0, -5.0);
s1.c[2] = vec2(-3.0, -1.0);
s2.a = ivec4(1, 0, -3, 1);
s2.b[0][0][0] = true;
s2.b[0][0][1] = false;
s2.b[0][0][2] = false;
s2.b[1][0][0] = true;
s2.b[1][0][1] = false;
s2.b[1][0][2] = true;
s2.b[2][0][0] = false;
s2.b[2][0][1] = true;
s2.b[2][0][2] = true;
barrier();
memoryBarrier();
bool allOk = true;
allOk = allOk && compare_mat4x3(mat4x3(0.0, 2.0, -8.0, 6.0, 7.0, 5.0, -6.0, 1.0, 9.0, -4.0, -3.0, 4.0), s1.a[0]);
allOk = allOk && compare_mat4x3(mat4x3(4.0, 9.0, -9.0, -8.0, -9.0, 8.0, 0.0, 4.0, -4.0, 7.0, 2.0, -1.0), s1.a[1]);
allOk = allOk && compare_float(7.0, s1.b);
allOk = allOk && compare_vec2(vec2(-5.0, -4.0), s1.c[0]);
allOk = allOk && compare_vec2(vec2(3.0, -5.0), s1.c[1]);
allOk = allOk && compare_vec2(vec2(-3.0, -1.0), s1.c[2]);
allOk = allOk && compare_ivec4(ivec4(1, 0, -3, 1), s2.a);
allOk = allOk && compare_bool(true, s2.b[0][0][0]);
allOk = allOk && compare_bool(false, s2.b[0][0][1]);
allOk = allOk && compare_bool(false, s2.b[0][0][2]);
allOk = allOk && compare_bool(true, s2.b[1][0][0]);
allOk = allOk && compare_bool(false, s2.b[1][0][1]);
allOk = allOk && compare_bool(true, s2.b[1][0][2]);
allOk = allOk && compare_bool(false, s2.b[2][0][0]);
allOk = allOk && compare_bool(true, s2.b[2][0][1]);
allOk = allOk && compare_bool(true, s2.b[2][0][2]);
if (allOk)
passed++;
}