mirror of
https://github.com/blender/blender
synced 2026-10-25 03:07:01 +03:00
Unlike OpenGL and Metal, this handle is not shared, but rather Cycles has to take ownership of it. This required a fair amount of refactoring to ensure the handle is closed, ownership is properly transferred, and the handle is recreated once when the pixel buffer is modified.
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 */
|
|
|
|
#ifdef WITH_HIP
|
|
|
|
# include "device/graphics_interop.h"
|
|
# include "session/display_driver.h"
|
|
|
|
# ifdef WITH_HIP_DYNLOAD
|
|
# include "hipew.h"
|
|
# endif
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
class HIPDevice;
|
|
class HIPDeviceQueue;
|
|
|
|
class HIPDeviceGraphicsInterop : public DeviceGraphicsInterop {
|
|
public:
|
|
explicit HIPDeviceGraphicsInterop(HIPDeviceQueue *queue);
|
|
|
|
HIPDeviceGraphicsInterop(const HIPDeviceGraphicsInterop &other) = delete;
|
|
HIPDeviceGraphicsInterop(HIPDeviceGraphicsInterop &&other) noexcept = delete;
|
|
|
|
~HIPDeviceGraphicsInterop() override;
|
|
|
|
HIPDeviceGraphicsInterop &operator=(const HIPDeviceGraphicsInterop &other) = delete;
|
|
HIPDeviceGraphicsInterop &operator=(HIPDeviceGraphicsInterop &&other) = delete;
|
|
|
|
void set_buffer(GraphicsInteropBuffer &interop_buffer) override;
|
|
|
|
device_ptr map() override;
|
|
void unmap() override;
|
|
|
|
protected:
|
|
HIPDeviceQueue *queue_ = nullptr;
|
|
HIPDevice *device_ = nullptr;
|
|
|
|
/* Size of the buffer in bytes. */
|
|
size_t buffer_size_ = 0;
|
|
|
|
/* The destination was requested to be cleared. */
|
|
bool need_zero_ = false;
|
|
|
|
hipGraphicsResource hip_graphics_resource_ = nullptr;
|
|
hipDeviceptr_t hip_external_memory_ptr_ = 0;
|
|
|
|
void free();
|
|
};
|
|
|
|
CCL_NAMESPACE_END
|
|
|
|
#endif
|