RetroArch/deps/SPIRV-Cross/shaders-msl/comp/shared-matrix-nested-struct.comp

142 lines
4.3 KiB
Plaintext

#version 450
layout(local_size_x = 1) in;
layout(std140, binding = 0) buffer block { highp uint passed; };
struct sA
{
highp mat4 mA;
bvec3 mB;
bvec4 mC;
};
struct sB
{
bvec2 mA;
};
struct sC
{
highp float mA;
mediump uvec4 mB;
mediump float mC;
};
struct sD
{
sA mA;
sB mB;
sC mC;
};
struct sE
{
sD mA;
};
struct sF
{
lowp uvec3 mA;
bool mB;
};
struct sG
{
sF mA;
highp mat3x2 mB;
};
struct sH
{
sG mA;
mediump vec2 mB;
};
struct sI
{
mediump mat2 mA;
bvec3 mB;
bvec4 mC;
};
struct sJ
{
sI mA;
bvec3 mB;
};
struct sK
{
bvec2 mA;
sJ mB;
mediump ivec2 mC;
};
struct S1 {
lowp uint a;
mediump vec4 b;
};
struct S2 {
sE a;
highp ivec3 b;
sH c;
sK d;
};
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_vec4 (highp vec4 a, highp vec4 b) { return compare_float(a.x, b.x)&&compare_float(a.y, b.y)&&compare_float(a.z, b.z)&&compare_float(a.w, b.w); }
bool compare_mat2 (highp mat2 a, highp mat2 b) { return compare_vec2(a[0], b[0])&&compare_vec2(a[1], b[1]); }
bool compare_mat3x2 (highp mat3x2 a, highp mat3x2 b){ return compare_vec2(a[0], b[0])&&compare_vec2(a[1], b[1])&&compare_vec2(a[2], b[2]); }
bool compare_mat4 (highp mat4 a, highp mat4 b) { return compare_vec4(a[0], b[0])&&compare_vec4(a[1], b[1])&&compare_vec4(a[2], b[2])&&compare_vec4(a[3], b[3]); }
bool compare_ivec2 (highp ivec2 a, highp ivec2 b) { return a == b; }
bool compare_ivec3 (highp ivec3 a, highp ivec3 b) { return a == b; }
bool compare_uint (highp uint a, highp uint b) { return a == b; }
bool compare_uvec3 (highp uvec3 a, highp uvec3 b) { return a == b; }
bool compare_uvec4 (highp uvec4 a, highp uvec4 b) { return a == b; }
bool compare_bool (bool a, bool b) { return a == b; }
bool compare_bvec2 (bvec2 a, bvec2 b) { return a == b; }
bool compare_bvec3 (bvec3 a, bvec3 b) { return a == b; }
bool compare_bvec4 (bvec4 a, bvec4 b) { return a == b; }
shared S1 s1;
shared S2 s2;
void main (void) {
s1.a = 0u;
s1.b = vec4(8.0, 8.0, 0.0, -4.0);
s2.a.mA.mA.mA = mat4(-5.0, 9.0, -4.0, -6.0, -1.0, -1.0, -2.0, 1.0, 6.0, 5.0, 7.0, -2.0, -4.0, -9.0, 8.0, 3.0);
s2.a.mA.mA.mB = bvec3(true, false, false);
s2.a.mA.mA.mC = bvec4(true, true, true, false);
s2.a.mA.mB.mA = bvec2(true, true);
s2.a.mA.mC.mA = 7.0;
s2.a.mA.mC.mB = uvec4(8u, 6u, 2u, 0u);
s2.a.mA.mC.mC = -9.0;
s2.b = ivec3(1, -4, 0);
s2.c.mA.mA.mA = uvec3(4u, 9u, 1u);
s2.c.mA.mA.mB = false;
s2.c.mA.mB = mat3x2(3.0, -5.0, -1.0, -5.0, -1.0, -9.0);
s2.c.mB = vec2(-6.0, -9.0);
s2.d.mA = bvec2(true, false);
s2.d.mB.mA.mA = mat2(-2.0, 3.0, 7.0, 2.0);
s2.d.mB.mA.mB = bvec3(false, false, false);
s2.d.mB.mA.mC = bvec4(false, false, false, true);
s2.d.mB.mB = bvec3(true, false, false);
s2.d.mC = ivec2(-9, 0);
barrier();
memoryBarrier();
bool allOk = true;
allOk = allOk && compare_uint(0u, s1.a);
allOk = allOk && compare_vec4(vec4(8.0, 8.0, 0.0, -4.0), s1.b);
allOk = allOk && compare_mat4(mat4(-5.0, 9.0, -4.0, -6.0, -1.0, -1.0, -2.0, 1.0, 6.0, 5.0, 7.0, -2.0, -4.0, -9.0, 8.0, 3.0), s2.a.mA.mA.mA);
allOk = allOk && compare_bvec3(bvec3(true, false, false), s2.a.mA.mA.mB);
allOk = allOk && compare_bvec4(bvec4(true, true, true, false), s2.a.mA.mA.mC);
allOk = allOk && compare_bvec2(bvec2(true, true), s2.a.mA.mB.mA);
allOk = allOk && compare_float(7.0, s2.a.mA.mC.mA);
allOk = allOk && compare_uvec4(uvec4(8u, 6u, 2u, 0u), s2.a.mA.mC.mB);
allOk = allOk && compare_float(-9.0, s2.a.mA.mC.mC);
allOk = allOk && compare_ivec3(ivec3(1, -4, 0), s2.b);
allOk = allOk && compare_uvec3(uvec3(4u, 9u, 1u), s2.c.mA.mA.mA);
allOk = allOk && compare_bool(false, s2.c.mA.mA.mB);
allOk = allOk && compare_mat3x2(mat3x2(3.0, -5.0, -1.0, -5.0, -1.0, -9.0), s2.c.mA.mB);
allOk = allOk && compare_vec2(vec2(-6.0, -9.0), s2.c.mB);
allOk = allOk && compare_bvec2(bvec2(true, false), s2.d.mA);
allOk = allOk && compare_mat2(mat2(-2.0, 3.0, 7.0, 2.0), s2.d.mB.mA.mA);
allOk = allOk && compare_bvec3(bvec3(false, false, false), s2.d.mB.mA.mB);
allOk = allOk && compare_bvec4(bvec4(false, false, false, true), s2.d.mB.mA.mC);
allOk = allOk && compare_bvec3(bvec3(true, false, false), s2.d.mB.mB);
allOk = allOk && compare_ivec2(ivec2(-9, 0), s2.d.mC);
if (allOk)
passed++;
}