xorg_exa.h revision 7ea550621e25f9b2f344b2ed60551ceec91b3fcf
1#ifndef XORG_EXA_H
2#define XORG_EXA_H
3
4#include "xorg_tracker.h"
5
6#include "pipe/p_state.h"
7
8struct cso_context;
9struct xorg_shaders;
10
11/* src + mask + dst */
12#define MAX_EXA_SAMPLERS 3
13
14struct 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      boolean use_surface_copy;
39
40      struct exa_pixmap_priv *src;
41      struct exa_pixmap_priv *dst;
42
43      struct pipe_surface *dst_surface;
44
45      struct pipe_resource *src_texture;
46   } copy;
47};
48
49struct exa_pixmap_priv
50{
51   int width, height;
52
53   int flags;
54   int tex_flags;
55
56   int picture_format;
57
58   struct pipe_resource *tex;
59   struct pipe_resource *depth_stencil_tex;
60
61   struct pipe_transfer *map_transfer;
62   unsigned map_count;
63};
64
65#define XORG_FALLBACK(s, arg...)                              \
66do {                                                          \
67   if (ms->debug_fallback) {                                  \
68      xf86DrvMsg(pScrn->scrnIndex, X_INFO,                    \
69                 "%s fallback " s "\n", __FUNCTION__, ##arg); \
70   }                                                          \
71   return FALSE;                                              \
72} while(0)
73
74struct pipe_surface *
75xorg_gpu_surface(struct pipe_context *pipe, struct exa_pixmap_priv *priv);
76
77void xorg_exa_flush(struct exa_context *exa,
78                    struct pipe_fence_handle **fence);
79void xorg_exa_finish(struct exa_context *exa);
80
81#endif
82