yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

James Helferty (NVIDIA)render-test: Change D3D12 default to sm_6_5 (#8320)f02b08490

master
2.4 KiB80 linesraw
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}