X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fgpu_neon%2Fpsx_gpu%2Fpsx_gpu_4x.c;h=d7ec340959439937f86232a152c1b9bac1207405;hb=0b4038f8edd327a3a9a2fbdefbc25ece921bc2ab;hp=83c6680f4fa97f30e125ebe9b7acb15d333050fa;hpb=7956599fa5f666016f71870d9889748c97839041;p=pcsx_rearmed.git diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu_4x.c b/plugins/gpu_neon/psx_gpu/psx_gpu_4x.c index 83c6680f..d7ec3409 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu_4x.c +++ b/plugins/gpu_neon/psx_gpu/psx_gpu_4x.c @@ -1,8 +1,26 @@ +#define select_enhancement_buf_index(psx_gpu, x) \ + ((psx_gpu)->enhancement_buf_by_x16[(u32)(x) / \ + (1024u / sizeof((psx_gpu)->enhancement_buf_by_x16))]) + #define select_enhancement_buf_ptr(psx_gpu, x) \ ((psx_gpu)->enhancement_buf_ptr + \ - ((psx_gpu)->enhancement_buf_by_x16[(x) / 16] << 20)) + (select_enhancement_buf_index(psx_gpu, x) << 20)) + +#if !defined(NEON_BUILD) || defined(SIMD_BUILD) + +#ifndef zip_4x32b + +#define vector_cast(vec_to, source) source + +#define zip_4x32b(dest, source_a, source_b) { \ + u32 _i; for(_i = 0; _i < 4; _i++) { \ + (dest).e[_i * 2 + 0] = (source_a).e[_i]; \ + (dest).e[_i * 2 + 1] = (source_b).e[_i]; \ + } \ +} + +#endif -#ifndef NEON_BUILD void setup_sprite_16bpp_4x(psx_gpu_struct *psx_gpu, s32 x, s32 y, s32 u, s32 v, s32 width, s32 height, u32 color) { @@ -56,7 +74,8 @@ void setup_sprite_16bpp_4x(psx_gpu_struct *psx_gpu, s32 x, s32 y, s32 u, texture_block_ptr = texture_page_ptr + (texture_offset_base & texture_mask); - load_128b(texels, texture_block_ptr); + //load_128b(texels, texture_block_ptr); + texels = *(vec_8x16u *)texture_block_ptr; zip_4x32b(vector_cast(vec_4x32u, texels_wide), texels.low, texels.low); block->texels = texels_wide; @@ -117,7 +136,8 @@ void setup_sprite_16bpp_4x(psx_gpu_struct *psx_gpu, s32 x, s32 y, s32 u, texture_block_ptr = texture_page_ptr + (texture_offset & texture_mask); - load_128b(texels, texture_block_ptr); + //load_128b(texels, texture_block_ptr); + texels = *(vec_8x16u *)texture_block_ptr; zip_4x32b(vector_cast(vec_4x32u, texels_wide), texels.low, texels.low); block->texels = texels_wide; @@ -147,7 +167,8 @@ void setup_sprite_16bpp_4x(psx_gpu_struct *psx_gpu, s32 x, s32 y, s32 u, while(blocks_remaining) { texture_block_ptr = texture_page_ptr + (texture_offset & texture_mask); - load_128b(texels, texture_block_ptr); + //load_128b(texels, texture_block_ptr); + texels = *(vec_8x16u *)texture_block_ptr; zip_4x32b(vector_cast(vec_4x32u, texels_wide), texels.low, texels.low); block->texels = texels_wide; @@ -178,7 +199,8 @@ void setup_sprite_16bpp_4x(psx_gpu_struct *psx_gpu, s32 x, s32 y, s32 u, } texture_block_ptr = texture_page_ptr + (texture_offset & texture_mask); - load_128b(texels, texture_block_ptr); + //load_128b(texels, texture_block_ptr); + texels = *(vec_8x16u *)texture_block_ptr; zip_4x32b(vector_cast(vec_4x32u, texels_wide), texels.low, texels.low); block->texels = texels_wide; @@ -291,7 +313,7 @@ static void setup_sprite_untextured_4x(psx_gpu_struct *psx_gpu, s32 x, s32 y, render_sprite_blocks_switch_block_texture_mode_4x(4bpp), \ render_sprite_blocks_switch_block_texture_mode_4x(8bpp), \ render_sprite_blocks_switch_block_texture_mode_4x(16bpp), \ - render_sprite_blocks_switch_block_texture_mode_4x(4bpp) \ + render_sprite_blocks_switch_block_texture_mode_4x(16bpp) \ render_block_handler_struct render_sprite_block_handlers_4x[] =