src/video/fbcon/SDL_fbvideo.h
changeset 106 63ec24e0575f
parent 0 74212992fb08
child 252 e8157fcb3114
equal deleted inserted replaced
105:2136ea8953f9 106:63ec24e0575f
    41 
    41 
    42 
    42 
    43 /* This is the structure we use to keep track of video memory */
    43 /* This is the structure we use to keep track of video memory */
    44 typedef struct vidmem_bucket {
    44 typedef struct vidmem_bucket {
    45 	struct vidmem_bucket *prev;
    45 	struct vidmem_bucket *prev;
    46 	unsigned int used;
    46 	int used;
       
    47 	int dirty;
    47 	char *base;
    48 	char *base;
    48 	unsigned int size;
    49 	unsigned int size;
    49 	struct vidmem_bucket *next;
    50 	struct vidmem_bucket *next;
    50 } vidmem_bucket;
    51 } vidmem_bucket;
    51 
       
    52 /* Information about the location of the surface in hardware memory */
       
    53 struct private_hwdata {
       
    54 	int x;
       
    55 	int y;
       
    56 };
       
    57 
    52 
    58 /* Private display data */
    53 /* Private display data */
    59 struct SDL_PrivateVideoData {
    54 struct SDL_PrivateVideoData {
    60 	int console_fd;
    55 	int console_fd;
    61 	struct fb_var_screeninfo cache_vinfo;
    56 	struct fb_var_screeninfo cache_vinfo;
    88 	int surfaces_memleft;
    83 	int surfaces_memleft;
    89 
    84 
    90 	SDL_mutex *hw_lock;
    85 	SDL_mutex *hw_lock;
    91 
    86 
    92 	void (*wait_vbl)(_THIS);
    87 	void (*wait_vbl)(_THIS);
       
    88 	void (*wait_idle)(_THIS);
    93 };
    89 };
    94 /* Old variable names */
    90 /* Old variable names */
    95 #define console_fd		(this->hidden->console_fd)
    91 #define console_fd		(this->hidden->console_fd)
    96 #define current_vt		(this->hidden->current_vt)
    92 #define current_vt		(this->hidden->current_vt)
    97 #define saved_vt		(this->hidden->saved_vt)
    93 #define saved_vt		(this->hidden->saved_vt)
   115 #define surfaces		(this->hidden->surfaces)
   111 #define surfaces		(this->hidden->surfaces)
   116 #define surfaces_memtotal	(this->hidden->surfaces_memtotal)
   112 #define surfaces_memtotal	(this->hidden->surfaces_memtotal)
   117 #define surfaces_memleft	(this->hidden->surfaces_memleft)
   113 #define surfaces_memleft	(this->hidden->surfaces_memleft)
   118 #define hw_lock			(this->hidden->hw_lock)
   114 #define hw_lock			(this->hidden->hw_lock)
   119 #define wait_vbl		(this->hidden->wait_vbl)
   115 #define wait_vbl		(this->hidden->wait_vbl)
       
   116 #define wait_idle		(this->hidden->wait_idle)
   120 
   117 
   121 /* Accelerator types that are supported by the driver, but are not
   118 /* Accelerator types that are supported by the driver, but are not
   122    necessarily in the kernel headers on the system we compile on.
   119    necessarily in the kernel headers on the system we compile on.
   123 */
   120 */
   124 #ifndef FB_ACCEL_MATROX_MGAG400
   121 #ifndef FB_ACCEL_MATROX_MGAG400
   130 
   127 
   131 /* These functions are defined in SDL_fbvideo.c */
   128 /* These functions are defined in SDL_fbvideo.c */
   132 extern void FB_SavePaletteTo(_THIS, int palette_len, __u16 *area);
   129 extern void FB_SavePaletteTo(_THIS, int palette_len, __u16 *area);
   133 extern void FB_RestorePaletteFrom(_THIS, int palette_len, __u16 *area);
   130 extern void FB_RestorePaletteFrom(_THIS, int palette_len, __u16 *area);
   134 
   131 
       
   132 /* These are utility functions for working with video surfaces */
       
   133 
       
   134 static __inline__ void FB_AddBusySurface(SDL_Surface *surface)
       
   135 {
       
   136 	((vidmem_bucket *)surface->hwdata)->dirty = 1;
       
   137 }
       
   138 
       
   139 static __inline__ int FB_IsSurfaceBusy(SDL_Surface *surface)
       
   140 {
       
   141 	return ((vidmem_bucket *)surface->hwdata)->dirty;
       
   142 }
       
   143 
       
   144 static __inline__ void FB_WaitBusySurfaces(_THIS)
       
   145 {
       
   146 	vidmem_bucket *bucket;
       
   147 
       
   148 	/* Wait for graphic operations to complete */
       
   149 	wait_idle(this);
       
   150 
       
   151 	/* Clear all surface dirty bits */
       
   152 	for ( bucket=&surfaces; bucket; bucket=bucket->next ) {
       
   153 		bucket->dirty = 0;
       
   154 	}
       
   155 }
       
   156 
       
   157 static __inline__ void FB_dst_to_xy(_THIS, SDL_Surface *dst, int *x, int *y)
       
   158 {
       
   159 	*x = (long)((char *)dst->pixels - mapped_mem)%this->screen->pitch;
       
   160 	*y = (long)((char *)dst->pixels - mapped_mem)/this->screen->pitch;
       
   161 	if ( dst == this->screen ) {
       
   162 		*x += this->offset_x;
       
   163 		*y += this->offset_y;
       
   164 	}
       
   165 }
       
   166 
   135 #endif /* _SDL_fbvideo_h */
   167 #endif /* _SDL_fbvideo_h */