aboutsummaryrefslogtreecommitdiff
path: root/include/vaapi.h
diff options
context:
space:
mode:
authorSteam Deck User <deck@arch.steamdeck>2023-03-16 13:36:19 +0100
committerdec05eba <dec05eba@protonmail.com>2023-03-17 11:44:51 +0100
commit8cbdb596ebf79587a432ed40583630b6cd39ed88 (patch)
tree82c60558aaaa7a1fc1eb9ffc388f1dd84a9529d2 /include/vaapi.h
parent689419a78238626aba887e974cbfcf5dff99de81 (diff)
vaapi wip
Diffstat (limited to 'include/vaapi.h')
-rw-r--r--include/vaapi.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/include/vaapi.h b/include/vaapi.h
new file mode 100644
index 0000000..7ec73b2
--- /dev/null
+++ b/include/vaapi.h
@@ -0,0 +1,63 @@
+#ifndef GSR_VAAPI_H
+#define GSR_VAAPI_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef void* VADisplay;
+typedef int VAStatus;
+typedef unsigned int VAGenericID;
+typedef VAGenericID VASurfaceID;
+
+typedef struct {
+ /** Pixel format fourcc of the whole surface (VA_FOURCC_*). */
+ uint32_t fourcc;
+ /** Width of the surface in pixels. */
+ uint32_t width;
+ /** Height of the surface in pixels. */
+ uint32_t height;
+ /** Number of distinct DRM objects making up the surface. */
+ uint32_t num_objects;
+ /** Description of each object. */
+ struct {
+ /** DRM PRIME file descriptor for this object. */
+ int fd;
+ /** Total size of this object (may include regions which are
+ * not part of the surface). */
+ uint32_t size;
+ /** Format modifier applied to this object. */
+ uint64_t drm_format_modifier;
+ } objects[4];
+ /** Number of layers making up the surface. */
+ uint32_t num_layers;
+ /** Description of each layer in the surface. */
+ struct {
+ /** DRM format fourcc of this layer (DRM_FOURCC_*). */
+ uint32_t drm_format;
+ /** Number of planes in this layer. */
+ uint32_t num_planes;
+ /** Index in the objects array of the object containing each
+ * plane. */
+ uint32_t object_index[4];
+ /** Offset within the object of each plane. */
+ uint32_t offset[4];
+ /** Pitch of each plane. */
+ uint32_t pitch[4];
+ } layers[4];
+} VADRMPRIMESurfaceDescriptor;
+
+#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000
+#define VA_EXPORT_SURFACE_READ_WRITE 0x0003
+#define VA_EXPORT_SURFACE_SEPARATE_LAYERS 0x0004
+
+typedef struct {
+ void *library;
+
+ VAStatus (*vaExportSurfaceHandle)(VADisplay dpy, VASurfaceID surface_id, uint32_t mem_type, uint32_t flags, void *descriptor);
+ VAStatus (*vaSyncSurface)(VADisplay dpy, VASurfaceID render_target);
+} gsr_vaapi;
+
+bool gsr_vaapi_load(gsr_vaapi *self);
+void gsr_vaapi_unload(gsr_vaapi *self);
+
+#endif /* GSR_VAAPI_H */