xref: /third_party/mesa3d/src/tool/pps/pps_device.h (revision bf215546)
1/*
2 * Copyright © 2020 Collabora, Ltd.
3 * Author: Antonio Caggiano <antonio.caggiano@collabora.com>
4 * Author: Rohan Garg <rohan.garg@collabora.com>
5 * Author: Robert Beckett <bob.beckett@collabora.com>
6 *
7 * SPDX-License-Identifier: MIT
8 */
9
10#pragma once
11
12#include <optional>
13#include <string>
14#include <vector>
15
16namespace pps
17{
18/// @brief Helper class for a DRM device
19class DrmDevice
20{
21   public:
22   /// @return The number of DRM devices available in the system
23   static uint32_t device_count();
24
25   /// @return All DRM devices available in the system
26   static std::vector<DrmDevice> create_all();
27
28   /// @return A DRM device selected by its number in the system, nullopt otherwise
29   static std::optional<DrmDevice> create(int32_t gpu_num);
30
31   /// @brief Prefer calling create instead of default constructor
32   DrmDevice() = default;
33
34   // Allow move
35   DrmDevice(DrmDevice &&);
36   DrmDevice &operator=(DrmDevice &&);
37
38   // Forbid copy
39   DrmDevice(const DrmDevice &) = delete;
40   DrmDevice &operator=(const DrmDevice &) = delete;
41
42   ~DrmDevice();
43
44   /// @return Whether a device has a valid name
45   operator bool() const;
46
47   /// File descriptor of the device opened in read/write mode
48   int fd = -1;
49   int32_t gpu_num = -1;
50   std::string name = "";
51};
52
53} // namespace pps
54