Merge remote-tracking branch 'upstream/canary_experimental' into edge

This commit is contained in:
Herman S.
2025-12-02 09:59:56 +09:00
5 changed files with 25 additions and 3 deletions
+6
View File
@@ -146,6 +146,12 @@ struct XMA_CONTEXT_DATA {
const uint32_t GetCurrentInputBufferPacketCount() const {
return GetInputBufferPacketCount(current_buffer);
}
const bool IsStreamingContext() const {
return (input_buffer_0_packet_count | input_buffer_1_packet_count) == 1;
}
const bool IsConsumeOnlyContext() const {
return (input_buffer_0_packet_count | input_buffer_1_packet_count) == 0;
}
};
static_assert_size(XMA_CONTEXT_DATA, 64);
+11 -1
View File
@@ -128,6 +128,15 @@ bool XmaContextNew::Work() {
RingBuffer output_rb = PrepareOutputRingBuffer(&data);
if (data.IsConsumeOnlyContext()) {
Consume(&output_rb, &data);
if (data.output_buffer_read_offset == data.output_buffer_write_offset) {
Clear();
}
data.Store(context_ptr);
return true;
}
const int32_t minimum_subframe_decode_count =
(data.subframe_decode_count * 2) - 1;
@@ -257,7 +266,8 @@ void XmaContextNew::SwapInputBuffer(XMA_CONTEXT_DATA* data) {
data->input_buffer_read_offset = kBitsPerPacketHeader;
}
void XmaContextNew::Consume(RingBuffer* output_rb, XMA_CONTEXT_DATA* data) {
void XmaContextNew::Consume(RingBuffer* XE_RESTRICT output_rb,
const XMA_CONTEXT_DATA* const XE_RESTRICT data) {
if (!current_frame_remaining_subframes_) {
return;
}
+2 -1
View File
@@ -106,7 +106,8 @@ class XmaContextNew : public XmaContext {
static uint32_t GetCurrentInputBufferSize(XMA_CONTEXT_DATA* data);
void Decode(XMA_CONTEXT_DATA* data);
void Consume(RingBuffer* output_rb, XMA_CONTEXT_DATA* data);
void Consume(RingBuffer* XE_RESTRICT output_rb,
const XMA_CONTEXT_DATA* const XE_RESTRICT data);
void UpdateLoopStatus(XMA_CONTEXT_DATA* data);
int PrepareDecoder(int sample_rate, bool is_two_channel);
+4
View File
@@ -886,6 +886,10 @@ X_STATUS Emulator::InstallContentPackage(
vfs::XContentContainerDevice::CreateContentDevice("", path);
if (!device || !device->Initialize()) {
installation_info.installation_state_ = InstallState::failed;
installation_info.installation_error_message_ =
"Device initialization failed!";
installation_info.installation_result_ = X_STATUS_ACCESS_DENIED;
XELOGE("Failed to initialize device");
return X_STATUS_INVALID_PARAMETER;
}
@@ -1025,8 +1025,9 @@ SHIM_CALL _vsnprintf_entry(PPCContext* ppc_context) {
buffer[count] = '\0';
}
} else {
// Overflowed buffer. We still return the count we would have written.
// Overflowed buffer.
std::memcpy(buffer, data.str().c_str(), buffer_count);
count = -1;
}
SHIM_SET_RETURN_32(count);
}