Skip to content

Commit

Permalink
Merge branch 'release-1.3.x'
Browse files Browse the repository at this point in the history
  • Loading branch information
gregjohnson committed May 11, 2022
2 parents 5da393e + c2151b5 commit ec551ea
Show file tree
Hide file tree
Showing 305 changed files with 2,973 additions and 1,459 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
@@ -1,6 +1,19 @@
Version History
---------------

### Open VKL 1.3.0

- Added AVX512 8-wide CPU device mode, enabled via the
`OPENVKL_ISA_AVX512SKX_8_WIDE` CMake option
- VDB volumes: added support for packed / contiguous data layouts for
temporally constant volumes, which can provide improved performance
(`nodesPackedDense`, `nodesPackedTile` parameters)
- VDB utility library: added `repackNodes` flag to toggle usage of packed data
layouts
- Particle volumes: general memory efficiency and performance improvements
- Superbuild updates to latest versions of dependencies
- Minimum ISPC version is now v1.18.0

### Open VKL 1.2.0

- Added `vklSetParam()` API function which can set parameters of any supported
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
@@ -1,4 +1,4 @@
## Copyright 2019-2021 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

## Global CMake options ##
Expand All @@ -19,7 +19,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)

## Establish project ##

project(openvkl VERSION 1.2.0 LANGUAGES C CXX)
project(openvkl VERSION 1.3.0 LANGUAGES C CXX)

## Add openvkl specific macros ##

Expand Down
33 changes: 26 additions & 7 deletions README.md
@@ -1,6 +1,6 @@
# Intel® Open Volume Kernel Library

This is release v1.2.0 of Intel® Open VKL. For changes and new features
This is release v1.3.0 of Intel® Open VKL. For changes and new features
see the [changelog](CHANGELOG.md). Visit http://www.openvkl.org for more
information.

Expand Down Expand Up @@ -33,6 +33,20 @@ example renderers to demonstrate how to best use the Open VKL API.

## Version History

### Open VKL 1.3.0

- Added AVX512 8-wide CPU device mode, enabled via the
`OPENVKL_ISA_AVX512SKX_8_WIDE` CMake option
- VDB volumes: added support for packed / contiguous data layouts for
temporally constant volumes, which can provide improved performance
(`nodesPackedDense`, `nodesPackedTile` parameters)
- VDB utility library: added `repackNodes` flag to toggle usage of
packed data layouts
- Particle volumes: general memory efficiency and performance
improvements
- Superbuild updates to latest versions of dependencies
- Minimum ISPC version is now v1.18.0

### Open VKL 1.2.0

- Added `vklSetParam()` API function which can set parameters of any
Expand Down Expand Up @@ -550,7 +564,7 @@ variables described previously.
## Basic data types
Open VKL defines 3-component vectors of integer and vector types:
Open VKL defines 3-component vectors of integer and float types:
``` cpp
typedef struct
Expand Down Expand Up @@ -600,8 +614,8 @@ typedef struct

Objects in Open VKL are exposed to the APIs as handles with internal
reference counting for lifetime determination. Objects are created with
particular type’s `vklNew...` API entry point. For example, `vklNewData`
and `vklNewVolume`.
each particular type’s `vklNew...` API entry point. For example,
`vklNewData` and `vklNewVolume`.

In general, modifiable parameters to objects are modified using
`vklSet...` functions based on the type of the parameter being set. The
Expand Down Expand Up @@ -775,7 +789,7 @@ called concurrently on the same object.

Open VKL currently supports structured volumes on regular and spherical
grids; unstructured volumes with tetrahedral, wedge, pyramid, and
hexaderal primitive types; adaptive mesh refinement (AMR) volumes;
hexahedral primitive types; adaptive mesh refinement (AMR) volumes;
sparse VDB volumes; and particle volumes. Volumes are created with
`vklNewVolume` with a device and appropriate type string:

Expand Down Expand Up @@ -1120,13 +1134,18 @@ VDB volumes are created by passing the type string `"vdb"` to
| int\[\] | node.temporallyStructuredNumTimesteps | | For temporally structured variation, number of timesteps per voxel. Only valid if `temporalFormat` is `VKL_TEMPORAL_FORMAT_STRUCTURED`. |
| VKLData\[\] | node.temporallyUnstructuredIndices | | For temporally unstructured variation, beginning per voxel. Supported data types for each node are `VKL_UINT` and `VKL_ULONG`. Only valid if `temporalFormat` is `VKL_TEMPORAL_FORMAT_UNSTRUCTURED`. |
| VKLData\[\] | node.temporallyUnstructuredTimes | | For temporally unstructured variation, time values corresponding to values in `node.data`. For each node, the data must be of type `VKL_FLOAT`. Only valid if `temporalFormat` is `VKL_TEMPORAL_FORMAT_UNSTRUCTURED`. |
| VKLData\[\] | nodesPackedDense | | Optionally provided instead of `node.data`, for each attribute a single array of all dense node data (`VKL_FORMAT_DENSE_ZYX` only) in a contiguous layout, provided in the same order as the corresponding `node.*` parameters. This packed layout may be more performant. Supported for temporally constant data only. |
| VKLData\[\] | nodesPackedTile | | Optionally provided instead of `node.data`, for each attribute a single array of all tile node data (`VKL_FORMAT_TILE` only) in a contiguous layout, provided in the same order as the corresponding `node.*` parameters. This packed layout may be more performant. Supported for temporally constant data only. |
| float\[\] | background | `VKL_BACKGROUND_UNDEFINED` | For each attribute, the value that is returned when sampling an undefined region outside the volume domain. |
| box3i | indexClippingBounds | | Clips the volume to the specified index-space bounding box. This is useful for volumes with dimensions that are not even multiples of the leaf node dimensions, or .vdb files with restrictive active voxel bounding boxes. |

Configuration parameters for VDB (`"vdb"`) volumes.

The level, origin, format, and data parameters must have the same size,
and there must be at least one valid node or `commit()` will fail.
and there must be at least one valid node or `commit()` will fail. The
`nodesPackedDense` and `nodesPackedTile` parameters may be provided
instead of `node.data`; this packed data layout may provide better
performance.

VDB volumes support temporally structured and temporally unstructured
temporal variation. See section ‘Temporal Variation’ for more detail.
Expand Down Expand Up @@ -2476,7 +2495,7 @@ before you can build Open VKL you need the following prerequisites:
examples, you should also have some version of OpenGL.

- Additionally you require a copy of the [Intel® Implicit SPMD Program
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.16.0 or
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.18.0 or
later. Please obtain a release of ISPC from the [ISPC downloads
page](https://ispc.github.io/downloads.html).

Expand Down
2 changes: 1 addition & 1 deletion cmake/openvklConfig.cmake.in
@@ -1,4 +1,4 @@
## Copyright 2019-2021 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

@PACKAGE_INIT@
Expand Down
19 changes: 14 additions & 5 deletions cmake/openvkl_ispc.cmake
@@ -1,10 +1,10 @@
## Copyright 2019-2021 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

option(OPENVKL_ISPC_FAST_MATH "enable ISPC fast-math optimizations" OFF)

# ISPC versions to look for, in decending order (newest first)
set(ISPC_VERSION_WORKING "1.16.0")
set(ISPC_VERSION_WORKING "1.18.0")
list(GET ISPC_VERSION_WORKING -1 ISPC_VERSION_REQUIRED)

if (NOT ISPC_EXECUTABLE)
Expand Down Expand Up @@ -89,9 +89,11 @@ macro(openvkl_configure_ispc_isa)
option(OPENVKL_ISA_AVX2 "Enables AVX2 ISA." ON)
option(OPENVKL_ISA_AVX512KNL "Enables AVX512 ISA for Knights Landing." OFF)
option(OPENVKL_ISA_AVX512SKX "Enables AVX512 ISA for Skylake." ON)
option(OPENVKL_ISA_AVX512SKX_8_WIDE "Enables AVX512 ISA for Skylake (8 wide)." OFF)

if (OPENVKL_ISA_AVX512KNL AND OPENVKL_ISA_AVX512SKX)
message(FATAL_ERROR "Only one AVX512 ISA may be enabled; choose either AVX512KNL or AVX512SKX")
if ((OPENVKL_ISA_AVX512KNL AND (OPENVKL_ISA_AVX512SKX OR OPENVKL_ISA_AVX512SKX_8_WIDE)) OR
(OPENVKL_ISA_AVX512SKX AND OPENVKL_ISA_AVX512SKX_8_WIDE))
message(FATAL_ERROR "Only one AVX512 ISA may be enabled; choose either AVX512KNL, AVX512SKX or AVX512SKX_8_WIDE")
endif()
else()
option(OPENVKL_ISA_NEON "Enables NEON ISA." ON)
Expand Down Expand Up @@ -140,6 +142,12 @@ macro(openvkl_configure_ispc_isa)
message(STATUS "OpenVKL AVX512SKX ISA target enabled.")
endif()

if (OPENVKL_ISA_AVX512SKX_8_WIDE)
set(OPENVKL_ISPC_TARGET_LIST ${OPENVKL_ISPC_TARGET_LIST} avx512skx-i32x8)
set(OPENVKL_ISPC_TARGET_LIST_8 ${OPENVKL_ISPC_TARGET_LIST_8} avx512skx-i32x8)
message(STATUS "OpenVKL AVX512SKX_8_WIDE ISA target enabled.")
endif()

# if only one target is specified for a given width, add a second target to
# force ISPC name mangling. this avoids global name conflicts between devices
# of different widths.
Expand Down Expand Up @@ -250,7 +258,8 @@ macro (OPENVKL_ISPC_COMPILE)
list(LENGTH ISPC_TARGETS NUM_TARGETS)
if (NUM_TARGETS GREATER 1)
foreach(target ${ISPC_TARGETS})
string(REPLACE "-i32x16" "" target ${target}) # strip avx512(knl|skx)-i32x16
string(REPLACE "-i32x8" "" target ${target}) # strip "-i32x8"
string(REPLACE "-i32x16" "" target ${target}) # strip "-i32x16"
set(results ${results} "${outdir}/${fname}.dev_${target}${ISPC_TARGET_EXT}")
endforeach()
endif()
Expand Down
6 changes: 5 additions & 1 deletion cmake/openvkl_macros.cmake
@@ -1,4 +1,4 @@
## Copyright 2019-2022 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

macro(openvkl_add_library_ispc name type)
Expand Down Expand Up @@ -56,6 +56,10 @@ macro(openvkl_configure_global_build_flags)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")

if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model=precise")
endif()

elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
if(NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-ansi-alias")
Expand Down
34 changes: 29 additions & 5 deletions doc/api.md
Expand Up @@ -181,7 +181,7 @@ previously.
Basic data types
----------------

Open VKL defines 3-component vectors of integer and vector types:
Open VKL defines 3-component vectors of integer and float types:

typedef struct
{
Expand Down Expand Up @@ -225,8 +225,8 @@ Object model
------------

Objects in Open VKL are exposed to the APIs as handles with internal reference
counting for lifetime determination. Objects are created with particular type's
`vklNew...` API entry point. For example, `vklNewData` and `vklNewVolume`.
counting for lifetime determination. Objects are created with each particular
type's `vklNew...` API entry point. For example, `vklNewData` and `vklNewVolume`.

In general, modifiable parameters to objects are modified using `vklSet...`
functions based on the type of the parameter being set. The parameter name is
Expand Down Expand Up @@ -417,7 +417,7 @@ Volume types
------------

Open VKL currently supports structured volumes on regular and spherical grids;
unstructured volumes with tetrahedral, wedge, pyramid, and hexaderal primitive
unstructured volumes with tetrahedral, wedge, pyramid, and hexahedral primitive
types; adaptive mesh refinement (AMR) volumes; sparse VDB volumes; and particle
volumes. Volumes are created with `vklNewVolume` with a device and appropriate
type string:
Expand Down Expand Up @@ -928,6 +928,28 @@ following parameters:
Only valid if `temporalFormat` is
`VKL_TEMPORAL_FORMAT_UNSTRUCTURED`.

VKLData[] nodesPackedDense Optionally provided instead of
`node.data`, for each attribute a
single array of all dense node data
(`VKL_FORMAT_DENSE_ZYX` only) in a
contiguous layout, provided in the
same order as the corresponding
`node.*` parameters. This packed
layout may be more performant.
Supported for temporally constant data
only.

VKLData[] nodesPackedTile Optionally provided instead of
`node.data`, for each attribute a
single array of all tile node data
(`VKL_FORMAT_TILE` only) in a
contiguous layout, provided in the
same order as the corresponding
`node.*` parameters. This packed
layout may be more performant.
Supported for temporally constant data
only.

float[] background `VKL_BACKGROUND_UNDEFINED` For each attribute, the value that is
returned when sampling an undefined
region outside the volume domain.
Expand All @@ -943,7 +965,9 @@ following parameters:
: Configuration parameters for VDB (`"vdb"`) volumes.

The level, origin, format, and data parameters must have the same size, and there must
be at least one valid node or `commit()` will fail.
be at least one valid node or `commit()` will fail. The `nodesPackedDense` and
`nodesPackedTile` parameters may be provided instead of `node.data`; this packed data
layout may provide better performance.

VDB volumes support temporally structured and temporally unstructured temporal
variation. See section 'Temporal Variation' for more detail.
Expand Down
2 changes: 1 addition & 1 deletion doc/compilation.md
Expand Up @@ -30,7 +30,7 @@ you can build Open VKL you need the following prerequisites:
have some version of OpenGL.

- Additionally you require a copy of the [Intel® Implicit SPMD Program
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.16.0 or later.
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.18.0 or later.
Please obtain a release of ISPC from the [ISPC downloads
page](https://ispc.github.io/downloads.html).

Expand Down
2 changes: 1 addition & 1 deletion examples/CMakeLists.txt
@@ -1,4 +1,4 @@
## Copyright 2019-2022 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

## "Hello world" VKL tutorials ##
Expand Down
2 changes: 1 addition & 1 deletion examples/from_openvkl_install/CMakeLists.txt
@@ -1,4 +1,4 @@
## Copyright 2019-2021 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

# NOTE: This CMakeLists.txt is intended to be used to exercise an OpenVKL
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/CMakeLists.txt
@@ -1,4 +1,4 @@
## Copyright 2019-2021 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

add_subdirectory(renderer)
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/ParameterGui.cpp
@@ -1,4 +1,4 @@
// Copyright 2021-2022 Intel Corporation
// Copyright 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "ParameterGui.h"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/TransferFunctionWidget.cpp
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "TransferFunctionWidget.h"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/TransferFunctionWidget.h
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/CMakeLists.txt
@@ -1,4 +1,4 @@
## Copyright 2019-2021 Intel Corporation
## Copyright 2019 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

include_directories_ispc(
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/DensityPathTracer.ispc
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "Random.ih"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/HitIteratorRenderer.ispc
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "Ray.ih"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/IntervalIteratorDebug.cpp
@@ -1,4 +1,4 @@
// Copyright 2021-2022 Intel Corporation
// Copyright 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "IntervalIteratorDebug.h"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/IntervalIteratorDebug.h
@@ -1,4 +1,4 @@
// Copyright 2021-2022 Intel Corporation
// Copyright 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/IntervalIteratorDebug.ispc
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "Ray.ih"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/Random.ih
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/Ray.ih
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/RayMarchIteratorRenderer.cpp
@@ -1,4 +1,4 @@
// Copyright 2021-2022 Intel Corporation
// Copyright 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "RayMarchIteratorRenderer.h"
Expand Down
2 changes: 1 addition & 1 deletion examples/interactive/renderer/RayMarchIteratorRenderer.h
@@ -1,4 +1,4 @@
// Copyright 2021-2022 Intel Corporation
// Copyright 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once
Expand Down
@@ -1,4 +1,4 @@
// Copyright 2019-2021 Intel Corporation
// Copyright 2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "Ray.ih"
Expand Down

0 comments on commit ec551ea

Please sign in to comment.