diff options
| author | Nathan V. Morrical <natemorrical@gmail.com> | 2021-05-25 11:06:54 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-25 10:06:54 -0700 |
| commit | fbf00dd54d787c6e22b0f1785a64dfb2fb1e300a (patch) | |
| tree | dd7e6f32eea789e3288dc8a937e92f256ea0b8e9 /source/slang/slang-type-layout.cpp | |
| parent | 34a1ff5226a526cc17c5baecd63637f69c324fc7 (diff) | |
OptiX ray payload read/write support in raytracing pipeline shaders (#1853)
* OptiX ray payload can now be read from and written to using the two payload register pointer method
* changing op to more descriptive name
* fixup: comment change to re-trigger CI
Co-authored-by: T. Foley <tfoleyNV@users.noreply.github.com>
Diffstat (limited to 'source/slang/slang-type-layout.cpp')
| -rw-r--r-- | source/slang/slang-type-layout.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/source/slang/slang-type-layout.cpp b/source/slang/slang-type-layout.cpp index f21722bd7..f2869886e 100644 --- a/source/slang/slang-type-layout.cpp +++ b/source/slang/slang-type-layout.cpp @@ -686,6 +686,12 @@ struct HLSLRayTracingLayoutRulesImpl : DefaultVaryingLayoutRulesImpl : DefaultVaryingLayoutRulesImpl(kind) {} }; +struct CUDARayTracingLayoutRulesImpl : DefaultVaryingLayoutRulesImpl +{ + CUDARayTracingLayoutRulesImpl(LayoutResourceKind kind) + : DefaultVaryingLayoutRulesImpl(kind) + {} +}; DefaultLayoutRulesImpl kDefaultLayoutRulesImpl; Std140LayoutRulesImpl kStd140LayoutRulesImpl; @@ -707,7 +713,13 @@ HLSLRayTracingLayoutRulesImpl kHLSLRayPayloadParameterLayoutRulesImpl(LayoutReso HLSLRayTracingLayoutRulesImpl kHLSLCallablePayloadParameterLayoutRulesImpl(LayoutResourceKind::CallablePayload); HLSLRayTracingLayoutRulesImpl kHLSLHitAttributesParameterLayoutRulesImpl(LayoutResourceKind::HitAttributes); +// Just copying what was done above for now, but for CUDA... +//CUDAVaryingLayoutRulesImpl kCUDAVaryingInputLayoutRulesImpl(LayoutResourceKind::VertexInput); +//CUDAVaryingLayoutRulesImpl kCUDAVaryingOutputLayoutRulesImpl(LayoutResourceKind::FragmentOutput); // +CUDARayTracingLayoutRulesImpl kCUDARayPayloadParameterLayoutRulesImpl(LayoutResourceKind::RayPayload); +//CUDARayTracingLayoutRulesImpl kCUDACallablePayloadParameterLayoutRulesImpl(LayoutResourceKind::CallablePayload); +//CUDARayTracingLayoutRulesImpl kCUDAHitAttributesParameterLayoutRulesImpl(LayoutResourceKind::HitAttributes); struct GLSLLayoutRulesFamilyImpl : LayoutRulesFamilyImpl { @@ -929,6 +941,12 @@ LayoutRulesImpl kCUDAAnyValueLayoutRulesImpl_ = { &kCUDAObjectLayoutRulesImpl, }; +// We want a custom layout for ray payloads to handle the logic of +// copying payload registers vs reading / writing to and from memory +LayoutRulesImpl kCUDARayPayloadParameterLayoutRulesImpl_ = { + &kCUDALayoutRulesFamilyImpl, &kCUDARayPayloadParameterLayoutRulesImpl, &kCUDAObjectLayoutRulesImpl, +}; + // GLSL cases LayoutRulesImpl kStd140LayoutRulesImpl_ = { @@ -1276,7 +1294,8 @@ LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getParameterBlockRules() } LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getRayPayloadParameterRules() { - return nullptr; + // Mimicking HLSL + return &kCUDARayPayloadParameterLayoutRulesImpl_; } LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getCallablePayloadParameterRules() { |
