1
2#ifndef _WINSYS_HANDLE_H_
3#define _WINSYS_HANDLE_H_
4
5#ifdef _WIN32
6#include <windows.h>
7#endif
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13#define WINSYS_HANDLE_TYPE_SHARED 0
14#define WINSYS_HANDLE_TYPE_KMS    1
15#define WINSYS_HANDLE_TYPE_FD     2
16/* Win32 handles serve the same purpose as FD, just on Windows, so alias the value */
17#define WINSYS_HANDLE_TYPE_WIN32_HANDLE WINSYS_HANDLE_TYPE_FD
18#define WINSYS_HANDLE_TYPE_SHMID   3
19#define WINSYS_HANDLE_TYPE_D3D12_RES 4
20#define WINSYS_HANDLE_TYPE_WIN32_NAME 5
21
22/**
23 * For use with pipe_screen::{resource_from_handle|resource_get_handle}.
24 */
25struct winsys_handle
26{
27   /**
28    * Input for resource_from_handle, valid values are
29    * WINSYS_HANDLE_TYPE_SHARED or WINSYS_HANDLE_TYPE_FD.
30    * Input to resource_get_handle,
31    * to select handle for kms, flink, or prime.
32    */
33   unsigned type;
34   /**
35    * Input for resource_get_handle, allows to export the offset
36    * of a specific layer of an array texture.
37    */
38   unsigned layer;
39   /**
40    * Input for resource_get_handle, allows to export of a specific plane of a
41    * texture.
42    */
43   unsigned plane;
44   /**
45    * Input to resource_from_handle.
46    * Output for resource_get_handle.
47    */
48#ifdef _WIN32
49   HANDLE handle;
50#else
51   unsigned handle;
52#endif
53   /**
54    * Input to resource_from_handle.
55    * Output for resource_get_handle.
56    */
57   unsigned stride;
58   /**
59    * Input to resource_from_handle.
60    * Output for resource_get_handle.
61    */
62   unsigned offset;
63
64   /**
65    * Input to resource_from_handle.
66    * Output from resource_get_handle.
67    */
68   uint64_t format;
69
70   /**
71    * Input to resource_from_handle.
72    * Output from resource_get_handle.
73    */
74   uint64_t modifier;
75
76   union
77   {
78      /**
79       * Input to resource_from_handle.
80       * Output for resource_get_handle.
81       */
82      void *com_obj;
83
84      /**
85       * String name for an object.
86       * Input to resource_from_handle.
87       */
88      const void *name;
89   };
90
91   /**
92    * Total size of the object.
93    * Output for resource_get_handle.
94    */
95   uint64_t size;
96};
97
98#ifdef __cplusplus
99}
100#endif
101
102#endif /* _WINSYS_HANDLE_H_ */
103