yum-mirror/slang

Making it easier to work with shaders

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

Yong HeLower varying parameters as pointers instead of SSA values. (#5919)c43f6fa55

master
1.1 KiB40 linesraw
1//TEST:CROSS_COMPILE: -profile glsl_460+GL_NV_ray_tracing -entry HitMain -stage closesthit -target spirv-assembly
2//TEST:SIMPLE(filecheck=DXIL): -target dxil -entry HitMain -stage closesthit -profile sm_6_5
3//TEST:SIMPLE(filecheck=SPV): -target spirv
4
5// DXIL: define void @
6// SPV: OpEntryPoint
7
8#define USE_RCP 0
9
10struct ParameterBlockTest
11{
12    SamplerState sam;
13    StructuredBuffer<float> sbuf;
14};
15
16ConstantBuffer<ParameterBlockTest> gParamBlock;
17
18struct RayHitInfoPacked
19{
20    float4 PackedHitInfoA : PACKED_HIT_INFO_A;
21};
22
23[shader("closesthit")]
24void HitMain(inout RayHitInfoPacked RayData, BuiltInTriangleIntersectionAttributes Attributes)
25{
26    float HitT = RayTCurrent();
27    RayData.PackedHitInfoA.x = HitT;
28    int offs = 0;
29    uint use_rcp = USE_RCP;
30    float offsfloat = gParamBlock.sbuf.Load(offs);
31
32    use_rcp |= HitT > 0.0;
33
34    if (use_rcp != 0)
35        RayData.PackedHitInfoA.y = rcp(offsfloat);
36    else if ((use_rcp > 0) & (offsfloat == 0.0))
37        RayData.PackedHitInfoA.y = rsqrt(offsfloat + 1.0);
38    else
39        RayData.PackedHitInfoA.y = rsqrt(offsfloat);
40}