2 Copyright (C) 2010, The AROS Development Team. All rights reserved.
6 #include "nouveau_intern.h"
8 #include <aros/debug.h>
11 #undef HiddBitMapAttrBase
12 #undef HiddPixFmtAttrBase
13 #define HiddBitMapAttrBase (SD(cl)->bitMapAttrBase)
14 #define HiddPixFmtAttrBase (SD(cl)->pixFmtAttrBase)
17 extern struct nouveau_bo
* hackfbo
;
18 extern struct nouveau_device
* hackdev
;
23 OOP_Object
* METHOD(NouveauBitMap
, Root
, New
)
25 o
= (OOP_Object
*)OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
29 IPTR width
, height
, depth
;
31 struct HIDDNouveauBitMapData
* bmdata
= OOP_INST_DATA(cl
, o
);
33 OOP_GetAttr(o
, aHidd_BitMap_Width
, &width
);
34 OOP_GetAttr(o
, aHidd_BitMap_Height
, &height
);
35 OOP_GetAttr(o
, aHidd_BitMap_PixFmt
, (APTR
)&pf
);
36 OOP_GetAttr(pf
, aHidd_PixFmt_Depth
, &depth
);
37 bmdata
->bo
= hackfbo
; /* assuming fbo is already mapped */
38 bmdata
->width
= width
;
39 bmdata
->height
= height
;
40 bmdata
->depth
= depth
;
42 bmdata
->bytesperpixel
= 1;
44 bmdata
->bytesperpixel
= 2;
46 bmdata
->bytesperpixel
= 4;
47 bmdata
->pitch
= (bmdata
->width
* bmdata
->bytesperpixel
+ 63) & ~63;
53 VOID
METHOD(NouveauBitMap
, Hidd_BitMap
, PutPixel
)
55 /* FIXME: take format (byte/word/long) into account */
56 struct HIDDNouveauBitMapData
* bmdata
= OOP_INST_DATA(cl
, o
);
57 IPTR addr
= (msg
->x
* bmdata
->bytesperpixel
) + (bmdata
->pitch
* msg
->y
);
58 addr
+= (IPTR
)bmdata
->bo
->map
;
60 writel(msg
->pixel
, (APTR
)addr
);
63 HIDDT_Pixel
METHOD(NouveauBitMap
, Hidd_BitMap
, GetPixel
)
65 /* FIXME: take format (byte/word/long) into account */
66 struct HIDDNouveauBitMapData
* bmdata
= OOP_INST_DATA(cl
, o
);
67 IPTR addr
= (msg
->x
* bmdata
->bytesperpixel
) + (bmdata
->pitch
* msg
->y
);
68 addr
+= (IPTR
)bmdata
->bo
->map
;
70 return readl((APTR
)addr
);
73 OOP_Object
* METHOD(NouveauOffBitMap
, Root
, New
)
75 o
= (OOP_Object
*)OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
79 IPTR width
, height
, depth
;
81 struct HIDDNouveauBitMapData
* bmdata
= OOP_INST_DATA(cl
, o
);
83 OOP_GetAttr(o
, aHidd_BitMap_Width
, &width
);
84 OOP_GetAttr(o
, aHidd_BitMap_Height
, &height
);
85 OOP_GetAttr(o
, aHidd_BitMap_PixFmt
, (APTR
)&pf
);
86 OOP_GetAttr(pf
, aHidd_PixFmt_Depth
, &depth
);
87 bmdata
->width
= width
;
88 bmdata
->height
= height
;
89 bmdata
->depth
= depth
;
91 bmdata
->bytesperpixel
= 1;
93 bmdata
->bytesperpixel
= 2;
95 bmdata
->bytesperpixel
= 4;
96 bmdata
->pitch
= (bmdata
->width
* bmdata
->bytesperpixel
+ 63) & ~63;
98 /* Creation of buffer object */
99 /* FIXME: nouveau_device should not be global */
100 /* FIXME: check result of call */
101 /* FIXME: take pitch/bpp when calculating size */
102 nouveau_bo_new(hackdev
, NOUVEAU_BO_VRAM
| NOUVEAU_BO_MAP
, 0,
106 /* FIXME: if (!bmdata->bo) */
107 nouveau_bo_map(bmdata
->bo
, NOUVEAU_BO_RDWR
);
113 VOID
NouveauOffBitMap__Root__Dispose(OOP_Class
*cl
, OOP_Object
*o
, OOP_Msg msg
)
115 struct HIDDNouveauBitMapData
* bmdata
= OOP_INST_DATA(cl
, o
);
119 nouveau_bo_unmap(bmdata
->bo
);
120 nouveau_bo_ref(NULL
, &bmdata
->bo
); /* Release reference */