From 9ad8abfa940cd5c13eb0653639ea86736b65a2c4 Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 2 Jan 2015 04:12:35 +0200 Subject: spu: get rid of bStop, clean up --- plugins/dfsound/externals.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'plugins/dfsound/externals.h') diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 7935cb9..d1d081a 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -53,10 +53,17 @@ // struct defines /////////////////////////////////////////////////////////// +enum ADSR_State { + ADSR_ATTACK = 0, + ADSR_DECAY = 1, + ADSR_SUSTAIN = 2, + ADSR_RELEASE = 3, +}; + // ADSR INFOS PER CHANNEL typedef struct { - unsigned char State:2; + unsigned char State:2; // ADSR_State unsigned char AttackModeExp:1; unsigned char SustainModeExp:1; unsigned char SustainIncrease:1; @@ -93,7 +100,6 @@ typedef struct unsigned char * pCurr; // current pos in sound mem unsigned char * pLoop; // loop ptr in sound mem - unsigned int bStop:1; // is channel stopped (sample _can_ still be playing, ADSR Release phase) unsigned int bReverb:1; // can we do reverb on this channel? must have ctrl register bit, to get active unsigned int bRVBActive:1; // reverb active flag unsigned int bNoise:1; // noise active flag -- cgit v1.2.3 From 63a4f6b6a3b0315590cd3009df2c92480ed2d98b Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 2 Jan 2015 04:13:50 +0200 Subject: spu: threaded implementation unlike original P.E.Op.S. implementation, the goal here is to carefully avoid any side effects caused by having the thread enabled --- plugins/dfsound/externals.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'plugins/dfsound/externals.h') diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index d1d081a..3a3ff68 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -237,16 +237,16 @@ extern SPUInfo spu; extern SPUCHAN s_chan[]; extern REVERBInfo rvb; -void do_samples(unsigned int cycles_to); +void do_samples(unsigned int cycles_to, int do_sync); void schedule_next_irq(void); #define regAreaGet(ch,offset) \ spu.regArea[((ch<<4)|(offset))>>1] -#define do_samples_if_needed(c) \ +#define do_samples_if_needed(c, sync) \ do { \ - if ((int)((c) - spu.cycles_played) >= 16 * 768) \ - do_samples(c); \ + if (sync || (int)((c) - spu.cycles_played) >= 16 * 768) \ + do_samples(c, sync); \ } while (0) #endif -- cgit v1.2.3 From 5514a050f4e936f5c333fa1271b11bf5a6a9ea39 Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 4 Jan 2015 01:43:23 +0200 Subject: spu: start offload code to TI C64x DSP --- plugins/dfsound/externals.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'plugins/dfsound/externals.h') diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 3a3ff68..3047afc 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -181,7 +181,10 @@ typedef struct unsigned short spuStat; unsigned int spuAddr; - unsigned char * spuMemC; + union { + unsigned char *spuMemC; + unsigned short *spuMem; + }; unsigned char * pSpuIrq; unsigned int cycles_played; @@ -222,9 +225,10 @@ typedef struct int iLeftXAVol; int iRightXAVol; - int pad[32]; + SPUCHAN * s_chan; + + int pad[31]; unsigned short regArea[0x400]; - unsigned short spuMem[256*1024]; } SPUInfo; /////////////////////////////////////////////////////////// @@ -234,7 +238,6 @@ typedef struct #ifndef _IN_SPU extern SPUInfo spu; -extern SPUCHAN s_chan[]; extern REVERBInfo rvb; void do_samples(unsigned int cycles_to, int do_sync); -- cgit v1.2.3 From de4a0279efefdd2e4595c8fc27f1564f4bff9341 Mon Sep 17 00:00:00 2001 From: notaz Date: Mon, 5 Jan 2015 04:27:03 +0200 Subject: spu: finish offload code to TI C64x DSP rather disappointing result so far, though :( --- plugins/dfsound/externals.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'plugins/dfsound/externals.h') diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 3047afc..d3bcbc6 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -110,8 +110,6 @@ typedef struct int iRightVolume; // right volume ADSRInfoEx ADSRX; int iRawPitch; // raw pitch (0...3fff) - - int SB[32+4]; } SPUCHAN; /////////////////////////////////////////////////////////// @@ -175,6 +173,8 @@ typedef struct // psx buffers / addresses +#define SB_SIZE (32 + 4) + typedef struct { unsigned short spuCtrl; @@ -226,8 +226,9 @@ typedef struct int iRightXAVol; SPUCHAN * s_chan; + int * SB; - int pad[31]; + int pad[30]; unsigned short regArea[0x400]; } SPUInfo; -- cgit v1.2.3 From 3bd31caf9e9f5ddab2bf4fbdb5a129f4972c45f3 Mon Sep 17 00:00:00 2001 From: notaz Date: Sat, 10 Jan 2015 01:55:24 +0200 Subject: spu: support multiple pending buffers for threaded implementation --- plugins/dfsound/externals.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'plugins/dfsound/externals.h') diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index d3bcbc6..4832fac 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -206,8 +206,6 @@ typedef struct void (CALLBACK *cddavCallback)(unsigned short,unsigned short); void (CALLBACK *scheduleCallback)(unsigned int); - int * sRVBStart; - xa_decode_t * xapGlobal; unsigned int * XAFeed; unsigned int * XAPlay; @@ -228,7 +226,10 @@ typedef struct SPUCHAN * s_chan; int * SB; - int pad[30]; + int * RVB; + int * SSumLR; + + int pad[29]; unsigned short regArea[0x400]; } SPUInfo; -- cgit v1.2.3 From 05c7cec77522f04857f655474574469a5e66661d Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 11 Jan 2015 03:35:32 +0200 Subject: spu: put reverb on the thread too and more stuff to work struct --- plugins/dfsound/externals.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'plugins/dfsound/externals.h') diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 4832fac..f6fc440 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -28,6 +28,11 @@ #define noinline #define unlikely(x) x #endif +#if defined(__GNUC__) && !defined(_TMS320C6X) +#define preload __builtin_prefetch +#else +#define preload(...) +#endif #define PSE_LT_SPU 4 #define PSE_SPU_ERR_SUCCESS 0 @@ -121,8 +126,6 @@ typedef struct int VolLeft; int VolRight; - int iRVBLeft; - int iRVBRight; int FB_SRC_A; // (offset) int FB_SRC_B; // (offset) @@ -224,9 +227,10 @@ typedef struct int iRightXAVol; SPUCHAN * s_chan; - int * SB; + REVERBInfo * rvb; - int * RVB; + // buffers + int * SB; int * SSumLR; int pad[29]; @@ -240,7 +244,6 @@ typedef struct #ifndef _IN_SPU extern SPUInfo spu; -extern REVERBInfo rvb; void do_samples(unsigned int cycles_to, int do_sync); void schedule_next_irq(void); -- cgit v1.2.3