|
14 | 14 | #include "API/Resources.h" |
15 | 15 |
|
16 | 16 | #include "llvm/ADT/ArrayRef.h" |
| 17 | +#include "llvm/ADT/BitmaskEnum.h" |
17 | 18 | #include "llvm/ADT/SmallVector.h" |
18 | 19 | #include "llvm/Support/Error.h" |
19 | 20 |
|
20 | 21 | #include <cstdint> |
21 | 22 | #include <variant> |
22 | 23 |
|
23 | 24 | namespace offloadtest { |
| 25 | +LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); |
| 26 | + |
| 27 | +// Bit values match D3D12_RAYTRACING_INSTANCE_FLAGS, VkGeometryInstanceFlagBits- |
| 28 | +// KHR, and MTLAccelerationStructureInstanceOptions so backends can pass the |
| 29 | +// value through unchanged. |
| 30 | +enum AccelerationStructureInstanceFlags : uint32_t { |
| 31 | + InstanceFlagNone = 0, |
| 32 | + TriangleCullDisable = 1 << 0, |
| 33 | + TriangleFrontCounterclockwise = 1 << 1, |
| 34 | + ForceOpaque = 1 << 2, |
| 35 | + ForceNonOpaque = 1 << 3, |
| 36 | +}; |
24 | 37 |
|
25 | 38 | struct AccelerationStructureSizes { |
26 | 39 | uint64_t ResultDataMaxSizeInBytes = 0; |
@@ -57,6 +70,7 @@ struct AccelerationStructureInstance { |
57 | 70 | uint8_t InstanceMask = 0xFF; |
58 | 71 | // 24-bit; high bits are truncated by the backend to match DXR's bitfield. |
59 | 72 | uint32_t InstanceContributionToHitGroupIndex = 0; |
| 73 | + AccelerationStructureInstanceFlags Flags = InstanceFlagNone; |
60 | 74 | AccelerationStructure *BLAS = nullptr; |
61 | 75 | }; |
62 | 76 |
|
@@ -178,4 +192,9 @@ class AccelerationStructure { |
178 | 192 |
|
179 | 193 | } // namespace offloadtest |
180 | 194 |
|
| 195 | +namespace llvm { |
| 196 | +LLVM_DECLARE_ENUM_AS_BITMASK(::offloadtest::AccelerationStructureInstanceFlags, |
| 197 | + ::offloadtest::ForceNonOpaque); |
| 198 | +} // namespace llvm |
| 199 | + |
181 | 200 | #endif // OFFLOADTEST_API_ACCELERATIONSTRUCTURE_H |
0 commit comments