diff options
Diffstat (limited to 'tests/glsl')
| -rw-r--r-- | tests/glsl/ssboMemberMemoryQualifier.slang | 54 | ||||
| -rw-r--r-- | tests/glsl/ssboMemberMemoryQualifierReadError.slang | 17 | ||||
| -rw-r--r-- | tests/glsl/ssboMemberMemoryQualifierWriteError.slang | 24 | ||||
| -rw-r--r-- | tests/glsl/ssboMemoryQualifier.slang | 39 | ||||
| -rw-r--r-- | tests/glsl/ssboMemoryQualifierReadError.slang | 27 | ||||
| -rw-r--r-- | tests/glsl/ssboMemoryQualifierWriteError.slang | 29 | ||||
| -rw-r--r-- | tests/glsl/ssboStructInsideStructMemoryQualifierError.slang | 23 |
7 files changed, 213 insertions, 0 deletions
diff --git a/tests/glsl/ssboMemberMemoryQualifier.slang b/tests/glsl/ssboMemberMemoryQualifier.slang new file mode 100644 index 000000000..78d029039 --- /dev/null +++ b/tests/glsl/ssboMemberMemoryQualifier.slang @@ -0,0 +1,54 @@ +//TEST:SIMPLE(filecheck=CHECK-GLSL): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK-SPV): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +// due to implementation limitations (slang-check-expr.cpp, `void visitMemberExpr()`) we are unable to +// implement and use .length with glsl vectors to test `readonly writeonly` +//#define TEST_whenVectorLengthIsImplemented + +volatile buffer Block1 +{ + restrict uint data1; + readonly uint data2; + readonly writeonly uint data3; + writeonly uint data4; + coherent uint data5; + volatile uint data6; +} inputBuffer1; + +coherent buffer Block2 { + readonly vec4 member1; + vec4 member2; +}inputBuffer2; + +buffer Block3 { + coherent readonly vec4 member1; + coherent vec4 member2; +}inputBuffer3; + +buffer Block4 { + struct structTmp + { + int val; + }; + readonly structTmp myStruct; + coherent readonly vec4 member1; + coherent vec4 member2; + readonly writeonly vec3 member3; +}inputBuffer4; + +// CHECK-GLSL: main +// CHECK-SPV: OpEntryPoint +layout(local_size_x = 1) in; +void computeMain() +{ + int v = inputBuffer1.data1; + v = inputBuffer1.data2; + inputBuffer1.data4 = 1; + inputBuffer1.data5 = 1; + inputBuffer1.data6 = 1; + inputBuffer2.member2 = inputBuffer2.member1; + inputBuffer3.member2 = inputBuffer3.member1; +#ifdef TEST_whenVectorLengthIsImplemented + v = inputBuffer4.member3.length(); +#endif +}
\ No newline at end of file diff --git a/tests/glsl/ssboMemberMemoryQualifierReadError.slang b/tests/glsl/ssboMemberMemoryQualifierReadError.slang new file mode 100644 index 000000000..fe2ea1943 --- /dev/null +++ b/tests/glsl/ssboMemberMemoryQualifierReadError.slang @@ -0,0 +1,17 @@ +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +volatile buffer MyBlockName1 +{ + readonly uint data2; + readonly writeonly uint data3; +} inputBuffer1; + +layout(local_size_x = 1) in; +void computeMain() +{ +//CHECK: error 30011 + inputBuffer1.data2 = 1; +//CHECK: error 30011 + inputBuffer1.data3 = 1; +}
\ No newline at end of file diff --git a/tests/glsl/ssboMemberMemoryQualifierWriteError.slang b/tests/glsl/ssboMemberMemoryQualifierWriteError.slang new file mode 100644 index 000000000..f4423be25 --- /dev/null +++ b/tests/glsl/ssboMemberMemoryQualifierWriteError.slang @@ -0,0 +1,24 @@ +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +volatile buffer MyBlockName1 +{ + writeonly uint data2; + readonly writeonly uint data3; +} inputBuffer1; + +buffer MyBlockName2 +{ + uint data; +} outputBuffer; + +layout(local_size_x = 1) in; +void computeMain() +{ +//CHECK: error 30101 + int a = inputBuffer1.data2; +//CHECK: error 30101 + int b = inputBuffer1.data3; +//CHECK: error 30101 + outputBuffer.data = inputBuffer1.data2; +}
\ No newline at end of file diff --git a/tests/glsl/ssboMemoryQualifier.slang b/tests/glsl/ssboMemoryQualifier.slang new file mode 100644 index 000000000..67da12e9e --- /dev/null +++ b/tests/glsl/ssboMemoryQualifier.slang @@ -0,0 +1,39 @@ +//TEST:SIMPLE(filecheck=CHECK-GLSL): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK-SPV): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +volatile buffer MyBlockName1 +{ + uint data1; +} inputBuffer1; +restrict buffer MyBlockName2 +{ + uint data1; +} inputBuffer2; +readonly writeonly buffer MyBlockName3 +{ + uint data1; +} inputBuffer3; +writeonly buffer MyBlockName4 +{ + uint data1; +} inputBuffer4; +readonly buffer MyBlockName5 +{ + uint data1; +} inputBuffer5; +coherent buffer MyBlockName6 +{ + uint data1; +} inputBuffer6; + +// CHECK-GLSL: main +// CHECK-SPV: OpEntryPoint +layout(local_size_x = 1) in; +void computeMain() +{ + inputBuffer1.data1 = 1; + inputBuffer2.data1 = 1; + inputBuffer4.data1 = 1; + int v = inputBuffer5.data1; + inputBuffer6.data1 = 1; +}
\ No newline at end of file diff --git a/tests/glsl/ssboMemoryQualifierReadError.slang b/tests/glsl/ssboMemoryQualifierReadError.slang new file mode 100644 index 000000000..cdd47d5b2 --- /dev/null +++ b/tests/glsl/ssboMemoryQualifierReadError.slang @@ -0,0 +1,27 @@ +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +readonly writeonly buffer MyBlockName3 +{ + uint data1; +} inputBuffer1; + +readonly buffer MyBlockName5 +{ + uint data1; +} inputBuffer2; + +buffer dontOptimizeOutBlock +{ + uint data1; + uint data2; +} optimizeBlock; + +layout(local_size_x = 1) in; +void computeMain() +{ +//CHECK: error 30011 + inputBuffer1.data1 = optimizeBlock.data1; +//CHECK: error 30011 + inputBuffer2.data1 = optimizeBlock.data2; +}
\ No newline at end of file diff --git a/tests/glsl/ssboMemoryQualifierWriteError.slang b/tests/glsl/ssboMemoryQualifierWriteError.slang new file mode 100644 index 000000000..636641b3f --- /dev/null +++ b/tests/glsl/ssboMemoryQualifierWriteError.slang @@ -0,0 +1,29 @@ +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +readonly writeonly buffer MyBlockName3 +{ + uint data1; +} inputBuffer1; + +writeonly buffer MyBlockName4 +{ + uint data1; +} inputBuffer2; + +buffer dontOptimizeOutBlock +{ + uint data1; + uint data2; +} optimizeBlock; + +layout(local_size_x = 1) in; +void computeMain() +{ +//CHECK: error 30101 + optimizeBlock.data1 = inputBuffer1.data1; +//CHECK: error 30101 + optimizeBlock.data2 = inputBuffer2.data1; +//CHECK: error 30101 + int a = inputBuffer2.data1; +}
\ No newline at end of file diff --git a/tests/glsl/ssboStructInsideStructMemoryQualifierError.slang b/tests/glsl/ssboStructInsideStructMemoryQualifierError.slang new file mode 100644 index 000000000..c5376b4a8 --- /dev/null +++ b/tests/glsl/ssboStructInsideStructMemoryQualifierError.slang @@ -0,0 +1,23 @@ +//TEST:SIMPLE(filecheck=CHECK-GLSL): -stage compute -entry computeMain -allow-glsl -target glsl +//TEST:SIMPLE(filecheck=CHECK-SPV): -stage compute -entry computeMain -allow-glsl -target spirv -emit-spirv-directly + +// This code should error since memory qualifiers are only allowed inside: +// Shader storage blocks, variables declared within shader storage blocks +// and variables declared as image types. Named structs inside a Interface +// block violates these rules +// CHECK-GLSL: error +// CHECK-SPV: error +buffer Block4 { + struct StructTmp + { + readonly int val; + }; + readonly structTmp myStruct; + coherent readonly vec4 member1; + coherent vec4 member2; +}inputBuffer4; + +layout(local_size_x = 1) in; +void computeMain() +{ +}
\ No newline at end of file |
