initial commit
[ubuntu-omap:rsalvetis-xf86-video-omap.git] / src / omap_exa_null.c
1 /* -*- mode: C; c-file-style: "k&r"; tab-width 4; indent-tabs-mode: t; -*- */
2
3 /*
4  * Copyright © 2011 Texas Instruments, Inc
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice (including the next
14  * paragraph) shall be included in all copies or substantial portions of the
15  * Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24  *
25  * Authors:
26  *    Rob Clark <rob@ti.com>
27  */
28
29 #ifdef HAVE_CONFIG_H
30 #include "config.h"
31 #endif
32
33 #include "omap_driver.h"
34 #include "omap_exa_common.h"
35
36 #include "exa.h"
37
38 /* This file has a trivial EXA implementation which accelerates nothing.  It
39  * is used as the fall-back in case the EXA implementation for the current
40  * chipset is not available.  (For example, on chipsets which used the closed
41  * source IMG PowerVR EXA implementation, if the closed-source submodule is
42  * not installed.
43  */
44
45 typedef struct {
46         OMAPEXARec base;
47         ExaDriverPtr exa;
48         /* add any other driver private data here.. */
49 } OMAPNullEXARec, *OMAPNullEXAPtr;
50
51
52 static Bool
53 PrepareSolidFail(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fill_colour)
54 {
55         return FALSE;
56 }
57
58 static Bool
59 PrepareCopyFail(PixmapPtr pSrc, PixmapPtr pDst, int xdir, int ydir,
60                 int alu, Pixel planemask)
61 {
62         return FALSE;
63 }
64
65 static Bool
66 CheckCompositeFail(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
67                 PicturePtr pDstPicture)
68 {
69         return FALSE;
70 }
71
72 static Bool
73 PrepareCompositeFail(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
74                 PicturePtr pDstPicture, PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
75 {
76         return FALSE;
77 }
78
79 static Bool
80 CloseScreen(int scrnIndex, ScreenPtr pScreen)
81 {
82 #if 0 // TODO need to change CloseScreen/FreeScreen ..
83         exaDriverFini(pScreen);
84         free(pNv->EXADriverPtr);
85 #endif
86         return TRUE;
87 }
88
89 static void
90 FreeScreen(int scrnIndex, int flags)
91 {
92 }
93
94
95 OMAPEXAPtr
96 InitNullEXA(ScreenPtr pScreen, ScrnInfoPtr pScrn)
97 {
98         OMAPNullEXAPtr null_exa = calloc(sizeof (*null_exa), 1);
99         OMAPEXAPtr omap_exa = (OMAPEXAPtr)null_exa;
100         ExaDriverPtr exa;
101
102         INFO_MSG("Soft EXA mode");
103
104         exa = exaDriverAlloc();
105         if (!exa) {
106                 goto fail;
107         }
108
109         null_exa->exa = exa;
110
111         exa->exa_major = EXA_VERSION_MAJOR;
112         exa->exa_minor = EXA_VERSION_MINOR;
113
114         exa->pixmapOffsetAlign = 0;
115         exa->pixmapPitchAlign = 32 * 4; // see OMAPCalculateStride()
116         exa->flags = EXA_OFFSCREEN_PIXMAPS |
117                         EXA_HANDLES_PIXMAPS | EXA_SUPPORTS_PREPARE_AUX;
118         exa->maxX = 4096;
119         exa->maxY = 4096;
120
121         /* Required EXA functions: */
122         exa->WaitMarker = OMAPWaitMarker;
123         exa->CreatePixmap2 = OMAPCreatePixmap;
124         exa->DestroyPixmap = OMAPDestroyPixmap;
125         exa->ModifyPixmapHeader = OMAPModifyPixmapHeader;
126
127         exa->PrepareAccess = OMAPPrepareAccess;
128         exa->FinishAccess = OMAPFinishAccess;
129         exa->PixmapIsOffscreen = OMAPPixmapIsOffscreen;
130
131         // Always fallback for software operations
132         exa->PrepareCopy = PrepareCopyFail;
133         exa->PrepareSolid = PrepareSolidFail;
134         exa->CheckComposite = CheckCompositeFail;
135         exa->PrepareComposite = PrepareCompositeFail;
136
137         if (! exaDriverInit(pScreen, exa)) {
138                 ERROR_MSG("exaDriverInit failed");
139                 goto fail;
140         }
141
142         omap_exa->CloseScreen = CloseScreen;
143         omap_exa->FreeScreen = FreeScreen;
144
145         return omap_exa;
146
147 fail:
148         if (null_exa) {
149                 free(null_exa);
150         }
151         return NULL;
152 }
153