yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
4d7c749b
main
1#version 460 2#extension GL_NV_ray_tracing : enable 3#extension GL_EXT_ray_query : enable 4 5struct Ray 6{ 7vec3 pos ; 8float tmin ; 9vec3 dir ; 10float tmax ; 11}; 12 13layout (std430 ,set = 0 ,binding = 0 )buffer Log 14{ 15uint x ; 16uint y ; 17}; 18 19layout (binding = 1 ,set = 0 )uniform accelerationStructureEXT rtas ; 20layout (std430 ,set = 0 ,binding = 2 )buffer Rays {Ray rays []; }; 21 22void doSomething () 23{ 24x = 0 ; 25y = 0 ; 26} 27 28Ray makeRayDesc () 29{ 30Ray ray ; 31ray .pos = vec3 (0 ,0 ,0 ); 32ray .dir = vec3 (1 ,0 ,0 ); 33ray .tmin = 0.0f ; 34ray .tmax = 9999.0 ; 35return ray ; 36} 37 38void main () 39{ 40Ray ray = makeRayDesc (); 41rayQueryEXT rayQuery ; 42rayQueryInitializeEXT (rayQuery ,rtas ,gl_RayFlagsNoneEXT ,0xFF ,ray .pos ,ray .tmin ,ray .dir ,ray .tmax ); 43 44mat4x3 _mat4x3 ; 45mat3x4 _mat3x4 ; 46 47while (rayQueryProceedEXT (rayQuery )) 48 { 49uint candidateType = rayQueryGetIntersectionTypeEXT (rayQuery , false); 50switch (candidateType ) 51 { 52case gl_RayQueryCandidateIntersectionTriangleEXT : 53 54rayQueryTerminateEXT (rayQuery ); 55_mat4x3 = rayQueryGetIntersectionObjectToWorldEXT (rayQuery , false); 56_mat3x4 = transpose (_mat4x3 ); 57rayQueryConfirmIntersectionEXT (rayQuery ); 58 59if (rayQueryGetIntersectionFrontFaceEXT (rayQuery , true)) 60 { 61doSomething (); 62 } 63 64if (rayQueryGetIntersectionBarycentricsEXT (rayQuery , true).x == 0 ) 65 { 66doSomething (); 67 } 68 69if (rayQueryGetIntersectionInstanceCustomIndexEXT (rayQuery , true)> 0 ) 70 { 71doSomething (); 72 } 73 74if (rayQueryGetIntersectionInstanceIdEXT (rayQuery , true)> 0 ) 75 { 76doSomething (); 77 } 78 79if (rayQueryGetIntersectionObjectRayDirectionEXT (rayQuery , true).x > 0 ) 80 { 81doSomething (); 82 } 83 84if (rayQueryGetIntersectionObjectRayOriginEXT (rayQuery , true).x > 0 ) 85 { 86doSomething (); 87 } 88 89if (rayQueryGetIntersectionPrimitiveIndexEXT (rayQuery , true)> 0 ) 90 { 91doSomething (); 92 } 93 94if (rayQueryGetIntersectionTEXT (rayQuery , true)> 0.f ) 95 { 96doSomething (); 97 } 98 99if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT (rayQuery , true)> 0 ) 100 { 101doSomething (); 102 } 103break ; 104 105case gl_RayQueryCandidateIntersectionAABBEXT : 106 { 107_mat4x3 = rayQueryGetIntersectionObjectToWorldEXT (rayQuery , false); 108_mat3x4 = transpose (_mat4x3 ); 109if (rayQueryGetIntersectionCandidateAABBOpaqueEXT (rayQuery )) 110 { 111doSomething (); 112 } 113 114float t = 0.5 ; 115rayQueryGenerateIntersectionEXT (rayQuery ,t ); 116rayQueryTerminateEXT (rayQuery ); 117break ; 118 } 119 } 120 } 121 122if (_mat3x4 [0 ][0 ]== _mat4x3 [0 ][0 ]) 123 { 124doSomething (); 125 } 126 127uint committedStatus = rayQueryGetIntersectionTypeEXT (rayQuery , true); 128 129switch (committedStatus ) 130 { 131case gl_RayQueryCommittedIntersectionNoneEXT : 132_mat4x3 = rayQueryGetIntersectionWorldToObjectEXT (rayQuery , false); 133_mat3x4 = transpose (_mat4x3 ); 134break ; 135 136case gl_RayQueryCommittedIntersectionTriangleEXT : 137_mat4x3 = rayQueryGetIntersectionWorldToObjectEXT (rayQuery , true); 138_mat3x4 = transpose (_mat4x3 ); 139 140if (rayQueryGetIntersectionFrontFaceEXT (rayQuery , true)) 141 { 142doSomething (); 143 } 144 145if (rayQueryGetIntersectionBarycentricsEXT (rayQuery , true).y == 0 ) 146 { 147doSomething (); 148 } 149break ; 150 151case gl_RayQueryCommittedIntersectionGeneratedEXT : 152 153if (rayQueryGetIntersectionGeometryIndexEXT (rayQuery , true)> 0 ) 154 { 155doSomething (); 156 } 157 158if (rayQueryGetIntersectionInstanceIdEXT (rayQuery , true)> 0 ) 159 { 160doSomething (); 161 } 162 163if (rayQueryGetIntersectionInstanceCustomIndexEXT (rayQuery , true)> 0 ) 164 { 165doSomething (); 166 } 167 168if (rayQueryGetIntersectionObjectRayDirectionEXT (rayQuery , true).z > 0 ) 169 { 170doSomething (); 171 } 172 173if (rayQueryGetIntersectionObjectRayOriginEXT (rayQuery , true).x > 0 ) 174 { 175doSomething (); 176 } 177 178if (rayQueryGetIntersectionPrimitiveIndexEXT (rayQuery , true)> 0 ) 179 { 180doSomething (); 181 } 182 183if (rayQueryGetIntersectionTEXT (rayQuery , true)> 0.f ) 184 { 185doSomething (); 186 } 187break ; 188 } 189 190if (_mat3x4 [0 ][0 ]== _mat4x3 [0 ][0 ]) 191 { 192doSomething (); 193 } 194 195if (rayQueryGetRayFlagsEXT (rayQuery )> 0 ) 196 { 197doSomething (); 198 } 199 200if (rayQueryGetRayTMinEXT (rayQuery )> 0.0 ) 201 { 202doSomething (); 203 } 204 205vec3 o = rayQueryGetWorldRayOriginEXT (rayQuery ); 206vec3 d = rayQueryGetWorldRayDirectionEXT (rayQuery ); 207 208if (o .x == d .z ) 209 { 210doSomething (); 211 } 212}