From 7a871d91a23c73c1ac20873f603ca5bcd2d7a710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Thu, 24 Oct 2024 13:35:27 +0200 Subject: [PATCH 01/10] Remove unused lights from MPIDistribTutorial --- modules/mpi/tutorials/ospMPIDistribTutorialSpheres.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/modules/mpi/tutorials/ospMPIDistribTutorialSpheres.cpp b/modules/mpi/tutorials/ospMPIDistribTutorialSpheres.cpp index 22c16a617..d9e6f6c1d 100644 --- a/modules/mpi/tutorials/ospMPIDistribTutorialSpheres.cpp +++ b/modules/mpi/tutorials/ospMPIDistribTutorialSpheres.cpp @@ -94,16 +94,6 @@ int main(int argc, char **argv) // create OSPRay renderer cpp::Renderer renderer("mpiRaycast"); - - // create and setup an ambient light - std::array lights = { - cpp::Light("ambient"), cpp::Light("distant")}; - lights[0].commit(); - - lights[1].setParam("direction", vec3f(-1.f, -1.f, 0.5f)); - lights[1].commit(); - - renderer.setParam("lights", cpp::CopiedData(lights)); renderer.setParam("aoSamples", 1); // create a GLFW OSPRay window: this object will create and manage the From 52cdaf496637bf6514491ce7a8c13316ae124453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Thu, 14 Nov 2024 12:56:20 +0100 Subject: [PATCH 02/10] Docu: Unstructured clarifications --- doc/api.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/api.md b/doc/api.md index 5df718c2f..84edff378 100644 --- a/doc/api.md +++ b/doc/api.md @@ -832,11 +832,12 @@ the vertices and data values. Vertex ordering is the same as `VTK_PYRAMID`: four bottom vertices counterclockwise, then the top vertex. -To maintain VTK data compatibility, the `index` array may be specified -with cell sizes interleaved with vertex indices in the following format: -$n, id_1, ..., id_n, m, id_1, ..., id_m$. This alternative `index` array -layout can be enabled through the `indexPrefixed` flag (in which case, -the `cell.type` parameter must be omitted). +For backward compatibility with legacy vtkCellArray the `index` array +can also be specified with cell sizes interleaved with vertex indices in +the following format: $n, id_1, ..., id_n, m, id_1, ..., id_m$. This +alternative `index` array layout can be enabled through the +`indexPrefixed` flag (in which case, the `cell.type` parameter must be +omitted). ------------------- ------------------ -------- --------------------------------------- Type Name Default Description @@ -850,9 +851,9 @@ the `cell.type` parameter must be omitted). vertex array(s)) that form cells bool indexPrefixed false indicates that the `index` array is - compatible to VTK, where the indices of - each cell are prefixed with the number - of vertices + compatible to legacy vtkCellArray, + where the indices of each cell are + prefixed with the number of vertices uint32[] / uint64[] cell.index [data] array of locations (into the index array), specifying the first index From 7fd7e62d27c35cdc393d8223ce4bb7fb78ed2466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Thu, 9 Jan 2025 10:50:40 +0100 Subject: [PATCH 03/10] Update and reformat changelog --- CHANGELOG.md | 192 +++++++++++++++++++++++++++------------------------ 1 file changed, 100 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca6af4e3e..f052ca4b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,34 +4,38 @@ Version History ### Changes in v3.3.0: - Add more framebuffer channels and options: - - Parameter `bool projectedDepth` to switch from euclidean to - projected distance for channel `OSP_FB_DEPTH` (often the distance - to the image plane, or simply depth) - - Channel `OSP_FB_FIRST_NORMAL` holds the world-space normal of the - *first* hit (as opposed to `OSP_FB_NORMAL`, which holds the normal - of the first *non-specular* hit for denoising) - - Channel `OSP_FB_POSITION` holds the world-space position of the first hit + - Parameter `bool projectedDepth` to switch from euclidean to + projected distance for channel `OSP_FB_DEPTH` (often the + distance to the image plane, or simply depth) + - Channel `OSP_FB_FIRST_NORMAL` holds the world-space normal of + the *first* hit (as opposed to `OSP_FB_NORMAL`, which holds the + normal of the first *non-specular* hit for denoising) + - Channel `OSP_FB_POSITION` holds the world-space position of the + first hit - Improved sampling of layered materials - New parameter `specularMetallic` for the Principled material to optionally disable the incluence of `specular` to metallicness, improving compatibility with glTF `KHR_materials_specular` - Improvements to and documentation of the pathtracer's Shadow Catcher feature (enabled via parameter `shadowCatcherPlane`) +- Bug fixes + - Find geometry lights after first empty instance + - Segfault when numPrimitives() if called before commit() ### Changes in v3.2.0: - Sampling improvements: - - Better performance (lower rendering time and faster convergence) - - More pleasing blue noise enabled when the total number of frames + - Better performance (lower rendering time and faster convergence) + - More pleasing blue noise enabled when the total number of frames to be accumulated is known in advance and set as the `targetFrames` parameter at the framebuffer - - Note a maximum of 64k samples is supported + - Note a maximum of 64k samples is supported - Improved `denoiser` image operation: - - User-controlled quality levels via parameter `quality` - - Optionally denoise alpha channel as well, enabled via - parameter `denoiseAlpha` -- Support half-precision (16\ bit float) texture formats - `OSP_TEXTURE_[RGBA16F|RGB16F|RA16F|R16F]` and two-channel 32\ bit + - User-controlled quality levels via parameter `quality` + - Optionally denoise alpha channel as well, enabled via parameter + `denoiseAlpha` +- Support half-precision (16 bit float) texture formats + `OSP_TEXTURE_[RGBA16F|RGB16F|RA16F|R16F]` and two-channel 32 bit float textures `OSP_TEXTURE_RA32F` - New parameter `limitIndirectLightSamples` for the `pathtracer` which limits the number of light samples after the first non-specular @@ -40,22 +44,23 @@ Version History additional memory per texture needed cannot be spared, applications can disable the generation of MIP maps with device parameter `disableMipMapGeneration` -- The backplate (background texture) is now always sampled at the pixel - center and thus not blurred by the pixel filter anymore +- The backplate (background texture) is now always sampled at the + pixel center and thus not blurred by the pixel filter anymore - Avoid color bleeding across eye-subimages when stereo rendering - Superbuild uses binary packages of Open VKL - Removed Intel ISPCRT dependency (ISPC compiler is still needed): - oneAPI Level Zero Loader is no longer necessary - - `zeContext` and `zeDevice`device parameters are no longer supported - - `ispcrtContext` and `ispcrtDevice`device parameters are no longer + - `zeContext` and `zeDevice`device parameters are no longer supported + - `ispcrtContext` and `ispcrtDevice`device parameters are no + longer supported - Clarify the size of `OSP_BOOL` to be 1 byte - Fix artifacts occasionally appearing with `gpu` device - The new minimum versions of dependencies: - - Embree v4.3.3 (better error reporting) - - Open Image Denoise v2.3 (better image quality with `HIGH` - quality mode, added `FAST` quality mode) - - rkcommon v1.14.0 + - Embree v4.3.3 (better error reporting) + - Open Image Denoise v2.3 (better image quality with `HIGH` + quality mode, added `FAST` quality mode) + - rkcommon v1.14.0 ### Changes in v3.1.0: @@ -73,13 +78,13 @@ Version History - Fix empty image on Windows when `focusDistance=0` - Fix missing SDK headers for `ISPCDevice*` - The new minimum versions of dependencies: - - Embree v4.3.1 - - Open VKL v2.0.1 - - Open Image Denoise v2.2 (better quality with fine details, - support AArch64 CPU on Linux) - - ISPCRT v1.23.0 (uses environment variable `ISPCRT_GPU_DRIVER` - to select GPU to run on when multiple (i)GPUs are present) - - rkcommon v1.13.0 (fixes crash using GPU and emissive geometry) + - Embree v4.3.1 + - Open VKL v2.0.1 + - Open Image Denoise v2.2 (better quality with fine details, + support AArch64 CPU on Linux) + - ISPCRT v1.23.0 (uses environment variable `ISPCRT_GPU_DRIVER` to + select GPU to run on when multiple (i)GPUs are present) + - rkcommon v1.13.0 (fixes crash using GPU and emissive geometry) ### Changes in v3.0.0: @@ -88,7 +93,7 @@ Version History Implementation is based on the [SYCL](https://www.khronos.org/sycl/) cross-platform programming language implemented by [Intel oneAPI Data Parallel C++ - (DPC++)](https://www.intel.com/content/www/us/en/developer/tools/oneapi/data-parallel-c-plus-plus.html). + (DPC++)](https://www.intel.com/content/www/us/en/developer/tools/oneapi/data-parallel-c-plus-plus.html).\ Note that the following features are not implemented yet or are not working correctly on the new `gpu` device: - Multiple volumes in the scene @@ -129,14 +134,14 @@ Version History - Fix crash in HDRI light - Fix link order for Debug build on Windows - The new minimum versions of dependencies: - - Embree v4.3.0 - - Open VKL v2.0.0 - - Open Image Denoise v2.1.0 - - ISPC v1.21.1 - - rkcommon v1.12.0 + - Embree v4.3.0 + - Open VKL v2.0.0 + - Open Image Denoise v2.1.0 + - ISPC v1.21.1 + - rkcommon v1.12.0 - Breaking API changes - Renamed `OSP_TEXTURE_FILTER_BILINEAR` to - `OSP_TEXTURE_FILTER_LINEAR ` and + `OSP_TEXTURE_FILTER_LINEAR` and `OSP_VOLUME_FILTER_TRI[LINEAR|CUBIC]` to `OSP_VOLUME_FILTER_[LINEAR|CUBIC]` - Most enums now use storage type `uint32` @@ -155,7 +160,6 @@ Version History `intensityQuantity` other than `OSP_INTENSITY_QUANTITY_SCALE` - ### Changes in v2.12.0: - Support denoising on the GPU with OIDN 2.0, which is the new minimum @@ -181,9 +185,9 @@ Version History - Support for volume rendering (and thus the dependency to Open VKL) can now be compile-time controlled via CMake variable `OSPRAY_ENABLE_VOLUMES` -- OSPRay's MPI modules have been split up and renamed, the `mpiOffload` - device is now in the `mpi_offload` module, while the `mpiDistributed` - device is now in the `mpi_distributed_cpu` module +- OSPRay's MPI modules have been split up and renamed, the + `mpiOffload` device is now in the `mpi_offload` module, while the + `mpiDistributed` device is now in the `mpi_distributed_cpu` module - Add native support for spheres via Embree, which requires the positions and radius of the spheres to be interleaved in memory; if this is not the case, OSPRay will internally create a copy of the @@ -241,7 +245,7 @@ Version History the `cellCentered` parameter (vertex-centered remains the default) - Particle volumes ignore particles with zero radius -- Add support for dynamic load balancing in MPI Offload device +- Add support for dynamic load balancing in MPI Offload device - Support for photometric lights (e.g., IES or EULUMDAT) also for `sphere` and `quad` lights. When setting `intensityDistribution`, other values for `intensityQuantity` than @@ -354,7 +358,7 @@ Version History for VDB volume - Fixed artifacts for isosurfaces of unstructured volumes - Performance improvements for isosurfaces when multiple isovalues - are selected + are selected - Better, adaptive sampling of AMR volumes - The `mpiOffload` and `mpiDistributed` devices now support picking. Picking in the distributed device will return the globally closest @@ -386,13 +390,13 @@ Version History interpretation and conversion of the `intensity` into a radiative quantity - OSPRay now requires minimum Open VKL v0.12.0 to bring the following - improvements: + improvements: - Better default sampling rate for scaled volumes, improving performance - Higher robustness for axis-aligned rays -- Removed limit on the number of volumes (both overlapped and separate) - that a ray can intersect while rendering. Now it is limited by - available memory only. +- Removed limit on the number of volumes (both overlapped and + separate) that a ray can intersect while rendering. Now it is + limited by available memory only. - Move to OIDN v1.3.0 to bring the following improvements: - Improved denoising quality (sharpness of fine details, fewer noisy artifacts) @@ -401,7 +405,7 @@ Version History geometry/volume objects rebound using an object parameter - Fix light leaking artifacts at poles of HDRI (and Sun-Sky) light - Add sRGB conversion to `ospExamples` such that the color of the - widget for `backgroundColor` actually matches + widget for `backgroundColor` actually matches - Dropping support for MSVC14, new minimum compiler on Windows is MSVC15 (Visual Studio 2017) @@ -411,7 +415,7 @@ Version History background is seen through refractive objects like glass, by enabling `backgroundRefraction` - OSPRay now requires minimum Open VKL v0.11.0 to bring the following - improvements: + improvements: - Improved rendering performance of VDB volumes - Added support for configurable iterator depth via the `maxIteratorDepth` parameters for unstructured and particle @@ -451,8 +455,8 @@ Version History - Added support for data arrays with a stride between voxels in volumes - Application thread waiting for finished image via `ospWait` - participates in rendering, increasing CPU utilization; via - rkcommon v1.5.0 + participates in rendering, increasing CPU utilization; via rkcommon + v1.5.0 - Added `ospray_cpp` compatibility headers for C++ wrappers to understand rkcommon and glm short vector types - For rkcommon, include `ospray/ospray_cpp/ext/rkcommon.h` @@ -577,9 +581,9 @@ Version History - Fix issue where OSPRay always loaded the ISPC module, even if not required - Fixes for MPI module - - Fix member variable type for bcast - - Fix incorrect data size computation in `offload` device - - Fix large data chunking support for MPI Bcast + - Fix member variable type for bcast + - Fix incorrect data size computation in `offload` device + - Fix large data chunking support for MPI Bcast - OSPRay now requires minimum Open VKL v0.9.0 ### Changes in v2.0.1: @@ -608,16 +612,16 @@ Version History ### Changes in v2.0.0: - New major revision of OSPRay brings API breaking improvements over - v1.x. See [doc/ospray2_porting_guide.md] for a deeper description of - migrating from v1.x to v2.0 and the latest - [API documentation](README.md#ospray-api) - - `ospRenderFrame` now takes all participating objects as - function parameters instead of setting some as renderer params + v1.x. See \[doc/ospray2_porting_guide.md\] for a deeper description + of migrating from v1.x to v2.0 and the latest [API + documentation](README.md#ospray-api) + - `ospRenderFrame` now takes all participating objects as function + parameters instead of setting some as renderer params - `ospRenderFrame` is now asynchronous, where the task is managed through a returned `OSPFuture` handle - - The hierarchy of objects in a scene are now more granular to - aid in scene construction flexibility and reduce potential - object duplication + - The hierarchy of objects in a scene are now more granular to aid + in scene construction flexibility and reduce potential object + duplication - Type-specific parameter setting functions have been consolidated into a single `ospSetParam` API call - C++ wrappers found in `ospray_cpp.h` now automatically track @@ -633,8 +637,8 @@ Version History - All utility functions are implemented in terms of the core API found in `ospray.h`, therefore they are compatible with any device backend -- Introduction of new Intel® Open Volume Kernel Library (Open VKL) - for greatly enhanced volume sampling and rendering features and +- Introduction of new Intel® Open Volume Kernel Library (Open VKL) for + greatly enhanced volume sampling and rendering features and performance - Added direct support for Intel® Open Image Denoise as an optional module, which adds a `denoiser` type to `ospNewImageOperation` @@ -643,8 +647,8 @@ Version History and OSPRay itself - Found in `scripts/superbuild` - See documentation for more details and example usage -- The `ospcommon` library now lives as a stand alone repository and - is required to build OSPRay +- The `ospcommon` library now lives as a stand alone repository and is + required to build OSPRay - The MPI module is now a separate repository, which also contains all MPI distributed rendering documentation - Log levels are now controlled with enums and named strings (where @@ -671,11 +675,12 @@ Version History - Introduction of new `boxes` geometry type - Expansion of information returned by `ospPick` - Addition of API to query version information at runtime -- Curves now supports both, per vertex varying radii as in `vec4f[] - vertex.position_radius` and constant radius for the geometry with - `float radius`. It uses `OSP_ROUND` type and `OSP_LINEAR` basis by - default to create the connected segments of constant radius. For per - vertex varying radii curves it uses Embree curves. +- Curves now supports both, per vertex varying radii as in + `vec4f[] vertex.position_radius` and constant radius for the + geometry with `float radius`. It uses `OSP_ROUND` type and + `OSP_LINEAR` basis by default to create the connected segments of + constant radius. For per vertex varying radii curves it uses Embree + curves. - Add new Embree curve type `OSP_CATMULL_ROM` for curves - Minimum required Embree version is now 3.7.0 - Removal of `cylinders` and `streamlines` geometry, use `curves` @@ -713,15 +718,16 @@ Version History `ospray::mpi::TileOperation`, respectively. See the `ospray::mpi::DistributedRaycastRenderer` for an example to start from. - - The MPI Offload device can now communicate over sockets, allowing - for remote rendering on clusters in the listen/connect mode + - The MPI Offload device can now communicate over sockets, + allowing for remote rendering on clusters in the listen/connect + mode - Data and commands are now sent asynchronously to the MPI workers in the Offload device, overlapping better with application work. The number of data copies performed has also been significantly reduced, and should improve load times - The MPI Distributed device will now infer the rank's local data - bounds based on the volumes and geometry specified if no bounding - boxes are specified + bounds based on the volumes and geometry specified if no + bounding boxes are specified - When specifying custom bounds on each rank IDs are no longer required, and ranks sharing data will be determined by finding any specifying the same bounding boxes. This will also be done @@ -862,8 +868,8 @@ Version History ### Changes in v1.6.0: -- Updated ispc device to use Embree3 (minimum required Embree - version is 3.1) +- Updated ispc device to use Embree3 (minimum required Embree version + is 3.1) - Added new `ospShutdown()` API function to aid in correctness and determinism of OSPRay API cleanup - Added "`Principled`" and "`CarPaint"` materials to the path tracer @@ -943,9 +949,9 @@ Version History - Fixed a crash in MPI mode when creating lights without a renderer - Fixed an issue with camera lens samples not initialized when - `spp` <= 0 - - Fixed an issue in `ospExampleViewer` when specifying multiple data - files + `spp` \<= 0 + - Fixed an issue in `ospExampleViewer` when specifying multiple + data files - The C99 tutorial is now indicated as the default; the C++ wrappers do not change the semantics of the API (memory management) so the C99 version should be considered first when learning the API @@ -1079,8 +1085,8 @@ Version History - Devices can be created and set current, creating an alternative method for initializing the API - New API functions for committing parameters on Devices -- Removed support for the first generation Intel® Xeon Phi™ coprocessor - (codename Knights Corner) +- Removed support for the first generation Intel® Xeon Phi™ + coprocessor (codename Knights Corner) - Other minor improvements, updates, and bug fixes - Updated Embree required version to v2.13.0 for added features and performance @@ -1130,14 +1136,15 @@ Version History Xeon Phi coprocessor (codename Knights Corner) - Future major and minor releases will be upgraded to the latest version of Embree, which no longer supports Knights Corner - - Depending on user feedback, patch releases are still made to - fix bugs + - Depending on user feedback, patch releases are still made to fix + bugs - Enhanced output statistics in `ospBenchmark` application - Many fixes to the OSPRay SDK - Improved CMake detection of compile-time enabled features - Now distribute OSPRay configuration and ISPC CMake macros - Improved SDK support on Windows -- OSPRay library can now be compiled with `-Wall` and `-Wextra` enabled +- OSPRay library can now be compiled with `-Wall` and `-Wextra` + enabled - Tested with GCC v5.3.1 and Clang v3.8 - Sample applications and modules have not been fixed yet, thus applications which build OSPRay as a CMake subproject should @@ -1205,9 +1212,9 @@ Version History - Added new tasking options: `Cilk`, `Internal`, and `Debug` - Provides more ways for OSPRay to interact with calling application tasking systems - - `Cilk`: Use Intel® Cilk™ Plus language extensions (icc only) - - `Internal`: Use hand written OSPRay tasking system - - `Debug`: All tasks are run in serial (useful for debugging) + - `Cilk`: Use Intel® Cilk™ Plus language extensions (icc only) + - `Internal`: Use hand written OSPRay tasking system + - `Debug`: All tasks are run in serial (useful for debugging) - In most cases, Intel Threading Building Blocks (Intel `TBB`) remains the fastest option - Added support for adaptive accumulation and stopping @@ -1264,7 +1271,8 @@ Version History renderer - Updated default renderer to be "ao1" in ospModelViewer - Trianglemesh `postIntersect` shading is now 64-bit safe - - Texture2D has been reworked, with many improvements and bug fixes + - Texture2D has been reworked, with many improvements and bug + fixes - Fixed bug where MPI device would freeze while rendering frames with Intel TBB - Updates to CMake with better error messages when Intel TBB is @@ -1372,14 +1380,14 @@ changes. `gridSpacing` parameters - New `shared_structured_volume` volume type that allows voxel data to be provided by applications through a shared data buffer - - New API call to set (sub-)regions of volume data (`ospSetRegion()`) + - New API call to set (sub-)regions of volume data + (`ospSetRegion()`) - Added a subsampling-mode, enabled with a negative `spp` parameter; the first frame after scene changes is rendered with reduced resolution, increasing interactivity - Added multi-target ISA support: OSPRay will now select the appropriate ISA at runtime -- Added support for the Stanford SEP file format to the seismic - module +- Added support for the Stanford SEP file format to the seismic module - Added `--osp:numthreads ` command line option to restrict the number of threads OSPRay creates - Various bug fixes, cleanups and documentation updates throughout the From a553e8b43d3da71e68a971f5c21d17e1b915eed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Mon, 25 Nov 2024 13:06:15 +0100 Subject: [PATCH 04/10] Fix initialization of OpenGL on OSX, closes #601 --- CHANGELOG.md | 1 + apps/ospExamples/GLFWOSPRayWindow.cpp | 2 +- modules/mpi/tutorials/GLFWDistribOSPRayWindow.cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f052ca4b9..0b2693e84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Version History - Bug fixes - Find geometry lights after first empty instance - Segfault when numPrimitives() if called before commit() + - Initialization of OpenGL on OSX ### Changes in v3.2.0: diff --git a/apps/ospExamples/GLFWOSPRayWindow.cpp b/apps/ospExamples/GLFWOSPRayWindow.cpp index 4e4ef1ab7..e040b4711 100644 --- a/apps/ospExamples/GLFWOSPRayWindow.cpp +++ b/apps/ospExamples/GLFWOSPRayWindow.cpp @@ -164,7 +164,7 @@ GLFWOSPRayWindow::GLFWOSPRayWindow( glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); -#ifdef __APPLE_ +#ifdef __APPLE__ glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); const char *glslVersion = "#version 150"; diff --git a/modules/mpi/tutorials/GLFWDistribOSPRayWindow.cpp b/modules/mpi/tutorials/GLFWDistribOSPRayWindow.cpp index 1f1cab857..fbc77dfd5 100644 --- a/modules/mpi/tutorials/GLFWDistribOSPRayWindow.cpp +++ b/modules/mpi/tutorials/GLFWDistribOSPRayWindow.cpp @@ -55,7 +55,7 @@ GLFWDistribOSPRayWindow::GLFWDistribOSPRayWindow(const vec2i &windowSize, glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); -#ifdef __APPLE_ +#ifdef __APPLE__ glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); const char *glslVersion = "#version 150"; From 32f326351e053339eb5b216c7b07ee890456aa61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Mon, 2 Dec 2024 19:12:08 +0100 Subject: [PATCH 05/10] Optimized computation of Sobol dim2, +1% overall perf --- CHANGELOG.md | 4 +++- modules/cpu/math/sobol.ih | 45 +++++++++++++++++++++++--------------- modules/cpu/math/sobol.inl | 34 +--------------------------- 3 files changed, 31 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b2693e84..e59779847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,9 @@ Version History normal of the first *non-specular* hit for denoising) - Channel `OSP_FB_POSITION` holds the world-space position of the first hit -- Improved sampling of layered materials +- Sampling improvements: + - Improved sampling of layered materials + - Faster sample computation - New parameter `specularMetallic` for the Principled material to optionally disable the incluence of `specular` to metallicness, improving compatibility with glTF `KHR_materials_specular` diff --git a/modules/cpu/math/sobol.ih b/modules/cpu/math/sobol.ih index b24431d60..b7c4e435b 100644 --- a/modules/cpu/math/sobol.ih +++ b/modules/cpu/math/sobol.ih @@ -30,19 +30,30 @@ OSPRAY_BEGIN_ISPC_NAMESPACE #ifdef OSPRAY_TARGET_SYCL #include "sobol.inl" #else -extern const uniform unsigned int Sobol_revMatrices[4 * 32]; +extern const uniform unsigned int Sobol_revMatrices[3 * 32]; extern const uniform unsigned int Sobol_matrices[5 * 52]; #endif +// compute component 1 of the Sobol'-sequence (count starting from 0) +// Ahmed, "An Implementation Algorithm of 2D Sobol Sequence Fast, Elegant, and +// Compact", EGSR 2024, https://doi.org/10.2312/sr.20241147 +inline uint32 Sobol_revSample1(uint32 v) +{ + v ^= v << 16; + v ^= (v & 0x00FF00FF) << 8; + v ^= (v & 0x0F0F0F0F) << 4; + v ^= (v & 0x33333333) << 2; + v ^= (v & 0x55555555) << 1; + return reverseBits(v); +} + // compute components 1 and 2 of the Sobol'-sequence (count starting from 0) inline vec2ui Sobol_revSample2(uint32 revIndex) { - vec2ui result = make_vec2ui(0); - for (uniform uint32 i = 0; revIndex; revIndex <<= 1, i += 4) { - if (revIndex & 0x80000000u) { - result.x ^= Sobol_revMatrices[i]; - result.y ^= Sobol_revMatrices[i + 1]; - } + vec2ui result = make_vec2ui(Sobol_revSample1(revIndex), 0); + for (uniform uint32 i = 0; revIndex; revIndex <<= 1, i += 3) { + if (revIndex & 0x80000000u) + result.y ^= Sobol_revMatrices[i]; } return result; @@ -51,12 +62,11 @@ inline vec2ui Sobol_revSample2(uint32 revIndex) // compute components 1 to 3 of the Sobol'-sequence (count starting from 0) inline vec3ui Sobol_revSample3(uint32 revIndex) { - vec3ui result = make_vec3ui(0); - for (uniform uint32 i = 0; revIndex; revIndex <<= 1, i += 4) { + vec3ui result = make_vec3ui(Sobol_revSample1(revIndex), 0, 0); + for (uniform uint32 i = 0; revIndex; revIndex <<= 1, i += 3) { if (revIndex & 0x80000000u) { - result.x ^= Sobol_revMatrices[i]; - result.y ^= Sobol_revMatrices[i + 1]; - result.z ^= Sobol_revMatrices[i + 2]; + result.y ^= Sobol_revMatrices[i]; + result.z ^= Sobol_revMatrices[i + 1]; } } @@ -66,13 +76,12 @@ inline vec3ui Sobol_revSample3(uint32 revIndex) // compute components 1 to 4 of the Sobol'-sequence (count starting from 0) inline vec4ui Sobol_revSample4(uint32 revIndex) { - vec4ui result = make_vec4ui(0); - for (uniform uint32 i = 0; revIndex; revIndex <<= 1, i += 4) { + vec4ui result = make_vec4ui(Sobol_revSample1(revIndex), 0, 0, 0); + for (uniform uint32 i = 0; revIndex; revIndex <<= 1, i += 3) { if (revIndex & 0x80000000u) { - result.x ^= Sobol_revMatrices[i]; - result.y ^= Sobol_revMatrices[i + 1]; - result.z ^= Sobol_revMatrices[i + 2]; - result.w ^= Sobol_revMatrices[i + 3]; + result.y ^= Sobol_revMatrices[i]; + result.z ^= Sobol_revMatrices[i + 1]; + result.w ^= Sobol_revMatrices[i + 2]; } } diff --git a/modules/cpu/math/sobol.inl b/modules/cpu/math/sobol.inl index dd7dfcd5b..f66fc516a 100644 --- a/modules/cpu/math/sobol.inl +++ b/modules/cpu/math/sobol.inl @@ -30,163 +30,131 @@ // http://web.maths.unsw.edu.au/~fkuo/sobol/new-joe-kuo-6.21201 // bit-reversed and interleaved -OSPRAY_GLOBAL const unsigned int Sobol_revMatrices[4 * 32] = { - 0x1u, +OSPRAY_GLOBAL const unsigned int Sobol_revMatrices[3 * 32] = { 0x1u, 0x1u, 0x1u, - 0x3u, 0x3u, 0x3u, 0x2u, - 0x5u, 0x6u, 0x4u, 0x4u, - 0xfu, 0x9u, 0xau, 0xdu, - 0x11u, 0x17u, 0x1fu, 0x1fu, - 0x33u, 0x3au, 0x2eu, 0x3bu, - 0x55u, 0x71u, 0x45u, 0x5eu, - 0xffu, 0xa3u, 0xc9u, 0xb9u, - 0x101u, 0x116u, 0x11bu, 0x15au, - 0x303u, 0x339u, 0x2a4u, 0x3f4u, - 0x505u, 0x677u, 0x79au, 0x685u, - 0xf0fu, 0x9aau, 0xb67u, 0xd0fu, - 0x1111u, 0x1601u, 0x101eu, 0x115bu, - 0x3333u, 0x3903u, 0x302du, 0x23f6u, - 0x5555u, 0x7706u, 0x4041u, 0x4681u, - 0xffffu, 0xaa09u, 0xa0c3u, 0xdd02u, - 0x10001u, 0x10117u, 0x1f104u, 0x1e144u, - 0x30003u, 0x3033au, 0x2e28au, 0x393cdu, - 0x50005u, 0x60671u, 0x457dfu, 0x5a6dfu, - 0xf000fu, 0x909a3u, 0xc9baeu, 0xb4dbbu, - 0x110011u, 0x171616u, 0x11a105u, 0x14401eu, - 0x330033u, 0x3a3939u, 0x2a7289u, 0x3cd039u, - 0x550055u, 0x717777u, 0x79e7dbu, 0x6df05au, - 0xff00ffu, 0xa3aaaau, 0xb6dba4u, 0xdbb0b4u, - 0x1010101u, 0x1170001u, 0x100011au, 0x101e145u, - 0x3030303u, 0x33a0003u, 0x30002a7u, 0x20393cfu, - 0x5050505u, 0x6710006u, 0x400079eu, 0x405a6dbu, - 0xf0f0f0fu, 0x9a30009u, 0xa000b6du, 0xd0b4db6u, - 0x11111111u, 0x16160017u, 0x1f001001u, 0x1f144001u, - 0x33333333u, 0x3939003au, 0x2e003003u, 0x3b3cd002u, - 0x55555555u, 0x77770071u, 0x45004004u, 0x5e6df004u, - 0xffffffffu, 0xaaaa00a3u, 0xc900a00au, 0xb9dbb00du, From ceaf053aa4bb9870031cfef304939e9f97ad50cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Wed, 8 Jan 2025 16:20:29 +0100 Subject: [PATCH 06/10] Verify size of OSPUnstructuredCellType enum --- apps/ospTestSuite/test_enums.cpp | 1 + cmake/compiler/msvc.cmake | 2 +- cmake/ospray_cmake_config/osprayConfig.cmake.in | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/ospTestSuite/test_enums.cpp b/apps/ospTestSuite/test_enums.cpp index 8e2113cb2..9935583e7 100644 --- a/apps/ospTestSuite/test_enums.cpp +++ b/apps/ospTestSuite/test_enums.cpp @@ -98,6 +98,7 @@ TEST(Enums, VKLUnstructuredCellType) ASSERT_EQ(OSP_HEXAHEDRON, VKL_HEXAHEDRON); ASSERT_EQ(OSP_WEDGE, VKL_WEDGE); ASSERT_EQ(OSP_PYRAMID, VKL_PYRAMID); + ASSERT_EQ(sizeof(OSPUnstructuredCellType), 1); // must fit in uint8 } TEST(Enums, VKLAMRMethod) diff --git a/cmake/compiler/msvc.cmake b/cmake/compiler/msvc.cmake index b118b75c7..156ec1fe7 100644 --- a/cmake/compiler/msvc.cmake +++ b/cmake/compiler/msvc.cmake @@ -1,7 +1,7 @@ ## Copyright 2009 Intel Corporation ## SPDX-License-Identifier: Apache-2.0 -set(COMMON_CXX_FLAGS "/EHsc /MP /GR /bigobj") +set(COMMON_CXX_FLAGS "/EHsc /MP /GR /bigobj /Zc:__cplusplus") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${COMMON_CXX_FLAGS} /Ox /fp:fast /Oi /Gy ") diff --git a/cmake/ospray_cmake_config/osprayConfig.cmake.in b/cmake/ospray_cmake_config/osprayConfig.cmake.in index 5f90d6f57..31dcf6480 100644 --- a/cmake/ospray_cmake_config/osprayConfig.cmake.in +++ b/cmake/ospray_cmake_config/osprayConfig.cmake.in @@ -92,6 +92,11 @@ set(OSPRAY_COMPILER_CLANG @OSPRAY_COMPILER_CLANG@) set(OSPRAY_COMPILER_MSVC @OSPRAY_COMPILER_MSVC@) set(OSPRAY_COMPILER_DPCPP @OSPRAY_COMPILER_DPCPP@) +# https://gitlab.kitware.com/cmake/cmake/-/issues/18837 +if (MSVC AND (MSVC_VERSION GREATER_EQUAL 1914)) + add_compile_options(/Zc:__cplusplus) +endif() + set(OSPRAY_ISPC_TARGET_LIST @OSPRAY_ISPC_TARGET_LIST@) set(OSPRAY_ISPC_ADDRESSING @OSPRAY_ISPC_ADDRESSING@) set(OSPRAY_ENABLE_VOLUMES @OSPRAY_ENABLE_VOLUMES@) From c15f06cb274856919da9b6cff6d9a45a4d81a1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Wed, 2 Jul 2025 15:02:40 +0200 Subject: [PATCH 07/10] Docu: Update GPU features --- doc/api.md | 6 ++---- modules/cpu/CMakeLists.txt | 2 +- scripts/superbuild/README.md | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/doc/api.md b/doc/api.md index 84edff378..c4e6f3259 100644 --- a/doc/api.md +++ b/doc/api.md @@ -3388,8 +3388,8 @@ The CPU module is implicitly loaded and the `cpu` device is automatically used if no other options are specified. -GPU (Beta) ---------- +GPU +---- To use the GPU for rendering load the `gpu` module and select the `gpu` device: @@ -3442,11 +3442,9 @@ correctly on the GPU device: - Multiple volumes in the scene - Clipping -- Motion blur - Subdivision surfaces - Progress reporting via `ospGetProgress` or canceling the frame via `ospCancel` - Picking via `ospPick` -- Adaptive accumulation via `OSP_FB_VARIANCE` and `varianceThreshold` - Framebuffer channels `OSP_FB_ID_*` (id buffers) - Experimental support for shared device-only data, works only for `structuredRegular` volume diff --git a/modules/cpu/CMakeLists.txt b/modules/cpu/CMakeLists.txt index 0fe4cb08b..579219719 100644 --- a/modules/cpu/CMakeLists.txt +++ b/modules/cpu/CMakeLists.txt @@ -6,7 +6,7 @@ mark_as_advanced(OSPRAY_MODULE_CPU) cmake_dependent_option( OSPRAY_MODULE_GPU - "Build the GPU module (beta)" + "Build the GPU module" OFF EMBREE_SYCL_SUPPORT OFF diff --git a/scripts/superbuild/README.md b/scripts/superbuild/README.md index 72dd97085..476dc2d31 100644 --- a/scripts/superbuild/README.md +++ b/scripts/superbuild/README.md @@ -53,7 +53,7 @@ BUILD_OSPRAY_MODULE_MPI distributed parallel rendering on multiple nodes. BUILD_GPU_SUPPORT -: enables beta GPU support, fetching the SYCL variants of the +: enables GPU support, fetching the SYCL variants of the dependencies and builds `OSPRAY_MODULE_GPU` BUILD_TBB_FROM_SOURCE From a8a1085996ebcf1886225babf67b6af4a66ac6ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Thu, 24 Jul 2025 15:13:50 +0200 Subject: [PATCH 08/10] Remove end caps of cone/cylinder curve small cleanup for spheres --- CHANGELOG.md | 2 ++ modules/cpu/geometry/Curves.cpp | 6 ++++++ modules/cpu/geometry/Curves.h | 1 + modules/cpu/geometry/SpheresShared.h | 3 +-- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e59779847..95717bc6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ Version History - Find geometry lights after first empty instance - Segfault when numPrimitives() if called before commit() - Initialization of OpenGL on OSX + - `OSP_DISJOINT` curves had disks at the end of the first and last + cone/cylinder ### Changes in v3.2.0: diff --git a/modules/cpu/geometry/Curves.cpp b/modules/cpu/geometry/Curves.cpp index 5d391aed3..2a6f3dbd7 100644 --- a/modules/cpu/geometry/Curves.cpp +++ b/modules/cpu/geometry/Curves.cpp @@ -189,6 +189,12 @@ void Curves::createEmbreeGeometry() setEmbreeGeometryBuffer( embreeGeometry, RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE, texcoordData, 1); } + capData.clear(); + if (curveType == OSP_DISJOINT) { + // disable caps to get always open cones/cylinders + capData.resize(numPrimitives(), RTC_CURVE_FLAG_NEIGHBOR_LEFT | RTC_CURVE_FLAG_NEIGHBOR_RIGHT); + setEmbreeGeometryBuffer(embreeGeometry, RTC_BUFFER_TYPE_FLAGS, capData); + } rtcCommitGeometry(embreeGeometry); } diff --git a/modules/cpu/geometry/Curves.h b/modules/cpu/geometry/Curves.h index f4c88a9a1..5d9749124 100644 --- a/modules/cpu/geometry/Curves.h +++ b/modules/cpu/geometry/Curves.h @@ -28,6 +28,7 @@ struct OSPRAY_SDK_INTERFACE Curves Ref> tangentData; Ref> colorData; Ref> texcoordData; + std::vector capData; RTCGeometryType embreeCurveType{(RTCGeometryType)-1}; diff --git a/modules/cpu/geometry/SpheresShared.h b/modules/cpu/geometry/SpheresShared.h index db8429a07..bd4249737 100644 --- a/modules/cpu/geometry/SpheresShared.h +++ b/modules/cpu/geometry/SpheresShared.h @@ -15,11 +15,10 @@ struct Spheres Data1D sphere; Data1D texcoord; Data1D normalData; - float global_radius; OSPSphereType sphereType; #ifdef __cplusplus - Spheres() : global_radius(.01f) + Spheres() { super.type = GEOMETRY_TYPE_SPHERES; } From f0731e39f282bab676fed3d134e8015c66ca486f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Sat, 1 Nov 2025 09:34:19 +0100 Subject: [PATCH 09/10] Update dependencies and CI - ISPC v1.29.0 (new minimum required version is v1.25.2) - Embree v4.4.0 - OIDN v2.3.1 - oneTBB v2022.3.0 - Dear ImGui v1.91.5 - icx 2025.2/1 - remove benny de --- .github/workflows/benchmark.yml | 6 -- .github/workflows/ci.linux.gpu.yml | 9 +-- .github/workflows/ci.windows.gpu.yml | 2 +- .github/workflows/dpcpp.env | 2 +- .github/workflows/gfx-windows.env | 2 +- .github/workflows/icx-linux.env | 2 +- .github/workflows/icx-windows.env | 2 +- .github/workflows/release.yml | 1 - CHANGELOG.md | 4 ++ README.md | 2 +- apps/common/external/imgui/imgui.patch | 22 ++++--- cmake/compiler/dpcpp.cmake | 7 +++ cmake/ospray_options.cmake | 6 +- cmake/ospray_redistribute_deps.cmake | 37 ++++++++--- doc/prerequisites.md | 2 +- scripts/superbuild/CMakeLists.txt | 62 +++++++++---------- .../dependencies/dep_benchmark.cmake | 4 +- .../superbuild/dependencies/dep_ispc.cmake | 2 +- scripts/tests/run-benchmarks.sh | 17 ----- scripts/tests/run_tests.sh | 8 --- 20 files changed, 99 insertions(+), 100 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index fccb6b99f..765262a69 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -41,7 +41,6 @@ jobs: secrets: inherit with: runs-on: '"vis-perf-x8280-1"' - setup-benny: true cmd: | scripts/tests/run-benchmarks.sh artifact-in: build-linux @@ -52,7 +51,6 @@ jobs: secrets: inherit with: runs-on: '"vis-perf-x8380-1"' - setup-benny: true cmd: | scripts/tests/run-benchmarks.sh artifact-in: build-linux @@ -63,7 +61,6 @@ jobs: secrets: inherit with: runs-on: '"vis-perf-a3970x-1"' - setup-benny: true cmd: | scripts/tests/run-benchmarks.sh artifact-in: build-linux @@ -74,7 +71,6 @@ jobs: secrets: inherit with: runs-on: '"vis-perf-i9-12900k-1"' - setup-benny: true cmd: | scripts/tests/run-benchmarks.sh artifact-in: build-linux @@ -88,7 +84,6 @@ jobs: env-from-files: .github/workflows/gfx-ubuntu22.env options: --device=/dev/dri:/dev/dri runs-on: '"vis-perf-dg2-01"' - setup-benny: true cmd: | scripts/tests/run-benchmarks.sh GPU artifact-in: build-linux @@ -102,7 +97,6 @@ jobs: env-from-files: .github/workflows/gfx-ubuntu22.env options: --device=/dev/dri:/dev/dri runs-on: '"vis-perf-spr-pvc-01"' - setup-benny: true cmd: | scripts/tests/run-benchmarks.sh GPU artifact-in: build-linux diff --git a/.github/workflows/ci.linux.gpu.yml b/.github/workflows/ci.linux.gpu.yml index af71f39bc..0bb2f2960 100644 --- a/.github/workflows/ci.linux.gpu.yml +++ b/.github/workflows/ci.linux.gpu.yml @@ -39,8 +39,9 @@ jobs: image: ubuntu:22.04 env-from-files: .github/workflows/icx-linux.env .github/workflows/gfx-ubuntu22.env # OIDN AOT needs ocloc cmd: | + unset no_proxy && unset NO_PROXY && apt update -y && apt install -y intel-ocloc # for OIDN AOT module load cmake/3.25.3 - scripts/build/linux.sh -G Ninja -DBUILD_GLFW=OFF -DBUILD_GPU_SUPPORT=ON -DBUILD_OSPRAY_MODULE_MPI=ON -DBUILD_OSPRAY_MODULE_MULTIDEVICE=ON -DBUILD_EMBREE_FROM_SOURCE=ON -DBUILD_OPENVKL_FROM_SOURCE=ON -DBUILD_OIDN_FROM_SOURCE=ON + scripts/build/linux.sh -G Ninja -DBUILD_GLFW=OFF -DBUILD_GPU_SUPPORT=ON -DBUILD_OSPRAY_MODULE_MPI=ON -DBUILD_OSPRAY_MODULE_MULTIDEVICE=ON -DBUILD_EMBREE_FROM_SOURCE=ON -DBUILD_OPENVKL_FROM_SOURCE=ON -DBUILD_OIDN_FROM_SOURCE=ON -DOPENVKL_VERSION=guj/fixes # XXX devel versions until next release v2.0.2 artifact-out: build-ubuntu2204-mpi-icx artifact-path: build/install/ospray build/CMakeCache.txt build/*/build/CMakeCache.txt @@ -49,11 +50,11 @@ jobs: uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main secrets: inherit with: - image: opensuse/leap:15.3 - env-from-files: .github/workflows/icx-linux.env + image: opensuse/leap:15.4 + dpcpp-version: intel/2025.0 cmd: | module load cmake/3.25.3 - scripts/build/linux.sh -DBUILD_GPU_SUPPORT=ON -DBUILD_EMBREE_FROM_SOURCE=ON -DBUILD_OPENVKL_FROM_SOURCE=ON + scripts/build/linux.sh -DBUILD_GPU_SUPPORT=ON -DBUILD_EMBREE_FROM_SOURCE=ON -DBUILD_OPENVKL_FROM_SOURCE=ON -DOPENVKL_VERSION=guj/fixes # XXX devel versions until next release v2.0.2 rocky8-mpich-dpcpp-build: uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main diff --git a/.github/workflows/ci.windows.gpu.yml b/.github/workflows/ci.windows.gpu.yml index 43a3a59c2..9f8823599 100644 --- a/.github/workflows/ci.windows.gpu.yml +++ b/.github/workflows/ci.windows.gpu.yml @@ -38,7 +38,7 @@ jobs: with: runs-on: '["build", "mpi"]' env-from-files: .github/workflows/icx-windows.env - ocloc-version: 77a13ae6-6100-4ddc-b069-0086ff44730c/ocloc_win_101.5082 + ocloc-version: oneAPI/ocloc/2025.0 cmd: | # disable warnings which lead to excessively large log files $env:CXXFLAGS = '-w' diff --git a/.github/workflows/dpcpp.env b/.github/workflows/dpcpp.env index 7372f6cea..3948ebab7 100644 --- a/.github/workflows/dpcpp.env +++ b/.github/workflows/dpcpp.env @@ -1 +1 @@ -DPCPP_VERSION=intel-llvm/nightly-2023-10-26-rk +DPCPP_VERSION=intel-llvm/v6.2.1 diff --git a/.github/workflows/gfx-windows.env b/.github/workflows/gfx-windows.env index 9f00830aa..095bfbec9 100644 --- a/.github/workflows/gfx-windows.env +++ b/.github/workflows/gfx-windows.env @@ -1 +1 @@ -GFX_DRIVER_VERSION=windows-101.5768 +GFX_DRIVER_VERSION=windows-latest diff --git a/.github/workflows/icx-linux.env b/.github/workflows/icx-linux.env index e046beb03..42793a7b9 100644 --- a/.github/workflows/icx-linux.env +++ b/.github/workflows/icx-linux.env @@ -1 +1 @@ -DPCPP_VERSION=intel/2024.2.1 +DPCPP_VERSION=intel/2025.2 diff --git a/.github/workflows/icx-windows.env b/.github/workflows/icx-windows.env index bd643a941..ca9a6fcb2 100644 --- a/.github/workflows/icx-windows.env +++ b/.github/workflows/icx-windows.env @@ -1 +1 @@ -DPCPP_VERSION=oneAPI/compiler/2024.2 +DPCPP_VERSION=intel/2025.1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c483dbb72..cd96178fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -127,7 +127,6 @@ jobs: secrets: inherit uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@main with: - coverity: true project: OSPRay prebuild: > module load impi/latest && diff --git a/CHANGELOG.md b/CHANGELOG.md index 95717bc6a..2a4361f86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,10 @@ Version History - Initialization of OpenGL on OSX - `OSP_DISJOINT` curves had disks at the end of the first and last cone/cylinder +- The new minimum versions of dependencies: + - ISPCRT v1.25.2 (uses IEEE 754 compliant instructions on ARM for + min/max) + - rkcommon v1.15.2 ### Changes in v3.2.0: diff --git a/README.md b/README.md index dd13419a0..1cbf43f82 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ before you can build OSPRay you need the following prerequisites: Linux development tools. - Additionally you require a copy of the [Intel® Implicit SPMD Program - Compiler (ISPC)](http://ispc.github.io), version 1.23.0 or later. + Compiler (ISPC)](http://ispc.github.io), version 1.25.2 or later. Please obtain a release of ISPC from the [ISPC downloads page](https://ispc.github.io/downloads.html). If ISPC is not found by CMake its location can be hinted with the variable `ISPC_EXECUTABLE`. diff --git a/apps/common/external/imgui/imgui.patch b/apps/common/external/imgui/imgui.patch index fca50af7f..d9733c3b8 100644 --- a/apps/common/external/imgui/imgui.patch +++ b/apps/common/external/imgui/imgui.patch @@ -1,9 +1,12 @@ --- a/imconfig.h +++ b/imconfig.h -@@ -21,20 +21,29 @@ - - //---- Define attributes of all API symbols declarations, e.g. for DLL under Windows +@@ -23,18 +23,24 @@ // Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility. + // - Windows DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() + // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. +-//#define IMGUI_API __declspec(dllexport) // MSVC Windows: DLL export +-//#define IMGUI_API __declspec(dllimport) // MSVC Windows: DLL import +-//#define IMGUI_API __attribute__((visibility("default"))) // GCC/Clang: override visibility when set is hidden +#ifdef _WIN32 +# ifdef ospray_imgui_EXPORTS +# define IMGUI_API __declspec(dllexport) @@ -11,17 +14,12 @@ +# define IMGUI_API __declspec(dllimport) +# endif +#else -+# define IMGUI_API ++# define IMGUI_API __attribute__((visibility("default"))) +#endif - // DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() - // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. - //#define IMGUI_API __declspec( dllexport ) - //#define IMGUI_API __declspec( dllimport ) //---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to clean your code of obsolete function/names. -//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS - //#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87+ disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This is automatically done by IMGUI_DISABLE_OBSOLETE_FUNCTIONS. //---- Disable all of Dear ImGui or don't implement standard windows/tools. // It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp. @@ -33,8 +31,12 @@ //---- Don't implement some functions to reduce linkage requirements. //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a) -@@ -44,7 +53,7 @@ +@@ -42,10 +48,10 @@ + //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with non-Visual Studio compilers] Don't implement default IME handler (won't require imm32.lib/.a) + //#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, IME). //#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default). +-//#define IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS // Don't implement default platform_io.Platform_OpenInShellFn() handler (Win32: ShellExecute(), require shell32.lib/.a, Mac/Linux: use system("")). ++#define IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS // Don't implement default platform_io.Platform_OpenInShellFn() handler (Win32: ShellExecute(), require shell32.lib/.a, Mac/Linux: use system("")). //#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf) //#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself. -//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies) diff --git a/cmake/compiler/dpcpp.cmake b/cmake/compiler/dpcpp.cmake index daf57a83e..06ce49682 100644 --- a/cmake/compiler/dpcpp.cmake +++ b/cmake/compiler/dpcpp.cmake @@ -8,6 +8,13 @@ set(OSPRAY_COMPILER_NEEDS_X_CPP TRUE) get_filename_component(SYCL_COMPILER_NAME ${CMAKE_CXX_COMPILER} NAME_WE) if (WIN32 AND (SYCL_COMPILER_NAME STREQUAL "icx" OR SYCL_COMPILER_NAME STREQUAL "icpx")) include(msvc) # icx on Windows behaves like msvc + foreach(FLAG + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + ) + string(REPLACE "/MP" "" ${FLAG} ${${FLAG}}) # /MP is not supported by icx for offloading + endforeach() set(CMAKE_CXX_FLAGS "/fp:precise ${CMAKE_CXX_FLAGS}") set(OSPRAY_COMPILER_NEEDS_X_CPP FALSE) # icx on Win does not support "-x" set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /Qoption,link,/DEPENDENTLOADFLAG:0x2000") diff --git a/cmake/ospray_options.cmake b/cmake/ospray_options.cmake index cae4c0fce..1b8a87dc2 100644 --- a/cmake/ospray_options.cmake +++ b/cmake/ospray_options.cmake @@ -11,12 +11,12 @@ include(CMakeDependentOption) set(OSPRAY_CMAKECONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/ospray-${OSPRAY_VERSION}") -set(ISPC_VERSION_REQUIRED 1.23.0) -set(RKCOMMON_VERSION_REQUIRED 1.14.2) +set(ISPC_VERSION_REQUIRED 1.25.2) +set(RKCOMMON_VERSION_REQUIRED 1.15.2) set(EMBREE_VERSION_REQUIRED 4.3.3) set(OPENVKL_VERSION_REQUIRED 2.0.1) set(OIDN_VERSION_REQUIRED 2.3.0) -set(OSPRAY_IMGUI_GIT_TAG cb16be3a3fc1f9cd146ae24d52b615f8a05fa93d) # v1.90.9 +set(OSPRAY_IMGUI_GIT_TAG f401021d5a5d56fe2304056c391e78f81c8d4b8f) # v1.91.5 set(OSPRAY_STB_GIT_TAG 013ac3beddff3dbffafd5177e7972067cd2b5083) # v2.30 / v1.16 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) diff --git a/cmake/ospray_redistribute_deps.cmake b/cmake/ospray_redistribute_deps.cmake index f90cd0858..361345392 100644 --- a/cmake/ospray_redistribute_deps.cmake +++ b/cmake/ospray_redistribute_deps.cmake @@ -91,17 +91,34 @@ if (OSPRAY_MODULE_GPU OR OSPRAY_MODULE_DENOISER) endif() if (WIN32) - file(GLOB SYCL_LIB LIST_DIRECTORIES FALSE - "${SYCL_DIR}/sycl?.dll" - "${SYCL_DIR}/pi_level_zero.dll" - "${SYCL_DIR}/pi_win_proxy_loader.dll" - "${SYCL_DIR}/win_proxy_loader.dll" - ) + if(EXISTS "${SYCL_DIR}/../bin/pi_level_zero.dll") + file(GLOB SYCL_LIB LIST_DIRECTORIES FALSE + "${SYCL_DIR}/sycl?.dll" + "${SYCL_DIR}/pi_level_zero.dll" + "${SYCL_DIR}/pi_win_proxy_loader.dll" + "${SYCL_DIR}/win_proxy_loader.dll" + ) + else() + file(GLOB SYCL_LIB LIST_DIRECTORIES FALSE + "${SYCL_DIR}/sycl?.dll" + "${SYCL_DIR}/ur_loader.dll" + "${SYCL_DIR}/ur_adapter_level_zero.dll" + "${SYCL_DIR}/ur_win_proxy_loader.dll" + ) + endif() else() - file(GLOB SYCL_LIB LIST_DIRECTORIES FALSE - "${SYCL_DIR}/libsycl.so.?" - "${SYCL_DIR}/libpi_level_zero.so" - ) + if(EXISTS "${SYCL_DIR}/libpi_level_zero.so") + file(GLOB SYCL_LIB LIST_DIRECTORIES FALSE + "${SYCL_DIR}/libsycl.so.?" + "${SYCL_DIR}/libpi_level_zero.so" + ) + else() + file(GLOB SYCL_LIB LIST_DIRECTORIES FALSE + "${SYCL_DIR}/libsycl.so.?" + "${SYCL_DIR}/libur_loader.so" + "${SYCL_DIR}/libur_adapter_level_zero.so" + ) + endif() endif() list(APPEND DEPENDENT_LIBS ${SYCL_LIB}) endif() diff --git a/doc/prerequisites.md b/doc/prerequisites.md index 400cd2e7f..134bad1a4 100644 --- a/doc/prerequisites.md +++ b/doc/prerequisites.md @@ -21,7 +21,7 @@ before you can build OSPRay you need the following prerequisites: (icc)](https://software.intel.com/en-us/c-compilers)), and standard Linux development tools. - Additionally you require a copy of the [Intel® Implicit SPMD Program - Compiler (ISPC)](http://ispc.github.io), version 1.23.0 or later. + Compiler (ISPC)](http://ispc.github.io), version 1.25.2 or later. Please obtain a release of ISPC from the [ISPC downloads page](https://ispc.github.io/downloads.html). If ISPC is not found by CMake its location can be hinted with the diff --git a/scripts/superbuild/CMakeLists.txt b/scripts/superbuild/CMakeLists.txt index 88b953480..d6342cca9 100644 --- a/scripts/superbuild/CMakeLists.txt +++ b/scripts/superbuild/CMakeLists.txt @@ -87,22 +87,22 @@ endif() option(DOWNLOAD_ISPC "Download ISPC or use the one found in the system environment?" ON) if (DOWNLOAD_ISPC) - set(ISPC_VERSION "1.24.0" CACHE STRING "Which version of ISPC to download?") + set(ISPC_VERSION "1.29.0" CACHE STRING "Which version of ISPC to download?") mark_as_advanced(CLEAR ISPC_VERSION) - if (ISPC_VERSION STREQUAL "1.24.0") + if (ISPC_VERSION STREQUAL "1.29.0") if (APPLE) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64|aarch64") - set(ISPC_HASH "7f3891d0157aed3cab159fbc5235235b62797053db9387f5a61c8d0a22369ae0") + set(ISPC_HASH "1bb536498cb6068a6493e4b83d7c2e83091b550996296de4912911ed19c9003f") else() - set(ISPC_HASH "986eb172fe9db3e8da560e9d0d788832991638fab61ca80587d87eb175ffb520") + set(ISPC_HASH "ba4edd7019777cd24aad230c48b6be8715f8acd79fe4b69c6148e17cb30db992") endif() elseif (WIN32) - set(ISPC_HASH "a7c21cb2434f5364acbdf0933af6de49198458ed6f0b62012e03c3325c972649") + set(ISPC_HASH "88f9063524d02b5cfc3e2f09b7bc6d8398690fa3dffe3f4b8bbcff203796a8a8") else() if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64|aarch64") - set(ISPC_HASH "890ad5f31581091bf4ae9f235a7bb6fd9cabcbd6cf1670104ad61f1ad2da4c76") + set(ISPC_HASH "bf3f6ab3a75d49343274c2d567b4ddd7c54b953c11c2b316f46783ba3145783e") else() - set(ISPC_HASH "79885d4482356dba7c01da312b6449fd575b097845ebcb90344dac5c178b43f5") + set(ISPC_HASH "e5a209605cb8e1d361fe436bdeeb1658ef0e640dedfd5bbfee897cd279300689") endif() endif() endif() @@ -110,27 +110,27 @@ else() mark_as_advanced(FORCE ISPC_VERSION) endif() -set(RKCOMMON_VERSION "1.14.2" CACHE STRING "Which version of rkcommon to build?") -if (RKCOMMON_VERSION STREQUAL "1.14.2") - set(RKCOMMON_HASH "79334ef3dadddb03ec0483fbf49bf690fb8902d5c2732d977b2c116651484cc6") +set(RKCOMMON_VERSION "1.15.2" CACHE STRING "Which version of rkcommon to build?") +if (RKCOMMON_VERSION STREQUAL "1.15.2") + set(RKCOMMON_HASH "9128642e5187b963385dbf1655f3b143d3ef46310cc2e27114d220b347d0e2f2") endif() option(DOWNLOAD_TBB "Download TBB or use the one found in the system environment?" ON) if (DOWNLOAD_TBB) - set(TBB_VERSION "2021.13.0" CACHE STRING "Which version of TBB to download?") + set(TBB_VERSION "2022.3.0" CACHE STRING "Which version of TBB to download?") mark_as_advanced(CLEAR TBB_VERSION) option(BUILD_TBB_FROM_SOURCE "Build TBB from source or use pre-built version?" OFF) mark_as_advanced(CLEAR BUILD_TBB_FROM_SOURCE) - if (TBB_VERSION STREQUAL "2021.13.0") + if (TBB_VERSION STREQUAL "2022.0.0") if (BUILD_TBB_FROM_SOURCE) - set(TBB_HASH "3ad5dd08954b39d113dc5b3f8a8dc6dc1fd5250032b7c491eb07aed5c94133e1") + set(TBB_HASH "01598a46c1162c27253a0de0236f520fd8ee8166e9ebb84a4243574f88e6e50a") else() if (APPLE) - set(TBB_HASH "e9aa143de91f65ea15b62ceeba5845bbc914c882d32bf9c9a405e6b8b5a70ade") + set(TBB_HASH "f9f9369e956bd1cb1efbe6eab400291970e55fad1f3ae2a33bc96d991882ed38") elseif (WIN32) - set(TBB_HASH "0a7b19b52ec9d8eaa10cbbe396e955130815489c544642acecda8ef8d2d7f64d") + set(TBB_HASH "e1b2373f25558bf47d16b4c89cf0a31e6689aaf7221400d209e8527afc7c9eee") else() - set(TBB_HASH "f5c9304710051f0193a07fb91b6d6ada5a3e0a6d623951ee176b1897816ecf4c") + set(TBB_HASH "7be34b376c9bdba9afe1ebacaf94ed6dc15af8377d73b539ec932f141195f6ec") endif() endif() endif() @@ -140,23 +140,23 @@ else() endif() option(BUILD_EMBREE_FROM_SOURCE "Build Embree or use pre-built version?" OFF) -set(EMBREE_VERSION "4.3.3" CACHE STRING "Which version of Embree to build?") -if (EMBREE_VERSION STREQUAL "4.3.3") +set(EMBREE_VERSION "4.4.0" CACHE STRING "Which version of Embree to build?") +if (EMBREE_VERSION STREQUAL "4.4.0") if (BUILD_EMBREE_FROM_SOURCE) - set(EMBREE_HASH "8a3bc3c3e21aa209d9861a28f8ba93b2f82ed0dc93341dddac09f1f03c36ef2d") + set(EMBREE_HASH "acb517b0ea0f4b442235d5331b69f96192c28da6aca5d5dde0cbe40799638d5c") else() if (APPLE) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64|aarch64") set(EMBREE_HASH "ee310bcd8480ed82f2be29289b9a811c83db6a36160c8afdcb61bb4de4d337df") else() - set(EMBREE_HASH "98997523dfff8efd8120075f7feba00cfc765c992d758d9be12d56bfe6bec233") + set(EMBREE_HASH "435b4ef3421eb75cf41a41438d44b760f4d86c24124e0b9a0ed9d85adff54b4d") endif() elseif (WIN32) - set(EMBREE_HASH "d4c07f88df9f009dd84e4e9b9dcec32ad7d96f927bd88de00b721b0923d481a9") - set(EMBREE_SYCL_HASH "1675fd6907e4697400ce58942343fdf99fc4e6f0fa0b259d61755ae72aa9aa18") + set(EMBREE_HASH "d951e5e6bd295c54cdd66be9cdb44a4e8c42fb38a99f94f79305e48765fc3454") + set(EMBREE_SYCL_HASH "d2145cdc9c4fa038bbb708be35dae6e526547c53632c6a4a0facae5bf71815c0") else() - set(EMBREE_HASH "757e6e8b987d13ac34aa7c4c3657120fd54a78c2a1034e30dda5cd5df06f3cdd") - set(EMBREE_SYCL_HASH "9952f9f8fe103449e18084c8bd822a7e3130844c54abfd164f1ce36e46b92572") + set(EMBREE_HASH "cb3d4402537fc9165c76c3316b8953dcfea523cd1eaf588e2de7639864ee3c57") + set(EMBREE_SYCL_HASH "c67f7e7622584686778e0f84ab7370d810ac5aa020aee2a1c3ae58cea9462e6d") endif() endif() endif() @@ -195,24 +195,24 @@ endif() option(BUILD_OIDN "Build OpenImageDenoise as a part of the superbuild." ON) if (BUILD_OIDN) - set(OIDN_VERSION "2.3.0" CACHE STRING "Which version of OpenImageDenoise to build?") + set(OIDN_VERSION "2.3.1" CACHE STRING "Which version of OpenImageDenoise to build?") mark_as_advanced(CLEAR OIDN_VERSION) option(BUILD_OIDN_FROM_SOURCE "Build OpenImageDenoise or use pre-built version?" OFF) mark_as_advanced(CLEAR BUILD_OIDN_FROM_SOURCE) - if (OIDN_VERSION STREQUAL "2.3.0") + if (OIDN_VERSION STREQUAL "2.3.1") if (BUILD_OIDN_FROM_SOURCE) - set(OIDN_HASH "cce3010962ec84e0ba1acd8c9055a3d8de402fedb1b463517cfeb920a276e427") + set(OIDN_HASH "225879b4225bfe015273f0372bf6e7a69d01030043c8aefa017196b41ecf8148") else() if (APPLE) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64|aarch64") - set(OIDN_HASH "9dc42edba6461082e940c8c8cf19e6528d3d40f7f45c695fab33671b39414627") + set(OIDN_HASH "4174eaa3c26251a50922596ef6417ef3b7227139e332ce169f75768cdb4050fb") else() - set(OIDN_HASH "8b3285d2d8c431c061a2cf0c5bf90fd519b5ad5fb6db828b07dc6662daa9e07b") + set(OIDN_HASH "04f0f428de3a9926ca9ad1919e49e3b50c96931f92c129bfafd2b2304da00b53") endif() elseif (WIN32) - set(OIDN_HASH "272781c9398eec7aeef9cd1be5b5aad7bb3debfc574308ce930b8e55ee51effd") + set(OIDN_HASH "61f579986d5b5c0e2f3f96db46869a77191f45bc001e558c3d91450b053894f0") else() - set(OIDN_HASH "02693c3eb3888eeb0c59c9bb1142b28b899ac8dd02bad4397beaffb5f8bef863") + set(OIDN_HASH "379c6879880d856d354b99afe73d7e92eac0350df1be7a2046263e43ad040049") endif() endif() endif() diff --git a/scripts/superbuild/dependencies/dep_benchmark.cmake b/scripts/superbuild/dependencies/dep_benchmark.cmake index 878a3c489..c9883b16a 100644 --- a/scripts/superbuild/dependencies/dep_benchmark.cmake +++ b/scripts/superbuild/dependencies/dep_benchmark.cmake @@ -10,8 +10,8 @@ else() endif() ExternalProject_Add(${COMPONENT_NAME} - URL "https://github.com/google/benchmark/archive/refs/tags/v1.9.0.tar.gz" - URL_HASH "SHA256=35a77f46cc782b16fac8d3b107fbfbb37dcd645f7c28eee19f3b8e0758b48994" + URL "https://github.com/google/benchmark/archive/refs/tags/v1.9.1.tar.gz" + URL_HASH "SHA256=32131c08ee31eeff2c8968d7e874f3cb648034377dfc32a4c377fa8796d84981" # Skip updating on subsequent builds (faster) UPDATE_COMMAND "" diff --git a/scripts/superbuild/dependencies/dep_ispc.cmake b/scripts/superbuild/dependencies/dep_ispc.cmake index cb96d3a4b..77d7ee984 100644 --- a/scripts/superbuild/dependencies/dep_ispc.cmake +++ b/scripts/superbuild/dependencies/dep_ispc.cmake @@ -16,7 +16,7 @@ else() if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64|aarch64") set(ISPC_OSSUFFIX "linux.aarch64.tar.gz") else() - set(ISPC_OSSUFFIX "linux-oneapi.tar.gz") + set(ISPC_OSSUFFIX "linux.tar.gz") endif() endif() diff --git a/scripts/tests/run-benchmarks.sh b/scripts/tests/run-benchmarks.sh index 91901c7d3..3589db812 100755 --- a/scripts/tests/run-benchmarks.sh +++ b/scripts/tests/run-benchmarks.sh @@ -46,49 +46,33 @@ SUBSUITE_NAME="BoxesAO" SUBSUITE_REGEX="^boxes" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -# wait to insert contexts (which will be reused for all subsequent benchmark runs) -# until first benchmark successfully finishes. -benny insert code_context "${PROJECT_NAME}" ${SOURCE_ROOT} --save-json code_context.json -benny insert run_context ${BENNY_SYSTEM_TOKEN} ./code_context.json --save-json run_context.json - -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json - -# subsequent subsuite runs... - SUBSUITE_NAME="CornellBoxSPP" SUBSUITE_REGEX="^cornell_box" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json SUBSUITE_NAME="GravitySpheresVolumeDIM" SUBSUITE_REGEX="^gravity_spheres_volume" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json SUBSUITE_NAME="PerlinNoiseVolumes" SUBSUITE_REGEX="^perlin_noise_volumes" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json SUBSUITE_NAME="ParticleVolumes" SUBSUITE_REGEX="^particle_volume" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json SUBSUITE_NAME="UnstructuredVolumes" SUBSUITE_REGEX="^unstructured_volume" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json SUBSUITE_NAME="Clipping" SUBSUITE_REGEX="^clip" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json SUBSUITE_NAME="Other" SUBSUITE_REGEX="^(random_spheres|streamlines|planes|vdb_volume|gravity_spheres_amr)" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json ################### # Microbenchmarks # @@ -99,4 +83,3 @@ SUITE_NAME="Microbenchmarks" SUBSUITE_NAME="Setup" SUBSUITE_REGEX="^setup" ./ospBenchmark ${BENCHMARK_FLAGS} --benchmark_filter=${SUBSUITE_REGEX} --benchmark_out=results-${SUITE_NAME}-${SUBSUITE_NAME}.json -benny insert googlebenchmark ./run_context.json ${SUITE_NAME} ${SUBSUITE_NAME} ./results-${SUITE_NAME}-${SUBSUITE_NAME}.json diff --git a/scripts/tests/run_tests.sh b/scripts/tests/run_tests.sh index 932afa353..29472e4a8 100755 --- a/scripts/tests/run_tests.sh +++ b/scripts/tests/run_tests.sh @@ -55,14 +55,6 @@ export CMAKE_BUILD_PARALLEL_LEVEL=32 cmake --build . --target ospray_test_data let exitCode+=$? -### Excluded tests -################## -# due to IEEE 754 uncompliant NaN handling on ARM NEON, -# see https://github.com/ispc/ispc/issues/3048 -if [[ `uname -m` =~ arm|aarch ]] ; then - test_filters="TestShadowCatcher/ShadowCatcher.multipleLights/0" -fi - export OIDN_VERBOSE=2 if [ $TEST_CPU ]; then From e938a49d7f838db7193ae43123405bdad8cafdc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=BCnther?= Date: Wed, 10 Dec 2025 11:29:30 +0100 Subject: [PATCH 10/10] Bump CMake minimum required version to 3.10 Newer CMake v4.x dropped support for versions < 3.10 --- CHANGELOG.md | 1 + CMakeLists.txt | 2 +- apps/ospTutorial/ospTutorialFindospray/CMakeLists.txt | 2 +- doc/compilation.md | 2 +- doc/prerequisites.md | 3 ++- scripts/superbuild/CMakeLists.txt | 2 +- test_image_data/CMakeLists.txt | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a4361f86..876ed85f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Version History - ISPCRT v1.25.2 (uses IEEE 754 compliant instructions on ARM for min/max) - rkcommon v1.15.2 + - CMake v3.10 ### Changes in v3.2.0: diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fafecf1a..ad426eef1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ ## Copyright 2009 Intel Corporation ## SPDX-License-Identifier: Apache-2.0 -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.10) ############################################################## # Language setup diff --git a/apps/ospTutorial/ospTutorialFindospray/CMakeLists.txt b/apps/ospTutorial/ospTutorialFindospray/CMakeLists.txt index a558350f1..b6a4d2263 100644 --- a/apps/ospTutorial/ospTutorialFindospray/CMakeLists.txt +++ b/apps/ospTutorial/ospTutorialFindospray/CMakeLists.txt @@ -12,7 +12,7 @@ # should build the ospTutorial app from that install and NOT use your # local build. -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.10) project(ospTutorialFindospray LANGUAGES C) diff --git a/doc/compilation.md b/doc/compilation.md index 8f6a5c0e8..39520f2ad 100644 --- a/doc/compilation.md +++ b/doc/compilation.md @@ -91,7 +91,7 @@ Finding an OSPRay Install with CMake Client applications using OSPRay can find it with CMake's `find_package()` command. For example, - find_package(ospray 3.0.0 REQUIRED) + find_package(ospray 3.3.0 REQUIRED) finds OSPRay via OSPRay's configuration file `osprayConfig.cmake`^[This file is usually in diff --git a/doc/prerequisites.md b/doc/prerequisites.md index 134bad1a4..f3523cbe0 100644 --- a/doc/prerequisites.md +++ b/doc/prerequisites.md @@ -15,7 +15,8 @@ before you can build OSPRay you need the following prerequisites: git clone https://github.com/RenderKit/ospray.git -- To build OSPRay you need [CMake](http://www.cmake.org), any form of +- To build OSPRay you need [CMake](http://www.cmake.org) version 3.10 + or higher, any form of C++11 compiler (we recommend using GCC, but also support Clang, MSVC, and [Intel® C++ Compiler (icc)](https://software.intel.com/en-us/c-compilers)), and standard diff --git a/scripts/superbuild/CMakeLists.txt b/scripts/superbuild/CMakeLists.txt index d6342cca9..55a2953d5 100644 --- a/scripts/superbuild/CMakeLists.txt +++ b/scripts/superbuild/CMakeLists.txt @@ -3,7 +3,7 @@ ## Global settings ## -cmake_minimum_required(VERSION 3.7) +cmake_minimum_required(VERSION 3.10) set(CMAKE_INSTALL_MESSAGE LAZY) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependencies) diff --git a/test_image_data/CMakeLists.txt b/test_image_data/CMakeLists.txt index a819ebc68..9612c74e6 100644 --- a/test_image_data/CMakeLists.txt +++ b/test_image_data/CMakeLists.txt @@ -1,7 +1,7 @@ ## Copyright 2009 Intel Corporation ## SPDX-License-Identifier: Apache-2.0 -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.10) project(ospray_test_data NONE)