1 #ifndef XORG_EXA_H 2 #define XORG_EXA_H 3 4 #include "xorg_tracker.h" 5 6 #include "pipe/p_state.h" 7 8 struct cso_context; 9 struct xorg_shaders; 10 11 /* src + mask + dst */ 12 #define MAX_EXA_SAMPLERS 3 13 14 struct exa_context 15 { 16 ExaDriverPtr pExa; 17 struct pipe_context *pipe; 18 struct pipe_screen *scrn; 19 struct xorg_renderer *renderer; 20 21 struct pipe_sampler_view *bound_sampler_views[MAX_EXA_SAMPLERS]; 22 int num_bound_samplers; 23 24 float solid_color[4]; 25 boolean has_solid_color; 26 27 boolean accel; 28 29 /* float[9] projective matrix bound to pictures */ 30 struct { 31 float src[9]; 32 float mask[9]; 33 boolean has_src; 34 boolean has_mask; 35 } transform; 36 37 struct { 38 struct exa_pixmap_priv *src; 39 struct exa_pixmap_priv *dst; 40 PixmapPtr tmp_pix; 41 } copy; 42 }; 43 44 struct exa_pixmap_priv 45 { 46 int width, height; 47 48 int flags; 49 int tex_flags; 50 51 int picture_format; 52 53 struct pipe_resource *tex; 54 struct pipe_resource *depth_stencil_tex; 55 56 struct pipe_transfer *map_transfer; 57 unsigned map_count; 58 }; 59 60 #define XORG_FALLBACK(s, arg...) \ 61 do { \ 62 if (ms->debug_fallback) { \ 63 xf86DrvMsg(pScrn->scrnIndex, X_INFO, \ 64 "%s fallback " s "\n", __FUNCTION__, ##arg); \ 65 } \ 66 return FALSE; \ 67 } while(0) 68 69 struct pipe_surface * 70 xorg_gpu_surface(struct pipe_context *pipe, struct exa_pixmap_priv *priv); 71 72 void xorg_exa_flush(struct exa_context *exa, 73 struct pipe_fence_handle **fence); 74 void xorg_exa_finish(struct exa_context *exa); 75 76 #endif 77