Lines Matching refs:NL
75 const char* const kGLSLVer = "#version 310 es" NL "precision highp float;" NL "precision highp int;";
503 NL "layout(std430, binding = 1) buffer InputBuffer {" NL " vec4 position[3];" NL "} g_input_buffer;" NL
504 "void main() {" NL " gl_Position = g_input_buffer.position[gl_VertexID];" NL "}";
505 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
506 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
557 const char* const glsl_cs = NL "layout(local_size_x = 1) in;" NL "buffer Buffer {" NL " int result;" NL "};" NL
558 "void main() {" NL " result = 7;" NL "}";
906 NL "layout(std430) buffer Buffer {" NL " vec4 position[3];" NL "} g_input_buffer;" NL "void main() {" NL
907 " gl_Position = g_input_buffer.position[gl_VertexID];" NL "}",
908 NL "coherent buffer Buffer {" NL " buffer vec4 position0;" NL " coherent vec4 position1;" NL
909 " restrict readonly vec4 position2;" NL "} g_input_buffer;" NL "void main() {" NL
910 " if (gl_VertexID == 0) gl_Position = g_input_buffer.position0;" NL
911 " if (gl_VertexID == 1) gl_Position = g_input_buffer.position1;" NL
912 " if (gl_VertexID == 2) gl_Position = g_input_buffer.position2;" NL "}",
913 NL "layout(std140, binding = 0) readonly buffer Buffer {" NL " readonly vec4 position[];" NL "};" NL
914 "void main() {" NL " gl_Position = position[gl_VertexID];" NL "}",
915 NL "layout(std430, column_major, std140, std430, row_major, packed, shared) buffer;" NL
916 "layout(std430) buffer;" NL "coherent restrict volatile buffer Buffer {" NL
917 " restrict coherent vec4 position[];" NL "} g_buffer;" NL "void main() {" NL
918 " gl_Position = g_buffer.position[gl_VertexID];" NL "}",
919 NL "buffer Buffer {" NL " vec4 position[3];" //
920 NL "} g_buffer[1];" NL "void main() {" NL " gl_Position = g_buffer[0].position[gl_VertexID];" NL "}",
921 NL "layout(shared) coherent buffer Buffer {" NL " restrict volatile vec4 position0;" NL
922 " buffer readonly vec4 position1;" NL " vec4 position2;" NL "} g_buffer[1];" NL "void main() {" NL
923 " if (gl_VertexID == 0) gl_Position = g_buffer[0].position0;" NL
924 " else if (gl_VertexID == 1) gl_Position = g_buffer[0].position1;" NL
925 " else if (gl_VertexID == 2) gl_Position = g_buffer[0].position2;" NL "}",
926 NL "layout(packed) coherent buffer Buffer {" NL " vec4 position01[2];" NL " vec4 position2;" NL
927 "} g_buffer;" NL "void main() {" NL " if (gl_VertexID == 0) gl_Position = g_buffer.position01[0];" NL
928 " else if (gl_VertexID == 1) gl_Position = g_buffer.position01[1];" NL
929 " else if (gl_VertexID == 2) gl_Position = g_buffer.position2;" NL "}",
930 NL "layout(std430) coherent buffer Buffer {" NL " coherent vec4 position01[2];" NL " vec4 position2[];" NL
931 "} g_buffer;" NL "void main() {" NL " switch (gl_VertexID) {" NL
932 " case 0: gl_Position = g_buffer.position01[0]; break;" NL
933 " case 1: gl_Position = g_buffer.position01[1]; break;" NL
934 " case 2: gl_Position = g_buffer.position2[gl_VertexID - 2]; break;" NL " }" NL "}",
936 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
937 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
974 ss << "layout(local_size_x = 3) in;" NL "layout (std430) buffer Result {" NL " int result[3];" NL "};" << cs;
1010 NL "layout(std430, binding = 1) buffer Buffer {" NL " vec4 indata[3];" NL "} g_input_buffer;" NL
1011 "void main() {" NL
1012 " result[gl_LocalInvocationIndex] = int(g_input_buffer.indata[gl_LocalInvocationID.x].z);" NL "}",
1014 NL "layout(binding = 1) coherent buffer Buffer {" NL " buffer vec4 indata0;" NL
1015 " coherent vec4 indata1;" NL " restrict readonly vec4 indata2;" NL "} g_input_buffer;" NL
1016 "void main() {" NL
1017 " if (gl_LocalInvocationID.x == 0u) result[gl_LocalInvocationIndex] = int(g_input_buffer.indata0.z);" NL
1018 " if (gl_LocalInvocationID.x == 1u) result[gl_LocalInvocationIndex] = int(g_input_buffer.indata1.z);" NL
1019 " if (gl_LocalInvocationID.x == 2u) result[gl_LocalInvocationIndex] = int(g_input_buffer.indata2.z);" NL
1022 NL "layout(std140, binding = 1) readonly buffer Buffer {" NL " readonly vec4 indata[];" NL "};" NL
1023 "void main() {" NL " result[gl_LocalInvocationIndex] = int(indata[gl_LocalInvocationID.x].z);" NL "}",
1025 NL "layout(std430, column_major, std140, std430, row_major, packed, shared) buffer;" NL
1026 "layout(std430) buffer;" NL "layout(binding = 1) coherent restrict volatile buffer Buffer {" NL
1027 " restrict coherent vec4 indata[];" NL "} g_buffer;" NL "void main() {" NL
1028 " result[gl_LocalInvocationIndex] = int(g_buffer.indata[gl_LocalInvocationID.x].z);" NL "}",
1030 NL "layout(binding = 1) buffer Buffer {" NL " vec4 indata[3];" //
1031 NL "} g_buffer[1];" NL "void main() {" NL
1032 " result[gl_LocalInvocationIndex] = int(g_buffer[0].indata[gl_LocalInvocationID.x].z);" NL "}",
1034 NL
1035 "layout(shared, binding = 1) coherent buffer Buffer {" NL " restrict volatile vec4 indata0;" NL
1036 " buffer readonly vec4 indata1;" NL " vec4 indata2;" NL "} g_buffer[1];" NL "void main() {" NL
1037 " if (gl_LocalInvocationID.x == 0u) result[gl_LocalInvocationIndex] = int(g_buffer[0].indata0.z);" NL
1038 " else if (gl_LocalInvocationID.x == 1u) result[gl_LocalInvocationIndex] = int(g_buffer[0].indata1.z);" NL
1039 " else if (gl_LocalInvocationID.x == 2u) result[gl_LocalInvocationIndex] = int(g_buffer[0].indata2.z);" NL
1042 NL
1043 "layout(packed, binding = 1) coherent buffer Buffer {" NL " vec4 indata01[2];" NL " vec4 indata2;" NL
1044 "} g_buffer;" NL "void main() {" NL
1045 " if (gl_LocalInvocationID.x == 0u) result[gl_LocalInvocationIndex] = int(g_buffer.indata01[0].z);" NL
1046 " else if (gl_LocalInvocationID.x == 1u) result[gl_LocalInvocationIndex] = int(g_buffer.indata01[1].z);" NL
1047 " else if (gl_LocalInvocationID.x == 2u) result[gl_LocalInvocationIndex] = int(g_buffer.indata2.z);" NL
1050 NL "layout(std430, binding = 1) coherent buffer Buffer {" NL " coherent vec4 indata01[2];" NL
1051 " vec4 indata2[];" NL "} g_buffer;" NL "void main() {" NL " switch (gl_LocalInvocationID.x) {" NL
1052 " case 0u: result[gl_LocalInvocationIndex] = int(g_buffer.indata01[0].z); break;" NL
1053 " case 1u: result[gl_LocalInvocationIndex] = int(g_buffer.indata01[1].z); break;" NL
1055 "break;" NL " }" NL "}",
1123 NL "layout(std430) buffer Buffer {" NL " vec4 position[3];" NL "} g_input_buffer;" NL "void main() {" NL
1124 " gl_Position = g_input_buffer.position[gl_VertexID];" NL "}",
1125 NL "coherent buffer Buffer {" NL " vec4 position0;" NL " coherent vec4 position1;" NL
1126 " restrict readonly vec4 position2;" NL "} g_input_buffer;" NL "void main() {" NL
1127 " if (gl_VertexID == 0) gl_Position = g_input_buffer.position0;" NL
1128 " if (gl_VertexID == 1) gl_Position = g_input_buffer.position1;" NL
1129 " if (gl_VertexID == 2) gl_Position = g_input_buffer.position2;" NL "}",
1130 NL "layout(std140, binding = 0) readonly buffer Buffer {" NL " readonly vec4 position[];" NL "};" NL
1131 "void main() {" NL " gl_Position = position[gl_VertexID];" NL "}",
1132 NL "layout(std430, column_major, std140, std430, row_major, packed, shared) buffer;" NL
1133 "layout(std430) buffer;" NL "coherent restrict volatile buffer Buffer {" NL
1134 " restrict coherent vec4 position[];" NL "} g_buffer;" NL "void main() {" NL
1135 " gl_Position = g_buffer.position[gl_VertexID];" NL "}",
1136 NL "buffer Buffer {" NL " vec4 position[3];" //
1137 NL "} g_buffer[1];" NL "void main() {" NL " gl_Position = g_buffer[0].position[gl_VertexID];" NL "}",
1138 NL "layout(shared) coherent buffer Buffer {" NL " restrict volatile vec4 position0;" NL
1139 " readonly vec4 position1;" NL " vec4 position2;" NL "} g_buffer[1];" NL "void main() {" NL
1140 " if (gl_VertexID == 0) gl_Position = g_buffer[0].position0;" NL
1141 " else if (gl_VertexID == 1) gl_Position = g_buffer[0].position1;" NL
1142 " else if (gl_VertexID == 2) gl_Position = g_buffer[0].position2;" NL "}",
1143 NL "layout(packed) coherent buffer Buffer {" NL " vec4 position01[2];" NL " vec4 position2;" NL
1144 "} g_buffer;" NL "void main() {" NL " if (gl_VertexID == 0) gl_Position = g_buffer.position01[0];" NL
1145 " else if (gl_VertexID == 1) gl_Position = g_buffer.position01[1];" NL
1146 " else if (gl_VertexID == 2) gl_Position = g_buffer.position2;" NL "}",
1147 NL "layout(std430) coherent buffer Buffer {" NL " coherent vec4 position01[2];" NL " vec4 position2[];" NL
1148 "} g_buffer;" NL "void main() {" NL " switch (gl_VertexID) {" NL
1149 " case 0: gl_Position = g_buffer.position01[0]; break;" NL
1150 " case 1: gl_Position = g_buffer.position01[1]; break;" NL
1151 " case 2: gl_Position = g_buffer.position2[gl_VertexID - 2]; break;" NL " }" NL "}",
1154 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
1155 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
1217 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
1218 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
1361 return NL "layout(std430, binding = 0) buffer Input {" NL " float data0;" NL " float data1[3];" NL
1362 " ivec2 data2;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL " float data0;" NL
1363 " float data1[3];" NL " ivec2 data2;" NL "} g_output;" NL "void main() {" NL
1364 " g_output.data0 = g_input.data0;" NL
1365 " for (int i = 0; i < g_input.data1.length(); ++i) g_output.data1[i] = g_input.data1[i];" NL
1366 " g_output.data2 = g_input.data2;" NL "}";
1405 return NL "layout(std430, binding = 0) buffer Input {" NL " float data0;" NL " float data1[3];" NL
1406 " vec2 data2;" NL " readonly vec3 data3[2];" NL " float data4;" NL "} g_input;" NL
1407 "layout(std430, binding = 1) buffer Output {" NL " float data0;" NL " float data1[3];" NL
1408 " vec2 data2;" NL " vec3 data3[2];" NL " float data4;" NL "} g_output;" NL "void main() {" NL
1409 " g_output.data0 = g_input.data0;" NL
1410 " for (int i = 0; i < g_input.data1.length(); ++i) g_output.data1[i] = g_input.data1[i];" NL
1411 " g_output.data2 = g_input.data2;" NL
1412 " for (int i = 0; i < g_input.data3.length(); ++i) g_output.data3[i] = g_input.data3[i];" NL
1413 " g_output.data4 = g_input.data4;" NL "}";
1456 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(column_major) mat2x3 data0;" NL
1457 " layout(row_major) mat4x2 data1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
1458 " layout(column_major) mat2x3 data0;" NL " layout(row_major) mat4x2 data1;" NL "} g_output;" NL
1459 "void main() {" NL " g_output.data0 = g_input.data0;" NL " g_output.data1 = g_input.data1;" NL "}";
1501 return NL "layout(std430, binding = 0) buffer Input {" NL " mat4x2 data0;" NL " mat2x3 data1;" NL
1502 " float data2;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL " mat4x2 data0;" NL
1503 " mat2x3 data1;" NL " float data2;" NL "} g_output;" NL "void main() {" NL
1504 " g_output.data0 = g_input.data0;" NL " g_output.data1 = g_input.data1;" NL
1505 " g_output.data2 = g_input.data2;" NL "}";
1540 return NL "layout(std430, binding = 0, row_major) buffer Input {" NL " mat4x2 data0;" NL "} g_input;" NL
1541 "layout(std430, binding = 1, row_major) buffer Output {" NL " mat4x2 data0;" NL "} g_output;" NL
1542 "void main() {" NL " g_output.data0 = g_input.data0;" NL "}";
1661 return NL "layout(std430, binding = 0) buffer Input {" NL " float data0[2];" NL " float data1[3];" NL
1662 " vec2 data2;" NL " float data3[5];" NL " vec3 data4[2];" NL " float data5[2];" NL
1663 " mat2 data6[2];" NL " mat3 data7[2];" NL " mat4 data8[2];" NL "} g_input;" NL
1664 "layout(std430, binding = 1) buffer Output {" NL " float data0[2];" NL " float data1[3];" NL
1665 " vec2 data2;" NL " float data3[5];" NL " vec3 data4[2];" NL " float data5[2];" NL
1666 " mat2 data6[2];" NL " mat3 data7[2];" NL " mat4 data8[2];" NL "} g_output;" NL "void main() {" NL
1667 " for (int i = 0; i < g_input.data0.length(); ++i) g_output.data0[i] = g_input.data0[i];" NL
1668 " for (int i = 0; i < g_input.data1.length(); ++i) g_output.data1[i] = g_input.data1[i];" NL
1669 " g_output.data2 = g_input.data2;" NL
1670 " for (int i = 0; i < g_input.data3.length(); ++i) g_output.data3[i] = g_input.data3[i];" NL
1671 " for (int i = 0; i < g_input.data4.length(); ++i) g_output.data4[i] = g_input.data4[i];" NL
1672 " for (int i = 0; i < g_input.data5.length(); ++i) g_output.data5[i] = g_input.data5[i];" NL
1673 " for (int i = 0; i < g_input.data6.length(); ++i) g_output.data6[i] = g_input.data6[i];" NL
1674 " for (int i = 0; i < g_input.data7.length(); ++i) g_output.data7[i] = g_input.data7[i];" NL
1675 " for (int i = 0; i < g_input.data8.length(); ++i) g_output.data8[i] = g_input.data8[i];" NL "}";
1739 return NL "struct Struct0 {" NL " ivec2 m0;" NL "};" NL "struct Struct1 {" NL " vec3 m0;" NL "};" NL
1740 "struct Struct3 {" NL " int m0;" NL "};" NL "struct Struct2 {" NL " float m0;" // offset = 0
1741 NL " Struct1 m1;" // offset = 16
1742 NL " Struct0 m2;" // offset = 32
1743 NL " int m3;" // offset = 40
1744 NL " Struct3 m4;" // offset = 44
1745 NL "};" NL "layout(std430, binding = 0) buffer Input {" NL " int data0;" // offset = 0
1746 NL " Struct0 data1;" // offset = 8
1747 NL " float data2;" // offset = 16
1748 NL " Struct1 data3;" // offset = 32
1749 NL " Struct2 data4[2];" // offset = 48
1750 NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL " int data0;" NL " Struct0 data1;" NL
1751 " float data2;" NL " Struct1 data3;" NL " Struct2 data4[2];" NL "} g_output;" NL "void main() {" NL
1752 " g_output.data0 = g_input.data0;" NL " g_output.data1 = g_input.data1;" NL
1753 " g_output.data2 = g_input.data2;" NL " g_output.data3 = g_input.data3;" NL
1754 " for (int i = 0; i < g_input.data4.length(); ++i) g_output.data4[i] = g_input.data4[i];" NL "}";
1786 return NL "layout(std140, binding = 0) buffer Input {" NL " float data0[2];" NL "} g_input;" NL
1787 "layout(std140, binding = 1) buffer Output {" NL " float data0[2];" NL "} g_output;" NL
1788 "void main() {" NL
1789 " for (int i = 0; i < g_input.data0.length(); ++i) g_output.data0[i] = g_input.data0[i];" NL "}";
1834 return NL "layout(std140, binding = 0) buffer Input {" NL " float data0;" NL " float data1[3];" NL
1835 " ivec2 data2;" NL "} g_input;" NL "layout(std140, binding = 1) buffer Output {" NL " float data0;" NL
1836 " float data1[3];" NL " ivec2 data2;" NL "} g_output;" NL "void main() {" NL
1837 " g_output.data0 = g_input.data0;" NL
1838 " for (int i = 0; i < g_input.data1.length(); ++i) g_output.data1[i] = g_input.data1[i];" NL
1839 " g_output.data2 = g_input.data2;" NL "}";
1895 return NL "layout(std140, binding = 0) buffer Input {" NL " float data0;" NL " float data1[3];" NL
1896 " vec2 data2;" NL " readonly vec3 data3[2];" NL " float data4;" NL "} g_input;" NL
1897 "layout(std140, binding = 1) buffer Output {" NL " float data0;" NL " float data1[3];" NL
1898 " vec2 data2;" NL " vec3 data3[2];" NL " float data4;" NL "} g_output;" NL "void main() {" NL
1899 " g_output.data0 = g_input.data0;" NL
1900 " for (int i = 0; i < g_input.data1.length(); ++i) g_output.data1[i] = g_input.data1[i];" NL
1901 " g_output.data2 = g_input.data2;" NL
1902 " for (int i = 0; i < g_input.data3.length(); ++i) g_output.data3[i] = g_input.data3[i];" NL
1903 " g_output.data4 = g_input.data4;" NL "}";
1955 return NL "layout(std140, binding = 0) buffer Input {" NL " mat4x2 data0;" NL " mat2x3 data1;" NL
1956 " float data2;" NL "} g_input;" NL "layout(std140, binding = 1) buffer Output {" NL " mat4x2 data0;" NL
1957 " mat2x3 data1;" NL " float data2;" NL "} g_output;" NL "void main() {" NL
1958 " g_output.data0 = g_input.data0;" NL " g_output.data1 = g_input.data1;" NL
1959 " g_output.data2 = g_input.data2;" NL "}";
1994 return NL "layout(std140, binding = 0, row_major) buffer Input {" NL " mat4x2 data0;" NL "} g_input;" NL
1995 "layout(std140, binding = 1, row_major) buffer Output {" NL " mat4x2 data0;" NL "} g_output;" NL
1996 "void main() {" NL " g_output.data0 = g_input.data0;" NL "}";
2119 return NL "layout(std140, binding = 0) buffer Input {" NL " float data0[2];" NL " float data1[3];" NL
2120 " vec2 data2;" NL " vec2 data3;" NL " mat2 data4[2];" NL " mat3 data5[2];" NL " mat4 data6[2];" NL
2121 "} g_input;" NL "layout(std140, binding = 1) buffer Output {" NL " float data0[2];" NL
2122 " float data1[3];" NL " vec2 data2;" NL " vec2 data3;" NL " mat2 data4[2];" NL " mat3 data5[2];" NL
2123 " mat4 data6[2];" NL "} g_output;" NL "void main() {" NL
2124 " for (int i = 0; i < g_input.data0.length(); ++i) g_output.data0[i] = g_input.data0[i];" NL
2125 " for (int i = 0; i < g_input.data1.length(); ++i) g_output.data1[i] = g_input.data1[i];" NL
2126 " g_output.data2 = g_input.data2;" NL " g_output.data3 = g_input.data3;" NL
2127 " for (int i = 0; i < g_input.data4.length(); ++i) g_output.data4[i] = g_input.data4[i];" NL
2128 " for (int i = 0; i < g_input.data5.length(); ++i) g_output.data5[i] = g_input.data5[i];" NL
2129 " for (int i = 0; i < g_input.data6.length(); ++i) g_output.data6[i] = g_input.data6[i];" NL "}";
2170 const char* const glsl_vs = NL
2171 "layout(location = 0) in vec4 g_in_position;" NL "layout(std430, binding = 0) coherent buffer VSuint {" NL
2172 " uint g_uint_out[4];" NL "};" NL "layout(std430, binding = 1) coherent buffer VSint {" NL
2173 " int data[4];" NL "} g_int_out;" NL "uniform uint g_uint_value[8];" NL "flat out int vertexid;" NL
2174 "void main() {" NL " gl_Position = g_in_position;" NL " vertexid = gl_VertexID;" NL "#ifdef GL_ES" NL
2175 " gl_PointSize = 1.0f;" NL "#endif" NL NL
2176 " // 0 is the initial value of g_uint_out while 7 is the value at the end shader execution." NL
2177 " // Since vertex shader can be executed multiple times due to implementation dependent reasons," NL
2178 " // initial validation should consider both value as possibility." NL
2179 " uint ret = atomicExchange(g_uint_out[gl_VertexID], g_uint_value[1]);" NL
2180 " if ((ret != 0u) && (ret != 7u)) return;" NL
2181 " if (atomicAdd(g_uint_out[gl_VertexID], g_uint_value[2]) != 1u) return;" NL
2182 " if (atomicMin(g_uint_out[gl_VertexID], g_uint_value[1]) != 3u) return;" NL
2183 " if (atomicMax(g_uint_out[gl_VertexID], g_uint_value[2]) != 1u) return;" NL
2184 " if (atomicAnd(g_uint_out[gl_VertexID], g_uint_value[3]) != 2u) return;" NL
2185 " if (atomicOr(g_uint_out[gl_VertexID], g_uint_value[4]) != 0u) return;" NL
2186 " if (g_uint_value[0] > 0u) {" NL
2187 " if (atomicXor(g_uint_out[gl_VertexID], g_uint_value[5]) != 3u) return;" NL " }" NL
2188 " if (atomicCompSwap(g_uint_out[gl_VertexID], g_uint_value[6], g_uint_value[7]) != 2u) {" NL
2189 " g_uint_out[gl_VertexID] = 1u;" NL " return;" NL " }" NL NL
2190 " int ret2 = atomicExchange(g_int_out.data[gl_VertexID], 1);" NL
2191 " if ((ret2 != 0) && (ret2 != 7)) return;" NL
2192 " if (atomicAdd(g_int_out.data[gl_VertexID], 2) != 1) return;" NL
2193 " if (atomicMin(g_int_out.data[gl_VertexID], 1) != 3) return;" NL
2194 " if (atomicMax(g_int_out.data[gl_VertexID], 2) != 1) return;" NL
2195 " if (atomicAnd(g_int_out.data[gl_VertexID], 0x1) != 2) return;" NL
2196 " if (atomicOr(g_int_out.data[gl_VertexID], 0x3) != 0) return;" NL
2197 " if (atomicXor(g_int_out.data[gl_VertexID], 0x1) != 3) return;" NL
2198 " if (atomicCompSwap(g_int_out.data[gl_VertexID], 0x2, 0x7) != 2) {" NL
2199 " g_int_out.data[gl_VertexID] = 1;" NL " return;" NL " }" NL "}";
2201 const char* const glsl_fs = NL
2202 "flat in int vertexid;" NL "layout(location = 0) out vec4 g_fs_out;" NL
2203 "layout(std430, binding = 2) coherent buffer FSuint {" NL " uint data[4];" NL "} g_uint_fs;" NL
2204 "layout(std430, binding = 3) coherent buffer FSint {" NL " int data[4];" NL "} g_int_fs;" NL
2205 "uniform uint g_uint_value[8];" NL "void main() {" NL " g_fs_out = vec4(0, 1, 0, 1);" NL NL
2207 NL " if (atomicAdd(g_uint_fs.data[vertexid], g_uint_value[2]) != 1u) return;" // 1, 2
2208 NL " if (atomicMin(g_uint_fs.data[vertexid], g_uint_value[1]) != 3u) return;" // 3, 1
2209 NL " if (atomicMax(g_uint_fs.data[vertexid], g_uint_value[2]) != 1u) return;" // 1, 2
2210 NL " if (atomicAnd(g_uint_fs.data[vertexid], g_uint_value[3]) != 2u) return;" // 2, 0x1
2211 NL " if (atomicOr(g_uint_fs.data[vertexid], g_uint_value[4]) != 0u) return;" // 0, 0x3
2212 NL " if (g_uint_value[0] > 0u) {" NL
2214 NL " }" NL
2216 NL " g_uint_fs.data[vertexid] = 1u;" NL " return;" NL " }" NL NL
2217 " if (atomicExchange(g_int_fs.data[vertexid], 1) != 0) return;" NL
2218 " if (atomicAdd(g_int_fs.data[vertexid], 2) != 1) return;" NL
2219 " if (atomicMin(g_int_fs.data[vertexid], 1) != 3) return;" NL
2220 " if (atomicMax(g_int_fs.data[vertexid], 2) != 1) return;" NL
2221 " if (atomicAnd(g_int_fs.data[vertexid], 0x1) != 2) return;" NL
2222 " if (atomicOr(g_int_fs.data[vertexid], 0x3) != 0) return;" NL
2223 " if (atomicXor(g_int_fs.data[vertexid], 0x1) != 3) return;" NL
2224 " if (atomicCompSwap(g_int_fs.data[vertexid], 0x2, 0x7) != 2) {" NL " g_int_fs.data[vertexid] = 1;" NL
2225 " return;" NL " }" NL "}";
2330 NL "layout(local_size_x = 4) in;" NL "layout(std430, binding = 2) coherent buffer FSuint {" NL
2331 " uint data[4];" NL "} g_uint_fs;" NL "layout(std430, binding = 3) coherent buffer FSint {" NL
2332 " int data[4];" NL "} g_int_fs;" NL "uniform uint g_uint_value[8];" NL "void main() {" NL
2334 NL " if (atomicAdd(g_uint_fs.data[gl_LocalInvocationIndex], g_uint_value[2]) != 1u) return;" // 1, 2
2335 NL " if (atomicMin(g_uint_fs.data[gl_LocalInvocationIndex], g_uint_value[1]) != 3u) return;" // 3, 1
2336 NL " if (atomicMax(g_uint_fs.data[gl_LocalInvocationIndex], g_uint_value[2]) != 1u) return;" // 1, 2
2337 NL " if (atomicAnd(g_uint_fs.data[gl_LocalInvocationIndex], g_uint_value[3]) != 2u) return;" // 2, 0x1
2338 NL " if (atomicOr(g_uint_fs.data[gl_LocalInvocationIndex], g_uint_value[4]) != 0u) return;" // 0, 0x3
2339 NL " if (g_uint_value[0] > 0u) {" NL
2341 NL " }" NL " if (atomicCompSwap(g_uint_fs.data[gl_LocalInvocationIndex], g_uint_value[6], "
2343 NL " g_uint_fs.data[gl_LocalInvocationIndex] = 1u;" NL " return;" NL " }" NL
2344 " if (atomicExchange(g_int_fs.data[gl_LocalInvocationIndex], 1) != 0) return;" NL
2345 " if (atomicAdd(g_int_fs.data[gl_LocalInvocationIndex], 2) != 1) return;" NL
2346 " if (atomicMin(g_int_fs.data[gl_LocalInvocationIndex], 1) != 3) return;" NL
2347 " if (atomicMax(g_int_fs.data[gl_LocalInvocationIndex], 2) != 1) return;" NL
2348 " if (atomicAnd(g_int_fs.data[gl_LocalInvocationIndex], 0x1) != 2) return;" NL
2349 " if (atomicOr(g_int_fs.data[gl_LocalInvocationIndex], 0x3) != 0) return;" NL
2350 " if (atomicXor(g_int_fs.data[gl_LocalInvocationIndex], 0x1) != 3) return;" NL
2351 " if (atomicCompSwap(g_int_fs.data[gl_LocalInvocationIndex], 0x2, 0x7) != 2) {" NL
2352 " g_int_fs.data[gl_LocalInvocationIndex] = 1;" NL " return;" NL " }" NL "}";
2441 const char* const glsl_vs = NL
2442 "layout(location = 0) in vec4 g_in_position;" NL "layout(std430, binding = 0) coherent buffer Buffer {" NL
2443 " uvec4 u[4];" NL " ivec3 i[4];" NL "} g_vs_buffer;" NL "flat out int vertexid;" NL "void main() {" NL
2444 " vertexid = gl_VertexID;" NL " gl_Position = g_in_position;" NL "#ifdef GL_ES" NL
2445 " gl_PointSize = 1.0f;" NL "#endif" NL " atomicAdd(g_vs_buffer.u[0].x, g_vs_buffer.u[gl_VertexID][1]);" NL
2446 " atomicAdd(g_vs_buffer.u[0][0], g_vs_buffer.u[gl_VertexID].z);" NL
2447 " atomicAdd(g_vs_buffer.i[0].x, g_vs_buffer.i[gl_VertexID][1]);" NL
2448 " atomicAdd(g_vs_buffer.i[0][0], g_vs_buffer.i[gl_VertexID].z);" NL "}";
2451 NL "layout(location = 0) out vec4 g_fs_out;" NL "layout(std430, binding = 0) coherent buffer Buffer {" NL
2452 " uvec4 u[4];" NL " ivec3 i[4];" NL "} g_fs_buffer;" NL "flat in int vertexid;" NL "void main() {" NL
2453 " g_fs_out = vec4(0, 1, 0, 1);" NL " atomicAdd(g_fs_buffer.u[0].x, g_fs_buffer.u[vertexid][1]);" NL
2454 " atomicAdd(g_fs_buffer.i[0].x, g_fs_buffer.i[vertexid][1]);" NL "}";
2557 NL "layout(local_size_y = 4) in;" NL "layout(std430) coherent buffer Buffer {" NL " uvec4 u[4];" NL
2558 " ivec3 i[4];" NL "} g_fs_buffer;" NL "void main() {" NL
2559 " atomicAdd(g_fs_buffer.u[0].x, g_fs_buffer.u[gl_LocalInvocationID.y][2]);" NL
2560 " atomicAdd(g_fs_buffer.i[0].x, 2 * g_fs_buffer.i[gl_LocalInvocationID.y][1]);" NL
2561 " atomicAdd(g_fs_buffer.u[0].x, g_fs_buffer.u[gl_LocalInvocationID.y].z);" NL
2562 " atomicAdd(g_fs_buffer.i[0].x, 2 * g_fs_buffer.i[gl_LocalInvocationID.y].y);" NL "}";
2644 NL "layout(location = 0) in vec4 g_in_position;" NL
2645 "layout(std430, binding = 0) coherent buffer Counters {" NL " uint g_uint_counter;" NL
2646 " int g_int_counter;" NL "};" NL
2647 "layout(std430, binding = 1) buffer OutputU {" NL " uint udata[8];" NL "} g_outputU;" NL
2648 "layout(std430, binding = 2) buffer OutputI {" NL " int idata[8];" NL "} g_outputI;" NL
2649 "void main() {" NL " gl_Position = g_in_position;" NL
2650 "#ifdef GL_ES" NL " gl_PointSize = 1.0f;" NL "#endif" NL
2651 " uint uidx = atomicAdd(g_uint_counter, 1u);" NL " int iidx = atomicAdd(g_int_counter, -1);" NL
2652 " g_outputU.udata[uidx] = uidx;" NL " g_outputI.idata[iidx] = iidx;" NL "}";
2654 NL "layout(location = 0) out vec4 g_fs_out;" NL "layout(std430, binding = 0) coherent buffer Counters {" NL
2655 " uint g_uint_counter;" NL " int g_int_counter;" NL "};" NL
2656 "layout(std430, binding = 1) buffer OutputU {" NL " uint udata[8];" NL "} g_outputU;" NL
2657 "layout(std430, binding = 2) buffer OutputI {" NL " int idata[8];" NL "} g_outputI;" NL
2658 "void main() {" NL " g_fs_out = vec4(0, 1, 0, 1);" NL
2659 " uint uidx = atomicAdd(g_uint_counter, 1u);" NL " int iidx = atomicAdd(g_int_counter, -1);" NL
2660 " g_outputU.udata[uidx] = uidx;" NL " g_outputI.idata[iidx] = iidx;" NL "}";
2764 NL "layout(local_size_x = 2, local_size_y = 2, local_size_z = 2) in;" NL
2765 "layout(std430, binding = 0) coherent buffer Counters {" NL " uint g_uint_counter;" NL
2766 " int g_int_counter;" NL "};" NL "layout(std430, binding = 1) buffer Output {" NL " uint udata[8];" NL
2767 " int idata[8];" NL "} g_output;" NL "void main() {" NL
2768 " uint uidx = atomicAdd(g_uint_counter, 1u);" NL " int iidx = atomicAdd(g_int_counter, -1);" NL
2769 " g_output.udata[uidx] = uidx;" NL " g_output.idata[iidx] = iidx;" NL "}";
2857 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
2858 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
3012 return NL "layout(std430, binding = 0) buffer Input {" NL " float data0;" NL "} g_input[4];" NL
3013 "layout(std430, binding = 4) buffer Output {" NL " float data0;" NL "} g_output[4];" NL
3014 "void main() {" NL " g_output[0].data0 = g_input[0].data0;" NL
3015 " g_output[1].data0 = g_input[1].data0;" NL " g_output[2].data0 = g_input[2].data0;" NL
3016 " g_output[3].data0 = g_input[3].data0;" NL "}";
3090 return NL "layout(std140, binding = 0) buffer Input0 {" NL " float data0[3];" NL "} g_input0;" NL
3091 "layout(std430, binding = 1) buffer Input1 {" NL " float data0[3];" NL "} g_input1;" NL
3092 "layout(std140, binding = 2) buffer Input2 {" NL " float data0[3];" NL "} g_input2;" NL
3093 "layout(std430, binding = 3) buffer Input3 {" NL " float data0[3];" NL "} g_input3;" NL
3094 "layout(std140, binding = 4) buffer Output0 {" NL " float data0[3];" NL "} g_output0;" NL
3095 "layout(std430, binding = 5) buffer Output1 {" NL " float data0[3];" NL "} g_output1;" NL
3096 "layout(std140, binding = 6) buffer Output2 {" NL " float data0[3];" NL "} g_output2;" NL
3097 "layout(std430, binding = 7) buffer Output3 {" NL " float data0[3];" NL "} g_output3;" NL
3098 "void main() {" NL
3099 " for (int i = 0; i < g_input0.data0.length(); ++i) g_output0.data0[i] = g_input0.data0[i];" NL
3100 " for (int i = 0; i < g_input1.data0.length(); ++i) g_output1.data0[i] = g_input1.data0[i];" NL
3101 " for (int i = 0; i < g_input2.data0.length(); ++i) g_output2.data0[i] = g_input2.data0[i];" NL
3102 " for (int i = 0; i < g_input3.data0.length(); ++i) g_output3.data0[i] = g_input3.data0[i];" NL "}";
3230 return NL "layout(std140, binding = 0) buffer Input0 {" NL " int data0;" //BA=4, OF=[0]0, next=4
3231 NL " float data1[5];" //BA=16, OF=[4]16, next=96
3232 NL " mat3x2 data2;" //BA=16, OF=[24]96, next=144
3233 NL " float data3;" //BA=4, OF=[36]144,next=148
3234 NL " float data4[2];" //BA=16, OF=[40]160,next=192
3235 NL " int data5;" //BA=4, OF=[48]192,next=196
3236 NL " ivec3 data6;" //BA=16, OF=[52]208
3237 NL "} g_input0;" NL "layout(std430, binding = 1) buffer Input1 {" NL " int data0;" //BA=4, OF=[0], next=[1]
3238 NL " float data1[5];" //BA=4, OF=[1], next=[6]
3239 NL " mat3x2 data2;" //BA=8, OF=[6], next=[12]
3240 NL " float data3;" //BA=4, OF=[12], next=[13]
3241 NL " float data4[2];" //BA=4, OF=[13], next=[15]
3242 NL " int data5;" //BA=4, OF=[15], next=[16]
3243 NL " ivec3 data6;" //BA=16,OF=[16]
3244 NL "} g_input1;" NL "struct Struct0 {" NL " int data0;" NL "};" NL
3245 "layout(std140, binding = 2) buffer Input2 {" NL " int data0;" // offset 0
3246 NL " Struct0 data1;" // offset 16, struct should be aligned to a multiple of 16 bytes
3247 NL "} g_input2;" NL "layout(std430, binding = 3) buffer Input3 {" NL " int data0;" // offset 0
3248 NL " Struct0 data1;" // offset 4
3249 NL "} g_input3;"
3251 NL "layout(std140, binding = 4) buffer Output0 {" NL " int data0;" NL " float data1[5];" NL
3252 " mat3x2 data2;" NL " float data3;" NL " float data4[2];" NL " int data5;" NL " ivec3 data6;" NL
3253 "} g_output0;" NL "layout(std430, binding = 5) buffer Output1 {" NL " int data0;" NL
3254 " float data1[5];" NL " mat3x2 data2;" NL " float data3;" NL " float data4[2];" NL " int data5;" NL
3255 " ivec3 data6;" NL "} g_output1;" NL "layout(std140, binding = 6) buffer Output2 {" NL " int data0;" NL
3256 " Struct0 data1;" NL "} g_output2;" NL "layout(std430, binding = 7) buffer Output3 {" NL
3257 " int data0;" NL " Struct0 data1;" NL "} g_output3;" NL "void main() {" NL
3258 " g_output0.data0 = g_input0.data0;" NL
3259 " for (int i = 0; i < g_input0.data1.length(); ++i) g_output0.data1[i] = g_input0.data1[i];" NL
3260 " g_output0.data2 = g_input0.data2;" NL " g_output0.data3 = g_input0.data3;" NL
3261 " for (int i = 0; i < g_input0.data4.length(); ++i) g_output0.data4[i] = g_input0.data4[i];" NL
3262 " g_output0.data5 = g_input0.data5;" NL " g_output0.data6 = g_input0.data6;"
3264 NL " g_output1.data0 = g_input1.data0;" NL
3265 " for (int i = 0; i < g_input1.data1.length(); ++i) g_output1.data1[i] = g_input1.data1[i];" NL
3266 " g_output1.data2 = g_input1.data2;" NL " g_output1.data3 = g_input1.data3;" NL
3267 " for (int i = 0; i < g_input1.data4.length(); ++i) g_output1.data4[i] = g_input1.data4[i];" NL
3268 " g_output1.data5 = g_input1.data5;" NL " g_output1.data6 = g_input1.data6;"
3270 NL " g_output2.data0 = g_input2.data0;" NL " g_output2.data1 = g_input2.data1;"
3272 NL " g_output3.data0 = g_input3.data0;" NL " g_output3.data1 = g_input3.data1;" NL "}";
3524 return NL
3525 "struct Struct0 {" NL " ivec2 data0;" NL "};" NL "struct Struct1 {" NL " vec2 data0;" // offset 0
3526 NL " ivec3 data1;" // offset 16
3527 NL "};" NL "struct Struct2 {" NL " int data0;" // offset 0
3528 NL " Struct0 data1;" // offset std430 8, std140 16
3529 NL " int data2;" // offset std430 16, std140 32
3530 NL " Struct1 data3;" // offset std430 32, std140 48
3531 NL " float data4;" // offset std430 64, std140 80
3532 NL "};" NL "layout(std140, binding = 0) buffer Input01 {" NL " int data0;" // offset 0
3533 NL " Struct0 data1[2];" // offset 16
3534 NL " float data2;" // offset 48
3535 NL " Struct1 data3[2];" // offset 64
3536 NL " float data4;" // offset 128
3537 NL " Struct2 data5;" // offset 144
3538 NL "} g_input01[2];" NL "layout(std430, binding = 2) buffer Input23 {" NL " int data0;" // offset 0
3539 NL " Struct0 data1[2];" // offset 8
3540 NL " float data2;" // offset 24
3541 NL " Struct1 data3[2];" // offset 32
3542 NL " float data4;" // offset 96
3543 NL " Struct2 data5;" // offset 112
3544 NL "} g_input23[2];"
3546 NL "layout(std140, binding = 4) buffer Output01 {" NL " int data0;" NL " Struct0 data1[2];" NL
3547 " float data2;" NL " Struct1 data3[2];" NL " float data4;" NL " Struct2 data5;" NL "} g_output01[2];" NL
3548 "layout(std430, binding = 6) buffer Output23 {" NL " int data0;" NL " Struct0 data1[2];" NL
3549 " float data2;" NL " Struct1 data3[2];" NL " float data4;" NL " Struct2 data5;" NL "} g_output23[2];" NL NL
3550 "void main() {" NL " g_output01[0].data0 = g_input01[0].data0;" NL
3551 " for (int i = 0; i < g_input01[0].data1.length(); ++i) g_output01[0].data1[i] = g_input01[0].data1[i];" NL
3552 " g_output01[0].data2 = g_input01[0].data2;" NL " g_output01[0].data3[0] = g_input01[0].data3[0];" NL
3553 " g_output01[0].data3[1] = g_input01[0].data3[1];" NL " g_output01[0].data4 = g_input01[0].data4;" NL
3554 " g_output01[1].data0 = g_input01[1].data0;" NL
3555 " for (int i = 0; i < g_input01[1].data1.length(); ++i) g_output01[1].data1[i] = g_input01[1].data1[i];" NL
3556 " g_output01[1].data2 = g_input01[1].data2;" NL " g_output01[1].data3[0] = g_input01[1].data3[0];" NL
3557 " g_output01[1].data3[1] = g_input01[1].data3[1];" NL " g_output01[1].data4 = g_input01[1].data4;" NL
3558 " g_output01[0].data5 = g_input01[0].data5;" NL " g_output01[1].data5 = g_input01[1].data5;" NL NL
3559 " g_output23[0].data0 = g_input23[0].data0;" NL
3560 " for (int i = 0; i < g_input23[0].data1.length(); ++i) g_output23[0].data1[i] = g_input23[0].data1[i];" NL
3561 " g_output23[0].data2 = g_input23[0].data2;" NL " g_output23[0].data3[0] = g_input23[0].data3[0];" NL
3562 " g_output23[0].data3[1] = g_input23[0].data3[1];" NL " g_output23[0].data4 = g_input23[0].data4;" NL
3563 " g_output23[1].data0 = g_input23[1].data0;" NL
3564 " for (int i = 0; i < g_input23[1].data1.length(); ++i) g_output23[1].data1[i] = g_input23[1].data1[i];" NL
3565 " g_output23[1].data2 = g_input23[1].data2;" NL " g_output23[1].data3[0] = g_input23[1].data3[0];" NL
3566 " g_output23[1].data3[1] = g_input23[1].data3[1];" NL " g_output23[1].data4 = g_input23[1].data4;" NL
3567 " g_output23[0].data5 = g_input23[0].data5;" NL " g_output23[1].data5 = g_input23[1].data5;" NL "}";
3612 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
3613 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
3845 return NL "layout(std430, binding = 0) buffer Input {" NL " ivec4 data0;" NL " vec3 data1;" NL " uvec4 data2;" NL
3846 " ivec4 data3;" NL " vec4 data4;" NL " mat4 data5;" NL "} g_input;" NL
3847 "layout(std430, binding = 1) buffer Output {" NL " ivec4 data0;" NL " vec3 data1;" NL
3848 " uvec4 data2;" NL " ivec4 data3;" NL " vec4 data4;" NL " mat4 data5;" NL "} g_output;" NL
3849 "uniform vec3 g_value0;" NL "uniform int g_index1;" NL "void main() {" NL " int index0 = 0;" NL
3850 " g_output.data0.wzyx = g_input.data0;" NL " g_output.data1 = g_input.data1.zyx;" NL
3851 " g_output.data2.xwy = g_input.data2.wzx;" NL " g_output.data3.xw = ivec2(10, 20);" NL
3852 " g_output.data3.zy = g_input.data3.yw;" NL " g_output.data4.wx = g_value0.xz;" // w == 10.0, x == 30.0
3853 NL " g_output.data4.wx += g_value0.yy;" // w == 30.0, x == 50.0
3854 NL " g_output.data4.yz = g_input.data4.xx + g_input.data4.wx;" // y == 5.0, z == 2.0
3855 NL " g_output.data5[g_index1 - 1].wyzx = vec4(1, 2, 3, 4);" NL
3856 " g_output.data5[g_index1 + index0] = g_input.data5[g_index1].wzyx;" NL
3857 " g_output.data5[1 + g_index1] = g_input.data5[g_index1 + 1].yyyy;" NL
3858 " g_output.data5[5 - g_index1 - 1].wx = g_input.data5[4 - g_index1].xw;" NL "}";
3946 return NL "layout(std430, binding = 0) buffer Input {" NL " mat4 data0;" NL " mat4 data1;" NL "} g_input;" NL
3947 "layout(std430, binding = 1) buffer Output {" NL " mat4 data0;" NL " vec4 data1;" NL "} g_output;" NL
3948 "uniform int g_index2;" NL "void main() {" NL
3949 " g_output.data0 = matrixCompMult(g_input.data0, g_input.data1);" NL
3950 " g_output.data1 = g_input.data0[1] + g_input.data1[g_index2];" NL "}";
3994 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
3995 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
4188 return NL
4189 "layout(std140, binding = 0) uniform InputUBO {" NL " float data0;" NL " float data1[2];" NL
4190 "} g_input_ubo;" NL "layout(std430, binding = 0) buffer InputSSBO {" NL " float data0;" NL
4191 " float data1[2];" NL "} g_input_ssbo;" NL "layout(std140, binding = 1) buffer OutputUBO {" NL
4192 " float data0;" NL " float data1[2];" NL "} g_output_ubo;" NL
4193 "layout(std430, binding = 2) buffer OutputSSBO {" NL " float data0;" NL " float data1[2];" NL
4194 "} g_output_ssbo;" NL "void main() {" NL " g_output_ubo.data0 = g_input_ubo.data0;" NL
4195 " for (int i = 0; i < g_input_ubo.data1.length(); ++i) g_output_ubo.data1[i] = g_input_ubo.data1[i];" NL
4196 " g_output_ssbo.data0 = g_input_ssbo.data0;" NL
4197 " for (int i = 0; i < g_input_ssbo.data1.length(); ++i) g_output_ssbo.data1[i] = g_input_ssbo.data1[i];" NL
4338 return NL
4339 "struct MM {" NL " float mm_a[5];" NL "};" NL "struct TT {" NL " int tt_a;" NL " MM tt_b[4];" NL "};" NL
4340 "layout(std140, binding = 0) uniform InputUBO {" NL " vec4 a;" NL " vec4 b;" NL " float c;" NL
4341 " float d[4];" NL " TT e[3];" NL "} g_input_ubo;" NL "layout(std430, binding = 0) buffer InputSSBO {" NL
4342 " vec4 a;" NL " vec4 b;" NL " float c;" NL " float d[4];" NL " TT e[3];" NL "} g_input_ssbo;" NL
4343 "layout(std140, binding = 1) buffer OutputUBO {" NL " vec4 a;" NL " vec4 b;" NL " float c;" NL
4344 " float d[4];" NL " TT e[3];" NL "} g_output_ubo;" NL "layout(std430, binding = 2) buffer OutputSSBO {" NL
4345 " vec4 a;" NL " vec4 b;" NL " float c;" NL " float d[4];" NL " TT e[3];" NL "} g_output_ssbo;" NL
4346 "uniform int g_index1;" NL "void main() {" NL " int index0 = 0;" NL NL " g_output_ubo.a = g_input_ubo.a;" NL
4347 " g_output_ubo.b = g_input_ubo.b;" NL " g_output_ubo.c = g_input_ubo.c;" NL
4348 " for (int i = 0; i < g_input_ubo.d.length(); ++i) g_output_ubo.d[i] = g_input_ubo.d[i];" NL
4349 " for (int j = 0; j < g_input_ubo.e.length(); ++j) {" NL
4350 " g_output_ubo.e[j].tt_a = g_input_ubo.e[j].tt_a;" NL
4351 " for (int i = 0; i < g_input_ubo.e[j].tt_b.length(); ++i) {" NL
4352 " g_output_ubo.e[j].tt_b[i].mm_a[0] = g_input_ubo.e[j].tt_b[i].mm_a[0];" NL
4353 " g_output_ubo.e[j].tt_b[index0 + i].mm_a[1] = g_input_ubo.e[j].tt_b[i].mm_a[1];" NL
4354 " g_output_ubo.e[j].tt_b[i].mm_a[2] = g_input_ubo.e[j].tt_b[i].mm_a[2 + index0];" NL
4356 "g_index1];" NL " g_output_ubo.e[j].tt_b[i].mm_a[4] = g_input_ubo.e[j].tt_b[i - index0].mm_a[4];" NL
4357 " }" NL " }" NL NL " g_output_ssbo.a = g_input_ssbo.a;" NL " g_output_ssbo.b = g_input_ssbo.b;" NL
4358 " g_output_ssbo.c = g_input_ssbo.c;" NL
4359 " for (int i = 0; i < g_input_ssbo.d.length(); ++i) g_output_ssbo.d[i] = g_input_ssbo.d[i];" NL
4360 " for (int j = 0; j < g_input_ssbo.e.length(); ++j) {" NL
4361 " g_output_ssbo.e[j].tt_a = g_input_ssbo.e[j].tt_a;" NL
4362 " for (int i = 0; i < g_input_ssbo.e[j].tt_b.length(); ++i) {" NL
4363 " g_output_ssbo.e[j + index0].tt_b[i].mm_a[0] = g_input_ssbo.e[j].tt_b[i].mm_a[index0];" NL
4364 " g_output_ssbo.e[j].tt_b[i + index0].mm_a[1] = g_input_ssbo.e[j].tt_b[i].mm_a[g_index1];" NL
4365 " g_output_ssbo.e[j].tt_b[i].mm_a[2] = g_input_ssbo.e[j].tt_b[i].mm_a[1 + g_index1];" NL
4367 "g_index1];" NL " g_output_ssbo.e[j].tt_b[i].mm_a[4] = g_input_ssbo.e[j].tt_b[i].mm_a[4];" NL " }" NL
4368 " }" NL "}";
4416 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
4417 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
4576 return NL "layout(std430, binding = 0) buffer Input {" NL " mat2 m0;" NL " mat2 m1;" NL "} g_input;" NL
4577 "layout(std430, binding = 1) buffer Output {" NL " mat2 m;" NL "} g_output;" NL
4623 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(column_major) mat3x2 m0;" NL
4624 " layout(column_major) mat2x3 m1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
4625 " layout(column_major) mat2 m;" NL "} g_output;" NL
4671 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(row_major) mat3x2 m0;" NL
4672 " layout(row_major) mat2x3 m1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
4673 " layout(row_major) mat2 m;" NL "} g_output;" NL "void main() { g_output.m = g_input.m0 * g_input.m1; }";
4718 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(column_major) mat3x2 m0;" NL
4719 " layout(row_major) mat2x3 m1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
4720 " layout(column_major) mat2 m;" NL "} g_output;" NL
4766 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(column_major) mat3x2 m0;" NL
4767 " layout(row_major) mat2x3 m1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
4768 " layout(row_major) mat2 m;" NL "} g_output;" NL "void main() { g_output.m = g_input.m0 * g_input.m1; }";
4812 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(row_major) mat3x2 m0;" NL
4813 " layout(column_major) mat2x3 m1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
4814 " layout(column_major) mat2 m;" NL "} g_output;" NL
4860 return NL "layout(std430, binding = 0) buffer Input {" NL " layout(row_major) mat3x2 m0;" NL
4861 " layout(column_major) mat2x3 m1;" NL "} g_input;" NL "layout(std430, binding = 1) buffer Output {" NL
4862 " layout(row_major) mat2 m;" NL "} g_output;" NL "void main() { g_output.m = g_input.m0 * g_input.m1; }";
4899 NL "layout(local_size_x = 1) in;" NL "layout(std430, binding = 0) buffer Input {" NL
4900 " readonly writeonly int g_in[];" NL "};" NL "layout(std430, binding = 1) buffer Output {" NL
4901 " int count;" NL "} g_output;" NL "void main() {" NL " g_output.count = g_in.length();" NL "}";
5032 return NL "Everything works as expected.";
5053 const char* const glsl_vs = NL "struct VertexData {" NL " vec2 position;" NL " vec3 color;" NL "};" NL
5054 "layout(binding = 0, std430) buffer Input {" NL " VertexData vertex[4];" NL
5055 "} g_vs_in;" NL "out vec3 StageData_color;" NL "void main() {" NL
5056 " gl_Position = vec4(g_vs_in.vertex[gl_VertexID].position, 0, 1);" NL
5057 " StageData_color = g_vs_in.vertex[gl_VertexID].color;" NL "}";
5058 const char* const glsl_fs = NL "in vec3 StageData_color;" NL "layout(location = 0) out vec4 g_fs_out;" NL
5059 "void main() {" NL " g_fs_out = vec4(StageData_color, 1);" NL "}";
5188 NL "layout(local_size_x = 1) in;" NL "layout(binding = 0, std430) buffer Input {" NL " uint cookie[4];" NL
5189 "} g_in;" NL "layout(binding = 1, std430) buffer Output {" NL " uvec4 digest;" NL "} ;" NL
5190 "void main() {" NL " switch (g_in.cookie[0]+g_in.cookie[1]+g_in.cookie[2]+g_in.cookie[3]) {" NL
5191 " case 0x000000ffu: digest.x = 0xff000000u; break;" NL
5192 " case 0x0000ff00u: digest.y = 0x00ff0000u; break;" NL
5193 " case 0x00ff0000u: digest.z = 0x0000ff00u; break;" NL
5194 " case 0xff000000u: digest.w = 0x000000ffu; break;" NL " }" NL "}";
5303 ss << NL "struct VertexData {" NL " vec2 position;" NL " vec3 color;" NL "};" NL "layout(binding = "
5305 << ", std430) buffer Input {" NL " VertexData vertex[4];" NL "} g_vs_in;" NL "out vec3 StageData_color;" NL
5306 "void main() {" NL " gl_Position = vec4(g_vs_in.vertex[gl_VertexID].position, 0, 1);" NL
5307 " StageData_color = g_vs_in.vertex[gl_VertexID].color;" NL "}";
5325 const char* const glsl_fs = NL "in vec3 StageData_color;" NL "layout(location = 0) out vec4 g_fs_out;" NL
5326 "void main() {" NL " g_fs_out = vec4(StageData_color, 1);" NL "}";
5429 ss << NL "layout(local_size_x = 1) in;" NL "layout(binding = " << binding
5430 << ", std430) buffer Input {" NL " uint cookie[4];" NL "} g_in;" NL
5431 "layout(binding = 0, std430) buffer Output {" NL " uvec4 digest;" NL "} ;" NL "void main() {" NL
5432 " switch (g_in.cookie[0]+g_in.cookie[1]+g_in.cookie[2]+g_in.cookie[3]) {" NL
5433 " case 0x000000ffu: digest.x = 0xff000000u; break;" NL
5434 " case 0x0000ff00u: digest.y = 0x00ff0000u; break;" NL
5435 " case 0x00ff0000u: digest.z = 0x0000ff00u; break;" NL
5436 " case 0xff000000u: digest.w = 0x000000ffu; break;" NL " }" NL "}";
5532 NL "out vec2 position;" NL "out vec3 color;" NL
5533 "vec2 g_quad[4] = vec2[4](vec2(-0.4, -0.4), vec2(0.4, -0.4), vec2(-0.4, 0.4), vec2(0.4, 0.4));" NL
5534 "vec2 g_offset[4] = vec2[4](vec2(-0.5, -0.5), vec2(0.5, -0.5), vec2(-0.5, 0.5), vec2(0.5, 0.5));" NL
5535 "vec3 g_color[4] = vec3[4](vec3(1, 0, 0), vec3(0, 1, 0), vec3(0, 0, 1), vec3(1, 1, 0));" NL
5536 "void main() {" NL " vec2 pos = g_quad[gl_VertexID] + g_offset[gl_InstanceID];" NL
5537 " gl_Position = vec4(pos, 0, 1);" NL " position = pos;" NL " color = g_color[gl_InstanceID];" NL "}";
5539 NL "in vec2 position;" NL "in vec3 color;" NL "layout(location = 0) out vec4 g_fs_out;" NL
5540 "struct FragmentData {" NL " vec2 position;" NL " vec3 color;" NL "};" NL
5541 "layout(std430, binding = 3) buffer Output {" NL " FragmentData g_fragment[6400];" NL "};" NL
5542 "uniform uint g_max_fragment_count;" NL
5543 "layout(binding = 2, offset = 0) uniform atomic_uint g_fragment_counter;" NL "void main() {" NL
5544 " uint fragment_number = atomicCounterIncrement(g_fragment_counter);" NL
5545 " if (fragment_number < g_max_fragment_count) {" NL
5546 " g_fragment[fragment_number].position = position;" NL
5547 " g_fragment[fragment_number].color = color;" NL " }" NL " g_fs_out = vec4(color, 1);" NL "}";
5554 NL "layout(location = 0) in vec4 g_in_position;" NL "layout(location = 1) in vec4 g_in_color;" NL
5555 "out vec3 color;" NL "void main() {" NL " gl_Position = vec4(g_in_position.xy, 0, 1);" NL
5556 "#ifdef GL_ES" NL " gl_PointSize = 1.0f;" NL "#endif" NL " color = g_in_color.rgb;" NL "}";
5557 const char* const glsl_fs1 = NL "in vec3 color;" NL "layout(location = 0) out vec4 g_fs_out;" NL
5558 "void main() {" NL " g_fs_out = vec4(color, 1);" NL "}";
5667 const char* const glsl_cs = NL
5668 "layout(local_size_x = 10, local_size_y = 10) in;" NL "uniform uint g_max_point_count;" NL
5669 "uniform uint g_brick;" NL
5670 "vec3 g_color[5] = vec3[5](vec3(1, 0, 0), vec3(0, 1, 0), vec3(1, 1, 0), vec3(0, 0, 1), vec3(0, 0, 0));" NL
5671 "struct PointData {" NL " vec2 position;" NL " vec3 color;" NL "};" NL
5672 "layout(std430, binding = 3) buffer Output {" NL " PointData g_point[];" NL "};" NL
5673 "layout(binding = 0, offset = 0) uniform atomic_uint g_point_counter;" NL "void main() {" NL
5674 " uint g_offset[4] = uint[4](g_brick, 9u*g_brick, 11u*g_brick, 19u*g_brick);" NL
5675 " uint point_number = atomicCounterIncrement(g_point_counter);" NL
5676 " uint giidx = gl_GlobalInvocationID.x;" NL " uint giidy = gl_GlobalInvocationID.y;" NL
5677 " g_point[point_number].position = vec2(gl_GlobalInvocationID.xy * 2u) / 100.0 - 1.0;" NL
5678 " g_point[point_number].color = g_color[4];" NL " if (point_number < g_max_point_count) {" NL
5679 " if (giidx > g_offset[0] && giidx < g_offset[1] && giidy > g_offset[0] && giidy < g_offset[1]) {" NL
5680 " g_point[point_number].color = g_color[0];" NL " }" NL
5681 " if (giidx > g_offset[2] && giidx < g_offset[3] && giidy > g_offset[0] && giidy < g_offset[1]) {" NL
5682 " g_point[point_number].color = g_color[1];" NL " }" NL
5683 " if (giidx > g_offset[2] && giidx < g_offset[3] && giidy > g_offset[2] && giidy < g_offset[3]) {" NL
5684 " g_point[point_number].color = g_color[2];" NL " }" NL
5685 " if (giidx > g_offset[0] && giidx < g_offset[1] && giidy > g_offset[2] && giidy < g_offset[3]) {" NL
5686 " g_point[point_number].color = g_color[3];" NL " }" NL " }" NL "}";
5694 NL "layout(location = 0) in vec4 g_in_position;" NL "layout(location = 1) in vec4 g_in_color;" NL
5695 "out vec3 color;" NL "void main() {" NL " gl_Position = vec4(g_in_position.xy, 0, 1);" NL
5696 "#ifdef GL_ES" NL " gl_PointSize = 1.0f;" NL "#endif" NL " color = g_in_color.rgb;" NL "}";
5698 const char* const glsl_fs1 = NL "in vec3 color;" NL "layout(location = 0) out vec4 g_fs_out;" NL
5699 "void main() {" NL " g_fs_out = vec4(color, 1);" NL "}";
5793 NL "layout(location = 0) in vec2 g_in_position;" NL "struct Material {" NL " vec3 color;" NL "};" NL
5794 "layout(binding = 0, std430) buffer MaterialBuffer {" NL " Material g_material[4];" NL "};" NL
5795 "layout(binding = 1, std430) buffer MaterialIDBuffer {" NL " uint g_material_id[4];" NL "};" NL
5796 "layout(binding = 2, std430) buffer TransformBuffer {" NL " vec2 translation[4];" NL "} g_transform;" NL
5797 "layout(binding = 3, std430) buffer TransformIDBuffer {" NL " uint g_transform_id[4];" NL "};" NL
5798 "out vec3 color;" NL "void main() {" NL " uint mid = g_material_id[gl_InstanceID];" NL
5799 " Material m = g_material[mid];" NL " uint tid = g_transform_id[gl_InstanceID];" NL
5800 " vec2 t = g_transform.translation[tid];" NL " gl_Position = vec4(g_in_position + t, 0, 1);" NL
5801 " color = m.color;" NL "}";
5802 const char* const glsl_fs = NL "in vec3 color;" NL "layout(location = 0) out vec4 g_fs_out;" NL
5803 "void main() {" NL " g_fs_out = vec4(color, 1);" NL "}";
5928 NL "layout(local_size_x = 2, local_size_y = 2) in;" NL "struct Material {" NL " vec3 color;" NL "};" NL
5929 "layout(binding = 0, std430) buffer MaterialBuffer {" NL " Material g_material[4];" NL "};" NL
5930 "layout(binding = 1, std430) buffer MaterialIDBuffer {" NL " uint g_material_id[4];" NL "};" NL
5931 "layout(binding = 2, std430) buffer TransformBuffer {" NL " vec2 translation[4];" NL "} g_transform;" NL
5932 "layout(binding = 3, std430) buffer TransformIDBuffer {" NL " uint g_transform_id[4];" NL "};" NL
5933 "layout(binding = 4, std430) buffer OutputBuffer {" NL " vec3 color[16];" NL " vec2 pos[16];" NL
5934 "};" NL "vec2 g_in_position[4] = vec2[4](vec2(-0.4f, -0.4f), vec2(0.4f, -0.4f), vec2(-0.4f, 0.4f), "
5935 "vec2(0.4f, 0.4f));" NL "void main() {" NL " uint mid = g_material_id[gl_WorkGroupID.x];" NL
5936 " Material m = g_material[mid];" NL " uint tid = g_transform_id[gl_WorkGroupID.x];" NL
5937 " vec2 t = g_transform.translation[tid];" NL
5938 " pos[gl_LocalInvocationIndex + gl_WorkGroupID.x * gl_WorkGroupSize.x * gl_WorkGroupSize.y] " NL
5939 " = g_in_position[gl_LocalInvocationIndex] + t;" NL " color[gl_LocalInvocationIndex + "
5941 "gl_WorkGroupSize.y] = m.color;" NL "}";
6125 NL "layout(location = 1) in vec2 g_in_position;" NL "layout(binding = 0, std430) buffer Transform {" NL
6126 " vec2 translation;" NL "} g_transform[4];" NL "uniform uint g_transform_id;" NL "void main() {" NL
6127 " vec2 translation = vec2(0);" NL " switch (g_transform_id) {" NL " case 0u:" NL
6128 " translation = g_transform[0].translation;" NL " break;" NL " case 1u:" NL
6129 " translation = g_transform[1].translation;" NL " break;" NL " case 2u:" NL
6130 " translation = g_transform[2].translation;" NL " break;" NL " case 3u:" NL
6131 " translation = g_transform[3].translation;" NL " break;" NL " }" NL
6132 " gl_Position = vec4(g_in_position + translation, 0, 1);" NL "}";
6133 const char* const glsl_fs = NL
6134 "layout(location = 0) out vec4 g_fs_out;" NL "layout(binding = 4, std430) buffer Material {" NL
6135 " vec3 color;" NL "} g_material[4];" NL "uniform int g_material_id;" NL "void main() {" NL
6136 " vec3 color = vec3(0);" NL " switch (g_material_id) {" NL " case 0:" NL
6137 " color = g_material[0].color;" NL " break;" NL " case 1:" NL " color = g_material[1].color;" NL
6138 " break;" NL " case 2:" NL " color = g_material[2].color;" NL " break;" NL " case 3:" NL
6139 " color = g_material[3].color;" NL " break;" NL " }" NL " g_fs_out = vec4(color, 1);" NL "}";
6288 NL "layout(local_size_x = 4) in;" NL "layout(binding = 0, std430) buffer Material {" NL " vec3 color;" NL
6289 "} g_material[4];" NL "layout(binding = 4, std430) buffer OutputBuffer {" NL " vec3 color[4];" NL
6290 "};" NL "uniform int g_material_id;" NL "void main() {" NL
6291 " if (g_material_id == 0) color[gl_LocalInvocationIndex] = g_material[0].color;" NL
6292 " else if (g_material_id == 1) color[gl_LocalInvocationIndex] = g_material[1].color;" NL
6293 " else if (g_material_id == 2) color[gl_LocalInvocationIndex] = g_material[2].color;" NL
6294 " else if (g_material_id == 3) color[gl_LocalInvocationIndex] = g_material[3].color;" NL "}";
6395 const char* const glsl_vs = NL "layout(location = 0) in vec4 g_in_position;" NL "coherent buffer Buffer {" NL
6396 " vec4 in_color;" NL " vec4 out_color;" NL "} g_buffer;" NL "void main() {" NL
6397 " if (gl_VertexID == 0) {" NL " g_buffer.out_color = g_buffer.in_color;" NL
6398 " memoryBarrier();" NL " }" NL " gl_Position = g_in_position;" NL "}";
6400 NL "layout(location = 0) out vec4 g_fs_out;" NL "coherent buffer Buffer {" NL " vec4 in_color;" NL
6401 " vec4 out_color;" NL "} g_buffer;" NL "void main() {" NL " g_fs_out = g_buffer.out_color;" NL "}";
6492 const char* const glsl_cs = NL
6493 "layout(local_size_x = 128) in;" NL "struct s {" NL " int ene;" NL " int due;" NL " int like;" NL
6494 " int fake;" NL "};" NL "layout(std430) coherent buffer Buffer {" NL " s a[128];" NL "} g_buffer;" NL
6495 "void main() {" NL " g_buffer.a[gl_LocalInvocationIndex].due = g_buffer.a[gl_LocalInvocationIndex].ene;" NL
6496 " groupMemoryBarrier();" NL " barrier();" NL " g_buffer.a[(gl_LocalInvocationIndex + 1u) % 128u].like = "
6497 "g_buffer.a[(gl_LocalInvocationIndex + 1u) % 128u].due;" NL " groupMemoryBarrier();" NL " barrier();" NL
6500 "128u].like;" NL "}";
6600 NL "layout(location = 0) in vec4 g_position;" NL "layout(location = 1) in int g_object_id;" NL
6601 "flat out int object_id;" NL "layout(binding = 0) buffer TransformBuffer {" NL
6602 " mat4 g_transform[4];" NL "};" NL "void main() {" NL " mat4 mvp = g_transform[g_object_id];" NL
6603 " gl_Position = mvp * g_position;" NL " object_id = g_object_id;" NL "}";
6605 NL "flat in int object_id;" NL "layout(location = 0) out vec4 g_fs_out;" NL "struct Material {" NL
6606 " vec3 color;" NL "};" NL "layout(binding = 1, std430) buffer MaterialBuffer {" NL
6607 " Material g_material[4];" NL "};" NL "layout(binding = 2, std430) buffer MaterialIDBuffer {" NL
6608 " int g_material_id[4];" NL "};" NL "void main() {" NL " int mid = g_material_id[object_id];" NL
6609 " Material m = g_material[mid];" NL " g_fs_out = vec4(m.color, 1);" NL "}";
6720 const char* const glsl_vs = NL
6721 "layout(std430, binding = 0) coherent buffer Buffer0 {" NL " int g_data0, g_inc0;" NL
6722 " int g_data1, g_inc1;" NL "};" NL "layout(std430, binding = 1) buffer Buffer12 {" NL " int inc, data;" NL
6723 "} g_buffer12[2];" NL "flat out int primitive_id;" NL NL "void Modify(int path) {" NL
6724 " if (path == 0) {" NL " atomicAdd(g_data0, g_inc0);" NL " atomicAdd(g_data1, g_inc0);" NL
6725 " } else if (path == 1) {" NL " atomicAdd(g_data0, - g_inc0);" NL " atomicAdd(g_data1, - g_inc0);" NL
6726 " } else if (path == 2) {" NL " atomicAdd(g_data0, g_inc1);" NL " atomicAdd(g_data1, g_inc1);" NL
6727 " }" NL NL " if (path == 0) {" NL " g_buffer12[0].data += g_buffer12[1].inc;" NL
6728 " } else if (path == 1) {" NL " g_buffer12[1].data += g_buffer12[0].inc;" NL " }" NL "}" NL NL
6729 "void main() {" NL " Modify(gl_VertexID);" NL " primitive_id = gl_VertexID;" NL
6730 " gl_Position = vec4(0, 0, 0, 1);" NL "#ifdef GL_ES" NL " gl_PointSize = 1.0f;" NL "#endif" NL "}";
6732 NL "layout(binding = 3, std430) coherent buffer Buffer3 {" NL " int data;" NL "} g_buffer3;" NL
6733 "layout(std430, binding = 4) coherent buffer Buffer4 {" NL " int data0, inc0;" NL
6734 " int data1, inc1;" NL "} g_buffer4;" NL "layout(std430, binding = 5) buffer Buffer56 {" NL
6735 " int inc, data;" NL "} g_buffer56[2];" NL "flat in int primitive_id;" NL NL
6736 "void ModifyFS(int path) {" NL " if (path == 0) {" NL
6737 " atomicAdd(g_buffer4.data0, g_buffer4.inc0);" NL " atomicAdd(g_buffer4.data1, g_buffer4.inc0);" NL
6738 " } else if (path == 1) {" NL " atomicAdd(g_buffer4.data0, - g_buffer4.inc0);" NL
6739 " atomicAdd(g_buffer4.data1, - g_buffer4.inc0);" NL " } else if (path == 2) {" NL
6740 " atomicAdd(g_buffer4.data0, g_buffer4.inc1);" NL " atomicAdd(g_buffer4.data1, g_buffer4.inc1);" NL
6741 " }" NL NL " if (path == 0) {" NL " g_buffer56[0].data += g_buffer56[1].inc;" NL
6742 " } else if (path == 1) {" NL " g_buffer56[1].data += g_buffer56[0].inc;" NL " }" NL "}" NL
6743 "void main() {" NL " atomicAdd(g_buffer3.data, 1);" NL " ModifyFS(primitive_id);" NL "}";
6965 NL "layout(local_size_x = 1) in;" NL "layout(std430, binding = 0) coherent buffer Buffer0 {" NL
6966 " int g_data0, g_inc0;" NL " int g_data1, g_inc1;" NL "};" NL
6967 "layout(std430, binding = 1) buffer Buffer12 {" NL " int inc, data;" NL "} g_buffer12[2];" NL
6968 "layout(binding = 3, std430) coherent buffer Buffer3 {" NL " int data;" NL "} g_buffer3;" NL
6969 "layout(std430, binding = 4) coherent buffer Buffer4 {" NL " int data0, inc0;" NL
6970 " int data1, inc1;" NL "} g_buffer4;" NL "layout(std430, binding = 5) buffer Buffer56 {" NL
6971 " int inc, data;" NL "} g_buffer56[2];" NL NL "void Modify1(int path) {" NL " if (path == 0) {" NL
6972 " atomicAdd(g_data0, g_inc0);" NL " atomicAdd(g_data1, g_inc0);" NL " } else if (path == 1) {" NL
6973 " atomicAdd(g_data0, - g_inc0);" NL " atomicAdd(g_data1, - g_inc0);" NL
6974 " } else if (path == 2) {" NL " atomicAdd(g_data0, g_inc1);" NL " atomicAdd(g_data1, g_inc1);" NL
6975 " }" NL " if (path == 0) {" NL " g_buffer12[0].data += g_buffer12[1].inc;" NL
6976 " } else if (path == 1) {" NL " g_buffer12[1].data += g_buffer12[0].inc;" NL " }" NL "}" NL NL
6977 "void Modify2(int path) {" NL " if (path == 0) {" NL
6978 " atomicAdd(g_buffer4.data0, g_buffer4.inc0);" NL " atomicAdd(g_buffer4.data1, g_buffer4.inc0);" NL
6979 " } else if (path == 1) {" NL " atomicAdd(g_buffer4.data0, - g_buffer4.inc0);" NL
6980 " atomicAdd(g_buffer4.data1, - g_buffer4.inc0);" NL " } else if (path == 2) {" NL
6981 " atomicAdd(g_buffer4.data0, g_buffer4.inc1);" NL " atomicAdd(g_buffer4.data1, g_buffer4.inc1);" NL
6982 " }" NL " if (path == 0) {" NL " g_buffer56[0].data += g_buffer56[1].inc;" NL
6983 " } else if (path == 1) {" NL " g_buffer56[1].data += g_buffer56[0].inc;" NL " }" NL "}" NL NL
6984 "void main() {" NL " Modify1(int(gl_WorkGroupID.z));" NL " atomicAdd(g_buffer3.data, 1);" NL
6985 " Modify2(int(gl_WorkGroupID.z));" NL "}";
7232 NL "layout(std430, binding = 0) buffer Buffer0 {" NL " readonly int g_i0;" NL " int g_o0;" NL "};" NL
7233 "layout(std430, binding = 1) buffer Buffer1 {" NL " int i0;" NL "} g_buffer1;" NL
7234 "const int g_values[6] = int[](1, 2, 3, 4, 5, 6);" NL "void main() {" NL " g_o0 += g_i0;" NL
7235 " g_o0 <<= 1;" NL " g_o0 = g_i0 > g_o0 ? g_i0 : g_o0;" NL " g_o0 *= g_i0;" NL
7236 " g_o0 = --g_o0 + g_values[g_i0];" NL " g_o0++;" NL " ++g_o0;" NL " g_buffer1.i0 = 0xff2f;" NL
7237 " g_o0 &= g_buffer1.i0;" NL "}";
7238 const char* const glsl_fs = NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
7239 " o_color = vec4(0.0, 1.0, 0.0, 1.0);" NL "}";
7335 NL "layout(local_size_x = 1) in;" NL "layout(std430, binding = 0) buffer Buffer0 {" NL
7336 " readonly int g_i0;" NL " int g_o0;" NL "};" NL "layout(std430, binding = 1) buffer Buffer1 {" NL
7337 " int i0;" NL "} g_buffer1;" NL "const int g_values[6] = int[](1, 2, 3, 4, 5, 6);" NL "void main() {" NL
7338 " g_o0 += g_i0;" NL " g_o0 <<= 1;" NL " g_o0 = g_i0 > g_o0 ? g_i0 : g_o0;" NL " g_o0 *= g_i0;" NL
7339 " g_o0 = --g_o0 + g_values[g_i0];" NL " g_o0++;" NL " ++g_o0;" NL " g_buffer1.i0 = 0xff2f;" NL
7340 " g_o0 &= g_buffer1.i0;" NL "}";
7429 os << NL "void main() {" NL " gl_Position = vec4(0,0,0,1);" NL "#ifdef GL_ES" NL
7430 " gl_PointSize = 1.0f;" NL "#endif";
7434 os << NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
7437 os << NL "}";
7444 NL "layout(std430, binding = 0) readonly buffer Input0 {" NL " uint g_input0[];" NL "};" NL
7445 "layout(std430, binding = 1) readonly buffer Input23 {" NL " float data[];" NL "} g_input23[2];" NL
7446 "layout(std430, binding = 3) buffer Output {" NL " int g_length2;" NL " int g_length[];" NL "};";
7447 std::string expr = NL " g_length[0] = g_input0.length();" NL " g_length[1] = g_input23[0].data.length();" NL
7448 " g_length[2] = g_input23[1].data.length();" NL " g_length2 = g_length.length();";
7451 os << decl << NL "void main() {" NL "#ifdef GL_ES" NL " gl_PointSize = 1.0f;" NL "#endif" NL
7457 os << NL "layout(location = 0) out vec4 o_color;" << decl
7458 << NL "void main() {" NL " o_color = vec4(0.0, 1.0, 0.0, 1.0);" << expr;
7462 os << NL "layout(local_size_x = 1) in;" << decl << NL "void main() {" << expr;
7464 os << NL "}";
7574 os << NL "void main() {" NL " gl_Position = vec4(0,0,0,1);" NL "#ifdef GL_ES" NL
7575 " gl_PointSize = 1.0f;" NL "#endif";
7579 os << NL "layout(location = 0) out vec4 o_color;" NL "void main() {" NL
7582 os << NL "}";
7593 NL "struct S0 {" NL " float f;" NL " int i;" NL " uint ui;" NL " bool b;" NL "};" NL "struct S1 {" NL
7594 " ivec3 iv;" NL " bvec2 bv;" NL " vec4 v;" NL " uvec2 uv;" NL "};" NL "struct S2 {" NL
7595 " mat2x2 m22;" NL " mat4x4 m44;" NL " mat2x3 m23;" NL " mat4x2 m42;" NL " mat3x4 m34;" NL "};" NL
7596 "struct S4 {" NL " float f[1];" NL " int i[2];" NL " uint ui[3];" NL " bool b[4];" NL
7597 " ivec3 iv[5];" NL " bvec2 bv[6];" NL " vec4 v[7];" NL " uvec2 uv[8];" NL "};" NL "struct S5 {" NL
7598 " S0 s0;" NL " S1 s1;" NL " S2 s2;" NL "};" NL "struct S6 {" NL " S4 s4[3];" NL "};";
7606 std::string decl = sd + NL "layout(" + lo + ") buffer;" NL "layout(binding = 0) readonly buffer Input0 {" +
7607 ((other_members) ? ("\n " + e[etype][0] + " pad0;") : "") + NL " " + e[etype][0] +
7608 " g_input0[];" NL "};" NL "layout(binding = 1) readonly buffer Input1 {" +
7609 ((other_members) ? ("\n " + e[etype][1] + " pad1;") : "") + NL " " + e[etype][1] +
7610 " data[];" NL "} g_input1;" NL "layout(binding = 2) readonly buffer Input23 {" +
7611 ((other_members) ? ("\n " + e[etype][2] + " pad2;") : "") + NL " " + e[etype][2] +
7612 " data[];" NL "} g_input23[2];" NL "layout(binding = 4) buffer Output0 {" +
7613 ((other_members) ? ("\n " + e[etype][4] + " pad4;") : "") + NL " " + e[etype][4] +
7614 " data[];" NL "} g_output0;" NL "layout(binding = 5) readonly buffer Input4 {" +
7615 ((other_members) ? ("\n " + e[etype][5] + " pad5;") : "") + NL " " + e[etype][5] +
7616 " data[];" NL "} g_input4;" NL "layout(binding = 6) buffer Output1 {" +
7617 ((other_members) ? ("\n " + e[etype][6] + " pad6;") : "") + NL " " + e[etype][6] +
7618 " data[];" NL "} g_output1;" NL "layout(std430, binding = 7) buffer Output {" NL
7619 " int g_length[];" NL "};";
7621 NL " g_length[0] = g_input0.length();" NL " g_length[1] = g_input1.data.length();" NL
7622 " g_length[2] = g_input23[0].data.length();" NL " g_length[3] = g_input23[1].data.length();" NL
7623 " g_length[4] = g_output0.data.length();" NL " g_length[5] = g_input4.data.length();" NL
7626 NL " g_output0.data[g_output0.data.length()-2] += g_output0.data[g_output0.data.length()-1];" NL
7632 os << decl << NL "void main() {" NL "#ifdef GL_ES" NL " gl_PointSize = 1.0f;" NL "#endif" NL
7638 os << NL "layout(location = 0) out vec4 o_color;" << decl
7639 << NL "void main() {" NL " o_color = vec4(0.0, 1.0, 0.0, 1.0);" << expr;
7643 os << NL "layout(local_size_x = 1) in;" << decl << NL "void main() {" << expr;
7645 os << NL "}";
8151 NL "layout(location = 0) in vec4 g_position;" NL "flat out int instance_id;" NL
8152 "layout(binding = 0, std430) coherent buffer Buffer0 {" NL " mat3x4 g_transform[4];" NL
8153 " mat4x3 g_color;" NL " mat3 g_data0;" NL "};" NL
8154 "layout(binding = 1, std430) readonly buffer Buffer1 {" NL " mat4 color;" NL "} g_buffer1;" NL
8155 "uniform int g_index1;" NL "uniform int g_index2;" NL "void main() {" NL
8156 " gl_Position = vec4(transpose(g_transform[gl_InstanceID]) * g_position, 1);" NL
8157 " g_color[gl_InstanceID] = g_buffer1.color[gl_InstanceID].rgb;" NL
8158 " if (gl_VertexID == 0 && gl_InstanceID == 0) {" NL " g_data0[1][1] = 1.0;" NL
8159 " g_data0[g_index1][g_index2] += 3.0;" NL " }" NL " memoryBarrier();" NL
8160 " instance_id = gl_InstanceID;" NL "}";
8162 NL "flat in int instance_id;" NL "layout(location = 0) out vec4 g_ocolor;" NL
8163 "layout(binding = 0, std430) coherent buffer Buffer0 {" NL " mat3x4 g_transform[4];" NL
8164 " mat4x3 g_color;" NL " mat3 g_data0;" NL "};" NL "uniform int g_index1;" NL "uniform int g_index2;" NL
8165 "void main() {" NL " if (g_data0[g_index1][g_index1] != 1.0) g_ocolor = vec4(0);" NL
8166 " else if (g_data0[g_index1][g_index2] != 3.0) g_ocolor = vec4(0);" NL
8167 " else g_ocolor = vec4(g_color[instance_id], 1);" NL "}";
8263 NL "layout(local_size_x = 1) in;" NL "layout(std430) buffer Buffer {" NL " mat4x3 dst4x3;" NL
8264 " mat4 dst4;" NL " mat4 src4;" NL "} b;" NL "uniform int g_index1;" NL "uniform int g_index2;" NL
8265 "void main() {" NL " b.dst4x3[gl_LocalInvocationIndex] = b.src4[gl_LocalInvocationIndex].rgb;" NL
8266 " b.dst4x3[gl_LocalInvocationIndex + 1u] = b.src4[gl_LocalInvocationIndex + 1u].aar;" NL
8267 " b.dst4[g_index2][g_index1] = 17.0;" NL " b.dst4[g_index2][g_index1] += 6.0;" NL
8268 " b.dst4[3][0] = b.src4[3][0] != 44.0 ? 3.0 : 7.0;" NL " b.dst4[3][1] = b.src4[3][1];" NL "}";
8385 ss << NL "layout(binding = " << binding
8386 << ") buffer Buffer {" NL " int x;" NL "};" NL "void main() {" NL " x = 0;" NL "}";
8393 ss << NL "layout(binding = " << binding
8394 << ") buffer Buffer {" NL " int x;" NL "} g_array[4];" NL "void main() {" NL " g_array[0].x = 0;" NL
8395 " g_array[1].x = 0;" NL " g_array[2].x = 0;" NL " g_array[3].x = 0;" NL "}";
8405 if (!Compile(NL "buffer Buffer { int x = 10; };" NL "void main() {" NL " x = 0;" NL "}"))
8420 if (!Compile(NL "buffer int x;" NL "void main() {" NL " x = 0;" NL "}"))
8424 if (!Compile(NL "buffer Buffer { int y; };" NL "void main() {" NL " y = 0;" NL " buffer int x = 0;" NL "}"))
8428 if (!Compile(NL "buffer Buffer { int y; };" NL "void Modify(buffer int a) {" NL " atomicAdd(a, 1);" NL "}" NL
8429 "void main() {" NL " Modify(y);" NL "}"))
8433 if (!Compile(NL "layout(std430) uniform UBO { int x; };" NL "buffer SSBO { int y; };" NL "void main() {" NL
8434 " y = x;" NL "}"))
8438 if (!Compile(NL "buffer SSBO {" NL " layout(std430) int x;" NL "};" NL "void main() {" NL " x = 0;" NL "}"))
8442 if (!Compile(NL "buffer SSBO {" NL " layout(binding = 1) int x;" NL "};" NL "void main() {" NL " x = 0;" NL
8447 if (!Compile(NL "readonly buffer SSBO {" NL " int x;" NL "};" NL "void main() {" NL " x = 0;" NL "}"))
8451 if (!Compile(NL "buffer SSBO {" NL " int x;" NL "};" NL "writeonly buffer SSBO2 {" NL " int y;" NL "};" NL
8452 "void main() {" NL " x = y;" NL "}"))
8456 if (!Compile(NL "buffer SSBO {" NL " int x;" NL "};" NL "buffer SSBO2 {" NL " writeonly int y;" NL
8457 " readonly int z;" NL "};" NL "void main() {" NL " x = y;" NL " z = 0;" NL "}"))
8461 if (!Compile(NL "buffer SSBO {" NL " int x;" NL "};" NL "readonly buffer SSBO2 {" NL " writeonly int y;" NL
8462 "};" NL "void main() {" NL " x = y;" NL "}"))
8466 if (!Compile(NL "layout(binding = 1) buffer;" //
8467 NL "buffer SSBO {" NL " int x;" NL "};" NL "void main() {" NL " x = 0;" NL "}"))
8471 if (!Compile(NL "buffer coherent Buffer { int x; };" NL "int y;" NL "void main() {" NL " atomicAdd(x, 1);" NL
8473 NL "}"))
8477 NL "buffer b {" NL " vec4 x[10];" NL "};" NL "void main() {" NL " vec4 y = vec4(x);" NL "}"))
8481 NL "layout(std430, binding = 0) buffer Input {" NL " float data0;" NL "} g_input[4];" NL
8482 "layout(std430, binding = 4) buffer Output {" NL " float data0;" NL "} g_output[4];" NL
8483 "void main() {" NL " for (int i = 0; i < 4; ++i) {" NL
8484 " g_output[i].data0 = g_input[i].data0;" NL " }" NL "}"))
8488 NL "layout(binding = 0, std430) buffer Material {" NL " vec3 color;" NL "} g_material[4];" NL
8489 "layout(binding = 4, std430) buffer OutputBuffer {" NL " vec3 color[4];" NL "};" NL
8490 "uniform int g_material_id;" NL "void main() {" NL
8491 " color[gl_LocalInvocationIndex] = vec3(g_material[g_material_id].color);" NL "}"))
8499 const char* const csVer = "#version 310 es" NL "layout(local_size_x = 1) in;";
8534 if (!Link("#version 310 es" NL "buffer Buffer { int x; };" NL "void main() {" NL " x += 2;" NL "}",
8535 "#version 310 es" NL "precision highp float;" NL "buffer Buffer { uint x; };" NL "void main() {" NL
8536 " x += 3u;" NL "}"))
8539 if (!Link("#version 310 es" NL "buffer Buffer { int x; int y; };" NL "void main() {" NL " x += 2;" NL "}",
8540 "#version 310 es" NL "precision highp float;" NL "buffer Buffer { int x; };" NL "void main() {" NL
8541 " x += 3;" NL "}"))
8544 if (!Link("#version 310 es" NL "buffer Buffer { int y; };" NL "void main() {" NL " y += 2;" NL "}",
8545 "#version 310 es" NL "precision highp float;" NL "buffer Buffer { int x; };" NL "void main() {" NL
8546 " x += 3;" NL "}"))
8549 if (!Link("#version 310 es" NL "buffer Buffer { int x[2]; };" NL "void main() {" NL " x[1] += 2;" NL "}",
8550 "#version 310 es" NL "precision highp float;" NL "buffer Buffer { int x[3]; };" NL "void main() {" NL
8551 " x[1] += 3;" NL "}"))