behavior_info.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <array>
  6. #include <vector>
  7. #include "common/common_funcs.h"
  8. #include "common/common_types.h"
  9. #include "common/swap.h"
  10. namespace AudioCore {
  11. class BehaviorInfo {
  12. public:
  13. struct ErrorInfo {
  14. u32_le result{};
  15. INSERT_PADDING_WORDS(1);
  16. u64_le result_info{};
  17. };
  18. static_assert(sizeof(ErrorInfo) == 0x10, "ErrorInfo is an invalid size");
  19. struct InParams {
  20. u32_le revision{};
  21. u32_le padding{};
  22. u64_le flags{};
  23. };
  24. static_assert(sizeof(InParams) == 0x10, "InParams is an invalid size");
  25. struct OutParams {
  26. std::array<ErrorInfo, 10> errors{};
  27. u32_le error_count{};
  28. INSERT_PADDING_BYTES(12);
  29. };
  30. static_assert(sizeof(OutParams) == 0xb0, "OutParams is an invalid size");
  31. explicit BehaviorInfo();
  32. ~BehaviorInfo();
  33. bool UpdateOutput(std::vector<u8>& buffer, std::size_t offset);
  34. void ClearError();
  35. void UpdateFlags(u64_le dest_flags);
  36. void SetUserRevision(u32_le revision);
  37. [[nodiscard]] u32_le GetUserRevision() const;
  38. [[nodiscard]] u32_le GetProcessRevision() const;
  39. [[nodiscard]] bool IsAdpcmLoopContextBugFixed() const;
  40. [[nodiscard]] bool IsSplitterSupported() const;
  41. [[nodiscard]] bool IsLongSizePreDelaySupported() const;
  42. [[nodiscard]] bool IsAudioRendererProcessingTimeLimit80PercentSupported() const;
  43. [[nodiscard]] bool IsAudioRendererProcessingTimeLimit75PercentSupported() const;
  44. [[nodiscard]] bool IsAudioRendererProcessingTimeLimit70PercentSupported() const;
  45. [[nodiscard]] bool IsElapsedFrameCountSupported() const;
  46. [[nodiscard]] bool IsMemoryPoolForceMappingEnabled() const;
  47. [[nodiscard]] bool IsFlushVoiceWaveBuffersSupported() const;
  48. [[nodiscard]] bool IsVoicePlayedSampleCountResetAtLoopPointSupported() const;
  49. [[nodiscard]] bool IsVoicePitchAndSrcSkippedSupported() const;
  50. [[nodiscard]] bool IsMixInParameterDirtyOnlyUpdateSupported() const;
  51. [[nodiscard]] bool IsSplitterBugFixed() const;
  52. void CopyErrorInfo(OutParams& dst);
  53. private:
  54. u32_le process_revision{};
  55. u32_le user_revision{};
  56. u64_le flags{};
  57. std::array<ErrorInfo, 10> errors{};
  58. std::size_t error_count{};
  59. };
  60. } // namespace AudioCore