Since #118841 there are more cases where Cycles would check for the graphics interop support. This could lead to a crash when graphics interop functions are called without having active graphics context. This change makes it so there is no graphics interop calls when doing headless render. In order to achieve this the device creation is now aware of the headless mode. Pull Request: https://projects.blender.org/blender/blender/pulls/122844
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 */
|
|
|
|
#include "device/dummy/device.h"
|
|
|
|
#include "device/device.h"
|
|
#include "device/queue.h"
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
/* Dummy device for when creating an appropriate rendering device fails. */
|
|
|
|
class DummyDevice : public Device {
|
|
public:
|
|
DummyDevice(const DeviceInfo &info_, Stats &stats_, Profiler &profiler_, bool headless_)
|
|
: Device(info_, stats_, profiler_, headless_)
|
|
{
|
|
error_msg = info.error_msg;
|
|
}
|
|
|
|
~DummyDevice() {}
|
|
|
|
virtual BVHLayoutMask get_bvh_layout_mask(uint /*kernel_features*/) const override
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
virtual void mem_alloc(device_memory &) override {}
|
|
|
|
virtual void mem_copy_to(device_memory &) override {}
|
|
|
|
virtual void mem_copy_from(device_memory &, size_t, size_t, size_t, size_t) override {}
|
|
|
|
virtual void mem_zero(device_memory &) override {}
|
|
|
|
virtual void mem_free(device_memory &) override {}
|
|
|
|
virtual void const_copy_to(const char *, void *, size_t) override {}
|
|
};
|
|
|
|
Device *device_dummy_create(const DeviceInfo &info,
|
|
Stats &stats,
|
|
Profiler &profiler,
|
|
bool headless)
|
|
{
|
|
return new DummyDevice(info, stats, profiler, headless);
|
|
}
|
|
|
|
CCL_NAMESPACE_END
|