yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
04e7327a2
master
1//TEST:SIMPLE(filecheck=CHECK): -allow-glsl -target spirv -emit-spirv-directly -stage raygeneration -entry main -enable-experimental-passes 2 3// Check to ensure we make global ray-tracing objects. Ensure we store into these variables directly and not through a context-pointer. 4 5// CHECK-DAG: %[[RAYTRACING_AS_TYPE:[A-Za-z0-9_]+]] = OpTypeAccelerationStructureKHR 6// CHECK-DAG: %[[RAYTRACING_AS_PTR_TYPE:[A-Za-z0-9_]+]] = OpTypePointer UniformConstant %[[RAYTRACING_AS_TYPE]] 7// CHECK-DAG: %[[RAYTRACING_AS:[A-Za-z0-9_]+]] = OpVariable %[[RAYTRACING_AS_PTR_TYPE]] UniformConstant 8 9// CHECK-DAG: %[[RAY_PAYLOAD:[A-Za-z0-9_]+]] = OpVariable %{{.*}} RayPayloadKHR 10// CHECK-DAG: %[[HIT_ATTR:[A-Za-z0-9_]+]] = OpVariable %{{.*}} HitObjectAttributeNV 11// CHECK-DAG: %[[CALL_DATA:[A-Za-z0-9_]+]] = OpVariable %{{.*}} CallableDataKHR 12 13 14// CHECK: OpLoad {{.*}} %[[RAYTRACING_AS]] 15// CHECK: OpStore %[[RAY_PAYLOAD]] 16// CHECK: OpStore %[[HIT_ATTR]] 17// CHECK: OpStore %[[CALL_DATA]] 18 19layout(binding = 0) uniform accelerationStructureEXT as; 20 21buffer MyBlockName 22{ 23 uint data[]; 24} outputBuffer; 25layout(location = 2) rayPayloadEXT vec4 payload; 26layout(location = 2) hitObjectAttributeNV vec4 attrMain; 27layout(location = 0) callableDataEXT vec4 outcall; 28 29bool testHitObjectTraceRay() { 30 hitObjectNV hit; 31 32 33 hitObjectTraceRayNV(hit, as, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, vec3(0.1, 0.1, 0.0), 0.01f, vec3(0, 0, 1), 1e4f, 2); 34 return true 35 && hitObjectIsHitNV(hit) == true 36 ; 37} 38 39 40bool testPayloadReadWrite() { 41 payload = vec4(2); 42 vec4 read = payload; 43 return true 44 && read != vec4(0) 45 ; 46} 47 48bool testAttributeReadWrite() { 49 attrMain = vec4(2); 50 vec4 read = attrMain; 51 return true 52 && read != vec4(0) 53 ; 54} 55 56bool testCallableReadWrite() { 57 outcall = vec4(2); 58 vec4 read = outcall; 59 return true 60 && read != vec4(0) 61 ; 62} 63 64bool testReadWriteOfObjects(){ 65 return true 66 && testPayloadReadWrite() 67 && testAttributeReadWrite() 68 && testCallableReadWrite(); 69 ; 70} 71 72void main() 73{ 74 outputBuffer.data[0] = true 75 && testHitObjectTraceRay() 76 && testReadWriteOfObjects() 77 ; 78}