Zivid C++ API 2.18.0+1b44dbef-1
ComputeDevice.h
Go to the documentation of this file.
1/*******************************************************************************
2 * This file is part of the Zivid API
3 *
4 * Copyright 2015-2026 (C) Zivid AS
5 * All rights reserved.
6 *
7 * Zivid Software License, v1.0
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of Zivid AS nor the names of its contributors may be used
20 * to endorse or promote products derived from this software without specific
21 * prior written permission.
22 *
23 * 4. This software, with or without modification, must not be used with any
24 * other 3D camera than from Zivid AS.
25 *
26 * 5. Any software provided in binary form under this license must not be
27 * reverse engineered, decompiled, modified and/or disassembled.
28 *
29 * THIS SOFTWARE IS PROVIDED BY ZIVID AS "AS IS" AND ANY EXPRESS OR IMPLIED
30 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
31 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
32 * DISCLAIMED. IN NO EVENT SHALL ZIVID AS OR CONTRIBUTORS BE LIABLE FOR ANY
33 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
36 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Contact: Zivid Customer Success Team <customersuccess@zivid.com>
41 * Info: http://www.zivid.com
42 ******************************************************************************/
43
44#pragma once
45
48#include "Zivid/DeviceArray.h"
49
50#include <memory>
51#include <string>
52
53namespace Zivid
54{
55 class ComputeDeviceInterface;
56 class Application;
57
60 {
61 private:
62 std::shared_ptr<ComputeDeviceInterface> m_impl;
63
64 public:
67#ifndef NO_DOC
68 ZIVID_CORE_EXPORT explicit ComputeDevice(std::unique_ptr<ComputeDeviceInterface> &&impl);
69#endif
72
75
78
81
84
86 ZIVID_CORE_EXPORT std::string model() const;
87
89 ZIVID_CORE_EXPORT std::string vendor() const;
90
93
96
115
126
156 template<typename Format, typename = std::enable_if_t<Detail::SupportedDeviceArrayViewFormat<Format>::value>>
158 createDeviceArrayView(CUDADevicePointer cudaPointer, size_t width, size_t height, CUDAStreamPtr stream) const;
159
187 template<typename Format, typename = std::enable_if_t<Detail::SupportedDeviceArrayViewFormat<Format>::value>>
189 OpenCLMemPointer openCLBuffer,
190 size_t width,
191 size_t height,
192 OpenCLCommandQueuePtr queue) const;
193
207
210 ZIVID_CORE_EXPORT std::string toString() const;
211
212#ifndef NO_DOC
213 ZIVID_CORE_EXPORT ComputeDeviceInterface &getImpl();
214 ZIVID_CORE_EXPORT const ComputeDeviceInterface &getImpl() const;
215#endif
216 };
217
219 ZIVID_CORE_EXPORT std::ostream &operator<<(std::ostream &stream, const ComputeDevice &computeDevice);
220
223
225 ZIVID_CORE_EXPORT std::ostream &operator<<(std::ostream &stream, ComputeBackend backend);
226
227#ifndef NO_DOC
228# define ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(Format) \
229 extern template ZIVID_CORE_EXPORT DeviceArrayView<Format> \
230 ComputeDevice::createDeviceArrayView<Format, void>(CUDADevicePointer, size_t, size_t, CUDAStreamPtr) const; \
231 extern template ZIVID_CORE_EXPORT DeviceArrayView<Format> ComputeDevice::createDeviceArrayView<Format, void>( \
232 OpenCLMemPointer, size_t, size_t, OpenCLCommandQueuePtr) const
233
234 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorRGBA);
235 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorRGBA_SRGB);
236 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorBGRA);
237 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorBGRA_SRGB);
238 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorRGBAf);
239 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorRGB);
240 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorRGB_SRGB);
241 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorBGR);
242 ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW(ColorBGR_SRGB);
243# undef ZIVID_COMPUTE_DEVICE_EXTERN_CREATE_DEVICE_ARRAY_VIEW
244#endif
245} // namespace Zivid
#define ZIVID_CORE_EXPORT
Definition CoreExport.h:56
Manager class for Zivid.
Definition Application.h:100
Contains information about the compute device used by Zivid::Application.
Definition ComputeDevice.h:60
ZIVID_CORE_EXPORT ComputeDevice(const ComputeDevice &other)
Copy constructor.
ZIVID_CORE_EXPORT ComputeDevice & operator=(ComputeDevice &&other) noexcept
Move assignment operator.
ZIVID_CORE_EXPORT StreamOrQueue sdkStreamOrQueue() const
Get the SDK's internal stream/queue as a backend-agnostic StreamOrQueue.
ZIVID_CORE_EXPORT std::string model() const
Returns the model name of this compute device.
ZIVID_CORE_EXPORT ~ComputeDevice()
Destructor.
ZIVID_CORE_EXPORT ComputeDevice()
Constructor.
ZIVID_CORE_EXPORT ComputeDevice & operator=(const ComputeDevice &other)
Assignment operator.
ZIVID_CORE_EXPORT void * nativeContext() const
Get native context handle for interop with GPU APIs.
ZIVID_CORE_EXPORT ComputeBackend backend() const
Returns the backend type of this compute device.
ZIVID_CORE_EXPORT DeviceArrayView< Format > createDeviceArrayView(OpenCLMemPointer openCLBuffer, size_t width, size_t height, OpenCLCommandQueuePtr queue) const
Create a DeviceArrayView<Format> over an externally-owned OpenCL memory object.
ZIVID_CORE_EXPORT std::string cudaRuntimeLibraryName() const
Get the shared library name of the CUDA runtime that the SDK was built against.
ZIVID_CORE_EXPORT std::string toString() const
Get string representation of the compute device.
ZIVID_CORE_EXPORT ComputeDevice(ComputeDevice &&other) noexcept
Move constructor.
ZIVID_CORE_EXPORT std::string vendor() const
Returns the vendor of this compute device.
ZIVID_CORE_EXPORT void * nativeStreamHandle() const
Get native stream/queue handle for advanced GPU interop.
ZIVID_CORE_EXPORT DeviceArrayView< Format > createDeviceArrayView(CUDADevicePointer cudaPointer, size_t width, size_t height, CUDAStreamPtr stream) const
Create a DeviceArrayView<Format> over an externally-owned CUDA device pointer.
Non-owning view of a device buffer.
Definition DeviceArray.h:270
The main Zivid namespace. All Zivid code is found here.
Definition Application.h:85
ColorSRGB ColorRGBA_SRGB
Color with 8-bit red, green, blue and alpha channels in the sRGB color space.
Definition Color.h:93
ZIVID_CORE_EXPORT std::string toString(ComputeBackend backend)
Get string representation of backend type.
ComputeBackend
GPU compute backend type.
Definition ComputeWrappers.h:52
std::ostream & operator<<(std::ostream &stream, const Array1D< T > &array)
Serialize array information to a stream.
Definition Array1D.h:183
Wrapper for a CUDA device pointer.
Definition ComputeWrappers.h:127
Wrapper for user-provided CUDA stream for synchronization.
Definition ComputeWrappers.h:85
Color with 8-bit blue, green, red and alpha channels in the sRGB color space.
Definition Color.h:273
Color with 8-bit blue, green, red and alpha channels.
Definition Color.h:255
Color with 8-bit blue, green and red channels (no alpha) in the sRGB color space.
Definition Color.h:437
Color with 8-bit blue, green and red channels (no alpha)
Definition Color.h:422
Color with 8-bit red, green, blue and alpha channels.
Definition Color.h:189
Color with 32-bit red, green, blue and alpha channels.
Definition Color.h:285
Color with 8-bit red, green and blue channels (no alpha) in the sRGB color space.
Definition Color.h:361
Color with 8-bit red, green and blue channels (no alpha)
Definition Color.h:346
Wrapper for user-provided OpenCL command queue for synchronization.
Definition ComputeWrappers.h:75
Wrapper for an OpenCL memory object (cl_mem)
Definition ComputeWrappers.h:137
A user CUDA stream or OpenCL command queue, selected by which member is populated.
Definition ComputeWrappers.h:106