#ifndef NDEBUG
#define setup_spans_debug_check(span_edge_data_element) \
- if (&span_edge_data_element - psx_gpu->span_edge_data < psx_gpu->num_spans) \
+{ \
+ u32 _num_spans = &span_edge_data_element - psx_gpu->span_edge_data; \
+ if (_num_spans > MAX_SPANS) \
+ *(int *)0 = 1; \
+ if (_num_spans < psx_gpu->num_spans) \
{ \
if(span_edge_data_element.num_blocks > MAX_BLOCKS_PER_ROW) \
*(int *)0 = 1; \
if(span_edge_data_element.y > 2048) \
*(int *)0 = 1; \
} \
+} \
#else
#define setup_spans_debug_check(span_edge_data_element) \
y_x4.e[3] = y_a + 3;
setup_spans_adjust_edges_alternate_no(index_left, index_right);
+ // FIXME: overflow corner case
+ if(psx_gpu->num_spans + height_minor_b == MAX_SPANS)
+ height_minor_b &= ~3;
+
psx_gpu->num_spans += height_minor_b;
- do
+ while(height_minor_b > 0)
{
setup_spans_set_x4(none, down, no);
height_minor_b -= 4;
- } while(height_minor_b > 0);
+ }
}
left_split_triangles++;
s32 v, s32 width, s32 height, u32 color)
{
if((psx_gpu->render_state & (RENDER_STATE_MASK_EVALUATE |
- RENDER_FLAGS_MODULATE_TEXELS | RENDER_FLAGS_BLEND)) == 0)
+ RENDER_FLAGS_MODULATE_TEXELS | RENDER_FLAGS_BLEND)) == 0 &&
+ (psx_gpu->render_mode & RENDER_INTERLACE_ENABLED) == 0)
{
setup_sprite_untextured_simple(psx_gpu, x, y, u, v, width, height, color);
return;
}
#define draw_pixel_line_mask_evaluate_yes() \
- if(*vram_ptr & 0x8000) \
+ if((*vram_ptr & 0x8000) == 0) \
#define draw_pixel_line_mask_evaluate_no() \
memset(psx_gpu->vram_ptr, 0, sizeof(u16) * 1024 * 512);
initialize_reciprocal_table();
+ psx_gpu->reciprocal_table_ptr = reciprocal_table;
// 00 01 10 11
// 00 0 4 1 5