yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
e0de98e9a
master
1//TEST:SIMPLE(filecheck=CHECK_GLSL): -stage compute -entry computeMain -allow-glsl -target glsl 2//TEST:SIMPLE(filecheck=CHECK_SPV): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly 3 4// due to implementation limitations (slang-check-expr.cpp, `void visitMemberExpr()`) we are unable to 5// implement and use .length with glsl vectors to test `readonly writeonly` 6//#define TEST_whenVectorLengthIsImplemented 7 8// CHECK_SPV: OpEntryPoint 9 10//CHECK_GLSL: restrict 11//CHECK_GLSL: readonly 12//CHECK_GLSL: {{(writeonly|readonly)}} {{(writeonly|readonly)}} 13//CHECK_GLSL: writeonly 14//CHECK_GLSL: coherent 15//CHECK_GLSL: volatile 16//CHECK_SPV: OpMemberDecorate %{{.*}} 0 Restrict 17//CHECK_SPV: OpMemberDecorate %{{.*}} 1 NonWritable 18//CHECK_SPV: OpMemberDecorate %{{.*}} 2 {{(NonWritable|NonReadable)}} 19//CHECK_SPV: OpMemberDecorate %{{.*}} 2 {{(NonWritable|NonReadable)}} 20//CHECK_SPV: OpMemberDecorate %{{.*}} 3 NonReadable 21//CHECK_SPV: OpMemberDecorate %{{.*}} 4 Coherent 22//CHECK_SPV: OpMemberDecorate %{{.*}} 5 Volatile 23//CHECK_SPV: OpDecorate %{{.*}} {{(Restrict|Volatile)}} 24restrict volatile buffer Block1 25{ 26 restrict uint data1; 27 readonly uint data2; 28 readonly writeonly uint data3; 29 writeonly uint data4; 30 coherent uint data5; 31 volatile uint data6; 32} inputBuffer1; 33 34//CHECK_GLSL: coherent 35//CHECK_GLSL: readonly 36//CHECK_SPV: OpMemberDecorate %{{.*}} 0 NonWritable 37//CHECK_SPV: OpDecorate %{{.*}} Coherent 38coherent buffer Block2 { 39 readonly vec4 member1; 40 vec4 member2; 41}inputBuffer2; 42 43//CHECK_GLSL: {{(coherent|readonly)}} {{(coherent|readonly)}} 44//CHECK_GLSL: coherent 45//CHECK_SPV: OpMemberDecorate %{{.*}} 0 {{(Coherent|NonWritable)}} 46//CHECK_SPV: OpMemberDecorate %{{.*}} 0 {{(Coherent|NonWritable)}} 47//CHECK_SPV: OpMemberDecorate %{{.*}} 1 Coherent 48//CHECK_SPV: OpDecorate %{{.*}} 49buffer Block3 { 50 coherent readonly vec4 member1; 51 coherent vec4 member2; 52}inputBuffer3; 53 54//CHECK_GLSL: {{(coherent|readonly)}} {{(coherent|readonly)}} 55//CHECK_GLSL: coherent 56//CHECK_GLSL: {{(volatile|writeonly)}} {{(volatile|writeonly)}} 57//CHECK_GLSL: readonly 58//CHECK_SPV: OpMemberDecorate %{{.*}} 0 {{(Coherent|NonWritable)}} 59//CHECK_SPV: OpMemberDecorate %{{.*}} 0 {{(Coherent|NonWritable)}} 60//CHECK_SPV: OpMemberDecorate %{{.*}} 1 Coherent 61//CHECK_SPV: OpMemberDecorate %{{.*}} 2 {{(NonReadable|Volatile)}} 62//CHECK_SPV: OpMemberDecorate %{{.*}} 2 {{(NonReadable|Volatile)}} 63//CHECK_SPV: OpMemberDecorate %{{.*}} 3 NonWritable 64buffer Block4 { 65 struct structTmp 66 { 67 int val; 68 }; 69 coherent readonly int member1; 70 coherent int member2; 71 volatile writeonly int member3; 72 readonly structTmp member4; 73}inputBuffer4; 74 75// CHECK_GLSL: main 76layout(local_size_x = 1) in; 77void computeMain() 78{ 79 int v = inputBuffer1.data1; 80 v += inputBuffer1.data2; 81 inputBuffer1.data4 = 1; 82 inputBuffer1.data5 = 1; 83 inputBuffer1.data6 = 1; 84 inputBuffer2.member2 = inputBuffer2.member1; 85 inputBuffer3.member2 = inputBuffer3.member1; 86 v += inputBuffer4.member1; 87 v += inputBuffer4.member2; 88 inputBuffer4.member3 = v; 89 v += inputBuffer4.member4.val; 90#ifdef TEST_whenVectorLengthIsImplemented 91 v += inputBuffer4.member3.length(); 92#endif 93 // ensure code is not optimized out 94 inputBuffer1.data4 = v; 95}