yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
ce87ab925
master
1// ray-tracing-test-shaders.slang 2 3struct [raypayload] RayPayload 4{ 5 float4 color : read(caller) : write(caller, closesthit, miss); 6}; 7 8uniform RWTexture2D resultTexture; 9uniform RaytracingAccelerationStructure sceneBVH; 10 11[shader("raygeneration")] 12void rayGenShaderA() 13{ 14 int2 threadIdx = DispatchRaysIndex().xy; 15 16 float3 rayDir = float3(0, 0, 1); 17 float3 rayOrigin = 0; 18 rayOrigin.x = (threadIdx.x * 2) - 1; 19 rayOrigin.y = (threadIdx.y * 2) - 1; 20 21 // Trace the ray. 22 RayDesc ray; 23 ray.Origin = rayOrigin; 24 ray.Direction = rayDir; 25 ray.TMin = 0.001; 26 ray.TMax = 10000.0; 27 RayPayload payload = { float4(0, 0, 0, 0) }; 28 TraceRay(sceneBVH, RAY_FLAG_NONE, ~0, 0, 0, 0, ray, payload); 29 30 resultTexture[threadIdx.xy] = payload.color; 31} 32 33[shader("raygeneration")] 34void rayGenShaderB() 35{ 36 int2 threadIdx = DispatchRaysIndex().xy; 37 38 float3 rayDir = float3(0, 0, 1); 39 float3 rayOrigin = 0; 40 rayOrigin.x = (threadIdx.x * 2) - 1; 41 rayOrigin.y = (threadIdx.y * 2) - 1; 42 43 // Trace the ray. 44 RayDesc ray; 45 ray.Origin = rayOrigin; 46 ray.Direction = rayDir; 47 ray.TMin = 0.001; 48 ray.TMax = 10000.0; 49 RayPayload payload = { float4(0, 0, 0, 0) }; 50 TraceRay(sceneBVH, RAY_FLAG_NONE, ~0, 1, 0, 1, ray, payload); 51 52 resultTexture[threadIdx.xy] = payload.color; 53} 54 55[shader("miss")] 56void missShaderA(inout RayPayload payload) 57{ 58 payload.color = float4(1, 1, 1, 1); 59} 60 61[shader("miss")] 62void missShaderB(inout RayPayload payload) 63{ 64 payload.color = float4(0, 0, 0, 1); 65} 66 67[shader("closesthit")] 68void closestHitShaderA(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr) 69{ 70 uint primitiveIndex = PrimitiveIndex(); 71 float4 color = float4(0, 0, 0, 1); 72 color[primitiveIndex] = 1; 73 payload.color = color; 74} 75 76[shader("closesthit")] 77void closestHitShaderB(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr) 78{ 79 uint primitiveIndex = PrimitiveIndex(); 80 float4 color = float4(1, 1, 1, 1); 81 color[primitiveIndex] = 0; 82 payload.color = color; 83}