ernie-renderer 0.2.0.dev52__tar.gz → 0.2.0.dev70__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.
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.github/workflows/ci.yml +18 -10
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/CMakeLists.txt +3 -1
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/PKG-INFO +1 -1
- ernie_renderer-0.2.0.dev70/benchmarks/CMakeLists.txt +6 -0
- ernie_renderer-0.2.0.dev70/benchmarks/device/rl_step.cpp +39 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/ErnieFetch.cmake +1 -1
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/ErnieInstall.cmake +30 -0
- ernie_renderer-0.2.0.dev70/cmake/third_party/slang.cmake +70 -0
- ernie_renderer-0.2.0.dev70/cmake/third_party/vma/vma.cpp +6 -0
- ernie_renderer-0.2.0.dev70/cmake/third_party/vma.cmake +22 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/volk.cmake +4 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/app/main.cpp +3 -2
- ernie_renderer-0.2.0.dev70/ernie/device/CMakeLists.txt +24 -0
- ernie_renderer-0.2.0.dev70/ernie/device/arena.cpp +116 -0
- ernie_renderer-0.2.0.dev70/ernie/device/arena.h +79 -0
- ernie_renderer-0.2.0.dev70/ernie/device/bindless.cpp +148 -0
- ernie_renderer-0.2.0.dev70/ernie/device/bindless.h +74 -0
- ernie_renderer-0.2.0.dev70/ernie/device/buffer.cpp +142 -0
- ernie_renderer-0.2.0.dev70/ernie/device/buffer.h +104 -0
- ernie_renderer-0.2.0.dev70/ernie/device/column.cpp +99 -0
- ernie_renderer-0.2.0.dev70/ernie/device/column.h +101 -0
- ernie_renderer-0.2.0.dev70/ernie/device/context.cpp +214 -0
- ernie_renderer-0.2.0.dev70/ernie/device/context.h +149 -0
- ernie_renderer-0.2.0.dev70/ernie/device/cuda.cpp +468 -0
- ernie_renderer-0.2.0.dev70/ernie/device/cuda.h +192 -0
- ernie_renderer-0.2.0.dev70/ernie/device/device.h +78 -0
- ernie_renderer-0.2.0.dev70/ernie/device/external.cpp +218 -0
- ernie_renderer-0.2.0.dev70/ernie/device/external.h +96 -0
- ernie_renderer-0.2.0.dev70/ernie/device/image.cpp +153 -0
- ernie_renderer-0.2.0.dev70/ernie/device/image.h +113 -0
- ernie_renderer-0.2.0.dev70/ernie/device/instance.cpp +158 -0
- ernie_renderer-0.2.0.dev70/ernie/device/instance.h +61 -0
- ernie_renderer-0.2.0.dev70/ernie/device/kernel.cpp +87 -0
- ernie_renderer-0.2.0.dev70/ernie/device/kernel.h +61 -0
- ernie_renderer-0.2.0.dev70/ernie/device/queue.cpp +198 -0
- ernie_renderer-0.2.0.dev70/ernie/device/queue.h +130 -0
- ernie_renderer-0.2.0.dev70/ernie/device/shader_compiler.cpp +108 -0
- ernie_renderer-0.2.0.dev70/ernie/device/shader_compiler.h +49 -0
- ernie_renderer-0.2.0.dev70/ernie/device/staging.cpp +127 -0
- ernie_renderer-0.2.0.dev70/ernie/device/staging.h +82 -0
- ernie_renderer-0.2.0.dev70/ernie/device/vulkan.cpp +287 -0
- ernie_renderer-0.2.0.dev70/ernie/device/vulkan.h +110 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/python/CMakeLists.txt +14 -2
- ernie_renderer-0.2.0.dev70/ernie/python/device.cpp +374 -0
- ernie_renderer-0.2.0.dev70/ernie/python/device.h +13 -0
- ernie_renderer-0.2.0.dev70/ernie/python/ernie/__init__.py +40 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/python/module.cpp +8 -2
- ernie_renderer-0.2.0.dev70/ernie/render/CMakeLists.txt +7 -0
- ernie_renderer-0.2.0.dev70/ernie/render/scene_columns.cpp +299 -0
- ernie_renderer-0.2.0.dev70/ernie/render/scene_columns.h +97 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/CMakeLists.txt +2 -1
- ernie_renderer-0.2.0.dev70/ernie/util/library.cpp +46 -0
- ernie_renderer-0.2.0.dev70/ernie/util/library.h +38 -0
- ernie_renderer-0.2.0.dev70/ernie/util/on_failure.h +30 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/text.h +11 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/pyproject.toml +7 -1
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/CMakeLists.txt +20 -1
- ernie_renderer-0.2.0.dev70/tests/device/arena_test.cpp +76 -0
- ernie_renderer-0.2.0.dev70/tests/device/bindless_test.cpp +134 -0
- ernie_renderer-0.2.0.dev70/tests/device/column_test.cpp +86 -0
- ernie_renderer-0.2.0.dev70/tests/device/common.h +63 -0
- ernie_renderer-0.2.0.dev70/tests/device/context_test.cpp +132 -0
- ernie_renderer-0.2.0.dev70/tests/device/cuda_test.cpp +201 -0
- ernie_renderer-0.2.0.dev70/tests/device/external_test.cpp +89 -0
- ernie_renderer-0.2.0.dev70/tests/device/kernel_test.cpp +113 -0
- ernie_renderer-0.2.0.dev70/tests/device/rl_step.h +125 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/device/vulkan_devices_test.cpp +4 -12
- ernie_renderer-0.2.0.dev70/tests/python/test_device_dlpack.py +74 -0
- ernie_renderer-0.2.0.dev70/tests/python/test_device_torch.py +89 -0
- ernie_renderer-0.2.0.dev70/tests/render/scene_columns_test.cpp +124 -0
- ernie_renderer-0.2.0.dev52/benchmarks/CMakeLists.txt +0 -3
- ernie_renderer-0.2.0.dev52/ernie/device/CMakeLists.txt +0 -3
- ernie_renderer-0.2.0.dev52/ernie/device/vulkan_devices.cpp +0 -128
- ernie_renderer-0.2.0.dev52/ernie/device/vulkan_devices.h +0 -40
- ernie_renderer-0.2.0.dev52/ernie/python/ernie/__init__.py +0 -6
- ernie_renderer-0.2.0.dev52/ernie/render/CMakeLists.txt +0 -3
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.dockerignore +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.github/scripts/coverage_badge.py +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.gitignore +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/CMakePresets.json +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/benchmarks/bench.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/benchmarks/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/benchmarks/scene/extents.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/benchmarks/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/ernie.pc.in +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/bc7enc.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/openexr.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/docs/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/docs/index.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/docs/requirements.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/geometry/bounds.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/ies.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/ies.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/image.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/image.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/nanovdb.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/nanovdb.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/raster.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/raster.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/texture.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/io/texture.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/astronomy.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/astronomy.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/atmosphere.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/atmosphere.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/cloud.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/cloud.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/constants.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/reflectance_library.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/reflectance_library.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/reflectance_table.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/regolith.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/regolith.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/scattering.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/scattering.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/solar.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/solar.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/solar_table.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/spectrum.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/physics/spectrum.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/animation.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/convert.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/edit_history.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/edit_history.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/extent_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/extent_cache.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/holder_index.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/holder_index.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/inherit.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/json.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/json.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/json_value.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/reference.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/reference.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/scene.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/scene.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schema.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schema.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/camera.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/camera.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/collection.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/geom.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/geom.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/instancer.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/instancer.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/lux.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/lux.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/mesh.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/mesh.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/planet.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/planet.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/registry.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/render.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/render.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/shade.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/shade.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/vol.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/schemas/vol.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/storage.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/time_samples.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/time_samples.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/tokens.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/usd_plugin.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/validate.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/view.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/view.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/algorithm.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/bytes.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/disk_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/disk_cache.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/file.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/file.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/glm.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/hash_index.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/linear_algebra.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/log.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/log.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/math.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/noise.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/noise.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/numbers.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/parallel.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/random.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/version.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/version.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/ernie/util/worker_pool.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/mkdocs.yml +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/common.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/consumer/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/consumer/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/exr/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/exr/make_exr.py +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/exr/rgba_half_window.exr +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/exr/y_half_zips.exr +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ies/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ies/lamp.tilt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ktx2/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/scenes/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/scenes/invalid/problems.expected +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/scenes/invalid/problems.json +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/scenes/rover.json +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/scenes/rover.saved.json +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/float_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/volumes/cube.nvdb +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/fixtures/volumes/make_nvdb.py +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/geometry/bounds_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/io/ies_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/io/image_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/io/nanovdb_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/io/raster_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/io/texture_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/astronomy_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/atmosphere_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/cloud_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/reflectance_library_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/regolith_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/scattering_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/solar_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/physics/spectrum_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/python/test_scene_schema.py +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/edit_history_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/extent_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/inherit_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/instancer_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/json_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/lux_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/mesh_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/path_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/planet_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/reference_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/render_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/scene_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/schema_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/shade_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/storage_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/time_samples_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/vol_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/scene/xform_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/algorithm_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/bytes_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/disk_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/file_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/hash_index_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/linear_algebra_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/log_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/math_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/noise_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/parallel_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/profiler_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/random_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/tensor_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/text_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/version_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/tests/util/worker_pool_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/LICENSES/MIT.txt +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/NOTICE +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/README.md +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_containers.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_idct.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/zstd/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/zstd/zstd.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/basisu/zstd/zstd_errors.h +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/nanovdb/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev52 → ernie_renderer-0.2.0.dev70}/third_party/nanovdb/PNanoVDB.h +0 -0
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
strategy:
|
|
71
71
|
fail-fast: false
|
|
72
72
|
matrix:
|
|
73
|
-
os: [ubuntu-24.04, windows-2025, macos-
|
|
73
|
+
os: [ubuntu-24.04, windows-2025, macos-26]
|
|
74
74
|
steps:
|
|
75
75
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
76
76
|
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
@@ -107,10 +107,13 @@ jobs:
|
|
|
107
107
|
"-DCMAKE_PREFIX_PATH=$prefix"
|
|
108
108
|
cmake --build build/consumer
|
|
109
109
|
PATH="$prefix/bin:$PATH" ctest --test-dir build/consumer --output-on-failure
|
|
110
|
-
# The build tree without objects,
|
|
110
|
+
# The build tree without objects, and the Slang runtime its programs load from the fetched
|
|
111
|
+
# release, for this platform's test job; tar keeps file modes.
|
|
111
112
|
- name: Pack the build tree
|
|
112
113
|
shell: bash
|
|
113
|
-
run:
|
|
114
|
+
run: |
|
|
115
|
+
shopt -s nullglob
|
|
116
|
+
tar --exclude='*.o' --exclude='*.obj' -cf build-ci.tar build/ci .deps/slang-src/lib*/libslang*
|
|
114
117
|
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
115
118
|
with:
|
|
116
119
|
name: build-${{ matrix.os }}
|
|
@@ -126,7 +129,7 @@ jobs:
|
|
|
126
129
|
strategy:
|
|
127
130
|
fail-fast: false
|
|
128
131
|
matrix:
|
|
129
|
-
os: [ubuntu-24.04, windows-2025, macos-
|
|
132
|
+
os: [ubuntu-24.04, windows-2025, macos-26]
|
|
130
133
|
env:
|
|
131
134
|
ERNIE_TEST_REQUIRE_VULKAN: "1"
|
|
132
135
|
steps:
|
|
@@ -288,7 +291,7 @@ jobs:
|
|
|
288
291
|
- { platform: linux-x86_64, runner: ubuntu-24.04 }
|
|
289
292
|
- { platform: linux-aarch64, runner: ubuntu-24.04-arm }
|
|
290
293
|
- { platform: windows-amd64, runner: windows-2025 }
|
|
291
|
-
- { platform: macos-arm64, runner: macos-
|
|
294
|
+
- { platform: macos-arm64, runner: macos-26 }
|
|
292
295
|
env:
|
|
293
296
|
CIBW_BUILD: ${{ matrix.python }}-*
|
|
294
297
|
steps:
|
|
@@ -357,15 +360,20 @@ jobs:
|
|
|
357
360
|
dnf install -y -q rpm-build
|
|
358
361
|
command -v ninja >/dev/null || pipx install -q ninja
|
|
359
362
|
# One build; each format installs the library where its distributions look for it, as the
|
|
360
|
-
# build image (RHEL's lib64) is not where Debian and Ubuntu look.
|
|
363
|
+
# build image (RHEL's lib64) is not where Debian and Ubuntu look. The program relinks for
|
|
364
|
+
# each, as the path to the library is in its RPATH.
|
|
361
365
|
- name: Build
|
|
362
366
|
run: |
|
|
363
367
|
cmake --preset package
|
|
364
|
-
cmake --build --preset package --parallel 4
|
|
365
368
|
cd build/package
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
+
package() {
|
|
370
|
+
cmake "-DCMAKE_INSTALL_LIBDIR=$1" .
|
|
371
|
+
cmake --build . --parallel 4
|
|
372
|
+
cpack -G "$2"
|
|
373
|
+
}
|
|
374
|
+
package "lib/$(uname -m)-linux-gnu" DEB
|
|
375
|
+
package lib64 RPM
|
|
376
|
+
package lib TGZ
|
|
369
377
|
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
370
378
|
with:
|
|
371
379
|
name: packages-linux-${{ matrix.arch }}
|
|
@@ -15,7 +15,7 @@ project(
|
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
# Pre-release suffix such as .dev12, written by CI.
|
|
18
|
-
set(ERNIE_VERSION_SUFFIX ".
|
|
18
|
+
set(ERNIE_VERSION_SUFFIX ".dev70" CACHE STRING "Pre-release suffix of Ernie's version")
|
|
19
19
|
set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
|
|
20
20
|
|
|
21
21
|
option(ERNIE_BUILD_TESTS "Build Ernie's tests" OFF)
|
|
@@ -60,6 +60,8 @@ include(cmake/third_party/stb.cmake)
|
|
|
60
60
|
include(cmake/third_party/tracy.cmake)
|
|
61
61
|
include(cmake/third_party/vulkan_headers.cmake)
|
|
62
62
|
include(cmake/third_party/volk.cmake)
|
|
63
|
+
include(cmake/third_party/vma.cmake)
|
|
64
|
+
include(cmake/third_party/slang.cmake)
|
|
63
65
|
add_subdirectory(third_party)
|
|
64
66
|
|
|
65
67
|
add_library(ernie_build_options INTERFACE)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ernie-renderer
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev70
|
|
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,39 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file rl_step.cpp
|
|
3
|
+
/// @brief A steady-state RL step of 16,384 worlds on device columns: poses written in place, then
|
|
4
|
+
/// turned into instance transforms, with no bulk bytes through the host.
|
|
5
|
+
#include "tests/device/rl_step.h"
|
|
6
|
+
#include "benchmarks/bench.h"
|
|
7
|
+
|
|
8
|
+
#include <cstdio>
|
|
9
|
+
#include <memory>
|
|
10
|
+
|
|
11
|
+
namespace ernie::bench {
|
|
12
|
+
namespace {
|
|
13
|
+
|
|
14
|
+
const bool kRlStep = Register("device.rl_step.poses_16k", [] {
|
|
15
|
+
std::unique_ptr<DeviceContext> context;
|
|
16
|
+
try {
|
|
17
|
+
context = std::make_unique<DeviceContext>();
|
|
18
|
+
} catch (const DeviceError& error) {
|
|
19
|
+
std::printf("skipped: %s\n", error.what());
|
|
20
|
+
return Timing{0.0, 1.0};
|
|
21
|
+
}
|
|
22
|
+
const ShaderCompiler compiler;
|
|
23
|
+
test::RlStep rl(*context, compiler, 16'384);
|
|
24
|
+
std::uint32_t step = 0;
|
|
25
|
+
const auto run = [&] {
|
|
26
|
+
const Ticket ticket = rl.Step(++step);
|
|
27
|
+
ticket.Wait();
|
|
28
|
+
};
|
|
29
|
+
run();
|
|
30
|
+
const Transfers before = context->Transfers();
|
|
31
|
+
const double ms = Fastest([] {}, run, 20);
|
|
32
|
+
if (context->Transfers() != before) {
|
|
33
|
+
std::printf("device.rl_step.poses_16k moved bytes through the host\n");
|
|
34
|
+
}
|
|
35
|
+
return Timing{ms, 1.0};
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
} // namespace
|
|
39
|
+
} // namespace ernie::bench
|
|
@@ -13,6 +13,34 @@ install(
|
|
|
13
13
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev
|
|
14
14
|
)
|
|
15
15
|
|
|
16
|
+
# Slang's runtime, private to Ernie in lib/ernie and found through RPATHs, so it never clashes with
|
|
17
|
+
# another Slang on the system; on Windows beside the DLLs, where programs look. Installed as
|
|
18
|
+
# programs, as shared libraries are: RPM lists only what an executable library provides.
|
|
19
|
+
if(APPLE)
|
|
20
|
+
set(ernie_origin "@loader_path")
|
|
21
|
+
else()
|
|
22
|
+
set(ernie_origin "$ORIGIN")
|
|
23
|
+
endif()
|
|
24
|
+
set(ernie_private_libdir "${CMAKE_INSTALL_LIBDIR}/ernie")
|
|
25
|
+
set_target_properties(ernie PROPERTIES INSTALL_RPATH "${ernie_origin}/ernie")
|
|
26
|
+
if(TARGET ernie_app)
|
|
27
|
+
file(
|
|
28
|
+
RELATIVE_PATH
|
|
29
|
+
ernie_bin_to_private
|
|
30
|
+
"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}"
|
|
31
|
+
"${CMAKE_INSTALL_PREFIX}/${ernie_private_libdir}"
|
|
32
|
+
)
|
|
33
|
+
set_target_properties(
|
|
34
|
+
ernie_app
|
|
35
|
+
PROPERTIES INSTALL_RPATH "${ernie_origin}/${ernie_bin_to_private}"
|
|
36
|
+
)
|
|
37
|
+
endif()
|
|
38
|
+
if(WIN32)
|
|
39
|
+
install(FILES ${ERNIE_SLANG_RUNTIME} DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime)
|
|
40
|
+
else()
|
|
41
|
+
install(PROGRAMS ${ERNIE_SLANG_RUNTIME} DESTINATION "${ernie_private_libdir}" COMPONENT runtime)
|
|
42
|
+
endif()
|
|
43
|
+
|
|
16
44
|
set(ernie_public_headers
|
|
17
45
|
util/glm.h
|
|
18
46
|
util/log.h
|
|
@@ -93,7 +121,9 @@ set(ernie_notices
|
|
|
93
121
|
"nlohmann_json|${nlohmann_json_SOURCE_DIR}/LICENSE.MIT"
|
|
94
122
|
"openexr|${openexr_SOURCE_DIR}/LICENSE.md"
|
|
95
123
|
"openjph|${openexr_SOURCE_DIR}/external/OpenJPH/LICENSE"
|
|
124
|
+
"slang|${slang_SOURCE_DIR}/LICENSE"
|
|
96
125
|
"stb|${stb_SOURCE_DIR}/LICENSE"
|
|
126
|
+
"vma|${vma_SOURCE_DIR}/LICENSE.txt"
|
|
97
127
|
"volk|${volk_SOURCE_DIR}/LICENSE.md"
|
|
98
128
|
"vulkan_headers|${vulkan_headers_SOURCE_DIR}/LICENSE.md"
|
|
99
129
|
"zstd|${openexr_SOURCE_DIR}/external/zstd/LICENSE"
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
set(ERNIE_DEP_VERSION_slang
|
|
3
|
+
2026.19
|
|
4
|
+
CACHE STRING
|
|
5
|
+
"Release of Slang to fetch. Changing it requires updating the hashes below."
|
|
6
|
+
)
|
|
7
|
+
mark_as_advanced(ERNIE_DEP_VERSION_slang)
|
|
8
|
+
|
|
9
|
+
# Prebuilt Slang: the compiler Ernie links to turn Slang modules into SPIR-V (and WGSL) at run
|
|
10
|
+
# time, so user models compile into Ernie's kernels. The Linux builds target old glibc versions,
|
|
11
|
+
# so they run wherever manylinux_2_34 wheels do.
|
|
12
|
+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
|
|
13
|
+
set(slang_platform linux-x86_64-glibc-2.27)
|
|
14
|
+
set(slang_sha256 ae348a33d906ed29d14c2294f2260746cb2c3eb4aa2c7fc4bfd887a3a298737d)
|
|
15
|
+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
|
|
16
|
+
set(slang_platform linux-aarch64-glibc-2.28)
|
|
17
|
+
set(slang_sha256 52b1e6b2aad2d9a119308fe8f99d1699d1854e4ac2d7b579cf0f8f25349bcd17)
|
|
18
|
+
elseif(APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64")
|
|
19
|
+
set(slang_platform macos-aarch64)
|
|
20
|
+
set(slang_sha256 f77d89b91ec63698a7a8e5aa4316ce08b70d3211a236640ee4551f55be85d9ed)
|
|
21
|
+
elseif(APPLE)
|
|
22
|
+
set(slang_platform macos-x86_64)
|
|
23
|
+
set(slang_sha256 c5e18233c0b90cc651c792ec4c4e4a467a9a101ffb6301643aab89c016b48e42)
|
|
24
|
+
elseif(WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|x86_64")
|
|
25
|
+
set(slang_platform windows-x86_64)
|
|
26
|
+
set(slang_sha256 fc922f214b5d115f663932e59e80e0f6b6cc6fae140979cf307da6459b6f8f33)
|
|
27
|
+
else()
|
|
28
|
+
message(FATAL_ERROR "No prebuilt Slang for ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}")
|
|
29
|
+
endif()
|
|
30
|
+
|
|
31
|
+
ernie_fetch(
|
|
32
|
+
slang
|
|
33
|
+
URL
|
|
34
|
+
https://github.com/shader-slang/slang/releases/download/v${ERNIE_DEP_VERSION_slang}/slang-${ERNIE_DEP_VERSION_slang}-${slang_platform}.zip
|
|
35
|
+
URL_HASH SHA256=${slang_sha256}
|
|
36
|
+
SOURCE_SUBDIR no-build
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# Each release keeps its CMake package in lib/ (Linux x86_64, macOS), lib64/ (Linux aarch64) or
|
|
40
|
+
# the top (Windows).
|
|
41
|
+
find_package(
|
|
42
|
+
slang
|
|
43
|
+
CONFIG
|
|
44
|
+
REQUIRED
|
|
45
|
+
PATHS "${slang_SOURCE_DIR}"
|
|
46
|
+
PATH_SUFFIXES lib/cmake/slang lib64/cmake/slang cmake
|
|
47
|
+
NO_DEFAULT_PATH
|
|
48
|
+
)
|
|
49
|
+
set_target_properties(slang::slang PROPERTIES IMPORTED_GLOBAL TRUE)
|
|
50
|
+
|
|
51
|
+
# The runtime files Ernie's binaries need beside them: the compiler library, and the glslang
|
|
52
|
+
# library it loads at run time.
|
|
53
|
+
get_target_property(slang_library slang::slang IMPORTED_LOCATION_RELEASE)
|
|
54
|
+
if(NOT slang_library)
|
|
55
|
+
get_target_property(slang_library slang::slang IMPORTED_LOCATION)
|
|
56
|
+
endif()
|
|
57
|
+
get_filename_component(ERNIE_SLANG_RUNTIME_DIR "${slang_library}" DIRECTORY)
|
|
58
|
+
file(
|
|
59
|
+
GLOB ERNIE_SLANG_RUNTIME
|
|
60
|
+
"${ERNIE_SLANG_RUNTIME_DIR}/libslang-compiler.so.*"
|
|
61
|
+
"${ERNIE_SLANG_RUNTIME_DIR}/libslang-glslang-*.so"
|
|
62
|
+
"${ERNIE_SLANG_RUNTIME_DIR}/libslang-compiler*.dylib"
|
|
63
|
+
"${ERNIE_SLANG_RUNTIME_DIR}/libslang-glslang-*.dylib"
|
|
64
|
+
"${ERNIE_SLANG_RUNTIME_DIR}/slang-compiler.dll"
|
|
65
|
+
"${ERNIE_SLANG_RUNTIME_DIR}/slang-glslang.dll"
|
|
66
|
+
)
|
|
67
|
+
# Windows has no rpath: a program finds its DLLs beside it, so the build's programs get Slang's.
|
|
68
|
+
if(WIN32 AND CMAKE_RUNTIME_OUTPUT_DIRECTORY)
|
|
69
|
+
file(COPY ${ERNIE_SLANG_RUNTIME} DESTINATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
|
|
70
|
+
endif()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
set(ERNIE_DEP_VERSION_vma v3.4.0 CACHE STRING "Tag of Vulkan Memory Allocator to fetch")
|
|
3
|
+
mark_as_advanced(ERNIE_DEP_VERSION_vma)
|
|
4
|
+
|
|
5
|
+
ernie_fetch(
|
|
6
|
+
vma
|
|
7
|
+
URL
|
|
8
|
+
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/refs/tags/${ERNIE_DEP_VERSION_vma}.tar.gz
|
|
9
|
+
SOURCE_SUBDIR no-build
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
# The allocator is header-only; vma/vma.cpp compiles its implementation once, fetching Vulkan
|
|
13
|
+
# functions through volk.
|
|
14
|
+
add_library(ernie_vma STATIC "${CMAKE_CURRENT_LIST_DIR}/vma/vma.cpp")
|
|
15
|
+
target_include_directories(ernie_vma SYSTEM PUBLIC "${vma_SOURCE_DIR}/include")
|
|
16
|
+
target_compile_definitions(
|
|
17
|
+
ernie_vma
|
|
18
|
+
PUBLIC VMA_STATIC_VULKAN_FUNCTIONS=0 VMA_DYNAMIC_VULKAN_FUNCTIONS=1
|
|
19
|
+
)
|
|
20
|
+
target_link_libraries(ernie_vma PUBLIC ernie_volk)
|
|
21
|
+
set_target_properties(ernie_vma PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
22
|
+
ernie_quiet_third_party(ernie_vma)
|
|
@@ -14,3 +14,7 @@ target_include_directories(ernie_volk SYSTEM PUBLIC "${volk_SOURCE_DIR}")
|
|
|
14
14
|
target_compile_definitions(ernie_volk PUBLIC VK_NO_PROTOTYPES)
|
|
15
15
|
target_link_libraries(ernie_volk PUBLIC ernie_vulkan_headers ${CMAKE_DL_LIBS})
|
|
16
16
|
set_target_properties(ernie_volk PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
17
|
+
# Loads the Win32 sharing functions, which only external.cpp declares.
|
|
18
|
+
if(WIN32)
|
|
19
|
+
target_compile_definitions(ernie_volk PRIVATE VK_USE_PLATFORM_WIN32_KHR)
|
|
20
|
+
endif()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
2
|
/// @file main.cpp
|
|
3
3
|
/// @brief The ernie program.
|
|
4
|
-
#include "ernie/device/
|
|
4
|
+
#include "ernie/device/device.h"
|
|
5
5
|
#include "ernie/scene/reference.h"
|
|
6
6
|
#include "ernie/util/file.h"
|
|
7
7
|
#include "ernie/util/version.h"
|
|
@@ -25,7 +25,8 @@ void PrintUsage() {
|
|
|
25
25
|
int PrintDevices() {
|
|
26
26
|
for (const ernie::VulkanDeviceInfo& device : ernie::ListVulkanDevices()) {
|
|
27
27
|
std::printf("%s (%s, Vulkan %u.%u%s)\n", device.name.c_str(), ernie::ToString(device.type),
|
|
28
|
-
device.apiMajor, device.apiMinor,
|
|
28
|
+
device.apiMajor, device.apiMinor,
|
|
29
|
+
device.capabilities.rayQuery ? ", ray queries" : "");
|
|
29
30
|
}
|
|
30
31
|
return 0;
|
|
31
32
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
add_library(
|
|
3
|
+
ernie_device
|
|
4
|
+
OBJECT
|
|
5
|
+
arena.cpp
|
|
6
|
+
bindless.cpp
|
|
7
|
+
buffer.cpp
|
|
8
|
+
column.cpp
|
|
9
|
+
context.cpp
|
|
10
|
+
cuda.cpp
|
|
11
|
+
external.cpp
|
|
12
|
+
image.cpp
|
|
13
|
+
instance.cpp
|
|
14
|
+
kernel.cpp
|
|
15
|
+
queue.cpp
|
|
16
|
+
shader_compiler.cpp
|
|
17
|
+
staging.cpp
|
|
18
|
+
vulkan.cpp
|
|
19
|
+
)
|
|
20
|
+
target_link_libraries(
|
|
21
|
+
ernie_device
|
|
22
|
+
PUBLIC ernie_util
|
|
23
|
+
PRIVATE ernie_volk ernie_vma ernie_glm slang::slang ernie_build_options
|
|
24
|
+
)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file arena.cpp
|
|
3
|
+
/// @brief Sub-allocating arenas with VMA's virtual blocks.
|
|
4
|
+
#include "ernie/device/arena.h"
|
|
5
|
+
|
|
6
|
+
#include <algorithm>
|
|
7
|
+
#include <optional>
|
|
8
|
+
|
|
9
|
+
namespace ernie {
|
|
10
|
+
|
|
11
|
+
Arenas::Arena::~Arena() {
|
|
12
|
+
if (block != VK_NULL_HANDLE) {
|
|
13
|
+
vmaClearVirtualBlock(block);
|
|
14
|
+
vmaDestroyVirtualBlock(block);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
Arenas::Arenas(DeviceContext& context, MemoryUse use, std::string_view name,
|
|
19
|
+
std::uint64_t arenaSize)
|
|
20
|
+
: context_(context), use_(use), name_(name),
|
|
21
|
+
arenaSize_(std::min(arenaSize, context.MaxBufferSize())) {}
|
|
22
|
+
|
|
23
|
+
Arenas::~Arenas() {
|
|
24
|
+
Quietly([this] { context_.WaitIdle(); });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
BufferRange Arenas::Allocate(std::uint64_t size, std::uint64_t alignment) {
|
|
28
|
+
if (size > context_.MaxBufferSize()) {
|
|
29
|
+
throw DeviceError(DeviceErrorKind::Unsupported,
|
|
30
|
+
std::to_string(size) + " bytes of " + name_ +
|
|
31
|
+
" exceed the largest buffer the device can address");
|
|
32
|
+
}
|
|
33
|
+
size = std::max<std::uint64_t>(size, 1);
|
|
34
|
+
const VmaVirtualAllocationCreateInfo info{.size = size, .alignment = alignment};
|
|
35
|
+
const auto take = [&](std::uint32_t index) -> std::optional<BufferRange> {
|
|
36
|
+
Arena& arena = *arenas_[index];
|
|
37
|
+
VmaVirtualAllocation allocation = VK_NULL_HANDLE;
|
|
38
|
+
VkDeviceSize offset = 0;
|
|
39
|
+
if (vmaVirtualAllocate(arena.block, &info, &allocation, &offset) != VK_SUCCESS) {
|
|
40
|
+
return std::nullopt;
|
|
41
|
+
}
|
|
42
|
+
arena.allocations.emplace(offset, allocation);
|
|
43
|
+
arena.used += size;
|
|
44
|
+
return BufferRange{index, offset, size};
|
|
45
|
+
};
|
|
46
|
+
const auto takeAny = [&]() -> std::optional<BufferRange> {
|
|
47
|
+
for (std::uint32_t index = 0; index < arenas_.size(); ++index) {
|
|
48
|
+
if (const std::optional<BufferRange> range = take(index)) {
|
|
49
|
+
return range;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return std::nullopt;
|
|
53
|
+
};
|
|
54
|
+
{
|
|
55
|
+
const std::lock_guard lock(mutex_);
|
|
56
|
+
if (const std::optional<BufferRange> range = takeAny()) {
|
|
57
|
+
return *range;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Ranges freed earlier come back once their work is done; collected without the lock, as
|
|
61
|
+
// giving them back takes it.
|
|
62
|
+
context_.Collect();
|
|
63
|
+
const std::lock_guard lock(mutex_);
|
|
64
|
+
if (const std::optional<BufferRange> range = takeAny()) {
|
|
65
|
+
return *range;
|
|
66
|
+
}
|
|
67
|
+
// A range larger than the arena size gets an arena of its own.
|
|
68
|
+
const std::uint64_t own = std::max(size, arenaSize_);
|
|
69
|
+
if (const std::optional<BufferRange> range = take(AddArena(own))) {
|
|
70
|
+
return *range;
|
|
71
|
+
}
|
|
72
|
+
throw DeviceError(DeviceErrorKind::Failed, "Allocating " + std::to_string(size) + " bytes of " +
|
|
73
|
+
name_ + " at alignment " +
|
|
74
|
+
std::to_string(alignment));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const Buffer& Arenas::Storage(const BufferRange& range) const {
|
|
78
|
+
const std::lock_guard lock(mutex_);
|
|
79
|
+
return arenas_[range.arena]->buffer;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
void Arenas::Free(const BufferRange& range) {
|
|
83
|
+
context_.Retire([this, range] { Release(range); });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
std::uint64_t Arenas::Used() const {
|
|
87
|
+
const std::lock_guard lock(mutex_);
|
|
88
|
+
std::uint64_t used = 0;
|
|
89
|
+
for (const auto& arena : arenas_) {
|
|
90
|
+
used += arena->used;
|
|
91
|
+
}
|
|
92
|
+
return used;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
std::uint32_t Arenas::AddArena(std::uint64_t size) {
|
|
96
|
+
auto arena = std::make_unique<Arena>();
|
|
97
|
+
arena->buffer =
|
|
98
|
+
Buffer(context_, size, use_, name_ + " arena " + std::to_string(arenas_.size()));
|
|
99
|
+
const VmaVirtualBlockCreateInfo block{.size = size};
|
|
100
|
+
CheckVk(vmaCreateVirtualBlock(&block, &arena->block), "Creating " + name_ + "'s arena");
|
|
101
|
+
arenas_.push_back(std::move(arena));
|
|
102
|
+
return static_cast<std::uint32_t>(arenas_.size() - 1);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void Arenas::Release(const BufferRange& range) {
|
|
106
|
+
const std::lock_guard lock(mutex_);
|
|
107
|
+
Arena& arena = *arenas_[range.arena];
|
|
108
|
+
const auto found = arena.allocations.find(range.offset);
|
|
109
|
+
if (found != arena.allocations.end()) {
|
|
110
|
+
vmaVirtualFree(arena.block, found->second);
|
|
111
|
+
arena.allocations.erase(found);
|
|
112
|
+
arena.used -= range.size;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
} // namespace ernie
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file arena.h
|
|
3
|
+
/// @brief Device memory as a few large buffers sub-allocated by offset. Shaders reach data as
|
|
4
|
+
/// (arena, offset): a buffer device address on Vulkan, a bound storage buffer and offset on
|
|
5
|
+
/// WebGPU, which has no pointers.
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include "ernie/device/buffer.h"
|
|
9
|
+
|
|
10
|
+
#include <cstdint>
|
|
11
|
+
#include <memory>
|
|
12
|
+
#include <mutex>
|
|
13
|
+
#include <unordered_map>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
namespace ernie {
|
|
17
|
+
|
|
18
|
+
/// @brief Where data lives on the device: a range of one arena.
|
|
19
|
+
struct BufferRange {
|
|
20
|
+
std::uint32_t arena = 0;
|
|
21
|
+
std::uint64_t offset = 0;
|
|
22
|
+
std::uint64_t size = 0;
|
|
23
|
+
bool operator==(const BufferRange&) const = default;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/// @brief The arenas of one memory use. Ranges are handed out by offset; a full arena is joined
|
|
27
|
+
/// by another, and a range larger than the arena size gets an arena of its own. No arena is
|
|
28
|
+
/// larger than the device's largest addressable buffer.
|
|
29
|
+
class Arenas {
|
|
30
|
+
public:
|
|
31
|
+
/// @param arenaSize Bytes per arena, capped at `DeviceContext::MaxBufferSize`.
|
|
32
|
+
Arenas(DeviceContext& context, MemoryUse use, std::string_view name,
|
|
33
|
+
std::uint64_t arenaSize = std::uint64_t{256} << 20);
|
|
34
|
+
/// Waits for the device, so ranges freed late are back before the arenas go.
|
|
35
|
+
~Arenas();
|
|
36
|
+
Arenas(const Arenas&) = delete;
|
|
37
|
+
Arenas& operator=(const Arenas&) = delete;
|
|
38
|
+
|
|
39
|
+
/// @brief Takes a range of `size` bytes at a multiple of `alignment`.
|
|
40
|
+
/// @throws DeviceError when `size` exceeds the largest buffer the device can address, or the
|
|
41
|
+
/// memory runs out.
|
|
42
|
+
BufferRange Allocate(std::uint64_t size, std::uint64_t alignment = 16);
|
|
43
|
+
/// @brief Gives a range back once every queue's work submitted so far is done.
|
|
44
|
+
void Free(const BufferRange& range);
|
|
45
|
+
|
|
46
|
+
/// @return The buffer of a range's arena: its handle, and its mapping for host-visible uses.
|
|
47
|
+
const Buffer& Storage(const BufferRange& range) const;
|
|
48
|
+
/// @return The range's device address, as shaders read it on Vulkan.
|
|
49
|
+
VkDeviceAddress Address(const BufferRange& range) const {
|
|
50
|
+
return Storage(range).Address() + range.offset;
|
|
51
|
+
}
|
|
52
|
+
std::size_t Count() const {
|
|
53
|
+
return arenas_.size();
|
|
54
|
+
}
|
|
55
|
+
/// @return The bytes handed out and not yet given back.
|
|
56
|
+
std::uint64_t Used() const;
|
|
57
|
+
|
|
58
|
+
private:
|
|
59
|
+
struct Arena {
|
|
60
|
+
Buffer buffer;
|
|
61
|
+
VmaVirtualBlock block = VK_NULL_HANDLE;
|
|
62
|
+
/// Each range's allocation in `block`, by offset.
|
|
63
|
+
std::unordered_map<std::uint64_t, VmaVirtualAllocation> allocations;
|
|
64
|
+
std::uint64_t used = 0;
|
|
65
|
+
~Arena();
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
std::uint32_t AddArena(std::uint64_t size);
|
|
69
|
+
void Release(const BufferRange& range);
|
|
70
|
+
|
|
71
|
+
DeviceContext& context_;
|
|
72
|
+
MemoryUse use_;
|
|
73
|
+
std::string name_;
|
|
74
|
+
std::uint64_t arenaSize_;
|
|
75
|
+
mutable std::mutex mutex_;
|
|
76
|
+
std::vector<std::unique_ptr<Arena>> arenas_;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
} // namespace ernie
|