Implement non-poly lines in Banshee/V3 blitter.
This commit is contained in:
parent
8635bc5184
commit
4adb34078d
1 changed files with 19 additions and 6 deletions
|
|
@ -890,7 +890,7 @@ static void step_line(voodoo_t *voodoo)
|
|||
voodoo->banshee_blt.line_pix_pos++;
|
||||
}
|
||||
|
||||
static void banshee_do_line(voodoo_t *voodoo)
|
||||
static void banshee_do_line(voodoo_t *voodoo, int draw_last_pixel)
|
||||
{
|
||||
clip_t *clip = &voodoo->banshee_blt.clip[(voodoo->banshee_blt.command & COMMAND_CLIP_SEL) ? 1 : 0];
|
||||
uint8_t rop = voodoo->banshee_blt.command >> 24;
|
||||
|
|
@ -947,6 +947,15 @@ static void banshee_do_line(voodoo_t *voodoo)
|
|||
}
|
||||
}
|
||||
|
||||
if (draw_last_pixel)
|
||||
{
|
||||
int mask = stipple & (1 << voodoo->banshee_blt.line_bit_pos);
|
||||
int pattern_trans = (voodoo->banshee_blt.command & COMMAND_TRANS_MONO) ? mask : 1;
|
||||
|
||||
if (y >= clip->y_min && y < clip->y_max && x >= clip->x_min && x < clip->x_max && pattern_trans)
|
||||
PLOT_LINE(voodoo, x, y, rop, mask ? voodoo->banshee_blt.colorFore : voodoo->banshee_blt.colorBack, COLORKEY_32);
|
||||
}
|
||||
|
||||
voodoo->banshee_blt.srcXY = (x & 0xffff) | (y << 16);
|
||||
voodoo->banshee_blt.srcX = x;
|
||||
voodoo->banshee_blt.srcY = y;
|
||||
|
|
@ -1084,8 +1093,12 @@ static void banshee_do_2d_blit(voodoo_t *voodoo, int count, uint32_t data)
|
|||
banshee_do_rectfill(voodoo);
|
||||
break;
|
||||
|
||||
case COMMAND_CMD_LINE:
|
||||
banshee_do_line(voodoo, 1);
|
||||
break;
|
||||
|
||||
case COMMAND_CMD_POLYLINE:
|
||||
banshee_do_line(voodoo);
|
||||
banshee_do_line(voodoo, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -1358,18 +1371,18 @@ void voodoo_2d_reg_writel(voodoo_t *voodoo, uint32_t addr, uint32_t val)
|
|||
banshee_do_rectfill(voodoo);
|
||||
break;
|
||||
|
||||
/* case COMMAND_CMD_LINE:
|
||||
case COMMAND_CMD_LINE:
|
||||
voodoo->banshee_blt.dstXY = val;
|
||||
voodoo->banshee_blt.dstX = ((int32_t)(val << 19)) >> 19;
|
||||
voodoo->banshee_blt.dstY = ((int32_t)(val << 3)) >> 19;
|
||||
banshee_do_line(voodoo);
|
||||
break;*/
|
||||
banshee_do_line(voodoo, 1);
|
||||
break;
|
||||
|
||||
case COMMAND_CMD_POLYLINE:
|
||||
voodoo->banshee_blt.dstXY = val;
|
||||
voodoo->banshee_blt.dstX = ((int32_t)(val << 19)) >> 19;
|
||||
voodoo->banshee_blt.dstY = ((int32_t)(val << 3)) >> 19;
|
||||
banshee_do_line(voodoo);
|
||||
banshee_do_line(voodoo, 0);
|
||||
break;
|
||||
|
||||
case COMMAND_CMD_POLYFILL:
|
||||
|
|
|
|||
Loading…
Reference in a new issue