196,20 → 196,16 |
|
#if R300_PIO |
|
R5xxFIFOWait(6); |
R5xxFIFOWait(7); |
|
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
rhd.gui_control | |
OUTREG(R5XX_DP_GUI_MASTER_CNTL, rhd.gui_control | R5XX_ROP3_P | |
R5XX_GMC_BRUSH_SOLID_COLOR | |
R5XX_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P |
); |
R5XX_GMC_SRC_DATATYPE_COLOR); |
|
OUTREG(R5XX_DST_LINE_PATCOUNT, 0x55 << R5XX_BRES_CNTL_SHIFT); |
|
OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->color); |
OUTREG(R5XX_DP_WRITE_MASK, 0xFFFFFFFF); |
OUTREG(R5XX_DST_PITCH_OFFSET, rhd.dst_pitch_offset); |
|
OUTREG(R5XX_DST_LINE_START,(y0<<16)|x0); |
223,9 → 219,7 |
RADEON_GMC_BRUSH_SOLID_COLOR | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P); |
(1 << 28)+(1 << 30) | R5XX_ROP3_P); |
|
OUT_RING(rhd.dst_pitch_offset); |
OUT_RING(draw->color); |
371,14 → 365,6 |
if( (pixmap->flags & 1) != PX_LOCK ) |
return ERR_PARAM; |
|
/* Sanity checks */ |
|
if( (pixmap->usermap == 0)|| |
((u32_t)pixmap->usermap >= 0x80000000) || |
((u32_t)pixmap->usermap & 4095) |
) |
return ERR_PARAM; |
|
size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
|
UnmapPages(pixmap->usermap, size); |
417,33 → 403,7 |
|
ifl = safe_cli(); |
|
#if R300_PIO |
|
R5xxFIFOWait(7); |
|
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_NONE | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
RADEON_DP_SRC_SOURCE_MEMORY | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_S |
); |
|
OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
|
OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset); |
OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset); |
|
OUTREG(R5XX_SRC_Y_X,(blit->src_y<<16)|blit->src_x); |
OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x); |
OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w); |
|
#else |
|
BEGIN_RING(); |
OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5)); |
|
453,10 → 413,7 |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
RADEON_DP_SRC_SOURCE_MEMORY | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_S |
); |
(1 << 28)+(1 << 30) | R5XX_ROP3_S); |
|
OUT_RING(srcpixmap->pitch_offset); |
OUT_RING(dstpixmap->pitch_offset); |
466,8 → 423,6 |
OUT_RING((blit->w<<16)|blit->h); |
COMMIT_RING(); |
|
#endif |
|
safe_sti(ifl); |
return ERR_OK; |
} |
484,7 → 439,7 |
pixmap_t *srcpixmap; |
pixmap_t *dstpixmap; |
|
// dbgprintf("Transblit src: %x dst: %x\n",blit->srcpix, blit->dstpix); |
dbgprintf("Transblit src: %x dst: %x\n",blit->srcpix, blit->dstpix); |
|
dstpixmap = (blit->dstpix == (void*)-1) ? &scr_pixmap : blit->dstpix ; |
srcpixmap = (blit->srcpix == (void*)-1) ? &scr_pixmap : blit->srcpix ; |
498,36 → 453,6 |
|
ifl = safe_cli(); |
|
#if R300_PIO |
|
R5xxFIFOWait(10); |
|
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_NONE | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
RADEON_DP_SRC_SOURCE_MEMORY | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_S |
); |
|
OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
|
OUTREG(R5XX_CLR_CMP_CLR_SRC, 0xFF000000); |
OUTREG(R5XX_CLR_CMP_MASK, R5XX_CLR_CMP_MSK); |
OUTREG(R5XX_CLR_CMP_CNTL, R5XX_SRC_CMP_EQ_COLOR | R5XX_CLR_CMP_SRC_SOURCE); |
|
OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset); |
OUTREG(R5XX_SRC_PITCH_OFFSET, srcpixmap->pitch_offset); |
|
OUTREG(R5XX_SRC_Y_X,(blit->src_y<<16)|blit->src_x); |
OUTREG(R5XX_DST_Y_X,(blit->dst_y<<16)|blit->dst_x); |
OUTREG(R5XX_DST_HEIGHT_WIDTH,(blit->h<<16)|blit->w); |
|
#else |
|
BEGIN_RING(); |
OUT_RING(CP_PACKET3(RADEON_CNTL_TRANBLT, 8)); |
|
537,14 → 462,12 |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
RADEON_DP_SRC_SOURCE_MEMORY | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_S |
); |
(1 << 30) | R5XX_ROP3_S); |
|
OUT_RING(srcpixmap->pitch_offset); |
OUT_RING(dstpixmap->pitch_offset); |
|
OUT_RING(R5XX_CLR_CMP_SRC_SOURCE | R5XX_SRC_CMP_EQ_COLOR); |
OUT_RING((2<<24)+5); |
OUT_RING(0xFF000000); |
OUT_RING(0xFF000000); |
|
551,11 → 474,8 |
OUT_RING((blit->src_x<<16)|blit->src_y); |
OUT_RING((blit->dst_x<<16)|blit->dst_y); |
OUT_RING((blit->w<<16)|blit->h); |
|
COMMIT_RING(); |
|
#endif |
|
safe_sti(ifl); |
return ERR_OK; |
} |