ernie-renderer 0.2.0.dev13__tar.gz → 0.2.0.dev19__tar.gz

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.

Potentially problematic release.


This version of ernie-renderer might be problematic. Click here for more details.

Files changed (226) hide show
  1. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.github/workflows/ci.yml +28 -3
  2. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/CMakeLists.txt +24 -4
  3. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/CMakePresets.json +1 -0
  4. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/Dockerfile +4 -1
  5. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/PKG-INFO +1 -1
  6. ernie_renderer-0.2.0.dev19/benchmarks/CMakeLists.txt +3 -0
  7. ernie_renderer-0.2.0.dev19/benchmarks/bench.h +52 -0
  8. ernie_renderer-0.2.0.dev19/benchmarks/main.cpp +22 -0
  9. ernie_renderer-0.2.0.dev19/benchmarks/scene_storage.cpp +118 -0
  10. ernie_renderer-0.2.0.dev19/cmake/ErnieConfig.cmake.in +26 -0
  11. ernie_renderer-0.2.0.dev19/cmake/ErnieInstall.cmake +123 -0
  12. ernie_renderer-0.2.0.dev19/cmake/ErniePackaging.cmake +57 -0
  13. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/ErnieTesting.cmake +1 -1
  14. ernie_renderer-0.2.0.dev19/cmake/ernie.pc.in +10 -0
  15. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/glm.cmake +2 -1
  16. ernie_renderer-0.2.0.dev19/ernie/CMakeLists.txt +66 -0
  17. ernie_renderer-0.2.0.dev19/ernie/app/CMakeLists.txt +5 -0
  18. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/device/CMakeLists.txt +1 -1
  19. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/CMakeLists.txt +1 -1
  20. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/ies.h +7 -5
  21. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/image.cpp +1 -1
  22. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/image.h +14 -12
  23. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/nanovdb.cpp +1 -1
  24. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/raster.cpp +1 -1
  25. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/raster.h +30 -26
  26. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/texture.cpp +1 -1
  27. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/texture.h +30 -24
  28. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/CMakeLists.txt +1 -1
  29. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/cloud.cpp +1 -2
  30. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/regolith.cpp +1 -1
  31. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/python/CMakeLists.txt +1 -1
  32. ernie_renderer-0.2.0.dev19/ernie/scene/CMakeLists.txt +3 -0
  33. ernie_renderer-0.2.0.dev19/ernie/scene/path.cpp +193 -0
  34. ernie_renderer-0.2.0.dev19/ernie/scene/path.h +152 -0
  35. ernie_renderer-0.2.0.dev19/ernie/scene/storage.cpp +235 -0
  36. ernie_renderer-0.2.0.dev19/ernie/scene/storage.h +408 -0
  37. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/CMakeLists.txt +6 -4
  38. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/bytes.h +51 -1
  39. ernie_renderer-0.2.0.dev13/ernie/util/mapped_file.cpp → ernie_renderer-0.2.0.dev19/ernie/util/file.cpp +35 -6
  40. ernie_renderer-0.2.0.dev19/ernie/util/file.h +57 -0
  41. ernie_renderer-0.2.0.dev19/ernie/util/glm.h +19 -0
  42. ernie_renderer-0.2.0.dev19/ernie/util/hash_index.h +103 -0
  43. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/log.h +6 -4
  44. ernie_renderer-0.2.0.dev13/ernie/util/profile_report.cpp → ernie_renderer-0.2.0.dev19/ernie/util/profiler.cpp +186 -3
  45. ernie_renderer-0.2.0.dev19/ernie/util/profiler.h +264 -0
  46. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/random.h +18 -4
  47. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/tensor.h +8 -5
  48. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/text.h +15 -0
  49. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/version.h +6 -4
  50. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/worker_pool.h +1 -1
  51. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/CMakeLists.txt +11 -7
  52. ernie_renderer-0.2.0.dev19/tests/common.h +33 -0
  53. ernie_renderer-0.2.0.dev19/tests/consumer/CMakeLists.txt +30 -0
  54. ernie_renderer-0.2.0.dev19/tests/consumer/main.cpp +20 -0
  55. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/io/ies_test.cpp +6 -4
  56. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/io/image_test.cpp +4 -3
  57. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/io/nanovdb_test.cpp +10 -11
  58. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/io/raster_test.cpp +50 -55
  59. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/io/texture_test.cpp +10 -10
  60. ernie_renderer-0.2.0.dev19/tests/scene/path_test.cpp +93 -0
  61. ernie_renderer-0.2.0.dev19/tests/scene/storage_test.cpp +157 -0
  62. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/bytes_test.cpp +16 -0
  63. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/disk_cache_test.cpp +3 -2
  64. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/file_test.cpp +31 -3
  65. ernie_renderer-0.2.0.dev19/tests/util/hash_index_test.cpp +50 -0
  66. ernie_renderer-0.2.0.dev13/tests/util/profile_report_test.cpp → ernie_renderer-0.2.0.dev19/tests/util/profiler_test.cpp +57 -6
  67. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/text_test.cpp +9 -0
  68. ernie_renderer-0.2.0.dev13/cmake/ErniePackaging.cmake +0 -38
  69. ernie_renderer-0.2.0.dev13/ernie/CMakeLists.txt +0 -21
  70. ernie_renderer-0.2.0.dev13/ernie/app/CMakeLists.txt +0 -5
  71. ernie_renderer-0.2.0.dev13/ernie/scene/CMakeLists.txt +0 -3
  72. ernie_renderer-0.2.0.dev13/ernie/util/file.cpp +0 -40
  73. ernie_renderer-0.2.0.dev13/ernie/util/file.h +0 -26
  74. ernie_renderer-0.2.0.dev13/ernie/util/mapped_file.h +0 -39
  75. ernie_renderer-0.2.0.dev13/ernie/util/profile.h +0 -45
  76. ernie_renderer-0.2.0.dev13/ernie/util/profile_report.h +0 -110
  77. ernie_renderer-0.2.0.dev13/ernie/util/profiler.cpp +0 -189
  78. ernie_renderer-0.2.0.dev13/ernie/util/profiler.h +0 -125
  79. ernie_renderer-0.2.0.dev13/tests/util/mapped_file_test.cpp +0 -50
  80. ernie_renderer-0.2.0.dev13/tests/util/profiler_test.cpp +0 -62
  81. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.clang-format +0 -0
  82. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.clang-tidy +0 -0
  83. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.dockerignore +0 -0
  84. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.gersemirc +0 -0
  85. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.gitattributes +0 -0
  86. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.github/scripts/coverage_badge.py +0 -0
  87. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.github/scripts/install-lavapipe-windows.sh +0 -0
  88. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.gitignore +0 -0
  89. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/.pre-commit-config.yaml +0 -0
  90. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/LICENSE +0 -0
  91. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/README.md +0 -0
  92. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/ErnieFetch.cmake +0 -0
  93. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/bc7enc.cmake +0 -0
  94. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/dlpack.cmake +0 -0
  95. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/googletest.cmake +0 -0
  96. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/json.cmake +0 -0
  97. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/nanobind.cmake +0 -0
  98. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/openexr.cmake +0 -0
  99. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/stb.cmake +0 -0
  100. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/tracy.cmake +0 -0
  101. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/volk.cmake +0 -0
  102. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/cmake/third_party/vulkan_headers.cmake +0 -0
  103. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/docs/README.md +0 -0
  104. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/docs/index.md +0 -0
  105. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/docs/requirements.txt +0 -0
  106. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/app/main.cpp +0 -0
  107. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/device/vulkan_devices.cpp +0 -0
  108. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/device/vulkan_devices.h +0 -0
  109. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/graph/CMakeLists.txt +0 -0
  110. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/ies.cpp +0 -0
  111. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/io/nanovdb.h +0 -0
  112. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/astronomy.cpp +0 -0
  113. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/astronomy.h +0 -0
  114. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/atmosphere.cpp +0 -0
  115. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/atmosphere.h +0 -0
  116. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/cloud.h +0 -0
  117. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/constants.h +0 -0
  118. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/reflectance_library.cpp +0 -0
  119. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/reflectance_library.h +0 -0
  120. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/reflectance_table.h +0 -0
  121. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/regolith.h +0 -0
  122. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/scattering.cpp +0 -0
  123. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/scattering.h +0 -0
  124. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/solar.cpp +0 -0
  125. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/solar.h +0 -0
  126. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/solar_table.h +0 -0
  127. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/spectrum.cpp +0 -0
  128. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/physics/spectrum.h +0 -0
  129. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/python/ernie/__init__.py +0 -0
  130. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/python/module.cpp +0 -0
  131. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/render/CMakeLists.txt +0 -0
  132. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/disk_cache.cpp +0 -0
  133. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/disk_cache.h +0 -0
  134. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/linear_algebra.h +0 -0
  135. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/log.cpp +0 -0
  136. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/math.h +0 -0
  137. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/noise.cpp +0 -0
  138. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/noise.h +0 -0
  139. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/numbers.h +0 -0
  140. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/parallel.h +0 -0
  141. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/tensor.cpp +0 -0
  142. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/ernie/util/version.cpp +0 -0
  143. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/mkdocs.yml +0 -0
  144. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/pyproject.toml +0 -0
  145. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/device/vulkan_devices_test.cpp +0 -0
  146. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/exr/README.md +0 -0
  147. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/exr/make_exr.py +0 -0
  148. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
  149. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/exr/rgba_half_window.exr +0 -0
  150. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/exr/y_half_zips.exr +0 -0
  151. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ies/README.md +0 -0
  152. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
  153. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
  154. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ies/lamp.tilt +0 -0
  155. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/images/grey16.png +0 -0
  156. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ktx2/README.md +0 -0
  157. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
  158. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
  159. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
  160. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
  161. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/README.md +0 -0
  162. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
  163. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/float_raw.tif +0 -0
  164. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
  165. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
  166. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
  167. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
  168. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
  169. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/volumes/cube.nvdb +0 -0
  170. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/fixtures/volumes/make_nvdb.py +0 -0
  171. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/astronomy_test.cpp +0 -0
  172. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/atmosphere_test.cpp +0 -0
  173. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/cloud_test.cpp +0 -0
  174. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/reflectance_library_test.cpp +0 -0
  175. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/regolith_test.cpp +0 -0
  176. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/scattering_test.cpp +0 -0
  177. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/solar_test.cpp +0 -0
  178. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/physics/spectrum_test.cpp +0 -0
  179. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/python/test_package.py +0 -0
  180. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/linear_algebra_test.cpp +0 -0
  181. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/log_test.cpp +0 -0
  182. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/math_test.cpp +0 -0
  183. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/noise_test.cpp +0 -0
  184. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/parallel_test.cpp +0 -0
  185. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/random_test.cpp +0 -0
  186. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/tensor_test.cpp +0 -0
  187. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/version_test.cpp +0 -0
  188. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/tests/util/worker_pool_test.cpp +0 -0
  189. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/CMakeLists.txt +0 -0
  190. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/LICENSE +0 -0
  191. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
  192. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
  193. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/LICENSES/MIT.txt +0 -0
  194. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/NOTICE +0 -0
  195. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/README.md +0 -0
  196. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu.h +0 -0
  197. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
  198. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
  199. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
  200. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_containers.h +0 -0
  201. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
  202. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
  203. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
  204. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
  205. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_idct.h +0 -0
  206. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
  207. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
  208. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
  209. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
  210. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
  211. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
  212. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
  213. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
  214. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
  215. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
  216. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
  217. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
  218. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
  219. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
  220. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
  221. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
  222. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/zstd/LICENSE +0 -0
  223. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/zstd/zstd.h +0 -0
  224. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/basisu/zstd/zstd_errors.h +0 -0
  225. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/nanovdb/LICENSE +0 -0
  226. {ernie_renderer-0.2.0.dev13 → ernie_renderer-0.2.0.dev19}/third_party/nanovdb/PNanoVDB.h +0 -0
@@ -95,6 +95,18 @@ jobs:
95
95
  -DERNIE_TEST_PYTHON=python
96
96
  - name: Build
97
97
  run: cmake --build --preset ci --parallel 4
98
+ # The installed library used as end users use it: its headers compile alone and a program
99
+ # links and runs against it. Windows finds ernie.dll on the PATH.
100
+ - name: Install and build a consumer
101
+ shell: bash
102
+ run: |
103
+ prefix="$RUNNER_TEMP/ernie"
104
+ cmake --install build/ci --prefix "$prefix" --component runtime
105
+ cmake --install build/ci --prefix "$prefix" --component dev
106
+ cmake -S tests/consumer -B build/consumer -G Ninja -DCMAKE_BUILD_TYPE=Release \
107
+ "-DCMAKE_PREFIX_PATH=$prefix"
108
+ cmake --build build/consumer
109
+ PATH="$prefix/bin:$PATH" ctest --test-dir build/consumer --output-on-failure
98
110
  # The build tree without objects, for this platform's test job; tar keeps file modes.
99
111
  - name: Pack the build tree
100
112
  shell: bash
@@ -334,11 +346,16 @@ jobs:
334
346
  run: |
335
347
  dnf install -y -q rpm-build
336
348
  command -v ninja >/dev/null || pipx install -q ninja
349
+ # One build; each format installs the library where its distributions look for it, as the
350
+ # build image (RHEL's lib64) is not where Debian and Ubuntu look.
337
351
  - name: Build
338
352
  run: |
339
353
  cmake --preset package
340
354
  cmake --build --preset package --parallel 4
341
- cd build/package && cpack -G "DEB;RPM;TGZ"
355
+ cd build/package
356
+ cmake "-DCMAKE_INSTALL_LIBDIR=lib/$(uname -m)-linux-gnu" . && cpack -G DEB
357
+ cmake -DCMAKE_INSTALL_LIBDIR=lib64 . && cpack -G RPM
358
+ cmake -DCMAKE_INSTALL_LIBDIR=lib . && cpack -G TGZ
342
359
  - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
343
360
  with:
344
361
  name: packages-linux-${{ matrix.arch }}
@@ -360,6 +377,8 @@ jobs:
360
377
  image: ["ubuntu:22.04", "ubuntu:24.04", "debian:12", "rockylinux/rockylinux:9"]
361
378
  container: ${{ matrix.image }}
362
379
  steps:
380
+ # The consumer project; checked out first, as checkout clears the workspace.
381
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
363
382
  - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
364
383
  with:
365
384
  name: packages-linux-${{ matrix.arch }}
@@ -367,10 +386,16 @@ jobs:
367
386
  if: ${{ !startsWith(matrix.image, 'rockylinux') }}
368
387
  run: |
369
388
  apt-get update
370
- apt-get install -y --no-install-recommends ./*.deb mesa-vulkan-drivers
389
+ apt-get install -y --no-install-recommends ./*.deb mesa-vulkan-drivers cmake g++ make
371
390
  - name: Install
372
391
  if: ${{ startsWith(matrix.image, 'rockylinux') }}
373
- run: dnf install -y ./*.rpm
392
+ run: dnf install -y ./*.rpm cmake gcc-c++ make
393
+ # The -dev package used as end users use it, with the distribution's own compiler and CMake.
394
+ - name: Build a consumer
395
+ run: |
396
+ cmake -S tests/consumer -B /tmp/consumer -DCMAKE_BUILD_TYPE=Release
397
+ cmake --build /tmp/consumer
398
+ ctest --test-dir /tmp/consumer --output-on-failure
374
399
  # Rocky 9 has no lavapipe for aarch64, so there the program is only run, not given a device.
375
400
  - name: Install lavapipe
376
401
  if: ${{ startsWith(matrix.image, 'rockylinux') && matrix.arch == 'x86_64' }}
@@ -10,20 +10,26 @@ project(
10
10
  VERSION 0.2.0
11
11
  DESCRIPTION
12
12
  "Efficient Renderer for Natural and Interplanetary Environments: a spectral Vulkan ray tracer"
13
+ HOMEPAGE_URL "https://github.com/alexmaietta/ernie"
13
14
  LANGUAGES C CXX
14
15
  )
15
16
 
16
17
  # Pre-release suffix such as .dev12, written by CI.
17
- set(ERNIE_VERSION_SUFFIX ".dev13" CACHE STRING "Pre-release suffix of Ernie's version")
18
+ set(ERNIE_VERSION_SUFFIX ".dev19" CACHE STRING "Pre-release suffix of Ernie's version")
18
19
  set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
19
20
 
20
21
  option(ERNIE_BUILD_TESTS "Build Ernie's tests" OFF)
22
+ option(ERNIE_BUILD_BENCHMARKS "Build Ernie's benchmarks" OFF)
21
23
  option(ERNIE_BUILD_PYTHON "Build Ernie's Python module" OFF)
22
24
  option(ERNIE_BUILD_APP "Build the ernie program" ON)
23
25
  option(ERNIE_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF)
24
26
  option(ERNIE_ASSERTS "Keep assertions in optimised builds" OFF)
25
27
  option(ERNIE_TRACY "Send profiling zones to the Tracy profiler too" OFF)
26
28
  option(ERNIE_COVERAGE "Instrument Ernie for code coverage (GCC or Clang)" OFF)
29
+ option(ERNIE_INSTALL "Install libernie for C++ consumers" ${PROJECT_IS_TOP_LEVEL})
30
+
31
+ set(CMAKE_INSTALL_DOCDIR "share/doc/ernie" CACHE PATH "Documentation and licences")
32
+ include(GNUInstallDirs)
27
33
 
28
34
  get_property(ernie_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
29
35
  if(PROJECT_IS_TOP_LEVEL AND NOT ernie_multi_config AND NOT CMAKE_BUILD_TYPE)
@@ -36,9 +42,13 @@ set(CMAKE_CXX_EXTENSIONS OFF)
36
42
  set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
37
43
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
38
44
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
39
- if(ERNIE_BUILD_PYTHON)
40
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
41
- endif()
45
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
46
+ # Every object goes into the shared library too, and only its public API leaves it: symbols are
47
+ # hidden unless marked ERNIE_API, including those of the dependencies built here.
48
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
49
+ set(CMAKE_C_VISIBILITY_PRESET hidden)
50
+ set(CMAKE_CXX_VISIBILITY_PRESET hidden)
51
+ set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
42
52
 
43
53
  include(cmake/ErnieFetch.cmake)
44
54
  include(cmake/third_party/glm.cmake)
@@ -53,6 +63,10 @@ include(cmake/third_party/volk.cmake)
53
63
  add_subdirectory(third_party)
54
64
 
55
65
  add_library(ernie_build_options INTERFACE)
66
+ # All of Ernie's own code is built as the shared library's (ernie_EXPORTS), so ERNIE_API exports
67
+ # there and is harmless in the static library. glm's configuration stays inside Ernie: it changes
68
+ # no layout, but consumers' own glm calls must not see it.
69
+ target_compile_definitions(ernie_build_options INTERFACE ernie_EXPORTS GLM_FORCE_DEPTH_ZERO_TO_ONE)
56
70
  if(MSVC)
57
71
  target_compile_options(ernie_build_options INTERFACE /W4 /permissive- /Zc:__cplusplus /utf-8)
58
72
  # The CRT's "unsafe function" deprecations (getenv, fopen) would fail warnings-as-errors builds.
@@ -89,11 +103,17 @@ if(ERNIE_COVERAGE)
89
103
  endif()
90
104
 
91
105
  add_subdirectory(ernie)
106
+ if(ERNIE_INSTALL)
107
+ include(cmake/ErnieInstall.cmake)
108
+ endif()
92
109
 
93
110
  if(ERNIE_BUILD_TESTS)
94
111
  enable_testing()
95
112
  add_subdirectory(tests)
96
113
  endif()
114
+ if(ERNIE_BUILD_BENCHMARKS)
115
+ add_subdirectory(benchmarks)
116
+ endif()
97
117
 
98
118
  if(PROJECT_IS_TOP_LEVEL AND NOT SKBUILD)
99
119
  include(cmake/ErniePackaging.cmake)
@@ -15,6 +15,7 @@
15
15
  "cacheVariables": {
16
16
  "CMAKE_BUILD_TYPE": "RelWithDebInfo",
17
17
  "ERNIE_BUILD_TESTS": "ON",
18
+ "ERNIE_BUILD_BENCHMARKS": "ON",
18
19
  "ERNIE_BUILD_PYTHON": "ON",
19
20
  "ERNIE_BUILD_APP": "ON"
20
21
  }
@@ -8,7 +8,8 @@ WORKDIR /src
8
8
  COPY . .
9
9
  RUN cmake -S . -B /build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/ernie \
10
10
  && cmake --build /build \
11
- && cmake --install /build --component app
11
+ && cmake --install /build --component app \
12
+ && cmake --install /build --component runtime
12
13
 
13
14
  FROM ubuntu:24.04
14
15
  ARG DEBIAN_FRONTEND=noninteractive
@@ -16,6 +17,8 @@ RUN apt-get update \
16
17
  && apt-get install -y --no-install-recommends libvulkan1 mesa-vulkan-drivers \
17
18
  && rm -rf /var/lib/apt/lists/*
18
19
  COPY --from=build /opt/ernie/bin/ernie /usr/local/bin/ernie
20
+ # Data and the licences of everything the program carries.
21
+ COPY --from=build /opt/ernie/share /usr/local/share
19
22
  ENV NVIDIA_DRIVER_CAPABILITIES=graphics,compute,utility
20
23
  WORKDIR /work
21
24
  ENTRYPOINT ["ernie"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ernie-renderer
3
- Version: 0.2.0.dev13
3
+ Version: 0.2.0.dev19
4
4
  Summary: Efficient Renderer for Natural and Interplanetary Environments: a physically based, spectral Vulkan ray tracer
5
5
  Author: Alex Maietta
6
6
  License-Expression: BSD-3-Clause
@@ -0,0 +1,3 @@
1
+ # SPDX-License-Identifier: BSD-3-Clause
2
+ add_executable(ernie_benchmarks main.cpp scene_storage.cpp)
3
+ target_link_libraries(ernie_benchmarks PRIVATE ernie_static ernie_build_options)
@@ -0,0 +1,52 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ /// @file bench.h
3
+ /// @brief Registering and timing benchmarks, which report against a target and never fail on time.
4
+ #pragma once
5
+
6
+ #include <algorithm>
7
+ #include <chrono>
8
+ #include <functional>
9
+ #include <string>
10
+ #include <vector>
11
+
12
+ namespace ernie::bench {
13
+
14
+ /// What a benchmark measured: its fastest run and the time it aims for, in milliseconds.
15
+ struct Timing {
16
+ double ms = 0.0;
17
+ double targetMs = 0.0;
18
+ };
19
+
20
+ struct Benchmark {
21
+ std::string name;
22
+ std::function<Timing()> run;
23
+ };
24
+
25
+ /// @return Every benchmark registered at static initialization.
26
+ inline std::vector<Benchmark>& Registry() {
27
+ static std::vector<Benchmark> benchmarks;
28
+ return benchmarks;
29
+ }
30
+
31
+ /// Registers a benchmark from a namespace-scope `const bool`.
32
+ inline bool Register(std::string name, std::function<Timing()> run) {
33
+ Registry().push_back({std::move(name), std::move(run)});
34
+ return true;
35
+ }
36
+
37
+ /// @brief Times `step` `runs` times, after `setup` before each, to see past a noisy machine.
38
+ /// @return The fastest run, in milliseconds.
39
+ template <typename Setup, typename Step>
40
+ double Fastest(const Setup& setup, const Step& step, int runs = 5) {
41
+ double best = 1e30;
42
+ for (int run = 0; run < runs; ++run) {
43
+ setup();
44
+ const auto start = std::chrono::steady_clock::now();
45
+ step();
46
+ const auto elapsed = std::chrono::steady_clock::now() - start;
47
+ best = std::min(best, std::chrono::duration<double, std::milli>(elapsed).count());
48
+ }
49
+ return best;
50
+ }
51
+
52
+ } // namespace ernie::bench
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ /// @file main.cpp
3
+ /// @brief Runs the registered benchmarks whose names contain the first argument, and prints each
4
+ /// fastest time beside its target.
5
+ #include "benchmarks/bench.h"
6
+
7
+ #include <cstdio>
8
+ #include <string_view>
9
+
10
+ int main(int argc, char** argv) {
11
+ const std::string_view filter = argc > 1 ? argv[1] : "";
12
+ std::printf("%-48s %12s %12s\n", "benchmark", "ms", "target ms");
13
+ for (const ernie::bench::Benchmark& benchmark : ernie::bench::Registry()) {
14
+ if (benchmark.name.find(filter) == std::string::npos) {
15
+ continue;
16
+ }
17
+ const ernie::bench::Timing timing = benchmark.run();
18
+ std::printf("%-48s %12.3f %12.3f%s\n", benchmark.name.c_str(), timing.ms, timing.targetMs,
19
+ timing.ms > timing.targetMs ? " over" : "");
20
+ }
21
+ return 0;
22
+ }
@@ -0,0 +1,118 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ /// @file scene_storage.cpp
3
+ /// @brief The prim store at 100,000 prims: create, first sync, one edit, edit all, add and remove.
4
+ #include "benchmarks/bench.h"
5
+ #include "ernie/scene/storage.h"
6
+
7
+ #include <memory>
8
+ #include <string>
9
+ #include <vector>
10
+
11
+ namespace ernie::bench {
12
+ namespace {
13
+
14
+ constexpr std::uint32_t kPrims = 100'000;
15
+
16
+ /// 100,000 instanced robots, one per environment, with transforms.
17
+ struct Robots {
18
+ std::unique_ptr<PrimStore> store;
19
+ AttributeId transform = 0;
20
+ BucketId bucket = 0;
21
+ std::vector<PrimId> prims;
22
+
23
+ void Reset() {
24
+ store = std::make_unique<PrimStore>();
25
+ transform = store->Tokens().Intern("xformOp:transform");
26
+ bucket = store->AddBucket(
27
+ {store->Tokens().Intern("Xform"), {}},
28
+ std::vector<ColumnLayout>{ColumnLayout::Of<glm::dmat4>(transform, glm::dmat4(1.0))});
29
+ prims.clear();
30
+ }
31
+
32
+ void Create() {
33
+ PathTable& paths = store->Paths();
34
+ const PathId world = paths.Child(kRootPath, "World");
35
+ const Token robot = store->Tokens().Intern("robot");
36
+ std::vector<PathId> robots(kPrims);
37
+ paths.Reserve(2 * kPrims);
38
+ for (std::uint32_t i = 0; i < kPrims; ++i) {
39
+ robots[i] = paths.Child(paths.Child(world, "env_" + std::to_string(i)), robot);
40
+ }
41
+ prims = store->DefineMany(robots, bucket);
42
+ const std::span<glm::dmat4> transforms = store->Write<glm::dmat4>(bucket, transform);
43
+ for (std::uint32_t i = 0; i < kPrims; ++i) {
44
+ transforms[i] = glm::dmat4(1.0);
45
+ transforms[i][3] = glm::dvec4(i, 0.0, 0.0, 1.0);
46
+ }
47
+ }
48
+
49
+ void Fresh() {
50
+ Reset();
51
+ Create();
52
+ }
53
+ };
54
+
55
+ const bool kCreate = Register("scene.storage.create_100k", [] {
56
+ Robots robots;
57
+ return Timing{Fastest([&] { robots.Reset(); }, [&] { robots.Create(); }), 50.0};
58
+ });
59
+
60
+ const bool kFirstSync = Register("scene.storage.first_sync_100k", [] {
61
+ Robots robots;
62
+ return Timing{Fastest([&] { robots.Fresh(); }, [&] { robots.store->ChangesSince(0); }), 50.0};
63
+ });
64
+
65
+ const bool kOneEdit = Register("scene.storage.one_edit_of_100k", [] {
66
+ Robots robots;
67
+ robots.Fresh();
68
+ std::uint64_t cursor = 0;
69
+ const double ms =
70
+ Fastest([&] { cursor = robots.store->Version(); },
71
+ [&] {
72
+ robots.store->Set(robots.prims[54'321], robots.transform, glm::dmat4(2.0));
73
+ robots.store->ChangesSince(cursor);
74
+ });
75
+ return Timing{ms, 1.0};
76
+ });
77
+
78
+ const bool kEditAll = Register("scene.storage.edit_all_100k", [] {
79
+ Robots robots;
80
+ robots.Fresh();
81
+ std::uint64_t cursor = 0;
82
+ const double ms = Fastest([&] { cursor = robots.store->Version(); },
83
+ [&] {
84
+ for (glm::dmat4& transform : robots.store->Write<glm::dmat4>(
85
+ robots.bucket, robots.transform)) {
86
+ transform[3].y += 1.0;
87
+ }
88
+ robots.store->ChangesSince(cursor);
89
+ });
90
+ return Timing{ms, 10.0};
91
+ });
92
+
93
+ const bool kAddRemove = Register("scene.storage.add_remove_1000_of_100k", [] {
94
+ Robots robots;
95
+ std::uint64_t cursor = 0;
96
+ const double ms = Fastest(
97
+ [&] {
98
+ robots.Fresh();
99
+ cursor = robots.store->Version();
100
+ },
101
+ [&] {
102
+ for (std::uint32_t i = 0; i < 1000; ++i) {
103
+ robots.store->Remove(robots.prims[i * 97]);
104
+ }
105
+ PathTable& paths = robots.store->Paths();
106
+ const PathId spawned = paths.Child(kRootPath, "Spawned");
107
+ std::vector<PathId> added(1000);
108
+ for (std::uint32_t i = 0; i < 1000; ++i) {
109
+ added[i] = paths.Child(spawned, "p" + std::to_string(i));
110
+ }
111
+ robots.store->DefineMany(added, robots.bucket);
112
+ robots.store->ChangesSince(cursor);
113
+ });
114
+ return Timing{ms, 5.0};
115
+ });
116
+
117
+ } // namespace
118
+ } // namespace ernie::bench
@@ -0,0 +1,26 @@
1
+ # SPDX-License-Identifier: BSD-3-Clause
2
+ # find_package(Ernie): the shared library and its public headers, as Ernie::ernie.
3
+ @PACKAGE_INIT@
4
+
5
+ include("${CMAKE_CURRENT_LIST_DIR}/ErnieTargets.cmake")
6
+
7
+ # Public headers use glm: the consumer's own when it has one, else the copy installed with Ernie.
8
+ # Either way one glm reaches each translation unit; ernie/util/glm.h checks its layout.
9
+ find_package(glm CONFIG QUIET)
10
+ if(TARGET glm::glm)
11
+ target_link_libraries(Ernie::ernie INTERFACE glm::glm)
12
+ else()
13
+ set_property(
14
+ TARGET Ernie::ernie
15
+ APPEND
16
+ PROPERTY INTERFACE_INCLUDE_DIRECTORIES "@PACKAGE_ERNIE_THIRD_PARTY_INCLUDEDIR@/glm"
17
+ )
18
+ endif()
19
+ # DLPack, a single versioned C header, always comes from Ernie.
20
+ set_property(
21
+ TARGET Ernie::ernie
22
+ APPEND
23
+ PROPERTY INTERFACE_INCLUDE_DIRECTORIES "@PACKAGE_ERNIE_THIRD_PARTY_INCLUDEDIR@/dlpack"
24
+ )
25
+
26
+ check_required_components(Ernie)
@@ -0,0 +1,123 @@
1
+ # SPDX-License-Identifier: BSD-3-Clause
2
+ include(CMakePackageConfigHelpers)
3
+
4
+ set(ERNIE_THIRD_PARTY_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/ernie/third_party")
5
+ set(ernie_cmake_dir "${CMAKE_INSTALL_LIBDIR}/cmake/Ernie")
6
+ set(ernie_doc_dir "${CMAKE_INSTALL_DOCDIR}")
7
+
8
+ install(
9
+ TARGETS ernie
10
+ EXPORT ErnieTargets
11
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime
12
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT runtime NAMELINK_COMPONENT dev
13
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev
14
+ )
15
+
16
+ set(ernie_public_headers
17
+ util/glm.h
18
+ util/log.h
19
+ util/file.h
20
+ util/profiler.h
21
+ util/tensor.h
22
+ util/version.h
23
+ io/ies.h
24
+ io/image.h
25
+ io/raster.h
26
+ io/texture.h
27
+ )
28
+ foreach(header ${ernie_public_headers})
29
+ get_filename_component(directory "${header}" DIRECTORY)
30
+ install(
31
+ FILES "${PROJECT_SOURCE_DIR}/ernie/${header}"
32
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ernie/${directory}"
33
+ COMPONENT dev
34
+ )
35
+ endforeach()
36
+ install(
37
+ FILES "${PROJECT_BINARY_DIR}/include/ernie/export.h"
38
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ernie"
39
+ COMPONENT dev
40
+ )
41
+ install(
42
+ DIRECTORY "${glm_SOURCE_DIR}/glm"
43
+ DESTINATION "${ERNIE_THIRD_PARTY_INCLUDEDIR}/glm"
44
+ COMPONENT dev
45
+ FILES_MATCHING
46
+ PATTERN "*.hpp"
47
+ PATTERN "*.inl"
48
+ PATTERN "*.h"
49
+ )
50
+ install(
51
+ FILES "${dlpack_SOURCE_DIR}/include/dlpack/dlpack.h"
52
+ DESTINATION "${ERNIE_THIRD_PARTY_INCLUDEDIR}/dlpack/dlpack"
53
+ COMPONENT dev
54
+ )
55
+
56
+ install(EXPORT ErnieTargets NAMESPACE Ernie:: DESTINATION "${ernie_cmake_dir}" COMPONENT dev)
57
+ configure_package_config_file(
58
+ "${PROJECT_SOURCE_DIR}/cmake/ErnieConfig.cmake.in"
59
+ "${PROJECT_BINARY_DIR}/ErnieConfig.cmake"
60
+ INSTALL_DESTINATION "${ernie_cmake_dir}"
61
+ PATH_VARS ERNIE_THIRD_PARTY_INCLUDEDIR
62
+ )
63
+ # 0.x releases keep compatibility within a minor series.
64
+ write_basic_package_version_file(
65
+ "${PROJECT_BINARY_DIR}/ErnieConfigVersion.cmake"
66
+ COMPATIBILITY SameMinorVersion
67
+ )
68
+ install(
69
+ FILES "${PROJECT_BINARY_DIR}/ErnieConfig.cmake" "${PROJECT_BINARY_DIR}/ErnieConfigVersion.cmake"
70
+ DESTINATION "${ernie_cmake_dir}"
71
+ COMPONENT dev
72
+ )
73
+ # Relocatable: paths are relative to the .pc file, so an unpacked archive works anywhere.
74
+ file(RELATIVE_PATH ernie_pc_to_prefix "/prefix/${CMAKE_INSTALL_LIBDIR}/pkgconfig" "/prefix")
75
+ configure_file("${PROJECT_SOURCE_DIR}/cmake/ernie.pc.in" "${PROJECT_BINARY_DIR}/ernie.pc" @ONLY)
76
+ install(
77
+ FILES "${PROJECT_BINARY_DIR}/ernie.pc"
78
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
79
+ COMPONENT dev
80
+ )
81
+
82
+ # Ernie's licence and those of what the library and its headers carry.
83
+ install(FILES "${PROJECT_SOURCE_DIR}/LICENSE" DESTINATION "${ernie_doc_dir}" COMPONENT runtime)
84
+ set(ernie_notices
85
+ "basisu|${PROJECT_SOURCE_DIR}/third_party/basisu/LICENSE"
86
+ "basisu|${PROJECT_SOURCE_DIR}/third_party/basisu/NOTICE"
87
+ "bc7enc_rdo|${bc7enc_SOURCE_DIR}/LICENSE"
88
+ "dlpack|${dlpack_SOURCE_DIR}/LICENSE"
89
+ "glm|${glm_SOURCE_DIR}/copying.txt"
90
+ "imath|${imath_SOURCE_DIR}/LICENSE.md"
91
+ "libdeflate|${openexr_SOURCE_DIR}/external/deflate/COPYING"
92
+ "nanovdb|${PROJECT_SOURCE_DIR}/third_party/nanovdb/LICENSE"
93
+ "nlohmann_json|${nlohmann_json_SOURCE_DIR}/LICENSE.MIT"
94
+ "openexr|${openexr_SOURCE_DIR}/LICENSE.md"
95
+ "openjph|${openexr_SOURCE_DIR}/external/OpenJPH/LICENSE"
96
+ "stb|${stb_SOURCE_DIR}/LICENSE"
97
+ "volk|${volk_SOURCE_DIR}/LICENSE.md"
98
+ "vulkan_headers|${vulkan_headers_SOURCE_DIR}/LICENSE.md"
99
+ "zstd|${openexr_SOURCE_DIR}/external/zstd/LICENSE"
100
+ )
101
+ # A Debian machine-readable copyright file: Ernie's licence, and where each bundled one is.
102
+ file(READ "${PROJECT_SOURCE_DIR}/LICENSE" ernie_license)
103
+ string(REGEX REPLACE "\n" "\n " ernie_license " ${ernie_license}")
104
+ set(ernie_copyright
105
+ "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
106
+ "Upstream-Name: Ernie\nSource: ${PROJECT_HOMEPAGE_URL}\n\n"
107
+ "Files: *\nCopyright: Alex Maietta\nLicense: BSD-3-Clause\n${ernie_license}\n"
108
+ )
109
+ foreach(notice ${ernie_notices})
110
+ string(REPLACE "|" ";" parts "${notice}")
111
+ list(GET parts 0 name)
112
+ list(GET parts 1 file)
113
+ get_filename_component(file_name "${file}" NAME)
114
+ install(FILES "${file}" DESTINATION "${ernie_doc_dir}/third_party/${name}" COMPONENT runtime)
115
+ list(
116
+ APPEND ernie_copyright
117
+ "\nFiles: bundled/${name}/*\nCopyright: see the licence\n"
118
+ "License: see /usr/${ernie_doc_dir}/third_party/${name}/${file_name}\n"
119
+ )
120
+ endforeach()
121
+ list(JOIN ernie_copyright "" ernie_copyright)
122
+ file(WRITE "${PROJECT_BINARY_DIR}/copyright" "${ernie_copyright}")
123
+ install(FILES "${PROJECT_BINARY_DIR}/copyright" DESTINATION "${ernie_doc_dir}" COMPONENT runtime)
@@ -0,0 +1,57 @@
1
+ # SPDX-License-Identifier: BSD-3-Clause
2
+ # DEB and RPM packages per install component, and one TGZ of everything, through CPack:
3
+ # runtime libernie0 / ernie-libs libernie, share/ernie data, licences and notices
4
+ # app ernie / ernie the ernie program, depending on the runtime package
5
+ # dev libernie-dev / ernie-devel headers, the CMake package and pkg-config file
6
+
7
+ set(CPACK_PACKAGE_NAME ernie)
8
+ set(CPACK_PACKAGE_VERSION "${ERNIE_VERSION}")
9
+ set(CPACK_PACKAGE_VENDOR "Alex Maietta")
10
+ set(CPACK_PACKAGE_CONTACT "Alex Maietta <maiettaalex@gmail.com>")
11
+ set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
12
+ set(CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL}")
13
+ set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
14
+ set(CPACK_PACKAGE_DIRECTORY "${PROJECT_BINARY_DIR}/packages")
15
+ # Archives named for their architecture, so x86_64 and aarch64 tarballs can sit side by side.
16
+ set(CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
17
+
18
+ set(CPACK_COMPONENTS_ALL runtime app dev)
19
+ set(CPACK_COMPONENT_APP_DEPENDS runtime)
20
+ set(CPACK_COMPONENT_DEV_DEPENDS runtime)
21
+ set(CPACK_COMPONENTS_GROUPING IGNORE)
22
+ set(CPACK_ARCHIVE_COMPONENT_INSTALL OFF)
23
+ set(CPACK_DEB_COMPONENT_INSTALL ON)
24
+ set(CPACK_RPM_COMPONENT_INSTALL ON)
25
+
26
+ set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
27
+ set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON)
28
+ # Set here, as CPack otherwise asks dpkg, which the manylinux build image lacks.
29
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$")
30
+ set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64)
31
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
32
+ set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64)
33
+ endif()
34
+ set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME libernie0)
35
+ set(CPACK_DEBIAN_APP_PACKAGE_NAME ernie)
36
+ set(CPACK_DEBIAN_DEV_PACKAGE_NAME libernie-dev)
37
+ # Built on manylinux_2_34 (glibc 2.34, GCC 11's libstdc++), so these are the floors. The library
38
+ # loads the Vulkan loader at run time, a dependency the linker cannot see.
39
+ set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6 (>= 2.34), libstdc++6 (>= 11), libvulkan1")
40
+ set(CPACK_DEBIAN_RUNTIME_PACKAGE_RECOMMENDS "mesa-vulkan-drivers")
41
+ set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION libs)
42
+ set(CPACK_DEBIAN_APP_PACKAGE_DEPENDS "libc6 (>= 2.34), libstdc++6 (>= 11), libvulkan1")
43
+ set(CPACK_DEBIAN_APP_PACKAGE_SECTION graphics)
44
+ set(CPACK_DEBIAN_DEV_PACKAGE_SECTION libdevel)
45
+
46
+ set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
47
+ set(CPACK_RPM_PACKAGE_LICENSE "BSD-3-Clause")
48
+ set(CPACK_RPM_RUNTIME_PACKAGE_NAME ernie-libs)
49
+ set(CPACK_RPM_APP_PACKAGE_NAME ernie)
50
+ set(CPACK_RPM_DEV_PACKAGE_NAME ernie-devel)
51
+ set(CPACK_RPM_RUNTIME_PACKAGE_REQUIRES "vulkan-loader")
52
+ set(CPACK_RPM_APP_PACKAGE_REQUIRES "vulkan-loader")
53
+ set(CPACK_RPM_RUNTIME_PACKAGE_GROUP "System Environment/Libraries")
54
+ set(CPACK_RPM_APP_PACKAGE_GROUP "Applications/Graphics")
55
+ set(CPACK_RPM_DEV_PACKAGE_GROUP "Development/Libraries")
56
+
57
+ include(CPack)
@@ -4,7 +4,7 @@ include_guard(GLOBAL)
4
4
  include("${CMAKE_CURRENT_LIST_DIR}/third_party/googletest.cmake")
5
5
  include(GoogleTest)
6
6
 
7
- # Hard timeouts per label; the time budgets tests aim for are far smaller.
7
+ # Hard timeouts per label, to catch hangs; timings are tracked by benchmarks/.
8
8
  set(ERNIE_TEST_TIMEOUT_unit 10)
9
9
  set(ERNIE_TEST_TIMEOUT_gpu 60)
10
10
  set(ERNIE_TEST_TIMEOUT_accuracy 120)
@@ -0,0 +1,10 @@
1
+ prefix=${pcfiledir}/@ernie_pc_to_prefix@
2
+ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
3
+ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
4
+
5
+ Name: Ernie
6
+ Description: @PROJECT_DESCRIPTION@
7
+ Version: @ERNIE_VERSION@
8
+ URL: @PROJECT_HOMEPAGE_URL@
9
+ Cflags: -I${includedir} -I${includedir}/ernie/third_party/glm -I${includedir}/ernie/third_party/dlpack
10
+ Libs: -L${libdir} -lernie
@@ -8,6 +8,7 @@ set(GLM_BUILD_INSTALL OFF)
8
8
 
9
9
  ernie_fetch(glm URL https://github.com/g-truc/glm/archive/refs/tags/${ERNIE_DEP_VERSION_glm}.tar.gz)
10
10
 
11
+ # Headers only; Ernie's own glm configuration is in ernie_build_options, so it never reaches
12
+ # consumers.
11
13
  add_library(ernie_glm INTERFACE)
12
14
  target_include_directories(ernie_glm SYSTEM INTERFACE "${glm_SOURCE_DIR}")
13
- target_compile_definitions(ernie_glm INTERFACE GLM_FORCE_DEPTH_ZERO_TO_ONE)