Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement separate object finalization #24

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,16 @@ include(cmake/cmake_project_commands.cmake)

## Dependencies ##

find_package(anari 0.11.0 REQUIRED)
find_package(anari 0.13.0 REQUIRED)
find_package(ospray 3.2.0 REQUIRED)
find_package(Python3 REQUIRED COMPONENTS Interpreter)

## Code generation ##

add_subdirectory(code_gen)

## Core device target ##

project_add_library(SHARED)

project_sources(PRIVATE
OSPRayDevice.cpp
code_gen/OSPRayDeviceQueries.cpp
OSPRayGlobalState.cpp
OSPRayLibrary.cpp
Object.cpp
Expand Down Expand Up @@ -97,6 +92,13 @@ project_sources(PRIVATE
scene/volume/spatial_field/UnstructuredField.cpp
)

anari_generate_queries(
DEVICE_TARGET ${PROJECT_NAME}
CPP_NAMESPACE anari_ospray
JSON_DEFINITIONS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/code_gen/ospray_device.json
JSON_ROOT_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/code_gen
)

include(GenerateExportHeader)
generate_export_header(${PROJECT_NAME}
EXPORT_MACRO_NAME "ANARI_OSPRAY_DEVICE_INTERFACE"
Expand Down
4 changes: 2 additions & 2 deletions OSPRayDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ int OSPRayDevice::getProperty(ANARIObject object,
} else {
if (mask == ANARI_WAIT) {
deviceState()->waitOnCurrentFrame();
m_state->commitBufferFlush();
m_state->commitBuffer.flush();
}
return helium::referenceFromHandle(object).getProperty(
name, type, mem, mask);
Expand Down Expand Up @@ -424,7 +424,7 @@ OSPRayDevice::~OSPRayDevice()

auto &state = *deviceState();

state.commitBufferClear();
state.commitBuffer.clear();

reportMessage(ANARI_SEVERITY_DEBUG, "destroying ospray device (%p)", this);

Expand Down
12 changes: 10 additions & 2 deletions Object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,17 @@ namespace anari_ospray {

Object::Object(ANARIDataType type, OSPRayGlobalState *s)
: helium::BaseObject(type, s)
{}
{
helium::BaseObject::markParameterChanged();
s->commitBuffer.addObjectToCommit(this);
}

void Object::commitParameters()
{
// no-op
}

void Object::commit()
void Object::finalize()
{
// no-op
}
Expand Down
7 changes: 4 additions & 3 deletions Object.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ struct Object : public helium::BaseObject
virtual bool getProperty(const std::string_view &name,
ANARIDataType type,
void *ptr,
uint32_t flags);
uint32_t flags) override;

virtual void commit();
virtual void commitParameters() override;
virtual void finalize() override;

virtual bool isValid() const;
virtual bool isValid() const override;

OSPRayGlobalState *deviceState() const;
};
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ to Intel® [OSPRay](https://www.ospray.org): ANARILibrary and ANARIDevice

- CMake
- C++11 compiler
- [ANARI-SDK](https://github.com/KhronosGroup/ANARI-SDK) v0.10.0 or later
- [OSPRay](https://github.com/ospray/ospray) v3.1.0+
- [ANARI-SDK](https://github.com/KhronosGroup/ANARI-SDK) v0.13.0 or later
- [OSPRay](https://github.com/ospray/ospray) v3.2.0+
- Python 3

## Building
Expand Down
37 changes: 26 additions & 11 deletions array/Array.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,6 @@ size_t Array::totalCapacity() const
return totalSize();
}

bool Array::getProperty(
const std::string_view &name, ANARIDataType type, void *ptr, uint32_t flags)
{
return 0;
}

void Array::commit()
{
// no-op
}

void *Array::map()
{
if (m_mapped) {
Expand All @@ -132,11 +121,37 @@ void Array::unmap()
notifyChangeObservers();
}

bool Array::isMapped() const
{
return m_mapped;
}

bool Array::wasPrivatized() const
{
return m_privatized;
}

void Array::markDataModified()
{
m_lastDataModified = helium::newTimeStamp();
}

bool Array::getProperty(
const std::string_view &name, ANARIDataType type, void *ptr, uint32_t flags)
{
return 0;
}

void Array::commitParameters()
{
// no-op
}

void Array::finalize()
{
// no-op
}

OSPData Array::osprayData()
{
if (!m_osprayData)
Expand Down
19 changes: 13 additions & 6 deletions array/Array.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,23 @@ struct Array : public helium::BaseArray
virtual size_t totalSize() const = 0;
virtual size_t totalCapacity() const;

bool getProperty(const std::string_view &name,
ANARIDataType type,
void *ptr,
uint32_t flags) override;
void commit() override;
void *map() override;
virtual void *map() override;
virtual void unmap() override;
virtual void privatize() override = 0;

bool isMapped() const;

bool wasPrivatized() const;

void markDataModified();

virtual bool getProperty(const std::string_view &name,
ANARIDataType type,
void *ptr,
uint32_t flags) override;
virtual void commitParameters() override;
virtual void finalize() override;

OSPData osprayData();

// CONSOLIDATE INTO anari_ospray::Object/////////////////////////////////////
Expand Down Expand Up @@ -95,6 +101,7 @@ struct Array : public helium::BaseArray
} privatized;
} m_hostData;

helium::TimeStamp m_lastDataModified{0};
bool m_mapped{false};
OSPData m_osprayData{nullptr};

Expand Down
12 changes: 6 additions & 6 deletions array/Array1D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,8 @@ Array1D::Array1D(OSPRayGlobalState *state, const Array1DMemoryDescriptor &d)
initManagedMemory();
}

void Array1D::commit()
void Array1D::commitParameters()
{
auto oldBegin = m_begin;
auto oldEnd = m_end;

m_begin = getParam<size_t>("begin", 0);
m_begin = std::clamp(m_begin, size_t(0), m_capacity - 1);
m_end = getParam<size_t>("end", m_capacity);
Expand All @@ -31,9 +28,12 @@ void Array1D::commit()
"array 'begin' is not less than 'end', swapping values");
std::swap(m_begin, m_end);
}
}

if (m_begin != oldBegin || m_end != oldEnd)
notifyChangeObservers();
void Array1D::finalize()
{
markDataModified();
notifyChangeObservers();
}

size_t Array1D::totalSize() const
Expand Down
3 changes: 2 additions & 1 deletion array/Array1D.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ struct Array1D : public Array
{
Array1D(OSPRayGlobalState *state, const Array1DMemoryDescriptor &d);

void commit() override;
void commitParameters() override;
void finalize() override;

size_t totalSize() const override;
size_t totalCapacity() const override;
Expand Down
12 changes: 6 additions & 6 deletions array/ObjectArray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,8 @@ ObjectArray::~ObjectArray()
m_appendedHandles.begin(), m_appendedHandles.end(), refDecObject);
}

void ObjectArray::commit()
void ObjectArray::commitParameters()
{
auto oldBegin = m_begin;
auto oldEnd = m_end;

m_begin = getParam<size_t>("begin", 0);
m_begin = std::clamp(m_begin, size_t(0), m_capacity - 1);
m_end = getParam<size_t>("end", m_capacity);
Expand All @@ -57,9 +54,12 @@ void ObjectArray::commit()
"array 'begin' is not less than 'end', swapping values");
std::swap(m_begin, m_end);
}
}

if (m_begin != oldBegin || m_end != oldEnd)
notifyChangeObservers();
void ObjectArray::finalize()
{
markDataModified();
notifyChangeObservers();
}

size_t ObjectArray::totalSize() const
Expand Down
3 changes: 2 additions & 1 deletion array/ObjectArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ struct ObjectArray : public Array
ObjectArray(OSPRayGlobalState *state, const Array1DMemoryDescriptor &d);
~ObjectArray();

void commit() override;
void commitParameters() override;
void finalize() override;

size_t totalSize() const override;
size_t totalCapacity() const override;
Expand Down
30 changes: 19 additions & 11 deletions camera/Camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,26 @@ Camera *Camera::createInstance(std::string_view type, OSPRayGlobalState *s)
return (Camera *)new UnknownObject(ANARI_CAMERA, s);
}

void Camera::commit()
void Camera::commitParameters()
{
auto pos = getParam<float3>("position", float3(0.f));
auto dir = normalize(getParam<float3>("direction", float3(0.f, 0.f, 1.f)));
auto up = normalize(getParam<float3>("up", float3(0.f, 1.f, 0.f)));
float imgRegion[4] = {0.f, 0.f, 1.f, 1.f};
getParam("imageRegion", ANARI_FLOAT32_BOX2, imgRegion);
ospSetParam(osprayCamera(), "position", OSP_VEC3F, &pos);
ospSetParam(osprayCamera(), "direction", OSP_VEC3F, &dir);
ospSetParam(osprayCamera(), "up", OSP_VEC3F, &up);
ospSetParam(osprayCamera(), "imageStart", OSP_VEC2F, &imgRegion[0]);
ospSetParam(osprayCamera(), "imageEnd", OSP_VEC2F, &imgRegion[2]);
m_pos = getParam<float3>("position", float3(0.f));
m_dir = normalize(getParam<float3>("direction", float3(0.f, 0.f, 1.f)));
m_up = normalize(getParam<float3>("up", float3(0.f, 1.f, 0.f)));
if (!getParam("imageRegion", ANARI_FLOAT32_BOX2, m_imgRegion)) {
m_imgRegion[0] = 0.f;
m_imgRegion[1] = 0.f;
m_imgRegion[2] = 1.f;
m_imgRegion[3] = 1.f;
}
}

void Camera::finalize()
{
ospSetParam(osprayCamera(), "position", OSP_VEC3F, &m_pos);
ospSetParam(osprayCamera(), "direction", OSP_VEC3F, &m_dir);
ospSetParam(osprayCamera(), "up", OSP_VEC3F, &m_up);
ospSetParam(osprayCamera(), "imageStart", OSP_VEC2F, &m_imgRegion[0]);
ospSetParam(osprayCamera(), "imageEnd", OSP_VEC2F, &m_imgRegion[2]);
markUpdated();
}

Expand Down
7 changes: 6 additions & 1 deletion camera/Camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ struct Camera : public Object
Camera(OSPRayGlobalState *s, const char *osptype);
~Camera() override;

virtual void commit() override;
virtual void commitParameters() override;
virtual void finalize() override;

static Camera *createInstance(
std::string_view type, OSPRayGlobalState *state);
Expand All @@ -21,6 +22,10 @@ struct Camera : public Object

protected:
OSPCamera m_osprayCamera{nullptr};
float3 m_pos{0.f, 0.f, 0.f};
float3 m_dir{0.f, 0.f, 1.f};
float3 m_up{0.f, 1.f, 0.f};
float m_imgRegion[4];
};

} // namespace anari_ospray
Expand Down
17 changes: 11 additions & 6 deletions camera/Orthographic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@ namespace anari_ospray {

Orthographic::Orthographic(OSPRayGlobalState *s) : Camera(s, "orthographic") {}

void Orthographic::commit()
void Orthographic::commitParameters()
{
Camera::commit();
const float aspect = getParam<float>("aspect", 1.f);
const float height = getParam<float>("height", 1.f);
ospSetParam(osprayCamera(), "aspect", OSP_FLOAT, &aspect);
ospSetParam(osprayCamera(), "height", OSP_FLOAT, &height);
Camera::commitParameters();
m_aspect = getParam<float>("aspect", 1.f);
m_height = getParam<float>("height", 1.f);
}

void Orthographic::finalize()
{
Camera::finalize();
ospSetParam(osprayCamera(), "aspect", OSP_FLOAT, &m_aspect);
ospSetParam(osprayCamera(), "height", OSP_FLOAT, &m_height);
ospCommit(osprayCamera());
}

Expand Down
6 changes: 5 additions & 1 deletion camera/Orthographic.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ namespace anari_ospray {
struct Orthographic : public Camera
{
Orthographic(OSPRayGlobalState *s);
void commit() override;
void commitParameters() override;
void finalize() override;
private:
float m_aspect{1.f};
float m_height{1.f};
};

} // namespace anari_ospray
22 changes: 13 additions & 9 deletions camera/Perspective.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,21 @@ namespace anari_ospray {

Perspective::Perspective(OSPRayGlobalState *s) : Camera(s, "perspective") {}

void Perspective::commit()
void Perspective::commitParameters()
{
Camera::commit();
Camera::commitParameters();
// NOTE: demonstrate alternative 'raw' method for getting parameter values
float fovy = 0.f;
if (!getParam("fovy", ANARI_FLOAT32, &fovy))
fovy = radians(60.f);
fovy = degrees(fovy);
float aspect = getParam<float>("aspect", 1.f);
ospSetParam(osprayCamera(), "fovy", OSP_FLOAT, &fovy);
ospSetParam(osprayCamera(), "aspect", OSP_FLOAT, &aspect);
if (!getParam("fovy", ANARI_FLOAT32, &m_fovy))
m_fovy = radians(60.f);
m_fovy = degrees(m_fovy);
m_aspect = getParam<float>("aspect", 1.f);
}

void Perspective::finalize()
{
Camera::finalize();
ospSetParam(osprayCamera(), "fovy", OSP_FLOAT, &m_fovy);
ospSetParam(osprayCamera(), "aspect", OSP_FLOAT, &m_aspect);
ospCommit(osprayCamera());
}

Expand Down
Loading