Optimize Sound Mixer (#182)

* Add sse2neon

* Optimize Sound Mixer

* Replace ssize_t with size_t

* Remove a #ifndef NO_SEGMENTED_MEMORY block
This commit is contained in:
coco875 2025-02-04 17:49:20 +01:00 committed by GitHub
parent c6f72a287f
commit 301bbd3cd9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 659 additions and 173 deletions

View File

@ -215,6 +215,12 @@ if (MSVC)
endif()
endif()
#=================== SSE2NEON ===================
set(SSE2NEON_DIR ${CMAKE_BINARY_DIR}/_deps/sse2neon)
file(DOWNLOAD "https://raw.githubusercontent.com/DLTcollab/sse2neon/refs/heads/master/sse2neon.h" "${SSE2NEON_DIR}/sse2neon.h")
include_directories(${SSE2NEON_DIR})
#==============================================================================#
# Libultraship Integration #
#==============================================================================#

View File

@ -129,9 +129,9 @@ void audio_dma_copy_async(uintptr_t devAddr, void* vAddr, size_t nbytes, OSMesgQ
* Performs a partial asynchronous (normal priority) DMA copy. This is limited
* to 0x1000 bytes transfer at once.
*/
void audio_dma_partial_copy_async(uintptr_t* devAddr, u8** vAddr, ssize_t* remaining, OSMesgQueue* queue,
void audio_dma_partial_copy_async(uintptr_t* devAddr, u8** vAddr, size_t* remaining, OSMesgQueue* queue,
OSIoMesg* mesg) {
ssize_t transfer = (*remaining >= 0x1000 ? 0x1000 : *remaining);
size_t transfer = (*remaining >= 0x1000 ? 0x1000 : *remaining);
*remaining -= transfer;
osInvalDCache(*vAddr, transfer);
osPiStartDma(mesg, OS_MESG_PRI_NORMAL, OS_READ, *devAddr, *vAddr, transfer, queue);
@ -174,7 +174,7 @@ void* dma_sample_data(uintptr_t devAddr, u32 size, s32 arg2, u8* dmaIndexRef) {
u32 transfer;
u32 i;
u32 dmaIndex;
ssize_t bufferPos;
size_t bufferPos;
UNUSED u32 pad;
if (arg2 != 0 || *dmaIndexRef >= sSampleDmaListSize1) {
@ -604,11 +604,11 @@ uint8_t* load_sequence_immediate(s32 seqId, s32 arg1) {
return GameEngine_LoadSequence(seqId)->data;
}
struct CtlEntry* load_banks_immediate(s32 seqId, u8 *outDefaultBank) {
struct CtlEntry* load_banks_immediate(s32 seqId, u8* outDefaultBank) {
u32 bankId;
struct AudioSequenceData *seqData = GameEngine_LoadSequence(seqId);
struct CtlEntry *output;
for(size_t i = 0; i < seqData->bankCount; i++) {
struct AudioSequenceData* seqData = GameEngine_LoadSequence(seqId);
struct CtlEntry* output;
for (size_t i = 0; i < seqData->bankCount; i++) {
output = GameEngine_LoadBank(bankId = seqData->banks[i]);
}
*outDefaultBank = bankId;
@ -659,7 +659,7 @@ void load_sequence(u32 player, u32 seqId, s32 loadAsync) {
}
void load_sequence_internal(u32 player, u32 seqId, s32 loadAsync) {
struct SequencePlayer *seqPlayer = &gSequencePlayers[player];
struct SequencePlayer* seqPlayer = &gSequencePlayers[player];
if (seqId >= gSequenceCount) {
return;
@ -808,7 +808,6 @@ void audio_init(void) {
audio_set_player_volume(SEQ_PLAYER_LEVEL, CVarGetFloat("gMainMusicVolume", 1.0f));
audio_set_player_volume(SEQ_PLAYER_ENV, CVarGetFloat("gEnvironmentVolume", 1.0f));
audio_set_player_volume(SEQ_PLAYER_SFX, CVarGetFloat("gSFXMusicVolume", 1.0f));
}
#else
#ifdef VERSION_EU

View File

@ -26,7 +26,7 @@ struct SharedDma {
void audio_init(void);
void audio_dma_copy_immediate(u8* devAddr, void* vAddr, size_t nbytes);
void audio_dma_copy_async(uintptr_t, void*, size_t, OSMesgQueue*, OSIoMesg*);
void audio_dma_partial_copy_async(uintptr_t*, u8**, ssize_t*, OSMesgQueue*, OSIoMesg*);
void audio_dma_partial_copy_async(uintptr_t*, u8**, size_t*, OSMesgQueue*, OSIoMesg*);
void decrease_sample_dma_ttls(void);
void* dma_sample_data(uintptr_t, u32, s32, u8*);
void func_800BB030(s32);

File diff suppressed because it is too large Load Diff

View File

@ -229,11 +229,6 @@ void process_notes(void) {
note = &gNotes[i];
playbackState = (struct NotePlaybackState*) &note->priority;
if (note->parentLayer != NO_LAYER) {
#ifndef NO_SEGMENTED_MEMORY
if ((uintptr_t) playbackState->parentLayer < 0x7fffffffU) {
continue;
}
#endif
#ifdef VERSION_EU_1_0
// Just threw these in here. They are probably wrong place and variables.