ernie-renderer 0.2.0.dev5__tar.gz → 0.2.0.dev7__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.dev5 → ernie_renderer-0.2.0.dev7}/.dockerignore +2 -1
- ernie_renderer-0.2.0.dev7/.github/scripts/coverage_badge.py +37 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.github/workflows/ci.yml +93 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.gitignore +4 -2
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.pre-commit-config.yaml +2 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/CMakeLists.txt +17 -1
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/CMakePresets.json +24 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/PKG-INFO +2 -1
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/README.md +1 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/cmake/ErnieTesting.cmake +6 -0
- ernie_renderer-0.2.0.dev7/cmake/third_party/dlpack.cmake +17 -0
- ernie_renderer-0.2.0.dev7/cmake/third_party/glm.cmake +20 -0
- ernie_renderer-0.2.0.dev7/cmake/third_party/json.cmake +14 -0
- ernie_renderer-0.2.0.dev7/cmake/third_party/tracy.cmake +29 -0
- ernie_renderer-0.2.0.dev7/docs/README.md +7 -0
- ernie_renderer-0.2.0.dev7/docs/index.md +1 -0
- ernie_renderer-0.2.0.dev7/docs/requirements.txt +1 -0
- ernie_renderer-0.2.0.dev7/ernie/core/CMakeLists.txt +27 -0
- ernie_renderer-0.2.0.dev7/ernie/core/disk_cache.cpp +94 -0
- ernie_renderer-0.2.0.dev7/ernie/core/disk_cache.h +59 -0
- ernie_renderer-0.2.0.dev7/ernie/core/linear_algebra.h +125 -0
- ernie_renderer-0.2.0.dev7/ernie/core/log.cpp +65 -0
- ernie_renderer-0.2.0.dev7/ernie/core/log.h +40 -0
- ernie_renderer-0.2.0.dev7/ernie/core/mapped_file.cpp +96 -0
- ernie_renderer-0.2.0.dev7/ernie/core/mapped_file.h +39 -0
- ernie_renderer-0.2.0.dev7/ernie/core/math.h +84 -0
- ernie_renderer-0.2.0.dev7/ernie/core/noise.cpp +160 -0
- ernie_renderer-0.2.0.dev7/ernie/core/noise.h +87 -0
- ernie_renderer-0.2.0.dev7/ernie/core/numbers.h +41 -0
- ernie_renderer-0.2.0.dev7/ernie/core/parallel.h +38 -0
- ernie_renderer-0.2.0.dev7/ernie/core/profile.h +45 -0
- ernie_renderer-0.2.0.dev7/ernie/core/profile_report.cpp +242 -0
- ernie_renderer-0.2.0.dev7/ernie/core/profile_report.h +110 -0
- ernie_renderer-0.2.0.dev7/ernie/core/profiler.cpp +189 -0
- ernie_renderer-0.2.0.dev7/ernie/core/profiler.h +125 -0
- ernie_renderer-0.2.0.dev7/ernie/core/random.h +126 -0
- ernie_renderer-0.2.0.dev7/ernie/core/tensor.cpp +330 -0
- ernie_renderer-0.2.0.dev7/ernie/core/tensor.h +249 -0
- ernie_renderer-0.2.0.dev7/ernie/core/version.cpp +37 -0
- ernie_renderer-0.2.0.dev7/ernie/core/version.h +26 -0
- ernie_renderer-0.2.0.dev7/ernie/core/worker_pool.h +97 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/device/vulkan_devices.cpp +4 -4
- ernie_renderer-0.2.0.dev7/ernie/physics/CMakeLists.txt +14 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/astronomy.cpp +142 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/astronomy.h +110 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/atmosphere.cpp +451 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/atmosphere.h +330 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/cloud.cpp +580 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/cloud.h +223 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/constants.h +26 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/reflectance_library.cpp +48 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/reflectance_library.h +47 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/reflectance_table.h +5596 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/regolith.cpp +302 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/regolith.h +160 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/scattering.cpp +371 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/scattering.h +284 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/solar.cpp +38 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/solar.h +30 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/solar_table.h +3069 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/spectrum.cpp +546 -0
- ernie_renderer-0.2.0.dev7/ernie/physics/spectrum.h +270 -0
- ernie_renderer-0.2.0.dev7/ernie/test/CMakeLists.txt +65 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/disk_cache_test.cpp +65 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/linear_algebra_test.cpp +52 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/log_test.cpp +35 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/mapped_file_test.cpp +41 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/math_test.cpp +55 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/noise_test.cpp +85 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/parallel_test.cpp +29 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/profile_report_test.cpp +120 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/profiler_test.cpp +62 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/random_test.cpp +140 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/tensor_test.cpp +236 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/version_test.cpp +26 -0
- ernie_renderer-0.2.0.dev7/ernie/test/core/worker_pool_test.cpp +69 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/astronomy_test.cpp +66 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/atmosphere_test.cpp +239 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/cloud_test.cpp +201 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/reflectance_library_test.cpp +50 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/regolith_test.cpp +110 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/scattering_test.cpp +266 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/solar_test.cpp +47 -0
- ernie_renderer-0.2.0.dev7/ernie/test/physics/spectrum_test.cpp +178 -0
- ernie_renderer-0.2.0.dev7/mkdocs.yml +21 -0
- ernie_renderer-0.2.0.dev5/ernie/core/CMakeLists.txt +0 -5
- ernie_renderer-0.2.0.dev5/ernie/core/version.cpp +0 -12
- ernie_renderer-0.2.0.dev5/ernie/core/version.h +0 -14
- ernie_renderer-0.2.0.dev5/ernie/physics/CMakeLists.txt +0 -3
- ernie_renderer-0.2.0.dev5/ernie/test/CMakeLists.txt +0 -29
- ernie_renderer-0.2.0.dev5/ernie/test/core/version_test.cpp +0 -14
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/device/vulkan_devices.h +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/io/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/python/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/render/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/scene/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/test/device/vulkan_devices_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/ernie/test/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev5 → ernie_renderer-0.2.0.dev7}/pyproject.toml +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
"""Writes a shields.io endpoint badge and a job summary from gcovr's JSON summary."""
|
|
3
|
+
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def badge_colour(percent: float) -> str:
|
|
11
|
+
if percent >= 80.0:
|
|
12
|
+
return "brightgreen"
|
|
13
|
+
if percent >= 70.0:
|
|
14
|
+
return "green"
|
|
15
|
+
if percent >= 60.0:
|
|
16
|
+
return "yellow"
|
|
17
|
+
return "red"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def main(report: Path) -> None:
|
|
21
|
+
summary = json.loads((report / "summary.json").read_text())
|
|
22
|
+
lines = summary["line_percent"]
|
|
23
|
+
branches = summary["branch_percent"]
|
|
24
|
+
badge = {
|
|
25
|
+
"schemaVersion": 1,
|
|
26
|
+
"label": "coverage",
|
|
27
|
+
"message": f"{lines:.1f}%",
|
|
28
|
+
"color": badge_colour(lines),
|
|
29
|
+
}
|
|
30
|
+
(report / "badge.json").write_text(json.dumps(badge))
|
|
31
|
+
if step_summary := os.environ.get("GITHUB_STEP_SUMMARY"):
|
|
32
|
+
with open(step_summary, "a") as out:
|
|
33
|
+
out.write(f"### Coverage\n\nLines {lines:.1f}%, branches {branches:.1f}%\n")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == "__main__":
|
|
37
|
+
main(Path(sys.argv[1]))
|
|
@@ -156,6 +156,99 @@ jobs:
|
|
|
156
156
|
- name: Test
|
|
157
157
|
run: ctest --preset ci -j4
|
|
158
158
|
|
|
159
|
+
# Line and branch coverage of the C++ library from every test on Linux and lavapipe.
|
|
160
|
+
coverage:
|
|
161
|
+
needs: version
|
|
162
|
+
runs-on: ubuntu-24.04
|
|
163
|
+
timeout-minutes: 60
|
|
164
|
+
env:
|
|
165
|
+
ERNIE_TEST_REQUIRE_VULKAN: "1"
|
|
166
|
+
steps:
|
|
167
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
168
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
169
|
+
with:
|
|
170
|
+
python-version: "3.12"
|
|
171
|
+
- run: python -m pip install nanobind ninja pytest gcovr
|
|
172
|
+
- uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
173
|
+
with:
|
|
174
|
+
path: |
|
|
175
|
+
.deps/*-src
|
|
176
|
+
.deps/*-subbuild
|
|
177
|
+
key: deps-${{ runner.os }}-${{ hashFiles('cmake/third_party/**') }}
|
|
178
|
+
- name: Install lavapipe
|
|
179
|
+
run: |
|
|
180
|
+
sudo apt-get update
|
|
181
|
+
sudo apt-get install -y mesa-vulkan-drivers libvulkan1
|
|
182
|
+
icd=$(find /usr/share/vulkan/icd.d -name 'lvp_icd*.json' | head -n1)
|
|
183
|
+
echo "VK_DRIVER_FILES=$icd" >> "$GITHUB_ENV"
|
|
184
|
+
echo "VK_ICD_FILENAMES=$icd" >> "$GITHUB_ENV"
|
|
185
|
+
- name: Configure
|
|
186
|
+
run: >
|
|
187
|
+
cmake --preset coverage
|
|
188
|
+
"-DPython_EXECUTABLE=$(python -c 'import sys; print(sys.executable)')"
|
|
189
|
+
-DERNIE_TEST_PYTHON=python
|
|
190
|
+
- name: Build
|
|
191
|
+
run: cmake --build --preset coverage --parallel 4
|
|
192
|
+
- name: Test
|
|
193
|
+
run: ctest --preset coverage -j4
|
|
194
|
+
- name: Report
|
|
195
|
+
run: |
|
|
196
|
+
mkdir -p coverage
|
|
197
|
+
gcovr --root . --filter 'ernie/' --exclude 'ernie/test/' --exclude '.*_table\.h' \
|
|
198
|
+
--object-directory build/coverage \
|
|
199
|
+
--html-details coverage/index.html --json-summary coverage/summary.json --print-summary
|
|
200
|
+
python .github/scripts/coverage_badge.py coverage
|
|
201
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
202
|
+
with:
|
|
203
|
+
name: coverage
|
|
204
|
+
path: coverage
|
|
205
|
+
retention-days: 14
|
|
206
|
+
|
|
207
|
+
# The documentation, built strictly so broken links and warnings fail.
|
|
208
|
+
docs:
|
|
209
|
+
runs-on: ubuntu-24.04
|
|
210
|
+
timeout-minutes: 10
|
|
211
|
+
steps:
|
|
212
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
213
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
214
|
+
with:
|
|
215
|
+
python-version: "3.12"
|
|
216
|
+
- run: python -m pip install -r docs/requirements.txt
|
|
217
|
+
- run: mkdocs build --strict
|
|
218
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
219
|
+
with:
|
|
220
|
+
name: docs
|
|
221
|
+
path: site
|
|
222
|
+
retention-days: 14
|
|
223
|
+
|
|
224
|
+
# The project site on GitHub Pages, from main: the docs, with the coverage report and its badge
|
|
225
|
+
# under coverage/.
|
|
226
|
+
pages:
|
|
227
|
+
needs: [lint, test, docs, coverage]
|
|
228
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
229
|
+
runs-on: ubuntu-24.04
|
|
230
|
+
timeout-minutes: 10
|
|
231
|
+
permissions:
|
|
232
|
+
pages: write
|
|
233
|
+
id-token: write
|
|
234
|
+
environment:
|
|
235
|
+
name: github-pages
|
|
236
|
+
url: ${{ steps.deploy.outputs.page_url }}
|
|
237
|
+
steps:
|
|
238
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
239
|
+
with:
|
|
240
|
+
name: docs
|
|
241
|
+
path: site
|
|
242
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
243
|
+
with:
|
|
244
|
+
name: coverage
|
|
245
|
+
path: site/coverage
|
|
246
|
+
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
|
|
247
|
+
with:
|
|
248
|
+
path: site
|
|
249
|
+
- id: deploy
|
|
250
|
+
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
|
|
251
|
+
|
|
159
252
|
wheel:
|
|
160
253
|
name: wheel (${{ matrix.platform }})
|
|
161
254
|
needs: version
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
2
|
cmake_minimum_required(VERSION 3.21)
|
|
3
|
+
# Extracted downloads get the time they were extracted, so they rebuild when they change.
|
|
4
|
+
if(POLICY CMP0135)
|
|
5
|
+
cmake_policy(SET CMP0135 NEW)
|
|
6
|
+
endif()
|
|
3
7
|
|
|
4
8
|
project(
|
|
5
9
|
Ernie
|
|
@@ -10,7 +14,7 @@ project(
|
|
|
10
14
|
)
|
|
11
15
|
|
|
12
16
|
# Pre-release suffix such as .dev12, written by CI.
|
|
13
|
-
set(ERNIE_VERSION_SUFFIX ".
|
|
17
|
+
set(ERNIE_VERSION_SUFFIX ".dev7" CACHE STRING "Pre-release suffix of Ernie's version")
|
|
14
18
|
set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
|
|
15
19
|
|
|
16
20
|
option(ERNIE_BUILD_TESTS "Build Ernie's tests" OFF)
|
|
@@ -18,6 +22,8 @@ option(ERNIE_BUILD_PYTHON "Build Ernie's Python module" OFF)
|
|
|
18
22
|
option(ERNIE_BUILD_APP "Build the ernie program" ON)
|
|
19
23
|
option(ERNIE_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF)
|
|
20
24
|
option(ERNIE_ASSERTS "Keep assertions in optimised builds" OFF)
|
|
25
|
+
option(ERNIE_TRACY "Send profiling zones to the Tracy profiler too" OFF)
|
|
26
|
+
option(ERNIE_COVERAGE "Instrument Ernie for code coverage (GCC or Clang)" OFF)
|
|
21
27
|
|
|
22
28
|
get_property(ernie_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
23
29
|
if(PROJECT_IS_TOP_LEVEL AND NOT ernie_multi_config AND NOT CMAKE_BUILD_TYPE)
|
|
@@ -34,6 +40,10 @@ if(ERNIE_BUILD_PYTHON)
|
|
|
34
40
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
35
41
|
endif()
|
|
36
42
|
|
|
43
|
+
include(cmake/third_party/glm.cmake)
|
|
44
|
+
include(cmake/third_party/dlpack.cmake)
|
|
45
|
+
include(cmake/third_party/json.cmake)
|
|
46
|
+
include(cmake/third_party/tracy.cmake)
|
|
37
47
|
include(cmake/third_party/vulkan_headers.cmake)
|
|
38
48
|
include(cmake/third_party/volk.cmake)
|
|
39
49
|
|
|
@@ -68,6 +78,12 @@ if(ERNIE_ASSERTS)
|
|
|
68
78
|
INTERFACE $<IF:$<CXX_COMPILER_ID:MSVC>,/UNDEBUG,-UNDEBUG>
|
|
69
79
|
)
|
|
70
80
|
endif()
|
|
81
|
+
if(ERNIE_COVERAGE)
|
|
82
|
+
# Unoptimised, so every line maps to its own counters; atomic, as ParallelFor's threads share
|
|
83
|
+
# them.
|
|
84
|
+
target_compile_options(ernie_build_options INTERFACE --coverage -fprofile-update=atomic -O0 -g)
|
|
85
|
+
target_link_options(ernie_build_options INTERFACE --coverage)
|
|
86
|
+
endif()
|
|
71
87
|
|
|
72
88
|
add_subdirectory(ernie)
|
|
73
89
|
|
|
@@ -32,6 +32,19 @@
|
|
|
32
32
|
"FETCHCONTENT_BASE_DIR": "${sourceDir}/.deps"
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
|
+
{
|
|
36
|
+
"name": "coverage",
|
|
37
|
+
"displayName": "Coverage",
|
|
38
|
+
"description": "Instrumented for code coverage, as CI measures it, in build/coverage",
|
|
39
|
+
"inherits": "dev",
|
|
40
|
+
"binaryDir": "${sourceDir}/build/coverage",
|
|
41
|
+
"cacheVariables": {
|
|
42
|
+
"CMAKE_BUILD_TYPE": "Debug",
|
|
43
|
+
"ERNIE_COVERAGE": "ON",
|
|
44
|
+
"ERNIE_WARNINGS_AS_ERRORS": "ON",
|
|
45
|
+
"FETCHCONTENT_BASE_DIR": "${sourceDir}/.deps"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
35
48
|
{
|
|
36
49
|
"name": "package",
|
|
37
50
|
"displayName": "Packages",
|
|
@@ -57,6 +70,10 @@
|
|
|
57
70
|
"name": "ci",
|
|
58
71
|
"configurePreset": "ci"
|
|
59
72
|
},
|
|
73
|
+
{
|
|
74
|
+
"name": "coverage",
|
|
75
|
+
"configurePreset": "coverage"
|
|
76
|
+
},
|
|
60
77
|
{
|
|
61
78
|
"name": "package",
|
|
62
79
|
"configurePreset": "package"
|
|
@@ -76,6 +93,13 @@
|
|
|
76
93
|
"output": {
|
|
77
94
|
"outputOnFailure": true
|
|
78
95
|
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "coverage",
|
|
99
|
+
"configurePreset": "coverage",
|
|
100
|
+
"output": {
|
|
101
|
+
"outputOnFailure": true
|
|
102
|
+
}
|
|
79
103
|
}
|
|
80
104
|
]
|
|
81
105
|
}
|
|
@@ -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.dev7
|
|
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
|
|
@@ -16,6 +16,7 @@ Description-Content-Type: text/markdown
|
|
|
16
16
|
> 🚧 **This project is in active beta development.** This means the API is unstable, features may be added or removed, and breaking changes are likely to occur frequently and without notice as the design is refined.
|
|
17
17
|
|
|
18
18
|
[](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml)
|
|
19
|
+
[](https://alexmaietta.github.io/ernie/coverage/)
|
|
19
20
|
[](https://github.com/alexmaietta/ernie/releases)
|
|
20
21
|
[](https://pypi.org/project/ernie-renderer/)
|
|
21
22
|
[](https://alexmaietta.github.io/ernie/)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
> 🚧 **This project is in active beta development.** This means the API is unstable, features may be added or removed, and breaking changes are likely to occur frequently and without notice as the design is refined.
|
|
2
2
|
|
|
3
3
|
[](https://github.com/alexmaietta/ernie/actions/workflows/ci.yml)
|
|
4
|
+
[](https://alexmaietta.github.io/ernie/coverage/)
|
|
4
5
|
[](https://github.com/alexmaietta/ernie/releases)
|
|
5
6
|
[](https://pypi.org/project/ernie-renderer/)
|
|
6
7
|
[](https://alexmaietta.github.io/ernie/)
|
|
@@ -9,6 +9,12 @@ set(ERNIE_TEST_TIMEOUT_unit 10)
|
|
|
9
9
|
set(ERNIE_TEST_TIMEOUT_gpu 60)
|
|
10
10
|
set(ERNIE_TEST_TIMEOUT_accuracy 120)
|
|
11
11
|
set(ERNIE_TEST_TIMEOUT_python 120)
|
|
12
|
+
# Unoptimised, instrumented coverage builds run several times slower.
|
|
13
|
+
if(ERNIE_COVERAGE)
|
|
14
|
+
foreach(label unit gpu accuracy python)
|
|
15
|
+
math(EXPR ERNIE_TEST_TIMEOUT_${label} "${ERNIE_TEST_TIMEOUT_${label}} * 10")
|
|
16
|
+
endforeach()
|
|
17
|
+
endif()
|
|
12
18
|
|
|
13
19
|
# Adds the gtest executable ernie_tests_<name> and registers its tests as ernie.<name>.<test>.
|
|
14
20
|
function(ernie_add_test_suite name)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
set(ERNIE_DEP_VERSION_dlpack v1.3 CACHE STRING "Tag of DLPack to fetch")
|
|
3
|
+
mark_as_advanced(ERNIE_DEP_VERSION_dlpack)
|
|
4
|
+
|
|
5
|
+
include(FetchContent)
|
|
6
|
+
FetchContent_Declare(
|
|
7
|
+
dlpack
|
|
8
|
+
GIT_REPOSITORY https://github.com/dmlc/dlpack.git
|
|
9
|
+
GIT_TAG ${ERNIE_DEP_VERSION_dlpack}
|
|
10
|
+
GIT_SHALLOW TRUE
|
|
11
|
+
SOURCE_SUBDIR no-build
|
|
12
|
+
)
|
|
13
|
+
FetchContent_MakeAvailable(dlpack)
|
|
14
|
+
|
|
15
|
+
# The tensor exchange header, nothing to build.
|
|
16
|
+
add_library(ernie_dlpack INTERFACE)
|
|
17
|
+
target_include_directories(ernie_dlpack SYSTEM INTERFACE "${dlpack_SOURCE_DIR}/include")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
set(ERNIE_DEP_VERSION_glm 1.0.3 CACHE STRING "Tag of glm to fetch")
|
|
3
|
+
mark_as_advanced(ERNIE_DEP_VERSION_glm)
|
|
4
|
+
|
|
5
|
+
set(GLM_BUILD_LIBRARY OFF)
|
|
6
|
+
set(GLM_BUILD_TESTS OFF)
|
|
7
|
+
set(GLM_BUILD_INSTALL OFF)
|
|
8
|
+
|
|
9
|
+
include(FetchContent)
|
|
10
|
+
FetchContent_Declare(
|
|
11
|
+
glm
|
|
12
|
+
GIT_REPOSITORY https://github.com/g-truc/glm.git
|
|
13
|
+
GIT_TAG ${ERNIE_DEP_VERSION_glm}
|
|
14
|
+
GIT_SHALLOW TRUE
|
|
15
|
+
)
|
|
16
|
+
FetchContent_MakeAvailable(glm)
|
|
17
|
+
|
|
18
|
+
add_library(ernie_glm INTERFACE)
|
|
19
|
+
target_include_directories(ernie_glm SYSTEM INTERFACE "${glm_SOURCE_DIR}")
|
|
20
|
+
target_compile_definitions(ernie_glm INTERFACE GLM_FORCE_DEPTH_ZERO_TO_ONE)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
set(ERNIE_DEP_VERSION_json v3.12.0 CACHE STRING "Release of nlohmann/json to fetch")
|
|
3
|
+
mark_as_advanced(ERNIE_DEP_VERSION_json)
|
|
4
|
+
|
|
5
|
+
# The release's single-include archive, without the repository's tests and history.
|
|
6
|
+
include(FetchContent)
|
|
7
|
+
FetchContent_Declare(
|
|
8
|
+
nlohmann_json
|
|
9
|
+
URL https://github.com/nlohmann/json/releases/download/${ERNIE_DEP_VERSION_json}/include.zip
|
|
10
|
+
)
|
|
11
|
+
FetchContent_MakeAvailable(nlohmann_json)
|
|
12
|
+
|
|
13
|
+
add_library(ernie_json INTERFACE)
|
|
14
|
+
target_include_directories(ernie_json SYSTEM INTERFACE "${nlohmann_json_SOURCE_DIR}/single_include")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
set(ERNIE_DEP_VERSION_tracy v0.14.1 CACHE STRING "Tag of Tracy to fetch")
|
|
3
|
+
mark_as_advanced(ERNIE_DEP_VERSION_tracy)
|
|
4
|
+
|
|
5
|
+
# Ernie's profiling zones also go to Tracy when ERNIE_TRACY is on; otherwise this is empty.
|
|
6
|
+
add_library(ernie_tracy INTERFACE)
|
|
7
|
+
if(NOT ERNIE_TRACY)
|
|
8
|
+
return()
|
|
9
|
+
endif()
|
|
10
|
+
|
|
11
|
+
# Collect only while a profiler is connected, so a profiling build runs at full speed until then.
|
|
12
|
+
set(TRACY_ENABLE ON CACHE BOOL "" FORCE)
|
|
13
|
+
set(TRACY_ON_DEMAND ON CACHE BOOL "" FORCE)
|
|
14
|
+
|
|
15
|
+
include(FetchContent)
|
|
16
|
+
FetchContent_Declare(
|
|
17
|
+
tracy
|
|
18
|
+
GIT_REPOSITORY https://github.com/wolfpld/tracy.git
|
|
19
|
+
GIT_TAG ${ERNIE_DEP_VERSION_tracy}
|
|
20
|
+
GIT_SHALLOW TRUE
|
|
21
|
+
)
|
|
22
|
+
FetchContent_MakeAvailable(tracy)
|
|
23
|
+
set_target_properties(
|
|
24
|
+
TracyClient
|
|
25
|
+
PROPERTIES POSITION_INDEPENDENT_CODE ON COMPILE_WARNING_AS_ERROR OFF
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
target_link_libraries(ernie_tracy INTERFACE Tracy::TracyClient)
|
|
29
|
+
target_compile_definitions(ernie_tracy INTERFACE ERNIE_TRACY=1)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Ernie
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mkdocs==1.6.1
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
add_library(
|
|
3
|
+
ernie_core
|
|
4
|
+
STATIC
|
|
5
|
+
disk_cache.cpp
|
|
6
|
+
log.cpp
|
|
7
|
+
mapped_file.cpp
|
|
8
|
+
noise.cpp
|
|
9
|
+
profile_report.cpp
|
|
10
|
+
profiler.cpp
|
|
11
|
+
tensor.cpp
|
|
12
|
+
version.cpp
|
|
13
|
+
)
|
|
14
|
+
target_include_directories(ernie_core PUBLIC "${PROJECT_SOURCE_DIR}")
|
|
15
|
+
target_link_libraries(
|
|
16
|
+
ernie_core
|
|
17
|
+
PUBLIC ernie_glm ernie_dlpack ernie_tracy
|
|
18
|
+
PRIVATE ernie_json ernie_build_options
|
|
19
|
+
)
|
|
20
|
+
find_package(Threads REQUIRED)
|
|
21
|
+
target_link_libraries(ernie_core PUBLIC Threads::Threads)
|
|
22
|
+
set_source_files_properties(
|
|
23
|
+
version.cpp
|
|
24
|
+
PROPERTIES
|
|
25
|
+
COMPILE_DEFINITIONS
|
|
26
|
+
"ERNIE_VERSION_STRING=\"${ERNIE_VERSION}\";ERNIE_BUILD_TYPE=\"$<CONFIG>\""
|
|
27
|
+
)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file disk_cache.cpp
|
|
3
|
+
/// @brief Cache folder lookup and cache key hashing.
|
|
4
|
+
#include "ernie/core/disk_cache.h"
|
|
5
|
+
|
|
6
|
+
#include <cstdio>
|
|
7
|
+
#include <cstdlib>
|
|
8
|
+
#include <fstream>
|
|
9
|
+
#include <random>
|
|
10
|
+
#include <system_error>
|
|
11
|
+
|
|
12
|
+
namespace ernie {
|
|
13
|
+
|
|
14
|
+
std::optional<std::filesystem::path> CacheDirectory(const char* variable, std::string_view folder) {
|
|
15
|
+
namespace fs = std::filesystem;
|
|
16
|
+
if (const char* own = std::getenv(variable)) {
|
|
17
|
+
const std::string_view value(own);
|
|
18
|
+
if (value.empty() || value == "0") {
|
|
19
|
+
return std::nullopt;
|
|
20
|
+
}
|
|
21
|
+
return fs::path(value);
|
|
22
|
+
}
|
|
23
|
+
if (const char* xdg = std::getenv("XDG_CACHE_HOME"); xdg != nullptr && *xdg != '\0') {
|
|
24
|
+
return fs::path(xdg) / "ernie" / folder;
|
|
25
|
+
}
|
|
26
|
+
#if defined(_WIN32)
|
|
27
|
+
if (const char* local = std::getenv("LOCALAPPDATA"); local != nullptr && *local != '\0') {
|
|
28
|
+
return fs::path(local) / "ernie" / folder;
|
|
29
|
+
}
|
|
30
|
+
#else
|
|
31
|
+
if (const char* home = std::getenv("HOME"); home != nullptr && *home != '\0') {
|
|
32
|
+
return fs::path(home) / ".cache" / "ernie" / folder;
|
|
33
|
+
}
|
|
34
|
+
#endif
|
|
35
|
+
return std::nullopt;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
void CacheKey::Add(std::string_view text) {
|
|
39
|
+
const std::uint64_t size = text.size();
|
|
40
|
+
Bytes(&size, sizeof(size));
|
|
41
|
+
Bytes(text.data(), text.size());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
std::string CacheKey::Hex() const {
|
|
45
|
+
char text[33];
|
|
46
|
+
std::snprintf(text, sizeof(text), "%016llx%016llx", static_cast<unsigned long long>(hashes_[0]),
|
|
47
|
+
static_cast<unsigned long long>(hashes_[1]));
|
|
48
|
+
return text;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void CacheKey::Bytes(const void* data, std::size_t size) {
|
|
52
|
+
const auto* bytes = static_cast<const unsigned char*>(data);
|
|
53
|
+
for (std::uint64_t& hash : hashes_) {
|
|
54
|
+
for (std::size_t i = 0; i < size; ++i) {
|
|
55
|
+
hash = (hash ^ bytes[i]) * 0x100000001b3ull;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
std::optional<std::vector<float>> ReadCachedFloats(const std::filesystem::path& path,
|
|
61
|
+
std::size_t count) {
|
|
62
|
+
std::ifstream in(path, std::ios::binary);
|
|
63
|
+
std::vector<float> values(count);
|
|
64
|
+
const auto bytes = static_cast<std::streamsize>(count * sizeof(float));
|
|
65
|
+
if (in.read(reinterpret_cast<char*>(values.data()), bytes) &&
|
|
66
|
+
in.peek() == std::ifstream::traits_type::eof()) {
|
|
67
|
+
return values;
|
|
68
|
+
}
|
|
69
|
+
return std::nullopt;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void WriteCachedFloats(const std::filesystem::path& path, std::span<const float> values) {
|
|
73
|
+
namespace fs = std::filesystem;
|
|
74
|
+
fs::path partial = path;
|
|
75
|
+
partial += ".part" + std::to_string(std::random_device{}());
|
|
76
|
+
std::error_code error;
|
|
77
|
+
fs::create_directories(path.parent_path(), error);
|
|
78
|
+
{
|
|
79
|
+
std::ofstream out(partial, std::ios::binary);
|
|
80
|
+
out.write(reinterpret_cast<const char*>(values.data()),
|
|
81
|
+
static_cast<std::streamsize>(values.size_bytes()));
|
|
82
|
+
if (!out) {
|
|
83
|
+
error = std::make_error_code(std::errc::io_error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (!error) {
|
|
87
|
+
fs::rename(partial, path, error);
|
|
88
|
+
}
|
|
89
|
+
if (error) {
|
|
90
|
+
fs::remove(partial, error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
} // namespace ernie
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file disk_cache.h
|
|
3
|
+
/// @brief Cache folders and keys for caches kept between runs.
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include <array>
|
|
7
|
+
#include <cstddef>
|
|
8
|
+
#include <cstdint>
|
|
9
|
+
#include <filesystem>
|
|
10
|
+
#include <optional>
|
|
11
|
+
#include <span>
|
|
12
|
+
#include <string>
|
|
13
|
+
#include <string_view>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
namespace ernie {
|
|
17
|
+
|
|
18
|
+
/// @brief Finds where one of Ernie's caches keeps its files.
|
|
19
|
+
/// @param variable An environment variable naming the folder; empty
|
|
20
|
+
/// or "0" disables the cache.
|
|
21
|
+
/// @param folder The subfolder of the user's cache folder used
|
|
22
|
+
/// when `variable` is unset (`$XDG_CACHE_HOME/ernie`,
|
|
23
|
+
/// `~/.cache/ernie`, `%LOCALAPPDATA%\ernie`).
|
|
24
|
+
/// @return The folder, or nothing when the cache is disabled.
|
|
25
|
+
std::optional<std::filesystem::path> CacheDirectory(const char* variable, std::string_view folder);
|
|
26
|
+
|
|
27
|
+
/// @brief A 128-bit key over everything a cache entry depends on.
|
|
28
|
+
/// Two 64-bit FNV-1a hashes from different seeds; each piece is
|
|
29
|
+
/// length-prefixed.
|
|
30
|
+
class CacheKey {
|
|
31
|
+
public:
|
|
32
|
+
/// @brief Mixes a piece of text into the key.
|
|
33
|
+
/// @param text The piece to add.
|
|
34
|
+
void Add(std::string_view text);
|
|
35
|
+
|
|
36
|
+
/// @return The key as 32 hex digits, for a file name.
|
|
37
|
+
std::string Hex() const;
|
|
38
|
+
|
|
39
|
+
private:
|
|
40
|
+
void Bytes(const void* data, std::size_t size);
|
|
41
|
+
|
|
42
|
+
std::array<std::uint64_t, 2> hashes_{0xcbf29ce484222325ull, 0x84222325cbf29ce4ull};
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/// @brief Reads a cache file of floats.
|
|
46
|
+
/// @param path The file.
|
|
47
|
+
/// @param count How many floats it must hold.
|
|
48
|
+
/// @return The floats, or nothing if the file is missing or holds a different amount.
|
|
49
|
+
std::optional<std::vector<float>> ReadCachedFloats(const std::filesystem::path& path,
|
|
50
|
+
std::size_t count);
|
|
51
|
+
|
|
52
|
+
/// @brief Writes a cache file of floats so that no reader ever sees part of it: written beside it,
|
|
53
|
+
/// then renamed over it. Failures leave no file behind and are otherwise ignored, since a cache
|
|
54
|
+
/// can always be rebuilt.
|
|
55
|
+
/// @param path The file; its folder is created if needed.
|
|
56
|
+
/// @param values The floats.
|
|
57
|
+
void WriteCachedFloats(const std::filesystem::path& path, std::span<const float> values);
|
|
58
|
+
|
|
59
|
+
} // namespace ernie
|