Added Voodoo depth biasing.

This commit is contained in:
SarahW 2016-04-08 21:40:15 +01:00
commit 74786231c5
3 changed files with 24 additions and 1 deletions

View file

@ -594,7 +594,9 @@ enum
FBZ_DRAW_FRONT = 0x0000,
FBZ_DRAW_BACK = 0x4000,
FBZ_DRAW_MASK = 0xc000,
FBZ_DEPTH_BIAS = (1 << 16),
FBZ_PARAM_ADJUST = (1 << 26)
};
@ -1962,6 +1964,9 @@ static void voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, vood
else
new_depth = CLAMP16(state->z >> 12);
if (params->fbzMode & FBZ_DEPTH_BIAS)
new_depth = (new_depth + params->zaColor) & 0xffff;
if (params->fbzMode & FBZ_DEPTH_ENABLE)
{
uint16_t old_depth = aux_mem[x];

View file

@ -231,6 +231,15 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0xc3);
}
if (params->fbzMode & FBZ_DEPTH_BIAS)
{
addbyte(0x03); /*ADD EAX, params->zaColor[ESI]*/
addbyte(0x86);
addlong(offsetof(voodoo_params_t, zaColor));
addbyte(0x25); /*AND EAX, 0xffff*/
addlong(0xffff);
}
addbyte(0x89); /*MOV state->new_depth[EDI], EAX*/
addbyte(0x87);
addlong(offsetof(voodoo_state_t, new_depth));

View file

@ -212,6 +212,15 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0x47);
addbyte(0xc3);
}
if (params->fbzMode & FBZ_DEPTH_BIAS)
{
addbyte(0x03); /*ADD EAX, params->zaColor[ESI]*/
addbyte(0x86);
addlong(offsetof(voodoo_params_t, zaColor));
addbyte(0x25); /*AND EAX, 0xffff*/
addlong(0xffff);
}
addbyte(0x89); /*MOV state->new_depth[EDI], EAX*/
addbyte(0x87);