hyperray 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. hyperdrone/__init__.py +53 -0
  2. hyperdrone/_cuda/__init__.py +76 -0
  3. hyperdrone/_dlpack.py +30 -0
  4. hyperdrone/_jit/__init__.py +131 -0
  5. hyperdrone/_jit/_build.py +113 -0
  6. hyperdrone/_jit/_lock.py +23 -0
  7. hyperdrone/_jit/_patches.py +99 -0
  8. hyperdrone/_jit/_toolchain.py +17 -0
  9. hyperdrone/_jit/_workspace.py +94 -0
  10. hyperdrone/_native/cmake/hyperdrone_jit.cmake +65 -0
  11. hyperdrone/_native/common/bindings.h +39 -0
  12. hyperdrone/_native/common/cuda_staging.h +80 -0
  13. hyperdrone/_native/common/jit_host.h +69 -0
  14. hyperdrone/_native/common/models.h +24 -0
  15. hyperdrone/_native/common/verbosity.h +52 -0
  16. hyperdrone/_native/dynamics/CMakeLists.txt +63 -0
  17. hyperdrone/_native/dynamics/host.cpp +188 -0
  18. hyperdrone/_native/dynamics/iface.h +71 -0
  19. hyperdrone/_native/dynamics/impl.cpp +638 -0
  20. hyperdrone/_native/env/CMakeLists.txt +98 -0
  21. hyperdrone/_native/env/environment.cpp +190 -0
  22. hyperdrone/_native/env/environment.h +282 -0
  23. hyperdrone/_native/env/impl.cpp +779 -0
  24. hyperdrone/_native/env/rotorcraft_bindings.cpp +53 -0
  25. hyperdrone/_native/render/CMakeLists.txt +96 -0
  26. hyperdrone/_native/render/renderer.cpp +973 -0
  27. hyperdrone/_native/render/rig_bindings.h +152 -0
  28. hyperdrone/_native/render/scene_bindings.cpp +515 -0
  29. hyperdrone/_outputs.py +32 -0
  30. hyperdrone/_parameters.py +36 -0
  31. hyperdrone/_vendor/rl-tools/CMakeLists.txt +207 -0
  32. hyperdrone/_vendor/rl-tools/LICENSE +21 -0
  33. hyperdrone/_vendor/rl-tools/cmake/autodetect/all.cmake +34 -0
  34. hyperdrone/_vendor/rl-tools/cmake/autodetect/git-diff.cmake +100 -0
  35. hyperdrone/_vendor/rl-tools/cmake/autodetect/git-hash.cmake +24 -0
  36. hyperdrone/_vendor/rl-tools/cmake/autodetect/summary.cmake +65 -0
  37. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier0-compiler.cmake +18 -0
  38. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier1-blas.cmake +51 -0
  39. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier2-json-hdf5-zlib.cmake +82 -0
  40. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier3-tensorboard.cmake +25 -0
  41. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier4-cuda.cmake +42 -0
  42. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier5-cli11.cmake +24 -0
  43. hyperdrone/_vendor/rl-tools/cmake/dependencies/assimp.cmake +19 -0
  44. hyperdrone/_vendor/rl-tools/cmake/legacy_flags.cmake +33 -0
  45. hyperdrone/_vendor/rl-tools/cmake/optional/assimp.cmake +30 -0
  46. hyperdrone/_vendor/rl-tools/cmake/optional/googletest.cmake +20 -0
  47. hyperdrone/_vendor/rl-tools/cmake/optional/metal.cmake +25 -0
  48. hyperdrone/_vendor/rl-tools/cmake/optional/mujoco.cmake +89 -0
  49. hyperdrone/_vendor/rl-tools/cmake/optional/optix.cmake +25 -0
  50. hyperdrone/_vendor/rl-tools/cmake/optional/raytracing.cmake +105 -0
  51. hyperdrone/_vendor/rl-tools/cmake/optional/raytracing_generic.cmake +2 -0
  52. hyperdrone/_vendor/rl-tools/cmake/optional/vulkan.cmake +4 -0
  53. hyperdrone/_vendor/rl-tools/cmake/optional/webgpu.cmake +24 -0
  54. hyperdrone/_vendor/rl-tools/cmake/scripts/embed_text.cmake +7 -0
  55. hyperdrone/_vendor/rl-tools/cmake/scripts/generate-git-snapshot.cmake +138 -0
  56. hyperdrone/_vendor/rl-tools/include/conta/conta.h +1480 -0
  57. hyperdrone/_vendor/rl-tools/include/metra/metra.h +381 -0
  58. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/matrix.h +143 -0
  59. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_arm.h +33 -0
  60. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu.h +314 -0
  61. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_accelerate.h +37 -0
  62. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_blas.h +67 -0
  63. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_mkl.h +38 -0
  64. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_openblas.h +34 -0
  65. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cuda.h +289 -0
  66. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_dummy.h +20 -0
  67. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_esp32.h +29 -0
  68. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_generic.h +944 -0
  69. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_wasm32.h +13 -0
  70. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/persist_code.h +136 -0
  71. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_arm.h +1 -0
  72. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu.h +94 -0
  73. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_accelerate.h +25 -0
  74. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_blas.h +115 -0
  75. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_mkl.h +25 -0
  76. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_openblas.h +25 -0
  77. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cuda.h +713 -0
  78. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_generic.h +1356 -0
  79. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/persist_code.h +130 -0
  80. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/tensor.h +490 -0
  81. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/arm.h +91 -0
  82. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu.h +210 -0
  83. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_accelerate.h +23 -0
  84. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_blas.h +21 -0
  85. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_emscripten.h +20 -0
  86. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_mkl.h +45 -0
  87. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_openblas.h +56 -0
  88. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_tensorboard.h +34 -0
  89. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cuda.h +464 -0
  90. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cuda_streams.h +23 -0
  91. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/devices.h +105 -0
  92. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/dummy.h +55 -0
  93. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/esp32.h +85 -0
  94. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/generic.h +0 -0
  95. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/wasm32.h +59 -0
  96. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/model.h +218 -0
  97. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/operations_generic.h +769 -0
  98. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/persist.h +278 -0
  99. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/policy_adapter.h +100 -0
  100. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/policy_adapter_persist.h +52 -0
  101. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/tensor_operations_generic.h +55 -0
  102. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/c_backend.h +117 -0
  103. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/c_interface.h +36 -0
  104. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/l2f.h +98 -0
  105. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/operations_dyn.h +18 -0
  106. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/operations_generic.h +268 -0
  107. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/debugging_pool/c_backend.h +31 -0
  108. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/debugging_pool/c_interface.h +12 -0
  109. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/c_backend.h +98 -0
  110. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/c_interface.h +50 -0
  111. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/executor.h +133 -0
  112. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/helper.h +109 -0
  113. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/operations_generic.h +219 -0
  114. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_arduino.h +117 -0
  115. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_arm.h +56 -0
  116. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_cpu.h +57 -0
  117. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_cpu_tensorboard.h +151 -0
  118. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_cuda.h +65 -0
  119. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_dummy.h +45 -0
  120. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_wasm32.h +56 -0
  121. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_arm.h +98 -0
  122. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_cpu.h +138 -0
  123. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_cuda.h +380 -0
  124. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_dummy.h +93 -0
  125. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_esp32.h +92 -0
  126. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_generic.h +295 -0
  127. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_wasm32.h +230 -0
  128. hyperdrone/_vendor/rl-tools/include/rl_tools/mode/mode.h +98 -0
  129. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/activation_functions.h +113 -0
  130. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/capability/capability.h +61 -0
  131. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/capability/persist_code.h +31 -0
  132. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/group.h +99 -0
  133. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/layer.h +122 -0
  134. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/operations_cuda.h +64 -0
  135. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/operations_generic.h +186 -0
  136. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/persist.h +33 -0
  137. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/layer.h +300 -0
  138. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/operations_cpu_mkl.h +590 -0
  139. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/operations_cuda.h +809 -0
  140. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/operations_generic.h +1219 -0
  141. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/persist.h +99 -0
  142. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/persist_code.h +170 -0
  143. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/layer.h +145 -0
  144. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_arm/dsp.h +63 -0
  145. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_arm/opt.h +173 -0
  146. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu.h +13 -0
  147. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_accelerate.h +66 -0
  148. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_blas.h +282 -0
  149. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_mkl.h +66 -0
  150. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_openblas.h +65 -0
  151. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cuda.h +519 -0
  152. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_dummy.h +8 -0
  153. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_esp32/dsp.h +58 -0
  154. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_esp32/opt.h +167 -0
  155. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_generic.h +429 -0
  156. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/persist.h +62 -0
  157. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/persist_code.h +178 -0
  158. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/persist_common.h +59 -0
  159. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/layer.h +188 -0
  160. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/operations_cuda.h +356 -0
  161. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/operations_generic.h +536 -0
  162. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/persist.h +32 -0
  163. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/embedding/layer.h +119 -0
  164. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/embedding/operations_generic.h +223 -0
  165. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/embedding/persist.h +46 -0
  166. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/layer.h +121 -0
  167. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/operations_generic.h +154 -0
  168. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/persist.h +44 -0
  169. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/persist_code.h +106 -0
  170. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/helper_operations_cuda.h +602 -0
  171. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/helper_operations_generic.h +251 -0
  172. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/layer.h +206 -0
  173. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/operations_generic.h +889 -0
  174. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/persist.h +75 -0
  175. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/persist_code.h +199 -0
  176. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/layers.h +3 -0
  177. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/layer.h +143 -0
  178. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/operations_cuda.h +80 -0
  179. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/operations_generic.h +216 -0
  180. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/persist.h +39 -0
  181. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu.h +1 -0
  182. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_accelerate.h +1 -0
  183. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_blas.h +1 -0
  184. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_mkl.h +3 -0
  185. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_openblas.h +1 -0
  186. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cuda.h +9 -0
  187. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_dummy.h +1 -0
  188. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_generic.h +3 -0
  189. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/layer.h +223 -0
  190. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/operations_cuda.h +138 -0
  191. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/operations_generic.h +446 -0
  192. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/persist.h +70 -0
  193. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/layer.h +154 -0
  194. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/operations_cuda.h +119 -0
  195. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/operations_generic.h +502 -0
  196. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/persist.h +50 -0
  197. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/persist_code.h +173 -0
  198. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/layer.h +116 -0
  199. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/operations_cuda.h +156 -0
  200. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/operations_generic.h +295 -0
  201. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/persist.h +83 -0
  202. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/persist_code.h +163 -0
  203. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/layer.h +123 -0
  204. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/operations_generic.h +272 -0
  205. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/persist.h +17 -0
  206. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/persist_code.h +164 -0
  207. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/layer.h +122 -0
  208. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/operations_cuda.h +55 -0
  209. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/operations_generic.h +160 -0
  210. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/persist.h +47 -0
  211. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/persist_code.h +106 -0
  212. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/upsample2d/layer.h +132 -0
  213. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/upsample2d/operations_cuda.h +141 -0
  214. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/upsample2d/operations_generic.h +230 -0
  215. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/categorical_cross_entropy/operations_generic.h +102 -0
  216. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/mse/operations_cuda.h +97 -0
  217. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/mse/operations_generic.h +101 -0
  218. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/operations_generic.h +2 -0
  219. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/nn.h +14 -0
  220. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu.h +1 -0
  221. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_accelerate.h +1 -0
  222. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_blas.h +1 -0
  223. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_mkl.h +1 -0
  224. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_mux.h +16 -0
  225. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_openblas.h +1 -0
  226. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cuda.h +2 -0
  227. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_dummy.h +1 -0
  228. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_generic.h +15 -0
  229. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/adam.h +121 -0
  230. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/operations_cuda.h +98 -0
  231. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/operations_generic.h +150 -0
  232. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/persist.h +39 -0
  233. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/persist_code.h +80 -0
  234. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/operations_cuda.h +85 -0
  235. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/operations_generic.h +109 -0
  236. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/persist.h +25 -0
  237. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/lamb/instance/operations_generic.h +107 -0
  238. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/lamb/lamb.h +40 -0
  239. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/lamb/operations_generic.h +68 -0
  240. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/optimizers.h +3 -0
  241. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/operations_cuda.h +85 -0
  242. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/operations_generic.h +140 -0
  243. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/persist.h +37 -0
  244. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/persist_code.h +72 -0
  245. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/operations_cuda.h +49 -0
  246. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/operations_generic.h +50 -0
  247. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/sgd.h +92 -0
  248. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/update.h +54 -0
  249. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/operations_cuda.h +0 -0
  250. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/operations_generic.h +98 -0
  251. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/parameters.h +79 -0
  252. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/persist.h +34 -0
  253. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/persist_code.h +136 -0
  254. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/persist.h +2 -0
  255. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/persist_code.h +27 -0
  256. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/behaviors/skip_parameter_gradients.h +65 -0
  257. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/group/README.md +107 -0
  258. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/group/model.h +19 -0
  259. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/group/persist_code.h +77 -0
  260. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/network.h +174 -0
  261. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/operations_cuda.h +10 -0
  262. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/operations_dummy.h +8 -0
  263. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/operations_generic.h +407 -0
  264. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/persist.h +56 -0
  265. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/persist_code.h +137 -0
  266. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/network.h +55 -0
  267. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/operations_generic.h +86 -0
  268. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/persist.h +43 -0
  269. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/persist_code.h +142 -0
  270. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/models.h +3 -0
  271. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/model.h +148 -0
  272. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/operations_generic.h +288 -0
  273. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/persist.h +25 -0
  274. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/persist_code.h +71 -0
  275. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_cpu.h +0 -0
  276. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_cuda.h +1 -0
  277. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_dummy.h +1 -0
  278. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_generic.h +4 -0
  279. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/model.h +290 -0
  280. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/operations_cuda.h +174 -0
  281. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/operations_generic.h +623 -0
  282. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/persist.h +80 -0
  283. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/persist_code.h +200 -0
  284. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/persist.h +1 -0
  285. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/persist_code.h +1 -0
  286. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/random_uniform/model.h +43 -0
  287. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/random_uniform/operations_generic.h +73 -0
  288. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/resnet/resnet.h +97 -0
  289. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/model.h +270 -0
  290. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/operations_generic.h +625 -0
  291. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/persist.h +99 -0
  292. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/persist_code.h +115 -0
  293. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/bf16.h +28 -0
  294. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/categories.h +22 -0
  295. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/persist_code.h +54 -0
  296. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/policy.h +48 -0
  297. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm/group_1.h +18 -0
  298. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm/group_2.h +14 -0
  299. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm/group_3.h +14 -0
  300. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm.h +19 -0
  301. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu/group_1.h +17 -0
  302. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu/group_2.h +12 -0
  303. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu/group_3.h +15 -0
  304. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu.h +19 -0
  305. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate/group_1.h +16 -0
  306. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate/group_2.h +12 -0
  307. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate/group_3.h +15 -0
  308. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate.h +19 -0
  309. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl/group_1.h +17 -0
  310. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl/group_2.h +12 -0
  311. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl/group_3.h +15 -0
  312. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl.h +18 -0
  313. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mux.h +158 -0
  314. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas/group_1.h +16 -0
  315. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas/group_2.h +12 -0
  316. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas/group_3.h +15 -0
  317. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas.h +18 -0
  318. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard/group_1.h +16 -0
  319. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard/group_2.h +12 -0
  320. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard/group_3.h +15 -0
  321. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard.h +19 -0
  322. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda/group_1.h +18 -0
  323. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda/group_2.h +12 -0
  324. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda/group_3.h +12 -0
  325. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda.h +19 -0
  326. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy/group_1.h +15 -0
  327. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy/group_2.h +12 -0
  328. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy/group_3.h +12 -0
  329. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy.h +19 -0
  330. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32/group_1.h +16 -0
  331. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32/group_2.h +12 -0
  332. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32/group_3.h +13 -0
  333. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32.h +19 -0
  334. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32/group_1.h +15 -0
  335. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32/group_2.h +12 -0
  336. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32/group_3.h +12 -0
  337. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32.h +19 -0
  338. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/hdf5/hdf5.h +54 -0
  339. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/hdf5/operations_cpu.h +419 -0
  340. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/io.h +55 -0
  341. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/operations_cpu.h +58 -0
  342. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/operations_generic.h +620 -0
  343. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/operations_posix.h +63 -0
  344. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/tar.h +74 -0
  345. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/code.h +38 -0
  346. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_arm.h +39 -0
  347. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_cpu.h +81 -0
  348. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_cuda.h +172 -0
  349. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_dummy.h +72 -0
  350. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_esp32.h +45 -0
  351. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_generic.h +133 -0
  352. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_generic_array.h +73 -0
  353. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_wasm32.h +57 -0
  354. hyperdrone/_vendor/rl-tools/include/rl_tools/random/persist.h +77 -0
  355. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/camera.h +105 -0
  356. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/annotations/cache.h +26 -0
  357. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/annotations/free_space.h +60 -0
  358. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/annotations/operations_cpu.h +411 -0
  359. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/glb/glb.h +25 -0
  360. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/glb/operations_cpu.h +1288 -0
  361. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/operations_cpu.h +136 -0
  362. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/catalog.h +232 -0
  363. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/conversion.h +33 -0
  364. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/operations_cpu.h +123 -0
  365. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/procthor.h +39 -0
  366. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/generic/operations_cpu.h +717 -0
  367. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/generic/operations_generic.h +1283 -0
  368. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/metal/context.h +193 -0
  369. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/metal/device_source.h +17 -0
  370. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/metal/operations_cpu.h +1123 -0
  371. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/device.h +207 -0
  372. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/device_impl.h +1043 -0
  373. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/operations_cuda.h +1747 -0
  374. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/overlay_accel.h +64 -0
  375. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/specialization.h +37 -0
  376. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/vulkan/context.h +251 -0
  377. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/vulkan/device_source.h +48 -0
  378. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/vulkan/operations_cpu.h +2067 -0
  379. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/bvh_sah.h +182 -0
  380. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/context.h +280 -0
  381. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/device_source.h +17 -0
  382. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/operations_cpu.h +1405 -0
  383. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/operations_cpu_common.h +948 -0
  384. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/operations_cpu_mux.h +32 -0
  385. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/operations_cpu_post.h +96 -0
  386. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/renderer.h +484 -0
  387. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/save_cpu.h +314 -0
  388. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/scene.h +44 -0
  389. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/transforms_generic.h +25 -0
  390. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/types.h +45 -0
  391. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/rig/operations_cpu.h +119 -0
  392. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/rig/operations_generic.h +121 -0
  393. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/rig/rig.h +70 -0
  394. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/scene.h +132 -0
  395. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/segmentation_cpu.h +145 -0
  396. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/transforms.h +204 -0
  397. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/types.h +76 -0
  398. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/algorithms.h +6 -0
  399. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/operations_cpu.h +1 -0
  400. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/operations_cpu_mkl.h +1 -0
  401. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/operations_generic.h +1 -0
  402. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/config.h +243 -0
  403. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/operations_cuda.h +9 -0
  404. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/operations_generic.h +205 -0
  405. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/persist.h +109 -0
  406. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/state.h +51 -0
  407. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/mixed_imitation.h +63 -0
  408. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/operations_cuda.h +190 -0
  409. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/operations_generic.h +332 -0
  410. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/operations_generic_mixed_imitation.h +81 -0
  411. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/persist.h +28 -0
  412. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/ppo.h +105 -0
  413. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/approximators_gru.h +84 -0
  414. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/approximators_mlp.h +61 -0
  415. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/config.h +106 -0
  416. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/operations_generic.h +193 -0
  417. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/state.h +52 -0
  418. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu.h +9 -0
  419. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu_accelerate.h +2 -0
  420. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu_mkl.h +2 -0
  421. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu_mux.h +9 -0
  422. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cuda.h +131 -0
  423. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_generic.h +580 -0
  424. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/sac.h +151 -0
  425. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/approximators_gru.h +72 -0
  426. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/approximators_mlp.h +54 -0
  427. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/config.h +107 -0
  428. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/operations_generic.h +174 -0
  429. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/state.h +46 -0
  430. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu.h +9 -0
  431. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu_accelerate.h +2 -0
  432. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu_mkl.h +2 -0
  433. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu_mux.h +9 -0
  434. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cuda.h +117 -0
  435. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_generic.h +359 -0
  436. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/td3.h +141 -0
  437. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/components.h +4 -0
  438. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/off_policy_runner.h +225 -0
  439. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cpu.h +95 -0
  440. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cpu_accelerate.h +21 -0
  441. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cpu_mkl.h +21 -0
  442. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cuda.h +237 -0
  443. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_generic.h +498 -0
  444. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_generic_per_env.h +112 -0
  445. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/collection.h +57 -0
  446. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/on_policy_runner.h +122 -0
  447. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu.h +2 -0
  448. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu_accelerate.h +8 -0
  449. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu_mkl.h +8 -0
  450. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu_mux.h +12 -0
  451. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cuda.h +183 -0
  452. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_generic.h +366 -0
  453. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_generic_common.h +74 -0
  454. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/persist.h +47 -0
  455. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_cpu.h +2 -0
  456. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_cpu_accelerate.h +1 -0
  457. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_cpu_mkl.h +1 -0
  458. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_generic.h +2 -0
  459. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/operations_cpu.h +9 -0
  460. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/operations_generic.h +123 -0
  461. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/persist.h +57 -0
  462. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/replay_buffer.h +93 -0
  463. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/running_normalizer/operations_generic.h +76 -0
  464. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/running_normalizer/persist.h +31 -0
  465. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/running_normalizer/running_normalizer.h +33 -0
  466. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/operations_generic.h +58 -0
  467. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/scale_observations/operations_generic.h +28 -0
  468. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/scale_observations/wrapper.h +26 -0
  469. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/wrappers.h +29 -0
  470. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/acrobot/acrobot.h +88 -0
  471. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/acrobot/operations_cpu.h +152 -0
  472. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/acrobot/operations_generic.h +202 -0
  473. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/environment.h +40 -0
  474. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/operations_cuda.h +204 -0
  475. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/operations_generic.h +106 -0
  476. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/operations_generic_common.h +26 -0
  477. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/persist.h +33 -0
  478. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/car.h +119 -0
  479. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/operations_cpu.h +110 -0
  480. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/operations_generic.h +206 -0
  481. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/operations_json.h +59 -0
  482. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/track.h +23 -0
  483. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/ui.h +189 -0
  484. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/environments.h +28 -0
  485. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/flag/environment.h +87 -0
  486. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/flag/operations_cpu.h +212 -0
  487. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/flag/operations_generic.h +215 -0
  488. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/observation.h +75 -0
  489. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/operations_cpu.h +1063 -0
  490. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/operations_cuda.h +564 -0
  491. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/pose.h +253 -0
  492. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/presets.h +154 -0
  493. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/raptor/operations_cpu.h +26 -0
  494. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/raptor/operations_generic.h +91 -0
  495. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/raptor/raptor.h +71 -0
  496. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/rig/operations_cpu.h +190 -0
  497. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/rig/operations_generic.h +32 -0
  498. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/rig/rig.h +25 -0
  499. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/capture_cpu.h +86 -0
  500. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/capture_cuda.h +69 -0
  501. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/capture_optix.h +163 -0
  502. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cpu.h +223 -0
  503. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cpu_spectator.h +194 -0
  504. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cuda.h +1 -0
  505. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cuda_spectator.h +109 -0
  506. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/spectator.h +82 -0
  507. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/spy.h +107 -0
  508. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/ui.h +30 -0
  509. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/moving_gate/moving_gate.h +103 -0
  510. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/moving_gate/operations_cpu.h +279 -0
  511. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/moving_gate/operations_cuda.h +242 -0
  512. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/operations_cpu.h +322 -0
  513. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/operations_cuda.h +312 -0
  514. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/operations_generic_position_hold.h +128 -0
  515. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/position_hold.h +22 -0
  516. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/target_frame.h +92 -0
  517. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/baseline.h +46 -0
  518. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/calibration.h +62 -0
  519. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/metrics.h +101 -0
  520. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/operations_cpu.h +374 -0
  521. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/visual_inertial_localization.h +126 -0
  522. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/world.h +333 -0
  523. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/inertial_velocity.h +27 -0
  524. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/metrics.h +266 -0
  525. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/multirotor.h +1138 -0
  526. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_cpu.h +2252 -0
  527. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/05_state_is_nan.h +148 -0
  528. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/10_sample_initial_parameters.h +228 -0
  529. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/20_initial_state.h +208 -0
  530. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/30_sample_initial_state.h +300 -0
  531. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/35_get_desired_state.h +63 -0
  532. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/40_observe.h +637 -0
  533. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/50_state_algebra.h +57 -0
  534. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/60_dynamics.h +134 -0
  535. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/70_post_integration.h +368 -0
  536. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/80_abs_diff.h +312 -0
  537. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic.h +367 -0
  538. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic_inertial_velocity.h +44 -0
  539. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_helper_generic.h +43 -0
  540. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_multitask_generic.h +70 -0
  541. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_multitask_generic_forward.h +24 -0
  542. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/default.h +209 -0
  543. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/arpl.h +112 -0
  544. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/crazyflie.h +127 -0
  545. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/crazyflie_openmv.h +119 -0
  546. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/flightmare.h +111 -0
  547. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/fs.h +113 -0
  548. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/mrs.h +110 -0
  549. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/soft.h +117 -0
  550. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/soft_rigid.h +118 -0
  551. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/x500.h +88 -0
  552. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/x500_real.h +88 -0
  553. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/x500_sim.h +114 -0
  554. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/init/default.h +56 -0
  555. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/registry.h +96 -0
  556. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/default.h +64 -0
  557. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/reward_functions.h +1 -0
  558. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/squared/operations_generic.h +202 -0
  559. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/squared/squared.h +52 -0
  560. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/termination/default.h +33 -0
  561. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/trajectories/lissajous.h +72 -0
  562. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/trajectories/trajectory.h +78 -0
  563. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/persist.h +21 -0
  564. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/persist_code.h +53 -0
  565. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/quaternion_helper.h +103 -0
  566. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/ui.h +180 -0
  567. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/memory/environment.h +69 -0
  568. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/memory/operations_cpu.h +46 -0
  569. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/memory/operations_generic.h +78 -0
  570. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/README.MD +5 -0
  571. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/ant.h +77 -0
  572. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/model.h +415 -0
  573. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/operations_cpu.h +162 -0
  574. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/persist.h +86 -0
  575. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/ui.h +141 -0
  576. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/mujoco.h +1 -0
  577. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/bottleneck/bottleneck.h +113 -0
  578. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/bottleneck/operations_cpu.h +289 -0
  579. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/bottleneck/operations_generic.h +495 -0
  580. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/environments.h +16 -0
  581. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/observation.h +37 -0
  582. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/operations_cpu.h +2 -0
  583. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/operations_generic.h +33 -0
  584. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/operations_cpu.h +146 -0
  585. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/operations_generic.h +262 -0
  586. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/pendulum.h +197 -0
  587. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/ui.h +97 -0
  588. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/ui_xeus.h +124 -0
  589. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/reacher/operations_cpu.h +426 -0
  590. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/reacher/operations_generic.h +424 -0
  591. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/reacher/reacher.h +137 -0
  592. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/loop.h +15 -0
  593. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/config.h +28 -0
  594. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/operations_cpu.h +233 -0
  595. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/persist.h +30 -0
  596. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/state.h +21 -0
  597. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/config.h +25 -0
  598. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/operations_generic.h +47 -0
  599. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/persist.h +20 -0
  600. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/state.h +17 -0
  601. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/config.h +47 -0
  602. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/operations_generic.h +106 -0
  603. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/persist.h +40 -0
  604. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/state.h +36 -0
  605. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/config.h +22 -0
  606. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/operations_cpu.h +44 -0
  607. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/persist.h +20 -0
  608. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/state.h +26 -0
  609. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/config.h +37 -0
  610. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/operations_cpu.h +113 -0
  611. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/persist.h +20 -0
  612. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/state.h +24 -0
  613. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/config.h +43 -0
  614. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/operations_cpu.h +190 -0
  615. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/persist.h +30 -0
  616. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/state.h +37 -0
  617. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/steps.h +4 -0
  618. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/config.h +27 -0
  619. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/operations_cpu.h +52 -0
  620. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/persist.h +20 -0
  621. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/state.h +25 -0
  622. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/operations_generic.h +3 -0
  623. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/rl.h +5 -0
  624. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/evaluation/evaluation.h +106 -0
  625. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/evaluation/operations_cpu.h +48 -0
  626. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/evaluation/operations_generic.h +275 -0
  627. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/validation.h +269 -0
  628. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/validation_analysis.h +85 -0
  629. hyperdrone/_vendor/rl-tools/include/rl_tools/rl_tools.h +80 -0
  630. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/client.h +50 -0
  631. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/operations_boost.h +92 -0
  632. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/operations_cpu.h +174 -0
  633. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/operations_websocket.h +208 -0
  634. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/server.h +448 -0
  635. hyperdrone/_vendor/rl-tools/include/rl_tools/universe.h +4 -0
  636. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/declarations_cpu.h +13 -0
  637. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/declarations_cpu_emscripten.h +15 -0
  638. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_arm.h +29 -0
  639. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_cpu.h +24 -0
  640. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_cpu_emscripten.h +28 -0
  641. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_cuda.h +33 -0
  642. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_dummy.h +18 -0
  643. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_esp32.h +20 -0
  644. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_generic.h +19 -0
  645. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_wasm32.h +18 -0
  646. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/env/operations_cpu.h +16 -0
  647. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/env/operations_generic.h +14 -0
  648. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/extrack/extrack.h +129 -0
  649. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/extrack/operations_cpu.h +588 -0
  650. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/integrators.h +103 -0
  651. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/memcpy.h +16 -0
  652. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/tuple/operations_generic.h +48 -0
  653. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/tuple/tuple.h +147 -0
  654. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/typing.h +122 -0
  655. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/vector_operations.h +172 -0
  656. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/polyak/operations_cuda.h +53 -0
  657. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/polyak/operations_generic.h +93 -0
  658. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/string/operations_generic.h +201 -0
  659. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/zlib/operations_cpu.h +45 -0
  660. hyperdrone/_vendor/rl-tools/include/rl_tools/version.h +28 -0
  661. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/CMakeLists.txt +15 -0
  662. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/README.md +214 -0
  663. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/CMakeLists.txt +11 -0
  664. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/generic/CMakeLists.txt +17 -0
  665. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/generic/freestanding_check.cpp +134 -0
  666. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/metal/CMakeLists.txt +31 -0
  667. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/metal/device.metal +912 -0
  668. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/metal/metal_cpp_impl.cpp +6 -0
  669. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/optix/CMakeLists.txt +51 -0
  670. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/optix/device.cu +1 -0
  671. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/optix/overlay_accel.cu +308 -0
  672. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/vulkan/CMakeLists.txt +37 -0
  673. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/vulkan/device.comp +970 -0
  674. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/vulkan/device_spirv.cpp +44 -0
  675. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/webgpu/CMakeLists.txt +31 -0
  676. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/webgpu/device.wgsl +1381 -0
  677. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/CMakeLists.txt +129 -0
  678. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/README.md +131 -0
  679. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/benchmark.cpp +180 -0
  680. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/benchmark_dynamic.cpp +491 -0
  681. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/download_paper_scene.py +74 -0
  682. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/CMakeLists.txt +104 -0
  683. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/Info.plist +36 -0
  684. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/Sources/BenchmarkApp.swift +172 -0
  685. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/benchmark.h +10 -0
  686. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/benchmark.mm +46 -0
  687. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/build.sh +17 -0
  688. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/rig.cpp +119 -0
  689. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix.cpp +1382 -0
  690. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix.h +5 -0
  691. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_config.h.in +25 -0
  692. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_identity.cmake +11 -0
  693. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_main.cpp +5 -0
  694. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics.cu +125 -0
  695. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics.h +58 -0
  696. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics_contract.h +179 -0
  697. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics_cpu.cpp +77 -0
  698. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/camera_orbit.h +51 -0
  699. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/CMakeLists.txt +199 -0
  700. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/antialiasing.cpp +214 -0
  701. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/drone.cpp +320 -0
  702. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/drone_device.cu +359 -0
  703. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/environment/environment.h +96 -0
  704. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/environment/operations_cpu.h +263 -0
  705. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/example.cpp +273 -0
  706. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/fixed_pose.cpp +221 -0
  707. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/flow.cpp +120 -0
  708. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/interactive.cpp +1015 -0
  709. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/make_drone_glb.py +172 -0
  710. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/minimal.cpp +82 -0
  711. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/minimal_overlay.cpp +137 -0
  712. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/motion_blur.cpp +232 -0
  713. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/render_pose_trace.cpp +1829 -0
  714. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/render_pose_trace_motion_blur.cpp +647 -0
  715. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/CMakeLists.txt +147 -0
  716. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/README.md +15 -0
  717. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/job.sbatch +28 -0
  718. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model.h +260 -0
  719. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_config.h +24 -0
  720. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_forward_cuda.h +397 -0
  721. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_operations.h +418 -0
  722. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_persist.h +45 -0
  723. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_student.h +70 -0
  724. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/scene.cpp +222 -0
  725. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/scene.h +68 -0
  726. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/.gitignore +4 -0
  727. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/CMakeLists.txt +4 -0
  728. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Info.plist +24 -0
  729. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Info_ios.plist +36 -0
  730. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/CameraManager.swift +120 -0
  731. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/ContentView.swift +703 -0
  732. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/DatasetRecorder.swift +285 -0
  733. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/YawPredictorApp.swift +25 -0
  734. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/YawPredictor.entitlements +8 -0
  735. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/build.sh +66 -0
  736. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/build_ios.sh +133 -0
  737. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/generate.sh +6 -0
  738. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/h5_to_tar.cpp +82 -0
  739. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/inference.cpp +166 -0
  740. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/inference.h +26 -0
  741. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/project.yml +30 -0
  742. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/test_tar_vs_hdf5.cpp +173 -0
  743. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_cuda.cu +699 -0
  744. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_dataset_overlay.cpp +475 -0
  745. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_distill_cuda.cu +995 -0
  746. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_eval.cu +457 -0
  747. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_real_world_eval.cpp +660 -0
  748. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_viewer.cu +443 -0
  749. hyperdrone/_vendor/rl-tools/src/rl/environments/hyperdrone/spy/CMakeLists.txt +63 -0
  750. hyperdrone/_vendor/rl-tools/src/rl/environments/hyperdrone/spy/example.cpp +101 -0
  751. hyperdrone/_vendor/rl-tools/src/rl/environments/hyperdrone/spy/ui.cpp +380 -0
  752. hyperdrone/dynamics/__init__.py +5 -0
  753. hyperdrone/dynamics/_component.py +31 -0
  754. hyperdrone/dynamics/_config.py +46 -0
  755. hyperdrone/dynamics/_sim.py +166 -0
  756. hyperdrone/env/__init__.py +23 -0
  757. hyperdrone/env/_multi_environment.py +566 -0
  758. hyperdrone/env/_rotorcraft.py +29 -0
  759. hyperdrone/env/_spy.py +39 -0
  760. hyperdrone/examples/.gitignore +3 -0
  761. hyperdrone/examples/Benchmark.ipynb +113 -0
  762. hyperdrone/examples/HyperDrone.ipynb +589 -0
  763. hyperdrone/examples/Orbiter.ipynb +496 -0
  764. hyperdrone/examples/Renderer.ipynb +218 -0
  765. hyperdrone/examples/__init__.py +16 -0
  766. hyperdrone/examples/articulation.py +55 -0
  767. hyperdrone/examples/benchmark.py +236 -0
  768. hyperdrone/examples/benchmark_minimal.py +65 -0
  769. hyperdrone/examples/data.py +71 -0
  770. hyperdrone/examples/drone_flythrough.py +169 -0
  771. hyperdrone/examples/hyperdrone_videos/my_world_preview.h +17 -0
  772. hyperdrone/examples/my_world.h +17 -0
  773. hyperdrone/examples/render_procthor.py +40 -0
  774. hyperdrone/examples/shots.py +108 -0
  775. hyperdrone/examples/spy.py +40 -0
  776. hyperdrone/examples/visual_inertial_localization.py +158 -0
  777. hyperdrone/gym/__init__.py +67 -0
  778. hyperdrone/render/__init__.py +57 -0
  779. hyperdrone/render/_component.py +51 -0
  780. hyperdrone/render/_config.py +76 -0
  781. hyperdrone/render/_renderer.py +498 -0
  782. hyperdrone/render/_rig.py +136 -0
  783. hyperdrone/render/_sampling.py +69 -0
  784. hyperdrone/render/_scene.py +38 -0
  785. hyperdrone/render/datasets.py +15 -0
  786. hyperray-0.0.1.dist-info/METADATA +519 -0
  787. hyperray-0.0.1.dist-info/RECORD +788 -0
  788. hyperray-0.0.1.dist-info/WHEEL +4 -0
@@ -0,0 +1,948 @@
1
+ #include "../../version.h"
2
+ #include "../../rl_tools.h"
3
+ #if (defined(RL_TOOLS_DISABLE_INCLUDE_GUARDS) || !defined(RL_TOOLS_RENDERING_RAYTRACING_OPERATIONS_CPU_COMMON_H)) && (RL_TOOLS_USE_THIS_VERSION == 1)
4
+ #pragma once
5
+ #define RL_TOOLS_RENDERING_RAYTRACING_OPERATIONS_CPU_COMMON_H
6
+
7
+ #include "renderer.h"
8
+ #include "../segmentation_cpu.h"
9
+ #include "transforms_generic.h"
10
+
11
+ #include <vector>
12
+ #include <limits>
13
+ #include <algorithm>
14
+ #include <functional>
15
+ #include <string>
16
+ #include <map>
17
+ #include <chrono>
18
+ #include <cmath>
19
+ #include <cstring>
20
+ #include <cstdio>
21
+ #include <cstdint>
22
+ #include <fstream>
23
+ #include <iostream>
24
+
25
+ #ifndef RL_TOOLS_RENDERING_RAYTRACING_DISABLE_PROBE_RAYS
26
+ #define RL_TOOLS_RENDERING_RAYTRACING_DISABLE_PROBE_RAYS 0
27
+ #endif
28
+
29
+ RL_TOOLS_NAMESPACE_WRAPPER_START
30
+ namespace rl_tools {
31
+ namespace rendering::raytracing{
32
+ inline constexpr char LOG_PREFIX[] = "#rl_tools::rendering::raytracing: ";
33
+ }
34
+
35
+ template <typename SPEC, typename DEVICE>
36
+ void validate_semantic_segmentation(DEVICE& device, const rendering::Scene& scene, const rendering::AssetPool& pool){
37
+ if constexpr(SPEC::SEMANTIC_SEGMENTATION){
38
+ if constexpr(SPEC::ENABLE_OVERLAYS){
39
+ validate_semantic_segmentation(device, scene, pool);
40
+ }
41
+ else{
42
+ validate_semantic_segmentation(device, segmentation_objects(device, scene));
43
+ }
44
+ }
45
+ }
46
+
47
+ // backend-generic launch+sync composite, defined in operations_cpu_post.h; declared here so
48
+ // backend-internal callers (init) resolve it before the definition is included
49
+ template <typename DEVICE, typename SPEC, typename BACKEND>
50
+ void update(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer);
51
+
52
+ namespace rendering::raytracing::detail{
53
+ template <typename DEVICE, typename SPEC, typename BACKEND>
54
+ void announce_backend(DEVICE& device, const rendering::raytracing::Renderer<SPEC, BACKEND>&){
55
+ log(device, device.logger, devices::logging::Verbosity::info, rendering::raytracing::LOG_PREFIX, "backend=", rendering::raytracing::backends::name<BACKEND>());
56
+ }
57
+ }
58
+
59
+ // =========================================================================
60
+ // Default cube geometry
61
+ // =========================================================================
62
+ namespace rendering::raytracing::constants{
63
+ const int NUM_VERTICES = 8;
64
+ const float default_vertices[8][3] = {
65
+ { -1.f,-1.f,-1.f },
66
+ { +1.f,-1.f,-1.f },
67
+ { -1.f,+1.f,-1.f },
68
+ { +1.f,+1.f,-1.f },
69
+ { -1.f,-1.f,+1.f },
70
+ { +1.f,-1.f,+1.f },
71
+ { -1.f,+1.f,+1.f },
72
+ { +1.f,+1.f,+1.f }
73
+ };
74
+ const int NUM_INDICES = 12;
75
+ const int default_indices[12][3] = {
76
+ { 0,1,3 }, { 2,3,0 },
77
+ { 5,7,6 }, { 5,6,4 },
78
+ { 0,4,5 }, { 0,5,1 },
79
+ { 2,3,7 }, { 2,7,6 },
80
+ { 1,5,7 }, { 1,7,3 },
81
+ { 4,0,2 }, { 4,2,6 }
82
+ };
83
+ }
84
+
85
+ namespace rendering::raytracing::detail{
86
+
87
+ inline constexpr float IDENTITY_TRANSFORM[12] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0};
88
+
89
+ // Host staging of the overlay transform inputs. The verbs write the staging mirrors and mark
90
+ // rows pending; update() publishes exactly the pending rows into the resident tensors in the
91
+ // backend's memory domain and clears the marks. Producers write the resident tensors
92
+ // directly and are never touched by the publish — a row belongs to whoever wrote it last.
93
+ template <typename SPEC, typename BACKEND>
94
+ void malloc_overlay_staging(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
95
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
96
+ renderer.transforms_staging.assign(SLOTS * 12, 0.0f);
97
+ if constexpr (SPEC::HAS_FLOW_OVERLAYS){
98
+ renderer.transforms_previous_staging.assign(SLOTS * 12, 0.0f);
99
+ }
100
+ if constexpr (SPEC::ENABLE_DYNAMIC_MOTION_BLUR){
101
+ renderer.transforms_motion_staging.assign((size_t)SPEC::MOTION_BLUR_SAMPLES * SLOTS * 12, 0.0f);
102
+ }
103
+ }
104
+
105
+ // one slot's current pose; under dynamic blur the same pose in every motion sample (sharp)
106
+ template <typename SPEC, typename BACKEND>
107
+ void stage_transform(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, size_t slot, const float pose[12]){
108
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
109
+ std::memcpy(renderer.transforms_staging.data() + slot * 12, pose, 12 * sizeof(float));
110
+ renderer.transforms_pending[slot] = true;
111
+ if constexpr (SPEC::ENABLE_DYNAMIC_MOTION_BLUR){
112
+ for(typename SPEC::TI sample = 0; sample < SPEC::MOTION_BLUR_SAMPLES; sample++){
113
+ std::memcpy(renderer.transforms_motion_staging.data() + (sample * SLOTS + slot) * 12, pose, 12 * sizeof(float));
114
+ }
115
+ renderer.transforms_motion_pending[slot] = true;
116
+ }
117
+ }
118
+
119
+ // one slot's motion: MOTION_BLUR_SAMPLES poses sample_stride floats apart, and the
120
+ // shutter-close pose as the steady state
121
+ template <typename SPEC, typename BACKEND>
122
+ void stage_motion(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, size_t slot, const float* samples, size_t sample_stride, const float close[12]){
123
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
124
+ std::memcpy(renderer.transforms_staging.data() + slot * 12, close, 12 * sizeof(float));
125
+ renderer.transforms_pending[slot] = true;
126
+ for(typename SPEC::TI sample = 0; sample < SPEC::MOTION_BLUR_SAMPLES; sample++){
127
+ std::memcpy(renderer.transforms_motion_staging.data() + (sample * SLOTS + slot) * 12, samples + sample * sample_stride, 12 * sizeof(float));
128
+ }
129
+ renderer.transforms_motion_pending[slot] = true;
130
+ }
131
+
132
+ template <typename SPEC, typename BACKEND>
133
+ void stage_previous(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, size_t slot, const float pose[12]){
134
+ std::memcpy(renderer.transforms_previous_staging.data() + slot * 12, pose, 12 * sizeof(float));
135
+ renderer.transforms_previous_pending[slot] = true;
136
+ }
137
+
138
+ // publish for backends whose resident tensors are host-addressable (after their in-flight
139
+ // wait); OptiX scatters the same pending rows on its stream (optix::publish_rows)
140
+ template <typename SPEC, typename BACKEND>
141
+ void publish_overlay_transforms(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
142
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
143
+ for(size_t slot = 0; slot < SLOTS; slot++){
144
+ if(renderer.transforms_pending[slot]){
145
+ std::memcpy(data(renderer.transforms) + slot * 12, renderer.transforms_staging.data() + slot * 12, 12 * sizeof(float));
146
+ renderer.transforms_pending[slot] = false;
147
+ }
148
+ }
149
+ if constexpr (SPEC::HAS_FLOW_OVERLAYS){
150
+ for(size_t slot = 0; slot < SLOTS; slot++){
151
+ if(renderer.transforms_previous_pending[slot]){
152
+ std::memcpy(data(renderer.transforms_previous) + slot * 12, renderer.transforms_previous_staging.data() + slot * 12, 12 * sizeof(float));
153
+ renderer.transforms_previous_pending[slot] = false;
154
+ }
155
+ }
156
+ }
157
+ if constexpr (SPEC::ENABLE_DYNAMIC_MOTION_BLUR){
158
+ for(size_t slot = 0; slot < SLOTS; slot++){
159
+ if(renderer.transforms_motion_pending[slot]){
160
+ for(typename SPEC::TI sample = 0; sample < SPEC::MOTION_BLUR_SAMPLES; sample++){
161
+ const size_t offset = (sample * SLOTS + slot) * 12;
162
+ std::memcpy(data(renderer.transforms_motion) + offset, renderer.transforms_motion_staging.data() + offset, 12 * sizeof(float));
163
+ }
164
+ renderer.transforms_motion_pending[slot] = false;
165
+ }
166
+ }
167
+ }
168
+ }
169
+
170
+ // host half of advance_flow: a row the host wrote but has not yet published becomes the
171
+ // previous instant through its staging mirror; the backend copies the resident rows
172
+ template <typename SPEC, typename BACKEND>
173
+ void advance_flow_staging(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
174
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
175
+ for(size_t slot = 0; slot < SLOTS; slot++){
176
+ if(renderer.transforms_pending[slot]){
177
+ stage_previous(renderer, slot, renderer.transforms_staging.data() + slot * 12);
178
+ }
179
+ }
180
+ }
181
+
182
+ template <typename SPEC, typename BACKEND>
183
+ bool placement_valid(const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement){
184
+ if(overlay.index >= SPEC::NUM_OVERLAYS || placement.num_parts == 0 || placement.first_slot >= SPEC::MAX_OVERLAY_INSTANCES || placement.num_parts > SPEC::MAX_OVERLAY_INSTANCES - placement.first_slot){
185
+ return false;
186
+ }
187
+ for(size_t part = 0; part < placement.num_parts; part++){
188
+ if(!renderer.overlays[overlay.index].slots[placement.first_slot + part].active){
189
+ return false;
190
+ }
191
+ }
192
+ return true;
193
+ }
194
+
195
+ template <typename DEVICE, typename SPEC, typename BACKEND>
196
+ void assert_placement(DEVICE& device, const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement){
197
+ utils::assert_exit(device, placement_valid(renderer, overlay, placement), "overlay verb: placement out of range or not spawned");
198
+ }
199
+
200
+ // per-slot flow delta table [2][SLOTS][12] from two transforms-layout slabs: slab 0 carries a
201
+ // current-instant point to the previous instant (world_previous ∘ world_current⁻¹, the
202
+ // backward pass), slab 1 the inverse (forward pass); identity for inactive slots. Backends
203
+ // with host-resident tensors call it in update() after the flush; OptiX runs the same
204
+ // composition on-device (overlay_accel_compose_flow_deltas).
205
+ template <typename SPEC, typename BACKEND>
206
+ void compose_flow_deltas(const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, const float* current_slab, const float* previous_slab, float* deltas){
207
+ using TI = typename SPEC::TI;
208
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
209
+ for(TI overlay = 0; overlay < SPEC::NUM_OVERLAYS; overlay++){
210
+ for(TI slot = 0; slot < SPEC::MAX_OVERLAY_INSTANCES; slot++){
211
+ const size_t index = (size_t)overlay * SPEC::MAX_OVERLAY_INSTANCES + slot;
212
+ float* backward = deltas + index * 12;
213
+ float* forward = deltas + (SLOTS + index) * 12;
214
+ if(!renderer.overlays[overlay].slots[slot].active){
215
+ std::memcpy(backward, IDENTITY_TRANSFORM, 12 * sizeof(float));
216
+ std::memcpy(forward, IDENTITY_TRANSFORM, 12 * sizeof(float));
217
+ continue;
218
+ }
219
+ const float* world_current = current_slab + index * 12;
220
+ const float* world_previous = previous_slab + index * 12;
221
+ float world_current_inverse[12], world_previous_inverse[12];
222
+ invert_transform(world_current, world_current_inverse);
223
+ invert_transform(world_previous, world_previous_inverse);
224
+ compose_transforms(world_previous, world_current_inverse, backward);
225
+ compose_transforms(world_current, world_previous_inverse, forward);
226
+ }
227
+ }
228
+ }
229
+
230
+ // flattens the asset pool for overlay spawns: appends pool objects to the combined object
231
+ // list and records per-part global object indices + local transforms on the renderer
232
+ template <typename DEVICE, typename SPEC, typename BACKEND>
233
+ void register_pool_assets(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, const rendering::raytracing::AssetPool& pool, std::vector<const rendering::raytracing::Object*>& all_objects){
234
+ using TI = typename SPEC::TI;
235
+ renderer.assets.clear();
236
+ renderer.asset_part_objects.clear();
237
+ renderer.asset_part_transforms.clear();
238
+ for(const auto& assembly : pool.assemblies){
239
+ typename rendering::raytracing::Renderer<SPEC, BACKEND>::AssetRecord record;
240
+ record.first_part = (TI)renderer.asset_part_objects.size();
241
+ record.num_parts = (TI)assembly.parts.size();
242
+ utils::assert_exit(device, record.num_parts > 0, "asset must contain at least one part");
243
+ utils::assert_exit(device, record.num_parts <= SPEC::MAX_OVERLAY_INSTANCES, "asset has more parts than the overlay capacity");
244
+ const TI object_base = (TI)all_objects.size();
245
+ for(const auto& object : assembly.objects){
246
+ all_objects.push_back(&object);
247
+ }
248
+ for(const auto& part : assembly.parts){
249
+ renderer.asset_part_objects.push_back(object_base + (TI)part.object);
250
+ renderer.asset_part_transforms.insert(renderer.asset_part_transforms.end(), part.transform, part.transform + 12);
251
+ }
252
+ renderer.assets.push_back(record);
253
+ }
254
+ }
255
+
256
+ // Deterministic first-fit is a contract, not an implementation detail: the chosen slot defines
257
+ // the global instance id (segmentation output), which must be reproducible across runs and
258
+ // identical across backends. Do not replace with a free-list or best-fit strategy.
259
+ template <typename SPEC, typename BACKEND>
260
+ typename SPEC::TI first_fit_slot(const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, size_t overlay, typename SPEC::TI num_parts){
261
+ using TI = typename SPEC::TI;
262
+ const auto& state = renderer.overlays[overlay];
263
+ TI run = 0;
264
+ for(TI slot = 0; slot < SPEC::MAX_OVERLAY_INSTANCES; slot++){
265
+ run = state.slots[slot].active ? 0 : run + 1;
266
+ if(run == num_parts){
267
+ return slot + 1 - num_parts;
268
+ }
269
+ }
270
+ return SPEC::MAX_OVERLAY_INSTANCES;
271
+ }
272
+
273
+ template <typename SPEC, typename BACKEND>
274
+ void reset_overlay_state(rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
275
+ using TI = typename SPEC::TI;
276
+ constexpr size_t SLOTS = (size_t)SPEC::NUM_OVERLAYS * SPEC::MAX_OVERLAY_INSTANCES;
277
+ for(auto& overlay_state : renderer.overlays){
278
+ for(auto& slot : overlay_state.slots){
279
+ slot.active = false;
280
+ }
281
+ overlay_state.dirty = true;
282
+ }
283
+ for(size_t slot = 0; slot < SLOTS; slot++){
284
+ renderer.transforms_pending[slot] = false;
285
+ if constexpr (SPEC::HAS_FLOW_OVERLAYS){
286
+ renderer.transforms_previous_pending[slot] = false;
287
+ }
288
+ if constexpr (SPEC::ENABLE_DYNAMIC_MOTION_BLUR){
289
+ renderer.transforms_motion_pending[slot] = false;
290
+ }
291
+ }
292
+ for(TI attachment_i = 0; attachment_i < SPEC::NUM_CAMERAS * SPEC::MAX_OVERLAYS_PER_CAMERA; attachment_i++){
293
+ renderer.attachments[attachment_i] = rendering::raytracing::Renderer<SPEC, BACKEND>::INVALID_OVERLAY;
294
+ }
295
+ renderer.attachments_dirty = true;
296
+ }
297
+
298
+ // resolved-configuration echo at debug verbosity: makes a silently-defaulted (e.g.
299
+ // misspelled) fringe config member visible
300
+ template <typename SPEC, typename DEVICE>
301
+ void announce_configuration(DEVICE& device){
302
+ log(device, device.logger, devices::logging::Verbosity::debug, rendering::raytracing::LOG_PREFIX, "config: ", SPEC::NUM_CAMERAS, " camera(s) ", SPEC::CAM_WIDTH, "x", SPEC::CAM_HEIGHT,
303
+ " outputs[rgb=", SPEC::HAS_RGB, " depth=", SPEC::HAS_DEPTH, " segmentation=", SPEC::HAS_SEGMENTATION, (SPEC::SEMANTIC_SEGMENTATION ? " (semantic)" : ""), " normals=", SPEC::HAS_NORMALS, " flow=", SPEC::HAS_FLOW, " flow_forward=", SPEC::HAS_FLOW_FORWARD, "]",
304
+ " probes=", (RL_TOOLS_RENDERING_RAYTRACING_DISABLE_PROBE_RAYS ? 0 : SPEC::NUM_PROBES),
305
+ " motion_blur_samples=", (SPEC::ENABLE_MOTION_BLUR ? SPEC::MOTION_BLUR_SAMPLES : 0),
306
+ " anti_aliasing_grid=", (SPEC::ENABLE_ANTI_ALIASING ? SPEC::ANTI_ALIASING_GRID_SIZE : 0),
307
+ " overlays=", SPEC::NUM_OVERLAYS, "x", SPEC::MAX_OVERLAY_INSTANCES, " overlays_per_camera=", SPEC::MAX_OVERLAYS_PER_CAMERA);
308
+ }
309
+
310
+ // resolves a Scene::Environment into the concrete ambient + miss color pair the shaders
311
+ // consume. DEFAULT reproduces the historical constants exactly (golden-pinned); GRADIENT and
312
+ // EQUIRECT fall back to a solid horizon background until the shaders consume them.
313
+ template <typename SPEC>
314
+ void resolve_environment(const rendering::Scene::Environment& environment, typename SPEC::T ambient_color[3], typename SPEC::T miss_color_0[3], typename SPEC::T miss_color_1[3]){
315
+ using T = typename SPEC::T;
316
+ using Environment = rendering::Scene::Environment;
317
+ if(environment.mode == Environment::Mode::DEFAULT){
318
+ ambient_color[0] = 0.10f; ambient_color[1] = 0.10f; ambient_color[2] = 0.10f;
319
+ if constexpr (SPEC::HAS_RGB && SPEC::SHADING::PBR_SHADING){
320
+ for(int component = 0; component < 3; component++){
321
+ miss_color_0[component] = 0.f;
322
+ miss_color_1[component] = 0.f;
323
+ }
324
+ }
325
+ else{
326
+ miss_color_0[0] = .8f; miss_color_0[1] = 0.f; miss_color_0[2] = 0.f;
327
+ miss_color_1[0] = .8f; miss_color_1[1] = .8f; miss_color_1[2] = .8f;
328
+ }
329
+ }
330
+ else{
331
+ for(int component = 0; component < 3; component++){
332
+ ambient_color[component] = (T)environment.ambient[component];
333
+ miss_color_0[component] = (T)environment.horizon[component];
334
+ miss_color_1[component] = (T)environment.horizon[component];
335
+ }
336
+ }
337
+ }
338
+
339
+ // Lights as uploaded to the device: only the PBR tiers consume punctual lights. Object lights
340
+ // are authored in the object's local frame and follow the instance placing it.
341
+ template <bool APPLY, typename DEVICE>
342
+ std::vector<rendering::raytracing::SceneLight> effective_scene_lights(DEVICE& device, const rendering::raytracing::Scene& scene){
343
+ std::vector<rendering::raytracing::SceneLight> lights;
344
+ if constexpr (APPLY) {
345
+ lights = scene.lights;
346
+ for(const auto& instance : scene.instances){
347
+ for(const auto& object_light : scene.objects[instance.object].lights){
348
+ rendering::raytracing::SceneLight light = object_light;
349
+ if(!instance.identity){
350
+ transform_point(instance.transform, object_light.position, light.position);
351
+ transform_vector(instance.transform, object_light.direction, light.direction);
352
+ const float length = sqrtf(light.direction[0]*light.direction[0] + light.direction[1]*light.direction[1] + light.direction[2]*light.direction[2]);
353
+ if(length > 0){
354
+ light.direction[0] /= length;
355
+ light.direction[1] /= length;
356
+ light.direction[2] /= length;
357
+ }
358
+ }
359
+ lights.push_back(light);
360
+ }
361
+ }
362
+ log(device, device.logger, devices::logging::Verbosity::debug, rendering::raytracing::LOG_PREFIX, "Scene lights: ", lights.size());
363
+ for(size_t li = 0; li < lights.size(); li++){
364
+ const auto& sl = lights[li];
365
+ log(device, device.logger, devices::logging::Verbosity::debug, rendering::raytracing::LOG_PREFIX, " light ", li, ": pos=(", sl.position[0], ",", sl.position[1], ",", sl.position[2],
366
+ ") dir=(", sl.direction[0], ",", sl.direction[1], ",", sl.direction[2],
367
+ ") color=(", sl.color[0], ",", sl.color[1], ",", sl.color[2], ")");
368
+ }
369
+ }
370
+ return lights;
371
+ }
372
+ } // namespace rendering::raytracing::detail
373
+
374
+ namespace rendering::raytracing::detail{
375
+ // content-hash dedup insert: on a miss the library takes ownership of the bundle's scene
376
+ // (the bundle's metadata stays with the caller for producer-side use)
377
+ template <typename DEVICE, typename SPEC, typename BACKEND, typename T>
378
+ typename SPEC::TI library_insert(DEVICE& device, rendering::raytracing::AssetLibrary<SPEC, BACKEND>& library, rendering::Bundle<T>& bundle, bool& is_new){
379
+ validate_semantic_segmentation<SPEC>(device, bundle.scene, library.pool);
380
+ using TI = typename SPEC::TI;
381
+ utils::assert_exit(device, !bundle.metadata.content_hash.empty(), "library: bundle has no content hash — load it through a dataset loader");
382
+ for(TI scene_i = 0; scene_i < (TI)library.metadata.size(); scene_i++){
383
+ if(library.metadata[scene_i].content_hash == bundle.metadata.content_hash){
384
+ is_new = false;
385
+ log(device, device.logger, devices::logging::Verbosity::debug, rendering::raytracing::LOG_PREFIX, "library: scene ", bundle.metadata.content_hash, " shares build ", scene_i, " (content hash match)");
386
+ return scene_i;
387
+ }
388
+ }
389
+ is_new = true;
390
+ utils::assert_exit(device, !bundle.scene.objects.empty(), "library: bundle scene is empty (already inserted elsewhere?)");
391
+ library.scenes.push_back(std::move(bundle.scene));
392
+ bundle.scene = {};
393
+ library.metadata.push_back({});
394
+ auto& stored = library.metadata.back();
395
+ for(int d = 0; d < 3; d++){
396
+ stored.center[d] = (typename SPEC::T)bundle.metadata.center[d];
397
+ stored.half_extent[d] = (typename SPEC::T)bundle.metadata.half_extent[d];
398
+ }
399
+ stored.max_ray_length = (typename SPEC::T)bundle.metadata.max_ray_length;
400
+ stored.content_hash = bundle.metadata.content_hash;
401
+ library.assets.push_back(nullptr);
402
+ return (TI)(library.scenes.size() - 1);
403
+ }
404
+ }
405
+
406
+ template <typename DEVICE, typename SPEC, typename BACKEND, typename T>
407
+ typename SPEC::TI insert(DEVICE& device, rendering::raytracing::AssetLibrary<SPEC, BACKEND>& library, rendering::Bundle<T>& bundle){
408
+ bool is_new = false;
409
+ return rendering::raytracing::detail::library_insert(device, library, bundle, is_new);
410
+ }
411
+
412
+ // appends a root part (geometry in the part frame, placed by transform within the assembly)
413
+ template <typename DEVICE>
414
+ size_t add(DEVICE& device, rendering::raytracing::ObjectAssembly& assembly, const rendering::raytracing::Object& object, const float transform[12]){
415
+ rendering::raytracing::ObjectAssembly::Part part;
416
+ part.object = assembly.objects.size();
417
+ std::memcpy(part.transform, transform, sizeof(part.transform));
418
+ assembly.objects.push_back(object);
419
+ assembly.parts.push_back(part);
420
+ return assembly.parts.size() - 1;
421
+ }
422
+
423
+ template <typename DEVICE>
424
+ size_t add(DEVICE& device, rendering::raytracing::Scene& scene, const rendering::raytracing::Object& object, const float transform[12]){
425
+ scene.objects.push_back(object);
426
+ scene.instances.push_back({scene.objects.size() - 1, {}, rendering::raytracing::detail::transform_is_identity(transform)});
427
+ std::memcpy(scene.instances.back().transform, transform, 12 * sizeof(float));
428
+ return scene.instances.size() - 1;
429
+ }
430
+
431
+ template <typename DEVICE>
432
+ size_t add(DEVICE& device, rendering::raytracing::Scene& scene, const rendering::raytracing::Object& object){
433
+ const float identity[12] = {1,0,0,0, 0,1,0,0, 0,0,1,0};
434
+ return add(device, scene, object, identity);
435
+ }
436
+
437
+ template <typename DEVICE>
438
+ size_t add(DEVICE& device, rendering::raytracing::Scene& scene, const rendering::raytracing::Mesh& mesh){
439
+ rendering::raytracing::Object object;
440
+ object.meshes.push_back(mesh);
441
+ return add(device, scene, object);
442
+ }
443
+
444
+
445
+ template <typename DEVICE>
446
+ rendering::raytracing::Placement add(DEVICE& device, rendering::raytracing::Scene& scene, const rendering::raytracing::ObjectAssembly& assembly, const float transform[12]){
447
+ rendering::raytracing::Placement placement{scene.instances.size(), assembly.parts.size()};
448
+ const size_t object_base = scene.objects.size();
449
+ scene.objects.insert(scene.objects.end(), assembly.objects.begin(), assembly.objects.end());
450
+ for(const auto& part : assembly.parts){
451
+ float composed[12];
452
+ rendering::raytracing::detail::compose_transforms(transform, part.transform, composed);
453
+ scene.instances.push_back({object_base + part.object, {}, rendering::raytracing::detail::transform_is_identity(composed)});
454
+ std::memcpy(scene.instances.back().transform, composed, sizeof(composed));
455
+ }
456
+ return placement;
457
+ }
458
+
459
+ template <typename DEVICE>
460
+ rendering::raytracing::Placement add(DEVICE& device, rendering::raytracing::Scene& scene, const rendering::raytracing::ObjectAssembly& assembly){
461
+ const float identity[12] = {1,0,0,0, 0,1,0,0, 0,0,1,0};
462
+ return add(device, scene, assembly, identity);
463
+ }
464
+
465
+ template <typename DEVICE>
466
+ rendering::raytracing::AssetHandle add(DEVICE& device, rendering::raytracing::AssetPool& pool, const rendering::raytracing::ObjectAssembly& assembly){
467
+ pool.assemblies.push_back(assembly);
468
+ return {pool.assemblies.size() - 1};
469
+ }
470
+
471
+ template <typename DEVICE>
472
+ rendering::raytracing::AssetHandle add(DEVICE& device, rendering::raytracing::AssetPool& pool, const rendering::raytracing::Object& object){
473
+ rendering::raytracing::ObjectAssembly assembly;
474
+ assembly.objects.push_back(object);
475
+ assembly.parts.push_back({0, {1,0,0,0, 0,1,0,0, 0,0,1,0}});
476
+ return add(device, pool, assembly);
477
+ }
478
+
479
+ template <typename DEVICE>
480
+ rendering::raytracing::AssetHandle add(DEVICE& device, rendering::raytracing::AssetPool& pool, const rendering::raytracing::Mesh& mesh){
481
+ rendering::raytracing::Object object;
482
+ object.meshes.push_back(mesh);
483
+ return add(device, pool, object);
484
+ }
485
+
486
+ // Validation predicates for boundaries (language bindings, C interface) that must not trip
487
+ // the fail-fast asserts inside the verbs: check first, then call.
488
+ template <typename DEVICE, typename SPEC, typename BACKEND>
489
+ bool can_attach(DEVICE& device, const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, typename SPEC::TI camera, rendering::raytracing::OverlayIndex overlay){
490
+ static_assert(SPEC::ENABLE_OVERLAYS, "can_attach requires an overlay-enabled renderer specification");
491
+ using TI = typename SPEC::TI;
492
+ if(camera >= SPEC::NUM_CAMERAS || overlay.index >= SPEC::NUM_OVERLAYS){
493
+ return false;
494
+ }
495
+ const TI* row = &renderer.attachments[camera * SPEC::MAX_OVERLAYS_PER_CAMERA];
496
+ for(TI slot = 0; slot < SPEC::MAX_OVERLAYS_PER_CAMERA; slot++){
497
+ if(row[slot] == (TI)overlay.index || row[slot] == rendering::raytracing::Renderer<SPEC, BACKEND>::INVALID_OVERLAY){
498
+ return true;
499
+ }
500
+ }
501
+ return false;
502
+ }
503
+
504
+ template <typename DEVICE, typename SPEC, typename BACKEND>
505
+ bool can_spawn(DEVICE& device, const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, rendering::raytracing::AssetHandle asset){
506
+ static_assert(SPEC::ENABLE_OVERLAYS, "can_spawn requires an overlay-enabled renderer specification");
507
+ if(overlay.index >= SPEC::NUM_OVERLAYS || asset.index >= renderer.assets.size()){
508
+ return false;
509
+ }
510
+ return rendering::raytracing::detail::first_fit_slot<SPEC>(renderer, overlay.index, renderer.assets[asset.index].num_parts) < SPEC::MAX_OVERLAY_INSTANCES;
511
+ }
512
+
513
+ // Overlay verbs mutate host-side truth on the renderer and mark it dirty; update(device,
514
+ // renderer) is the single point where the backend consumes it (OptiX producers may also
515
+ // rewrite the objects of active rows on the device, see overlay_structure, which host truth
516
+ // and segmentation_object then do not reflect). All bookkeeping is deterministic: slot
517
+ // allocation is a first-fit scan, so identical call sequences yield identical slots (and
518
+ // therefore identical global instance ids).
519
+ template <typename DEVICE, typename SPEC, typename BACKEND>
520
+ void attach(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, typename SPEC::TI camera, rendering::raytracing::OverlayIndex overlay){
521
+ static_assert(SPEC::ENABLE_OVERLAYS, "attach requires an overlay-enabled renderer specification");
522
+ using TI = typename SPEC::TI;
523
+ utils::assert_exit(device, camera < SPEC::NUM_CAMERAS, "attach: camera index out of range");
524
+ utils::assert_exit(device, overlay.index < SPEC::NUM_OVERLAYS, "attach: overlay index out of range");
525
+ constexpr TI INVALID = rendering::raytracing::Renderer<SPEC, BACKEND>::INVALID_OVERLAY;
526
+ TI* row = &renderer.attachments[camera * SPEC::MAX_OVERLAYS_PER_CAMERA];
527
+ TI free_slot = SPEC::MAX_OVERLAYS_PER_CAMERA;
528
+ for(TI slot = 0; slot < SPEC::MAX_OVERLAYS_PER_CAMERA; slot++){
529
+ if(row[slot] == (TI)overlay.index){
530
+ return; // a camera's attachments form a set: attach is idempotent
531
+ }
532
+ if(row[slot] == INVALID && free_slot == SPEC::MAX_OVERLAYS_PER_CAMERA){
533
+ free_slot = slot;
534
+ }
535
+ }
536
+ utils::assert_exit(device, free_slot < SPEC::MAX_OVERLAYS_PER_CAMERA, "attach: camera already holds MAX_OVERLAYS_PER_CAMERA overlays");
537
+ row[free_slot] = (TI)overlay.index;
538
+ renderer.attachments_dirty = true;
539
+ }
540
+
541
+ template <typename DEVICE, typename SPEC, typename BACKEND>
542
+ void detach(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, typename SPEC::TI camera, rendering::raytracing::OverlayIndex overlay){
543
+ static_assert(SPEC::ENABLE_OVERLAYS, "detach requires an overlay-enabled renderer specification");
544
+ utils::assert_exit(device, camera < SPEC::NUM_CAMERAS, "detach: camera index out of range");
545
+ utils::assert_exit(device, overlay.index < SPEC::NUM_OVERLAYS, "detach: overlay index out of range");
546
+ using TI = typename SPEC::TI;
547
+ TI* row = &renderer.attachments[camera * SPEC::MAX_OVERLAYS_PER_CAMERA];
548
+ for(TI slot = 0; slot < SPEC::MAX_OVERLAYS_PER_CAMERA; slot++){
549
+ if(row[slot] == (TI)overlay.index){
550
+ row[slot] = rendering::raytracing::Renderer<SPEC, BACKEND>::INVALID_OVERLAY;
551
+ renderer.attachments_dirty = true;
552
+ return;
553
+ }
554
+ }
555
+ }
556
+
557
+ template <typename DEVICE, typename SPEC, typename BACKEND>
558
+ rendering::raytracing::OverlayPlacement spawn(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, rendering::raytracing::AssetHandle asset, const float transform[12]){
559
+ static_assert(SPEC::ENABLE_OVERLAYS, "spawn requires an overlay-enabled renderer specification");
560
+ using TI = typename SPEC::TI;
561
+ if(overlay.index >= SPEC::NUM_OVERLAYS){
562
+ utils::assert_exit(device, false, "spawn: overlay index out of range");
563
+ return {0, 0, 0};
564
+ }
565
+ if(asset.index >= renderer.assets.size()){
566
+ utils::assert_exit(device, false, "spawn: asset handle out of range");
567
+ return {0, 0, 0};
568
+ }
569
+ auto& state = renderer.overlays[overlay.index];
570
+ const auto& record = renderer.assets[asset.index];
571
+
572
+ const TI first_slot = rendering::raytracing::detail::first_fit_slot<SPEC>(renderer, overlay.index, record.num_parts);
573
+ if(first_slot >= SPEC::MAX_OVERLAY_INSTANCES){
574
+ utils::assert_exit(device, false, "spawn: overlay capacity exceeded");
575
+ return {0, 0, 0};
576
+ }
577
+
578
+ for(TI part = 0; part < record.num_parts; part++){
579
+ auto& slot = state.slots[first_slot + part];
580
+ slot.object = renderer.asset_part_objects[record.first_part + part];
581
+ std::memcpy(slot.rest, &renderer.asset_part_transforms[(record.first_part + part) * 12], sizeof(slot.rest));
582
+ slot.active = true;
583
+ const size_t row = (size_t)overlay.index * SPEC::MAX_OVERLAY_INSTANCES + first_slot + part;
584
+ float world[12];
585
+ rendering::compose_transforms(transform, slot.rest, world);
586
+ rendering::raytracing::detail::stage_transform(renderer, row, world);
587
+ if constexpr (SPEC::HAS_FLOW_OVERLAYS){
588
+ rendering::raytracing::detail::stage_previous(renderer, row, world); // a fresh object has no motion of its own: pure camera flow
589
+ }
590
+ }
591
+ state.dirty = true;
592
+ return {(size_t)first_slot, (size_t)record.num_parts, (size_t)record.first_part};
593
+ }
594
+
595
+ template <typename DEVICE, typename SPEC, typename BACKEND>
596
+ void despawn(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement){
597
+ static_assert(SPEC::ENABLE_OVERLAYS, "despawn requires an overlay-enabled renderer specification");
598
+ rendering::raytracing::detail::assert_placement(device, renderer, overlay, placement);
599
+ auto& state = renderer.overlays[overlay.index];
600
+ for(size_t part = 0; part < placement.num_parts; part++){
601
+ state.slots[placement.first_slot + part].active = false;
602
+ }
603
+ state.dirty = true;
604
+ }
605
+
606
+ // swaps the asset occupying a placement in place: the same slots and ids, the new asset's
607
+ // objects and rest frames (nothing changes when the placement already holds it); the asset
608
+ // must have the placement's part count
609
+ template <typename DEVICE, typename SPEC, typename BACKEND>
610
+ rendering::raytracing::OverlayPlacement replace(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement, rendering::raytracing::AssetHandle asset){
611
+ static_assert(SPEC::ENABLE_OVERLAYS, "replace requires an overlay-enabled renderer specification");
612
+ rendering::raytracing::detail::assert_placement(device, renderer, overlay, placement);
613
+ if(asset.index >= renderer.assets.size() || renderer.assets[asset.index].num_parts != placement.num_parts){
614
+ utils::assert_exit(device, false, "replace: the asset must exist and have the placement's part count");
615
+ return placement;
616
+ }
617
+ const auto& record = renderer.assets[asset.index];
618
+ auto& state = renderer.overlays[overlay.index];
619
+ if(state.slots[placement.first_slot].object != renderer.asset_part_objects[record.first_part]){
620
+ for(size_t part = 0; part < placement.num_parts; part++){
621
+ auto& slot = state.slots[placement.first_slot + part];
622
+ slot.object = renderer.asset_part_objects[record.first_part + part];
623
+ std::memcpy(slot.rest, &renderer.asset_part_transforms[(record.first_part + part) * 12], sizeof(slot.rest));
624
+ }
625
+ state.dirty = true;
626
+ }
627
+ return {placement.first_slot, placement.num_parts, (size_t)record.first_part};
628
+ }
629
+
630
+ // poses: placement.num_parts geometry-to-world transforms (12 floats each) in asset part
631
+ // order — the output of rig::evaluate for the placement's assembly. Only the current instant
632
+ // changes: the flow pair advances through advance_flow (or spawn)
633
+ template <typename DEVICE, typename SPEC, typename BACKEND>
634
+ void set_transforms(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement, const float* poses){
635
+ static_assert(SPEC::ENABLE_OVERLAYS, "set_transforms requires an overlay-enabled renderer specification");
636
+ rendering::raytracing::detail::assert_placement(device, renderer, overlay, placement);
637
+ for(size_t part = 0; part < placement.num_parts; part++){
638
+ rendering::raytracing::detail::stage_transform(renderer, overlay.index * SPEC::MAX_OVERLAY_INSTANCES + placement.first_slot + part, poses + part * 12);
639
+ }
640
+ }
641
+
642
+ // samples: [MOTION_BLUR_SAMPLES][placement.num_parts][12] poses at the shutter times
643
+ // (sample + 0.5) / MOTION_BLUR_SAMPLES the camera lerp uses; close: [placement.num_parts][12]
644
+ // shutter-close poses, the steady state segmentation, probes and the next frame see — the
645
+ // output of rig::sample for the placement's assembly
646
+ template <typename DEVICE, typename SPEC, typename BACKEND>
647
+ void set_motion_transforms(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement, const float* samples, const float* close){
648
+ static_assert(SPEC::ENABLE_DYNAMIC_MOTION_BLUR, "set_motion_transforms requires a dynamic-motion-blur renderer specification");
649
+ rendering::raytracing::detail::assert_placement(device, renderer, overlay, placement);
650
+ for(size_t part = 0; part < placement.num_parts; part++){
651
+ rendering::raytracing::detail::stage_motion(renderer, overlay.index * SPEC::MAX_OVERLAY_INSTANCES + placement.first_slot + part, samples + part * 12, placement.num_parts * 12, close + part * 12);
652
+ }
653
+ }
654
+
655
+ // rigid move of the whole assembly: every part at pose ∘ rest
656
+ template <typename DEVICE, typename SPEC, typename BACKEND>
657
+ void set_transform(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement, const float pose[12]){
658
+ static_assert(SPEC::ENABLE_OVERLAYS, "set_transform requires an overlay-enabled renderer specification");
659
+ rendering::raytracing::detail::assert_placement(device, renderer, overlay, placement);
660
+ const auto& state = renderer.overlays[overlay.index];
661
+ for(size_t part = 0; part < placement.num_parts; part++){
662
+ float world[12];
663
+ rendering::compose_transforms(pose, state.slots[placement.first_slot + part].rest, world);
664
+ rendering::raytracing::detail::stage_transform(renderer, overlay.index * SPEC::MAX_OVERLAY_INSTANCES + placement.first_slot + part, world);
665
+ }
666
+ }
667
+
668
+ // rigid move with shutter-open/close poses: constant-twist interpolation of the assembly pose
669
+ // into every motion sample, the close pose as the steady state
670
+ template <typename DEVICE, typename SPEC, typename BACKEND>
671
+ void set_transform_pair(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, rendering::raytracing::OverlayIndex overlay, const rendering::raytracing::OverlayPlacement& placement, const float open[12], const float close[12]){
672
+ static_assert(SPEC::ENABLE_DYNAMIC_MOTION_BLUR, "set_transform_pair requires a dynamic-motion-blur renderer specification");
673
+ rendering::raytracing::detail::assert_placement(device, renderer, overlay, placement);
674
+ float poses[SPEC::MOTION_BLUR_SAMPLES][12];
675
+ for(size_t sample = 0; sample < SPEC::MOTION_BLUR_SAMPLES; sample++){
676
+ rendering::screw_interpolate(open, close, ((float)sample + 0.5f) / (float)SPEC::MOTION_BLUR_SAMPLES, poses[sample]);
677
+ }
678
+ const auto& state = renderer.overlays[overlay.index];
679
+ for(size_t part = 0; part < placement.num_parts; part++){
680
+ const float* rest = state.slots[placement.first_slot + part].rest;
681
+ float samples[SPEC::MOTION_BLUR_SAMPLES][12], world_close[12];
682
+ for(size_t sample = 0; sample < SPEC::MOTION_BLUR_SAMPLES; sample++){
683
+ rendering::compose_transforms(poses[sample], rest, samples[sample]);
684
+ }
685
+ rendering::compose_transforms(close, rest, world_close);
686
+ rendering::raytracing::detail::stage_motion(renderer, overlay.index * SPEC::MAX_OVERLAY_INSTANCES + placement.first_slot + part, &samples[0][0], 12, world_close);
687
+ }
688
+ }
689
+
690
+ template <typename DEVICE, typename SPEC, typename BACKEND>
691
+ auto& transforms(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
692
+ static_assert(SPEC::ENABLE_OVERLAYS, "transforms requires an overlay-enabled renderer specification");
693
+ return renderer.transforms;
694
+ }
695
+
696
+ // the previous instant's overlay poses (flow): producer input under the transforms()
697
+ // ownership contract, snapshotted from transforms by advance_flow
698
+ template <typename DEVICE, typename SPEC, typename BACKEND>
699
+ auto& transforms_previous(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
700
+ static_assert(SPEC::HAS_FLOW_OVERLAYS, "transforms_previous requires a flow renderer specification with overlays");
701
+ return renderer.transforms_previous;
702
+ }
703
+
704
+ template <typename DEVICE, typename SPEC, typename BACKEND>
705
+ auto& transforms_motion(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
706
+ static_assert(SPEC::ENABLE_DYNAMIC_MOTION_BLUR, "transforms_motion requires a dynamic-motion-blur renderer specification");
707
+ return renderer.transforms_motion;
708
+ }
709
+
710
+ // camera input tensors, backend-native residency like transforms: device memory on OptiX,
711
+ // host on generic, shared/mapped on Metal/Vulkan. Producers write them via rlt::copy or
712
+ // kernels; the launch verbs consume them directly. Under motion blur the pair is
713
+ // cameras_open (shutter open) and cameras_close (shutter close, aliasing cameras) — both
714
+ // must be written each step (identical values for a blur-free frame). Under flow,
715
+ // cameras_previous holds the previous instant (snapshotted from cameras by advance_flow).
716
+ template <typename DEVICE, typename SPEC, typename BACKEND>
717
+ auto& cameras(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
718
+ return renderer.cameras;
719
+ }
720
+
721
+ template <typename DEVICE, typename SPEC, typename BACKEND>
722
+ auto& cameras_open(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
723
+ static_assert(SPEC::HAS_CAMERA_PAIR, "cameras_open requires a motion-blur renderer specification");
724
+ return renderer.cameras_open;
725
+ }
726
+
727
+ template <typename DEVICE, typename SPEC, typename BACKEND>
728
+ auto& cameras_close(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
729
+ static_assert(SPEC::HAS_CAMERA_PAIR, "cameras_close requires a motion-blur renderer specification");
730
+ return renderer.cameras;
731
+ }
732
+
733
+ template <typename DEVICE, typename SPEC, typename BACKEND>
734
+ auto& cameras_previous(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
735
+ static_assert(SPEC::HAS_FLOW, "cameras_previous requires a flow-capable renderer specification");
736
+ return renderer.cameras_previous;
737
+ }
738
+
739
+ // output tensors, same backend-native residency as the inputs: consumers on the device read
740
+ // them in place (zero-copy); host readers stage through a memory-domain copy at readback
741
+ // boundaries — copy(renderer.device, device, ...) — which orders itself after the
742
+ // renderer's in-flight work
743
+ template <typename DEVICE, typename SPEC, typename BACKEND>
744
+ auto& frame_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
745
+ static_assert(SPEC::HAS_RGB, "frame_buffer requires an RGB-capable renderer specification");
746
+ return renderer.frame_buffer;
747
+ }
748
+
749
+ template <typename DEVICE, typename SPEC, typename BACKEND>
750
+ auto& depth_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
751
+ static_assert(SPEC::HAS_DEPTH, "depth_buffer requires a depth-capable renderer specification");
752
+ return renderer.depth_buffer;
753
+ }
754
+
755
+ template <typename DEVICE, typename SPEC, typename BACKEND>
756
+ auto& segmentation_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
757
+ static_assert(SPEC::HAS_SEGMENTATION, "segmentation_buffer requires a segmentation-capable renderer specification");
758
+ return renderer.segmentation_buffer;
759
+ }
760
+
761
+ template <typename DEVICE, typename SPEC, typename BACKEND>
762
+ auto& normals_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
763
+ static_assert(SPEC::HAS_NORMALS, "normals_buffer requires a normals-capable renderer specification");
764
+ return renderer.normals_buffer;
765
+ }
766
+
767
+ // flow on the current grid: p_previous - p_current in pixels, with a FlowStatus per pixel
768
+ template <typename DEVICE, typename SPEC, typename BACKEND>
769
+ auto& flow_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
770
+ static_assert(SPEC::HAS_FLOW, "flow_buffer requires a flow-capable renderer specification");
771
+ return renderer.flow_buffer;
772
+ }
773
+
774
+ template <typename DEVICE, typename SPEC, typename BACKEND>
775
+ auto& flow_status_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
776
+ static_assert(SPEC::HAS_FLOW, "flow_status_buffer requires a flow-capable renderer specification");
777
+ return renderer.flow_status_buffer;
778
+ }
779
+
780
+ // forward flow on the previous grid: q_current - q_previous in pixels, with a FlowStatus per pixel
781
+ template <typename DEVICE, typename SPEC, typename BACKEND>
782
+ auto& flow_forward_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
783
+ static_assert(SPEC::HAS_FLOW_FORWARD, "flow_forward_buffer requires OUTPUT_FLOW_FORWARD in the renderer specification");
784
+ return renderer.flow_forward_buffer;
785
+ }
786
+
787
+ template <typename DEVICE, typename SPEC, typename BACKEND>
788
+ auto& flow_forward_status_buffer(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
789
+ static_assert(SPEC::HAS_FLOW_FORWARD, "flow_forward_status_buffer requires OUTPUT_FLOW_FORWARD in the renderer specification");
790
+ return renderer.flow_forward_status_buffer;
791
+ }
792
+
793
+ template <typename DEVICE, typename SPEC, typename BACKEND>
794
+ auto& collision_results(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
795
+ return renderer.collision_results;
796
+ }
797
+
798
+ template <typename DEVICE, typename SPEC, typename BACKEND>
799
+ auto& observation(DEVICE& device, rendering::raytracing::Renderer<SPEC, BACKEND>& renderer){
800
+ static_assert(SPEC::HAS_OBSERVATION, "observation requires OUTPUT_OBSERVATION in the renderer specification");
801
+ return renderer.observation;
802
+ }
803
+
804
+ // decodes a rendered segmentation id back to the object it references. Single owner of the
805
+ // global id layout: scene instances occupy [0, S); overlay o's slot s sits at S + o*CAP + s;
806
+ // object indices count scene objects first, then each pool assembly's objects in
807
+ // registration order. Returns nullptr for the miss sentinel and out-of-range ids.
808
+ // This layout is cross-backend API surface: the generic flat instance array, Metal's user-ID
809
+ // descriptors, and OptiX's user instance ids all realize it identically, and segmentation
810
+ // consumers depend on that equivalence — treat any change to it as breaking.
811
+ template <typename DEVICE, typename SPEC, typename BACKEND>
812
+ const rendering::raytracing::Object* segmentation_object(DEVICE& device, const rendering::raytracing::Scene& scene, const rendering::raytracing::AssetPool& pool, const rendering::raytracing::Renderer<SPEC, BACKEND>& renderer, uint32_t id){
813
+ static_assert(!SPEC::SEMANTIC_SEGMENTATION, "segmentation_object expects instance IDs, not semantic class IDs");
814
+ if(id == 0xFFFFFFFFu){
815
+ return nullptr;
816
+ }
817
+ if(id < scene.instances.size()){
818
+ return &scene.objects[scene.instances[id].object];
819
+ }
820
+ if constexpr (SPEC::ENABLE_OVERLAYS){
821
+ const size_t relative = id - scene.instances.size();
822
+ const size_t overlay = relative / SPEC::MAX_OVERLAY_INSTANCES;
823
+ const size_t slot = relative % SPEC::MAX_OVERLAY_INSTANCES;
824
+ if(overlay >= SPEC::NUM_OVERLAYS){
825
+ return nullptr;
826
+ }
827
+ size_t object = renderer.overlays[overlay].slots[slot].object;
828
+ if(object < scene.objects.size()){
829
+ return &scene.objects[object];
830
+ }
831
+ object -= scene.objects.size();
832
+ for(const auto& assembly : pool.assemblies){
833
+ if(object < assembly.objects.size()){
834
+ return &assembly.objects[object];
835
+ }
836
+ object -= assembly.objects.size();
837
+ }
838
+ }
839
+ return nullptr;
840
+ }
841
+
842
+ inline void make_transform(const float position[3], const float orientation_wxyz[4], float out[12]){
843
+ const float w = orientation_wxyz[0], x = orientation_wxyz[1], y = orientation_wxyz[2], z = orientation_wxyz[3];
844
+ out[0] = 1 - 2*(y*y + z*z); out[1] = 2*(x*y - w*z); out[2] = 2*(x*z + w*y); out[3] = position[0];
845
+ out[4] = 2*(x*y + w*z); out[5] = 1 - 2*(x*x + z*z); out[6] = 2*(y*z - w*x); out[7] = position[1];
846
+ out[8] = 2*(x*z - w*y); out[9] = 2*(y*z + w*x); out[10] = 1 - 2*(x*x + y*y); out[11] = position[2];
847
+ }
848
+
849
+ inline void compose_transforms(const float a[12], const float b[12], float out[12]){
850
+ rendering::raytracing::detail::compose_transforms(a, b, out);
851
+ }
852
+
853
+
854
+ namespace rendering::raytracing::detail{
855
+ template <typename SPEC, typename DEVICE>
856
+ std::vector<float> generate_probe_direction_vectors(DEVICE& device){
857
+ std::vector<float> dirs;
858
+ dirs.reserve(SPEC::NUM_PROBES * 3);
859
+
860
+ const float golden_ratio = (1.0f + sqrtf(5.0f)) / 2.0f;
861
+
862
+ for(int i = 0; i < (int)SPEC::NUM_PROBES; i++){
863
+ float theta = 2.0f * (float)M_PI * i / golden_ratio;
864
+ float cos_inc = 1.0f - 2.0f * (i + 0.5f) / SPEC::NUM_PROBES;
865
+ float sin_inc = sqrtf(1.0f - cos_inc * cos_inc);
866
+
867
+ const float dir[3] = {sin_inc * cosf(theta), sin_inc * sinf(theta), cos_inc};
868
+ const float inv_len = 1.0f / sqrtf(dir[0]*dir[0] + dir[1]*dir[1] + dir[2]*dir[2]);
869
+ dirs.push_back(dir[0] * inv_len);
870
+ dirs.push_back(dir[1] * inv_len);
871
+ dirs.push_back(dir[2] * inv_len);
872
+ }
873
+
874
+ log(device, device.logger, devices::logging::Verbosity::debug, rendering::raytracing::LOG_PREFIX, "Generated ", SPEC::NUM_PROBES, " probe directions per camera");
875
+ return dirs;
876
+ }
877
+
878
+ // one distinct color per instance id (golden-ratio hue hash); miss sentinel renders black
879
+ inline uint32_t segmentation_id_to_rgba(uint32_t id){
880
+ if(id == 0xFFFFFFFFu){
881
+ return 0xFF000000u;
882
+ }
883
+ const float scaled = (float)id * 0.61803398875f;
884
+ const float hue = (scaled - std::floor(scaled)) * 6.0f;
885
+ const float descending = 1.0f - std::fabs((hue - 2.0f * std::floor(hue * 0.5f)) - 1.0f);
886
+ float r = 0, g = 0, b = 0;
887
+ switch((int)hue){
888
+ case 0: r = 1; g = descending; break;
889
+ case 1: r = descending; g = 1; break;
890
+ case 2: g = 1; b = descending; break;
891
+ case 3: g = descending; b = 1; break;
892
+ case 4: r = descending; b = 1; break;
893
+ default: r = 1; b = descending; break;
894
+ }
895
+ return 0xFF000000u | ((uint32_t)(b * 255) << 16) | ((uint32_t)(g * 255) << 8) | (uint32_t)(r * 255);
896
+ }
897
+ // pinned normals encoding, the single owner shared by save verbs and the golden corpus:
898
+ // each component maps through round((clamp(n, -1, 1) * 0.5 + 0.5) * 255). The miss value
899
+ // (0,0,0) encodes to (128,128,128), which no unit normal can reach (a unit vector has a
900
+ // component of magnitude >= 1/sqrt(3)). The double bias preserves float values immediately below a half-integer.
901
+ inline uint32_t normal_to_rgba(const float normal[3]){
902
+ uint32_t rgba = 0xFF000000u;
903
+ for(int component = 0; component < 3; component++){
904
+ const float clamped = fminf(fmaxf(normal[component], -1.f), 1.f);
905
+ const uint32_t value = (uint32_t)((double)((clamped * 0.5f + 0.5f) * 255.f) + 0.5);
906
+ rgba |= value << (8 * component);
907
+ }
908
+ return rgba;
909
+ }
910
+ // pinned flow-status false colour shared by the save verbs and the golden corpus (ABGR
911
+ // packed like the frame buffer): VALID white, MISS black, BEHIND magenta, OUT_OF_FRAME
912
+ // blue, OCCLUDED orange; unknown codes red
913
+ // direction -> hue, magnitude -> saturation against magnitude_scale (pixels); the review
914
+ // writers pass the per-image maximum, live viewers a fixed scale so the image does not flicker
915
+ inline uint32_t flow_to_rgba(float u, float v, float magnitude_scale){
916
+ constexpr float TWO_PI = 6.28318530717958647692f;
917
+ const float magnitude = std::sqrt(u * u + v * v);
918
+ const float saturation = magnitude_scale > 0 ? std::fmin(magnitude / magnitude_scale, 1.f) : 0.f;
919
+ const float hue = (std::atan2(v, u) / TWO_PI + 0.5f) * 6.f;
920
+ const float descending = 1.f - std::fabs((hue - 2.f * std::floor(hue * 0.5f)) - 1.f);
921
+ float red = 0, green = 0, blue = 0;
922
+ switch((int)hue % 6){
923
+ case 0: red = 1; green = descending; break;
924
+ case 1: red = descending; green = 1; break;
925
+ case 2: green = 1; blue = descending; break;
926
+ case 3: green = descending; blue = 1; break;
927
+ case 4: red = descending; blue = 1; break;
928
+ default: red = 1; blue = descending; break;
929
+ }
930
+ const auto channel = [&](float value){ return (uint32_t)((1.f - saturation * (1.f - value)) * 255.f); };
931
+ return 0xFF000000u | (channel(blue) << 16) | (channel(green) << 8) | channel(red);
932
+ }
933
+
934
+ inline uint32_t flow_status_to_rgba(uint32_t status){
935
+ switch(status){
936
+ case FlowStatus::VALID: return 0xFFFFFFFFu;
937
+ case FlowStatus::MISS: return 0xFF000000u;
938
+ case FlowStatus::BEHIND: return 0xFFFF00FFu;
939
+ case FlowStatus::OUT_OF_FRAME: return 0xFFFF4020u;
940
+ case FlowStatus::OCCLUDED: return 0xFF0090FFu;
941
+ default: return 0xFF0000FFu;
942
+ }
943
+ }
944
+ }
945
+ }
946
+ RL_TOOLS_NAMESPACE_WRAPPER_END
947
+
948
+ #endif