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