Skip to content

Commit

Permalink
Add PRIME3 defination
Browse files Browse the repository at this point in the history
Add PRIME3 memory type defination to support create surface with extra flags.
  • Loading branch information
lixin5x committed Dec 5, 2023
1 parent 633746e commit da27ce9
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions va/va_drmcommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#define VA_DRM_COMMON_H

#include <stdint.h>
#include <va/va.h>


/** \brief DRM authentication type. */
Expand Down Expand Up @@ -86,6 +87,11 @@ struct drm_state {
* Used with VADRMPRIMESurfaceDescriptor.
*/
#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000
/** \brief DRM PRIME3 memory type
*
* Used with VADRMPRIME3SurfaceDescriptor.
*/
#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_3 0x80000000

/**
* \brief External buffer descriptor for a DRM PRIME surface.
Expand Down Expand Up @@ -158,6 +164,55 @@ typedef struct _VADRMPRIMESurfaceDescriptor {
} layers[4];
} VADRMPRIMESurfaceDescriptor;

/**
* \brief External buffer descriptor for a DRM PRIME surface with flags
*
* This structure is an extention for VADRMPRIMESurfaceDescriptor,
* it has the same behavior as if used with VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2.
*
* The field "flags" is added, see "Surface external buffer descriptor flags".
* To use this structure, use VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_3 instead.
*/
typedef struct _VADRMPRIME3SurfaceDescriptor {
/** 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];
/** \brief flags. See "Surface external buffer descriptor flags". */
uint32_t flags;
/** reserved bytes, must be zero */
uint32_t reserved[VA_PADDING_MEDIUM + 1];
} VADRMPRIME3SurfaceDescriptor;
/**
* \brief List of DRM format modifiers.
*
Expand Down

0 comments on commit da27ce9

Please sign in to comment.