Added Voodoo depth biasing.
This commit is contained in:
parent
14df80109b
commit
74786231c5
3 changed files with 24 additions and 1 deletions
|
|
@ -594,7 +594,9 @@ enum
|
||||||
FBZ_DRAW_FRONT = 0x0000,
|
FBZ_DRAW_FRONT = 0x0000,
|
||||||
FBZ_DRAW_BACK = 0x4000,
|
FBZ_DRAW_BACK = 0x4000,
|
||||||
FBZ_DRAW_MASK = 0xc000,
|
FBZ_DRAW_MASK = 0xc000,
|
||||||
|
|
||||||
|
FBZ_DEPTH_BIAS = (1 << 16),
|
||||||
|
|
||||||
FBZ_PARAM_ADJUST = (1 << 26)
|
FBZ_PARAM_ADJUST = (1 << 26)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1962,6 +1964,9 @@ static void voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, vood
|
||||||
else
|
else
|
||||||
new_depth = CLAMP16(state->z >> 12);
|
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)
|
if (params->fbzMode & FBZ_DEPTH_ENABLE)
|
||||||
{
|
{
|
||||||
uint16_t old_depth = aux_mem[x];
|
uint16_t old_depth = aux_mem[x];
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,15 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
|
||||||
addbyte(0xc3);
|
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(0x89); /*MOV state->new_depth[EDI], EAX*/
|
||||||
addbyte(0x87);
|
addbyte(0x87);
|
||||||
addlong(offsetof(voodoo_state_t, new_depth));
|
addlong(offsetof(voodoo_state_t, new_depth));
|
||||||
|
|
|
||||||
|
|
@ -212,6 +212,15 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
|
||||||
addbyte(0x47);
|
addbyte(0x47);
|
||||||
addbyte(0xc3);
|
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(0x89); /*MOV state->new_depth[EDI], EAX*/
|
||||||
addbyte(0x87);
|
addbyte(0x87);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue