mirror of
https://github.com/libretro/RetroArch
synced 2025-02-06 18:40:49 +00:00
commit
affd603251
@ -211,7 +211,7 @@ else ifeq ($(platform), vita)
|
|||||||
WANT_ZLIB := 1
|
WANT_ZLIB := 1
|
||||||
INCLUDE += -Ideps/libvita2d/include
|
INCLUDE += -Ideps/libvita2d/include
|
||||||
INCLUDE += -Ideps/zlib
|
INCLUDE += -Ideps/zlib
|
||||||
PLATCFLAGS := -mthumb -mfloat-abi=hard -fsingle-precision-constant \
|
PLATCFLAGS := -marm -mfloat-abi=hard -fsingle-precision-constant \
|
||||||
-mword-relocations -fno-unwind-tables -fno-asynchronous-unwind-tables -ftree-vectorize -fno-optimize-sibling-calls
|
-mword-relocations -fno-unwind-tables -fno-asynchronous-unwind-tables -ftree-vectorize -fno-optimize-sibling-calls
|
||||||
LIBS += -lSceKernel_stub -lSceDisplay_stub -lSceGxm_stub -lSceNet_stub -lSceNetCtl_stub\
|
LIBS += -lSceKernel_stub -lSceDisplay_stub -lSceGxm_stub -lSceNet_stub -lSceNetCtl_stub\
|
||||||
-lSceSysmodule_stub -lSceCtrl_stub -lSceTouch_stub -lSceAudio_stub -lSceFiber_stub\
|
-lSceSysmodule_stub -lSceCtrl_stub -lSceTouch_stub -lSceAudio_stub -lSceFiber_stub\
|
||||||
@ -226,6 +226,8 @@ else ifeq ($(platform), vita)
|
|||||||
deps/libvita2d/shader/compiled/texture_f_gxp.o \
|
deps/libvita2d/shader/compiled/texture_f_gxp.o \
|
||||||
deps/libvita2d/shader/compiled/texture_tint_f_gxp.o
|
deps/libvita2d/shader/compiled/texture_tint_f_gxp.o
|
||||||
PLATOBJS += libretro-common/conversion/s16_to_float_neon.o \
|
PLATOBJS += libretro-common/conversion/s16_to_float_neon.o \
|
||||||
|
libretro-common/conversion/float_to_s16_neon.o \
|
||||||
|
memory/neon/memcpy-neon.o \
|
||||||
audio/drivers_resampler/sinc_resampler_neon.o \
|
audio/drivers_resampler/sinc_resampler_neon.o \
|
||||||
audio/drivers_resampler/cc_resampler_neon.o
|
audio/drivers_resampler/cc_resampler_neon.o
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ static void process_sinc(rarch_sinc_resampler_t *resamp, float *out_buffer)
|
|||||||
/* movehl { X, R, X, L } == { X, R, X, R } */
|
/* movehl { X, R, X, L } == { X, R, X, R } */
|
||||||
_mm_store_ss(out_buffer + 1, _mm_movehl_ps(sum, sum));
|
_mm_store_ss(out_buffer + 1, _mm_movehl_ps(sum, sum));
|
||||||
}
|
}
|
||||||
#elif defined(__ARM_NEON__) && !defined(VITA)
|
#elif defined(__ARM_NEON__)
|
||||||
|
|
||||||
#if SINC_COEFF_LERP
|
#if SINC_COEFF_LERP
|
||||||
#error "NEON asm does not support SINC lerp."
|
#error "NEON asm does not support SINC lerp."
|
||||||
@ -437,7 +437,7 @@ static void *resampler_sinc_new(const struct resampler_config *config,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Be SIMD-friendly. */
|
/* Be SIMD-friendly. */
|
||||||
#if (defined(__AVX__) && ENABLE_AVX) || (defined(__ARM_NEON__)&& !defined(VITA))
|
#if (defined(__AVX__) && ENABLE_AVX) || (defined(__ARM_NEON__))
|
||||||
re->taps = (re->taps + 7) & ~7;
|
re->taps = (re->taps + 7) & ~7;
|
||||||
#else
|
#else
|
||||||
re->taps = (re->taps + 3) & ~3;
|
re->taps = (re->taps + 3) & ~3;
|
||||||
@ -460,7 +460,7 @@ static void *resampler_sinc_new(const struct resampler_config *config,
|
|||||||
init_sinc_table(re, cutoff, re->phase_table,
|
init_sinc_table(re, cutoff, re->phase_table,
|
||||||
1 << PHASE_BITS, re->taps, SINC_COEFF_LERP);
|
1 << PHASE_BITS, re->taps, SINC_COEFF_LERP);
|
||||||
|
|
||||||
#if defined(__ARM_NEON__) && !defined(VITA)
|
#if defined(__ARM_NEON__)
|
||||||
process_sinc_func = mask & RESAMPLER_SIMD_NEON
|
process_sinc_func = mask & RESAMPLER_SIMD_NEON
|
||||||
? process_sinc_neon : process_sinc_C;
|
? process_sinc_neon : process_sinc_C;
|
||||||
#endif
|
#endif
|
||||||
|
4
deps/libvita2d/source/vita2d_texture.c
vendored
4
deps/libvita2d/source/vita2d_texture.c
vendored
@ -66,7 +66,7 @@ vita2d_texture *vita2d_create_empty_texture_format(unsigned int w, unsigned int
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Clear the texture */
|
/* Clear the texture */
|
||||||
memset(texture_data, 0, tex_size);
|
//memset(texture_data, 0, tex_size);
|
||||||
|
|
||||||
/* Create the gxm texture */
|
/* Create the gxm texture */
|
||||||
sceGxmTextureInitLinear(
|
sceGxmTextureInitLinear(
|
||||||
@ -94,7 +94,7 @@ vita2d_texture *vita2d_create_empty_texture_format(unsigned int w, unsigned int
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(texture_palette, 0, pal_size);
|
//memset(texture_palette, 0, pal_size);
|
||||||
|
|
||||||
sceGxmTextureSetPalette(&texture->gxm_tex, texture_palette);
|
sceGxmTextureSetPalette(&texture->gxm_tex, texture_palette);
|
||||||
} else {
|
} else {
|
||||||
|
@ -33,6 +33,9 @@
|
|||||||
#include "../../runloop.h"
|
#include "../../runloop.h"
|
||||||
#include "../video_coord_array.h"
|
#include "../video_coord_array.h"
|
||||||
|
|
||||||
|
extern void *memcpy_neon(void *dst, const void *src, size_t n);
|
||||||
|
|
||||||
|
|
||||||
static void vita2d_gfx_set_viewport(void *data, unsigned viewport_width,
|
static void vita2d_gfx_set_viewport(void *data, unsigned viewport_width,
|
||||||
unsigned viewport_height, bool force_full, bool allow_rotate);
|
unsigned viewport_height, bool force_full, bool allow_rotate);
|
||||||
|
|
||||||
@ -139,7 +142,7 @@ static bool vita2d_gfx_frame(void *data, const void *frame,
|
|||||||
if (frame)
|
if (frame)
|
||||||
{
|
{
|
||||||
if(!(vita->texture&&vita2d_texture_get_datap(vita->texture)==frame)){
|
if(!(vita->texture&&vita2d_texture_get_datap(vita->texture)==frame)){
|
||||||
unsigned i, j;
|
unsigned i;
|
||||||
unsigned int stride;
|
unsigned int stride;
|
||||||
|
|
||||||
if ((width != vita->width || height != vita->height) && vita->texture)
|
if ((width != vita->width || height != vita->height) && vita->texture)
|
||||||
@ -167,8 +170,7 @@ static bool vita2d_gfx_frame(void *data, const void *frame,
|
|||||||
const uint32_t *frame32 = frame;
|
const uint32_t *frame32 = frame;
|
||||||
|
|
||||||
for (i = 0; i < height; i++)
|
for (i = 0; i < height; i++)
|
||||||
for (j = 0; j < width; j++)
|
memcpy_neon(&tex32[i*stride],&frame32[i*pitch],pitch*sizeof(uint32_t));
|
||||||
tex32[j + i*stride] = frame32[j + i*pitch];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -178,8 +180,7 @@ static bool vita2d_gfx_frame(void *data, const void *frame,
|
|||||||
const uint16_t *frame16 = frame;
|
const uint16_t *frame16 = frame;
|
||||||
|
|
||||||
for (i = 0; i < height; i++)
|
for (i = 0; i < height; i++)
|
||||||
for (j = 0; j < width; j++)
|
memcpy_neon(&tex16[i*stride],&frame16[i*pitch],width*sizeof(uint16_t));
|
||||||
tex16[j + i*stride] = frame16[j + i*pitch];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -700,7 +701,7 @@ static void vita_set_texture_enable(void *data, bool state, bool full_screen)
|
|||||||
static uintptr_t vita_load_texture(void *video_data, void *data,
|
static uintptr_t vita_load_texture(void *video_data, void *data,
|
||||||
bool threaded, enum texture_filter_type filter_type)
|
bool threaded, enum texture_filter_type filter_type)
|
||||||
{
|
{
|
||||||
unsigned int stride, pitch, j, k;
|
unsigned int stride, pitch, j;
|
||||||
struct texture_image *image = (struct texture_image*)data;
|
struct texture_image *image = (struct texture_image*)data;
|
||||||
struct vita2d_texture *texture = vita2d_create_empty_texture_format(image->width,
|
struct vita2d_texture *texture = vita2d_create_empty_texture_format(image->width,
|
||||||
image->height,SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ARGB);
|
image->height,SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ARGB);
|
||||||
@ -717,8 +718,7 @@ static uintptr_t vita_load_texture(void *video_data, void *data,
|
|||||||
const uint32_t *frame32 = image->pixels;
|
const uint32_t *frame32 = image->pixels;
|
||||||
pitch = image->width;
|
pitch = image->width;
|
||||||
for (j = 0; j < image->height; j++)
|
for (j = 0; j < image->height; j++)
|
||||||
for (k = 0; k < image->width; k++)
|
memcpy_neon(&tex32[j*stride],&frame32[j*pitch],pitch*sizeof(uint32_t));
|
||||||
tex32[k + j*stride] = frame32[k + j*pitch];
|
|
||||||
|
|
||||||
return (uintptr_t)texture;
|
return (uintptr_t)texture;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ void convert_float_to_s16_altivec(int16_t *out,
|
|||||||
}
|
}
|
||||||
convert_float_to_s16_C(out, in, samples_in);
|
convert_float_to_s16_C(out, in, samples_in);
|
||||||
}
|
}
|
||||||
#elif defined(__ARM_NEON__) && !defined(VITA)
|
#elif defined(__ARM_NEON__)
|
||||||
void convert_float_s16_asm(int16_t *out, const float *in, size_t samples);
|
void convert_float_s16_asm(int16_t *out, const float *in, size_t samples);
|
||||||
/**
|
/**
|
||||||
* convert_float_to_s16_neon:
|
* convert_float_to_s16_neon:
|
||||||
@ -210,7 +210,7 @@ void convert_float_to_s16_init_simd(void)
|
|||||||
unsigned cpu = cpu_features_get();
|
unsigned cpu = cpu_features_get();
|
||||||
|
|
||||||
(void)cpu;
|
(void)cpu;
|
||||||
#if defined(__ARM_NEON__) && !defined(VITA)
|
#if defined(__ARM_NEON__)
|
||||||
convert_float_to_s16_arm = (cpu & RETRO_SIMD_NEON) ?
|
convert_float_to_s16_arm = (cpu & RETRO_SIMD_NEON) ?
|
||||||
convert_float_to_s16_neon : convert_float_to_s16_C;
|
convert_float_to_s16_neon : convert_float_to_s16_C;
|
||||||
#endif
|
#endif
|
||||||
|
@ -122,7 +122,7 @@ void convert_s16_to_float_altivec(float *out,
|
|||||||
convert_s16_to_float_C(out, in, samples_in, gain);
|
convert_s16_to_float_C(out, in, samples_in, gain);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__ARM_NEON__) && !defined(VITA)
|
#elif defined(__ARM_NEON__)
|
||||||
/* Avoid potential hard-float/soft-float ABI issues. */
|
/* Avoid potential hard-float/soft-float ABI issues. */
|
||||||
void convert_s16_float_asm(float *out, const int16_t *in,
|
void convert_s16_float_asm(float *out, const int16_t *in,
|
||||||
size_t samples, const float *gain);
|
size_t samples, const float *gain);
|
||||||
@ -235,7 +235,7 @@ void convert_s16_to_float_init_simd(void)
|
|||||||
unsigned cpu = cpu_features_get();
|
unsigned cpu = cpu_features_get();
|
||||||
|
|
||||||
(void)cpu;
|
(void)cpu;
|
||||||
#if defined(__ARM_NEON__) && !defined(VITA)
|
#if defined(__ARM_NEON__)
|
||||||
convert_s16_to_float_arm = (cpu & RETRO_SIMD_NEON) ?
|
convert_s16_to_float_arm = (cpu & RETRO_SIMD_NEON) ?
|
||||||
convert_s16_to_float_neon : convert_s16_to_float_C;
|
convert_s16_to_float_neon : convert_s16_to_float_C;
|
||||||
#endif
|
#endif
|
||||||
|
@ -74,7 +74,7 @@ void convert_float_to_s16_SSE2(int16_t *out,
|
|||||||
**/
|
**/
|
||||||
void convert_float_to_s16_altivec(int16_t *out,
|
void convert_float_to_s16_altivec(int16_t *out,
|
||||||
const float *in, size_t samples);
|
const float *in, size_t samples);
|
||||||
#elif defined(__ARM_NEON__) && !defined(VITA)
|
#elif defined(__ARM_NEON__)
|
||||||
#define convert_float_to_s16 convert_float_to_s16_arm
|
#define convert_float_to_s16 convert_float_to_s16_arm
|
||||||
|
|
||||||
void (*convert_float_to_s16_arm)(int16_t *out,
|
void (*convert_float_to_s16_arm)(int16_t *out,
|
||||||
|
@ -65,7 +65,7 @@ void convert_s16_to_float_SSE2(float *out,
|
|||||||
void convert_s16_to_float_altivec(float *out,
|
void convert_s16_to_float_altivec(float *out,
|
||||||
const int16_t *in, size_t samples, float gain);
|
const int16_t *in, size_t samples, float gain);
|
||||||
|
|
||||||
#elif defined(__ARM_NEON__) && !defined(VITA)
|
#elif defined(__ARM_NEON__)
|
||||||
#define convert_s16_to_float convert_s16_to_float_arm
|
#define convert_s16_to_float convert_s16_to_float_arm
|
||||||
|
|
||||||
void (*convert_s16_to_float_arm)(float *out,
|
void (*convert_s16_to_float_arm)(float *out,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user