Skip to content

Commit 07aa882

Browse files
committed
Merge branch 'master' into libretro
2 parents 568ad74 + 6baeda4 commit 07aa882

23 files changed

+1544
-493
lines changed

Makefile

+4-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ plugins/dfsound/out.o: CFLAGS += -DHAVE_LIBRETRO
229229
endif
230230

231231
# builtin gpu
232-
OBJS += plugins/gpulib/gpu.o plugins/gpulib/vout_pl.o
232+
OBJS += plugins/gpulib/gpu.o plugins/gpulib/vout_pl.o plugins/gpulib/prim.o
233233
ifeq "$(BUILTIN_GPU)" "neon"
234234
CFLAGS += -DGPU_NEON
235235
OBJS += plugins/gpu_neon/psx_gpu_if.o
@@ -272,9 +272,12 @@ OBJS += plugins/gpu_unai/old/if.o
272272
else
273273
CFLAGS += -DGPU_UNAI_NO_OLD
274274
endif
275+
plugins/gpu_unai/gpulib_if.o: plugins/gpu_unai/*.h
275276
plugins/gpu_unai/gpulib_if.o: CFLAGS += -DREARMED -DUSE_GPULIB=1
277+
ifneq ($(DEBUG), 1)
276278
plugins/gpu_unai/gpulib_if.o \
277279
plugins/gpu_unai/old/if.o: CFLAGS += -O3
280+
endif
278281
CC_LINK = $(CXX)
279282
endif
280283

Makefile.libretro

-1
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@ else ifeq ($(platform), ctr)
356356
TARGET := $(TARGET_NAME)_libretro_ctr.a
357357
CFLAGS += -DARM11 -D_3DS -D__3DS__
358358
CFLAGS += -DGPU_UNAI_USE_FLOATMATH -DGPU_UNAI_USE_FLOAT_DIV_MULTINV
359-
CFLAGS += -DGPU_UNAI_USE_FLOAT_DIV_MULTINV_FOR_ONE # needed on some compilers?
360359
CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp -mtp=soft
361360
CFLAGS += -mword-relocations
362361
CFLAGS += -fomit-frame-pointer

frontend/cspace_arm.S

+19-11
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@
2020
orr \rn, r12, lsl #6
2121
.endm
2222

23+
.macro bgr555_to_rgb565_one_i rn1 rn2
24+
and r12, lr, \rn1, lsr #5
25+
and \rn1,lr, \rn1, lsr #10
26+
orr r12, r11, lsl #5
27+
and r11, lr, \rn2
28+
orr \rn1,r12, lsl #6
29+
.endm
30+
2331
.macro pld_ reg offs=#0
2432
#ifdef HAVE_ARMV6
2533
pld [\reg, \offs]
2634
#endif
2735
.endm
2836

2937
FUNCTION(bgr555_to_rgb565): @ void *dst, const void *src, int bytes
30-
pld_ r1
3138
push {r4-r11,lr}
3239
mov lr, #0x001f
3340
subs r2, #4*8
@@ -43,16 +50,17 @@ FUNCTION(bgr555_to_rgb565): @ void *dst, const void *src, int bytes
4350
0:
4451
ldmia r1!, {r3-r10}
4552
subs r2, #4*8
46-
bgr555_to_rgb565_one r3
47-
48-
pld_ r1, #32*2
49-
bgr555_to_rgb565_one r4
50-
bgr555_to_rgb565_one r5
51-
bgr555_to_rgb565_one r6
52-
bgr555_to_rgb565_one r7
53-
bgr555_to_rgb565_one r8
54-
bgr555_to_rgb565_one r9
55-
bgr555_to_rgb565_one r10
53+
bic r12, r1, #0x1f
54+
pld_ r12, #32*1
55+
and r11, lr, r3
56+
bgr555_to_rgb565_one_i r3 r4
57+
bgr555_to_rgb565_one_i r4 r5
58+
bgr555_to_rgb565_one_i r5 r6
59+
bgr555_to_rgb565_one_i r6 r7
60+
bgr555_to_rgb565_one_i r7 r8
61+
bgr555_to_rgb565_one_i r8 r9
62+
bgr555_to_rgb565_one_i r9 r10
63+
bgr555_to_rgb565_one_i r10 r10
5664
stmia r0!, {r3-r10}
5765
bge 0b
5866

include/compiler_features.h

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#ifdef __GNUC__
33
# define likely(x) __builtin_expect((x),1)
44
# define unlikely(x) __builtin_expect((x),0)
5+
# define preload __builtin_prefetch
56
# ifdef __clang__
67
# define noinline __attribute__((noinline))
78
# else
@@ -11,6 +12,7 @@
1112
#else
1213
# define likely(x) (x)
1314
# define unlikely(x) (x)
15+
# define preload (x)
1416
# define noinline
1517
# define attr_unused
1618
#endif

libpcsxcore/database.c

+20-37
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ static const char * const fractional_Framerate_hack_db[] =
8282
"SCUS94425", "SCES02104",
8383
};
8484

85+
static const char * const f1_hack_db[] =
86+
{
87+
/* Formula One Arcade */
88+
"SCES03886",
89+
/* Formula One '99 */
90+
"SLUS00870", "SCPS10101", "SCES01979", "SLES01979",
91+
/* Formula One 2000 */
92+
"SLUS01134", "SCES02777", "SCES02778", "SCES02779",
93+
/* Formula One 2001 */
94+
"SCES03404", "SCES03423", "SCES03424", "SCES03524",
95+
};
96+
8597
#define HACK_ENTRY(var, list) \
8698
{ #var, &Config.hacks.var, list, ARRAY_SIZE(list) }
8799

@@ -100,6 +112,7 @@ hack_db[] =
100112
HACK_ENTRY(gpu_timing1024, dualshock_timing1024_hack_db),
101113
HACK_ENTRY(dualshock_init_analog, dualshock_init_analog_hack_db),
102114
HACK_ENTRY(fractional_Framerate, fractional_Framerate_hack_db),
115+
HACK_ENTRY(f1, f1_hack_db),
103116
};
104117

105118
static const struct
@@ -142,35 +155,6 @@ cycle_multiplier_overrides[] =
142155
{ 153, { "SLUS00943" } },
143156
};
144157

145-
static const struct
146-
{
147-
const char * const id;
148-
u32 hacks;
149-
}
150-
lightrec_hacks_db[] =
151-
{
152-
/* Formula One Arcade */
153-
{ "SCES03886", LIGHTREC_HACK_INV_DMA_ONLY },
154-
155-
/* Formula One '99 */
156-
{ "SLUS00870", LIGHTREC_HACK_INV_DMA_ONLY },
157-
{ "SCPS10101", LIGHTREC_HACK_INV_DMA_ONLY },
158-
{ "SCES01979", LIGHTREC_HACK_INV_DMA_ONLY },
159-
{ "SLES01979", LIGHTREC_HACK_INV_DMA_ONLY },
160-
161-
/* Formula One 2000 */
162-
{ "SLUS01134", LIGHTREC_HACK_INV_DMA_ONLY },
163-
{ "SCES02777", LIGHTREC_HACK_INV_DMA_ONLY },
164-
{ "SCES02778", LIGHTREC_HACK_INV_DMA_ONLY },
165-
{ "SCES02779", LIGHTREC_HACK_INV_DMA_ONLY },
166-
167-
/* Formula One 2001 */
168-
{ "SCES03404", LIGHTREC_HACK_INV_DMA_ONLY },
169-
{ "SCES03423", LIGHTREC_HACK_INV_DMA_ONLY },
170-
{ "SCES03424", LIGHTREC_HACK_INV_DMA_ONLY },
171-
{ "SCES03524", LIGHTREC_HACK_INV_DMA_ONLY },
172-
};
173-
174158
/* Function for automatic patching according to GameID. */
175159
void Apply_Hacks_Cdrom(void)
176160
{
@@ -211,6 +195,8 @@ void Apply_Hacks_Cdrom(void)
211195

212196
/* Dynarec game-specific hacks */
213197
ndrc_g.hacks_pergame = 0;
198+
if (Config.hacks.f1)
199+
ndrc_g.hacks_pergame |= NDHACK_THREAD_FORCE; // force without *_ON -> off
214200
Config.cycle_multiplier_override = 0;
215201

216202
for (i = 0; i < ARRAY_SIZE(cycle_multiplier_overrides); i++)
@@ -229,15 +215,12 @@ void Apply_Hacks_Cdrom(void)
229215
}
230216
}
231217

232-
lightrec_hacks = 0;
233-
234-
for (i = 0; drc_is_lightrec() && i < ARRAY_SIZE(lightrec_hacks_db); i++) {
235-
if (strcmp(CdromId, lightrec_hacks_db[i].id) == 0)
236-
{
237-
lightrec_hacks = lightrec_hacks_db[i].hacks;
218+
if (drc_is_lightrec()) {
219+
lightrec_hacks = 0;
220+
if (Config.hacks.f1)
221+
lightrec_hacks |= LIGHTREC_HACK_INV_DMA_ONLY;
222+
if (lightrec_hacks)
238223
SysPrintf("using lightrec_hacks: 0x%x\n", lightrec_hacks);
239-
break;
240-
}
241224
}
242225
}
243226

libpcsxcore/new_dynarec/emu_if.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,10 @@ static void ari64_apply_config()
303303
else
304304
ndrc_g.hacks &= ~NDHACK_NO_STALLS;
305305

306-
thread_changed = (ndrc_g.hacks ^ ndrc_g.hacks_old)
306+
thread_changed = ((ndrc_g.hacks | ndrc_g.hacks_pergame) ^ ndrc_g.hacks_old)
307307
& (NDHACK_THREAD_FORCE | NDHACK_THREAD_FORCE_ON);
308308
if (Config.cycle_multiplier != ndrc_g.cycle_multiplier_old
309-
|| ndrc_g.hacks != ndrc_g.hacks_old)
309+
|| (ndrc_g.hacks | ndrc_g.hacks_pergame) != ndrc_g.hacks_old)
310310
{
311311
new_dynarec_clear_full();
312312
}
@@ -485,7 +485,9 @@ static void ari64_thread_init(void)
485485
{
486486
int enable;
487487

488-
if (ndrc_g.hacks & NDHACK_THREAD_FORCE)
488+
if (ndrc_g.hacks_pergame & NDHACK_THREAD_FORCE)
489+
enable = 0;
490+
else if (ndrc_g.hacks & NDHACK_THREAD_FORCE)
489491
enable = ndrc_g.hacks & NDHACK_THREAD_FORCE_ON;
490492
else {
491493
u32 cpu_count = cpu_features_get_core_amount();

libpcsxcore/new_dynarec/new_dynarec.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -6292,13 +6292,13 @@ void new_dynarec_clear_full(void)
62926292
stat_clear(stat_links);
62936293

62946294
if (ndrc_g.cycle_multiplier_old != Config.cycle_multiplier
6295-
|| ndrc_g.hacks_old != ndrc_g.hacks)
6295+
|| ndrc_g.hacks_old != (ndrc_g.hacks | ndrc_g.hacks_pergame))
62966296
{
62976297
SysPrintf("ndrc config: mul=%d, ha=%x, pex=%d\n",
62986298
get_cycle_multiplier(), ndrc_g.hacks, Config.PreciseExceptions);
62996299
}
63006300
ndrc_g.cycle_multiplier_old = Config.cycle_multiplier;
6301-
ndrc_g.hacks_old = ndrc_g.hacks;
6301+
ndrc_g.hacks_old = ndrc_g.hacks | ndrc_g.hacks_pergame;
63026302
}
63036303

63046304
static int pgsize(void)

libpcsxcore/psxcommon.h

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ typedef struct {
156156
boolean dualshock_init_analog;
157157
boolean gpu_timing1024;
158158
boolean fractional_Framerate;
159+
boolean f1;
159160
} hacks;
160161
} PcsxConfig;
161162

0 commit comments

Comments
 (0)