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++;
|
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];
|
clip_t *clip = &voodoo->banshee_blt.clip[(voodoo->banshee_blt.command & COMMAND_CLIP_SEL) ? 1 : 0];
|
||||||
uint8_t rop = voodoo->banshee_blt.command >> 24;
|
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.srcXY = (x & 0xffff) | (y << 16);
|
||||||
voodoo->banshee_blt.srcX = x;
|
voodoo->banshee_blt.srcX = x;
|
||||||
voodoo->banshee_blt.srcY = y;
|
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);
|
banshee_do_rectfill(voodoo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case COMMAND_CMD_LINE:
|
||||||
|
banshee_do_line(voodoo, 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case COMMAND_CMD_POLYLINE:
|
case COMMAND_CMD_POLYLINE:
|
||||||
banshee_do_line(voodoo);
|
banshee_do_line(voodoo, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
@ -1358,18 +1371,18 @@ void voodoo_2d_reg_writel(voodoo_t *voodoo, uint32_t addr, uint32_t val)
|
||||||
banshee_do_rectfill(voodoo);
|
banshee_do_rectfill(voodoo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* case COMMAND_CMD_LINE:
|
case COMMAND_CMD_LINE:
|
||||||
voodoo->banshee_blt.dstXY = val;
|
voodoo->banshee_blt.dstXY = val;
|
||||||
voodoo->banshee_blt.dstX = ((int32_t)(val << 19)) >> 19;
|
voodoo->banshee_blt.dstX = ((int32_t)(val << 19)) >> 19;
|
||||||
voodoo->banshee_blt.dstY = ((int32_t)(val << 3)) >> 19;
|
voodoo->banshee_blt.dstY = ((int32_t)(val << 3)) >> 19;
|
||||||
banshee_do_line(voodoo);
|
banshee_do_line(voodoo, 1);
|
||||||
break;*/
|
break;
|
||||||
|
|
||||||
case COMMAND_CMD_POLYLINE:
|
case COMMAND_CMD_POLYLINE:
|
||||||
voodoo->banshee_blt.dstXY = val;
|
voodoo->banshee_blt.dstXY = val;
|
||||||
voodoo->banshee_blt.dstX = ((int32_t)(val << 19)) >> 19;
|
voodoo->banshee_blt.dstX = ((int32_t)(val << 19)) >> 19;
|
||||||
voodoo->banshee_blt.dstY = ((int32_t)(val << 3)) >> 19;
|
voodoo->banshee_blt.dstY = ((int32_t)(val << 3)) >> 19;
|
||||||
banshee_do_line(voodoo);
|
banshee_do_line(voodoo, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case COMMAND_CMD_POLYFILL:
|
case COMMAND_CMD_POLYFILL:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue