yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Julius IkkalaIntroduce CDataLayout & -fvk-use-c-layout (#8136)35f8e092f

master
1.2 KiB57 linesraw
1//TEST:SIMPLE(filecheck=SPIRV): -stage closesthit -entry chit -target spirv -fvk-use-c-layout
2struct RayPayload
3{
4    float3 color;
5};
6
7struct A {
8    int64_t a1;
9    int32_t a2;
10};
11
12struct B {
13    A a;
14    uint32_t b;
15};
16
17struct Push {
18    B *p;
19};
20
21[[vk::push_constant]] Push push;
22
23struct C {
24    int i;
25    A a;
26};
27
28struct D {
29    C c;
30    int j;
31};
32
33[[vk::shader_record]]
34cbuffer ShaderRecord
35{
36    D d;
37}
38
39[[shader("closesthit")]]
40void chit(inout RayPayload payload : SV_RayPayload, in float2 barys_yz : SV_IntersectionAttributes) {
41    let barys = float3(1.0 - barys_yz.x - barys_yz.y, barys_yz);
42    payload.color = barys;
43
44    push.p->b = d.j + d.c.i;
45}
46
47// SPIRV: OpMemberDecorate %A_c 0 Offset 0
48// SPIRV: OpMemberDecorate %A_c 1 Offset 8
49// SPIRV: OpMemberDecorate %C_c 0 Offset 0
50// SPIRV: OpMemberDecorate %C_c 1 Offset 8
51// SPIRV: OpMemberDecorate %D_c 0 Offset 0
52// SPIRV: OpMemberDecorate %D_c 1 Offset 24
53// SPIRV: OpMemberDecorate %B_c 0 Offset 0
54// SPIRV: OpMemberDecorate %B_c 1 Offset 16
55
56// SPIRV: %_ptr_PushConstant_Push_c = OpTypePointer PushConstant %Push_c
57// SPIRV: %_ptr_ShaderRecordBufferKHR_SLANG_ParameterGroup_ShaderRecord_c = OpTypePointer ShaderRecordBufferKHR %SLANG_ParameterGroup_ShaderRecord_c