yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f02b08490
master
1// hit-object-trace-motion-ray.slang 2 3// Motion rays not supported on HLSL impl currently 4//DISABLE_TEST:SIMPLE: -target dxil -entry rayGenerationMain -stage raygeneration -profile sm_6_5 -DNV_SHADER_EXTN_SLOT=u0 5//TEST:SIMPLE(filecheck=SPIRV): -target spirv -entry rayGenerationMain -stage raygeneration -profile sm_6_5 -line-directive-mode none 6//TEST:SIMPLE(filecheck=SPIRV): -target spirv -entry rayGenerationMain -stage raygeneration -emit-spirv-directly 7 8//DISABLE_TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -profile sm_6_6 -render-feature ray-query 9//DISABLE_TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query 10 11//TEST_INPUT: set scene = AccelerationStructure 12uniform RaytracingAccelerationStructure scene; 13 14//TEST_INPUT:set outputBuffer = out ubuffer(data=[0, 0, 0, 0], stride=4) 15RWStructuredBuffer<uint> outputBuffer; 16 17struct SomeValues 18{ 19 int a; 20 float b; 21}; 22 23uint calcValue(HitObject hit) 24{ 25 uint r = 0; 26 27 if (hit.IsHit()) 28 { 29 uint instanceIndex = hit.GetInstanceIndex(); 30 uint instanceID = hit.GetInstanceID(); 31 uint geometryIndex = hit.GetGeometryIndex(); 32 uint primitiveIndex = hit.GetPrimitiveIndex(); 33 34 SomeValues objSomeValues = hit.GetAttributes<SomeValues>(); 35 36 r += instanceIndex; 37 r += instanceID; 38 r += geometryIndex; 39 r += primitiveIndex; 40 r += objSomeValues.a; 41 } 42 43 return r; 44} 45 46void rayGenerationMain() 47{ 48 int2 launchID = int2(DispatchRaysIndex().xy); 49 int2 launchSize = int2(DispatchRaysDimensions().xy); 50 51 int idx = launchID.x; 52 53 float currentTime = idx / 4; 54 55 SomeValues someValues = { idx, idx * 2.0f }; 56 57 RayDesc ray; 58 ray.Origin = float3(idx, 0, 0); 59 ray.TMin = 0.01f; 60 ray.Direction = float3(0, 1, 0); 61 ray.TMax = 1e4f; 62 63 RAY_FLAG rayFlags = RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH | RAY_FLAG_CULL_BACK_FACING_TRIANGLES; 64 uint instanceInclusionMask = 0xff; 65 uint rayContributionToHitGroupIndex = 0; 66 uint multiplierForGeometryContributionToHitGroupIndex = 4; 67 uint missShaderIndex = 0; 68 // SPIRV: OpHitObjectTraceRayMotionNV 69 HitObject hit = HitObject::TraceMotionRay(scene, 70 rayFlags, 71 instanceInclusionMask, 72 rayContributionToHitGroupIndex, 73 multiplierForGeometryContributionToHitGroupIndex, 74 missShaderIndex, 75 ray, 76 currentTime, 77 someValues); 78 79 outputBuffer[idx] = calcValue(hit); 80}