From 1afd440c863c898afd2fcc6ad20d744436e89798 Mon Sep 17 00:00:00 2001 From: byuu <2107894+byuu@users.noreply.github.com> Date: Thu, 16 Jan 2020 05:34:00 +0900 Subject: [PATCH] Revert Emulator::Audio to use doubles instead of floats * fixes ODR violations, but is slightly slower (378fps->376fps) --- bsnes/emulator/audio/audio.cpp | 2 -- bsnes/emulator/audio/audio.hpp | 1 - bsnes/emulator/platform.hpp | 2 +- bsnes/sfc/coprocessor/icd/interface.cpp | 2 +- bsnes/target-bsnes/program/platform.cpp | 9 ++++----- bsnes/target-bsnes/program/program.hpp | 2 +- 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/bsnes/emulator/audio/audio.cpp b/bsnes/emulator/audio/audio.cpp index cd30ee8d..8fc279cc 100644 --- a/bsnes/emulator/audio/audio.cpp +++ b/bsnes/emulator/audio/audio.cpp @@ -1,5 +1,3 @@ -#define double float - namespace Emulator { #include "stream.cpp" diff --git a/bsnes/emulator/audio/audio.hpp b/bsnes/emulator/audio/audio.hpp index e1e20c65..d1705523 100644 --- a/bsnes/emulator/audio/audio.hpp +++ b/bsnes/emulator/audio/audio.hpp @@ -1,5 +1,4 @@ #pragma once -#define double float #include #include diff --git a/bsnes/emulator/platform.hpp b/bsnes/emulator/platform.hpp index 6c0c2359..8eae0c0f 100644 --- a/bsnes/emulator/platform.hpp +++ b/bsnes/emulator/platform.hpp @@ -17,7 +17,7 @@ struct Platform { virtual auto open(uint id, string name, vfs::file::mode mode, bool required = false) -> shared_pointer { return {}; } virtual auto load(uint id, string name, string type, vector options = {}) -> Load { return {}; } virtual auto videoFrame(const uint16* data, uint pitch, uint width, uint height, uint scale) -> void {} - virtual auto audioFrame(const float* samples, uint channels) -> void {} + virtual auto audioFrame(const double* samples, uint channels) -> void {} virtual auto inputPoll(uint port, uint device, uint input) -> int16 { return 0; } virtual auto inputRumble(uint port, uint device, uint input, bool enable) -> void {} virtual auto dipSettings(Markup::Node node) -> uint { return 0; } diff --git a/bsnes/sfc/coprocessor/icd/interface.cpp b/bsnes/sfc/coprocessor/icd/interface.cpp index 3615e32d..37f8eeb0 100644 --- a/bsnes/sfc/coprocessor/icd/interface.cpp +++ b/bsnes/sfc/coprocessor/icd/interface.cpp @@ -20,7 +20,7 @@ auto ICD::ppuWrite(uint2 color) -> void { } auto ICD::apuWrite(float left, float right) -> void { - float samples[] = {left, right}; + double samples[] = {left, right}; if(!system.runAhead) stream->write(samples); } diff --git a/bsnes/target-bsnes/program/platform.cpp b/bsnes/target-bsnes/program/platform.cpp index 3b8b4fdc..ff755a7e 100644 --- a/bsnes/target-bsnes/program/platform.cpp +++ b/bsnes/target-bsnes/program/platform.cpp @@ -253,14 +253,13 @@ auto Program::videoFrame(const uint16* data, uint pitch, uint width, uint height } } -auto Program::audioFrame(const float* samples, uint channels) -> void { +auto Program::audioFrame(const double* samples, uint channels) -> void { if(mute) { double silence[] = {0.0, 0.0}; - return audio.output(silence); + audio.output(silence); + } else { + audio.output(samples); } - - double frame[] = {samples[0], samples[1]}; - audio.output(frame); } auto Program::inputPoll(uint port, uint device, uint input) -> int16 { diff --git a/bsnes/target-bsnes/program/program.hpp b/bsnes/target-bsnes/program/program.hpp index 24b3357d..a449cdf3 100644 --- a/bsnes/target-bsnes/program/program.hpp +++ b/bsnes/target-bsnes/program/program.hpp @@ -10,7 +10,7 @@ struct Program : Lock, Emulator::Platform { auto open(uint id, string name, vfs::file::mode mode, bool required) -> shared_pointer override; auto load(uint id, string name, string type, vector options = {}) -> Emulator::Platform::Load override; auto videoFrame(const uint16* data, uint pitch, uint width, uint height, uint scale) -> void override; - auto audioFrame(const float* samples, uint channels) -> void override; + auto audioFrame(const double* samples, uint channels) -> void override; auto inputPoll(uint port, uint device, uint input) -> int16 override; auto inputRumble(uint port, uint device, uint input, bool enable) -> void override;