diff options
| author | 2017-04-30 21:36:00 -0700 | |
|---|---|---|
| committer | 2017-05-09 21:44:00 -0700 | |
| commit | b4a93cfddecdb939562e56d7609657d2f14b6702 (patch) | |
| tree | 75da1f521209b74fa82a982356b878bd1c475562 /src/audio_core/hle/dsp.cpp | |
| parent | Memory: Add constants for the n3DS additional RAM (diff) | |
| download | yuzu-b4a93cfddecdb939562e56d7609657d2f14b6702.tar.gz yuzu-b4a93cfddecdb939562e56d7609657d2f14b6702.tar.xz yuzu-b4a93cfddecdb939562e56d7609657d2f14b6702.zip | |
DSP: Create backing memory for entire DSP RAM
Also move address space mapping out of video_core.
Diffstat (limited to 'src/audio_core/hle/dsp.cpp')
| -rw-r--r-- | src/audio_core/hle/dsp.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/audio_core/hle/dsp.cpp b/src/audio_core/hle/dsp.cpp index 31421fdc6..260b182ed 100644 --- a/src/audio_core/hle/dsp.cpp +++ b/src/audio_core/hle/dsp.cpp | |||
| @@ -16,31 +16,33 @@ namespace HLE { | |||
| 16 | 16 | ||
| 17 | // Region management | 17 | // Region management |
| 18 | 18 | ||
| 19 | std::array<SharedMemory, 2> g_regions; | 19 | DspMemory g_dsp_memory; |
| 20 | 20 | ||
| 21 | static size_t CurrentRegionIndex() { | 21 | static size_t CurrentRegionIndex() { |
| 22 | // The region with the higher frame counter is chosen unless there is wraparound. | 22 | // The region with the higher frame counter is chosen unless there is wraparound. |
| 23 | // This function only returns a 0 or 1. | 23 | // This function only returns a 0 or 1. |
| 24 | u16 frame_counter_0 = g_dsp_memory.region_0.frame_counter; | ||
| 25 | u16 frame_counter_1 = g_dsp_memory.region_1.frame_counter; | ||
| 24 | 26 | ||
| 25 | if (g_regions[0].frame_counter == 0xFFFFu && g_regions[1].frame_counter != 0xFFFEu) { | 27 | if (frame_counter_0 == 0xFFFFu && frame_counter_1 != 0xFFFEu) { |
| 26 | // Wraparound has occurred. | 28 | // Wraparound has occurred. |
| 27 | return 1; | 29 | return 1; |
| 28 | } | 30 | } |
| 29 | 31 | ||
| 30 | if (g_regions[1].frame_counter == 0xFFFFu && g_regions[0].frame_counter != 0xFFFEu) { | 32 | if (frame_counter_1 == 0xFFFFu && frame_counter_0 != 0xFFFEu) { |
| 31 | // Wraparound has occurred. | 33 | // Wraparound has occurred. |
| 32 | return 0; | 34 | return 0; |
| 33 | } | 35 | } |
| 34 | 36 | ||
| 35 | return (g_regions[0].frame_counter > g_regions[1].frame_counter) ? 0 : 1; | 37 | return (frame_counter_0 > frame_counter_1) ? 0 : 1; |
| 36 | } | 38 | } |
| 37 | 39 | ||
| 38 | static SharedMemory& ReadRegion() { | 40 | static SharedMemory& ReadRegion() { |
| 39 | return g_regions[CurrentRegionIndex()]; | 41 | return CurrentRegionIndex() == 0 ? g_dsp_memory.region_0 : g_dsp_memory.region_1; |
| 40 | } | 42 | } |
| 41 | 43 | ||
| 42 | static SharedMemory& WriteRegion() { | 44 | static SharedMemory& WriteRegion() { |
| 43 | return g_regions[1 - CurrentRegionIndex()]; | 45 | return CurrentRegionIndex() != 0 ? g_dsp_memory.region_0 : g_dsp_memory.region_1; |
| 44 | } | 46 | } |
| 45 | 47 | ||
| 46 | // Audio processing and mixing | 48 | // Audio processing and mixing |