1#version 450
2#extension GL_EXT_shader_16bit_storage : enable
3#extension GL_EXT_shader_8bit_storage : enable
4#extension GL_EXT_buffer_reference : enable
5
6layout(std140, binding = 0) buffer AcBlock { highp uint ac_numPassed; };
7
8layout(std430, column_major, buffer_reference) buffer BlockB
9{
10	float16_t a;
11	highp ivec2 b;
12};
13layout(std430, buffer_reference) buffer BlockC
14{
15	mediump mat2x3 c;
16};
17layout(std430, row_major, buffer_reference) buffer BlockD
18{
19	lowp uvec3 d;
20};
21layout (push_constant, std430) uniform PC {
22	BlockB blockB;
23	BlockC blockC;
24	BlockD blockD;
25};
26
27bool compare_float    (highp float a, highp float b)  { return abs(a - b) < 0.05; }
28bool 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); }
29bool compare_mat2x3   (highp mat2x3 a, highp mat2x3 b){ return compare_vec3(a[0], b[0])&&compare_vec3(a[1], b[1]); }
30bool compare_ivec2    (highp ivec2 a, highp ivec2 b)  { return a == b; }
31bool compare_uvec3    (highp uvec3 a, highp uvec3 b)  { return a == b; }
32bool compare_float16_t(highp float a, highp float b)  { return abs(a - b) < 0.05; }
33
34void main (void)
35{
36	bool allOk = true;
37	allOk = allOk && compare_mat2x3(blockC.c, mat2x3(-5.0, 1.0, -7.0, 1.0, 2.0, 8.0));
38	if (allOk)
39		ac_numPassed++;
40
41	blockD.d = (uvec3(8u, 1u, 5u));
42}