Home | History | Annotate | Download | only in xorg
      1 /*
      2  * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
      3  * All Rights Reserved.
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sub license, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial portions
     15  * of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     20  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
     21  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  *
     25  *
     26  * Author: Alan Hourihane <alanh (at) tungstengraphics.com>
     27  * Author: Jakob Bornecrantz <wallbraker (at) gmail.com>
     28  *
     29  */
     30 
     31 #ifndef _XORG_TRACKER_H_
     32 #define _XORG_TRACKER_H_
     33 
     34 #include <stddef.h>
     35 #include <stdint.h>
     36 #include <errno.h>
     37 #include <drm.h>
     38 #include <xf86drm.h>
     39 #include <xf86drmMode.h>
     40 #include <xorg-server.h>
     41 #include <xf86.h>
     42 #include "xf86Crtc.h"
     43 #include <exa.h>
     44 
     45 #ifdef DRM_MODE_FEATURE_DIRTYFB
     46 #include <damage.h>
     47 #endif
     48 
     49 /* Prevent symbol clash */
     50 #undef Absolute
     51 
     52 #include "compat-api.h"
     53 #include "pipe/p_screen.h"
     54 #include "util/u_inlines.h"
     55 #include "util/u_debug.h"
     56 
     57 #define DRV_ERROR(msg)	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, msg);
     58 
     59 struct kms_bo;
     60 struct kms_driver;
     61 struct exa_context;
     62 
     63 typedef struct
     64 {
     65     int lastInstance;
     66     int refCount;
     67     ScrnInfoPtr pScrn_1;
     68     ScrnInfoPtr pScrn_2;
     69 } EntRec, *EntPtr;
     70 
     71 #define XORG_NR_FENCES 3
     72 
     73 enum xorg_throttling_reason {
     74     THROTTLE_RENDER,
     75     THROTTLE_SWAP
     76 };
     77 
     78 typedef struct _CustomizerRec
     79 {
     80     Bool dirty_throttling;
     81     Bool swap_throttling;
     82     Bool no_3d;
     83     Bool unhidden_hw_cursor_update;
     84     Bool (*winsys_pre_init) (struct _CustomizerRec *cust, int fd);
     85     Bool (*winsys_screen_init)(struct _CustomizerRec *cust);
     86     Bool (*winsys_screen_close)(struct _CustomizerRec *cust);
     87     Bool (*winsys_enter_vt)(struct _CustomizerRec *cust);
     88     Bool (*winsys_leave_vt)(struct _CustomizerRec *cust);
     89     void (*winsys_context_throttle)(struct _CustomizerRec *cust,
     90 				    struct pipe_context *pipe,
     91 				    enum xorg_throttling_reason reason);
     92     Bool (*winsys_check_fb_size) (struct _CustomizerRec *cust,
     93 				  unsigned long pitch,
     94 				  unsigned long height);
     95 } CustomizerRec, *CustomizerPtr;
     96 
     97 typedef struct _modesettingRec
     98 {
     99     /* drm */
    100     int fd;
    101     unsigned fb_id;
    102 
    103     /* X */
    104     EntPtr entityPrivate;
    105 
    106     int Chipset;
    107     EntityInfoPtr pEnt;
    108     struct pci_device *PciInfo;
    109 
    110     Bool noAccel;
    111     Bool SWCursor;
    112     CursorPtr cursor;
    113     Bool swapThrottling;
    114     Bool dirtyThrottling;
    115     CloseScreenProcPtr CloseScreen;
    116     Bool no3D;
    117     Bool from_3D;
    118     Bool isMaster;
    119 
    120     /* Broken-out options. */
    121     OptionInfoPtr Options;
    122 
    123     void (*blockHandler)(BLOCKHANDLER_ARGS_DECL);
    124     struct pipe_fence_handle *fence[XORG_NR_FENCES];
    125 
    126     CreateScreenResourcesProcPtr createScreenResources;
    127 
    128     /* for frontbuffer backing store */
    129     Bool (*destroy_front_buffer)(ScrnInfoPtr pScrn);
    130     Bool (*create_front_buffer)(ScrnInfoPtr pScrn);
    131     Bool (*bind_front_buffer)(ScrnInfoPtr pScrn);
    132 
    133     /* kms */
    134     struct kms_driver *kms;
    135     struct kms_bo *root_bo;
    136     uint16_t lut_r[256], lut_g[256], lut_b[256];
    137 
    138     /* gallium */
    139     struct pipe_screen *screen;
    140     struct pipe_context *ctx;
    141     boolean d_depth_bits_last;
    142     boolean ds_depth_bits_last;
    143     struct pipe_resource *root_texture;
    144 
    145     /* exa */
    146     struct exa_context *exa;
    147     Bool noEvict;
    148     Bool accelerate_2d;
    149     Bool debug_fallback;
    150 
    151     CustomizerPtr cust;
    152 
    153 #ifdef DRM_MODE_FEATURE_DIRTYFB
    154     DamagePtr damage;
    155 #endif
    156 } modesettingRec, *modesettingPtr;
    157 
    158 #define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate))
    159 
    160 CustomizerPtr xorg_customizer(ScrnInfoPtr pScrn);
    161 
    162 Bool xorg_has_gallium(ScrnInfoPtr pScrn);
    163 
    164 void xorg_flush(ScreenPtr pScreen);
    165 /***********************************************************************
    166  * xorg_exa.c
    167  */
    168 struct pipe_resource *
    169 xorg_exa_get_texture(PixmapPtr pPixmap);
    170 
    171 int
    172 xorg_exa_set_displayed_usage(PixmapPtr pPixmap);
    173 
    174 int
    175 xorg_exa_set_shared_usage(PixmapPtr pPixmap);
    176 
    177 Bool
    178 xorg_exa_set_texture(PixmapPtr pPixmap, struct  pipe_resource *tex);
    179 
    180 struct pipe_resource *
    181 xorg_exa_create_root_texture(ScrnInfoPtr pScrn,
    182 			     int width, int height,
    183 			     int depth, int bpp);
    184 
    185 void *
    186 xorg_exa_init(ScrnInfoPtr pScrn, Bool accel);
    187 
    188 void
    189 xorg_exa_close(ScrnInfoPtr pScrn);
    190 
    191 
    192 /***********************************************************************
    193  * xorg_dri2.c
    194  */
    195 Bool
    196 xorg_dri2_init(ScreenPtr pScreen);
    197 
    198 void
    199 xorg_dri2_close(ScreenPtr pScreen);
    200 
    201 
    202 /***********************************************************************
    203  * xorg_crtc.c
    204  */
    205 void
    206 xorg_crtc_init(ScrnInfoPtr pScrn);
    207 
    208 void
    209 xorg_crtc_cursor_destroy(xf86CrtcPtr crtc);
    210 
    211 
    212 /***********************************************************************
    213  * xorg_output.c
    214  */
    215 void
    216 xorg_output_init(ScrnInfoPtr pScrn);
    217 
    218 unsigned
    219 xorg_output_get_id(xf86OutputPtr output);
    220 
    221 
    222 /***********************************************************************
    223  * xorg_xv.c
    224  */
    225 void
    226 xorg_xv_init(ScreenPtr pScreen);
    227 
    228 
    229 /***********************************************************************
    230  * xorg_xvmc.c
    231  */
    232 void
    233 xorg_xvmc_init(ScreenPtr pScreen, char *name);
    234 
    235 
    236 #endif /* _XORG_TRACKER_H_ */
    237