switch((psx_gpu->render_state_base >> 8) & 0x3)
{
- default:
case TEXTURE_MODE_4BPP:
texture_base = psx_gpu->texture_4bpp_cache[psx_gpu->current_texture_page];
texture_ptr += (psx_gpu->texture_window_y >> 4) << 12;
break;
+ default:
case TEXTURE_MODE_16BPP:
texture_base = (u8 *)(psx_gpu->vram_ptr);
texture_base += (psx_gpu->current_texture_page & 0xF) * 128;
num_vertexes++;
if(list_position >= list_end)
- break;
+ {
+ current_command = (u32)-1;
+ goto breakloop;
+ }
xy = *list_position;
if((xy & 0xF000F000) == 0x50005000)
num_vertexes++;
if(list_position >= list_end)
- break;
+ {
+ current_command = (u32)-1;
+ goto breakloop;
+ }
color = list_position[0];
if((color & 0xF000F000) == 0x50005000)
}
}
-#ifdef PCSX
breakloop:
-#endif
if (last_command != NULL)
*last_command = current_command;
return list - list_start;
s = psx_gpu->enhancement_x_threshold;
for (x = 0; x < sizeof(psx_gpu->enhancement_buf_by_x16); x++)
{
- if (b < 3 && x * ENH_BUF_TABLE_STEP >= s - ENH_BUF_TABLE_STEP - 1)
+ if (b < 3 && x * ENH_BUF_TABLE_STEP >= s)
{
s += psx_gpu->enhancement_x_threshold;
b++;
#ifndef NEON_BUILD
// TODO?
-void scale2x_tiles8(void *dst, const void *src, int w8, int h) {}
+void scale2x_tiles8(void *dst, const void *src, int w8, int h)
+{
+ uint16_t* d = (uint16_t*)dst;
+ const uint16_t* s = (const uint16_t*)src;
+
+ while ( h-- )
+ {
+ uint16_t* d_save = d;
+ const uint16_t* s_save = s;
+ int w = w8;
+
+ while ( w-- )
+ {
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+
+ d[ 0 ] = *s;
+ d[ 1 ] = *s;
+ d[ 1024 ] = *s;
+ d[ 1025 ] = *s;
+ d += 2; s++;
+ }
+
+ d = d_save + 2048;
+ s = s_save + 1024; /* or 512? */
+ }
+}
#endif
static int disable_main_render;
num_vertexes++;
if(list_position >= list_end)
- break;
+ {
+ current_command = (u32)-1;
+ goto breakloop;
+ }
xy = *list_position;
if((xy & 0xF000F000) == 0x50005000)
num_vertexes++;
if(list_position >= list_end)
- break;
+ {
+ current_command = (u32)-1;
+ goto breakloop;
+ }
color = list_position[0];
if((color & 0xF000F000) == 0x50005000)
{
s16 viewport_start_x = list[0] & 0x3FF;
s16 viewport_start_y = (list[0] >> 10) & 0x1FF;
- u32 d;
+ u32 w;
+ s32 d;
if(viewport_start_x == psx_gpu->viewport_start_x &&
viewport_start_y == psx_gpu->viewport_start_y)
psx_gpu->saved_viewport_start_x = viewport_start_x;
psx_gpu->saved_viewport_start_y = viewport_start_y;
- d = (u32)psx_gpu->viewport_end_x - (u32)viewport_start_x + 1;
- if((u32)psx_gpu->enhancement_x_threshold - d <= 16)
+ w = (u32)psx_gpu->viewport_end_x - (u32)viewport_start_x + 1;
+ d = psx_gpu->enhancement_x_threshold - w;
+ if(-16 <= d && d <= 16)
{
update_enhancement_buf_table_from_x(psx_gpu,
- viewport_start_x, d);
+ viewport_start_x, w);
}
select_enhancement_buf(psx_gpu);
{
s16 viewport_end_x = list[0] & 0x3FF;
s16 viewport_end_y = (list[0] >> 10) & 0x1FF;
- u32 d;
+ u32 w;
+ s32 d;
if(viewport_end_x == psx_gpu->viewport_end_x &&
viewport_end_y == psx_gpu->viewport_end_y)
psx_gpu->saved_viewport_end_x = viewport_end_x;
psx_gpu->saved_viewport_end_y = viewport_end_y;
- d = (u32)viewport_end_x - (u32)psx_gpu->viewport_start_x + 1;
- if((u32)psx_gpu->enhancement_x_threshold - d <= 16)
+ w = (u32)viewport_end_x - (u32)psx_gpu->viewport_start_x + 1;
+ d = psx_gpu->enhancement_x_threshold - w;
+ if(-16 <= d && d <= 16)
{
update_enhancement_buf_table_from_x(psx_gpu,
- psx_gpu->viewport_start_x, d);
+ psx_gpu->viewport_start_x, w);
}
select_enhancement_buf(psx_gpu);
#endif /* PCSX */
-// vim:shiftwidth=2:expandtab
+// vim:ts=2:shiftwidth=2:expandtab