1#version 460 2#extension GL_EXT_ray_tracing : enable 3#extension GL_NV_shader_invocation_reorder : enable 4#extension GL_NV_ray_tracing_motion_blur : enable 5layout(location = 1) rayPayloadEXT vec4 payload; 6layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; }; 7layout(location = 2) hitObjectAttributeNV vec2 attr; 8layout(location = 3) hitObjectAttributeNV hBlock { float attrval;}; 9layout(binding = 0) uniform accelerationStructureEXT as; 10layout(binding = 1) buffer block { 11 float op; 12}; 13void main() 14{ 15 hitObjectNV hObj; 16 hitObjectNV hObjHit, hObjMiss, hObjNop; 17 attr = vec2(1.0); 18 attrval = 2.0; 19 hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1); 20 hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2); 21 hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2); 22 hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2); 23 hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3); 24 hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3); 25 hitObjectRecordEmptyNV(hObjNop); 26 hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0); 27 hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f); 28 hitObjectExecuteShaderNV(hObjHit, 1); 29 if (hitObjectIsHitNV(hObj)) { 30 op = 1.0f; 31 } else if (hitObjectIsMissNV(hObj)) { 32 op = 2.0f; 33 } else if (hitObjectIsEmptyNV(hObj)) { 34 op = 3.0f; 35 } 36 37 38 float tmin = hitObjectGetRayTMinNV(hObjHit); 39 float tmax = hitObjectGetRayTMaxNV(hObjHit); 40 vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit); 41 vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit); 42 vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit); 43 vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit); 44 mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit); 45 mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit); 46 int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss); 47 int iid = hitObjectGetInstanceIdNV(hObjNop); 48 int pid = hitObjectGetPrimitiveIndexNV(hObj); 49 int gid = hitObjectGetGeometryIndexNV(hObj); 50 uint hkind = hitObjectGetHitKindNV(hObj); 51 hitObjectGetAttributesNV(hObj, 2); 52 uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj); 53 uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj); 54 reorderThreadNV(4,4); 55 reorderThreadNV(hObjHit); 56 reorderThreadNV(hObjHit, 4, 2); 57 58 59 60 61} 62