yum-mirror/slang

Making it easier to work with shaders

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

Yong HeCompile append and consume structured buffers to glsl. (#3142)bd6dbaf7c

master
4.5 KiB176 linesraw
1#version 460
2#extension GL_EXT_ray_tracing : require
3#extension GL_EXT_ray_query : require
4layout(row_major) uniform;
5layout(row_major) buffer;
6struct SLANG_ParameterGroup_C_0
7{
8    vec3 origin_0;
9    float tMin_0;
10    vec3 direction_0;
11    float tMax_0;
12    uint rayFlags_0;
13    uint instanceMask_0;
14    uint shouldStopAtFirstHit_0;
15};
16
17layout(binding = 2)
18layout(std140) uniform _S1
19{
20    vec3 origin_0;
21    float tMin_0;
22    vec3 direction_0;
23    float tMax_0;
24    uint rayFlags_0;
25    uint instanceMask_0;
26    uint shouldStopAtFirstHit_0;
27}C_0;
28layout(binding = 0)
29uniform accelerationStructureEXT myAccelerationStructure_0;
30
31layout(std430, binding = 1) buffer StructuredBuffer_int_t_0 {
32    int _data[];
33} resultBuffer_0;
34struct MyProceduralHitAttrs_0
35{
36    int value_0;
37};
38
39bool myProceduralIntersection_0(inout float tHit_0, inout MyProceduralHitAttrs_0 hitAttrs_0)
40{
41    return true;
42}
43
44struct MyRayPayload_0
45{
46    int value_1;
47};
48
49bool myProceduralAnyHit_0(inout MyRayPayload_0 payload_0)
50{
51    return true;
52}
53
54bool myTriangleAnyHit_0(inout MyRayPayload_0 payload_1)
55{
56    return true;
57}
58
59void myTriangleClosestHit_0(inout MyRayPayload_0 payload_2)
60{
61    payload_2.value_1 = 1;
62    return;
63}
64
65void myProceduralClosestHit_0(inout MyRayPayload_0 payload_3, MyProceduralHitAttrs_0 attrs_0)
66{
67    payload_3.value_1 = attrs_0.value_0;
68    return;
69}
70
71void myMiss_0(inout MyRayPayload_0 payload_4)
72{
73    payload_4.value_1 = 0;
74    return;
75}
76
77layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
78void main()
79{
80    uint index_0 = gl_GlobalInvocationID.x;
81    rayQueryEXT query_0;
82    MyRayPayload_0 payload_5;
83    payload_5.value_1 = -1;
84    rayQueryInitializeEXT((query_0), (myAccelerationStructure_0), (C_0.rayFlags_0 | 512U), (C_0.instanceMask_0), (C_0.origin_0), (C_0.tMin_0), (C_0.direction_0), (C_0.tMax_0));
85    MyProceduralHitAttrs_0 committedProceduralAttrs_0;
86    for(;;)
87    {
88        bool _S2 = rayQueryProceedEXT(query_0);
89        if(!_S2)
90        {
91            break;
92        }
93        uint _S3 = (rayQueryGetIntersectionTypeEXT((query_0), false));
94        MyProceduralHitAttrs_0 committedProceduralAttrs_1;
95        switch(_S3)
96        {
97        case 1U:
98            {
99                MyProceduralHitAttrs_0 candidateProceduralAttrs_0;
100                candidateProceduralAttrs_0.value_0 = 0;
101                float tHit_1 = 0.0;
102                bool _S4 = myProceduralIntersection_0(tHit_1, candidateProceduralAttrs_0);
103                if(_S4)
104                {
105                    bool _S5 = myProceduralAnyHit_0(payload_5);
106                    if(_S5)
107                    {
108                        rayQueryGenerateIntersectionEXT(query_0, tHit_1);
109                        MyProceduralHitAttrs_0 _S6 = candidateProceduralAttrs_0;
110                        if(C_0.shouldStopAtFirstHit_0 != 0U)
111                        {
112                            rayQueryTerminateEXT(query_0);
113                        }
114                        committedProceduralAttrs_1 = _S6;
115                    }
116                    else
117                    {
118                        committedProceduralAttrs_1 = committedProceduralAttrs_0;
119                    }
120                }
121                else
122                {
123                    committedProceduralAttrs_1 = committedProceduralAttrs_0;
124                }
125                break;
126            }
127        case 0U:
128            {
129                bool _S7 = myTriangleAnyHit_0(payload_5);
130                if(_S7)
131                {
132                    rayQueryConfirmIntersectionEXT(query_0);
133                    if(C_0.shouldStopAtFirstHit_0 != 0U)
134                    {
135                        rayQueryTerminateEXT(query_0);
136                    }
137                }
138                committedProceduralAttrs_1 = committedProceduralAttrs_0;
139                break;
140            }
141        default:
142            {
143                committedProceduralAttrs_1 = committedProceduralAttrs_0;
144                break;
145            }
146        }
147        committedProceduralAttrs_0 = committedProceduralAttrs_1;
148    }
149    uint _S8 = (rayQueryGetIntersectionTypeEXT((query_0), true));
150    switch(_S8)
151    {
152    case 1U:
153        {
154            myTriangleClosestHit_0(payload_5);
155            break;
156        }
157    case 2U:
158        {
159            myProceduralClosestHit_0(payload_5, committedProceduralAttrs_0);
160            break;
161        }
162    case 0U:
163        {
164            myMiss_0(payload_5);
165            break;
166        }
167    default:
168        {
169            break;
170        }
171    }
172    resultBuffer_0._data[index_0] = payload_5.value_1;
173    return;
174}
175
176