diff options
| -rw-r--r-- | source/slang/slang-ir-legalize-varying-params.cpp | 2 | ||||
| -rw-r--r-- | tests/cuda/optix-hit-attributes.slang | 15 |
2 files changed, 17 insertions, 0 deletions
diff --git a/source/slang/slang-ir-legalize-varying-params.cpp b/source/slang/slang-ir-legalize-varying-params.cpp index 5a18b533a..a98290545 100644 --- a/source/slang/slang-ir-legalize-varying-params.cpp +++ b/source/slang/slang-ir-legalize-varying-params.cpp @@ -1053,6 +1053,8 @@ struct CUDAEntryPointVaryingParamLegalizeContext : EntryPointVaryingParamLegaliz IRType* typeToFetch, IRBuilder* builder) { + if (auto ptrValType = tryGetPointedToType(builder, typeToFetch)) + typeToFetch = ptrValType; if (auto structType = as<IRStructType>(typeToFetch)) { List<IRInst*> fieldVals; diff --git a/tests/cuda/optix-hit-attributes.slang b/tests/cuda/optix-hit-attributes.slang new file mode 100644 index 000000000..347401893 --- /dev/null +++ b/tests/cuda/optix-hit-attributes.slang @@ -0,0 +1,15 @@ +//TEST:SIMPLE(filecheck=CHECK): -target cuda +//CHECK: __global__ void __closesthit__closestHitShaderA +struct RayPayload +{ + float4 color; +}; + +[shader("closesthit")] +void closestHitShaderA(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr) +{ + uint primitiveIndex = PrimitiveIndex(); + float4 color = float4(0, 0, 0, 1); + color[primitiveIndex] = 1; + payload.color = color; +} |
