notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libretro: initialize blank memory card
[pcsx_rearmed.git]
/
plugins
/
gpu_neon
/
psx_gpu
/
psx_gpu_arm_neon.S
diff --git
a/plugins/gpu_neon/psx_gpu/psx_gpu_arm_neon.S
b/plugins/gpu_neon/psx_gpu/psx_gpu_arm_neon.S
index
085e11b
..
344331d
100644
(file)
--- a/
plugins/gpu_neon/psx_gpu/psx_gpu_arm_neon.S
+++ b/
plugins/gpu_neon/psx_gpu/psx_gpu_arm_neon.S
@@
-20,6
+20,7
@@
#define RENDER_STATE_MASK_EVALUATE 0x20
#define RENDER_FLAGS_MODULATE_TEXELS 0x1
#define RENDER_FLAGS_BLEND 0x2
#define RENDER_STATE_MASK_EVALUATE 0x20
#define RENDER_FLAGS_MODULATE_TEXELS 0x1
#define RENDER_FLAGS_BLEND 0x2
+#define RENDER_INTERLACE_ENABLED 0x1
#include "psx_gpu_offsets.h"
#include "psx_gpu_offsets.h"
@@
-1175,6
+1176,10
@@
function(setup_spans_up_down)
ldrh temp, [ psx_gpu, #psx_gpu_num_spans_offset ]
add temp, temp, height_minor_b
ldrh temp, [ psx_gpu, #psx_gpu_num_spans_offset ]
add temp, temp, height_minor_b
+
+ cmp temp, #MAX_SPANS
+ beq 5f
+
strh temp, [ psx_gpu, #psx_gpu_num_spans_offset ]
2:
strh temp, [ psx_gpu, #psx_gpu_num_spans_offset ]
2:
@@
-1190,6
+1195,15
@@
function(setup_spans_up_down)
setup_spans_prologue_b()
bal 4b
setup_spans_prologue_b()
bal 4b
+ 5:
+ // FIXME: overflow corner case
+ sub temp, temp, height_minor_b
+ bics height_minor_b, #3
+ add temp, temp, height_minor_b
+ strh temp, [ psx_gpu, #psx_gpu_num_spans_offset ]
+ bne 2b
+ bal 1b
+
.pool
#undef span_uvrg_offset
.pool
#undef span_uvrg_offset
@@
-3392,10
+3406,12
@@
function(shade_blocks_textured_unmodulated_direct)
[ draw_mask_bits_ptr, :16 ], c_64
vbif.u16 fb_pixels, pixels, draw_mask_combined
[ draw_mask_bits_ptr, :16 ], c_64
vbif.u16 fb_pixels, pixels, draw_mask_combined
- vld1.u32 { pixels }, [ block_ptr_load, :128 ], c_64
-
sub fb_ptr_cmp, fb_ptr_next, fb_ptr
sub fb_ptr_cmp, fb_ptr_next, fb_ptr
+ pld [ fb_ptr_next, #64 ]
+
add fb_ptr_cmp, fb_ptr_cmp, #14
add fb_ptr_cmp, fb_ptr_cmp, #14
+ vld1.u32 { pixels }, [ block_ptr_load, :128 ], c_64
+
cmp fb_ptr_cmp, #28
bls 4f
cmp fb_ptr_cmp, #28
bls 4f
@@
-3754,11
+3770,15
@@
function(blend_blocks_textured_add_##mask_evaluate) \
vorr.u16 blend_pixels, fb_pixels_rb, fb_pixels_g; \
vand.u16 pixels_mg, pixels, d128_0x83E0; \
\
vorr.u16 blend_pixels, fb_pixels_rb, fb_pixels_g; \
vand.u16 pixels_mg, pixels, d128_0x83E0; \
\
-
vbit.u16 blend_pixels, fb_pixels, draw_mask;
\
-
vld1.u32 { draw_mask }, [ draw_mask_ptr, :128 ], c_64;
\
+
sub fb_ptr_cmp, fb_ptr_next, fb_ptr;
\
+
pld [ fb_ptr_next, #64 ];
\
\
sub fb_ptr_cmp, fb_ptr_next, fb_ptr; \
\
sub fb_ptr_cmp, fb_ptr_next, fb_ptr; \
+ vbit.u16 blend_pixels, fb_pixels, draw_mask; \
+ \
add fb_ptr_cmp, fb_ptr_cmp, #14; \
add fb_ptr_cmp, fb_ptr_cmp, #14; \
+ vld1.u32 { draw_mask }, [ draw_mask_ptr, :128 ], c_64; \
+ \
cmp fb_ptr_cmp, #28; \
bls 2f; \
\
cmp fb_ptr_cmp, #28; \
bls 2f; \
\
@@
-4917,12
+4937,12
@@
setup_sprite_update_texture_8bpp_cache:
draw_mask_fb_ptr_left_b); \
\
add texture_block_ptr, texture_page_ptr, texture_block_ptr; \
draw_mask_fb_ptr_left_b); \
\
add texture_block_ptr, texture_page_ptr, texture_block_ptr; \
-
add fb_ptr, fb_ptr, #16*2;
\
+
pld [ fb_ptr, #2048 ];
\
\
vld1.u32 { texels }, [ texture_block_ptr, :64 ]; \
\
vld1.u32 { texels }, [ texture_block_ptr, :64 ]; \
-
vtbl.8 texels_low, { clut_low_a, clut_low_b }, texels;
\
+
add fb_ptr, fb_ptr, #16*2;
\
\
\
-
pld [ fb_ptr ];
\
+
vtbl.8 texels_low, { clut_low_a, clut_low_b }, texels;
\
vtbl.8 texels_high, { clut_high_a, clut_high_b }, texels; \
\
vzip.8 texels_low, texels_high; \
vtbl.8 texels_high, { clut_high_a, clut_high_b }, texels; \
\
vzip.8 texels_low, texels_high; \
@@
-4961,9
+4981,10
@@
setup_sprite_update_texture_8bpp_cache:
do_texture_block_16bpp_4x(fb_ptr2, draw_mask_fb_ptr_##edge##_a, \
draw_mask_fb_ptr_##edge##_b); \
\
do_texture_block_16bpp_4x(fb_ptr2, draw_mask_fb_ptr_##edge##_a, \
draw_mask_fb_ptr_##edge##_b); \
\
+ pld [ fb_ptr, #2048 ]; \
add fb_ptr, fb_ptr, #2048 * 2; \
add fb_ptr, fb_ptr, #2048 * 2; \
- subs sub_tile_height, sub_tile_height, #1; \
\
\
+ subs sub_tile_height, sub_tile_height, #1; \
bne 4b; \
\
ldr column_data, [sp], #8; /* fb_ptr2 */ \
bne 4b; \
\
ldr column_data, [sp], #8; /* fb_ptr2 */ \
@@
-4987,13
+5008,13
@@
setup_sprite_update_texture_8bpp_cache:
do_texture_block_8bpp_4x(fb_ptr2, draw_mask_fb_ptr_left_a, \
draw_mask_fb_ptr_left_b); \
\
do_texture_block_8bpp_4x(fb_ptr2, draw_mask_fb_ptr_left_a, \
draw_mask_fb_ptr_left_b); \
\
+ pld [ fb_ptr, #2048 ]; \
and texture_block_ptr, texture_block_ptr, texture_mask; \
\
add fb_ptr, fb_ptr, #16*2; \
add texture_block_ptr, texture_page_ptr, texture_block_ptr; \
\
vld1.u32 { texels }, [ texture_block_ptr, :64 ]; \
and texture_block_ptr, texture_block_ptr, texture_mask; \
\
add fb_ptr, fb_ptr, #16*2; \
add texture_block_ptr, texture_page_ptr, texture_block_ptr; \
\
vld1.u32 { texels }, [ texture_block_ptr, :64 ]; \
- pld [ fb_ptr ]; \
\
do_texture_block_8bpp_4x(fb_ptr2, draw_mask_fb_ptr_right_a, \
draw_mask_fb_ptr_right_b); \
\
do_texture_block_8bpp_4x(fb_ptr2, draw_mask_fb_ptr_right_a, \
draw_mask_fb_ptr_right_b); \
@@
-5022,6
+5043,7
@@
setup_sprite_update_texture_8bpp_cache:
add texture_block_ptr, texture_page_ptr, texture_block_ptr; \
vld1.u32 { texels }, [ texture_block_ptr, :64 ]; \
\
add texture_block_ptr, texture_page_ptr, texture_block_ptr; \
vld1.u32 { texels }, [ texture_block_ptr, :64 ]; \
\
+ pld [ fb_ptr, #2048 ]; \
do_texture_block_8bpp_4x(fb_ptr2, draw_mask_fb_ptr_##edge##_a, \
draw_mask_fb_ptr_##edge##_b); \
\
do_texture_block_8bpp_4x(fb_ptr2, draw_mask_fb_ptr_##edge##_a, \
draw_mask_fb_ptr_##edge##_b); \
\
@@
-5736,6
+5758,8
@@
function(setup_sprite_untextured)
ldrh r12, [ psx_gpu, #psx_gpu_render_state_offset ]
tst r12, #(RENDER_STATE_MASK_EVALUATE | RENDER_FLAGS_MODULATE_TEXELS \
| RENDER_FLAGS_BLEND)
ldrh r12, [ psx_gpu, #psx_gpu_render_state_offset ]
tst r12, #(RENDER_STATE_MASK_EVALUATE | RENDER_FLAGS_MODULATE_TEXELS \
| RENDER_FLAGS_BLEND)
+ ldreqb r12, [ psx_gpu, #psx_gpu_render_mode_offset ]
+ tsteq r12, #RENDER_INTERLACE_ENABLED
beq setup_sprite_untextured_simple
stmdb sp!, { r4 - r11, r14 }
beq setup_sprite_untextured_simple
stmdb sp!, { r4 - r11, r14 }