X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fgpu_neon%2Fpsx_gpu%2Fpsx_gpu.h;h=4eb622dfbc2a04d5b9b6041518c5ee4f51c45229;hb=39db3a96ec328dfc3c6f228605b6edb27b92dd68;hp=1eaa99a4b0aad0719cb664b263f2c39f4adaef45;hpb=ed0fd81dfdb63fe5941b9010ace353719168d3ae;p=pcsx_rearmed.git diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu.h b/plugins/gpu_neon/psx_gpu/psx_gpu.h index 1eaa99a4..4eb622df 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu.h +++ b/plugins/gpu_neon/psx_gpu/psx_gpu.h @@ -15,6 +15,16 @@ #ifndef PSX_GPU_H #define PSX_GPU_H +#define MAX_SPANS 512 +#define MAX_BLOCKS 64 +#define MAX_BLOCKS_PER_ROW 128 + +#define SPAN_DATA_BLOCKS_SIZE 32 + +#ifndef __ASSEMBLER__ + +#include "vector_types.h" + typedef enum { PRIMITIVE_TYPE_TRIANGLE = 0, @@ -67,7 +77,7 @@ typedef struct u16 y; } edge_data_struct; -// 64 bytes total +// 64 (72) bytes total typedef struct { // 16 bytes @@ -91,7 +101,7 @@ typedef struct vec_8x16u pixels; }; - // 8 bytes + // 8 (16) bytes u32 draw_mask_bits; u16 *fb_ptr; @@ -99,12 +109,6 @@ typedef struct vec_8x16u dither_offsets; } block_struct; -#define MAX_SPANS 512 -#define MAX_BLOCKS 64 -#define MAX_BLOCKS_PER_ROW 128 - -#define SPAN_DATA_BLOCKS_SIZE 32 - typedef struct render_block_handler_struct render_block_handler_struct; typedef struct @@ -183,18 +187,22 @@ typedef struct u32 *reciprocal_table_ptr; // enhancement stuff - u16 *enhancement_buf_ptr; - u16 *enhancement_current_buf_ptr; - u32 enhancement_x_threshold; + u16 *enhancement_buf_ptr; // main alloc + u16 *enhancement_current_buf_ptr; // offset into above, 4 bufs + u32 saved_hres; s16 saved_viewport_start_x; s16 saved_viewport_start_y; s16 saved_viewport_end_x; s16 saved_viewport_end_y; - u8 enhancement_buf_by_x16[64]; + u8 enhancement_buf_by_x16[64]; // 0-3 specifying which buf + u16 enhancement_buf_start[4]; // x pos where buf[n] begins + + u16 enhancement_scanout_x[4]; + u16 enhancement_scanout_select; // Align up to 64 byte boundary to keep the upcoming buffers cache line // aligned, also make reachable with single immediate addition - u8 reserved_a[160]; + u8 reserved_a[142]; // 8KB block_struct blocks[MAX_BLOCKS_PER_ROW]; @@ -222,6 +230,8 @@ typedef struct __attribute__((aligned(16))) s16 x; s16 y; + + u32 padding; } vertex_struct; void render_block_fill(psx_gpu_struct *psx_gpu, u32 color, u32 x, u32 y, @@ -240,6 +250,7 @@ void render_line(psx_gpu_struct *gpu, vertex_struct *vertexes, u32 flags, u32 texture_region_mask(s32 x1, s32 y1, s32 x2, s32 y2); +void update_texture_8bpp_cache(psx_gpu_struct *psx_gpu); void flush_render_block_buffer(psx_gpu_struct *psx_gpu); void initialize_psx_gpu(psx_gpu_struct *psx_gpu, u16 *vram); @@ -247,5 +258,9 @@ u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command); void triangle_benchmark(psx_gpu_struct *psx_gpu); -#endif +void compute_all_gradients(psx_gpu_struct * __restrict__ psx_gpu, + const vertex_struct * __restrict__ a, const vertex_struct * __restrict__ b, + const vertex_struct * __restrict__ c); +#endif // __ASSEMBLER__ +#endif // PSX_GPU_H