1#version 450 2 3#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable 4#extension GL_EXT_buffer_reference2 : enable 5#extension GL_EXT_scalar_block_layout : enable 6 7layout(buffer_reference, buffer_reference_align = 8) buffer T1 { 8 int x; 9 bool y; 10}; 11layout(buffer_reference, buffer_reference_align = 64) buffer T2 { 12 int x; 13}; 14 15const int s = int(uint64_t(T1(T2(uint64_t(3))))); 16int x[s]; 17const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11))); 18 19 20#define sizeof(T) (uint64_t(T(uint64_t(0))+1)) 21 22const uint64_t s2 = sizeof(T1); 23uint buf[int(s2)]; 24 25 26void main() 27{ 28 T1 a = T1(uint64_t(4)), b = T1(uint64_t(5)); 29 T1 c = true ? a : b; 30 T1 d = (a,b); 31 T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7)); 32 T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9)); 33 34 f[3].x = 1; 35 (f+5).x = 1; 36 37 T1 arr[2] = {a, f}; 38 arr[1][7].x = 1; 39 int i; 40 arr[i][i].x = 1; 41 // Since we don't distinguish between "pointer" and "reference" type, 42 // a reference type can have [] applied to it repeatedly and it has 43 // the effect of adding up the indices. 44 arr[i][i][i][i][i][i][i].x = 1; 45 46 T1 j; 47 j = j+1; 48 j = j-2; 49 j += 3; 50 j -= 4; 51 j = 5+j; 52 T1 k = j + 6; 53 int64_t x = k - j; 54 uint64_t y = sizeof(T1); 55 k = k + (-1); 56 57 T2 m; 58 m = m+1; 59} 60