Rev 829 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
808 | serge | 1 | |
2 | |||
3 | |||
812 | serge | 4 | |
808 | serge | 5 | { |
6 | int x0, y0, x1, y1; |
||
7 | |||
8 | |||
817 | serge | 9 | |
10 | |||
11 | |||
12 | |||
808 | serge | 13 | y0 = draw->y; |
14 | |||
15 | |||
16 | y1 = y0+draw->h-1; |
||
17 | |||
18 | |||
19 | // x0, y0, x1, y1, draw->color); |
||
20 | |||
21 | |||
22 | { |
||
23 | u32 *ring, write; |
||
24 | int w, h; |
||
25 | u32 ifl; |
||
26 | |||
27 | |||
28 | h = y1-y0+1; |
||
29 | |||
30 | |||
31 | |||
32 | |||
812 | serge | 33 | |
813 | serge | 34 | |
812 | serge | 35 | |
36 | |||
37 | |||
38 | R5XX_GMC_BRUSH_SOLID_COLOR | |
||
39 | R5XX_GMC_SRC_DATATYPE_COLOR); |
||
40 | |||
41 | |||
42 | OUTREG(R5XX_DP_WRITE_MASK, 0xFFFFFFFF); |
||
43 | OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
||
44 | OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset); |
||
817 | serge | 45 | OUTREG(R5XX_DST_Y_X,(y0<<16)|x0); |
812 | serge | 46 | OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|h); |
817 | serge | 47 | |
812 | serge | 48 | |
49 | |||
50 | |||
808 | serge | 51 | OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_MULTI, 4)); |
52 | |||
53 | |||
54 | RADEON_GMC_BRUSH_SOLID_COLOR | |
||
55 | RADEON_GMC_DST_32BPP | |
||
56 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
57 | (1 << 28)+(1 << 30) | R5XX_ROP3_P); |
||
58 | |||
59 | |||
817 | serge | 60 | OUT_RING(draw->color); |
808 | serge | 61 | OUT_RING((x0<<16)|y0); |
817 | serge | 62 | OUT_RING((w<<16)|h); |
808 | serge | 63 | COMMIT_RING(); |
64 | |||
65 | |||
812 | serge | 66 | |
808 | serge | 67 | |
68 | } ; |
||
69 | return ERR_OK; |
||
817 | serge | 70 | } |
808 | serge | 71 | |
72 | |||
73 | { |
||
74 | pixmap_t *dstpixmap; |
||
817 | serge | 75 | int x0, y0, x1, y1; |
808 | serge | 76 | |
77 | |||
817 | serge | 78 | |
79 | |||
808 | serge | 80 | y0 = fill->y; |
81 | |||
82 | |||
83 | y1 = y0+fill->h-1; |
||
84 | |||
85 | |||
86 | // x0, y0, x1, y1); |
||
87 | |||
88 | |||
89 | { |
||
90 | u32 *ring, write; |
||
91 | u32 ifl; |
||
92 | |||
93 | |||
94 | |||
95 | |||
813 | serge | 96 | |
812 | serge | 97 | |
98 | |||
99 | |||
808 | serge | 100 | OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7)); |
101 | OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
102 | BRUSH_MONO | |
||
103 | RADEON_GMC_DST_32BPP | |
||
104 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
105 | (1 << 28)+(1 << 30) | R5XX_ROP3_P); |
||
106 | |||
107 | |||
817 | serge | 108 | OUT_RING(fill->bkcolor); |
808 | serge | 109 | OUT_RING(fill->fcolor); |
110 | |||
111 | |||
112 | OUT_RING(fill->bmp1); |
||
113 | |||
114 | |||
115 | OUT_RING((y1<<16)|x1); |
||
116 | COMMIT_RING(); |
||
117 | |||
118 | |||
812 | serge | 119 | |
120 | |||
808 | serge | 121 | }; |
122 | return ERR_OK; |
||
817 | serge | 123 | } |
808 | serge | 124 | |
125 | |||
810 | serge | 126 | { |
127 | int x0, y0, x1, y1; |
||
128 | |||
808 | serge | 129 | |
810 | serge | 130 | y0 = blit->src_y; |
131 | |||
808 | serge | 132 | |
810 | serge | 133 | y1 = y0+blit->h-1; |
134 | |||
135 | |||
136 | |||
137 | { |
||
138 | u32 *ring, write; |
||
139 | int w, h; |
||
140 | u32 ifl; |
||
141 | |||
142 | |||
143 | h = y1-y0+1; |
||
144 | |||
145 | |||
146 | |||
147 | |||
813 | serge | 148 | |
812 | serge | 149 | |
150 | |||
151 | |||
152 | |||
810 | serge | 153 | OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5)); |
154 | |||
155 | |||
156 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
157 | RADEON_GMC_BRUSH_NONE | |
||
158 | RADEON_GMC_DST_32BPP | |
||
159 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
160 | RADEON_DP_SRC_SOURCE_MEMORY | |
||
161 | (1 << 28)+(1 << 30) | R5XX_ROP3_S); |
||
162 | |||
163 | |||
164 | OUT_RING(rhd.dst_pitch_offset); |
||
165 | |||
166 | |||
167 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
||
168 | OUT_RING((w<<16)|h); |
||
169 | COMMIT_RING(); |
||
170 | |||
171 | |||
812 | serge | 172 | |
173 | |||
810 | serge | 174 | } ; |
175 | return ERR_OK; |
||
817 | serge | 176 | } |
810 | serge | 177 | |
178 | |||
808 | serge | 179 | { |
180 | |||
181 | |||
182 | |||
183 | |||
184 | y0 = draw->y0; |
||
185 | |||
186 | |||
187 | y1 = draw->y1; |
||
188 | |||
189 | |||
190 | { |
||
191 | u32 ifl; |
||
192 | u32 *ring, write; |
||
193 | |||
194 | |||
195 | |||
196 | |||
813 | serge | 197 | |
808 | serge | 198 | |
868 | serge | 199 | |
808 | serge | 200 | |
868 | serge | 201 | rhd.gui_control | |
202 | R5XX_GMC_BRUSH_SOLID_COLOR | |
||
203 | R5XX_GMC_SRC_DATATYPE_COLOR | |
||
204 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
||
205 | R5XX_GMC_WR_MSK_DIS | |
||
206 | R5XX_ROP3_P |
||
207 | ); |
||
208 | |||
808 | serge | 209 | |
210 | |||
211 | |||
212 | OUTREG(R5XX_DST_PITCH_OFFSET, rhd.dst_pitch_offset); |
||
213 | |||
214 | |||
215 | OUTREG(R5XX_DST_LINE_END,(y1<<16)|x1); |
||
216 | |||
813 | serge | 217 | |
218 | |||
219 | |||
220 | OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_POLYLINE, 4)); |
||
221 | OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
222 | RADEON_GMC_BRUSH_SOLID_COLOR | |
||
223 | RADEON_GMC_DST_32BPP | |
||
224 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
225 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
||
868 | serge | 226 | R5XX_GMC_WR_MSK_DIS | |
227 | R5XX_ROP3_P); |
||
228 | |||
813 | serge | 229 | |
230 | OUT_RING(draw->color); |
||
231 | OUT_RING((y0<<16)|x0); |
||
232 | OUT_RING((y1<<16)|x1); |
||
233 | COMMIT_RING(); |
||
234 | |||
235 | |||
236 | safe_sti(ifl); |
||
808 | serge | 237 | |
238 | |||
239 | return ERR_OK; |
||
817 | serge | 240 | } |
808 | serge | 241 | |
815 | serge | 242 | |
243 | |||
817 | serge | 244 | { |
815 | serge | 245 | |
246 | |||
247 | |||
248 | |||
249 | void *raw; |
||
250 | |||
251 | |||
252 | (io->height == 0)|| (io->height > 2048)) |
||
253 | { |
||
254 | dbgprintf("Invalid pixmap size w:%d h:%d\n", io->width,io->height); |
||
255 | return ERR_PARAM; |
||
817 | serge | 256 | |
815 | serge | 257 | |
258 | |||
259 | |||
260 | dbgprintf("pitch = %d\n", pitch); |
||
261 | |||
262 | |||
263 | if (! raw) |
||
264 | { |
||
265 | dbgprintf("Not enough memory for pixmap\n"); |
||
266 | return ERR_PARAM; |
||
817 | serge | 267 | }; |
815 | serge | 268 | |
269 | |||
270 | if(!pixmap) |
||
271 | { |
||
272 | rhd_mem_free(&rhd, RHD_MEM_FB,raw); |
||
273 | return ERR_PARAM; |
||
817 | serge | 274 | } |
815 | serge | 275 | else |
276 | { |
||
277 | io->pixmap = pixmap; |
||
817 | serge | 278 | io->usermap = NULL; |
279 | io->format = PICT_a8r8g8b8; |
||
280 | io->pitch = 0; |
||
281 | |||
815 | serge | 282 | |
817 | serge | 283 | pixmap->height = io->height; |
284 | pixmap->format = PICT_a8r8g8b8; |
||
285 | pixmap->flags = 0; |
||
286 | pixmap->pitch = pitch; |
||
287 | pixmap->offset = (u32_t)raw+rhd.FbIntAddress; |
||
288 | pixmap->pitch_offset = ((pitch/64)<<22)| (pixmap->offset>>10); |
||
815 | serge | 289 | pixmap->raw = raw; |
817 | serge | 290 | pixmap->usermap = NULL; |
291 | |||
815 | serge | 292 | |
293 | dbgprintf("width: %d height: %d\n",pixmap->width,pixmap->height ); |
||
294 | dbgprintf("pixmap.offset: %x\n", pixmap->offset); |
||
295 | |||
296 | |||
297 | return ERR_OK; |
||
817 | serge | 298 | } |
815 | serge | 299 | |
300 | |||
829 | serge | 301 | { |
302 | pixmap_t *pixmap; |
||
303 | |||
304 | |||
305 | |||
306 | |||
307 | return ERR_PARAM; |
||
308 | else |
||
309 | pixmap = io->pixmap; |
||
310 | |||
311 | |||
312 | UnlockPixmap(io); |
||
313 | |||
314 | |||
315 | rhd_mem_free(&rhd,RHD_MEM_FB,pixmap->raw); |
||
316 | free(pixmap); |
||
317 | |||
318 | |||
319 | io->usermap = NULL; |
||
320 | io->format = 0; |
||
321 | io->pitch = 0; |
||
322 | |||
323 | |||
324 | }; |
||
325 | |||
326 | |||
817 | serge | 327 | { |
328 | pixmap_t *pixmap; |
||
829 | serge | 329 | size_t size; |
330 | void *usermap; |
||
331 | |||
815 | serge | 332 | |
829 | serge | 333 | |
815 | serge | 334 | |
829 | serge | 335 | return ERR_PARAM; |
336 | else |
||
337 | pixmap = io->pixmap; |
||
338 | |||
817 | serge | 339 | |
829 | serge | 340 | return ERR_PARAM; |
341 | |||
817 | serge | 342 | |
829 | serge | 343 | if (usermap = UserAlloc(size)) |
344 | { |
||
345 | CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size); |
||
346 | pixmap->flags |= PX_LOCK; |
||
347 | pixmap->usermap = usermap; |
||
348 | io->usermap = usermap; |
||
349 | io->pitch = pixmap->pitch; |
||
350 | dbgprintf("map at %x\n", io->usermap); |
||
351 | |||
817 | serge | 352 | |
829 | serge | 353 | } |
354 | else |
||
355 | return ERR_PARAM; |
||
356 | }; |
||
817 | serge | 357 | |
358 | |||
818 | serge | 359 | { |
360 | pixmap_t *pixmap; |
||
361 | size_t size; |
||
362 | |||
817 | serge | 363 | |
818 | serge | 364 | |
365 | |||
366 | return ERR_PARAM; |
||
367 | else |
||
368 | pixmap = io->pixmap; |
||
369 | |||
370 | |||
371 | return ERR_PARAM; |
||
372 | |||
373 | |||
868 | serge | 374 | |
375 | |||
376 | ((u32_t)pixmap->usermap >= 0x80000000) || |
||
377 | ((u32_t)pixmap->usermap & 4095) |
||
378 | ) |
||
379 | return ERR_PARAM; |
||
380 | |||
381 | |||
818 | serge | 382 | |
383 | |||
384 | UserFree(pixmap->usermap); |
||
385 | pixmap->usermap = NULL; |
||
386 | pixmap->flags &= ~PX_LOCK; |
||
387 | io->usermap = NULL; |
||
388 | io->pitch = 0; |
||
389 | |||
390 | |||
391 | }; |
||
392 | |||
393 | |||
394 | |||
815 | serge | 395 | { |
396 | |||
397 | |||
398 | int w, h; |
||
399 | u32 ifl; |
||
400 | int x0, y0; |
||
401 | |||
402 | |||
403 | pixmap_t *dstpixmap; |
||
404 | |||
405 | |||
817 | serge | 406 | |
815 | serge | 407 | |
408 | srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ; |
||
409 | |||
410 | |||
817 | serge | 411 | |
815 | serge | 412 | |
817 | serge | 413 | //dbgprintf("src.width: %d src.height: %d\n", srcpixmap->width,srcpixmap->height); |
414 | //dbgprintf("srcpitch: %x dstpitch: %x\n", |
||
415 | // srcpixmap->pitch_offset,dstpixmap->pitch_offset); |
||
416 | |||
815 | serge | 417 | |
418 | |||
419 | |||
868 | serge | 420 | |
815 | serge | 421 | |
868 | serge | 422 | |
423 | |||
424 | RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
||
425 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
426 | RADEON_GMC_BRUSH_NONE | |
||
427 | RADEON_GMC_DST_32BPP | |
||
428 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
429 | RADEON_DP_SRC_SOURCE_MEMORY | |
||
430 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
||
431 | R5XX_GMC_WR_MSK_DIS | |
||
432 | R5XX_ROP3_S |
||
433 | ); |
||
434 | |||
435 | |||
436 | |||
437 | |||
438 | OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset); |
||
439 | |||
440 | |||
441 | OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x); |
||
442 | OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w); |
||
443 | |||
444 | |||
445 | |||
446 | |||
815 | serge | 447 | OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5)); |
448 | |||
449 | |||
450 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
451 | RADEON_GMC_BRUSH_NONE | |
||
452 | RADEON_GMC_DST_32BPP | |
||
453 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
454 | RADEON_DP_SRC_SOURCE_MEMORY | |
||
455 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
||
868 | serge | 456 | R5XX_GMC_WR_MSK_DIS | |
457 | R5XX_ROP3_S |
||
458 | ); |
||
459 | |||
815 | serge | 460 | |
461 | OUT_RING(dstpixmap->pitch_offset); |
||
462 | |||
463 | |||
464 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
||
465 | OUT_RING((blit->w<<16)|blit->h); |
||
466 | COMMIT_RING(); |
||
467 | |||
468 | |||
868 | serge | 469 | |
470 | |||
815 | serge | 471 | return ERR_OK; |
817 | serge | 472 | } |
815 | serge | 473 | |
829 | serge | 474 | |
475 | |||
476 | { |
||
477 | |||
478 | |||
479 | int w, h; |
||
480 | u32 ifl; |
||
481 | int x0, y0; |
||
482 | |||
483 | |||
484 | pixmap_t *dstpixmap; |
||
485 | |||
486 | |||
868 | serge | 487 | |
829 | serge | 488 | |
489 | srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ; |
||
490 | |||
491 | |||
492 | |||
493 | |||
494 | //dbgprintf("src.width: %d src.height: %d\n", srcpixmap->width,srcpixmap->height); |
||
495 | //dbgprintf("srcpitch: %x dstpitch: %x\n", |
||
496 | // srcpixmap->pitch_offset,dstpixmap->pitch_offset); |
||
497 | |||
498 | |||
499 | |||
500 | |||
868 | serge | 501 | |
502 | |||
503 | |||
504 | |||
505 | RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
||
506 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
507 | RADEON_GMC_BRUSH_NONE | |
||
508 | RADEON_GMC_DST_32BPP | |
||
509 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
510 | RADEON_DP_SRC_SOURCE_MEMORY | |
||
511 | R5XX_GMC_WR_MSK_DIS | |
||
512 | R5XX_ROP3_S |
||
513 | ); |
||
514 | |||
515 | |||
516 | |||
517 | |||
518 | OUTREG(R5XX_CLR_CMP_MASK, R5XX_CLR_CMP_MSK); |
||
519 | OUTREG(R5XX_CLR_CMP_CNTL, R5XX_SRC_CMP_EQ_COLOR | R5XX_CLR_CMP_SRC_SOURCE); |
||
520 | |||
521 | |||
522 | OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset); |
||
523 | |||
524 | |||
525 | OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x); |
||
526 | OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w); |
||
527 | |||
528 | |||
529 | |||
530 | |||
829 | serge | 531 | OUT_RING(CP_PACKET3(RADEON_CNTL_TRANBLT, 8)); |
532 | |||
533 | |||
534 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
||
535 | RADEON_GMC_BRUSH_NONE | |
||
536 | RADEON_GMC_DST_32BPP | |
||
537 | RADEON_GMC_SRC_DATATYPE_COLOR | |
||
538 | RADEON_DP_SRC_SOURCE_MEMORY | |
||
539 | R5XX_GMC_WR_MSK_DIS | |
||
868 | serge | 540 | R5XX_ROP3_S |
541 | ); |
||
542 | |||
829 | serge | 543 | |
544 | OUT_RING(dstpixmap->pitch_offset); |
||
545 | |||
546 | |||
868 | serge | 547 | OUT_RING(0xFF000000); |
829 | serge | 548 | OUT_RING(0xFF000000); |
549 | |||
550 | |||
551 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
||
552 | OUT_RING((blit->w<<16)|blit->h); |
||
553 | |||
868 | serge | 554 | |
829 | serge | 555 | |
556 | |||
868 | serge | 557 | |
558 | |||
829 | serge | 559 | return ERR_OK; |
560 | }16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->16)|blit-><16)|blit->9),><9),>22)|><22)|>16)|x1); |
||
561 | ><16)|x1); |
||
562 |