1 /* 2 * Mesa 3-D graphics library 3 * Version: 7.8 4 * 5 * Copyright (C) 2010 Chia-I Wu <olv (at) 0xlab.org> 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included 15 * in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 * DEALINGS IN THE SOFTWARE. 24 */ 25 26 #ifndef _NATIVE_DRM_H_ 27 #define _NATIVE_DRM_H_ 28 29 #include <xf86drm.h> 30 #include <xf86drmMode.h> 31 32 #include "pipe/p_compiler.h" 33 #include "util/u_format.h" 34 #include "pipe/p_state.h" 35 #include "state_tracker/drm_driver.h" 36 37 #include "common/native.h" 38 #include "common/native_helper.h" 39 40 #ifdef HAVE_WAYLAND_BACKEND 41 #include "common/native_wayland_drm_bufmgr_helper.h" 42 #endif 43 44 #include "gbm_gallium_drmint.h" 45 46 struct drm_config; 47 struct drm_crtc; 48 struct drm_connector; 49 struct drm_mode; 50 struct drm_surface; 51 52 struct drm_display { 53 struct native_display base; 54 55 const struct native_event_handler *event_handler; 56 57 struct gbm_gallium_drm_device *gbmdrm; 58 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 77 struct drm_config { 78 struct native_config base; 79 }; 80 81 struct drm_crtc { 82 drmModeCrtcPtr crtc; 83 uint32_t connectors[32]; 84 int num_connectors; 85 }; 86 87 struct drm_framebuffer { 88 struct pipe_resource *texture; 89 boolean is_passive; 90 91 uint32_t buffer_id; 92 }; 93 94 struct 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 111 struct 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 120 struct drm_mode { 121 struct native_mode base; 122 drmModeModeInfo mode; 123 }; 124 125 static INLINE struct drm_display * 126 drm_display(const struct native_display *ndpy) 127 { 128 return (struct drm_display *) ndpy; 129 } 130 131 static INLINE struct drm_config * 132 drm_config(const struct native_config *nconf) 133 { 134 return (struct drm_config *) nconf; 135 } 136 137 static INLINE struct drm_surface * 138 drm_surface(const struct native_surface *nsurf) 139 { 140 return (struct drm_surface *) nsurf; 141 } 142 143 static INLINE struct drm_connector * 144 drm_connector(const struct native_connector *nconn) 145 { 146 return (struct drm_connector *) nconn; 147 } 148 149 static INLINE struct drm_mode * 150 drm_mode(const struct native_mode *nmode) 151 { 152 return (struct drm_mode *) nmode; 153 } 154 155 boolean 156 drm_display_init_modeset(struct native_display *ndpy); 157 158 void 159 drm_display_fini_modeset(struct native_display *ndpy); 160 161 struct native_surface * 162 drm_display_create_surface_from_resource(struct native_display *ndpy, 163 struct pipe_resource *resource); 164 165 #endif /* _NATIVE_DRM_H_ */ 166