Rev 829 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 829 | Rev 868 | ||
---|---|---|---|
Line 194... | Line 194... | ||
194 | ifl = safe_cli(); |
194 | ifl = safe_cli(); |
Line 195... | Line 195... | ||
195 | 195 | ||
Line 196... | Line 196... | ||
196 | #if R300_PIO |
196 | #if R300_PIO |
Line 197... | Line 197... | ||
197 | 197 | ||
- | 198 | R5xxFIFOWait(6); |
|
198 | R5xxFIFOWait(7); |
199 | |
199 | 200 | OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
|
- | 201 | rhd.gui_control | |
|
- | 202 | R5XX_GMC_BRUSH_SOLID_COLOR | |
|
- | 203 | R5XX_GMC_SRC_DATATYPE_COLOR | |
|
- | 204 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
|
Line 200... | Line 205... | ||
200 | OUTREG(R5XX_DP_GUI_MASTER_CNTL, rhd.gui_control | R5XX_ROP3_P | |
205 | R5XX_GMC_WR_MSK_DIS | |
Line 201... | Line 206... | ||
201 | R5XX_GMC_BRUSH_SOLID_COLOR | |
206 | R5XX_ROP3_P |
202 | R5XX_GMC_SRC_DATATYPE_COLOR); |
- | |
203 | 207 | ); |
|
Line 204... | Line 208... | ||
204 | OUTREG(R5XX_DST_LINE_PATCOUNT, 0x55 << R5XX_BRES_CNTL_SHIFT); |
208 | |
205 | 209 | OUTREG(R5XX_DST_LINE_PATCOUNT, 0x55 << R5XX_BRES_CNTL_SHIFT); |
|
Line 217... | Line 221... | ||
217 | OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
221 | OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
218 | RADEON_GMC_BRUSH_SOLID_COLOR | |
222 | RADEON_GMC_BRUSH_SOLID_COLOR | |
219 | RADEON_GMC_DST_32BPP | |
223 | RADEON_GMC_DST_32BPP | |
220 | RADEON_GMC_SRC_DATATYPE_COLOR | |
224 | RADEON_GMC_SRC_DATATYPE_COLOR | |
221 | (1 << 28)+(1 << 30) | R5XX_ROP3_P); |
225 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
- | 226 | R5XX_GMC_WR_MSK_DIS | |
|
- | 227 | R5XX_ROP3_P); |
|
222 | 228 | ||
Line 223... | Line 229... | ||
223 | OUT_RING(rhd.dst_pitch_offset); |
229 | OUT_RING(rhd.dst_pitch_offset); |
224 | OUT_RING(draw->color); |
230 | OUT_RING(draw->color); |
225 | OUT_RING((y0<<16)|x0); |
231 | OUT_RING((y0<<16)|x0); |
226 | OUT_RING((y1<<16)|x1); |
232 | OUT_RING((y1<<16)|x1); |
Line 363... | Line 369... | ||
363 | 369 | ||
Line 364... | Line 370... | ||
364 | if( (pixmap->flags & 1) != PX_LOCK ) |
370 | if( (pixmap->flags & 1) != PX_LOCK ) |
365 | return ERR_PARAM; |
371 | return ERR_PARAM; |
Line -... | Line 372... | ||
- | 372 | ||
- | 373 | /* Sanity checks */ |
|
- | 374 | ||
- | 375 | if( (pixmap->usermap == 0)|| |
|
- | 376 | ((u32_t)pixmap->usermap >= 0x80000000) || |
|
- | 377 | ((u32_t)pixmap->usermap & 4095) |
|
- | 378 | ) |
|
- | 379 | return ERR_PARAM; |
|
366 | 380 | ||
Line 367... | Line 381... | ||
367 | size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
381 | size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
368 | 382 | ||
369 | UnmapPages(pixmap->usermap, size); |
383 | UnmapPages(pixmap->usermap, size); |
Line 401... | Line 415... | ||
401 | // srcpixmap->pitch_offset,dstpixmap->pitch_offset); |
415 | // srcpixmap->pitch_offset,dstpixmap->pitch_offset); |
402 | 416 | ||
Line 403... | Line 417... | ||
403 | ifl = safe_cli(); |
417 | ifl = safe_cli(); |
Line -... | Line 418... | ||
- | 418 | ||
- | 419 | #if R300_PIO |
|
- | 420 | ||
- | 421 | R5xxFIFOWait(7); |
|
- | 422 | ||
- | 423 | OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
|
- | 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 | OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
|
- | 436 | ||
- | 437 | OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset); |
|
- | 438 | OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset); |
|
- | 439 | ||
- | 440 | OUTREG(R5XX_SRC_Y_X,(blit->src_y<<16)|blit->src_x); |
|
- | 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 | ||
Line 404... | Line 444... | ||
404 | 444 | #else |
|
405 | 445 | ||
Line 406... | Line 446... | ||
406 | BEGIN_RING(); |
446 | BEGIN_RING(); |
407 | OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5)); |
447 | OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5)); |
408 | 448 | ||
409 | OUT_RING(RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
449 | OUT_RING(RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
410 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
450 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
411 | RADEON_GMC_BRUSH_NONE | |
451 | RADEON_GMC_BRUSH_NONE | |
- | 452 | RADEON_GMC_DST_32BPP | |
|
- | 453 | RADEON_GMC_SRC_DATATYPE_COLOR | |
|
412 | RADEON_GMC_DST_32BPP | |
454 | RADEON_DP_SRC_SOURCE_MEMORY | |
- | 455 | R5XX_GMC_CLR_CMP_CNTL_DIS | |
|
Line 413... | Line 456... | ||
413 | RADEON_GMC_SRC_DATATYPE_COLOR | |
456 | R5XX_GMC_WR_MSK_DIS | |
414 | RADEON_DP_SRC_SOURCE_MEMORY | |
457 | R5XX_ROP3_S |
Line 415... | Line 458... | ||
415 | (1 << 28)+(1 << 30) | R5XX_ROP3_S); |
458 | ); |
416 | 459 | ||
417 | OUT_RING(srcpixmap->pitch_offset); |
460 | OUT_RING(srcpixmap->pitch_offset); |
418 | OUT_RING(dstpixmap->pitch_offset); |
461 | OUT_RING(dstpixmap->pitch_offset); |
Line -... | Line 462... | ||
- | 462 | ||
- | 463 | OUT_RING((blit->src_x<<16)|blit->src_y); |
|
419 | 464 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
|
420 | OUT_RING((blit->src_x<<16)|blit->src_y); |
465 | OUT_RING((blit->w<<16)|blit->h); |
421 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
466 | COMMIT_RING(); |
Line 437... | Line 482... | ||
437 | 482 | ||
Line 438... | Line 483... | ||
438 | pixmap_t *srcpixmap; |
483 | pixmap_t *srcpixmap; |
439 | pixmap_t *dstpixmap; |
484 | pixmap_t *dstpixmap; |
Line 440... | Line 485... | ||
440 | 485 | ||
Line 441... | Line 486... | ||
441 | dbgprintf("Transblit src: %x dst: %x\n",blit->srcpix, blit->dstpix); |
486 | // dbgprintf("Transblit src: %x dst: %x\n",blit->srcpix, blit->dstpix); |
442 | 487 | ||
Line 443... | Line 488... | ||
443 | dstpixmap = (blit->dstpix == (void*)-1) ? &scr_pixmap : blit->dstpix ; |
488 | dstpixmap = (blit->dstpix == (void*)-1) ? &scr_pixmap : blit->dstpix ; |
Line 451... | Line 496... | ||
451 | // srcpixmap->pitch_offset,dstpixmap->pitch_offset); |
496 | // srcpixmap->pitch_offset,dstpixmap->pitch_offset); |
452 | 497 | ||
Line 453... | Line 498... | ||
453 | ifl = safe_cli(); |
498 | ifl = safe_cli(); |
Line -... | Line 499... | ||
- | 499 | ||
- | 500 | #if R300_PIO |
|
- | 501 | ||
- | 502 | R5xxFIFOWait(10); |
|
- | 503 | ||
- | 504 | OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
|
- | 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 | OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
|
- | 516 | ||
- | 517 | OUTREG(R5XX_CLR_CMP_CLR_SRC, 0xFF000000); |
|
- | 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 | OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset); |
|
- | 522 | OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset); |
|
- | 523 | ||
- | 524 | OUTREG(R5XX_SRC_Y_X,(blit->src_y<<16)|blit->src_x); |
|
- | 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 | #else |
|
454 | 529 | ||
455 | BEGIN_RING(); |
530 | BEGIN_RING(); |
Line 456... | Line 531... | ||
456 | OUT_RING(CP_PACKET3(RADEON_CNTL_TRANBLT, 8)); |
531 | OUT_RING(CP_PACKET3(RADEON_CNTL_TRANBLT, 8)); |
457 | 532 | ||
458 | OUT_RING(RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
533 | OUT_RING(RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
459 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
534 | RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
460 | RADEON_GMC_BRUSH_NONE | |
535 | RADEON_GMC_BRUSH_NONE | |
461 | RADEON_GMC_DST_32BPP | |
536 | RADEON_GMC_DST_32BPP | |
- | 537 | RADEON_GMC_SRC_DATATYPE_COLOR | |
|
462 | RADEON_GMC_SRC_DATATYPE_COLOR | |
538 | RADEON_DP_SRC_SOURCE_MEMORY | |
- | 539 | R5XX_GMC_WR_MSK_DIS | |
|
Line 463... | Line 540... | ||
463 | RADEON_DP_SRC_SOURCE_MEMORY | |
540 | R5XX_ROP3_S |
464 | (1 << 30) | R5XX_ROP3_S); |
541 | ); |
Line 465... | Line 542... | ||
465 | 542 | ||
466 | OUT_RING(srcpixmap->pitch_offset); |
543 | OUT_RING(srcpixmap->pitch_offset); |
467 | OUT_RING(dstpixmap->pitch_offset); |
544 | OUT_RING(dstpixmap->pitch_offset); |
Line 468... | Line 545... | ||
468 | 545 | ||
469 | OUT_RING((2<<24)+5); |
546 | OUT_RING(R5XX_CLR_CMP_SRC_SOURCE | R5XX_SRC_CMP_EQ_COLOR); |
470 | OUT_RING(0xFF000000); |
547 | OUT_RING(0xFF000000); |
- | 548 | OUT_RING(0xFF000000); |
|
471 | OUT_RING(0xFF000000); |
549 | |
Line -... | Line 550... | ||
- | 550 | OUT_RING((blit->src_x<<16)|blit->src_y); |
|
- | 551 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
|
472 | 552 | OUT_RING((blit->w<<16)|blit->h); |
|
473 | OUT_RING((blit->src_x<<16)|blit->src_y); |
553 | |
474 | OUT_RING((blit->dst_x<<16)|blit->dst_y); |
554 | COMMIT_RING(); |