diff options
| author | ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> | 2024-03-15 16:14:32 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-15 16:14:32 -0400 |
| commit | 9b434e50f02f9ec02ce230de9042ce7448bae451 (patch) | |
| tree | 092aaecc785047a8005462764404f9c530e3a69c /source/slang/slang-lower-to-ir.cpp | |
| parent | 9ee88a43f4e67d9c714c27bf968401b6bf7524af (diff) | |
Implement raytracing extension(s); resolves #3560 for GLSL & SPIR-V targets (#3675)
The following PR implements raytracing extensions (GLSL_EXT_ray_tracing, GLSL_EXT_ray_query, GLSL_NV_shader_invocation_reorder & GLSL_NV_ray_tracing_motion_blur); for GLSL & SPIR-V targets. Fully implements all functions, built-in variables, & syntax; resolves #3560 for GLSL & SPIR-V Targets.
notes of worth:
* __rayPayloadFromLocation, __rayAttributeFromLocation, and __rayCallableFromLocation, were added as SPIR-V Intrinsics to refer to location's of raytracing objects in SPIR-V for when using GLSL syntax.
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index 6e6ba6255..4e564f703 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -2141,18 +2141,38 @@ void addVarDecorations( else if(auto rayPayloadAttr = as<VulkanRayPayloadAttribute>(mod)) { builder->addVulkanRayPayloadDecoration(inst, rayPayloadAttr->location); + // may not be referenced; adding HLSL export modifier force emits + builder->addHLSLExportDecoration(inst); + } + else if(auto rayPayloadInAttr = as<VulkanRayPayloadInAttribute>(mod)) + { + builder->addVulkanRayPayloadInDecoration(inst, rayPayloadInAttr->location); + // may not be referenced; adding HLSL export modifier force emits + builder->addHLSLExportDecoration(inst); } else if(auto callablePayloadAttr = as<VulkanCallablePayloadAttribute>(mod)) { builder->addVulkanCallablePayloadDecoration(inst, callablePayloadAttr->location); + // may not be referenced; adding HLSL export modifier force emits + builder->addHLSLExportDecoration(inst); + } + else if(auto callablePayloadInAttr = as<VulkanCallablePayloadInAttribute>(mod)) + { + builder->addVulkanCallablePayloadInDecoration(inst, callablePayloadInAttr->location); + // may not be referenced; adding HLSL export modifier force emits + builder->addHLSLExportDecoration(inst); } else if (auto hitObjectAttr = as<VulkanHitObjectAttributesAttribute>(mod)) { builder->addVulkanHitObjectAttributesDecoration(inst, hitObjectAttr->location); + // may not be referenced; adding HLSL export modifier force emits + builder->addHLSLExportDecoration(inst); } else if (as<VulkanHitAttributesAttribute>(mod)) { builder->addSimpleDecoration<IRVulkanHitAttributesDecoration>(inst); + // may not be referenced; adding HLSL export modifier force emits + builder->addHLSLExportDecoration(inst); } else if(as<GloballyCoherentModifier>(mod)) { @@ -4063,6 +4083,36 @@ struct ExprLoweringVisitorBase : public ExprVisitor<Derived, LoweredValInfo> { return builder->emitSPIRVAsmOperandEntryPoint(); } + case SPIRVAsmOperand::RayPayloadFromLocation: + { + IRInst* i; + { + IRBuilderInsertLocScope insertScope(builder); + builder->setInsertBefore(spirvAsmInst); + i = getSimpleVal(context, lowerRValueExpr(context, operand.expr)); + } + return builder->emitSPIRVAsmOperandRayPayloadFromLocation(i); + } + case SPIRVAsmOperand::RayAttributeFromLocation: + { + IRInst* i; + { + IRBuilderInsertLocScope insertScope(builder); + builder->setInsertBefore(spirvAsmInst); + i = getSimpleVal(context, lowerRValueExpr(context, operand.expr)); + } + return builder->emitSPIRVAsmOperandRayAttributeFromLocation(i); + } + case SPIRVAsmOperand::RayCallableFromLocation: + { + IRInst* i; + { + IRBuilderInsertLocScope insertScope(builder); + builder->setInsertBefore(spirvAsmInst); + i = getSimpleVal(context, lowerRValueExpr(context, operand.expr)); + } + return builder->emitSPIRVAsmOperandRayCallableFromLocation(i); + } } SLANG_UNREACHABLE("Unhandled case in visitSPIRVAsmExpr"); }; |
