X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Finclude%2Fstate_tracker%2Fdrm_api.h;h=9780cf250b84681c14633360df6db9d0360101b3;hb=dff50ff592da7cb1d784fae794dd1647a5445bca;hp=cfed8d7b248a2cfaefc4cb6ea21ddf5fec776375;hpb=24a94d13c98f8b02a32213689acbd9665694318c;p=mesa.git diff --git a/src/gallium/include/state_tracker/drm_api.h b/src/gallium/include/state_tracker/drm_api.h index cfed8d7b248..9780cf250b8 100644 --- a/src/gallium/include/state_tracker/drm_api.h +++ b/src/gallium/include/state_tracker/drm_api.h @@ -2,44 +2,75 @@ #ifndef _DRM_API_H_ #define _DRM_API_H_ +#include "pipe/p_compiler.h" + struct pipe_screen; struct pipe_winsys; struct pipe_buffer; struct pipe_context; struct pipe_texture; -struct drm_api +enum drm_create_screen_mode { + DRM_CREATE_NORMAL = 0, + DRM_CREATE_DRI1, + DRM_CREATE_DRISW, + DRM_CREATE_DRIVER = 1024, + DRM_CREATE_MAX +}; + +#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 { /** - * Special buffer functions + * 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. */ - /*@{*/ - struct pipe_screen* (*create_screen)(int drmFB, int pciID); - struct pipe_context* (*create_context)(struct pipe_screen *screen); - /*@}*/ - + unsigned type; + /** + * Input to texture_from_handle. + * Output for texture_get_handle. + */ + unsigned handle; /** - * Special buffer functions + * Input to texture_from_handle. + * Output for texture_get_handle. */ - /*@{*/ - boolean (*buffer_from_texture)(struct pipe_texture *texture, - struct pipe_buffer **buffer, - unsigned *stride); - struct pipe_buffer* (*buffer_from_handle)(struct pipe_screen *screen, - const char *name, - unsigned handle); - boolean (*handle_from_buffer)(struct pipe_screen *screen, - struct pipe_buffer *buffer, - unsigned *handle); - boolean (*global_handle_from_buffer)(struct pipe_screen *screen, - struct pipe_buffer *buffer, - unsigned *handle); - /*@}*/ + unsigned stride; }; /** - * A driver needs to export this symbol + * Modes other than DRM_CREATE_NORMAL derive from this struct. */ -extern struct drm_api drm_api_hocks; +/*@{*/ +struct drm_create_screen_arg { + enum drm_create_screen_mode mode; +}; +/*@}*/ + +struct drm_api +{ + void (*destroy)(struct drm_api *api); + + const char *name; + + /** + * Kernel driver name, as accepted by drmOpenByName. + */ + const char *driver_name; + + /** + * Create a pipe srcreen. + */ + struct pipe_screen* (*create_screen)(struct drm_api *api, int drm_fd, + struct drm_create_screen_arg *arg); +}; + +extern struct drm_api * drm_api_create(void); #endif