yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f02b08490
master
1//TEST:SIMPLE(filecheck=SPIRV): -target spirv -emit-spirv-directly -profile cs_6_2 -entry computeMain -line-directive-mode none -fvk-use-dx-layout 2//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUFFER):-slang -compute -dx12 -Xslang... -Xdxc -fvk-use-dx-layout -Xdxc -enable-16bit-types -X. -output-using-type 3//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUFFER):-slang -compute -vk -emit-spirv-directly -Xslang... -fvk-use-dx-layout -X. -output-using-type 4//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUFFER):-cuda -compute -output-using-type 5//TEST:REFLECTION(filecheck=REFLECT):-stage compute -entry computeMain -target spirv -profile cs_6_2 -no-codegen -line-directive-mode none -fvk-use-dx-layout 6 7// dxc: -T cs_6_2 -E computeMain -spirv -fvk-use-dx-layout -enable-16bit-types 8 9//TEST_INPUT:ubuffer(stride=4, count=24):out,name=outputBuffer 10RWStructuredBuffer<float> outputBuffer; 11 12//TEST_INPUT:set Constants.v0=1.0 13//TEST_INPUT:set Constants.v1={2.0,3.0,4.0} 14//TEST_INPUT:set Constants.v2=0x4500 15//TEST_INPUT:set Constants.v3={0x4600,0x4700,0x4800} 16//TEST_INPUT:set Constants.v4=0x4880 17//TEST_INPUT:set Constants.v5={0x4900,0x4980,0x4a00} 18//TEST_INPUT:set Constants.v6=0x4a80 19//TEST_INPUT:set Constants.v7={0x4b00,0x4b80,0x4c00,0x4c40} 20//TEST_INPUT:set Constants.v8={0x4c80,0x4cc0,0x4d00} 21//TEST_INPUT:set Constants.v9=0x4d40 22//TEST_INPUT:set Constants.v10={22.0,23.0,24.0} 23 24 25// Checks cbuffer packing rule cases involving 3-element vectors. 26// HLSL aligns at the element size, while GLSL std140 and std430 27// align to the size of a 4-element vector of the element type. 28// Checks cases that are not compatible with std140 and std430. 29 30cbuffer Constants 31{ 32 // float3 v1 should be packed in with float v0. 33 float v0; 34 float3 v1; 35 36 // v2,v3,v4,v5 should all be packed together 37 float16_t v2; 38 vector<float16_t, 3> v3; 39 float16_t v4; 40 vector<float16_t, 3> v5; 41 42 float16_t v6; 43 vector<float16_t, 4> v7; 44 vector<float16_t, 3> v8; 45 46 // There should be a 2-byte gap between v4 and v5. 47 float16_t v9; 48 float3 v10; 49}; 50 51// SPIRV: OpMemberDecorate {{.*}} 0 Offset 0 52// SPIRV: OpMemberDecorate {{.*}} 1 Offset 4 53// SPIRV: OpMemberDecorate {{.*}} 2 Offset 16 54// SPIRV: OpMemberDecorate {{.*}} 3 Offset 18 55// SPIRV: OpMemberDecorate {{.*}} 4 Offset 24 56// SPIRV: OpMemberDecorate {{.*}} 5 Offset 26 57// SPIRV: OpMemberDecorate {{.*}} 6 Offset 32 58// SPIRV: OpMemberDecorate {{.*}} 7 Offset 34 59// SPIRV: OpMemberDecorate {{.*}} 8 Offset 42 60// SPIRV: OpMemberDecorate {{.*}} 9 Offset 48 61// SPIRV: OpMemberDecorate {{.*}} 10 Offset 52 62 63// REFLECT: "name": "v0", 64// REFLECT: "offset": 0 65// REFLECT: "name": "v1", 66// REFLECT: "offset": 4 67// REFLECT: "name": "v2", 68// REFLECT: "offset": 16 69// REFLECT: "name": "v3", 70// REFLECT: "offset": 18 71// REFLECT: "name": "v4", 72// REFLECT: "offset": 24 73// REFLECT: "name": "v5", 74// REFLECT: "offset": 26 75// REFLECT: "name": "v6", 76// REFLECT: "offset": 32 77// REFLECT: "name": "v7", 78// REFLECT: "offset": 34 79// REFLECT: "name": "v8", 80// REFLECT: "offset": 42 81// REFLECT: "name": "v9", 82// REFLECT: "offset": 48 83// REFLECT: "name": "v10", 84// REFLECT: "offset": 52 85 86[numthreads(1, 1, 1)] 87void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 88{ 89 int i = 0; 90 outputBuffer[i++] = v0; 91 outputBuffer[i++] = v1.x; 92 outputBuffer[i++] = v1.y; 93 outputBuffer[i++] = v1.z; 94 outputBuffer[i++] = v2; 95 outputBuffer[i++] = v3.x; 96 outputBuffer[i++] = v3.y; 97 outputBuffer[i++] = v3.z; 98 outputBuffer[i++] = v4; 99 outputBuffer[i++] = v5.x; 100 outputBuffer[i++] = v5.y; 101 outputBuffer[i++] = v5.z; 102 outputBuffer[i++] = v6; 103 outputBuffer[i++] = v7.x; 104 outputBuffer[i++] = v7.y; 105 outputBuffer[i++] = v7.z; 106 outputBuffer[i++] = v7.w; 107 outputBuffer[i++] = v8.x; 108 outputBuffer[i++] = v8.y; 109 outputBuffer[i++] = v8.z; 110 outputBuffer[i++] = v9; 111 outputBuffer[i++] = v10.x; 112 outputBuffer[i++] = v10.y; 113 outputBuffer[i++] = v10.z; 114 115 // BUFFER: 1 116 // BUFFER-NEXT: 2 117 // BUFFER-NEXT: 3 118 // BUFFER-NEXT: 4 119 // BUFFER-NEXT: 5 120 // BUFFER-NEXT: 6 121 // BUFFER-NEXT: 7 122 // BUFFER-NEXT: 8 123 // BUFFER-NEXT: 9 124 // BUFFER-NEXT: 10 125 // BUFFER-NEXT: 11 126 // BUFFER-NEXT: 12 127 // BUFFER-NEXT: 13 128 // BUFFER-NEXT: 14 129 // BUFFER-NEXT: 15 130 // BUFFER-NEXT: 16 131 // BUFFER-NEXT: 17 132 // BUFFER-NEXT: 18 133 // BUFFER-NEXT: 19 134 // BUFFER-NEXT: 20 135 // BUFFER-NEXT: 21 136 // BUFFER-NEXT: 22 137 // BUFFER-NEXT: 23 138 // BUFFER-NEXT: 24 139}