1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
// Copyright 2009 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <unordered_set>
#include <vector>
#include "ISPCDevice.h"
#include "MultiDeviceLoadBalancer.h"
#include "MultiDeviceObject.h"
#include "MultiDeviceRenderTask.h"
// MultiDevice.h Implements the a multiplexor for other OSPRay devices which
// this simply farms work out to in an image parallel fashion.
namespace ospray {
namespace api {
struct MultiDevice : public Device
{
MultiDevice() = default;
/////////////////////////////////////////////////////////////////////////
// ManagedObject Implementation /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
void commit() override;
/////////////////////////////////////////////////////////////////////////
// Device Implementation ////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
int loadModule(const char *name) override;
// OSPRay Data Arrays ///////////////////////////////////////////////////
OSPData newSharedData(const void *sharedData,
OSPDataType,
const vec3ul &numItems,
const vec3l &byteStride,
OSPDeleterCallback,
const void *userPtr) override;
OSPData newData(OSPDataType, const vec3ul &numItems) override;
void copyData(const OSPData source,
OSPData destination,
const vec3ul &destinationIndex) override;
// Renderable Objects ///////////////////////////////////////////////////
OSPLight newLight(const char *type) override;
OSPCamera newCamera(const char *type) override;
OSPGeometry newGeometry(const char *type) override;
OSPVolume newVolume(const char *type) override;
OSPGeometricModel newGeometricModel(OSPGeometry geom) override;
OSPVolumetricModel newVolumetricModel(OSPVolume volume) override;
// Model Meta-Data //////////////////////////////////////////////////////
OSPMaterial newMaterial(const char *material_type) override;
OSPTransferFunction newTransferFunction(const char *type) override;
OSPTexture newTexture(const char *type) override;
// Instancing ///////////////////////////////////////////////////////////
OSPGroup newGroup() override;
OSPInstance newInstance(OSPGroup group) override;
// Top-level Worlds /////////////////////////////////////////////////////
OSPWorld newWorld() override;
box3f getBounds(OSPObject) override;
// Object + Parameter Lifetime Management ///////////////////////////////
void setObjectParam(OSPObject object,
const char *name,
OSPDataType type,
const void *mem) override;
void removeObjectParam(OSPObject object, const char *name) override;
void commit(OSPObject object) override;
void release(OSPObject _obj) override;
void retain(OSPObject _obj) override;
// FrameBuffer Manipulation /////////////////////////////////////////////
OSPFrameBuffer frameBufferCreate(const vec2i &size,
const OSPFrameBufferFormat mode,
const uint32 channels) override;
OSPImageOperation newImageOp(const char *type) override;
const void *frameBufferMap(
OSPFrameBuffer fb, const OSPFrameBufferChannel) override;
void frameBufferUnmap(const void *mapped, OSPFrameBuffer fb) override;
float getVariance(OSPFrameBuffer) override;
void resetAccumulation(OSPFrameBuffer _fb) override;
// Frame Rendering //////////////////////////////////////////////////////
OSPRenderer newRenderer(const char *type) override;
OSPFuture renderFrame(
OSPFrameBuffer, OSPRenderer, OSPCamera, OSPWorld) override;
int isReady(OSPFuture, OSPSyncEvent) override;
void wait(OSPFuture, OSPSyncEvent) override;
void cancel(OSPFuture) override;
float getProgress(OSPFuture) override;
float getTaskDuration(OSPFuture) override;
OSPPickResult pick(
OSPFrameBuffer, OSPRenderer, OSPCamera, OSPWorld, const vec2f &) override;
private:
std::unique_ptr<MultiDeviceLoadBalancer> loadBalancer;
ISPCDevice hostDevice;
std::vector<std::unique_ptr<ISPCDevice>> subdevices;
};
extern "C" OSPError OSPRAY_DLLEXPORT ospray_module_init_multi(
int16_t versionMajor, int16_t versionMinor, int16_t /*versionPatch*/);
} // namespace api
} // namespace ospray
|