X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpu_neon%2Fpsx_gpu%2Fpsx_gpu.h;h=f8547f33d14965283aaed13b69022ffbc3074d85;hp=15d9469696b43ac5172893af87d59d272fcba638;hb=3b3dee71d84bbbb376548d794b7a11cd38833cf0;hpb=75e28f62b2a50044b58075d63d207409e0148409 diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu.h b/plugins/gpu_neon/psx_gpu/psx_gpu.h index 15d94696..f8547f33 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu.h +++ b/plugins/gpu_neon/psx_gpu/psx_gpu.h @@ -53,6 +53,12 @@ typedef enum RENDER_STATE_MASK_EVALUATE = 0x20, } render_state_enum; +typedef enum +{ + RENDER_INTERLACE_ENABLED = 0x1, + RENDER_INTERLACE_ODD = 0x2, +} render_mode_enum; + typedef struct { u16 left_x; @@ -116,7 +122,6 @@ typedef struct vec_4x32u g_block_span; vec_4x32u b_block_span; - // 72 bytes u32 b; u32 b_dy; @@ -130,28 +135,23 @@ typedef struct u32 dirty_textures_8bpp_alternate_mask; u32 triangle_color; - u32 primitive_color; - u32 dither_table[4]; + u32 uvrgb_phase; + struct render_block_handler_struct *render_block_handler; void *texture_page_ptr; + void *texture_page_base; u16 *clut_ptr; u16 *vram_ptr; + u16 *vram_out_ptr; - // 26 bytes u16 render_state_base; u16 render_state; u16 num_spans; u16 num_blocks; - s16 offset_x; - s16 offset_y; - - u16 clut_settings; - u16 texture_settings; - s16 viewport_start_x; s16 viewport_start_y; s16 viewport_end_x; @@ -159,7 +159,6 @@ typedef struct u16 mask_msb; - // 8 bytes u8 triangle_winding; u8 display_area_draw_enable; @@ -173,10 +172,26 @@ typedef struct u8 texture_window_y; u8 primitive_type; + u8 render_mode; + + s16 offset_x; + s16 offset_y; + + u16 clut_settings; + u16 texture_settings; + + // enhancement stuff + u16 *enhancement_buf_ptr; + u16 *enhancement_current_buf_ptr; + u32 enhancement_x_threshold; + s16 saved_viewport_start_x; + s16 saved_viewport_start_y; + s16 saved_viewport_end_x; + s16 saved_viewport_end_y; // Align up to 64 byte boundary to keep the upcoming buffers cache line - // aligned - u8 reserved_a[1]; + // aligned, also make reachable with single immediate addition + u8 reserved_a[228]; // 8KB block_struct blocks[MAX_BLOCKS_PER_ROW]; @@ -186,17 +201,9 @@ typedef struct edge_data_struct span_edge_data[MAX_SPANS]; u32 span_b_offset[MAX_SPANS]; - u16 _vram[1024 * 512]; u8 texture_4bpp_cache[32][256 * 256]; u8 texture_8bpp_even_cache[16][256 * 256]; u8 texture_8bpp_odd_cache[16][256 * 256]; - - u32 pixel_count_mode; - u32 pixel_compare_mode; - - u8 *vram_pixel_counts_a; - u8 *vram_pixel_counts_b; - u16 *compare_vram; } psx_gpu_struct; typedef struct __attribute__((aligned(16))) @@ -226,14 +233,14 @@ void render_triangle(psx_gpu_struct *psx_gpu, vertex_struct *vertexes, void render_sprite(psx_gpu_struct *psx_gpu, s32 x, s32 y, u32 u, u32 v, s32 width, s32 height, u32 flags, u32 color); void render_line(psx_gpu_struct *gpu, vertex_struct *vertexes, u32 flags, - u32 color); + u32 color, int double_resolution); u32 texture_region_mask(s32 x1, s32 y1, s32 x2, s32 y2); void flush_render_block_buffer(psx_gpu_struct *psx_gpu); -void initialize_psx_gpu(psx_gpu_struct *psx_gpu); -void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size); +void initialize_psx_gpu(psx_gpu_struct *psx_gpu, u16 *vram); +u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command); void triangle_benchmark(psx_gpu_struct *psx_gpu);