1617a3babSopenharmony_ci#version 460
2617a3babSopenharmony_ci#extension GL_NV_ray_tracing : enable
3617a3babSopenharmony_ci#extension GL_EXT_ray_query : enable
4617a3babSopenharmony_ci
5617a3babSopenharmony_cistruct Ray
6617a3babSopenharmony_ci{
7617a3babSopenharmony_ci    vec3 pos;
8617a3babSopenharmony_ci    float tmin;
9617a3babSopenharmony_ci    vec3 dir;
10617a3babSopenharmony_ci    float tmax;
11617a3babSopenharmony_ci};
12617a3babSopenharmony_ci
13617a3babSopenharmony_cilayout(binding = 0, set = 0) uniform accelerationStructureEXT rtas;
14617a3babSopenharmony_cilayout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
15617a3babSopenharmony_ci
16617a3babSopenharmony_ciuint launchIndex()
17617a3babSopenharmony_ci{
18617a3babSopenharmony_ci    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
19617a3babSopenharmony_ci}
20617a3babSopenharmony_ci
21617a3babSopenharmony_civoid doInitialize(rayQueryEXT rayQuery, Ray ray)
22617a3babSopenharmony_ci{
23617a3babSopenharmony_ci    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
24617a3babSopenharmony_ci}
25617a3babSopenharmony_ci
26617a3babSopenharmony_civoid main()
27617a3babSopenharmony_ci{
28617a3babSopenharmony_ci    uint index = launchIndex();
29617a3babSopenharmony_ci    Ray ray = rays[index];
30617a3babSopenharmony_ci    rayQueryEXT rayQuery;
31617a3babSopenharmony_ci    doInitialize(rayQuery, ray);
32617a3babSopenharmony_ci    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullFrontFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
33617a3babSopenharmony_ci}
34