native_drm.h revision 32f4cf38085e4056b8e4a9fc78fea28897a1d05f
178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch/* 278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * Mesa 3-D graphics library 378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * Version: 7.8 478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * 578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * Copyright (C) 2010 Chia-I Wu <olv@0xlab.org> 678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * 778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * Permission is hereby granted, free of charge, to any person obtaining a 878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * copy of this software and associated documentation files (the "Software"), 978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * to deal in the Software without restriction, including without limitation 1078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * and/or sell copies of the Software, and to permit persons to whom the 1278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * Software is furnished to do so, subject to the following conditions: 1378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * 1478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * The above copyright notice and this permission notice shall be included 1578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * in all copies or substantial portions of the Software. 1678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * 1778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 2078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch * DEALINGS IN THE SOFTWARE. 2478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch */ 2578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 2678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#ifndef _NATIVE_DRM_H_ 2778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#define _NATIVE_DRM_H_ 2878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 2978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include <xf86drm.h> 3078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include <xf86drmMode.h> 3178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 3278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "pipe/p_compiler.h" 3378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "util/u_format.h" 3478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "pipe/p_state.h" 3578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "state_tracker/drm_driver.h" 3678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 3778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "common/native.h" 3878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "common/native_helper.h" 3978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 4078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#ifdef HAVE_WAYLAND_BACKEND 4178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "common/native_wayland_drm_bufmgr_helper.h" 4278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#endif 4378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 4478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "gbm_gallium_drmint.h" 4578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 4678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochstruct drm_config; 4778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochstruct drm_crtc; 4878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochstruct drm_connector; 4978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochstruct drm_mode; 5078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochstruct drm_surface; 5178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 5278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochstruct drm_display { 5378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch struct native_display base; 5478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 5578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch const struct native_event_handler *event_handler; 5678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 5778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch struct gbm_gallium_drm_device *gbmdrm; 5878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch int own_gbm; 59 int fd; 60 char *device_name; 61 struct drm_config *config; 62 63 /* for modesetting */ 64 drmModeResPtr resources; 65 struct drm_connector *connectors; 66 int num_connectors; 67 68 struct drm_surface **shown_surfaces; 69 /* save the original settings of the CRTCs */ 70 struct drm_crtc *saved_crtcs; 71 72#ifdef HAVE_WAYLAND_BACKEND 73 struct wl_drm *wl_server_drm; /* for EGL_WL_bind_wayland_display */ 74#endif 75}; 76 77struct drm_config { 78 struct native_config base; 79}; 80 81struct drm_crtc { 82 drmModeCrtcPtr crtc; 83 uint32_t connectors[32]; 84 int num_connectors; 85}; 86 87struct drm_framebuffer { 88 struct pipe_resource *texture; 89 boolean is_passive; 90 91 uint32_t buffer_id; 92}; 93 94struct drm_surface { 95 struct native_surface base; 96 struct drm_display *drmdpy; 97 98 struct resource_surface *rsurf; 99 enum pipe_format color_format; 100 int width, height; 101 102 unsigned int sequence_number; 103 struct drm_framebuffer front_fb, back_fb; 104 105 boolean is_shown; 106 struct drm_crtc current_crtc; 107 108 boolean have_pageflip; 109}; 110 111struct drm_connector { 112 struct native_connector base; 113 114 uint32_t connector_id; 115 drmModeConnectorPtr connector; 116 struct drm_mode *drm_modes; 117 int num_modes; 118}; 119 120struct drm_mode { 121 struct native_mode base; 122 drmModeModeInfo mode; 123}; 124 125static INLINE struct drm_display * 126drm_display(const struct native_display *ndpy) 127{ 128 return (struct drm_display *) ndpy; 129} 130 131static INLINE struct drm_config * 132drm_config(const struct native_config *nconf) 133{ 134 return (struct drm_config *) nconf; 135} 136 137static INLINE struct drm_surface * 138drm_surface(const struct native_surface *nsurf) 139{ 140 return (struct drm_surface *) nsurf; 141} 142 143static INLINE struct drm_connector * 144drm_connector(const struct native_connector *nconn) 145{ 146 return (struct drm_connector *) nconn; 147} 148 149static INLINE struct drm_mode * 150drm_mode(const struct native_mode *nmode) 151{ 152 return (struct drm_mode *) nmode; 153} 154 155boolean 156drm_display_init_modeset(struct native_display *ndpy); 157 158void 159drm_display_fini_modeset(struct native_display *ndpy); 160 161struct native_surface * 162drm_display_create_surface_from_resource(struct native_display *ndpy, 163 struct pipe_resource *resource); 164 165#endif /* _NATIVE_DRM_H_ */ 166