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 -profile cs_6_2 -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 -profile cs_6_2 -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//TEST_INPUT:ubuffer(stride=4, count=17):out,name=outputBuffer 8RWStructuredBuffer<float> outputBuffer; 9 10//TEST_INPUT:set Constants.v0={1.0,2.0,3.0} 11//TEST_INPUT:set Constants.v1=4.0 12//TEST_INPUT:set Constants.v2=5.0 13//TEST_INPUT:set Constants.v3[0]={6.0,7.0,8.0} 14//TEST_INPUT:set Constants.v3[1]={9.0,10.0,11.0} 15//TEST_INPUT:set Constants.v4=12.0 16//TEST_INPUT:set Constants.v5=13.0 17//TEST_INPUT:set Constants.v6[0]={14.0,15.0,16.0} 18//TEST_INPUT:set Constants.v7=17.0 19 20// Checks cbuffer packing rule cases involving 3-element vectors. 21// HLSL aligns at the element size, while GLSL std140 and std430 22// align to the size of a 4-element vector of the element type. 23// Checks cases that are compatible with std140 and std430. 24 25cbuffer Constants 26{ 27 // float v1 should be packed in with float3 v0 28 float3 v0; 29 float v1; 30 31 // float3[2] v3 should be aligned to next 16 byte boundary, 32 // and not packed in with float v2. 33 float v2; 34 float3 v3[2]; 35 36 // float v4 should be packed in with last float3 from v3. 37 float v4; 38 39 // float3[1] v6 should be aligned to next 16 byte boundary 40 // and not packed in with float v5. 41 float v5; 42 float3 v6[1]; 43 44 // float v7 should be packed in with float3 from v6. 45 float v7; 46}; 47 48// For spirv, check that the offsets are correct. 49// SPIRV: OpMemberDecorate {{.*}} 0 Offset 0 50// SPIRV: OpMemberDecorate {{.*}} 1 Offset 12 51// SPIRV: OpMemberDecorate {{.*}} 2 Offset 16 52// SPIRV: OpMemberDecorate {{.*}} 3 Offset 32 53// SPIRV: OpMemberDecorate {{.*}} 4 Offset 60 54// SPIRV: OpMemberDecorate {{.*}} 5 Offset 64 55// SPIRV: OpMemberDecorate {{.*}} 6 Offset 80 56// SPIRV: OpMemberDecorate {{.*}} 7 Offset 92 57 58// REFLECT: "name": "v0", 59// REFLECT: "offset": 0 60// REFLECT: "name": "v1", 61// REFLECT: "offset": 12 62// REFLECT: "name": "v2", 63// REFLECT: "offset": 16 64// REFLECT: "name": "v3", 65// REFLECT: "offset": 32 66// REFLECT: "name": "v4", 67// REFLECT: "offset": 60 68// REFLECT: "name": "v5", 69// REFLECT: "offset": 64 70// REFLECT: "name": "v6", 71// REFLECT: "offset": 80 72// REFLECT: "name": "v7", 73// REFLECT: "offset": 92 74 75[numthreads(1, 1, 1)] 76void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 77{ 78 int i = 0; 79 outputBuffer[i++] = v0.x; 80 outputBuffer[i++] = v0.y; 81 outputBuffer[i++] = v0.z; 82 outputBuffer[i++] = v1; 83 outputBuffer[i++] = v2; 84 outputBuffer[i++] = v3[0].x; 85 outputBuffer[i++] = v3[0].y; 86 outputBuffer[i++] = v3[0].z; 87 outputBuffer[i++] = v3[1].x; 88 outputBuffer[i++] = v3[1].y; 89 outputBuffer[i++] = v3[1].z; 90 outputBuffer[i++] = v4; 91 outputBuffer[i++] = v5; 92 outputBuffer[i++] = v6[0].x; 93 outputBuffer[i++] = v6[0].y; 94 outputBuffer[i++] = v6[0].z; 95 outputBuffer[i++] = v7; 96 97 // BUFFER: 1 98 // BUFFER-NEXT: 2 99 // BUFFER-NEXT: 3 100 // BUFFER-NEXT: 4 101 // BUFFER-NEXT: 5 102 // BUFFER-NEXT: 6 103 // BUFFER-NEXT: 7 104 // BUFFER-NEXT: 8 105 // BUFFER-NEXT: 9 106 // BUFFER-NEXT: 10 107 // BUFFER-NEXT: 11 108 // BUFFER-NEXT: 12 109 // BUFFER-NEXT: 13 110 // BUFFER-NEXT: 14 111 // BUFFER-NEXT: 15 112 // BUFFER-NEXT: 16 113 // BUFFER-NEXT: 17 114 115} 116