yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
c43f6fa55
master
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{ 12SamplerState sam ; 13StructuredBuffer < float > sbuf ; 14}; 15 16ConstantBuffer < ParameterBlockTest > gParamBlock ; 17 18struct RayHitInfoPacked 19{ 20float4 PackedHitInfoA : PACKED_HIT_INFO_A ; 21}; 22 23[ shader ( "closesthit" )] 24void HitMain ( inout RayHitInfoPacked RayData , BuiltInTriangleIntersectionAttributes Attributes ) 25{ 26float HitT = RayTCurrent (); 27RayData . PackedHitInfoA . x = HitT ; 28int offs = 0 ; 29uint use_rcp = USE_RCP ; 30float offsfloat = gParamBlock . sbuf . Load ( offs ); 31 32use_rcp |=HitT > 0.0 ; 33 34if ( use_rcp != 0 ) 35RayData . PackedHitInfoA . y = rcp ( offsfloat ); 36else if (( use_rcp > 0 ) & ( offsfloat == 0.0 )) 37RayData . PackedHitInfoA . y = rsqrt ( offsfloat + 1.0 ); 38else 39RayData . PackedHitInfoA . y = rsqrt ( offsfloat ); 40}