audio_core/hle: Stub binary requests SaveState and LoadState. (#6684)
* audio_core/hle: Stub binary requests SaveState and LoadState. * audio_core/hle: Fire DSP binary pipe interrupt on request completion instead of tick.
This commit is contained in:
		@@ -85,7 +85,11 @@ std::optional<BinaryMessage> AudioToolboxDecoder::Impl::ProcessRequest(
 | 
			
		||||
    case DecoderCommand::EncodeDecode: {
 | 
			
		||||
        return Decode(request);
 | 
			
		||||
    }
 | 
			
		||||
    case DecoderCommand::Unknown: {
 | 
			
		||||
    case DecoderCommand::Shutdown:
 | 
			
		||||
    case DecoderCommand::SaveState:
 | 
			
		||||
    case DecoderCommand::LoadState: {
 | 
			
		||||
        LOG_WARNING(Audio_DSP, "Got unimplemented binary request: {}",
 | 
			
		||||
                    static_cast<u16>(request.header.cmd));
 | 
			
		||||
        BinaryMessage response = request;
 | 
			
		||||
        response.header.result = ResultStatus::Success;
 | 
			
		||||
        return response;
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,9 @@ std::optional<BinaryMessage> NullDecoder::ProcessRequest(const BinaryMessage& re
 | 
			
		||||
    BinaryMessage response{};
 | 
			
		||||
    switch (request.header.cmd) {
 | 
			
		||||
    case DecoderCommand::Init:
 | 
			
		||||
    case DecoderCommand::Unknown:
 | 
			
		||||
    case DecoderCommand::Shutdown:
 | 
			
		||||
    case DecoderCommand::SaveState:
 | 
			
		||||
    case DecoderCommand::LoadState:
 | 
			
		||||
        response = request;
 | 
			
		||||
        response.header.result = ResultStatus::Success;
 | 
			
		||||
        return response;
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,16 @@
 | 
			
		||||
namespace AudioCore::HLE {
 | 
			
		||||
 | 
			
		||||
enum class DecoderCommand : u16 {
 | 
			
		||||
    /// Initializes the decoder.
 | 
			
		||||
    Init = 0,
 | 
			
		||||
    /// Decodes/encodes a data frame.
 | 
			
		||||
    EncodeDecode = 1,
 | 
			
		||||
    Unknown = 2, // Probably UnInit
 | 
			
		||||
    /// Shuts down the decoder.
 | 
			
		||||
    Shutdown = 2,
 | 
			
		||||
    /// Loads the saved decoder state. Used for DSP wake.
 | 
			
		||||
    LoadState = 3,
 | 
			
		||||
    /// Saves the decoder state. Used for DSP sleep.
 | 
			
		||||
    SaveState = 4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum class DecoderCodec : u16 {
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,11 @@ std::optional<BinaryMessage> FDKDecoder::Impl::ProcessRequest(const BinaryMessag
 | 
			
		||||
    case DecoderCommand::EncodeDecode: {
 | 
			
		||||
        return Decode(request);
 | 
			
		||||
    }
 | 
			
		||||
    case DecoderCommand::Unknown: {
 | 
			
		||||
    case DecoderCommand::Shutdown:
 | 
			
		||||
    case DecoderCommand::SaveState:
 | 
			
		||||
    case DecoderCommand::LoadState: {
 | 
			
		||||
        LOG_WARNING(Audio_DSP, "Got unimplemented binary request: {}",
 | 
			
		||||
                    static_cast<u16>(request.header.cmd));
 | 
			
		||||
        BinaryMessage response = request;
 | 
			
		||||
        response.header.result = ResultStatus::Success;
 | 
			
		||||
        return response;
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,11 @@ std::optional<BinaryMessage> FFMPEGDecoder::Impl::ProcessRequest(const BinaryMes
 | 
			
		||||
    case DecoderCommand::EncodeDecode: {
 | 
			
		||||
        return Decode(request);
 | 
			
		||||
    }
 | 
			
		||||
    case DecoderCommand::Unknown: {
 | 
			
		||||
    case DecoderCommand::Shutdown:
 | 
			
		||||
    case DecoderCommand::SaveState:
 | 
			
		||||
    case DecoderCommand::LoadState: {
 | 
			
		||||
        LOG_WARNING(Audio_DSP, "Got unimplemented binary request: {}",
 | 
			
		||||
                    static_cast<u16>(request.header.cmd));
 | 
			
		||||
        BinaryMessage response = request;
 | 
			
		||||
        response.header.result = ResultStatus::Success;
 | 
			
		||||
        return response;
 | 
			
		||||
 
 | 
			
		||||
@@ -319,6 +319,10 @@ void DspHle::Impl::PipeWrite(DspPipe pipe_number, std::span<const u8> buffer) {
 | 
			
		||||
            pipe_data[static_cast<u32>(pipe_number)].resize(sizeof(value));
 | 
			
		||||
            std::memcpy(pipe_data[static_cast<u32>(pipe_number)].data(), &value, sizeof(value));
 | 
			
		||||
        }
 | 
			
		||||
        auto dsp = dsp_dsp.lock();
 | 
			
		||||
        if (dsp) {
 | 
			
		||||
            dsp->SignalInterrupt(InterruptType::Pipe, DspPipe::Binary);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    default:
 | 
			
		||||
@@ -461,8 +465,6 @@ void DspHle::Impl::AudioTickCallback(s64 cycles_late) {
 | 
			
		||||
        // TODO(merry): Signal all the other interrupts as appropriate.
 | 
			
		||||
        if (auto service = dsp_dsp.lock()) {
 | 
			
		||||
            service->SignalInterrupt(InterruptType::Pipe, DspPipe::Audio);
 | 
			
		||||
            // HACK(merry): Added to prevent regressions. Will remove soon.
 | 
			
		||||
            service->SignalInterrupt(InterruptType::Pipe, DspPipe::Binary);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,11 @@ std::optional<BinaryMessage> MediaNDKDecoder::Impl::ProcessRequest(const BinaryM
 | 
			
		||||
    case DecoderCommand::EncodeDecode: {
 | 
			
		||||
        return Decode(request);
 | 
			
		||||
    }
 | 
			
		||||
    case DecoderCommand::Unknown: {
 | 
			
		||||
    case DecoderCommand::Shutdown:
 | 
			
		||||
    case DecoderCommand::SaveState:
 | 
			
		||||
    case DecoderCommand::LoadState: {
 | 
			
		||||
        LOG_WARNING(Audio_DSP, "Got unimplemented binary request: {}",
 | 
			
		||||
                    static_cast<u16>(request.header.cmd));
 | 
			
		||||
        BinaryMessage response = request;
 | 
			
		||||
        response.header.result = ResultStatus::Success;
 | 
			
		||||
        return response;
 | 
			
		||||
 
 | 
			
		||||
@@ -115,7 +115,11 @@ std::optional<BinaryMessage> WMFDecoder::Impl::ProcessRequest(const BinaryMessag
 | 
			
		||||
    case DecoderCommand::EncodeDecode: {
 | 
			
		||||
        return Decode(request);
 | 
			
		||||
    }
 | 
			
		||||
    case DecoderCommand::Unknown: {
 | 
			
		||||
    case DecoderCommand::Shutdown:
 | 
			
		||||
    case DecoderCommand::SaveState:
 | 
			
		||||
    case DecoderCommand::LoadState: {
 | 
			
		||||
        LOG_WARNING(Audio_DSP, "Got unimplemented binary request: {}",
 | 
			
		||||
                    static_cast<u16>(request.header.cmd));
 | 
			
		||||
        BinaryMessage response = request;
 | 
			
		||||
        response.header.result = ResultStatus::Success;
 | 
			
		||||
        return response;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user