0,0 → 1,115 |
|
#ifndef _DRM_DRIVER_H_ |
#define _DRM_DRIVER_H_ |
|
#include "pipe/p_compiler.h" |
|
struct pipe_screen; |
struct pipe_context; |
struct pipe_resource; |
|
#define DRM_API_HANDLE_TYPE_SHARED 0 |
#define DRM_API_HANDLE_TYPE_KMS 1 |
|
/** |
* For use with pipe_screen::{texture_from_handle|texture_get_handle}. |
*/ |
struct winsys_handle |
{ |
/** |
* Unused for texture_from_handle, always |
* DRM_API_HANDLE_TYPE_SHARED. Input to texture_get_handle, |
* use TEXTURE_USAGE to select handle for kms or ipc. |
*/ |
unsigned type; |
/** |
* Input to texture_from_handle. |
* Output for texture_get_handle. |
*/ |
unsigned handle; |
/** |
* Input to texture_from_handle. |
* Output for texture_get_handle. |
*/ |
unsigned stride; |
}; |
|
|
|
/** |
* Configuration queries. |
*/ |
enum drm_conf { |
/* How many frames to allow before throttling. Or -1 to indicate any number */ |
DRM_CONF_THROTTLE, /* DRM_CONF_INT. */ |
DRM_CONF_MAX |
}; |
|
/** |
* Type of configuration answer |
*/ |
enum drm_conf_type { |
DRM_CONF_INT, |
DRM_CONF_BOOL, |
DRM_CONF_FLOAT, |
DRM_CONF_POINTER |
}; |
|
/** |
* Return value from the configuration function. |
*/ |
struct drm_conf_ret { |
enum drm_conf_type type; |
union { |
int val_int; |
bool val_bool; |
float val_float; |
void *val_pointer; |
} val; |
}; |
|
struct drm_driver_descriptor |
{ |
/** |
* Identifying sufix/prefix of the binary, used by egl. |
*/ |
const char *name; |
|
/** |
* Kernel driver name, as accepted by drmOpenByName. |
*/ |
const char *driver_name; |
|
/** |
* Create a pipe srcreen. |
* |
* This function does any wrapping of the screen. |
* For example wrapping trace or rbug debugging drivers around it. |
*/ |
struct pipe_screen* (*create_screen)(int drm_fd); |
|
|
/** |
* Return a configuration value. |
* |
* If this function is NULL, or if it returns NULL |
* the state tracker- or state |
* tracker manager should provide a reasonable default value. |
*/ |
const struct drm_conf_ret *(*configuration) (enum drm_conf conf); |
}; |
|
extern struct drm_driver_descriptor driver_descriptor; |
|
/** |
* Instantiate a drm_driver_descriptor struct. |
*/ |
#define DRM_DRIVER_DESCRIPTOR(name_str, driver_name_str, func, conf) \ |
struct drm_driver_descriptor driver_descriptor = { \ |
.name = name_str, \ |
.driver_name = driver_name_str, \ |
.create_screen = func, \ |
.configuration = (conf), \ |
}; |
|
#endif |