16# include <OSL/oslexec.h>
20# include <embree4/rtcore.h>
23#include "device/cpu/kernel.h"
50 if (
info.cpu_threads == 0) {
55 embree_device = rtcNewDevice(
"verbose=0");
63 rtcReleaseDevice(embree_device);
75 return bvh_layout_mask;
93 assert(!
"mem_alloc not supported for textures.");
96 assert(!
"mem_alloc not supported for global memory.");
187 if (strcmp(
name,
"data") == 0) {
193 KernelData *
const data = (KernelData *)host;
194 data->device_bvh = embree_traversable;
262 BVHEmbree *
const bvh_embree =
static_cast<BVHEmbree *
>(bvh);
264 bvh_embree->refit(progress);
267 bvh_embree->build(progress, &
stats, embree_device);
271# if RTC_VERSION >= 40400
272 embree_traversable = rtcGetSceneTraversable(bvh_embree->scene);
274 embree_traversable = bvh_embree->scene;
287#if defined(WITH_PATH_GUIDING)
288 if (!guiding_device) {
290 guiding_device = make_unique<openpgl::cpp::Device>(PGL_DEVICE_TYPE_CPU_8);
293 guiding_device = make_unique<openpgl::cpp::Device>(PGL_DEVICE_TYPE_CPU_4);
296 return guiding_device.get();
308 kernel_thread_globals.clear();
310 for (
int i = 0;
i <
info.cpu_threads;
i++) {
CCL_NAMESPACE_BEGIN void * util_aligned_malloc(const size_t size, const int alignment)
void util_aligned_free(void *ptr, const size_t size)
BMesh const char void * data
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void refit(btStridingMeshInterface *triangles, const btVector3 &aabbMin, const btVector3 &aabbMax)
bool load_kernels(uint) override
CPUDevice(const DeviceInfo &info_, Stats &stats_, Profiler &profiler_, bool headless_)
device_ptr mem_alloc_sub_ptr(device_memory &mem, const size_t offset, size_t) override
void mem_free(device_memory &mem) override
void mem_alloc(device_memory &mem) override
void tex_alloc(device_texture &mem)
BVHLayoutMask get_bvh_layout_mask(uint) const override
void tex_free(device_texture &mem)
void const_copy_to(const char *name, void *host, const size_t size) override
void global_alloc(device_memory &mem)
void mem_copy_from(device_memory &mem, const size_t y, size_t w, const size_t h, size_t elem) override
void mem_move_to_host(device_memory &mem) override
device_vector< TextureInfo > texture_info
void mem_zero(device_memory &mem) override
KernelGlobalsCPU kernel_globals
void * get_guiding_device() const override
void build_bvh(BVH *bvh, Progress &progress, bool refit) override
OSLGlobals * get_cpu_osl_memory() override
void mem_copy_to(device_memory &mem) override
void get_cpu_kernel_thread_globals(vector< ThreadKernelGlobalsCPU > &kernel_thread_globals) override
void global_free(device_memory &mem)
const char * get_uarch_name() const
IntegratorInitFunction integrator_init_from_camera
Device(const DeviceInfo &info_, Stats &stats_, Profiler &profiler_, bool headless_)
static const CPUKernels & get_cpu_kernels()
friend class device_memory
virtual void build_bvh(BVH *bvh, Progress &progress, bool refit)
static int max_concurrency()
size_t memory_elements_size(const int elements)
device_ptr device_pointer
#define MIN_ALIGNMENT_DEVICE_MEMORY
#define CCL_NAMESPACE_END
#define assert(assertion)
CCL_NAMESPACE_BEGIN void kernel_const_copy(KernelGlobalsCPU *kg, const char *name, void *host, size_t)
void kernel_global_memory_copy(KernelGlobalsCPU *kg, const char *name, void *mem, const size_t size)
@ BVH_LAYOUT_MULTI_HIPRT_EMBREE
@ BVH_LAYOUT_MULTI_METAL_EMBREE
@ BVH_LAYOUT_MULTI_EMBREEGPU_EMBREE
@ BVH_LAYOUT_MULTI_OPTIX_EMBREE
string string_human_readable_size(size_t size)
string string_human_readable_number(size_t num)
static CCL_NAMESPACE_BEGIN int guiding_device_type()