Home | History | Annotate | Download | only in xorg
      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