Corrected Voodoo 2 blitter source/dest tiled bits
Chroma test now applied during screen-to-screen blits Fixes 2D flickering in Star Trek Starfleet Academy
This commit is contained in:
parent
d268d3558b
commit
04c454401f
1 changed files with 28 additions and 4 deletions
|
|
@ -964,8 +964,8 @@ enum
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
BLTCMD_SRC_TILED = (1 << 10),
|
BLTCMD_SRC_TILED = (1 << 14),
|
||||||
BLTCMD_DST_TILED = (1 << 12)
|
BLTCMD_DST_TILED = (1 << 15)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TEXTUREMODE_MASK 0x3ffff000
|
#define TEXTUREMODE_MASK 0x3ffff000
|
||||||
|
|
@ -3771,6 +3771,7 @@ static void blit_start(voodoo_t *voodoo)
|
||||||
{
|
{
|
||||||
uint16_t src_dat = src[src_x];
|
uint16_t src_dat = src[src_x];
|
||||||
uint16_t dst_dat = dst[dst_x];
|
uint16_t dst_dat = dst[dst_x];
|
||||||
|
int rop = 0;
|
||||||
|
|
||||||
if (voodoo->bltCommand & BLIT_CLIPPING_ENABLED)
|
if (voodoo->bltCommand & BLIT_CLIPPING_ENABLED)
|
||||||
{
|
{
|
||||||
|
|
@ -3778,8 +3779,31 @@ static void blit_start(voodoo_t *voodoo)
|
||||||
dst_y < voodoo->bltClipLowY || dst_y > voodoo->bltClipHighY)
|
dst_y < voodoo->bltClipLowY || dst_y > voodoo->bltClipHighY)
|
||||||
goto skip_pixel_blit;
|
goto skip_pixel_blit;
|
||||||
}
|
}
|
||||||
|
|
||||||
MIX(src_dat, dst_dat, voodoo->bltRop[3]);
|
if (voodoo->bltCommand & BLIT_SRC_CHROMA)
|
||||||
|
{
|
||||||
|
int r = (src_dat >> 11);
|
||||||
|
int g = (src_dat >> 5) & 0x3f;
|
||||||
|
int b = src_dat & 0x1f;
|
||||||
|
|
||||||
|
if (r >= voodoo->bltSrcChromaMinR && r <= voodoo->bltSrcChromaMaxR &&
|
||||||
|
g >= voodoo->bltSrcChromaMinG && g <= voodoo->bltSrcChromaMaxG &&
|
||||||
|
b >= voodoo->bltSrcChromaMinB && b <= voodoo->bltSrcChromaMaxB)
|
||||||
|
rop |= BLIT_ROP_SRC_PASS;
|
||||||
|
}
|
||||||
|
if (voodoo->bltCommand & BLIT_DST_CHROMA)
|
||||||
|
{
|
||||||
|
int r = (dst_dat >> 11);
|
||||||
|
int g = (dst_dat >> 5) & 0x3f;
|
||||||
|
int b = dst_dat & 0x1f;
|
||||||
|
|
||||||
|
if (r >= voodoo->bltDstChromaMinR && r <= voodoo->bltDstChromaMaxR &&
|
||||||
|
g >= voodoo->bltDstChromaMinG && g <= voodoo->bltDstChromaMaxG &&
|
||||||
|
b >= voodoo->bltDstChromaMinB && b <= voodoo->bltDstChromaMaxB)
|
||||||
|
rop |= BLIT_ROP_DST_PASS;
|
||||||
|
}
|
||||||
|
|
||||||
|
MIX(src_dat, dst_dat, voodoo->bltRop[rop]);
|
||||||
|
|
||||||
dst[dst_x] = dst_dat;
|
dst[dst_x] = dst_dat;
|
||||||
skip_pixel_blit:
|
skip_pixel_blit:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue