}
}
-#define sign_extend_12bit(value) \
- (((s32)((value) << 20)) >> 20) \
-
#define sign_extend_11bit(value) \
(((s32)((value) << 21)) >> 21) \
-#define sign_extend_10bit(value) \
- (((s32)((value) << 22)) >> 22) \
-
-
#define get_vertex_data_xy(vertex_number, offset16) \
vertexes[vertex_number].x = \
- sign_extend_12bit(list_s16[offset16]) + psx_gpu->offset_x; \
+ sign_extend_11bit(list_s16[offset16]) + psx_gpu->offset_x; \
vertexes[vertex_number].y = \
- sign_extend_12bit(list_s16[(offset16) + 1]) + psx_gpu->offset_y; \
+ sign_extend_11bit(list_s16[(offset16) + 1]) + psx_gpu->offset_y; \
#define get_vertex_data_uv(vertex_number, offset16) \
vertexes[vertex_number].u = list_s16[offset16] & 0xFF; \
}
#endif
-static int disable_main_render;
-
// simple check for a case where no clipping is used
// - now handled by adjusting the viewport
static int check_enhanced_range(psx_gpu_struct *psx_gpu, int x, int y)
vertex_ptrs[i].v = new;
}
+// this sometimes does more harm than good, like in PE2
static void uv_hack(vertex_struct *vertex_ptrs, int vertex_count)
{
int i, u[4], v[4];
if (!prepare_triangle(psx_gpu, vertexes, vertex_ptrs))
return;
- if (!disable_main_render)
+ if (!psx_gpu->hack_disable_main)
render_triangle_p(psx_gpu, vertex_ptrs, current_command);
if (!check_enhanced_range(psx_gpu, vertex_ptrs[0]->x, vertex_ptrs[2]->x))
get_vertex_data_xy_uv(2, 10);
get_vertex_data_xy_uv(3, 14);
- uv_hack(vertexes, 4);
+ if (psx_gpu->hack_texture_adj)
+ uv_hack(vertexes, 4);
do_quad_enhanced(psx_gpu, vertexes, current_command);
gput_sum(cpu_cycles_sum, cpu_cycles, gput_quad_base_t());
break;
get_vertex_data_xy_uv_rgb(2, 12);
get_vertex_data_xy_uv_rgb(3, 18);
- uv_hack(vertexes, 4);
+ if (psx_gpu->hack_texture_adj)
+ uv_hack(vertexes, 4);
do_quad_enhanced(psx_gpu, vertexes, current_command);
gput_sum(cpu_cycles_sum, cpu_cycles, gput_quad_base_gt());
break;
case 0xE5:
{
- s32 offset_x = list[0] << 21;
- s32 offset_y = list[0] << 10;
- psx_gpu->offset_x = offset_x >> 21;
- psx_gpu->offset_y = offset_y >> 21;
+ psx_gpu->offset_x = sign_extend_11bit(list[0]);
+ psx_gpu->offset_y = sign_extend_11bit(list[0] >> 11);
SET_Ex(5, list[0]);
break;