Implement Banshee tiled surfaces

This commit is contained in:
SarahW 2020-08-12 15:13:48 +01:00
commit 133f19fe39
9 changed files with 379 additions and 133 deletions

View file

@ -562,15 +562,16 @@ void voodoo_reg_writel(uint32_t addr, uint32_t val, void *p)
case SST_colBufferStride:
if (voodoo->type == VOODOO_BANSHEE)
{
if (val & (1 << 15))
voodoo->col_tiled = val & (1 << 15);
if (voodoo->col_tiled)
{
voodoo->row_width = (val & 0x7f) * 128;
// pclog("colBufferStride = %i bytes, tiled\n", voodoo->row_width);
voodoo->row_width = (val & 0x7f) * 128*32;
// pclog("colBufferStride tiled = %i bytes, tiled %08x\n", voodoo->row_width, val);
}
else
{
voodoo->row_width = val & 0x3fff;
// pclog("colBufferStride = %i bytes, linear\n", voodoo->row_width);
// pclog("colBufferStride linear = %i bytes, linear\n", voodoo->row_width);
}
}
break;
@ -581,6 +582,22 @@ void voodoo_reg_writel(uint32_t addr, uint32_t val, void *p)
// pclog("auxBufferAddr=%06x\n", voodoo->params.aux_offset);
}
break;
case SST_auxBufferStride:
if (voodoo->type == VOODOO_BANSHEE)
{
voodoo->aux_tiled = val & (1 << 15);
if (voodoo->aux_tiled)
{
voodoo->aux_row_width = (val & 0x7f) * 128*32;
// pclog("auxBufferStride tiled = %i bytes, tiled\n", voodoo->aux_row_width);
}
else
{
voodoo->aux_row_width = val & 0x3fff;
// pclog("auxBufferStride linear = %i bytes, linear\n", voodoo->aux_row_width);
}
}
break;
case SST_clutData:
voodoo->clutData[(val >> 24) & 0x3f].b = val & 0xff;