108 bvh_layout_mask &= device_bvh_layout_mask;
109 bvh_layout_mask_all |= device_bvh_layout_mask;
133 if ((bvh_layout_mask_all & BVH_LAYOUT_OPTIX_EMBREE) == BVH_LAYOUT_OPTIX_EMBREE) {
137 if ((bvh_layout_mask_all & BVH_LAYOUT_METAL_EMBREE) == BVH_LAYOUT_METAL_EMBREE) {
141 if ((bvh_layout_mask_all & BVH_LAYOUT_EMBREEGPU_EMBREE) == BVH_LAYOUT_EMBREEGPU_EMBREE) {
146 if ((bvh_layout_mask_all & BVH_LAYOUT_HIPRT_EMBREE) == BVH_LAYOUT_HIPRT_EMBREE) {
150 return bvh_layout_mask;
194 geom_bvhs.reserve(bvh->
geometry.size());
196 geom_bvhs.push_back(
static_cast<BVHMulti *
>(geom->
bvh));
203 for (
size_t k = 0; k < bvh->
geometry.size(); ++k) {
204 bvh->
geometry[k]->bvh = geom_bvhs[k]->sub_bvhs[i];
254 for (
size_t k = 0; k < bvh->
geometry.size(); ++k) {
255 bvh->
geometry[k]->bvh = geom_bvhs[k];
266 return devices.back().device->get_cpu_osl_memory();
272 if (sub.
device == sub_device) {
287 if (island_sub != owner_sub && island_sub->
ptr_map.find(key) != island_sub->
ptr_map.end())
289 owner_sub = island_sub;
298 assert(!island.empty());
302 foreach (
SubDevice *island_sub, island) {
303 if (key ? (island_sub->
ptr_map.find(key) != island_sub->
ptr_map.end()) :
306 owner_sub = island_sub;
356 foreach (
SubDevice *island_sub, island) {
357 if (island_sub != owner_sub) {
372 size_t i = 0, sub_h = h /
devices.size();
375 size_t sy = y + i * sub_h;
376 size_t sh = (i == (size_t)
devices.size() - 1) ? h - sub_h * i : sub_h;
428 foreach (
SubDevice *island_sub, island) {
429 if (island_sub != owner_sub) {
453 if (sub.
device == sub_device) {
475 return new MultiDevice(info, stats, profiler, headless);
void refit(btStridingMeshInterface *triangles, const btVector3 &aabbMin, const btVector3 &aabbMax)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
vector< Geometry * > geometry
static BVH * create(const BVHParams ¶ms, const vector< Geometry * > &geometry, const vector< Object * > &objects, Device *device)
vector< Object * > objects
vector< DeviceInfo > multi_devices
virtual const string & error_message()
virtual void const_copy_to(const char *name, void *host, size_t size)=0
virtual bool load_osl_kernels()
virtual void mem_zero(device_memory &mem)=0
virtual void mem_copy_from(device_memory &mem, size_t y, size_t w, size_t h, size_t elem)=0
virtual void build_bvh(BVH *bvh, Progress &progress, bool refit)
virtual bool load_kernels(uint)
virtual bool check_peer_access(Device *)
virtual void mem_free(device_memory &mem)=0
virtual void foreach_device(const function< void(Device *)> &callback)
virtual BVHLayoutMask get_bvh_layout_mask(uint kernel_features) const =0
virtual void mem_copy_to(device_memory &mem)=0
virtual void mem_alloc(device_memory &mem)=0
static Device * create(const DeviceInfo &info, Stats &stats, Profiler &profiler, bool headless)
SubDevice * find_suitable_mem_device(device_ptr key, const vector< SubDevice * > &island)
list< SubDevice > devices
bool is_resident(device_ptr key, Device *sub_device) override
bool load_osl_kernels() override
const string & error_message() override
int device_number(Device *sub_device) override
void mem_copy_to(device_memory &mem) override
void mem_free(device_memory &mem) override
void const_copy_to(const char *name, void *host, size_t size) override
vector< vector< SubDevice * > > peer_islands
void mem_zero(device_memory &mem) override
void build_bvh(BVH *bvh, Progress &progress, bool refit) override
MultiDevice(const DeviceInfo &info, Stats &stats, Profiler &profiler, bool headless)
virtual void * get_cpu_osl_memory() override
virtual BVHLayoutMask get_bvh_layout_mask(uint kernel_features) const override
void mem_copy_from(device_memory &mem, size_t y, size_t w, size_t h, size_t elem) override
void mem_alloc(device_memory &mem) override
bool load_kernels(const uint kernel_features) override
SubDevice * find_matching_mem_device(device_ptr key, SubDevice &sub)
virtual void foreach_device(const function< void(Device *)> &callback) override
device_ptr find_matching_mem(device_ptr key, SubDevice &sub)
void mem_free(size_t size)
void mem_alloc(size_t size)
device_ptr device_pointer
DEGForeachIDComponentCallback callback
#define CCL_NAMESPACE_END
Device * device_multi_create(const DeviceInfo &info, Stats &stats, Profiler &profiler, bool headless)
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
@ BVH_LAYOUT_MULTI_HIPRT_EMBREE
@ BVH_LAYOUT_MULTI_EMBREEGPU
@ BVH_LAYOUT_MULTI_METAL_EMBREE
@ BVH_LAYOUT_MULTI_EMBREEGPU_EMBREE
@ BVH_LAYOUT_MULTI_OPTIX_EMBREE
map< device_ptr, device_ptr > ptr_map