Blender V4.3
cpu/device_impl.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7/* So ImathMath is included before our kernel_cpu_compat. */
8#ifdef WITH_OSL
9/* So no context pollution happens from indirectly included windows.h */
10# include "util/windows.h"
11# include <OSL/oslexec.h>
12#endif
13
14#ifdef WITH_EMBREE
15# if EMBREE_MAJOR_VERSION >= 4
16# include <embree4/rtcore.h>
17# else
18# include <embree3/rtcore.h>
19# endif
20#endif
21
22#include "device/cpu/kernel.h"
23#include "device/device.h"
24#include "device/memory.h"
25
26// clang-format off
30
31#include "kernel/osl/globals.h"
32// clang-format on
33
34#include "util/guiding.h"
35#include "util/unique_ptr.h"
36
38
39class CPUDevice : public Device {
40 public:
42
45
46#ifdef WITH_OSL
47 OSLGlobals osl_globals;
48#endif
49#ifdef WITH_EMBREE
50 RTCScene embree_scene = NULL;
51 RTCDevice embree_device;
52#endif
53#ifdef WITH_PATH_GUIDING
54 mutable unique_ptr<openpgl::cpp::Device> guiding_device;
55#endif
56
57 CPUDevice(const DeviceInfo &info_, Stats &stats_, Profiler &profiler_, bool headless_);
58 ~CPUDevice();
59
60 virtual BVHLayoutMask get_bvh_layout_mask(uint /*kernel_features*/) const override;
61
62 /* Returns true if the texture info was copied to the device (meaning, some more
63 * re-initialization might be needed). */
64 bool load_texture_info();
65
66 virtual void mem_alloc(device_memory &mem) override;
67 virtual void mem_copy_to(device_memory &mem) override;
68 virtual void mem_copy_from(
69 device_memory &mem, size_t y, size_t w, size_t h, size_t elem) override;
70 virtual void mem_zero(device_memory &mem) override;
71 virtual void mem_free(device_memory &mem) override;
73 size_t offset,
74 size_t /*size*/) override;
75
76 virtual void const_copy_to(const char *name, void *host, size_t size) override;
77
78 void global_alloc(device_memory &mem);
79 void global_free(device_memory &mem);
80
81 void tex_alloc(device_texture &mem);
82 void tex_free(device_texture &mem);
83
84 void build_bvh(BVH *bvh, Progress &progress, bool refit) override;
85
86 void *get_guiding_device() const override;
87
89 vector<CPUKernelThreadGlobals> &kernel_thread_globals) override;
90 virtual void *get_cpu_osl_memory() override;
91
92 protected:
93 virtual bool load_kernels(uint /*kernel_features*/) override;
94};
95
unsigned int uint
void refit(btStridingMeshInterface *triangles, const btVector3 &aabbMin, const btVector3 &aabbMax)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
Definition bvh/bvh.h:66
virtual void mem_copy_from(device_memory &mem, size_t y, size_t w, size_t h, size_t elem) override
virtual bool load_kernels(uint) override
bool need_texture_info
CPUDevice(const DeviceInfo &info_, Stats &stats_, Profiler &profiler_, bool headless_)
bool load_texture_info()
virtual void mem_free(device_memory &mem) override
virtual void const_copy_to(const char *name, void *host, size_t size) override
virtual void mem_alloc(device_memory &mem) override
virtual void * get_cpu_osl_memory() override
void tex_alloc(device_texture &mem)
virtual BVHLayoutMask get_bvh_layout_mask(uint) const override
virtual device_ptr mem_alloc_sub_ptr(device_memory &mem, size_t offset, size_t) override
void tex_free(device_texture &mem)
void global_alloc(device_memory &mem)
device_vector< TextureInfo > texture_info
virtual void mem_zero(device_memory &mem) override
KernelGlobalsCPU kernel_globals
void * get_guiding_device() const override
virtual void get_cpu_kernel_thread_globals(vector< CPUKernelThreadGlobals > &kernel_thread_globals) override
void build_bvh(BVH *bvh, Progress &progress, bool refit) override
virtual void mem_copy_to(device_memory &mem) override
void global_free(device_memory &mem)
#define CCL_NAMESPACE_END
#define NULL
int BVHLayoutMask
Definition params.h:51
uint64_t device_ptr
Definition util/types.h:45